@@ -262,9 +262,9 @@ export function DirectoryItemSelector({
262
262
} , [ convertRoots , types , snackError ] ) ;
263
263
264
264
const fetchDirectoryChildren = useCallback (
265
- ( nodeId : UUID ) : void => {
265
+ ( nodeId : UUID ) : Promise < void > => {
266
266
const typeList = types . includes ( ElementType . DIRECTORY ) ? [ ] : types ;
267
- fetchDirectoryContent ( nodeId , typeList )
267
+ return fetchDirectoryContent ( nodeId , typeList )
268
268
. then ( ( children ) => {
269
269
const childrenMatchedTypes = children . filter ( ( item : ElementAttributes ) =>
270
270
contentFilter ( ) . has ( item . type )
@@ -279,7 +279,7 @@ export function DirectoryItemSelector({
279
279
types ,
280
280
equipmentTypes
281
281
) . then ( ( childrenWithMetadata : ElementAttributes [ ] ) => {
282
- const filtredChildren = itemFilter
282
+ const filteredChildren = itemFilter
283
283
? childrenWithMetadata . filter ( ( val : ElementAttributes ) => {
284
284
// Accept every directory
285
285
if ( val . type === ElementType . DIRECTORY ) {
@@ -290,12 +290,12 @@ export function DirectoryItemSelector({
290
290
} )
291
291
: childrenWithMetadata ;
292
292
// update directory content
293
- addToDirectory ( nodeId , filtredChildren ) ;
293
+ addToDirectory ( nodeId , filteredChildren ) ;
294
294
} ) ;
295
- } else {
296
- // update directory content
297
- addToDirectory ( nodeId , childrenMatchedTypes ) ;
298
295
}
296
+ // update directory content
297
+ addToDirectory ( nodeId , childrenMatchedTypes ) ;
298
+ return Promise . resolve ( ) ;
299
299
} )
300
300
. catch ( ( error ) => {
301
301
console . warn ( `Could not update subs (and content) of '${ nodeId } ' : ${ error . message } ` ) ;
@@ -306,13 +306,11 @@ export function DirectoryItemSelector({
306
306
307
307
// Helper function to fetch children for a node if not already loaded
308
308
const fetchNodeChildrenIfNeeded = useCallback (
309
- ( nodeId : UUID , delay : number = 0 ) => {
310
- setTimeout ( ( ) => {
311
- const node = nodeMap . current [ nodeId ] ;
312
- if ( node && ( ! node . children || node . children . length === 0 ) && node . type === ElementType . DIRECTORY ) {
313
- fetchDirectoryChildren ( nodeId ) ;
314
- }
315
- } , delay ) ;
309
+ async ( nodeId : UUID ) : Promise < void > => {
310
+ const node = nodeMap . current [ nodeId ] ;
311
+ if ( node && ( ! node . children || node . children . length === 0 ) && node . type === ElementType . DIRECTORY ) {
312
+ await fetchDirectoryChildren ( nodeId ) ;
313
+ }
316
314
} ,
317
315
[ fetchDirectoryChildren ]
318
316
) ;
@@ -325,18 +323,18 @@ export function DirectoryItemSelector({
325
323
326
324
const expandedArray = await getExpansionPathsForSelected ( selected , expanded ) ;
327
325
setAutoExpandedNodes ( expandedArray ) ;
328
- fetchChildrenForExpandedNodes ( expandedArray , fetchNodeChildrenIfNeeded ) ;
326
+ await fetchChildrenForExpandedNodes ( expandedArray , fetchNodeChildrenIfNeeded ) ;
329
327
return true ;
330
328
} , [ selected , expanded , fetchNodeChildrenIfNeeded ] ) ;
331
329
332
330
// Handle expansion from provided expanded prop
333
- const handleProvidedExpansion = useCallback ( ( ) : boolean => {
331
+ const handleProvidedExpansion = useCallback ( async ( ) : Promise < boolean > => {
334
332
if ( ! expanded || expanded . length === 0 ) {
335
333
return false ;
336
334
}
337
335
338
336
setAutoExpandedNodes ( expanded ) ;
339
- fetchChildrenForExpandedNodes ( expanded , fetchNodeChildrenIfNeeded ) ;
337
+ await fetchChildrenForExpandedNodes ( expanded , fetchNodeChildrenIfNeeded ) ;
340
338
341
339
return true ;
342
340
} , [ expanded , fetchNodeChildrenIfNeeded ] ) ;
@@ -350,7 +348,7 @@ export function DirectoryItemSelector({
350
348
}
351
349
352
350
setAutoExpandedNodes ( expandPath ) ;
353
- fetchChildrenForExpandedNodes ( expandPath , fetchNodeChildrenIfNeeded ) ;
351
+ await fetchChildrenForExpandedNodes ( expandPath , fetchNodeChildrenIfNeeded ) ;
354
352
355
353
return true ;
356
354
} , [ fetchNodeChildrenIfNeeded ] ) ;
@@ -359,11 +357,15 @@ export function DirectoryItemSelector({
359
357
const initializeExpansion = useCallback ( async ( ) => {
360
358
// Priority 1: Handle selected items
361
359
const selectedSuccess = await handleSelectedExpansion ( ) ;
362
- if ( selectedSuccess ) return ;
360
+ if ( selectedSuccess ) {
361
+ return ;
362
+ }
363
363
364
364
// Priority 2: Handle provided expanded items
365
- const expandedSuccess = handleProvidedExpansion ( ) ;
366
- if ( expandedSuccess ) return ;
365
+ const expandedSuccess = await handleProvidedExpansion ( ) ;
366
+ if ( expandedSuccess ) {
367
+ return ;
368
+ }
367
369
368
370
// Priority 3: Fall back to last selected directory
369
371
await handleLastSelectedExpansion ( ) ;
0 commit comments