@gravity-ui/graph
Version:
Modern graph editor component
33 lines (32 loc) • 1 kB
JavaScript
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]);
}