UNPKG

@gravity-ui/graph

Version:

Modern graph editor component

38 lines (37 loc) 1.14 kB
import { useEffect, useLayoutEffect } from "react"; import { ESchedulerPriority } from "../../lib"; import { useSchedulerDebounce } from "./schedulerHooks"; /** * Hook to handle scene updates. * Scene is updating when camera changes or component changes yours position. * * * @param graph - Graph instance * @param fn - Function to handle scene updates */ export function useSceneChange(graph, fn) { const handleSceneChange = useSchedulerDebounce(fn, { priority: ESchedulerPriority.HIGHEST, frameInterval: 1, }); useLayoutEffect(() => { handleSceneChange(); const unsubscribe = graph.$camera.subscribe(() => { handleSceneChange(); }); return () => { unsubscribe(); }; }, [graph, handleSceneChange]); useEffect(() => { graph.hitTest.on("update", handleSceneChange); return () => { graph.hitTest.off("update", handleSceneChange); }; }, [graph, handleSceneChange]); useLayoutEffect(() => { return () => { handleSceneChange.cancel(); }; }, [handleSceneChange]); }