feat(react): Support Mutiple useOnSelectionChange Hook subscribers

This commit is contained in:
spky
2023-11-03 00:48:46 +01:00
parent 428fced240
commit bbd5973d66
6 changed files with 69 additions and 686 deletions
@@ -33,7 +33,7 @@ const SelectionListener = memo(({ onSelectionChange }: SelectionListenerProps) =
useEffect(() => {
const params = { nodes: selectedNodes, edges: selectedEdges };
onSelectionChange?.(params);
store.getState().onSelectionChange?.(params);
store.getState().onSelectionChange.forEach((fn) => fn(params));
}, [selectedNodes, selectedEdges, onSelectionChange]);
return null;
@@ -4,14 +4,19 @@ import { useStoreApi } from './useStore';
import type { OnSelectionChangeFunc } from '../types';
export type UseOnSelectionChangeOptions = {
onChange?: OnSelectionChangeFunc;
onChange: OnSelectionChangeFunc;
};
function useOnSelectionChange({ onChange }: UseOnSelectionChangeOptions) {
const store = useStoreApi();
useEffect(() => {
store.setState({ onSelectionChange: onChange });
const addedOnSelectionChange = [...store.getState().onSelectionChange, onChange];
store.setState({ onSelectionChange: addedOnSelectionChange });
return () => {
const removedOnSelectionChange = store.getState().onSelectionChange.filter((fn) => fn !== onChange);
store.setState({ onSelectionChange: removedOnSelectionChange });
};
}, [onChange]);
}
+1
View File
@@ -92,6 +92,7 @@ const getInitialState = ({
connectionRadius: 20,
onError: () => null,
isValidConnection: undefined,
onSelectionChange: [],
lib: 'react',
};
+2 -2
View File
@@ -123,8 +123,8 @@ export type ReactFlowStore = {
onViewportChangeStart?: OnViewportChange;
onViewportChange?: OnViewportChange;
onViewportChangeEnd?: OnViewportChange;
onSelectionChange?: OnSelectionChangeFunc;
onSelectionChange: OnSelectionChangeFunc[];
ariaLiveMessage: string;
autoPanOnConnect: boolean;