From 8244b84378148a8d23f60637387000879d510412 Mon Sep 17 00:00:00 2001 From: Florent POITTEVIN <poittevin.florent@gmail.com> Date: Wed, 26 May 2021 15:22:48 +0200 Subject: [PATCH 1/2] fix(deposit contributor): [AOU-515] when adding contributors the number of errors is not updated directly --- .../deposit-form.presentational.ts | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts index 8a473bbf2..86f3f3cbc 100644 --- a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts +++ b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts @@ -107,8 +107,8 @@ import { ConfirmDialog, ConfirmDialogData, isArray, - isEmptyString, isFalse, + isInstanceOf, isNonEmptyArray, isNonEmptyString, isNotNullNorUndefined, @@ -661,21 +661,12 @@ export class DepositFormPresentational extends AbstractPresentational implements private computeValidationTitleLanguage(subType: Enums.Deposit.DepositFriendlyNameSubTypeEnum): void { const formControlTitleLanguage = this.form.get(DepositFormRuleHelper.pathTitleLanguage) as FormControl; - const formArrayLanguages = this.form.get(DepositFormRuleHelper.pathLanguages) as FormArray; if ([ Enums.Deposit.DepositFriendlyNameSubTypeEnum.THESIS, Enums.Deposit.DepositFriendlyNameSubTypeEnum.MASTER_OF_ADVANCED_STUDIES, Enums.Deposit.DepositFriendlyNameSubTypeEnum.MASTER_DEGREE, Enums.Deposit.DepositFriendlyNameSubTypeEnum.PRIVATE_DOCTOR_THESIS, ].indexOf(subType) !== -1) { - if (isNullOrUndefined(formControlTitleLanguage.value) || isEmptyString(formControlTitleLanguage.value)) { - if (formArrayLanguages.controls.length > 0) { - const languageDeposit = formArrayLanguages.controls[0].get(this.formDefinitionDepositFormLanguage.language)?.value; - if (isNonEmptyString(languageDeposit)) { - formControlTitleLanguage.setValue(languageDeposit); - } - } - } formControlTitleLanguage.setValidators([SolidifyValidator, Validators.required]); } else { formControlTitleLanguage.setValidators([SolidifyValidator]); @@ -963,8 +954,8 @@ export class DepositFormPresentational extends AbstractPresentational implements ); } - private _getNumberFormError(formGroupFourthStepDescription: FormGroup): number { - const errors = this._collectErrorsInArray(formGroupFourthStepDescription); + private _getNumberFormError(formGroupFourthStepDescription: FormGroup, stopOnFirstArray: boolean = true): number { + const errors = this._collectErrorsInArray(formGroupFourthStepDescription, stopOnFirstArray); if (isNullOrUndefined(errors)) { return 0; } @@ -972,7 +963,13 @@ export class DepositFormPresentational extends AbstractPresentational implements } private _isFormGroup(control: AbstractControl): control is FormGroup { - return !!(<FormGroup> control).controls; + // TODO MOVE INTO SOLIDIFIY + return isInstanceOf(control, FormGroup) && !!(<FormGroup> control).controls; + } + + private _isFormArray(control: AbstractControl): control is FormArray { + // TODO MOVE INTO SOLIDIFIY + return isInstanceOf(control, FormArray) && !!(<FormArray> control).controls; } private _collectErrorsInNestedObject(control: AbstractControl): any | null { @@ -994,13 +991,25 @@ export class DepositFormPresentational extends AbstractPresentational implements } } - private _collectErrorsInArray(control: AbstractControl, listErrors: any[] = []): any[] | null { - // TODO MOVE INTO SOLIDIFY + private _collectErrorsInArray(control: AbstractControl, stopOnInvalidArray: boolean, listErrors: any[] = []): any[] | null { + // TODO MOVE INTO SOLIDIFIY if (this._isFormGroup(control)) { Object.entries(control.controls).forEach((c) => { - this._collectErrorsInArray(c[1], listErrors); + const abstractControl: AbstractControl = c[1]; + this._collectErrorsInArray(abstractControl, stopOnInvalidArray, listErrors); }); return listErrors; + } else if (this._isFormArray(control)) { + Object.entries(control.controls).forEach((c) => { + const abstractControl: AbstractControl = c[1]; + if (stopOnInvalidArray && control.status === "INVALID") { + if (abstractControl.status === "INVALID") { + listErrors.push({"arrayItemInError": true}); + } + } else { + this._collectErrorsInArray(abstractControl, stopOnInvalidArray, listErrors); + } + }); } else { if (isNotNullNorUndefined(control.errors) && (control.dirty || control.touched)) { listErrors.push(control.errors); -- GitLab From a21daf5b0905f9853e6e561950580e25e886cbfa Mon Sep 17 00:00:00 2001 From: Florent POITTEVIN <poittevin.florent@gmail.com> Date: Wed, 26 May 2021 15:51:44 +0200 Subject: [PATCH 2/2] fix: avoid to display error on next step after import in creation step --- .../deposit-form/deposit-form.presentational.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts index 86f3f3cbc..53e213e1c 100644 --- a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts +++ b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts @@ -99,6 +99,7 @@ import { import { debounceTime, distinctUntilChanged, + filter, map, tap, } from "rxjs/operators"; @@ -930,6 +931,7 @@ export class DepositFormPresentational extends AbstractPresentational implements this.subscribe(this._observeValueChangeForUpdateErrorNumber(this.formGroupThirdStepContributors).pipe( distinctUntilChanged(), + filter(numberError => isNotNullNorUndefined(this.model)), // allow to avoid to display error on creation step due to import tap(numberError => { this.errorThirdStepContributors = numberError; this.stepper.triggerDetectChanges(); @@ -939,6 +941,7 @@ export class DepositFormPresentational extends AbstractPresentational implements this.subscribe(this._observeValueChangeForUpdateErrorNumber(this.formGroupFourthStepDescription).pipe( distinctUntilChanged(), + filter(numberError => isNotNullNorUndefined(this.model)), // allow to avoid to display error on creation step due to import tap(numberError => { this.errorFourthStepDescription = numberError; this.stepper.triggerDetectChanges(); -- GitLab