diff --git a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts
index 927a4a96b1..cefbb3620a 100644
--- a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts
+++ b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts
@@ -44,7 +44,7 @@ const metadatum = Object.assign(new Metadatum(), {
language: 'en'
});
-const route = 'http://test-url.com/test-url';
+const url = 'http://test-url.com/test-url';
const fieldUpdate = {
field: metadatum,
changeType: undefined
@@ -92,7 +92,7 @@ describe('EditInPlaceFieldComponent', () => {
de = fixture.debugElement.query(By.css('div.d-flex'));
el = de.nativeElement;
- comp.route = route;
+ comp.url = url;
comp.fieldUpdate = fieldUpdate;
comp.metadata = metadatum;
@@ -104,8 +104,8 @@ describe('EditInPlaceFieldComponent', () => {
comp.update();
});
- it('it should call saveChangeFieldUpdate on the objectUpdatesService with the correct route and metadata', () => {
- expect(objectUpdatesService.saveChangeFieldUpdate).toHaveBeenCalledWith(route, metadatum);
+ it('it should call saveChangeFieldUpdate on the objectUpdatesService with the correct url and metadata', () => {
+ expect(objectUpdatesService.saveChangeFieldUpdate).toHaveBeenCalledWith(url, metadatum);
});
});
@@ -145,8 +145,8 @@ describe('EditInPlaceFieldComponent', () => {
comp.setEditable(editable);
});
- it('it should call setEditableFieldUpdate on the objectUpdatesService with the correct route and uuid and false', () => {
- expect(objectUpdatesService.setEditableFieldUpdate).toHaveBeenCalledWith(route, metadatum.uuid, editable);
+ it('it should call setEditableFieldUpdate on the objectUpdatesService with the correct url and uuid and false', () => {
+ expect(objectUpdatesService.setEditableFieldUpdate).toHaveBeenCalledWith(url, metadatum.uuid, editable);
});
});
@@ -203,8 +203,8 @@ describe('EditInPlaceFieldComponent', () => {
comp.remove();
});
- it('it should call saveRemoveFieldUpdate on the objectUpdatesService with the correct route and metadata', () => {
- expect(objectUpdatesService.saveRemoveFieldUpdate).toHaveBeenCalledWith(route, metadatum);
+ it('it should call saveRemoveFieldUpdate on the objectUpdatesService with the correct url and metadata', () => {
+ expect(objectUpdatesService.saveRemoveFieldUpdate).toHaveBeenCalledWith(url, metadatum);
});
});
@@ -213,8 +213,8 @@ describe('EditInPlaceFieldComponent', () => {
comp.removeChangesFromField();
});
- it('it should call removeChangesFromField on the objectUpdatesService with the correct route and uuid', () => {
- expect(objectUpdatesService.removeSingleFieldUpdate).toHaveBeenCalledWith(route, metadatum.uuid);
+ it('it should call removeChangesFromField on the objectUpdatesService with the correct url and uuid', () => {
+ expect(objectUpdatesService.removeSingleFieldUpdate).toHaveBeenCalledWith(url, metadatum.uuid);
});
});
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 d0b35b7a82..f24de359b8 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
@@ -10,7 +10,6 @@ import { InputSuggestion } from '../../../../shared/input-suggestions/input-sugg
import { FieldChangeType } from '../../../../core/data/object-updates/object-updates.actions';
import { FieldUpdate } from '../../../../core/data/object-updates/object-updates.reducer';
import { ObjectUpdatesService } from '../../../../core/data/object-updates/object-updates.service';
-import { inListValidator } from '../../../../shared/utils/validator.functions';
import { getSucceededRemoteData } from '../../../../core/shared/operators';
import { FormControl } from '@angular/forms';
@@ -28,9 +27,9 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges {
*/
@Input() fieldUpdate: FieldUpdate;
/**
- * The current route of this page
+ * The current url of this page
*/
- @Input() route: string;
+ @Input() url: string;
/**
* The metadatum of this field
*/
@@ -65,8 +64,8 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges {
* Sets up an observable that keeps track of the current editable and valid state of this field
*/
ngOnInit(): void {
- this.editable = this.objectUpdatesService.isEditable(this.route, this.metadata.uuid);
- this.valid = this.objectUpdatesService.isValid(this.route, this.metadata.uuid);
+ this.editable = this.objectUpdatesService.isEditable(this.url, this.metadata.uuid);
+ this.valid = this.objectUpdatesService.isValid(this.url, this.metadata.uuid);
this.metadataFields = this.findMetadataFields()
}
@@ -74,32 +73,41 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges {
* Sends a new change update for this field to the object updates service
*/
update(control?: FormControl) {
- this.objectUpdatesService.saveChangeFieldUpdate(this.route, this.metadata);
+ this.objectUpdatesService.saveChangeFieldUpdate(this.url, this.metadata);
if (hasValue(control)) {
- this.objectUpdatesService.setValidFieldUpdate(this.route, this.metadata.uuid, control.valid);
+ this.checkValidity(control);
}
}
+ /**
+ * Method to check the validity of a form control
+ * @param control The form control to check
+ */
+ private checkValidity(control: FormControl) {
+ control.updateValueAndValidity();
+ this.objectUpdatesService.setValidFieldUpdate(this.url, this.metadata.uuid, control.valid);
+ }
+
/**
* Sends a new editable state for this field to the service to change it
* @param editable The new editable state for this field
*/
setEditable(editable: boolean) {
- this.objectUpdatesService.setEditableFieldUpdate(this.route, this.metadata.uuid, editable);
+ this.objectUpdatesService.setEditableFieldUpdate(this.url, this.metadata.uuid, editable);
}
/**
* Sends a new remove update for this field to the object updates service
*/
remove() {
- this.objectUpdatesService.saveRemoveFieldUpdate(this.route, this.metadata);
+ this.objectUpdatesService.saveRemoveFieldUpdate(this.url, this.metadata);
}
/**
* Notifies the object updates service that the updates for the current field can be removed
*/
removeChangesFromField() {
- this.objectUpdatesService.removeSingleFieldUpdate(this.route, this.metadata.uuid);
+ this.objectUpdatesService.removeSingleFieldUpdate(this.url, this.metadata.uuid);
}
/**
@@ -170,15 +178,7 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges {
* @return an observable that emits true when the user should be able to remove this field and false when they should not
*/
canRemove(): Observable {
- return this.editable.pipe(
- map((editable: boolean) => {
- if (editable) {
- return false;
- } else {
- return this.fieldUpdate.changeType !== FieldChangeType.REMOVE && this.fieldUpdate.changeType !== FieldChangeType.ADD;
- }
- })
- );
+ return observableOf(this.fieldUpdate.changeType !== FieldChangeType.REMOVE && this.fieldUpdate.changeType !== FieldChangeType.ADD);
}
/**
@@ -186,7 +186,9 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges {
* @return an observable that emits true when the user should be able to undo changes to this field and false when they should not
*/
canUndo(): Observable {
- return observableOf(this.fieldUpdate.changeType >= 0);
+ return this.editable.pipe(
+ map((editable: boolean) => this.fieldUpdate.changeType >= 0 || editable)
+ );
}
protected isNotEmpty(value): boolean {
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 36d18372bd..04896ee4a6 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
@@ -5,8 +5,7 @@
(click)="add()"> {{"item.edit.metadata.add-button" | translate}}
-
-