@@ -410,50 +410,39 @@ export const HierarchyLevel = ({
410
410
411
411
const INITIAL_PAGE_SIZE = 20 ;
412
412
413
- export const useSpaceSummary = ( space : Room ) : {
413
+ export const useRoomHierarchy = ( space : Room ) : {
414
414
loading : boolean ;
415
415
rooms : IHierarchyRoom [ ] ;
416
416
hierarchy : RoomHierarchy ;
417
417
loadMore ( pageSize ?: number ) : Promise < void > ;
418
418
} => {
419
419
const [ rooms , setRooms ] = useState < IHierarchyRoom [ ] > ( [ ] ) ;
420
- const [ loading , setLoading ] = useState ( true ) ;
421
420
const [ hierarchy , setHierarchy ] = useState < RoomHierarchy > ( ) ;
422
421
423
422
const resetHierarchy = useCallback ( ( ) => {
424
423
const hierarchy = new RoomHierarchy ( space , INITIAL_PAGE_SIZE ) ;
425
- setHierarchy ( hierarchy ) ;
426
-
427
- let discard = false ;
428
424
hierarchy . load ( ) . then ( ( ) => {
429
- if ( discard ) return ;
425
+ if ( space !== hierarchy . root ) return ; // discard stale results
430
426
setRooms ( hierarchy . rooms ) ;
431
- setLoading ( false ) ;
432
427
} ) ;
433
-
434
- return ( ) => {
435
- discard = true ;
436
- } ;
428
+ setHierarchy ( hierarchy ) ;
437
429
} , [ space ] ) ;
438
430
useEffect ( resetHierarchy , [ resetHierarchy ] ) ;
439
431
440
432
useDispatcher ( defaultDispatcher , ( payload => {
441
433
if ( payload . action === Action . UpdateSpaceHierarchy ) {
442
- setLoading ( true ) ;
443
434
setRooms ( [ ] ) ; // TODO
444
435
resetHierarchy ( ) ;
445
436
}
446
437
} ) ) ;
447
438
448
439
const loadMore = useCallback ( async ( pageSize ?: number ) => {
449
- if ( loading || ! hierarchy . canLoadMore || hierarchy . noSupport ) return ;
450
-
451
- setLoading ( true ) ;
440
+ if ( hierarchy . loading || ! hierarchy . canLoadMore || hierarchy . noSupport ) return ;
452
441
await hierarchy . load ( pageSize ) ;
453
442
setRooms ( hierarchy . rooms ) ;
454
- setLoading ( false ) ;
455
- } , [ loading , hierarchy ] ) ;
443
+ } , [ hierarchy ] ) ;
456
444
445
+ const loading = hierarchy ?. loading ?? true ;
457
446
return { loading, rooms, hierarchy, loadMore } ;
458
447
} ;
459
448
@@ -587,7 +576,7 @@ const SpaceHierarchy = ({
587
576
588
577
const [ selected , setSelected ] = useState ( new Map < string , Set < string > > ( ) ) ; // Map<parentId, Set<childId>>
589
578
590
- const { loading, rooms, hierarchy, loadMore } = useSpaceSummary ( space ) ;
579
+ const { loading, rooms, hierarchy, loadMore } = useRoomHierarchy ( space ) ;
591
580
592
581
const filteredRoomSet = useMemo < Set < IHierarchyRoom > > ( ( ) => {
593
582
if ( ! rooms ?. length ) return new Set ( ) ;
0 commit comments