1
1
import { 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' ;
3
4
import { NavigationEnd , Router , RouterModule } from '@angular/router' ;
4
5
import { Observable , Subscription } from 'rxjs' ;
5
6
import { filter } from 'rxjs/operators' ;
6
- import { IconDirective } from '@coreui/icons-angular' ;
7
7
8
+ import { IconDirective } from '@coreui/icons-angular' ;
8
9
// import {SidebarService} from '../sidebar.service';
9
10
import { HtmlAttributesDirective } from '../../shared' ;
10
11
import { SidebarNavHelper } from './sidebar-nav.service' ;
@@ -16,16 +17,17 @@ import { SidebarNavIconPipe } from './sidebar-nav-icon.pipe';
16
17
@Component ( {
17
18
selector : 'c-sidebar-nav-link-content' ,
18
19
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>
21
23
}
22
24
` ,
23
25
providers : [ SidebarNavHelper ]
24
26
} )
25
27
export class SidebarNavLinkContentComponent {
26
28
readonly helper = inject ( SidebarNavHelper ) ;
27
29
28
- @ Input ( ) item ?: INavData ;
30
+ readonly item = input < INavData > ( { } ) ;
29
31
}
30
32
31
33
@Component ( {
@@ -47,16 +49,7 @@ export class SidebarNavLinkContentComponent {
47
49
export class SidebarNavLinkComponent implements OnInit , OnDestroy {
48
50
readonly router = inject ( Router ) ;
49
51
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 > ( ) ;
60
53
61
54
readonly linkClick = output ( ) ;
62
55
@@ -74,17 +67,19 @@ export class SidebarNavLinkComponent implements OnInit, OnDestroy {
74
67
this . navigationEndObservable = router . events . pipe (
75
68
filter ( ( event ) => {
76
69
return event instanceof NavigationEnd ;
77
- } )
70
+ } ) ,
71
+ takeUntilDestroyed ( )
78
72
) as Observable < NavigationEnd > ;
79
73
}
80
74
81
75
ngOnInit ( ) : void {
76
+ const item = this . item ( ) ?? { } ;
82
77
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 [ ] ) ?? [ '' ] ) ) ;
86
81
this . linkType = this . getLinkType ( ) ;
87
- this . href = this . isDisabled ( ) ? '' : this . item . href || this . url ;
82
+ this . href = this . isDisabled ( ) ? '' : item . href || this . url ;
88
83
this . linkActive = this . router . url . split ( / [ ? # ( ; ] / ) [ 0 ] === this . href . split ( / [ ? # ( ; ] / ) [ 0 ] ;
89
84
this . navSubscription = this . navigationEndObservable . subscribe ( ( event ) => {
90
85
const itemUrlArray = this . href . split ( / [ ? # ( ; ] / ) [ 0 ] . split ( '/' ) ;
@@ -102,12 +97,13 @@ export class SidebarNavLinkComponent implements OnInit, OnDestroy {
102
97
}
103
98
104
99
public isDisabled ( ) : boolean {
105
- return this . item ?. attributes ?. [ 'disabled' ] ;
100
+ return this . item ( ) ?. attributes ?. [ 'disabled' ] ;
106
101
}
107
102
108
103
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' ;
111
107
}
112
108
113
109
linkClicked ( ) : void {
0 commit comments