Skip to content

Commit 8132a96

Browse files
erkamyamanatscott
authored andcommitted
docs(docs-infra): preserve navigation origin when clicking cross-category links
When a sidebar item links to a page in a different category (e.g., Route transition animations under Animations links to a Routing page), clicking back navigates to the main menu instead of the originating category. Store the originating category in NavigationState when clicking a cross-referenced item, so the back button returns to the correct section.
1 parent b48603e commit 8132a96

6 files changed

Lines changed: 17 additions & 2 deletions

File tree

adev/shared-docs/components/navigation-list/navigation-list.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
matrixParams: 'ignored',
5454
fragment: 'ignored',
5555
}"
56-
(click)="emitClickOnLink()"
56+
(click)="emitClickOnLink(item)"
5757
[matTooltip]="item.label"
5858
[matTooltipDisabled]="itemLabel.length < 27"
5959
matTooltipPosition="after"

adev/shared-docs/components/navigation-list/navigation-list.component.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,5 +153,6 @@ describe('NavigationList', () => {
153153
class FakeNavigationListState {
154154
isOpened = signal(true);
155155
activeNavigationItem = signal(navigationItems.at(1));
156+
crossCategoryOrigin = signal<NavigationItem | undefined>(undefined);
156157
toggleItem(item: NavigationItem) {}
157158
}

adev/shared-docs/components/navigation-list/navigation-list.component.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export class NavigationList {
3939
readonly linkClicked = output<void>();
4040

4141
private readonly navigationState = inject(NavigationState);
42+
private readonly crossCategoryOrigin = this.navigationState.crossCategoryOrigin;
4243

4344
readonly activeItem = this.navigationState.activeNavigationItem;
4445

@@ -50,10 +51,19 @@ export class NavigationList {
5051
) {
5152
return;
5253
}
54+
const prevParentItem = this.crossCategoryOrigin();
55+
if (prevParentItem) {
56+
this.crossCategoryOrigin.set(undefined);
57+
this.navigationState.toggleItem(prevParentItem);
58+
return;
59+
}
5360
this.navigationState.toggleItem(item);
5461
}
5562

56-
emitClickOnLink(): void {
63+
emitClickOnLink(item: NavigationItem): void {
64+
if (item.isCrossReferenced) {
65+
this.crossCategoryOrigin.set(item.parent);
66+
}
5767
this.linkClicked.emit();
5868
}
5969

adev/shared-docs/interfaces/navigation-item.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ export interface NavigationItem {
1717
contentPath?: string;
1818
status?: 'new' | 'updated';
1919
category?: string;
20+
isCrossReferenced?: boolean;
2021
preserveOtherCategoryOrder?: boolean; // true by default
2122
}

adev/shared-docs/services/navigation-state.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export class NavigationState {
2121
private readonly _isMobileNavVisible = signal<boolean>(false);
2222
private readonly _level = linkedSignal(() => this._expandedItems().length);
2323

24+
readonly crossCategoryOrigin = signal<NavigationItem | undefined>(undefined);
2425
readonly primaryActiveRouteItem = signal<string | null>(null);
2526
activeNavigationItem = this._activeNavigationItem.asReadonly();
2627
expandedItems = this._expandedItems.asReadonly();

adev/src/app/routing/navigation-entries/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,7 @@ export const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
660660
path: 'guide/routing/testing',
661661
contentPath: 'guide/routing/testing',
662662
status: 'new',
663+
isCrossReferenced: true,
663664
},
664665
{
665666
label: 'Debugging tests',
@@ -863,6 +864,7 @@ export const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
863864
label: 'Route transition animations',
864865
path: 'guide/routing/route-transition-animations',
865866
contentPath: 'guide/routing/route-transition-animations',
867+
isCrossReferenced: true,
866868
},
867869
],
868870
},

0 commit comments

Comments
 (0)