mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-15 05:53:03 +00:00
65272: filter relationship metadata when displaying on item-metadata, keep them stored in the object-updates store
This commit is contained in:
@@ -100,7 +100,7 @@ export class ItemMetadataComponent extends AbstractItemUpdateComponent {
|
|||||||
* Sends all initial values of this item to the object updates service
|
* Sends all initial values of this item to the object updates service
|
||||||
*/
|
*/
|
||||||
public initializeOriginalFields() {
|
public initializeOriginalFields() {
|
||||||
this.objectUpdatesService.initialize(this.url, this.getMetadataAsListExcludingRelationships(), this.item.lastModified);
|
this.objectUpdatesService.initialize(this.url, this.item.metadataAsList, this.item.lastModified);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -110,12 +110,12 @@ export class ItemMetadataComponent extends AbstractItemUpdateComponent {
|
|||||||
public submit() {
|
public submit() {
|
||||||
this.isValid().pipe(first()).subscribe((isValid) => {
|
this.isValid().pipe(first()).subscribe((isValid) => {
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
const metadata$: Observable<Identifiable[]> = this.objectUpdatesService.getUpdatedFields(this.url, this.getMetadataAsListExcludingRelationships()) as Observable<MetadatumViewModel[]>;
|
const metadata$: Observable<Identifiable[]> = this.objectUpdatesService.getUpdatedFields(this.url, this.item.metadataAsList) as Observable<MetadatumViewModel[]>;
|
||||||
metadata$.pipe(
|
metadata$.pipe(
|
||||||
first(),
|
first(),
|
||||||
switchMap((metadata: MetadatumViewModel[]) => {
|
switchMap((metadata: MetadatumViewModel[]) => {
|
||||||
const updatedItem: Item = Object.assign(cloneDeep(this.item), { metadata: Metadata.toMetadataMap(metadata) });
|
const updatedItem: Item = Object.assign(cloneDeep(this.item), { metadata: Metadata.toMetadataMap(metadata) });
|
||||||
return this.updateService.update(updatedItem, ['relation.*', 'relationship.*']);
|
return this.updateService.update(updatedItem);
|
||||||
}),
|
}),
|
||||||
tap(() => this.updateService.commitUpdates()),
|
tap(() => this.updateService.commitUpdates()),
|
||||||
getSucceededRemoteData()
|
getSucceededRemoteData()
|
||||||
|
@@ -261,26 +261,14 @@ export abstract class DataService<T extends CacheableObject> implements UpdateDa
|
|||||||
* Add a new patch to the object cache
|
* Add a new patch to the object cache
|
||||||
* The patch is derived from the differences between the given object and its version in the object cache
|
* The patch is derived from the differences between the given object and its version in the object cache
|
||||||
* @param {DSpaceObject} object The given object
|
* @param {DSpaceObject} object The given object
|
||||||
* @param ignoreMetadataFields An optional list of metadata fields to ignore updates for (* is allowed as a wildcard, for example: dc.description.*)
|
|
||||||
*/
|
*/
|
||||||
update(object: T, ignoreMetadataFields: string[] = []): Observable<RemoteData<T>> {
|
update(object: T): Observable<RemoteData<T>> {
|
||||||
const ignoreMetadataFieldsPrefix = ignoreMetadataFields.map((field) => field.indexOf('*') > -1 ? field.slice(0, field.indexOf('*')) : field);
|
|
||||||
const oldVersion$ = this.findByHref(object.self);
|
const oldVersion$ = this.findByHref(object.self);
|
||||||
return oldVersion$.pipe(
|
return oldVersion$.pipe(
|
||||||
getSucceededRemoteData(),
|
getSucceededRemoteData(),
|
||||||
getRemoteDataPayload(),
|
getRemoteDataPayload(),
|
||||||
mergeMap((oldVersion: T) => {
|
mergeMap((oldVersion: T) => {
|
||||||
// Fetch operations from difference between old version and new version
|
const operations = this.comparator.diff(oldVersion, object);
|
||||||
// Filter out any metadata operations for a field specified under ignoreMetadataFields
|
|
||||||
const operations = this.comparator.diff(oldVersion, object).filter((operation) => {
|
|
||||||
let ignoredFieldFound = false;
|
|
||||||
ignoreMetadataFieldsPrefix.forEach((fieldPrefix) => {
|
|
||||||
if (operation.path.indexOf('/metadata/' + fieldPrefix) > -1) {
|
|
||||||
ignoredFieldFound = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return !ignoredFieldFound;
|
|
||||||
});
|
|
||||||
if (isNotEmpty(operations)) {
|
if (isNotEmpty(operations)) {
|
||||||
this.objectCache.addPatch(object.self, operations);
|
this.objectCache.addPatch(object.self, operations);
|
||||||
}
|
}
|
||||||
|
@@ -158,8 +158,8 @@ export class ItemTemplateDataService implements UpdateDataService<Item> {
|
|||||||
/**
|
/**
|
||||||
* Add a new patch to the object cache
|
* Add a new patch to the object cache
|
||||||
*/
|
*/
|
||||||
update(object: Item, ignoreMetadataFields: string[] = []): Observable<RemoteData<Item>> {
|
update(object: Item): Observable<RemoteData<Item>> {
|
||||||
return this.dataService.update(object, ignoreMetadataFields);
|
return this.dataService.update(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -97,9 +97,13 @@ export class ObjectUpdatesService {
|
|||||||
let fieldUpdate = objectEntry.fieldUpdates[uuid];
|
let fieldUpdate = objectEntry.fieldUpdates[uuid];
|
||||||
if (isEmpty(fieldUpdate)) {
|
if (isEmpty(fieldUpdate)) {
|
||||||
const identifiable = initialFields.find((object: Identifiable) => object.uuid === uuid);
|
const identifiable = initialFields.find((object: Identifiable) => object.uuid === uuid);
|
||||||
fieldUpdate = { field: identifiable, changeType: undefined };
|
if (hasValue(identifiable)) {
|
||||||
|
fieldUpdate = {field: identifiable, changeType: undefined};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (hasValue(fieldUpdate)) {
|
||||||
fieldUpdates[uuid] = fieldUpdate;
|
fieldUpdates[uuid] = fieldUpdate;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return fieldUpdates;
|
return fieldUpdates;
|
||||||
}))
|
}))
|
||||||
|
@@ -6,6 +6,6 @@ import { RestRequestMethod } from './rest-request-method';
|
|||||||
* Represents a data service to update a given object
|
* Represents a data service to update a given object
|
||||||
*/
|
*/
|
||||||
export interface UpdateDataService<T> {
|
export interface UpdateDataService<T> {
|
||||||
update(object: T, ignoreMetadataFields?: string[]): Observable<RemoteData<T>>;
|
update(object: T): Observable<RemoteData<T>>;
|
||||||
commitUpdates(method?: RestRequestMethod);
|
commitUpdates(method?: RestRequestMethod);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user