Merge pull request #2177 from alexandrevryghem/fix-metadata-fields-containing-dots_contribute-main

Added input validation for new metadata field submissions & fixed some other small bugs
This commit is contained in:
Tim Donohue
2023-06-06 14:33:58 -05:00
committed by GitHub
7 changed files with 123 additions and 83 deletions

View File

@@ -98,25 +98,39 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
* Initialize the component, setting up the necessary Models for the dynamic form
*/
ngOnInit() {
combineLatest(
combineLatest([
this.translateService.get(`${this.messagePrefix}.element`),
this.translateService.get(`${this.messagePrefix}.qualifier`),
this.translateService.get(`${this.messagePrefix}.scopenote`)
).subscribe(([element, qualifier, scopenote]) => {
]).subscribe(([element, qualifier, scopenote]) => {
this.element = new DynamicInputModel({
id: 'element',
label: element,
name: 'element',
validators: {
required: null,
pattern: '^[^. ,]*$',
maxLength: 64,
},
required: true,
errorMessages: {
pattern: 'error.validation.metadata.element.invalid-pattern',
maxLength: 'error.validation.metadata.element.max-length',
},
});
this.qualifier = new DynamicInputModel({
id: 'qualifier',
label: qualifier,
name: 'qualifier',
validators: {
pattern: '^[^. ,]*$',
maxLength: 64,
},
required: false,
errorMessages: {
pattern: 'error.validation.metadata.qualifier.invalid-pattern',
maxLength: 'error.validation.metadata.qualifier.max-length',
},
});
this.scopeNote = new DynamicInputModel({
id: 'scopeNote',
@@ -132,14 +146,20 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
})
];
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
this.registryService.getActiveMetadataField().subscribe((field) => {
this.formGroup.patchValue({
metadatadatafieldgroup: {
element: field != null ? field.element : '',
qualifier: field != null ? field.qualifier : '',
scopeNote: field != null ? field.scopeNote : ''
}
});
this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => {
if (field == null) {
this.clearFields();
} else {
this.formGroup.patchValue({
metadatadatafieldgroup: {
element: field.element,
qualifier: field.qualifier,
scopeNote: field.scopeNote,
},
});
this.element.disabled = true;
this.qualifier.disabled = true;
}
});
});
}
@@ -157,25 +177,24 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
* When the field has no id attached -> Create new field
* Emit the updated/created field using the EventEmitter submitForm
*/
onSubmit() {
onSubmit(): void {
this.registryService.getActiveMetadataField().pipe(take(1)).subscribe(
(field) => {
const values = {
element: this.element.value,
qualifier: this.qualifier.value,
scopeNote: this.scopeNote.value
};
(field: MetadataField) => {
if (field == null) {
this.registryService.createMetadataField(Object.assign(new MetadataField(), values), this.metadataSchema).subscribe((newField) => {
this.registryService.createMetadataField(Object.assign(new MetadataField(), {
element: this.element.value,
qualifier: this.qualifier.value,
scopeNote: this.scopeNote.value,
}), this.metadataSchema).subscribe((newField: MetadataField) => {
this.submitForm.emit(newField);
});
} else {
this.registryService.updateMetadataField(Object.assign(new MetadataField(), field, {
id: field.id,
element: (values.element ? values.element : field.element),
qualifier: (values.qualifier ? values.qualifier : field.qualifier),
scopeNote: (values.scopeNote ? values.scopeNote : field.scopeNote)
})).subscribe((updatedField) => {
element: field.element,
qualifier: field.qualifier,
scopeNote: this.scopeNote.value,
})).subscribe((updatedField: MetadataField) => {
this.submitForm.emit(updatedField);
});
}
@@ -188,14 +207,10 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
/**
* Reset all input-fields to be empty
*/
clearFields() {
this.formGroup.patchValue({
metadatadatafieldgroup: {
element: '',
qualifier: '',
scopeNote: ''
}
});
clearFields(): void {
this.formGroup.reset('metadatadatafieldgroup');
this.element.disabled = false;
this.qualifier.disabled = false;
}
/**