diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts index ec82eb9d5..0320cf449 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts @@ -134,13 +134,14 @@ export class UserDetailsComponent extends AutoUnsubscribe implements OnChanges, } private _getForm(): FormGroup { + console.log(this.user); return this._formBuilder.group({ firstName: [this.user?.firstName, Validators.required], lastName: [this.user?.lastName, Validators.required], email: [ { value: this.user?.email, - disabled: !!this.user, + disabled: !!this.user?.email, }, [Validators.required, Validators.email], ], diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html index 6cd5f9d5f..d30210b13 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html @@ -1,12 +1,22 @@
-
-
{{ dossierDictionary?.label }}
-
-
- - {{ 'edit-dossier-dialog.dictionary.entries' | translate: { length: (dossierDictionary?.entries || []).length } }} +
+
+
{{ dossierDictionary?.label }}
+
+
+ + {{ 'edit-dossier-dialog.dictionary.entries' | translate: { length: (dossierDictionary?.entries || []).length } }} +
+ +
+
+ + {{ 'add-edit-dictionary.form.add-to-dictionary-action' | translate }} + +
+
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.scss b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.scss index 84c64d950..db87a56e3 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.scss +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.scss @@ -2,6 +2,14 @@ display: flex; justify-content: space-between; + .header-left { + display: flex; + + .iqser-input-group { + margin-left: 24px; + } + } + .display-name { display: flex; align-items: center; diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index 2e309c464..c56b67c9b 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -7,6 +7,7 @@ import { DictionaryService } from '@shared/services/dictionary.service'; import { CircleButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { FormBuilder, FormGroup } from '@angular/forms'; @Component({ selector: 'redaction-edit-dossier-dictionary', @@ -15,10 +16,13 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; }) export class EditDossierDictionaryComponent implements EditDossierSectionInterface, OnInit { @Input() dossier: Dossier; + + form: FormGroup; canEdit = false; - readonly circleButtonTypes = CircleButtonTypes; dossierDictionary: IDictionary; + readonly circleButtonTypes = CircleButtonTypes; + @ViewChild(DictionaryManagerComponent, { static: false }) private readonly _dictionaryManager: DictionaryManagerComponent; constructor( @@ -26,11 +30,20 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private readonly _dictionaryService: DictionaryService, private readonly _permissionsService: PermissionsService, private readonly _loadingService: LoadingService, + private readonly _formBuilder: FormBuilder, private readonly _toaster: Toaster, ) {} + get formChanged() { + if (this.form) { + return this.form.get('addToDictionaryAction').value !== this.dossierDictionary.addToDictionaryAction; + } + + return false; + } + get changed(): boolean { - return this._dictionaryManager.editor.hasChanges; + return this._dictionaryManager.editor.hasChanges || this.formChanged; } get disabled(): boolean { @@ -38,13 +51,14 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa } get valid(): boolean { - return this._dictionaryManager.editor.hasChanges; + return this._dictionaryManager.editor.hasChanges || this.formChanged; } async ngOnInit() { this._loadingService.start(); this.canEdit = this._permissionsService.isDossierMember(this.dossier); await this._updateDossierDictionary(); + this.form = this._getForm(); this._loadingService.stop(); } @@ -66,6 +80,15 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa async save(): EditDossierSaveResult { try { + const dictionary: IDictionary = { + ...this.dossierDictionary, + type: 'dossier_redaction', + addToDictionaryAction: this.form.get('addToDictionaryAction').value, + }; + await this._dictionaryService + .updateDictionary(dictionary, this.dossier.dossierTemplateId, 'dossier_redaction', this.dossier.id) + .toPromise(); + await this._dictionaryService .saveEntries( this._dictionaryManager.editor.currentEntries, @@ -76,6 +99,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa false, ) .toPromise(); + await this._updateDossierDictionary(); return { success: true }; } catch (error) { @@ -85,6 +109,15 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa revert() { this._dictionaryManager.revert(); + this.form.reset({ + addToDictionaryAction: this.dossierDictionary.addToDictionaryAction, + }); + } + + private _getForm(): FormGroup { + return this._formBuilder.group({ + addToDictionaryAction: [this.dossierDictionary.addToDictionaryAction], + }); } private async _updateDossierDictionary() { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts index 710b4fc6b..bb1727d50 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts @@ -9,6 +9,7 @@ import { PermissionsService } from '@services/permissions.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { Dictionary, Dossier, File, IAddRedactionRequest } from '@red/domain'; import { DossiersService } from '@services/entity-services/dossiers.service'; +import { DictionaryService } from '@shared/services/dictionary.service'; export interface LegalBasisOption { label?: string; @@ -40,6 +41,7 @@ export class ManualAnnotationDialogComponent implements OnInit { private readonly _manualAnnotationService: ManualAnnotationService, private readonly _permissionsService: PermissionsService, private readonly _dossiersService: DossiersService, + private readonly _dictionaryService: DictionaryService, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { manualRedactionEntryWrapper: ManualRedactionEntryWrapper; file: File }, ) { @@ -50,8 +52,6 @@ export class ManualAnnotationDialogComponent implements OnInit { this.isDictionaryRequest = this.data.manualRedactionEntryWrapper.type === 'DICTIONARY' || this.isFalsePositiveRequest; this.redactionForm = this._getForm(); - - this.possibleDictionaries = this._possibleDictionaries; } get title() { @@ -66,10 +66,14 @@ export class ManualAnnotationDialogComponent implements OnInit { return null; } - private get _possibleDictionaries(): Dictionary[] { + private async _getPossibleDictionaries(): Promise { const possibleDictionaries: Dictionary[] = []; const dossier = this._dossier; + const dossierDictionary = await this._dictionaryService + .getForType(dossier.dossierTemplateId, 'dossier_redaction', dossier.dossierId) + .toPromise(); + for (const key of Object.keys(this._appStateService.dictionaryData[dossier.dossierTemplateId])) { const dictionaryData = this._appStateService.getDictionary(key, dossier.dossierTemplateId); if (!dictionaryData.virtual && dictionaryData.addToDictionaryAction) { @@ -77,14 +81,20 @@ export class ManualAnnotationDialogComponent implements OnInit { } } + if (dossierDictionary.addToDictionaryAction) { + // TODO fix this in the backend + possibleDictionaries.push(new Dictionary({ ...dossierDictionary, type: 'dossier_redaction' })); + } + possibleDictionaries.sort((a, b) => a.label.localeCompare(b.label)); return possibleDictionaries; } async ngOnInit() { - const data = await this._justificationsService.getForDossierTemplate(this._dossier.dossierTemplateId).toPromise(); + this.possibleDictionaries = await this._getPossibleDictionaries(); + const data = await this._justificationsService.getForDossierTemplate(this._dossier.dossierTemplateId).toPromise(); this.legalOptions = data.map(lbm => ({ legalBasis: lbm.reason, description: lbm.description, @@ -129,8 +139,10 @@ export class ManualAnnotationDialogComponent implements OnInit { addRedactionRequest.reason = legalOption.description; addRedactionRequest.legalBasis = legalOption.legalBasis; } - addRedactionRequest.addToDictionary = this.isDictionaryRequest; // todo fix this in backend + addRedactionRequest.addToDictionary = this.isDictionaryRequest && addRedactionRequest.type !== 'dossier_redaction'; + addRedactionRequest.addToDossierDictionary = this.isDictionaryRequest && addRedactionRequest.type === 'dossier_redaction'; + if (!addRedactionRequest.reason) { addRedactionRequest.reason = 'Dictionary Request'; } diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index c5a78443c..4c6dd7e9a 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,7 +1,7 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dev-08.iqser.cloud/redaction-gateway-v1", + "API_URL": "https://aks-staging.iqser.cloud/redaction-gateway-v1", "APP_NAME": "RedactManager", "AUTO_READ_TIME": 1.5, "BACKEND_APP_VERSION": "4.4.40", @@ -17,7 +17,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dev-08.iqser.cloud/auth/realms/redaction", + "OAUTH_URL": "https://aks-staging.iqser.cloud/auth/realms/redaction", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural" }