diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 2174e0c2bf..7838bfdd25 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -175,7 +175,7 @@ }, "view": { "head": "View Item", - "title": "Item Edit - Item" + "title": "Item Edit - View" }, "curate": { "head": "Curate", diff --git a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html index e20b2a5c84..05eb03dd12 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html +++ b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html @@ -7,19 +7,20 @@
{{"item.edit.metadata.metadatafield.invalid" | translate}} + *ngIf="(valid | async) === false">{{"item.edit.metadata.metadatafield.invalid" | translate}} diff --git a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts index 7d4922de43..47bcc66537 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts +++ b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts @@ -11,7 +11,7 @@ import { FieldChangeType } from '../../../../core/data/object-updates/object-upd import { FieldUpdate } from '../../../../core/data/object-updates/object-updates.reducer'; import { ObjectUpdatesService } from '../../../../core/data/object-updates/object-updates.service'; import { getSucceededRemoteData } from '../../../../core/shared/operators'; -import { FormControl } from '@angular/forms'; +import { NgModel } from '@angular/forms'; @Component({ // tslint:disable-next-line:component-selector @@ -27,14 +27,22 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges { * The current field, value and state of the metadatum */ @Input() fieldUpdate: FieldUpdate; + /** * The current url of this page */ @Input() url: string; + + /** + * List of strings with all metadata field keys available + */ + @Input() metadataFields: string[]; + /** * The metadatum of this field */ metadata: Metadatum; + /** * Emits whether or not this field is currently editable */ @@ -50,11 +58,6 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges { */ metadataFieldSuggestions: BehaviorSubject = new BehaviorSubject([]); - /** - * List of strings with all metadata field keys available - */ - metadataFields: Observable; - constructor( private metadataFieldService: RegistryService, private objectUpdatesService: ObjectUpdatesService, @@ -67,26 +70,26 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges { ngOnInit(): void { this.editable = this.objectUpdatesService.isEditable(this.url, this.metadata.uuid); this.valid = this.objectUpdatesService.isValid(this.url, this.metadata.uuid); - this.metadataFields = this.findMetadataFields() } /** * Sends a new change update for this field to the object updates service */ - update(control?: FormControl) { + update(ngModel?: NgModel) { this.objectUpdatesService.saveChangeFieldUpdate(this.url, this.metadata); - if (hasValue(control)) { - this.checkValidity(control); + if (hasValue(ngModel)) { + this.checkValidity(ngModel); } } /** * Method to check the validity of a form control - * @param control The form control to check + * @param ngModel */ - private checkValidity(control: FormControl) { - control.updateValueAndValidity(); - this.objectUpdatesService.setValidFieldUpdate(this.url, this.metadata.uuid, control.valid); + private checkValidity(ngModel: NgModel) { + ngModel.control.setValue(ngModel.viewModel); + ngModel.control.updateValueAndValidity(); + this.objectUpdatesService.setValidFieldUpdate(this.url, this.metadata.uuid, ngModel.control.valid); } /** @@ -124,30 +127,24 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges { * @param query The query to look for */ findMetadataFieldSuggestions(query: string): void { - this.metadataFieldService.queryMetadataFields(query).pipe( - // getSucceededRemoteData(), - take(1), - map((data) => data.payload.page) - ).subscribe( - (fields: MetadataField[]) => this.metadataFieldSuggestions.next( - fields.map((field: MetadataField) => { - return { - displayValue: field.toString().split('.').join('.​'), - value: field.toString() - } - }) - ) - ); - } - - /** - * Method to request all metadata fields and convert them to a list of strings - */ - findMetadataFields(): Observable { - return this.metadataFieldService.getAllMetadataFields().pipe( - getSucceededRemoteData(), - take(1), - map((remoteData$) => remoteData$.payload.page.map((field: MetadataField) => field.toString()))); + if (isNotEmpty(query)) { + this.metadataFieldService.queryMetadataFields(query).pipe( + // getSucceededRemoteData(), + take(1), + map((data) => data.payload.page) + ).subscribe( + (fields: MetadataField[]) => this.metadataFieldSuggestions.next( + fields.map((field: MetadataField) => { + return { + displayValue: field.toString().split('.').join('.​'), + value: field.toString() + }; + }) + ) + ); + } else { + this.metadataFieldSuggestions.next([]); + } } /** diff --git a/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.html b/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.html index 03b0e143b4..496429a3ba 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.html +++ b/src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.html @@ -33,6 +33,7 @@ + (dsClickOutside)="close();">