Skip to content

Commit 1e21827

Browse files
authored
Merge pull request #2925 from Licen-it/master
fix(SideNavItem): implemented more future proof navigation extras without dropping routerlink support
2 parents 076edf3 + b2fb6af commit 1e21827

File tree

5 files changed

+35
-12
lines changed

5 files changed

+35
-12
lines changed

angular.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@
7171
"-t"
7272
],
7373
"configDir": ".storybook",
74-
"outputDir": "dist/docs/storybook"
74+
"outputDir": "dist/docs/storybook",
75+
"enableProdMode": false
7576
}
7677
}
7778
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Directive, Input, OnChanges, SimpleChanges } from "@angular/core";
2+
import { NavigationExtras, RouterLinkWithHref } from "@angular/router";
3+
import { keys } from "lodash";
4+
5+
@Directive({
6+
// tslint:disable-next-line
7+
selector: "[routerLink]"
8+
})
9+
export class RouterLinkExtendedDirective extends RouterLinkWithHref implements OnChanges {
10+
// TODO: Change RouterLinkWithHref with RouterLink from angular 15 since RouterLinkWithHref has been deprecated
11+
@Input() routeExtras: NavigationExtras;
12+
13+
ngOnChanges(changes: SimpleChanges): void {
14+
if (changes.routeExtras && this.routeExtras) {
15+
keys(this.routeExtras).forEach(routeExtraProperty => this[routeExtraProperty] = this.routeExtras[routeExtraProperty]);
16+
}
17+
18+
super.ngOnChanges(changes);
19+
}
20+
}

src/ui-shell/sidenav/sidenav-item.component.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,7 @@ import { Router } from "@angular/router";
3333
<a
3434
[attr.title]="title ? title : null"
3535
[routerLink]="route"
36-
[relativeTo]="routeExtras?.relativeTo"
37-
[queryParams]="routeExtras?.queryParams"
38-
[fragment]="routeExtras?.fragment"
39-
[queryParamsHandling]="routeExtras?.queryParamsHandling"
40-
[preserveFragment]="routeExtras?.preserveFragment"
41-
[skipLocationChange]="routeExtras?.skipLocationChange"
42-
[replaceUrl]="routeExtras?.replaceUrl"
43-
[state]="routeExtras?.state"
36+
[routeExtras]="routeExtras"
4437
routerLinkActive="cds--side-nav__item--active"
4538
ariaCurrentWhenActive="page"
4639
class="cds--side-nav__link">

src/ui-shell/sidenav/sidenav.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { I18nModule } from "carbon-components-angular/i18n";
77
import { SideNav } from "./sidenav.component";
88
import { SideNavItem } from "./sidenav-item.component";
99
import { SideNavMenu } from "./sidenav-menu.component";
10+
import { RouterLinkExtendedDirective } from "./routerlink-extended.directive";
1011

1112
export { SideNavItemInterface } from "./sidenav-item.interface";
1213

@@ -20,7 +21,8 @@ export {
2021
declarations: [
2122
SideNav,
2223
SideNavItem,
23-
SideNavMenu
24+
SideNavMenu,
25+
RouterLinkExtendedDirective
2426
],
2527
imports: [CommonModule, I18nModule, RouterModule],
2628
exports: [

src/ui-shell/ui-shell.stories.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,9 @@ const SideNavigationUseRouterTemplate = (args) => ({
319319
<svg cdsIcon="fade" size="16"></svg>
320320
Link
321321
</cds-sidenav-item>
322-
<cds-sidenav-item [route]="['bar']" [useRouter]="true">
322+
<cds-sidenav-item [route]="['bar']" [useRouter]="true" [routeExtras]="routeExtras">
323323
<svg cdsIcon="fade" size="16"></svg>
324-
Link
324+
Link with query params
325325
</cds-sidenav-item>
326326
<cds-sidenav-menu title="Category title">
327327
<svg cdsIcon="fade" icon size="16"></svg>
@@ -338,6 +338,13 @@ const SideNavigationUseRouterTemplate = (args) => ({
338338
});
339339
export const SideNavigationUseRouter = SideNavigationUseRouterTemplate.bind({});
340340
SideNavigationUseRouter.storyName = "Side Navigation with useRouter";
341+
SideNavigationUseRouter.args = {
342+
routeExtras: {
343+
queryParams: {
344+
key: "value"
345+
}
346+
}
347+
};
341348

342349
const SidePanelTemplate = (args) => ({
343350
props: args,

0 commit comments

Comments
 (0)