File

projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts

Extends

AbstractResourceService

Index

Methods

Constructor

constructor(provider: ResourceProvider, configService: ConfigurationService, _fieldConverter: FieldConverterService, _logger: LoggerService)
Parameters :
Name Type Optional
provider ResourceProvider No
configService ConfigurationService No
_fieldConverter FieldConverterService No
_logger LoggerService No

Methods

Public assignTask
assignTask(taskId: string)

Assign task GET

Parameters :
Name Type Optional
taskId string No
Returns : Observable<EventOutcomeMessageResource>
Public cancelTask
cancelTask(taskId: string)

Cancel task GET

Parameters :
Name Type Optional
taskId string No
Returns : Observable<EventOutcomeMessageResource>
Public count
count(filterParam: Filter)

Count tasks by provided criteria POST {{baseUrl}}/api/task/count

Parameters :
Name Type Optional
filterParam Filter No
Returns : Observable<Count>
Public delegateTask
delegateTask(taskId: string, body: object)

Delegate task POST

Parameters :
Name Type Optional
taskId string No
body object No
Returns : Observable<EventOutcomeMessageResource>
Public deleteFile
deleteFile(taskId: string, body?: FileFieldRequest)

Delete file from the task DELETE

Parameters :
Name Type Optional
taskId string No
body FileFieldRequest Yes
Returns : Observable<MessageResource>
Public downloadFile
downloadFile(taskId: string, params: HttpParams)

Download task file field value GET

Parameters :
Name Type Optional
taskId string No
params HttpParams No
Public downloadFilePreview
downloadFilePreview(taskId: string, params: HttpParams)

Download task file preview for field value GET

Parameters :
Name Type Optional
taskId string No
params HttpParams No
Public finishTask
finishTask(taskId: string)

Finish task GET

Parameters :
Name Type Optional
taskId string No
Returns : Observable<EventOutcomeMessageResource>
Public getAllFinishedTask
getAllFinishedTask()

Get all finished tasks by logged user GET

Public getAllMyTasks
getAllMyTasks()

Get all tasks assigned to logged user GET

Public getAllTask
getAllTask()

Get all tasks GET {{baseUrl}}/api/task

Public getAllTasksByCase
getAllTasksByCase(caseId: string)

Get tasks of the case GET

Parameters :
Name Type Optional
caseId string No
Public getAllTasksByCases
getAllTasksByCases(body: object)

Get all tasks by cases POST

Parameters :
Name Type Optional
body object No
Public getData
getData(taskId: string)

Get all task data

GET

If you want to process the raw backend response use rawGetData instead.

Parameters :
Name Type Optional Description
taskId string No

ID of the task who's data should be retrieved from the server

Returns : Observable<Array<DataGroup>>

processed data groups of the given task. If the task has no data an empty array will be returned.

Public getTasks
getTasks(filterParam: Filter, params?: Params)

Searches tasks trough the Mongo endpoint. POST Note that the query attribute of the filter cannot be used with this endpoint. Attempting to use it will display a warning and remove the attribute from the request.

Parameters :
Name Type Optional Description
filterParam Filter No

filter used to search the tasks. Must be of type TASK. Note that the query attribute of the filter cannot be used with this endpoint. Attempting to use it will display a warning and remove the attribute from the request.

params Params Yes

Additional request parameters

Returns : Observable<Page<Task>>
Public rawGetData
rawGetData(taskId: string)

Get all task data

GET

If you don't want to parse the response yourself use getData instead.

Parameters :
Name Type Optional
taskId string No
Returns : Observable<EventOutcomeMessageResource>

the raw backend response without any additional processing

Public searchTask
searchTask(filterParam: Filter, params?: Params)

Searches tasks trough the Elastic endpoint. POST

Parameters :
Name Type Optional Description
filterParam Filter No

filter used to search the tasks. Must be of type TASK.

params Params Yes

Additional parameters

Returns : Observable<Page<Task>>
Public setData
setData(taskId: string, body: TaskSetDataRequestBody)

Set task data POST

Parameters :
Name Type Optional
taskId string No
body TaskSetDataRequestBody No
Returns : Observable<EventOutcomeMessageResource>
Public uploadFile
uploadFile(taskId: string, body: object, multipleFiles: boolean)

Upload file into the task POST

