import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { dataService } from '../cache/builders/build-decorators'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { CoreState } from '../core.reducers'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; import { RequestService } from '../data/request.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ClaimedTask } from './models/claimed-task-object.model'; import { CLAIMED_TASK } from './models/claimed-task-object.resource-type'; import { ProcessTaskResponse } from './models/process-task-response'; import { TasksService } from './tasks.service'; import { RemoteData } from '../data/remote-data'; import { followLink } from '../../shared/utils/follow-link-config.model'; import { FindListOptions } from '../data/request.models'; import { RequestParam } from '../cache/models/request-param.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { getFirstSucceededRemoteData } from '../shared/operators'; /** * The service handling all REST requests for ClaimedTask */ @Injectable() @dataService(CLAIMED_TASK) export class ClaimedTaskDataService extends TasksService { protected responseMsToLive = 1000; /** * The endpoint link name */ protected linkPath = 'claimedtasks'; /** * Initialize instance variables * * @param {RequestService} requestService * @param {RemoteDataBuildService} rdbService * @param {Store} store * @param {ObjectCacheService} objectCache * @param {HALEndpointService} halService * @param {NotificationsService} notificationsService * @param {HttpClient} http * @param {DSOChangeAnalyzer, protected objectCache: ObjectCacheService, protected halService: HALEndpointService, protected notificationsService: NotificationsService, protected http: HttpClient, protected comparator: DSOChangeAnalyzer) { super(); } /** * Make a request to claim the given task * * @param scopeId * The task id * @return {Observable} * Emit the server response */ public claimTask(scopeId: string, poolTaskHref: string): Observable { console.log('=========================================='); console.log('User ClaimTask request for:', scopeId, poolTaskHref); const options: HttpOptions = Object.create({}); let headers = new HttpHeaders(); headers = headers.append('Content-Type', 'text/uri-list'); options.headers = headers; return this.postToEndpoint(this.linkPath, poolTaskHref, null, options); } /** * Make a request for the given task * * @param scopeId * The task id * @param body * The request body * @return {Observable} * Emit the server response */ public submitTask(scopeId: string, body: any): Observable { return this.postToEndpoint(this.linkPath, this.requestService.uriEncodeBody(body), scopeId, this.makeHttpOptions()); } /** * Make a request to return the given task to the pool * * @param scopeId * The task id * @return {Observable} * Emit the server response */ public returnToPoolTask(scopeId: string): Observable { console.log('=========================================='); console.log('User ReturnToPool request for:', scopeId); return this.deleteById(this.linkPath, scopeId, this.makeHttpOptions()); } /** * Search a claimed task by item uuid. * @param uuid * The item uuid * @return {Observable>} * The server response */ public findByItem(uuid: string): Observable> { console.log('claimedTaskService findByItem', uuid); const options = new FindListOptions(); options.searchParams = [ new RequestParam('uuid', uuid) ]; return this.searchTask('findByItem', options, followLink('workflowitem')) .pipe(getFirstSucceededRemoteData()); } }