@@ -10,8 +10,8 @@ import { shallow } from 'zustand/shallow';
1010import { useStore , useStoreApi } from '../../hooks/useStore' ;
1111import type { ReactFlowState , OnSelectionChangeFunc , Node , Edge } from '../../types' ;
1212
13- type SelectionListenerProps = {
14- onSelectionChange ?: OnSelectionChangeFunc ;
13+ type SelectionListenerProps < NodeType extends Node = Node , EdgeType extends Edge = Edge > = {
14+ onSelectionChange ?: OnSelectionChangeFunc < NodeType , EdgeType > ;
1515} ;
1616
1717const selector = ( s : ReactFlowState ) => {
@@ -44,12 +44,14 @@ function areEqual(a: SelectorSlice, b: SelectorSlice) {
4444 ) ;
4545}
4646
47- function SelectionListenerInner ( { onSelectionChange } : SelectionListenerProps ) {
48- const store = useStoreApi ( ) ;
47+ function SelectionListenerInner < NodeType extends Node = Node , EdgeType extends Edge = Edge > ( {
48+ onSelectionChange,
49+ } : SelectionListenerProps < NodeType , EdgeType > ) {
50+ const store = useStoreApi < NodeType , EdgeType > ( ) ;
4951 const { selectedNodes, selectedEdges } = useStore ( selector , areEqual ) ;
5052
5153 useEffect ( ( ) => {
52- const params = { nodes : selectedNodes , edges : selectedEdges } ;
54+ const params = { nodes : selectedNodes as NodeType [ ] , edges : selectedEdges as EdgeType [ ] } ;
5355
5456 onSelectionChange ?.( params ) ;
5557 store . getState ( ) . onSelectionChangeHandlers . forEach ( ( fn ) => fn ( params ) ) ;
@@ -60,11 +62,13 @@ function SelectionListenerInner({ onSelectionChange }: SelectionListenerProps) {
6062
6163const changeSelector = ( s : ReactFlowState ) => ! ! s . onSelectionChangeHandlers ;
6264
63- export function SelectionListener ( { onSelectionChange } : SelectionListenerProps ) {
65+ export function SelectionListener < NodeType extends Node = Node , EdgeType extends Edge = Edge > ( {
66+ onSelectionChange,
67+ } : SelectionListenerProps < NodeType , EdgeType > ) {
6468 const storeHasSelectionChangeHandlers = useStore ( changeSelector ) ;
6569
6670 if ( onSelectionChange || storeHasSelectionChangeHandlers ) {
67- return < SelectionListenerInner onSelectionChange = { onSelectionChange } /> ;
71+ return < SelectionListenerInner < NodeType , EdgeType > onSelectionChange = { onSelectionChange } /> ;
6872 }
6973
7074 return null ;
0 commit comments