diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html index 955ccb8878..d01e6cda38 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html @@ -1,16 +1,18 @@ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts index ea3d5c45a2..7fcb154cbf 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts @@ -1,10 +1,15 @@ import { Type } from '@angular/core'; -export interface NavItem { +export class NavItem { id: string | number; component?: Type; html?: string; action?: () => void; order?: number; requiredPolicy?: string; + visible?: () => boolean; + constructor(props: Partial) { + props = { ...props, visible: props.visible || (() => true) }; + Object.assign(this, props); + } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/nav-items.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/nav-items.service.ts index 874fc4b6e3..ca361a2940 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/nav-items.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/nav-items.service.ts @@ -14,30 +14,31 @@ export class NavItemsService { return this._items$.asObservable(); } - addItems(items: NavItem[]) { - this._items$.next([...this.items, ...items].sort(sortItems)); + addItems(newItems: NavItem[]) { + const items = [...this.items]; + newItems.forEach(item => items.push(new NavItem(item))); + items.sort(sortItems); + this._items$.next(items); } removeItem(id: string | number) { const index = this.items.findIndex(item => item.id === id); - if (index > -1) { - this._items$.next([...this.items.slice(0, index), ...this.items.slice(index + 1)]); - } + if (index < 0) return; + + const items = [...this.items.slice(0, index), ...this.items.slice(index + 1)]; + this._items$.next(items); } patchItem(id: string | number, item: Partial>) { const index = this.items.findIndex(i => i.id === id); - if (index > -1) { - this._items$.next( - [ - ...this.items.slice(0, index), - { ...this.items[index], ...item }, - ...this.items.slice(index + 1), - ].sort(sortItems), - ); - } + if (index < 0) return; + + const items = [...this.items]; + items[index] = new NavItem({ ...items[index], ...item }); + items.sort(sortItems); + this._items$.next(items); } }