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);