1- import { useCallback , useEffect , useMemo , useState } from 'react' ;
1+ import { useCallback , useMemo , useState } from 'react' ;
22import {
33 ControlledTreeEnvironmentProps ,
4- LinearItem ,
54 TreeChangeHandlers ,
65 TreeConfiguration ,
76 TreeEnvironmentContextProps ,
@@ -11,7 +10,6 @@ import { useRenderers } from '../renderers/useRenderers';
1110import { buildMapForTrees , getDocument } from '../utils' ;
1211import { getItemsLinearly } from '../tree/getItemsLinearly' ;
1312import { useRefCopy } from '../useRefCopy' ;
14- import { useStableHandler } from '../use-stable-handler' ;
1513
1614export const useControlledTreeEnvironmentProps = ( {
1715 onExpandItem : onExpandItemProp ,
@@ -20,34 +18,29 @@ export const useControlledTreeEnvironmentProps = ({
2018 ...props
2119} : ControlledTreeEnvironmentProps ) : TreeEnvironmentContextProps => {
2220 const [ trees , setTrees ] = useState < Record < string , TreeConfiguration > > ( { } ) ;
23- const [ linearItems , setLinearItems ] = useState < Record < string , LinearItem [ ] > > (
24- { }
25- ) ;
2621 const [ activeTreeId , setActiveTreeId ] = useState < string > ( ) ;
2722
28- const viewStateRef = useRefCopy ( props . viewState ) ;
29-
3023 const treeIds = useMemo ( ( ) => Object . keys ( trees ) , [ trees ] ) ;
3124
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 ;
3433
3534 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+ ) ;
5144
5245 const onFocusItemHandler = useCallback <
5346 Required < TreeChangeHandlers > [ 'onFocusItem' ]
@@ -84,9 +77,8 @@ export const useControlledTreeEnvironmentProps = ({
8477 tree => {
8578 setTrees ( trees => ( { ...trees , [ tree . treeId ] : tree } ) ) ;
8679 onRegisterTree ?.( tree ) ;
87- updateLinearItems ( ) ;
8880 } ,
89- [ onRegisterTree , updateLinearItems ]
81+ [ onRegisterTree ]
9082 ) ;
9183
9284 const unregisterTree = useCallback (
@@ -101,25 +93,25 @@ export const useControlledTreeEnvironmentProps = ({
10193 const onCollapseItem = useCallback (
10294 ( item , treeId ) => {
10395 onCollapseProp ?.( item , treeId ) ;
104- updateLinearItems ( ) ;
96+ setTrees ( trees => trees ) ;
10597 } ,
106- [ onCollapseProp , updateLinearItems ]
98+ [ onCollapseProp ]
10799 ) ;
108100
109101 const onExpandItem = useCallback (
110102 ( item , treeId ) => {
111103 onExpandItemProp ?.( item , treeId ) ;
112- updateLinearItems ( ) ;
104+ setTrees ( trees => trees ) ;
113105 } ,
114- [ onExpandItemProp , updateLinearItems ]
106+ [ onExpandItemProp ]
115107 ) ;
116108
117109 const onDrop = useCallback (
118110 ( items , target ) => {
119111 onDropProp ?.( items , target ) ;
120- updateLinearItems ( ) ;
112+ setTrees ( trees => trees ) ;
121113 } ,
122- [ onDropProp , updateLinearItems ]
114+ [ onDropProp ]
123115 ) ;
124116
125117 const focusTree = useCallback ( ( treeId : string ) => {
0 commit comments