Skip to content

Commit 27df80b

Browse files
committed
fix(selection-listener): pass generics
1 parent b3bf569 commit 27df80b

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

packages/react/src/components/SelectionListener/index.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { shallow } from 'zustand/shallow';
1010
import { useStore, useStoreApi } from '../../hooks/useStore';
1111
import 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

1717
const 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

6163
const 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;

packages/react/src/container/ReactFlow/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ function ReactFlow<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
303303
paneClickDistance={paneClickDistance}
304304
debug={debug}
305305
/>
306-
<SelectionListener onSelectionChange={onSelectionChange} />
306+
<SelectionListener<NodeType, EdgeType> onSelectionChange={onSelectionChange} />
307307
{children}
308308
<Attribution proOptions={proOptions} position={attributionPosition} />
309309
<A11yDescriptions rfId={rfId} disableKeyboardA11y={disableKeyboardA11y} />

0 commit comments

Comments
 (0)