From e00525da1fe20a8c983cb705711d68aa02e7d1a9 Mon Sep 17 00:00:00 2001 From: Wroud Date: Wed, 21 Oct 2020 22:43:23 +0300 Subject: [PATCH] feat(core-administration): CB-339 page state validation --- .../AdministrationScreenService.ts | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts index b9c0d070a8..3cbb9fd614 100644 --- a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts +++ b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts @@ -124,8 +124,12 @@ export class AdministrationScreenService { } getItemState(name: string): T | undefined - getItemState(name: string, defaultState: () => T, update?: boolean): T - getItemState(name: string, defaultState?: () => T, update?: boolean): T | undefined { + getItemState(name: string, defaultState: () => T, update?: boolean, validate?: (state: T) => boolean): T + getItemState( + name: string, defaultState?: () => T, + update?: boolean, + validate?: (state: T) => boolean + ): T | undefined { if (!this.serverConfigResource.isLoaded()) { throw new Error('Administration screen getItemState can be used only after server configuration loaded'); } @@ -133,8 +137,17 @@ export class AdministrationScreenService { this.clearItemsState(); this.info.mode = this.isConfigurationMode; } - if ((!this.itemState.has(name) || update) && defaultState) { - this.itemState.set(name, defaultState()); + + if (defaultState) { + if (!this.itemState.has(name) || update) { + this.itemState.set(name, defaultState()); + } else if (validate) { + const state = this.itemState.get(name)!; + + if (!validate(state)) { + this.itemState.set(name, defaultState()); + } + } } return this.itemState.get(name);