import { useEffect, useState } from 'react'; import type { NodeChange } from '@xyflow/system'; import { useStoreApi } from './useStore'; import type { Edge, Node } from '../types'; /** * Registers a middleware function to transform node changes. * * @public * @param fn - Middleware function. Should be memoized with useCallback to avoid re-registration. */ export function experimental_useOnNodesChangeMiddleware( fn: (changes: NodeChange[]) => NodeChange[] ) { const store = useStoreApi(); const [symbol] = useState(() => Symbol()); useEffect(() => { const { onNodesChangeMiddlewareMap } = store.getState(); onNodesChangeMiddlewareMap.set(symbol, fn); }, [fn]); useEffect(() => { const { onNodesChangeMiddlewareMap } = store.getState(); return () => { onNodesChangeMiddlewareMap.delete(symbol); }; }, []); }