1
- import { useCallback , useEffect , useMemo , useState } from 'react' ;
1
+ import { useCallback , useMemo , useState } from 'react' ;
2
2
import {
3
3
ControlledTreeEnvironmentProps ,
4
- LinearItem ,
5
4
TreeChangeHandlers ,
6
5
TreeConfiguration ,
7
6
TreeEnvironmentContextProps ,
@@ -11,7 +10,6 @@ import { useRenderers } from '../renderers/useRenderers';
11
10
import { buildMapForTrees , getDocument } from '../utils' ;
12
11
import { getItemsLinearly } from '../tree/getItemsLinearly' ;
13
12
import { useRefCopy } from '../useRefCopy' ;
14
- import { useStableHandler } from '../use-stable-handler' ;
15
13
16
14
export const useControlledTreeEnvironmentProps = ( {
17
15
onExpandItem : onExpandItemProp ,
@@ -20,34 +18,29 @@ export const useControlledTreeEnvironmentProps = ({
20
18
...props
21
19
} : ControlledTreeEnvironmentProps ) : TreeEnvironmentContextProps => {
22
20
const [ trees , setTrees ] = useState < Record < string , TreeConfiguration > > ( { } ) ;
23
- const [ linearItems , setLinearItems ] = useState < Record < string , LinearItem [ ] > > (
24
- { }
25
- ) ;
26
21
const [ activeTreeId , setActiveTreeId ] = useState < string > ( ) ;
27
22
28
- const viewStateRef = useRefCopy ( props . viewState ) ;
29
-
30
23
const treeIds = useMemo ( ( ) => Object . keys ( trees ) , [ trees ] ) ;
31
24
32
- const { onFocusItem, autoFocus, onRegisterTree, onUnregisterTree, items } =
33
- props ;
25
+ const {
26
+ onFocusItem,
27
+ autoFocus,
28
+ onRegisterTree,
29
+ onUnregisterTree,
30
+ items,
31
+ viewState,
32
+ } = props ;
34
33
35
34
const onFocusItemRef = useRefCopy ( onFocusItem ) ;
36
-
37
- const updateLinearItems = useStableHandler ( ( ) => {
38
- setTimeout ( ( ) => {
39
- setLinearItems (
40
- buildMapForTrees ( treeIds , treeId =>
41
- getItemsLinearly (
42
- trees [ treeId ] . rootItem ,
43
- viewStateRef . current [ treeId ] ?? { } ,
44
- items
45
- )
46
- )
47
- ) ;
48
- } ) ;
49
- } ) ;
50
- useEffect ( ( ) => updateLinearItems ( ) , [ items , treeIds , updateLinearItems ] ) ;
35
+ const viewStateRef = useRefCopy ( viewState ) ;
36
+
37
+ const linearItems = useMemo (
38
+ ( ) =>
39
+ buildMapForTrees ( treeIds , treeId =>
40
+ getItemsLinearly ( trees [ treeId ] . rootItem , viewState [ treeId ] ?? { } , items )
41
+ ) ,
42
+ [ trees , items , treeIds , viewState ]
43
+ ) ;
51
44
52
45
const onFocusItemHandler = useCallback <
53
46
Required < TreeChangeHandlers > [ 'onFocusItem' ]
@@ -84,9 +77,8 @@ export const useControlledTreeEnvironmentProps = ({
84
77
tree => {
85
78
setTrees ( trees => ( { ...trees , [ tree . treeId ] : tree } ) ) ;
86
79
onRegisterTree ?.( tree ) ;
87
- updateLinearItems ( ) ;
88
80
} ,
89
- [ onRegisterTree , updateLinearItems ]
81
+ [ onRegisterTree ]
90
82
) ;
91
83
92
84
const unregisterTree = useCallback (
@@ -101,25 +93,25 @@ export const useControlledTreeEnvironmentProps = ({
101
93
const onCollapseItem = useCallback (
102
94
( item , treeId ) => {
103
95
onCollapseProp ?.( item , treeId ) ;
104
- updateLinearItems ( ) ;
96
+ setTrees ( trees => trees ) ;
105
97
} ,
106
- [ onCollapseProp , updateLinearItems ]
98
+ [ onCollapseProp ]
107
99
) ;
108
100
109
101
const onExpandItem = useCallback (
110
102
( item , treeId ) => {
111
103
onExpandItemProp ?.( item , treeId ) ;
112
- updateLinearItems ( ) ;
104
+ setTrees ( trees => trees ) ;
113
105
} ,
114
- [ onExpandItemProp , updateLinearItems ]
106
+ [ onExpandItemProp ]
115
107
) ;
116
108
117
109
const onDrop = useCallback (
118
110
( items , target ) => {
119
111
onDropProp ?.( items , target ) ;
120
- updateLinearItems ( ) ;
112
+ setTrees ( trees => trees ) ;
121
113
} ,
122
- [ onDropProp , updateLinearItems ]
114
+ [ onDropProp ]
123
115
) ;
124
116
125
117
const focusTree = useCallback ( ( treeId : string ) => {
0 commit comments