From 5aa2c4a355f496338efe690f8455ba6ce5725876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Wed, 13 Apr 2022 12:12:12 +0300 Subject: [PATCH] RED-3827: System managed entities disabled fields --- .../admin/screens/entities/entities.module.ts | 1 + .../entities/screens/info/info.component.ts | 4 +++ .../add-edit-entity.component.ts | 26 ++++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/entities/entities.module.ts b/apps/red-ui/src/app/modules/admin/screens/entities/entities.module.ts index 52fd524dd..5eb3ffe79 100644 --- a/apps/red-ui/src/app/modules/admin/screens/entities/entities.module.ts +++ b/apps/red-ui/src/app/modules/admin/screens/entities/entities.module.ts @@ -13,6 +13,7 @@ const routes = [ { path: 'info', component: InfoComponent, + canDeactivate: [PendingChangesGuard], }, { path: 'dictionary', diff --git a/apps/red-ui/src/app/modules/admin/screens/entities/screens/info/info.component.ts b/apps/red-ui/src/app/modules/admin/screens/entities/screens/info/info.component.ts index 7138f6a32..3e9767245 100644 --- a/apps/red-ui/src/app/modules/admin/screens/entities/screens/info/info.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/entities/screens/info/info.component.ts @@ -52,6 +52,10 @@ export class InfoComponent { this._addEditEntityComponent.revert(); } + get changed(): boolean { + return this._addEditEntityComponent.changed; + } + @HostListener('window:keydown.Enter', ['$event']) async onEnter(event: KeyboardEvent): Promise { event?.stopImmediatePropagation(); diff --git a/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts b/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts index e707b56e5..698595da2 100644 --- a/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts +++ b/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts @@ -42,23 +42,35 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit this.form.patchValue(this.initialFormValue); } + get #caseSensitiveControl() { + return { value: this.entity ? !this.entity.caseInsensitive : false, disabled: this.#isSystemManaged }; + } + + #addToDictionaryActionControl() { + return { value: this.entity?.addToDictionaryAction, disabled: this.#isSystemManaged }; + } + + get #isSystemManaged(): boolean { + return !!this.entity?.systemManaged; + } + private _initializeForm(): void { const controlsConfig = { type: [this.entity?.type], label: [this.entity?.label, [Validators.required, Validators.minLength(3)]], description: [this.entity?.description], - rank: [this.entity?.rank, Validators.required], + rank: [{ value: this.entity?.rank, disabled: this.#isSystemManaged }, Validators.required], hexColor: [this.entity?.hexColor, [Validators.required, Validators.minLength(7)]], recommendationHexColor: [this.entity?.recommendationHexColor, [Validators.required, Validators.minLength(7)]], - hint: [!!this.entity?.hint], - hasDictionary: [!!this.entity?.hasDictionary], + hint: [{ value: !!this.entity?.hint, disabled: this.#isSystemManaged }], + hasDictionary: [{ value: !!this.entity?.hasDictionary, disabled: this.#isSystemManaged }], }; if (!this.entity?.hint) { Object.assign(controlsConfig, { defaultReason: [{ value: null, disabled: true }], - caseSensitive: [this.entity ? !this.entity.caseInsensitive : false], - addToDictionaryAction: [this.entity?.addToDictionaryAction], + caseSensitive: [this.#caseSensitiveControl], + addToDictionaryAction: [this.#addToDictionaryActionControl], }); } const form = this._formBuilder.group(controlsConfig); @@ -71,9 +83,9 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit if (isHint) { REDACTION_FIELDS.forEach(field => form.removeControl(field)); } else { - form.addControl('addToDictionaryAction', new FormControl(this.entity?.addToDictionaryAction)); - form.addControl('caseSensitive', new FormControl(!this.entity?.caseInsensitive)); form.addControl('defaultReason', new FormControl({ value: null, disabled: true })); + form.addControl('caseSensitive', new FormControl(this.#caseSensitiveControl)); + form.addControl('addToDictionaryAction', new FormControl(this.#addToDictionaryActionControl)); } });