mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
workspace item update after move
This commit is contained in:
@@ -410,8 +410,8 @@ export class RelationshipService extends DataService<Relationship> {
|
|||||||
const update$ = this.update(updatedRelationship);
|
const update$ = this.update(updatedRelationship);
|
||||||
|
|
||||||
update$.pipe(
|
update$.pipe(
|
||||||
filter((relationshipRD: RemoteData<Relationship>) => relationshipRD.state === RemoteDataState.ResponsePending),
|
// filter((relationshipRD: RemoteData<Relationship>) => relationshipRD.state === RemoteDataState.ResponsePending),
|
||||||
take(1),
|
// take(1),
|
||||||
).subscribe((relationshipRD: RemoteData<Relationship>) => {
|
).subscribe((relationshipRD: RemoteData<Relationship>) => {
|
||||||
if (relationshipRD.state === RemoteDataState.ResponsePending) {
|
if (relationshipRD.state === RemoteDataState.ResponsePending) {
|
||||||
this.refreshRelationshipItemsInCacheByRelationship(reoRel.relationship.id);
|
this.refreshRelationshipItemsInCacheByRelationship(reoRel.relationship.id);
|
||||||
|
@@ -3,7 +3,7 @@ import { AbstractControl, FormControl } from '@angular/forms';
|
|||||||
import { DynamicFormArrayGroupModel, DynamicFormControlEvent } from '@ng-dynamic-forms/core';
|
import { DynamicFormArrayGroupModel, DynamicFormControlEvent } from '@ng-dynamic-forms/core';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import { Observable, of as observableOf, Subject, Subscription } from 'rxjs';
|
import { Observable, of as observableOf, Subject, Subscription } from 'rxjs';
|
||||||
import { filter } from 'rxjs/operators';
|
import { filter, switchMap } from 'rxjs/operators';
|
||||||
import { AppState } from '../../../../../app.reducer';
|
import { AppState } from '../../../../../app.reducer';
|
||||||
import { RelationshipService } from '../../../../../core/data/relationship.service';
|
import { RelationshipService } from '../../../../../core/data/relationship.service';
|
||||||
import { RemoteData } from '../../../../../core/data/remote-data';
|
import { RemoteData } from '../../../../../core/data/remote-data';
|
||||||
@@ -24,6 +24,7 @@ import { FormFieldMetadataValueObject } from '../../models/form-field-metadata-v
|
|||||||
import { RelationshipOptions } from '../../models/relationship-options.model';
|
import { RelationshipOptions } from '../../models/relationship-options.model';
|
||||||
import { DynamicConcatModel } from '../models/ds-dynamic-concat.model';
|
import { DynamicConcatModel } from '../models/ds-dynamic-concat.model';
|
||||||
import { RemoveRelationshipAction } from '../relation-lookup-modal/relationship.actions';
|
import { RemoveRelationshipAction } from '../relation-lookup-modal/relationship.actions';
|
||||||
|
import { SubmissionObject } from '../../../../../core/submission/models/submission-object.model';
|
||||||
|
|
||||||
// tslint:disable:max-classes-per-file
|
// tslint:disable:max-classes-per-file
|
||||||
/**
|
/**
|
||||||
@@ -103,12 +104,13 @@ export class ReorderableRelationship extends Reorderable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update(): Observable<RemoteData<Relationship>> {
|
update(): Observable<RemoteData<Relationship>> {
|
||||||
const updatedRelationship$ = this.relationshipService.updatePlace(this);
|
const updatedRelationship$ = this.relationshipService.updatePlace(this).pipe(
|
||||||
|
getSucceededRemoteData(),
|
||||||
|
);
|
||||||
|
|
||||||
updatedRelationship$.pipe(
|
updatedRelationship$.subscribe(() => {
|
||||||
getSucceededRemoteData()
|
|
||||||
).subscribe(() => {
|
|
||||||
this.oldIndex = this.newIndex;
|
this.oldIndex = this.newIndex;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return updatedRelationship$;
|
return updatedRelationship$;
|
||||||
|
@@ -13,7 +13,7 @@ import {
|
|||||||
DynamicTemplateDirective
|
DynamicTemplateDirective
|
||||||
} from '@ng-dynamic-forms/core';
|
} from '@ng-dynamic-forms/core';
|
||||||
import { combineLatest as observableCombineLatest, Observable, of as observableOf } from 'rxjs';
|
import { combineLatest as observableCombineLatest, Observable, of as observableOf } from 'rxjs';
|
||||||
import { map, switchMap, take } from 'rxjs/operators';
|
import { filter, map, switchMap, take } from 'rxjs/operators';
|
||||||
import { RelationshipService } from '../../../../../../core/data/relationship.service';
|
import { RelationshipService } from '../../../../../../core/data/relationship.service';
|
||||||
import { RemoteData } from '../../../../../../core/data/remote-data';
|
import { RemoteData } from '../../../../../../core/data/remote-data';
|
||||||
import { Relationship } from '../../../../../../core/shared/item-relationships/relationship.model';
|
import { Relationship } from '../../../../../../core/shared/item-relationships/relationship.model';
|
||||||
@@ -34,6 +34,11 @@ import {
|
|||||||
} from '../../existing-metadata-list-element/existing-metadata-list-element.component';
|
} from '../../existing-metadata-list-element/existing-metadata-list-element.component';
|
||||||
import { DynamicConcatModel } from '../ds-dynamic-concat.model';
|
import { DynamicConcatModel } from '../ds-dynamic-concat.model';
|
||||||
import { DynamicRowArrayModel } from '../ds-dynamic-row-array-model';
|
import { DynamicRowArrayModel } from '../ds-dynamic-row-array-model';
|
||||||
|
import { SaveSubmissionSectionFormSuccessAction } from '../../../../../../submission/objects/submission-objects.actions';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
|
import { SubmissionState } from '../../../../../../submission/submission.reducers';
|
||||||
|
import { ObjectCacheService } from '../../../../../../core/cache/object-cache.service';
|
||||||
|
import { RequestService } from '../../../../../../core/data/request.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-dynamic-form-array',
|
selector: 'ds-dynamic-form-array',
|
||||||
@@ -64,7 +69,10 @@ export class DsDynamicFormArrayComponent extends DynamicFormArrayComponent imple
|
|||||||
protected relationshipService: RelationshipService,
|
protected relationshipService: RelationshipService,
|
||||||
protected submissionObjectService: SubmissionObjectDataService,
|
protected submissionObjectService: SubmissionObjectDataService,
|
||||||
protected zone: NgZone,
|
protected zone: NgZone,
|
||||||
protected formService: DynamicFormService
|
protected formService: DynamicFormService,
|
||||||
|
private store: Store<SubmissionState>,
|
||||||
|
private objectCache: ObjectCacheService,
|
||||||
|
private requestService: RequestService
|
||||||
) {
|
) {
|
||||||
super(layoutService, validationService);
|
super(layoutService, validationService);
|
||||||
}
|
}
|
||||||
@@ -154,16 +162,18 @@ export class DsDynamicFormArrayComponent extends DynamicFormArrayComponent imple
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
this.reorderables = reorderables;
|
this.reorderables = reorderables;
|
||||||
|
const updatedReorderables: Array<Observable<any>> = [];
|
||||||
this.reorderables.forEach((reorderable: Reorderable, index: number) => {
|
this.reorderables.forEach((reorderable: Reorderable, index: number) => {
|
||||||
if (reorderable.hasMoved) {
|
if (reorderable.hasMoved) {
|
||||||
const prevIndex = reorderable.oldIndex;
|
const prevIndex = reorderable.oldIndex;
|
||||||
reorderable.update().pipe(take(1)).subscribe((v) => {
|
const updatedReorderable = reorderable.update().pipe(take(1));
|
||||||
|
updatedReorderables.push(updatedReorderable);
|
||||||
|
updatedReorderable.subscribe((v) => {
|
||||||
if (reorderable instanceof ReorderableFormFieldMetadataValue) {
|
if (reorderable instanceof ReorderableFormFieldMetadataValue) {
|
||||||
const reoMD = reorderable as ReorderableFormFieldMetadataValue;
|
const reoMD = reorderable as ReorderableFormFieldMetadataValue;
|
||||||
const mdl = Object.assign({}, reoMD.model, { value: reoMD.metadataValue });
|
const mdl = Object.assign({}, reoMD.model, { value: reoMD.metadataValue });
|
||||||
this.onChange({
|
this.onChange({
|
||||||
$event: { previousIndex: prevIndex },
|
$event: { previousIndex: prevIndex },
|
||||||
context: { index },
|
context: { index },
|
||||||
control: reoMD.control,
|
control: reoMD.control,
|
||||||
group: this.group,
|
group: this.group,
|
||||||
@@ -173,10 +183,29 @@ export class DsDynamicFormArrayComponent extends DynamicFormArrayComponent imple
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
observableCombineLatest(...updatedReorderables).pipe(
|
||||||
|
switchMap(() => this.refreshWorkspaceItemInCache(this.model.submissionId)),
|
||||||
|
).subscribe((submissionObject: SubmissionObject) => this.store.dispatch(new SaveSubmissionSectionFormSuccessAction(this.model.submissionId, [submissionObject], false)));
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
refreshWorkspaceItemInCache(submissionId: string): Observable<SubmissionObject> {
|
||||||
|
return this.submissionObjectService.getHrefByID(submissionId).pipe(take(1)).pipe(
|
||||||
|
switchMap((href: string) => {
|
||||||
|
this.objectCache.remove(href);
|
||||||
|
this.requestService.removeByHrefSubstring(submissionId);
|
||||||
|
return observableCombineLatest(
|
||||||
|
this.objectCache.hasBySelfLinkObservable(href),
|
||||||
|
this.requestService.hasByHrefObservable(href)
|
||||||
|
).pipe(
|
||||||
|
filter(([existsInOC, existsInRC]) => !existsInOC && !existsInRC),
|
||||||
|
take(1),
|
||||||
|
switchMap(() => this.submissionObjectService.findById(submissionId).pipe(getSucceededRemoteData(), getRemoteDataPayload()) as Observable<SubmissionObject>)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
moveSelection(event: CdkDragDrop<Relationship>) {
|
moveSelection(event: CdkDragDrop<Relationship>) {
|
||||||
this.model.moveGroup(event.previousIndex, event.currentIndex - event.previousIndex);
|
this.model.moveGroup(event.previousIndex, event.currentIndex - event.previousIndex);
|
||||||
|
Reference in New Issue
Block a user