export default function useManageElementsVisibility()

in packages/graph-explorer/src/components/Graph/hooks/useManageElementsVisibility.ts [15:95]


export default function useManageElementsVisibility({
  cy,
  hiddenNodesIds,
  hiddenEdgesIds,
  outOfFocusNodesIds,
  outOfFocusEdgesIds,
  graphStructureVersion,
  hideEdges,
}: UseManageElementsSelection) {
  const removedEntities = useRef<CollectionReturnValue | undefined>();
  // manage hidden nodes and edges
  useEffect(() => {
    if (!cy) {
      return;
    }

    cy.batch(() => {
      cy.nodes().forEach(node => {
        const id = node.data("id");
        if (!hiddenNodesIds.has(id)) {
          node.removeClass("hidden");
        } else {
          node.addClass("hidden");
        }

        if (!outOfFocusNodesIds.has(id)) {
          node.removeClass("out-of-focus");
        } else {
          node.addClass("out-of-focus");
        }
      });
    });
  }, [cy, hiddenNodesIds, graphStructureVersion, outOfFocusNodesIds]);

  useEffect(() => {
    if (!cy) {
      return;
    }

    cy.batch(() => {
      cy.edges().forEach(edge => {
        const id = edge.data("id");
        if (!hiddenEdgesIds.has(id)) {
          edge.removeClass("hidden");
        } else {
          edge.addClass("hidden");
        }

        const sourceId = edge.source().data("id");
        const targetId = edge.target().data("id");
        if (
          outOfFocusEdgesIds.has(id) ||
          outOfFocusNodesIds.has(sourceId) ||
          outOfFocusNodesIds.has(targetId)
        ) {
          edge.addClass("out-of-focus");
        } else {
          edge.removeClass("out-of-focus");
        }
      });
    });
  }, [
    cy,
    hiddenEdgesIds,
    graphStructureVersion,
    outOfFocusNodesIds,
    outOfFocusEdgesIds,
  ]);

  useEffect(() => {
    if (!cy) {
      return;
    }

    if (!hideEdges) {
      removedEntities.current?.restore();
    } else {
      removedEntities.current = cy.edges().remove();
    }
  }, [cy, hideEdges]);
}