import { Component, Inject, OnDestroy, OnInit, } from '@angular/core'; import { BehaviorSubject, EMPTY, Observable, } from 'rxjs'; import { mergeMap, tap, } from 'rxjs/operators'; import { APP_CONFIG, AppConfig, } from '../../../../../config/app-config.interface'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; import { RemoteData } from '../../../../core/data/remote-data'; import { Context } from '../../../../core/shared/context.model'; import { Item } from '../../../../core/shared/item.model'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { hasValue, isNotEmpty, } from '../../../empty.util'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { TruncatableService } from '../../../truncatable/truncatable.service'; import { followLink } from '../../../utils/follow-link-config.model'; import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component'; @Component({ selector: 'ds-claimed-search-result-list-element', styleUrls: ['../../search-result-list-element/search-result-list-element.component.scss'], templateUrl: './claimed-search-result-list-element.component.html', }) @listableObjectComponent(ClaimedTaskSearchResult, ViewMode.ListElement) export class ClaimedSearchResultListElementComponent extends SearchResultListElementComponent implements OnInit, OnDestroy { /** * A boolean representing if to show submitter information */ public showSubmitter = true; /** * Represents the badge context */ public badgeContext = Context.MyDSpaceValidation; /** * The item object that belonging to the result object */ public item$: BehaviorSubject = new BehaviorSubject(null); /** * The workflowitem object that belonging to the result object */ public workflowitem$: BehaviorSubject = new BehaviorSubject(null); /** * Display thumbnails if required by configuration */ showThumbnails: boolean; public constructor( protected linkService: LinkService, protected truncatableService: TruncatableService, public dsoNameService: DSONameService, protected objectCache: ObjectCacheService, @Inject(APP_CONFIG) protected appConfig: AppConfig, ) { super(truncatableService, dsoNameService, appConfig); } /** * Initialize all instance variables */ ngOnInit() { super.ngOnInit(); this.linkService.resolveLinks(this.dso, followLink('workflowitem', {}, followLink('item', {}, followLink('bundles')), followLink('submitter'), ), followLink('action')); (this.dso.workflowitem as Observable>).pipe( getFirstCompletedRemoteData(), mergeMap((wfiRD: RemoteData) => { if (wfiRD.hasSucceeded) { this.workflowitem$.next(wfiRD.payload); return (wfiRD.payload.item as Observable>).pipe( getFirstCompletedRemoteData(), ); } else { return EMPTY; } }), tap((itemRD: RemoteData) => { if (isNotEmpty(itemRD) && itemRD.hasSucceeded) { this.item$.next(itemRD.payload); } }), ).subscribe(); this.showThumbnails = this.appConfig.browseBy.showThumbnails; } ngOnDestroy() { // This ensures the object is removed from cache, when action is performed on task if (hasValue(this.dso)) { this.objectCache.remove(this.dso._links.workflowitem.href); } } }