11import { NgClass , NgTemplateOutlet } from '@angular/common' ;
2- import { Component , inject , Input , OnDestroy , OnInit , output } from '@angular/core' ;
2+ import { Component , inject , input , OnDestroy , OnInit , output } from '@angular/core' ;
3+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop' ;
34import { NavigationEnd , Router , RouterModule } from '@angular/router' ;
45import { Observable , Subscription } from 'rxjs' ;
56import { filter } from 'rxjs/operators' ;
6- import { IconDirective } from '@coreui/icons-angular' ;
77
8+ import { IconDirective } from '@coreui/icons-angular' ;
89// import {SidebarService} from '../sidebar.service';
910import { HtmlAttributesDirective } from '../../shared' ;
1011import { SidebarNavHelper } from './sidebar-nav.service' ;
@@ -16,16 +17,17 @@ import { SidebarNavIconPipe } from './sidebar-nav-icon.pipe';
1617@Component ( {
1718 selector : 'c-sidebar-nav-link-content' ,
1819 template : `
19- @if (true) {
20- <ng-container>{{ item?.name ?? '' }}</ng-container>
20+ @let itemLinkContent = item();
21+ @if (itemLinkContent) {
22+ <ng-container>{{ itemLinkContent?.name ?? '' }}</ng-container>
2123 }
2224 ` ,
2325 providers : [ SidebarNavHelper ]
2426} )
2527export class SidebarNavLinkContentComponent {
2628 readonly helper = inject ( SidebarNavHelper ) ;
2729
28- @ Input ( ) item ?: INavData ;
30+ readonly item = input < INavData > ( { } ) ;
2931}
3032
3133@Component ( {
@@ -47,16 +49,7 @@ export class SidebarNavLinkContentComponent {
4749export class SidebarNavLinkComponent implements OnInit , OnDestroy {
4850 readonly router = inject ( Router ) ;
4951
50- protected _item : INavData = { } ;
51-
52- @Input ( )
53- set item ( item : INavData ) {
54- this . _item = JSON . parse ( JSON . stringify ( item ) ) ;
55- }
56-
57- get item ( ) : INavData {
58- return this . _item ;
59- }
52+ readonly item = input < INavData > ( ) ;
6053
6154 readonly linkClick = output ( ) ;
6255
@@ -74,17 +67,19 @@ export class SidebarNavLinkComponent implements OnInit, OnDestroy {
7467 this . navigationEndObservable = router . events . pipe (
7568 filter ( ( event ) => {
7669 return event instanceof NavigationEnd ;
77- } )
70+ } ) ,
71+ takeUntilDestroyed ( )
7872 ) as Observable < NavigationEnd > ;
7973 }
8074
8175 ngOnInit ( ) : void {
76+ const item = this . item ( ) ?? { } ;
8277 this . url =
83- typeof this . item . url === 'string'
84- ? this . item . url
85- : this . router . serializeUrl ( this . router . createUrlTree ( ( this . item . url as any [ ] ) ?? [ '' ] ) ) ;
78+ typeof item . url === 'string'
79+ ? item . url
80+ : this . router . serializeUrl ( this . router . createUrlTree ( ( item . url as any [ ] ) ?? [ '' ] ) ) ;
8681 this . linkType = this . getLinkType ( ) ;
87- this . href = this . isDisabled ( ) ? '' : this . item . href || this . url ;
82+ this . href = this . isDisabled ( ) ? '' : item . href || this . url ;
8883 this . linkActive = this . router . url . split ( / [ ? # ( ; ] / ) [ 0 ] === this . href . split ( / [ ? # ( ; ] / ) [ 0 ] ;
8984 this . navSubscription = this . navigationEndObservable . subscribe ( ( event ) => {
9085 const itemUrlArray = this . href . split ( / [ ? # ( ; ] / ) [ 0 ] . split ( '/' ) ;
@@ -102,12 +97,13 @@ export class SidebarNavLinkComponent implements OnInit, OnDestroy {
10297 }
10398
10499 public isDisabled ( ) : boolean {
105- return this . item ?. attributes ?. [ 'disabled' ] ;
100+ return this . item ( ) ?. attributes ?. [ 'disabled' ] ;
106101 }
107102
108103 public isExternalLink ( ) : boolean {
109- const linkPath = Array . isArray ( this . item . url ) ? this . item . url [ 0 ] : this . item . url ;
110- return ! ! this . item . href || linkPath ?. substring ( 0 , 4 ) === 'http' ;
104+ const item = this . item ( ) ?? { } ;
105+ const linkPath = Array . isArray ( item . url ) ? item . url [ 0 ] : item . url ;
106+ return ! ! item . href || linkPath ?. substring ( 0 , 4 ) === 'http' ;
111107 }
112108
113109 linkClicked ( ) : void {
0 commit comments