Skip to content
Snippets Groups Projects
Commit c8e5ada0 authored by Florent Poittevin's avatar Florent Poittevin
Browse files

fix: deposit form validation on license and access level

parent d43ec2a8
No related branches found
No related tags found
No related merge requests found
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
<mat-form-field> <mat-form-field>
<mat-label>{{'admin.user.form.person' | translate }}</mat-label> <mat-label>{{'admin.user.form.person' | translate }}</mat-label>
<mat-select [formControlName]="formDefinition.person"> <mat-select [formControlName]="formDefinition.person">
<mat-option [value]="undefined"></mat-option> <mat-option [value]="null"></mat-option>
<mat-option *ngFor="let person of listPersons" [value]="person.resId"> <mat-option *ngFor="let person of listPersons" [value]="person.resId">
{{person.fullName}} {{person.fullName}}
</mat-option> </mat-option>
......
...@@ -17,7 +17,7 @@ import {isNullOrUndefined, PropertyName, SolidifyValidator} from "solidify-front ...@@ -17,7 +17,7 @@ import {isNullOrUndefined, PropertyName, SolidifyValidator} from "solidify-front
export class AdminUserForm extends SharedAbstractFormPresentational<UsersExtended> { export class AdminUserForm extends SharedAbstractFormPresentational<UsersExtended> {
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition(); formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
applicationRolesNames: any[] = [...Object.values(UserApplicationRoleEnum)]; applicationRolesNames: string[] = [...Object.values(UserApplicationRoleEnum)];
@Input() @Input()
listPersons: People[]; listPersons: People[];
......
...@@ -13,10 +13,9 @@ ...@@ -13,10 +13,9 @@
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>{{'deposit.title' | translate }}</mat-label>
<input [formControlName]="formDefinition.title" <input [formControlName]="formDefinition.title"
matInput matInput
[placeholder]="'deposit.title.placeholder' | translate" [placeholder]="'deposit.title' | translate"
[required]="isRequired(formDefinition.title)" [required]="isRequired(formDefinition.title)"
> >
<mat-error *ngIf="getFormControl(formDefinition.title).invalid">{{'required' | translate}}</mat-error> <mat-error *ngIf="getFormControl(formDefinition.title).invalid">{{'required' | translate}}</mat-error>
...@@ -47,9 +46,12 @@ ...@@ -47,9 +46,12 @@
<input [formControlName]="formDefinition.publicationDate" <input [formControlName]="formDefinition.publicationDate"
matInput matInput
[matDatepicker]="publicationDateDatepicker" [matDatepicker]="publicationDateDatepicker"
[placeholder]="'deposit.publicationDate' | translate"> [placeholder]="'deposit.publicationDate' | translate"
[required]="isRequired(formDefinition.publicationDate)">
<mat-datepicker-toggle matSuffix [for]="publicationDateDatepicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="publicationDateDatepicker"></mat-datepicker-toggle>
<mat-datepicker #publicationDateDatepicker></mat-datepicker> <mat-datepicker #publicationDateDatepicker></mat-datepicker>
<mat-error *ngIf="getFormControl(formDefinition.title).invalid">{{'required' | translate}}</mat-error>
<mat-error *ngFor="let error of getFormControl(formDefinition.title).errors?.errorsFromBackend">{{error}}</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
...@@ -59,6 +61,8 @@ ...@@ -59,6 +61,8 @@
[placeholder]="'deposit.collectionBegin' | translate"> [placeholder]="'deposit.collectionBegin' | translate">
<mat-datepicker-toggle matSuffix [for]="collectionBeginDatepicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="collectionBeginDatepicker"></mat-datepicker-toggle>
<mat-datepicker #collectionBeginDatepicker></mat-datepicker> <mat-datepicker #collectionBeginDatepicker></mat-datepicker>
<mat-error *ngIf="getFormControl(formDefinition.collectionBegin).invalid">{{'required' | translate}}</mat-error>
<mat-error *ngFor="let error of getFormControl(formDefinition.collectionBegin).errors?.errorsFromBackend">{{error}}</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
...@@ -68,6 +72,9 @@ ...@@ -68,6 +72,9 @@
[placeholder]="'deposit.collectionEnd' | translate"> [placeholder]="'deposit.collectionEnd' | translate">
<mat-datepicker-toggle matSuffix [for]="collectionEndDatepicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="collectionEndDatepicker"></mat-datepicker-toggle>
<mat-datepicker #collectionEndDatepicker></mat-datepicker> <mat-datepicker #collectionEndDatepicker></mat-datepicker>
<mat-error *ngIf="getFormControl(formDefinition.collectionEnd).invalid">{{'required' | translate}}</mat-error>
<mat-error *ngFor="let error of getFormControl(formDefinition.collectionEnd).errors?.errorsFromBackend">{{error}}</mat-error>
<!-- {{getFormControl(formDefinition.collectionEnd).errors | json}}-->
</mat-form-field> </mat-form-field>
<dlcm-shared-multi-select [list]="listPersons" <dlcm-shared-multi-select [list]="listPersons"
...@@ -75,20 +82,15 @@ ...@@ -75,20 +82,15 @@
[labelKey]="'fullName'" [labelKey]="'fullName'"
[valueKey]="'resId'" [valueKey]="'resId'"
[placeholder]="'deposit.authors' | translate" [placeholder]="'deposit.authors' | translate"
[required]="isRequired(formDefinition.authors)"
> >
</dlcm-shared-multi-select> </dlcm-shared-multi-select>
<mat-form-field> <mat-form-field>
<mat-label>{{'deposit.accessLevel' | translate }}</mat-label> <mat-label>{{'deposit.accessLevel' | translate }}</mat-label>
<mat-select [formControlName]="formDefinition.accessLevel"> <mat-select [formControlName]="formDefinition.access">
<mat-option [value]="accessModelEnum.PUBLIC"> <mat-option *ngFor="let accessLevel of accessEnumValues" [value]="accessLevel">
{{accessModelEnum.PUBLIC}} {{accessLevel}}
</mat-option>
<mat-option [value]="accessModelEnum.RESTRICTED">
{{accessModelEnum.RESTRICTED}}
</mat-option>
<mat-option [value]="accessModelEnum.CLOSED">
{{accessModelEnum.CLOSED}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
...@@ -97,11 +99,15 @@ ...@@ -97,11 +99,15 @@
<mat-form-field> <mat-form-field>
<mat-label>{{'deposit.license' | translate }}</mat-label> <mat-label>{{'deposit.license' | translate }}</mat-label>
<mat-select [formControlName]="formDefinition.licenseId"> <mat-select [formControlName]="formDefinition.licenseId"
[required]="isRequired(formDefinition.licenseId)">
<mat-option [value]="null"></mat-option>
<mat-option *ngFor="let license of licenses" [value]="license.resId"> <mat-option *ngFor="let license of licenses" [value]="license.resId">
{{license.title}} {{license.title}}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="getFormControl(formDefinition.licenseId).invalid">{{'required' | translate}}</mat-error>
<mat-error *ngFor="let error of getFormControl(formDefinition.licenseId).errors?.errorsFromBackend">{{error}}</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
......
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from "@angular/core"; import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit} from "@angular/core";
import {FormBuilder, Validators} from "@angular/forms"; import {FormBuilder, Validators} from "@angular/forms";
import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.model"; import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.model";
import { import {Deposits, Languages, Licenses, OrganizationalUnits, People, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
Deposits,
Languages,
Licenses,
OrganizationalUnits,
People,
PreservationPolicies,
SubmissionPolicies
} from "@app/generated-api";
import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational"; import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum"; import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model"; import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import _ from "lodash"; import _ from "lodash";
import {distinctUntilChanged, tap} from "rxjs/operators";
import {DateUtil, PropertyName, SolidifyValidator} from "solidify-frontend"; import {DateUtil, PropertyName, SolidifyValidator} from "solidify-frontend";
import AccessEnum = Deposits.AccessEnum; import AccessEnum = Deposits.AccessEnum;
...@@ -23,12 +16,10 @@ import AccessEnum = Deposits.AccessEnum; ...@@ -23,12 +16,10 @@ import AccessEnum = Deposits.AccessEnum;
styleUrls: ["../../../../../shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational.scss"], styleUrls: ["../../../../../shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational.scss"],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class DepositFormPresentational extends SharedAbstractFormPresentational<DepositsExtended> { export class DepositFormPresentational extends SharedAbstractFormPresentational<DepositsExtended> implements OnInit {
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition(); formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
get accessModelEnum(): typeof AccessEnum { accessEnumValues: string[] = [...Object.values(AccessEnum)];
return AccessEnum;
}
@Input() @Input()
languages: Languages[]; languages: Languages[];
...@@ -56,21 +47,42 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational< ...@@ -56,21 +47,42 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
super(_changeDetectorRef); super(_changeDetectorRef);
} }
ngOnInit(): void {
super.ngOnInit();
this.validationLicenseRequiredWhenAccessPublic();
}
private validationLicenseRequiredWhenAccessPublic(): void {
const licenseFormControl = this.form.get(this.formDefinition.licenseId);
this.subscribe(this.form.get(this.formDefinition.access).valueChanges.pipe(
distinctUntilChanged(),
tap(accessLevel => {
if (accessLevel === AccessEnum.PUBLIC) {
licenseFormControl.setValidators([Validators.required]);
} else {
licenseFormControl.setValidators(null);
}
licenseFormControl.updateValueAndValidity();
}),
));
}
protected initNewForm(): void { protected initNewForm(): void {
this.form = this._fb.group({ this.form = this._fb.group({
[this.formDefinition.organizationalUnitId]: ["", [Validators.required, SolidifyValidator]], [this.formDefinition.organizationalUnitId]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.title]: ["", [Validators.required, SolidifyValidator]], [this.formDefinition.title]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.description]: ["", [Validators.required, SolidifyValidator]], [this.formDefinition.description]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.languageId]: [""], [this.formDefinition.languageId]: [""],
[this.formDefinition.publicationDate]: [""], [this.formDefinition.publicationDate]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.collectionBegin]: [""], [this.formDefinition.collectionBegin]: [""],
[this.formDefinition.collectionEnd]: [""], [this.formDefinition.collectionEnd]: [""],
[this.formDefinition.accessLevel]: [AccessEnum.PUBLIC], [this.formDefinition.access]: [AccessEnum.PUBLIC],
[this.formDefinition.hasEmbargo]: [false], [this.formDefinition.hasEmbargo]: [false],
[this.formDefinition.licenseId]: [""], [this.formDefinition.licenseId]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.submissionPolicyId]: [""], [this.formDefinition.submissionPolicyId]: [""],
[this.formDefinition.preservationPolicyId]: [""], [this.formDefinition.preservationPolicyId]: [""],
[this.formDefinition.authors]: [], [this.formDefinition.authors]: ["", [Validators.required, SolidifyValidator]],
}); });
} }
...@@ -80,15 +92,15 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational< ...@@ -80,15 +92,15 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
[this.formDefinition.title]: [deposit.title, [Validators.required, SolidifyValidator]], [this.formDefinition.title]: [deposit.title, [Validators.required, SolidifyValidator]],
[this.formDefinition.description]: [deposit.description, [Validators.required, SolidifyValidator]], [this.formDefinition.description]: [deposit.description, [Validators.required, SolidifyValidator]],
[this.formDefinition.languageId]: [deposit.languageId], [this.formDefinition.languageId]: [deposit.languageId],
[this.formDefinition.publicationDate]: [deposit.publicationDate], [this.formDefinition.publicationDate]: [deposit.publicationDate, [Validators.required, SolidifyValidator]],
[this.formDefinition.collectionBegin]: [DateUtil.convertOffsetDateTimeIso8601ToDate(deposit.collectionBegin)], [this.formDefinition.collectionBegin]: [DateUtil.convertOffsetDateTimeIso8601ToDate(deposit.collectionBegin), [SolidifyValidator]],
[this.formDefinition.collectionEnd]: [DateUtil.convertOffsetDateTimeIso8601ToDate(deposit.collectionEnd)], [this.formDefinition.collectionEnd]: [DateUtil.convertOffsetDateTimeIso8601ToDate(deposit.collectionEnd), [SolidifyValidator]],
[this.formDefinition.accessLevel]: [deposit.access], [this.formDefinition.access]: [deposit.access],
[this.formDefinition.hasEmbargo]: [deposit.hasEmbargo], [this.formDefinition.hasEmbargo]: [deposit.hasEmbargo],
[this.formDefinition.licenseId]: [deposit.licenseId], [this.formDefinition.licenseId]: [deposit.licenseId],
[this.formDefinition.submissionPolicyId]: [deposit.submissionPolicyId], [this.formDefinition.submissionPolicyId]: [deposit.submissionPolicyId],
[this.formDefinition.preservationPolicyId]: [deposit.preservationPolicyId], [this.formDefinition.preservationPolicyId]: [deposit.preservationPolicyId],
[this.formDefinition.authors]: [_.map(this.selectedPersons, LocalModelAttributeEnum.resId)], [this.formDefinition.authors]: [_.map(this.selectedPersons, LocalModelAttributeEnum.resId), [Validators.required, SolidifyValidator]],
}); });
} }
...@@ -109,7 +121,7 @@ class FormComponentFormDefinition extends BaseFormDefinition { ...@@ -109,7 +121,7 @@ class FormComponentFormDefinition extends BaseFormDefinition {
@PropertyName() collectionBegin: string; @PropertyName() collectionBegin: string;
@PropertyName() collectionEnd: string; @PropertyName() collectionEnd: string;
@PropertyName() authors: string; @PropertyName() authors: string;
@PropertyName() accessLevel: string; @PropertyName() access: string;
@PropertyName() hasEmbargo: string; @PropertyName() hasEmbargo: string;
@PropertyName() licenseId: string; @PropertyName() licenseId: string;
@PropertyName() submissionPolicyId: string; @PropertyName() submissionPolicyId: string;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment