Skip to content

Commit 6d21d97

Browse files
committed
refactor(sidebar-nav-title): signal inputs, test
1 parent 6597289 commit 6d21d97

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

projects/coreui-angular/src/lib/sidebar/sidebar-nav/sidebar-nav-title.component.spec.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ describe('SidebarNavTitleComponent', () => {
1010
beforeEach(waitForAsync(() => {
1111
TestBed.configureTestingModule({
1212
imports: [SidebarNavTitleComponent]
13-
})
14-
.compileComponents();
13+
}).compileComponents();
1514
}));
1615

1716
beforeEach(() => {
@@ -22,7 +21,7 @@ describe('SidebarNavTitleComponent', () => {
2221
title: true,
2322
name: 'Theme'
2423
};
25-
component.item = item;
24+
fixture.componentRef.setInput('item', item);
2625

2726
fixture.detectChanges();
2827
});

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
1-
import { Component, ElementRef, inject, Input, OnInit, Renderer2 } from '@angular/core';
1+
import { Component, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';
2+
import { INavData } from './sidebar-nav';
23

34
@Component({
45
selector: 'c-sidebar-nav-title',
56
template: ''
67
})
7-
export class SidebarNavTitleComponent implements OnInit {
8+
export class SidebarNavTitleComponent {
89
readonly #elementRef = inject(ElementRef);
910
readonly #renderer = inject(Renderer2);
1011

11-
@Input() item: any;
12+
readonly item = input<INavData>();
1213

13-
ngOnInit(): void {
14-
const nativeElement: HTMLElement = this.#elementRef.nativeElement;
15-
const name = this.#renderer.createText(this.item.name);
14+
readonly #itemEffect = effect(() => {
15+
const item = this.item();
16+
if (item?.name) {
17+
const nativeElement: HTMLElement = this.#elementRef.nativeElement;
18+
const name = this.#renderer.createText(item.name);
1619

17-
if (this.item.class) {
18-
const classes = this.item.class;
19-
this.#renderer.addClass(nativeElement, classes);
20-
}
20+
if (item?.class) {
21+
const classes = item.class;
22+
this.#renderer.addClass(nativeElement, classes);
23+
}
2124

22-
if (this.item.wrapper) {
23-
const wrapper = this.#renderer.createElement(this.item.wrapper.element);
24-
this.addAttribs(this.item.wrapper.attributes, wrapper);
25-
this.#renderer.appendChild(wrapper, name);
26-
this.#renderer.appendChild(nativeElement, wrapper);
27-
} else {
28-
this.#renderer.appendChild(nativeElement, name);
25+
if (item?.wrapper) {
26+
const wrapper = this.#renderer.createElement(item.wrapper.element);
27+
this.addAttribs(item.wrapper.attributes, wrapper);
28+
this.#renderer.appendChild(wrapper, name);
29+
this.#renderer.appendChild(nativeElement, wrapper);
30+
} else {
31+
this.#renderer.appendChild(nativeElement, name);
32+
}
2933
}
30-
}
34+
});
3135

32-
private addAttribs(attribs: { [x: string]: any }, element: any): void {
36+
private addAttribs(attribs: { [x: string]: any }, element: HTMLElement): void {
3337
if (attribs) {
3438
for (const attr in attribs) {
3539
if (attr === 'style' && typeof attribs[attr] === 'object') {

0 commit comments

Comments
 (0)