import React from "react"; import useGraph from "src/store/useGraph"; const useToggleHide = () => { const getCollapsedNodeIds = useGraph(state => state.getCollapsedNodeIds); const getCollapsedEdgeIds = useGraph(state => state.getCollapsedEdgeIds); React.useEffect(() => { validateHiddenNodes(getCollapsedNodeIds(), getCollapsedEdgeIds()); }, [getCollapsedEdgeIds, getCollapsedNodeIds]); return { validateHiddenNodes: () => validateHiddenNodes(getCollapsedNodeIds(), getCollapsedEdgeIds()), }; }; function validateHiddenNodes(collapsedNodeIs: string[], collapsedEdgeIds: string[]) { const nodeList = collapsedNodeIs.map(id => `[id$="node-${id}"]`); const edgeList = collapsedEdgeIds.map(id => `[class$="edge-${id}"]`); const hiddenItems = document.body.querySelectorAll(".hide"); hiddenItems.forEach(item => item.classList.remove("hide")); if (nodeList.length) { const selectedNodes = document.body.querySelectorAll(nodeList.join(",")); selectedNodes.forEach(node => node.classList.add("hide")); } if (edgeList.length) { const selectedEdges = document.body.querySelectorAll(edgeList.join(",")); selectedEdges.forEach(edge => edge.classList.add("hide")); } } export default useToggleHide;