From 5b3886e83d338e45a78f52e719e3cf9cac9296c5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jul 2020 15:59:11 +0300 Subject: [PATCH 1/6] feat(theme-shared): add the visible property to NavItem interface #4814 --- npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts | 1 + 1 file changed, 1 insertion(+) 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..ea708fdde6 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 @@ -7,4 +7,5 @@ export interface NavItem { action?: () => void; order?: number; requiredPolicy?: string; + visible?: () => boolean; } From c11aa24e4d318047124d8d5bb7678e0604820c26 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jul 2020 16:00:08 +0300 Subject: [PATCH 2/6] feat(theme-shared): set the visible property default value #4814 --- .../theme-shared/src/lib/services/nav-items.service.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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..92b7c26059 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 @@ -15,7 +15,14 @@ export class NavItemsService { } addItems(items: NavItem[]) { - this._items$.next([...this.items, ...items].sort(sortItems)); + this._items$.next( + [ + ...this.items, + ...items.map(item => + typeof item.visible === 'undefined' ? { ...item, visible: () => true } : item, + ), + ].sort(sortItems), + ); } removeItem(id: string | number) { From 7ea54cdb1b8bdc1faa7c91f9585545bb94d539b4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jul 2020 16:00:38 +0300 Subject: [PATCH 3/6] feat(theme-basic): implement the visible to nav-items.component.html #4814 --- .../nav-items/nav-items.component.html | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) 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 @@ From c2662d8442b455212ae44176a3e87a17bb99103a Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 21 Jul 2020 10:58:29 +0300 Subject: [PATCH 4/6] feat: convert NavItem to class --- .../packages/theme-shared/src/lib/models/nav-item.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 ea708fdde6..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,6 +1,6 @@ import { Type } from '@angular/core'; -export interface NavItem { +export class NavItem { id: string | number; component?: Type; html?: string; @@ -8,4 +8,8 @@ export interface NavItem { order?: number; requiredPolicy?: string; visible?: () => boolean; + constructor(props: Partial) { + props = { ...props, visible: props.visible || (() => true) }; + Object.assign(this, props); + } } From 05e631c87e43aa6f8f5a76868f1c0d2de3bb54d6 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 21 Jul 2020 10:59:17 +0300 Subject: [PATCH 5/6] feat: create new NavItem instance on add and patch --- .../src/lib/services/nav-items.service.ts | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) 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 92b7c26059..d79f293032 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,37 +14,31 @@ export class NavItemsService { return this._items$.asObservable(); } - addItems(items: NavItem[]) { - this._items$.next( - [ - ...this.items, - ...items.map(item => - typeof item.visible === 'undefined' ? { ...item, visible: () => true } : item, - ), - ].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 < -1) 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 < -1) return; + + const items = [...this.items]; + items[index] = new NavItem({ ...items[index], ...item }); + items.sort(sortItems); + this._items$.next(items); } } From 61797e99bb837069982498eb454e29b84d74394d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Tue, 21 Jul 2020 11:02:11 +0300 Subject: [PATCH 6/6] Update nav-items.service.ts --- .../theme-shared/src/lib/services/nav-items.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d79f293032..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 @@ -24,7 +24,7 @@ export class NavItemsService { removeItem(id: string | number) { const index = this.items.findIndex(item => item.id === id); - if (index < -1) return; + if (index < 0) return; const items = [...this.items.slice(0, index), ...this.items.slice(index + 1)]; this._items$.next(items); @@ -33,7 +33,7 @@ export class NavItemsService { patchItem(id: string | number, item: Partial>) { const index = this.items.findIndex(i => i.id === id); - if (index < -1) return; + if (index < 0) return; const items = [...this.items]; items[index] = new NavItem({ ...items[index], ...item });