1+ import React , { Ref , RefAttributes , forwardRef , useImperativeHandle } from "react" ;
12import { TreeOnDragType , useTreeDraggable } from "./hooks/tree-draggable.hook" ;
23import { TreeOnLoadType , TreeOnRemoveType , TreeOnSelectType , useTree } from "./hooks/tree.hook" ;
34
45import AutoSizer from "react-virtualized-auto-sizer" ;
56import { FixedSizeList } from "react-window" ;
6- import React from "react" ;
77import { TreeNode } from "./models/tree.model" ;
88
9+ export type TreeNodeComponentRef = {
10+ unSelect : ( ) => void ;
11+ }
12+
913export type TreeNodeComponent < TData > = ( _ : {
1014 level : number ;
1115 loading : boolean ;
@@ -27,20 +31,27 @@ type TreeProps<TData> = {
2731 onSelect : TreeOnSelectType < TData > ;
2832} ;
2933
30- export function Tree < TData > ( {
34+ export const Tree = forwardRef ( < TData extends object > ( {
3135 nodeHeigth,
3236 Node,
3337 onDrag,
3438 ...props
35- } : TreeProps < TData > ) {
36- const { tree, dispatch, handleToggle, handleRemove, handleSelect } = useTree ( props ) ;
39+ } : TreeProps < TData > , ref : Ref < TreeNodeComponentRef > ) => {
40+ const { tree, dispatch, handleToggle, handleRemove, handleSelect, handleUnSelect } = useTree ( props ) ;
3741
3842 const draggablePropsFn = useTreeDraggable < TData > ( ( node , parentNode ) => {
3943 onDrag ( node , parentNode ) . then ( ( ) => {
4044 dispatch ( { type : "MOVE_NODE" , payload : { node, parentNode } } ) ;
4145 } ) ;
4246 } ) ;
4347
48+ useImperativeHandle (
49+ ref ,
50+ ( ) => ( {
51+ unSelect : handleUnSelect
52+ } )
53+ )
54+
4455 return (
4556 < AutoSizer >
4657 { ( { width, height } ) => (
@@ -73,4 +84,4 @@ export function Tree<TData>({
7384 ) }
7485 </ AutoSizer >
7586 ) ;
76- }
87+ } ) as < TData extends object > ( props : TreeProps < TData > & RefAttributes < TreeNodeComponentRef > ) => JSX . Element ;
0 commit comments