diff --git a/libs/sketch/src/lib/components/list/directives/list-item-active.directive.ts b/libs/sketch/src/lib/components/list/directives/list-item-active.directive.ts index 536892a..31f7d86 100644 --- a/libs/sketch/src/lib/components/list/directives/list-item-active.directive.ts +++ b/libs/sketch/src/lib/components/list/directives/list-item-active.directive.ts @@ -1,4 +1,12 @@ -import { Directive, HostListener, inject, input, OnInit } from '@angular/core'; +import { + Directive, + effect, + HostListener, + inject, + input, + OnInit, + untracked, +} from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { toSignal } from '@angular/core/rxjs-interop'; import { map } from 'rxjs'; @@ -21,7 +29,7 @@ export class ListItemActiveDirective implements OnInit { this.activatedRoute.url.pipe(map((url) => url.join('/'))) ); - itemId = input.required({ alias: 'skListItemId' }); + readonly itemId = input.required({ alias: 'skListItemId' }); @HostListener('click', ['$event']) onClick(event: MouseEvent): void { @@ -37,15 +45,13 @@ export class ListItemActiveDirective implements OnInit { } } - ngOnInit(): void { - if (!this.listProvider.enableRouting()) { - return; - } - const active = this.activatedUrl()?.includes(this.itemId()); + protected readonly updateActiveItemId = effect(() => { + const id = untracked(this.itemId); + const active = this.activatedUrl()?.includes(id); if (active) { setTimeout(() => { - this.listService.setActive(this.itemId()); + this.listService.setActive(id); }, 16); } - } + }); }