UNPKG

@gravity-ui/graph

Version:

Modern graph editor component

33 lines (32 loc) 1 kB
import { useLayoutEffect } from "react"; import { GraphCallbacksMap } from "../events"; import { useFn } from "../utils/hooks/useFn"; export function useGraphEvent(graph, event, cb) { const onEvent = useFn((e) => { cb(e.detail, e); }); useLayoutEffect(() => { if (!graph) return; return graph.on(event, onEvent); }, [graph, event, onEvent]); } export function useGraphEvents(graph, events) { useLayoutEffect(() => { if (!graph) return; const unsubscribe = []; const fn = (cb) => (event) => { cb(event.detail, event); }; Array.from(Object.entries(events)).reduce((acc, [key, cb]) => { if (GraphCallbacksMap[key]) { unsubscribe.push(graph.on(GraphCallbacksMap[key], fn(cb))); } return acc; }, {}); return () => { unsubscribe.forEach((unsubscribe) => unsubscribe()); }; }, [graph, events]); }