File tree Expand file tree Collapse file tree
src/hooks/useListPosition Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -12,12 +12,29 @@ export type NodeSizeMap = Record<string, NodeSize>;
1212 */
1313export default function useSizes ( ) {
1414 const [ sizeMap , setSizeMap ] = React . useState < NodeSizeMap > ( { } ) ;
15+ const cleanUpMapRef = React . useRef < Record < string , ReturnType < typeof setTimeout > > > ( { } ) ;
1516
1617 const setNodeSize = React . useCallback ( ( key : string , node : HTMLDivElement | null ) => {
1718 if ( ! node ) {
19+ cleanUpMapRef . current [ key ] = setTimeout ( ( ) => {
20+ delete cleanUpMapRef . current [ key ] ;
21+
22+ setSizeMap ( ( prevSizeMap ) => {
23+ if ( ! ( key in prevSizeMap ) ) {
24+ return prevSizeMap ;
25+ }
26+
27+ const nextSizeMap = { ...prevSizeMap } ;
28+ delete nextSizeMap [ key ] ;
29+ return nextSizeMap ;
30+ } ) ;
31+ } ) ;
1832 return ;
1933 }
2034
35+ clearTimeout ( cleanUpMapRef . current [ key ] ) ;
36+ delete cleanUpMapRef . current [ key ] ;
37+
2138 const nextSize = {
2239 width : node . offsetWidth ,
2340 height : node . offsetHeight ,
@@ -36,5 +53,14 @@ export default function useSizes() {
3653 } ) ;
3754 } , [ ] ) ;
3855
56+ React . useEffect (
57+ ( ) => ( ) => {
58+ Object . values ( cleanUpMapRef . current ) . forEach ( ( timer ) => {
59+ clearTimeout ( timer ) ;
60+ } ) ;
61+ } ,
62+ [ ] ,
63+ ) ;
64+
3965 return [ sizeMap , setNodeSize ] as const ;
4066}
You can’t perform that action at this time.
0 commit comments