GraphCanvas.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 openModal = React.useCallback(() => setModalVisible(true), []);
  9. const collapsedNodes = useGraph(state => state.collapsedNodes);
  10. const collapsedEdges = useGraph(state => state.collapsedEdges);
  11. const loading = useGraph(state => state.loading);
  12. React.useEffect(() => {
  13. const nodeList = collapsedNodes.map(id => `[id$="node-${id}"]`);
  14. const edgeList = collapsedEdges.map(id => `[class$="edge-${id}"]`);
  15. const hiddenItems = document.querySelectorAll(".hide");
  16. hiddenItems.forEach(item => item.classList.remove("hide"));
  17. if (nodeList.length) {
  18. const selectedNodes = document.querySelectorAll(nodeList.join(","));
  19. const selectedEdges = document.querySelectorAll(edgeList.join(","));
  20. selectedNodes.forEach(node => node.classList.add("hide"));
  21. selectedEdges.forEach(edge => edge.classList.add("hide"));
  22. }
  23. }, [collapsedNodes, collapsedEdges, loading]);
  24. return (
  25. <>
  26. <Graph
  27. openModal={openModal}
  28. setSelectedNode={setSelectedNode}
  29. isWidget={isWidget}
  30. />
  31. {!isWidget && (
  32. <NodeModal
  33. selectedNode={selectedNode}
  34. visible={isModalVisible}
  35. closeModal={() => setModalVisible(false)}
  36. />
  37. )}
  38. </>
  39. );
  40. };