From c1b837096c5edbfc70789451998f389d933a7bf8 Mon Sep 17 00:00:00 2001 From: patrickjahr Date: Tue, 16 Apr 2024 12:51:01 +0200 Subject: [PATCH] feat(list): update active item on every navigation --- .../directives/list-item-active.directive.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) 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); } - } + }); }