Parameters :
Name Type Optional
taskId string No
body object No
multipleFiles boolean No
Returns : Observable<ProviderProgress | EventOutcomeMessageResource>
Protected changeType
changeType(r: any, propertiesParams: string)
Inherited from AbstractResourceService
Type parameters :
  • T

Extracts data from the response r into an object with better usability.

Parameters :
Name Type Optional Description
r any No
  • response object
propertiesParams string No
  • plural form of the resource name, that is used to extract the data. Eg. "cases".
Returns : T
Protected getResourceAddress
getResourceAddress(name: string)
Inherited from AbstractResourceService

Get URL form nae.json - resources

Parameters :
Name Type Optional Description
name string No
  • ID property
Returns : string
Protected getResourcePage
getResourcePage(r: any, propertiesParams: string)
Inherited from AbstractResourceService
Type parameters :
  • T

Parses a response r into a Page instance

Parameters :
Name Type Optional Description
r any No
  • response object
propertiesParams string No
  • plural form of the resource name, that is used to extract the data. Eg. "cases".
Returns : Page<T>
import {ConfigurationService} from '../../configuration/configuration.service';
import {Injectable} from '@angular/core';
import {Params, ProviderProgress, ResourceProvider} from '../resource-provider.service';
import {Observable} from 'rxjs';
import {Count} from '../interface/count';
import {EventOutcomeMessageResource, MessageResource} from '../interface/message-resource';
import {filter, map} from 'rxjs/operators';
import {TaskReference} from '../interface/task-reference';
import {Task} from '../interface/task';
import {CountService} from '../abstract-endpoint/count-service';
import {Filter} from '../../filter/models/filter';
import {FilterType} from '../../filter/models/filter-type';
import { HttpEventType, HttpParams } from '@angular/common/http';
import {Page} from '../interface/page';
import {FieldConverterService} from '../../task-content/services/field-converter.service';
import {TaskSetDataRequestBody} from '../interface/task-set-data-request-body';
import {LoggerService} from '../../logger/services/logger.service';
import {AbstractResourceService} from '../abstract-endpoint/abstract-resource.service';
import {DataGroup} from '../interface/data-groups';
import {DataField} from '../../data-fields/models/abstract-data-field';
import {GetDataGroupsEventOutcome} from '../../event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome';
import {FileFieldRequest} from "../interface/file-field-request-body";

@Injectable({
    providedIn: 'root'
})
export class TaskResourceService extends AbstractResourceService implements CountService {

    constructor(provider: ResourceProvider,
                configService: ConfigurationService,
                protected _fieldConverter: FieldConverterService,
                protected _logger: LoggerService) {
        super('task', provider, configService);
    }

