113938: Added missing comcol structure to workspace/workflow item breadcrumbs

This commit is contained in:
Alexandre Vryghem
2024-04-04 12:04:20 +02:00
parent 692bb991a0
commit 60d93e653f
14 changed files with 222 additions and 25 deletions

View File

@@ -0,0 +1,59 @@
import { BreadcrumbsProviderService } from '../breadcrumbs/breadcrumbsProviderService';
import { Injectable } from '@angular/core';
import { Observable, switchMap, combineLatest, of as observableOf } from 'rxjs';
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../shared/operators';
import { Collection } from '../shared/collection.model';
import { DSONameService } from '../breadcrumbs/dso-name.service';
import { SubmissionObject } from './models/submission-object.model';
import { RemoteData } from '../data/remote-data';
import { DSOBreadcrumbsService } from '../breadcrumbs/dso-breadcrumbs.service';
import { getDSORoute } from '../../app-routing-paths';
import { SubmissionService } from '../../submission/submission.service';
import { CollectionDataService } from '../data/collection-data.service';
import { hasValue } from '../../shared/empty.util';
/**
* Service to calculate the parent {@link DSpaceObject} breadcrumbs for a {@link SubmissionObject}
*/
@Injectable()
export class SubmissionParentBreadcrumbsService implements BreadcrumbsProviderService<SubmissionObject> {
constructor(
protected dsoNameService: DSONameService,
protected dsoBreadcrumbsService: DSOBreadcrumbsService,
protected submissionService: SubmissionService,
protected collectionService: CollectionDataService,
) {
}
/**
* Creates the parent breadcrumb structure for {@link SubmissionObject}s. It also automatically recreates the
* parent breadcrumb structure when you change a {@link SubmissionObject}'s by dispatching a
* {@link ChangeSubmissionCollectionAction}.
*
* @param submissionObject The {@link SubmissionObject} for which the parent breadcrumb structure needs to be created
*/
getBreadcrumbs(submissionObject: SubmissionObject): Observable<Breadcrumb[]> {
return combineLatest([
(submissionObject.collection as Observable<RemoteData<Collection>>).pipe(
getFirstCompletedRemoteData(),
getRemoteDataPayload(),
),
this.submissionService.getSubmissionCollectionId(submissionObject.id),
]).pipe(
switchMap(([collection, latestCollectionId]: [Collection, string]) => {
if (hasValue(latestCollectionId)) {
return this.collectionService.findById(latestCollectionId).pipe(
getFirstCompletedRemoteData(),
getRemoteDataPayload(),
);
} else {
return observableOf(collection);
}
}),
switchMap((collection: Collection) => this.dsoBreadcrumbsService.getBreadcrumbs(collection, getDSORoute(collection))),
);
}
}