@@ -364,11 +364,19 @@ export function hydrateSegmentsWithNav(app: App, dehydratedSegmentPairs: Dehydra
364
364
for ( const dehydratedSegment of dehydratedSegmentPairs [ i ] . segments ) {
365
365
if ( navs . length === 1 ) {
366
366
segments . push ( hydrateSegment ( dehydratedSegment , navs [ 0 ] ) ) ;
367
- } else if ( navs . length > 1 || navs . length <= 0 ) {
367
+ navs = navs [ 0 ] . getActiveChildNavs ( ) ;
368
+ } else if ( navs . length > 1 ) {
369
+ // this is almost certainly an async race condition bug in userland
370
+ // if you're in this state, it would be nice to just bail here
371
+ // but alas we must perservere and handle the issue
372
+ // the simple solution is to just use the last child
373
+ // because that is probably what the user wants anyway
374
+ // remember, do not harm, even if it makes our shizzle ugly
375
+ segments . push ( hydrateSegment ( dehydratedSegment , navs [ navs . length - 1 ] ) ) ;
376
+ navs = navs [ navs . length - 1 ] . getActiveChildNavs ( ) ;
377
+ } else {
368
378
break ;
369
- // throw new Error('Invalid URL - could not determine which nav to use');
370
379
}
371
- navs = navs [ 0 ] . getActiveChildNavs ( ) ;
372
380
}
373
381
}
374
382
return segments ;
@@ -514,7 +522,7 @@ export function getSegmentsFromUrlPieces(urlSections: string[], navLink: NavLink
514
522
export function hydrateSegment ( segment : DehydratedSegment , nav : NavigationContainer ) {
515
523
const hydratedSegment = Object . assign ( { } , segment ) as NavSegment ;
516
524
hydratedSegment . type = nav . getType ( ) ;
517
- hydratedSegment . navId = nav . id ;
525
+ hydratedSegment . navId = nav . name || nav . id ;
518
526
// secondaryId is set on an empty dehydrated segment in the case of tabs to identify which tab is selected
519
527
hydratedSegment . secondaryId = segment . secondaryId ;
520
528
return hydratedSegment ;
0 commit comments