    /**
     *  Count tasks by provided criteria
     *  POST
     *  {{baseUrl}}/api/task/count
     */
    public count(filterParam: Filter): Observable<Count> {
        if (filterParam.type !== FilterType.TASK) {
            throw new Error('Provided filter doesn\'t have type TASK');
        }
        return this._resourceProvider.post$('task/count', this.SERVER_URL, filterParam.getRequestBody(), filterParam.getRequestParams())
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Get all tasks
     * GET
     * {{baseUrl}}/api/task
     */
    public getAllTask(): Observable<Array<Task>> {
        return this._resourceProvider.get$('task', this.SERVER_URL)
            .pipe(map(r => this.changeType(r, 'tasks')));
    }

    /**
     * Assign task
     * GET
     */
    // {{baseUrl}}/api/task/assign/:id
    public assignTask(taskId: string): Observable<EventOutcomeMessageResource> {
        return this._resourceProvider.get$('task/assign/' + taskId, this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Cancel task
     * GET
     */
    // {{baseUrl}}/api/task/cancel/:id
    public cancelTask(taskId: string): Observable<EventOutcomeMessageResource> {
        return this._resourceProvider.get$('task/cancel/' + taskId, this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Delegate task
     * POST
     */
    // {{baseUrl}}/api/task/delegate/:id
    public delegateTask(taskId: string, body: object): Observable<EventOutcomeMessageResource> {
        return this._resourceProvider.post$('task/delegate/' + taskId, this.SERVER_URL, body, undefined, {'Content-Type': 'text/plain'})
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Finish task
     * GET
     */
    // {{baseUrl}}/api/task/finish/:id
    public finishTask(taskId: string): Observable<EventOutcomeMessageResource> {
        return this._resourceProvider.get$('task/finish/' + taskId, this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Searches tasks trough the Elastic endpoint.
     * POST
     * @param filterParam filter used to search the tasks. Must be of type `TASK`.
     * @param params Additional parameters
     */
    // {{baseUrl}}/api/task/search_es
    public searchTask(filterParam: Filter, params?: Params): Observable<Page<Task>> {
        if (filterParam.type !== FilterType.TASK) {
            throw new Error('Provided filter doesn\'t have type TASK');
        }
        params = ResourceProvider.combineParams(filterParam.getRequestParams(), params);
        return this._resourceProvider.post$('task/search_es', this.SERVER_URL, filterParam.getRequestBody(), params)
            .pipe(map(r => this.getResourcePage<Task>(r, 'tasks')));
    }

    /**
     * Searches tasks trough the Mongo endpoint.
     * POST
     * @param filterParam filter used to search the tasks. Must be of type `TASK`.
     * Note that the `query` attribute of the filter cannot be used with this endpoint.
     * Attempting to use it will display a warning and remove the attribute from the request.
     * @param params Additional request parameters
     */
    // {{baseUrl}}/api/task/search
    public getTasks(filterParam: Filter, params?: Params): Observable<Page<Task>> {
        if (filterParam.type !== FilterType.TASK) {
            throw new Error('Provided filter doesn\'t have type TASK');
        }

        if (filterParam.bodyContainsQuery()) {
            throw new Error('getTasks endpoint cannot be queried with filters that contain the \'query\' attribute');
        }

        params = ResourceProvider.combineParams(filterParam.getRequestParams(), params);
        return this._resourceProvider.post$('task/search', this.SERVER_URL, filterParam.getRequestBody(), params)
            .pipe(map(r => this.getResourcePage<Task>(r, 'tasks')));
    }

    // ----------- CASE ----------
    /**
     * Get all tasks by cases
     * POST
     */
    // {{baseUrl}}/api/task/case
    public getAllTasksByCases(body: object): Observable<Array<Task>> { // TODO: ??
        return this._resourceProvider.post$('task/case', this.SERVER_URL, body)
            .pipe(map(r => this.changeType(r, 'tasks')));
    }

    /**
     * Get tasks of the case
     * GET
     */
    // {{baseUrl}}/api/task/case/:id
    public getAllTasksByCase(caseId: string): Observable<Array<TaskReference>> {
        return this._resourceProvider.get$('task/case/' + caseId, this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    // ----------- MY Task ----------
    /**
     * Get all tasks assigned to logged user
     * GET
     */
    // {{baseUrl}}/api/task/my
    public getAllMyTasks(): Observable<Array<Task>> {
        return this._resourceProvider.get$('task/my', this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Get all finished tasks by logged user
     * GET
     */
    // {{baseUrl}}/api/task/my/finished
    public getAllFinishedTask(): Observable<Array<Task>> {
        return this._resourceProvider.get$('task/my/finished', this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     * Get all task data
     *
     * GET
     *
     * If you don't want to parse the response yourself use [getData]{@link TaskResourceService#getData} instead.
     *
     * @returns the raw backend response without any additional processing
     */
    // {{baseUrl}}/api/task/:id/data
    public rawGetData(taskId: string): Observable<EventOutcomeMessageResource> {
        return this._resourceProvider.get$('task/' + taskId + '/data', this.SERVER_URL)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    /**
     *  Get all task data
     *
     *  GET
     *
     *  If you want to process the raw backend response use [rawGetData]{@link TaskResourceService#rawGetData} instead.
     *
     * @param taskId ID of the task who's data should be retrieved from the server
     * @returns processed data groups of the given task. If the task has no data an empty array will be returned.
     */
    public getData(taskId: string): Observable<Array<DataGroup>> {
        return this.rawGetData(taskId).pipe(
            map((responseOutcome: EventOutcomeMessageResource) => {
                if (responseOutcome.error) {
                    throw new Error(responseOutcome.error);
                }

                const dataGroupsArray = this.changeType((responseOutcome.outcome as GetDataGroupsEventOutcome).data, 'dataGroups');
                if (!Array.isArray(dataGroupsArray)) {
                    return [];
                }
                const result = [];
                dataGroupsArray.forEach(dataGroupResource => {
                    const dataFields: Array<DataField<any>> = [];
                    if (!dataGroupResource.fields._embedded) {
                        return; // continue
                    }
                    const fields = [];
                    Object.keys(dataGroupResource.fields._embedded).forEach(localizedFields => {
                        fields.push(...dataGroupResource.fields._embedded[localizedFields]);
                    });
                    fields.sort((a, b) => a.order - b.order);
                    dataFields.push(...fields.map(dataFieldResource => this._fieldConverter.toClass(dataFieldResource)));
                    const dataGroupObject: DataGroup = {
                        fields: dataFields,
                        stretch: dataGroupResource.stretch,
                        title: dataGroupResource.title,
                        layout: dataGroupResource.layout,
                        alignment: dataGroupResource.alignment,
                    };
                    if (dataGroupResource.parentTaskId !== undefined) {
                        dataGroupObject.parentTaskId = dataGroupResource.parentTaskId;
                        dataGroupObject.parentTransitionId = dataGroupResource.parentTransitionId;
                        dataGroupObject.parentTaskRefId = dataGroupResource.parentTaskRefId;
                        dataGroupObject.nestingLevel = dataGroupResource.nestingLevel;
                    }
                    if (dataGroupResource.parentCaseId !== undefined) {
                        dataGroupObject['parentCaseId'] = dataGroupResource.parentCaseId;
                    }
                    result.push(dataGroupObject);
                });
                return result;
            })
        );
    }

    /**
     * Set task data
     * POST
     */
    // {{baseUrl}}/api/task/:id/data
    public setData(taskId: string, body: TaskSetDataRequestBody): Observable<EventOutcomeMessageResource> {
        return this._resourceProvider.post$('task/' + taskId + '/data', this.SERVER_URL, body)
            .pipe(map(r => this.changeType(r, undefined)));
    }

    // ------------- FILE ------------
    /**
     * Download task file field value
     * GET
     */
    // {{baseUrl}}/api/task/:id/file/:field         - for file field
    // {{baseUrl}}/api/task/:id/file/:field/:name   - for file list field
    public downloadFile(taskId: string, params: HttpParams): Observable<ProviderProgress | Blob> {
        const url = `task/${taskId}/file${params?.has("fileName") ? '/named' : ''}`;
        return this._resourceProvider.getBlob$(url, this.SERVER_URL, params).pipe(
            map(event => {
                switch (event.type) {
                    case HttpEventType.DownloadProgress:
                        return ResourceProvider.getProgress(event);
                    case HttpEventType.Response:
                        return event.body;
                    default:
                        return undefined;
                }
            }),
            filter(value => !!value)
        );
    }

    /**
     * Upload file into the task
     * POST
     */
    // {{baseUrl}}/api/task/:id/file/:field     - for file field
    // {{baseUrl}}/api/task/:id/files/:field    - for file list field
    public uploadFile(taskId: string, body: object, multipleFiles: boolean):
        Observable<ProviderProgress | EventOutcomeMessageResource> {
        const url = `task/${taskId}/${multipleFiles ? 'files' : 'file'}`;
        return this._resourceProvider.postWithEvent$<EventOutcomeMessageResource>(url, this.SERVER_URL, body).pipe(
            map(event => {
                switch (event.type) {
                    case HttpEventType.UploadProgress:
                        return ResourceProvider.getProgress(event);
                    case HttpEventType.Response:
                        return event.body;
                    default:
                        return undefined;
                }
            }),
            filter(value => !!value)
        );
    }

    /**
     * Delete file from the task
     * DELETE
     */
    public deleteFile(taskId: string, body?: FileFieldRequest): Observable<MessageResource> {
        const url = `task/${taskId}/file${body?.fileName ? '/named' : ''}`;
        return this._resourceProvider.delete$(url, this.SERVER_URL, {}, {}, 'json', body).pipe(
            map(r => this.changeType(r, undefined))
        );
    }

    /**
     * Download task file preview for field value
     * GET
     */
    // {{baseUrl}}/api/task/:id/file_preview/:field
    public downloadFilePreview(taskId: string, params: HttpParams): Observable<ProviderProgress | Blob> {
        const url = `task/${taskId}/file_preview`;
        return this._resourceProvider.getBlob$(url, this.SERVER_URL, params).pipe(
            map(event => {
                switch (event.type) {
                    case HttpEventType.DownloadProgress:
                        return ResourceProvider.getProgress(event);
                    case HttpEventType.Response:
                        return event.body;
                    default:
                        return undefined;
                }
            }),
            filter(value => !!value)
        );
    }
}

result-matching ""

    No results matching ""