GraphCanvas.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import React from "react";
  2. import { Graph } from "src/components/Graph";
  3. import { NodeModal } from "src/containers/Modals/NodeModal";
  4. import useGraph from "src/store/useGraph";
  5. export const GraphCanvas = ({ isWidget = false }: { isWidget?: boolean }) => {
  6. const [isModalVisible, setModalVisible] = React.useState(false);
  7. const [selectedNode, setSelectedNode] = React.useState<[string, string][]>([]);
  8. const collapsedNodes = useGraph(state => state.collapsedNodes);
  9. const collapsedEdges = useGraph(state => state.collapsedEdges);
  10. const openModal = React.useCallback(() => setModalVisible(true), []);
  11. React.useEffect(() => {
  12. const nodeList = collapsedNodes.map(id => `[id$="node-${id}"]`);
  13. const edgeList = collapsedEdges.map(id => `[class$="edge-${id}"]`);
  14. const hiddenItems = document.querySelectorAll(".hide");
  15. hiddenItems.forEach(item => item.classList.remove("hide"));
  16. if (nodeList.length) {
  17. const selectedNodes = document.querySelectorAll(nodeList.join(","));
  18. selectedNodes.forEach(node => node.classList.add("hide"));
  19. }
  20. if (edgeList.length) {
  21. const selectedEdges = document.querySelectorAll(edgeList.join(","));
  22. selectedEdges.forEach(edge => edge.classList.add("hide"));
  23. }
  24. }, [collapsedNodes, collapsedEdges]);
  25. return (
  26. <>
  27. <Graph openModal={openModal} setSelectedNode={setSelectedNode} isWidget={isWidget} />
  28. <NodeModal
  29. selectedNode={selectedNode}
  30. visible={isModalVisible}
  31. closeModal={() => setModalVisible(false)}
  32. />
  33. </>
  34. );
  35. };