Skip to content

Commit 53f28f8

Browse files
committed
fix(sidebar): performance issues #74,#75
1 parent 5631d43 commit 53f28f8

9 files changed

+77
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { AppSidebarNavBadgePipe } from './app-sidebar-nav-badge.pipe';
2+
3+
describe('AppSidebarNavBadgePipe', () => {
4+
it('create an instance', () => {
5+
const pipe = new AppSidebarNavBadgePipe();
6+
expect(pipe).toBeTruthy();
7+
});
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Pipe, PipeTransform } from '@angular/core';
2+
3+
@Pipe({
4+
name: 'appSidebarNavBadge'
5+
})
6+
export class AppSidebarNavBadgePipe implements PipeTransform {
7+
8+
transform(item: any, args?: any): any {
9+
const classes = {
10+
'badge': true
11+
};
12+
const variant = `badge-${item.badge.variant}`;
13+
classes[variant] = !!item.badge.variant;
14+
return classes;
15+
}
16+
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { AppSidebarNavIconPipe } from './app-sidebar-nav-icon.pipe';
2+
3+
describe('AppSidebarNavIconPipe', () => {
4+
it('create an instance', () => {
5+
const pipe = new AppSidebarNavIconPipe();
6+
expect(pipe).toBeTruthy();
7+
});
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Pipe, PipeTransform } from '@angular/core';
2+
3+
@Pipe({
4+
name: 'appSidebarNavIcon'
5+
})
6+
export class AppSidebarNavIconPipe implements PipeTransform {
7+
8+
transform(item: any, args?: any): any {
9+
const classes = {
10+
'nav-icon': true
11+
};
12+
const icon = item.icon;
13+
classes[icon] = !!item.icon;
14+
return classes;
15+
}
16+
}

projects/coreui/angular/src/lib/sidebar/app-sidebar-nav/app-sidebar-nav-label.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
[appHtmlAttr]="item.attributes">
44
<i *ngIf="helper.hasIcon(item)" [ngClass]="getLabelIconClass()"></i>
55
<ng-container>{{item.name}}</ng-container>
6-
<span *ngIf="helper.hasBadge(item)" [ngClass]="helper.getBadgeClass(item)">{{ item.badge.text }}</span>
6+
<span *ngIf="helper.hasBadge(item)" [ngClass]="item | appSidebarNavBadge">{{ item.badge.text }}</span>
77
</a>

projects/coreui/angular/src/lib/sidebar/app-sidebar-nav/app-sidebar-nav-label.component.ts

+12-10
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,30 @@ import {SidebarNavHelper} from '../app-sidebar-nav.service';
88
export class AppSidebarNavLabelComponent implements OnInit {
99
@Input() item: any;
1010

11+
private classes = {
12+
'nav-label': true,
13+
'active': true
14+
};
15+
private iconClasses = {};
16+
1117
constructor(
1218
public helper: SidebarNavHelper
1319
) { }
1420

1521
ngOnInit() {
22+
this.iconClasses = this.helper.getIconClass(this.item);
1623
}
1724

1825
getItemClass() {
19-
const labelClass = {
20-
'nav-label': true,
21-
'active': true
22-
};
2326
const itemClass = this.item.class;
24-
labelClass[itemClass] = !!itemClass;
25-
return labelClass;
27+
this.classes[itemClass] = !!itemClass;
28+
return this.classes;
2629
}
2730
getLabelIconClass() {
28-
const classes = this.helper.getIconClass(this.item);
2931
const variant = `text-${this.item.label.variant}`;
30-
classes[variant] = !!variant;
32+
this.iconClasses[variant] = !!this.item.label.variant;
3133
const labelClass = this.item.label.class;
32-
classes[labelClass] = !!labelClass;
33-
return classes;
34+
this.iconClasses[labelClass] = !!labelClass;
35+
return this.iconClasses;
3436
}
3537
}

projects/coreui/angular/src/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.component.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
[ngClass]="getLinkClass()"
44
href="{{item.url}}"
55
[appHtmlAttr]="item.attributes">
6-
<i *ngIf="helper.hasIcon(item)" [ngClass]="helper.getIconClass(item)"></i>
6+
<i *ngIf="helper.hasIcon(item)" [ngClass]="item | appSidebarNavIcon"></i>
77
<ng-container>{{item.name}}</ng-container>
8-
<span *ngIf="helper.hasBadge(item)" [ngClass]="helper.getBadgeClass(item)">{{ item.badge.text }}</span>
8+
<span *ngIf="helper.hasBadge(item)" [ngClass]="item | appSidebarNavBadge">{{ item.badge.text }}</span>
99
</a>
1010
<a *ngSwitchDefault
1111
[ngClass]="getLinkClass()"
@@ -14,8 +14,8 @@
1414
routerLinkActive="active"
1515
[routerLink]="[item.url]"
1616
(click)="hideMobile()">
17-
<i *ngIf="helper.hasIcon(item)" [ngClass]="helper.getIconClass(item)"></i>
17+
<i *ngIf="helper.hasIcon(item)" [ngClass]="item | appSidebarNavIcon"></i>
1818
<ng-container>{{item.name}}</ng-container>
19-
<span *ngIf="helper.hasBadge(item)" [ngClass]="helper.getBadgeClass(item)">{{ item.badge.text }}</span>
19+
<span *ngIf="helper.hasBadge(item)" [ngClass]="item | appSidebarNavBadge">{{ item.badge.text }}</span>
2020
</a>
2121
</ng-container>

projects/coreui/angular/src/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.component.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ export class AppSidebarNavLinkComponent implements OnInit {
1212
public linkType: string;
1313
public href: string;
1414

15+
private classes = { 'nav-link': true };
16+
1517
constructor(
1618
@Inject(DOCUMENT) private document: any,
1719
private renderer: Renderer2,
@@ -25,16 +27,13 @@ export class AppSidebarNavLinkComponent implements OnInit {
2527

2628
public getLinkClass() {
2729
const disabled = this.isDisabled();
28-
const classes = {
29-
'nav-link': true,
30-
'disabled': disabled,
31-
'btn-link': disabled
32-
};
30+
this.classes['disabled'] = disabled;
31+
this.classes['btn-link'] = disabled;
3332
if (this.hasVariant()) {
3433
const variant = `nav-link-${this.item.variant}`;
35-
classes[variant] = true;
34+
this.classes[variant] = true;
3635
}
37-
return classes;
36+
return this.classes;
3837
}
3938

4039
public getLinkType() {

projects/coreui/angular/src/lib/sidebar/app-sidebar.module.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { AppSidebarNavLinkComponent } from './app-sidebar-nav/app-sidebar-nav-li
1919
import { AppSidebarNavTitleComponent } from './app-sidebar-nav/app-sidebar-nav-title.component';
2020
import { SidebarNavHelper } from './app-sidebar-nav.service';
2121
import { AppSidebarNavLabelComponent } from './app-sidebar-nav/app-sidebar-nav-label.component';
22+
import { AppSidebarNavIconPipe } from './app-sidebar-nav/app-sidebar-nav-icon.pipe';
23+
import { AppSidebarNavBadgePipe } from './app-sidebar-nav/app-sidebar-nav-badge.pipe';
2224

2325
@NgModule({
2426
imports: [
@@ -57,7 +59,9 @@ import { AppSidebarNavLabelComponent } from './app-sidebar-nav/app-sidebar-nav-l
5759
AppSidebarNavTitleComponent,
5860
NavDropdownDirective,
5961
NavDropdownToggleDirective,
60-
AppSidebarNavLabelComponent
62+
AppSidebarNavLabelComponent,
63+
AppSidebarNavIconPipe,
64+
AppSidebarNavBadgePipe
6165
],
6266
providers: [
6367
SidebarNavHelper

0 commit comments

Comments
 (0)