From bb88b4d739575ee6587c879e3494ddad8bf49755 Mon Sep 17 00:00:00 2001 From: Wroud Date: Wed, 14 Oct 2020 21:59:39 +0300 Subject: [PATCH] feat(core-administration): CB-337 pages replacement possibility --- .../AdministrationItemService.ts | 15 +++++++++++---- .../orderAdministrationItems.ts | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/webapp/packages/core-administration/src/AdministrationItem/AdministrationItemService.ts b/webapp/packages/core-administration/src/AdministrationItem/AdministrationItemService.ts index 235a23e167..f68d660f33 100644 --- a/webapp/packages/core-administration/src/AdministrationItem/AdministrationItemService.ts +++ b/webapp/packages/core-administration/src/AdministrationItem/AdministrationItemService.ts @@ -35,6 +35,7 @@ export class AdministrationItemService { filterConfigurationWizard(configurationWizard)(item) && item.name === name )); + if (!item) { return null; } @@ -51,14 +52,16 @@ export class AdministrationItemService { return sub; } - create(options: IAdministrationItemOptions) { + create(options: IAdministrationItemOptions, replace?: boolean): void { const type = options.type ?? AdministrationItemType.Administration; - if (this.items.some(item => item.name === options.name && ( + const existedIndex = this.items.findIndex(item => item.name === options.name && ( item.type === type || item.type === AdministrationItemType.Default || type === AdministrationItemType.Default - ))) { + )); + + if (!replace && existedIndex !== -1) { throw new Error(`Administration item "${options.name}" already exists in the same visibility scope`); } @@ -68,7 +71,11 @@ export class AdministrationItemService { sub: options.sub ?? [], order: options.order ?? Number.MAX_SAFE_INTEGER, }; - this.items.push(item); + if (replace && existedIndex !== -1) { + this.items.splice(existedIndex, 1, item); + } else { + this.items.push(item); + } } async activate(name: string, itemSub: string | null, param: string | null, configurationWizard: boolean) { diff --git a/webapp/packages/core-administration/src/AdministrationItem/orderAdministrationItems.ts b/webapp/packages/core-administration/src/AdministrationItem/orderAdministrationItems.ts index d9f47b64ef..cae1e7ba98 100644 --- a/webapp/packages/core-administration/src/AdministrationItem/orderAdministrationItems.ts +++ b/webapp/packages/core-administration/src/AdministrationItem/orderAdministrationItems.ts @@ -9,7 +9,7 @@ import { IAdministrationItem } from './IAdministrationItem'; export function orderAdministrationItems(configuration: boolean) { - return (itemA: IAdministrationItem, itemB: IAdministrationItem) => { + return (itemA: IAdministrationItem, itemB: IAdministrationItem): number => { if (configuration) { return ( itemA.configurationWizardOptions?.order ?? itemA.order