mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-18 23:43:01 +00:00
fix a number of issues with name variants
This commit is contained in:
@@ -83,7 +83,12 @@ import { SelectableListService } from '../../../object-list/selectable-list/sele
|
||||
import { DsDynamicDisabledComponent } from './models/disabled/dynamic-disabled.component';
|
||||
import { DYNAMIC_FORM_CONTROL_TYPE_DISABLED } from './models/disabled/dynamic-disabled.model';
|
||||
import { DsDynamicLookupRelationModalComponent } from './relation-lookup-modal/dynamic-lookup-relation-modal.component';
|
||||
import { getAllSucceededRemoteData, getRemoteDataPayload, getSucceededRemoteData } from '../../../../core/shared/operators';
|
||||
import {
|
||||
getAllSucceededRemoteData,
|
||||
getRemoteDataPayload,
|
||||
getSucceededRemoteData,
|
||||
getAllSucceededRemoteDataPayload, getPaginatedListPayload, getFirstSucceededRemoteDataPayload
|
||||
} from '../../../../core/shared/operators';
|
||||
import { RemoteData } from '../../../../core/data/remote-data';
|
||||
import { Item } from '../../../../core/shared/item.model';
|
||||
import { ItemDataService } from '../../../../core/data/item-data.service';
|
||||
@@ -95,11 +100,13 @@ import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||
import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
|
||||
import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
|
||||
import { Collection } from '../../../../core/shared/collection.model';
|
||||
import { MetadataValue } from '../../../../core/shared/metadata.models';
|
||||
import { MetadataValue, VIRTUAL_METADATA_PREFIX } from '../../../../core/shared/metadata.models';
|
||||
import { FormService } from '../../form.service';
|
||||
import { SelectableListState } from '../../../object-list/selectable-list/selectable-list.reducer';
|
||||
import { SubmissionService } from '../../../../submission/submission.service';
|
||||
import { followLink } from '../../../utils/follow-link-config.model';
|
||||
import { paginatedRelationsToItems } from '../../../../+item-page/simple/item-types/shared/item-relationships-utils';
|
||||
import { RelationshipOptions } from '../models/relationship-options.model';
|
||||
|
||||
export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type<DynamicFormControl> | null {
|
||||
switch (model.type) {
|
||||
@@ -261,13 +268,37 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo
|
||||
}
|
||||
}
|
||||
if (this.model.relationshipConfig) {
|
||||
const relationshipOptions = Object.assign(new RelationshipOptions(), this.model.relationshipConfig);
|
||||
this.listId = 'list-' + this.model.relationshipConfig.relationshipType;
|
||||
this.setItem();
|
||||
const subscription = this.selectableListService.getSelectableList(this.listId).pipe(
|
||||
find((list: SelectableListState) => hasNoValue(list)),
|
||||
switchMap(() => this.item$.pipe(take(1))),
|
||||
switchMap((item) => {
|
||||
return this.relationshipService.getRelatedItemsByLabel(item, this.model.relationshipConfig.relationshipType).pipe(
|
||||
const relationshipsRD$ = this.relationshipService.getItemRelationshipsByLabel(item,
|
||||
this.model.relationshipConfig.relationshipType,
|
||||
undefined,
|
||||
followLink('leftItem'),
|
||||
followLink('rightItem'),
|
||||
followLink('relationshipType')
|
||||
);
|
||||
|
||||
relationshipsRD$.pipe(
|
||||
getFirstSucceededRemoteDataPayload(),
|
||||
getPaginatedListPayload()
|
||||
).subscribe((relationships: Relationship[]) => {
|
||||
// set initial namevariants for pre-existing relationships
|
||||
relationships.forEach((relationship: Relationship) => {
|
||||
const relationshipMD: MetadataValue = item.firstMetadata(relationshipOptions.metadataField, { authority: `${VIRTUAL_METADATA_PREFIX}${relationship.id}` });
|
||||
const nameVariantMD: MetadataValue = item.firstMetadata(this.model.metadataFields, { authority: `${VIRTUAL_METADATA_PREFIX}${relationship.id}` });
|
||||
if (hasValue(relationshipMD) && isNotEmpty(relationshipMD.value) && hasValue(nameVariantMD) && isNotEmpty(nameVariantMD.value)) {
|
||||
this.relationshipService.setNameVariant(this.listId, relationshipMD.value, nameVariantMD.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return relationshipsRD$.pipe(
|
||||
paginatedRelationsToItems(item.uuid),
|
||||
getSucceededRemoteData(),
|
||||
map((items: RemoteData<PaginatedList<Item>>) => items.payload.page.map((i) => Object.assign(new ItemSearchResult(), { indexableObject: i }))),
|
||||
)
|
||||
|
@@ -208,6 +208,7 @@ export class ExistingMetadataListElementComponent implements OnInit, OnChanges,
|
||||
const relationMD: MetadataValue = this.submissionItem.firstMetadata(this.relationshipOptions.metadataField, { value: this.relatedItem.uuid });
|
||||
if (hasValue(relationMD)) {
|
||||
const metadataRepresentationMD: MetadataValue = this.submissionItem.firstMetadata(this.metadataFields, { authority: relationMD.authority });
|
||||
|
||||
const nextValue = Object.assign(
|
||||
new ItemMetadataRepresentation(metadataRepresentationMD),
|
||||
this.relatedItem
|
||||
|
@@ -7,6 +7,7 @@ export interface DynamicRowArrayModelConfig extends DynamicFormArrayModelConfig
|
||||
submissionId: string;
|
||||
relationshipConfig: RelationshipOptions;
|
||||
metadataKey: string;
|
||||
metadataFields: string[];
|
||||
}
|
||||
|
||||
export class DynamicRowArrayModel extends DynamicFormArrayModel {
|
||||
@@ -15,6 +16,7 @@ export class DynamicRowArrayModel extends DynamicFormArrayModel {
|
||||
@serializable() submissionId: string;
|
||||
@serializable() relationshipConfig: RelationshipOptions;
|
||||
@serializable() metadataKey: string;
|
||||
@serializable() metadataFields: string[];
|
||||
isRowArray = true;
|
||||
|
||||
constructor(config: DynamicRowArrayModelConfig, layout?: DynamicFormControlLayout) {
|
||||
@@ -24,5 +26,6 @@ export class DynamicRowArrayModel extends DynamicFormArrayModel {
|
||||
this.submissionId = config.submissionId;
|
||||
this.relationshipConfig = config.relationshipConfig;
|
||||
this.metadataKey = config.metadataKey;
|
||||
this.metadataFields = config.metadataFields;
|
||||
}
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ import { RequestService } from '../../../../../core/data/request.service';
|
||||
import { ServerSyncBufferActionTypes } from '../../../../../core/cache/server-sync-buffer.actions';
|
||||
import { CommitPatchOperationsAction, JsonPatchOperationsActionTypes, PatchOperationsActions } from '../../../../../core/json-patch/json-patch-operations.actions';
|
||||
import { followLink } from '../../../../utils/follow-link-config.model';
|
||||
import { RemoteData } from '../../../../../core/data/remote-data';
|
||||
|
||||
const DEBOUNCE_TIME = 500;
|
||||
|
||||
@@ -101,10 +102,14 @@ export class RelationshipEffects {
|
||||
if (inProgress) {
|
||||
this.nameVariantUpdates[identifier] = nameVariant;
|
||||
} else {
|
||||
this.relationshipService.updateNameVariant(item1, item2, relationshipType, nameVariant).pipe(take(1))
|
||||
.subscribe(() => {
|
||||
this.updateAfterPatchSubmissionId = submissionId;
|
||||
});
|
||||
this.relationshipService.updateNameVariant(item1, item2, relationshipType, nameVariant).pipe(
|
||||
filter((relationshipRD: RemoteData<Relationship>) => hasValue(relationshipRD.payload)),
|
||||
take(1)
|
||||
).subscribe(() => {
|
||||
this.updateAfterPatchSubmissionId = submissionId;
|
||||
this.relationshipService.refreshRelationshipItemsInCache(item1);
|
||||
this.relationshipService.refreshRelationshipItemsInCache(item2);
|
||||
});
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -161,8 +166,6 @@ export class RelationshipEffects {
|
||||
|
||||
private removeRelationship(item1: Item, item2: Item, relationshipType: string, submissionId: string) {
|
||||
this.relationshipService.getRelationshipByItemsAndLabel(item1, item2, relationshipType).pipe(
|
||||
take(1),
|
||||
hasValueOperator(),
|
||||
mergeMap((relationship: Relationship) => this.relationshipService.deleteRelationship(relationship.id, 'none')),
|
||||
take(1),
|
||||
switchMap(() => this.refreshWorkspaceItemInCache(submissionId)),
|
||||
|
Reference in New Issue
Block a user