diff --git a/lib/process-services-cloud/src/lib/i18n/en.json b/lib/process-services-cloud/src/lib/i18n/en.json index 9788bd521a..3cd22b0914 100644 --- a/lib/process-services-cloud/src/lib/i18n/en.json +++ b/lib/process-services-cloud/src/lib/i18n/en.json @@ -178,7 +178,8 @@ "TOOL_TIP": { "SAVE": "Save filter", "SAVE_AS": "Save filter as", - "DELETE": "Delete filter" + "DELETE": "Delete filter", + "RESTORE":"Restore filter" }, "LABEL": { "APP_NAME": "ApplicationName", diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html index 9a990dc473..f1c2f7213b 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html @@ -13,7 +13,7 @@ matTooltip="{{ filterAction.tooltip | translate}}" [attr.data-automation-id]="'adf-filter-action-' + filterAction.actionType" [disabled]="isDisabledAction(filterAction)" - (click)="executeFilterActions(filterAction)"> + (click)="executeFilterActions($event, filterAction)"> diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts index c232d89b5f..a956059588 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts @@ -16,13 +16,13 @@ */ import { OnChanges, SimpleChanges, OnInit, OnDestroy, Directive, Input, Output, EventEmitter } from '@angular/core'; -import { AssignmentType, FilterOptions, TaskFilterAction, TaskFilterProperties, TaskStatusFilter } from '../../models/filter-cloud.model'; +import { AssignmentType, FilterOptions, TaskFilterAction, TaskFilterCloudModel, TaskFilterProperties, TaskStatusFilter } from '../../models/filter-cloud.model'; import { TaskCloudService } from './../../../services/task-cloud.service'; import { AppsProcessCloudService } from './../../../../app/services/apps-process-cloud.service'; import { DateCloudFilterType, DateRangeFilter } from '../../../../models/date-cloud-filter.model'; import moment, { Moment } from 'moment'; import { AbstractControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { debounceTime, filter, finalize, switchMap, takeUntil } from 'rxjs/operators'; +import { debounceTime, filter, finalize, switchMap, takeUntil, tap } from 'rxjs/operators'; import { Observable, Subject } from 'rxjs'; import { DateAdapter } from '@angular/material/core'; import { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; @@ -31,6 +31,7 @@ import { MatDialog } from '@angular/material/dialog'; import { IdentityUserModel } from '../../../../people/models/identity-user.model'; import { IdentityGroupModel } from '../../../../group/models/identity-group.model'; import { MatSelectChange } from '@angular/material/select'; +import { TaskFilterCloudService } from '../../services/task-filter-cloud.service'; /* eslint-disable @typescript-eslint/naming-convention */ @@ -46,6 +47,8 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC public static ACTION_SAVE = 'save'; public static ACTION_SAVE_AS = 'saveAs'; public static ACTION_DELETE = 'delete'; + public static ACTION_SAVE_DEFAULT = 'saveDefaultFilter'; + public static ACTION_RESTORE = 'restoreDefaultFilter'; public static APP_RUNNING_STATUS: string = 'RUNNING'; public static APPLICATION_NAME: string = 'appName'; public static PROCESS_DEFINITION_NAME: string = 'processDefinitionName'; @@ -117,7 +120,7 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC label: 'ADF_CLOUD_TASK_FILTERS.STATUS.ALL' }; - taskFilter: T; + taskFilter: TaskFilterCloudModel; changedTaskFilter: T; /** Emitted when a task filter property changes. */ @@ -134,7 +137,8 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC protected appsProcessCloudService: AppsProcessCloudService, protected taskCloudService: TaskCloudService, protected dialog: MatDialog, - protected translateService: TranslationService) { + protected translateService: TranslationService, + protected taskFilterCloudService: TaskFilterCloudService) { } ngOnInit() { @@ -172,6 +176,16 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC actionType: BaseEditTaskFilterCloudComponent.ACTION_DELETE, icon: 'delete', tooltip: 'ADF_CLOUD_EDIT_TASK_FILTER.TOOL_TIP.DELETE' + }, + { + actionType: BaseEditTaskFilterCloudComponent.ACTION_SAVE_DEFAULT, + icon: 'adf:save', + tooltip: 'ADF_CLOUD_EDIT_TASK_FILTER.TOOL_TIP.SAVE' + }, + { + actionType: BaseEditTaskFilterCloudComponent.ACTION_RESTORE, + icon: 'settings_backup_restore', + tooltip: 'ADF_CLOUD_EDIT_TASK_FILTER.TOOL_TIP.RESTORE' } ]; } @@ -221,14 +235,19 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC return name.replace(regExt, '-'); } - executeFilterActions(action: TaskFilterAction): void { + executeFilterActions(event: Event, action: TaskFilterAction): void { if (action.actionType === BaseEditTaskFilterCloudComponent.ACTION_SAVE) { this.save(action); } else if (action.actionType === BaseEditTaskFilterCloudComponent.ACTION_SAVE_AS) { this.saveAs(action); } else if (action.actionType === BaseEditTaskFilterCloudComponent.ACTION_DELETE) { this.delete(action); + } else if (action.actionType === BaseEditTaskFilterCloudComponent.ACTION_SAVE_DEFAULT) { + this.save(action); + } else if (action.actionType === BaseEditTaskFilterCloudComponent.ACTION_RESTORE) { + this.reset(action); } + event.stopPropagation(); } getRunningApplications() { @@ -520,6 +539,16 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC }); } + reset(resetAction: TaskFilterAction) { + this.taskFilterCloudService.resetTaskFilterToDefaults(this.appName, this.taskFilter).pipe( + tap((filters: TaskFilterCloudModel[]) => { + resetAction.filter = filters.find(defaultFilter => defaultFilter.name === this.taskFilter.name) || this.taskFilter; + this.action.emit(resetAction); + }), + switchMap(() => this.restoreDefaultTaskFilters())) + .subscribe(() => { }); + } + checkMandatoryFilterProperties() { if (this.filterProperties === undefined || this.filterProperties.length === 0) { this.filterProperties = this.getDefaultFilterProperties(); @@ -541,6 +570,6 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnC protected abstract restoreDefaultTaskFilters(): Observable; protected abstract addFilter(filterToAdd: T): Observable; - protected abstract deleteFilter(filterToDelete: T): Observable; + protected abstract deleteFilter(filterToDelete: TaskFilterCloudModel): Observable; protected abstract updateFilter(filterToUpdate: T): Observable; } diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts index 077612ed16..499b954811 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts @@ -42,12 +42,12 @@ export class EditTaskFilterCloudComponent extends BaseEditTaskFilterCloudCompone formBuilder: UntypedFormBuilder, dialog: MatDialog, translateService: TranslationService, - private taskFilterCloudService: TaskFilterCloudService, + taskFilterCloudService: TaskFilterCloudService, dateAdapter: DateAdapter, userPreferencesService: UserPreferencesService, appsProcessCloudService: AppsProcessCloudService, taskCloudService: TaskCloudService) { - super(formBuilder, dateAdapter, userPreferencesService, appsProcessCloudService, taskCloudService, dialog, translateService); + super(formBuilder, dateAdapter, userPreferencesService, appsProcessCloudService, taskCloudService, dialog, translateService, taskFilterCloudService); } assignNewFilter(model: TaskFilterCloudModel) { diff --git a/lib/process-services-cloud/src/lib/task/task-filters/services/task-filter-cloud.service.ts b/lib/process-services-cloud/src/lib/task/task-filters/services/task-filter-cloud.service.ts index de4768e16a..4742d54cd3 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/services/task-filter-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/services/task-filter-cloud.service.ts @@ -369,4 +369,19 @@ export class TaskFilterCloudService extends BaseCloudService { return this.notificationCloudService.makeGQLQuery(appName, TASK_EVENT_SUBSCRIPTION_QUERY) .pipe(map((events: any) => events.data.engineEvents)); } + + /** + * Reset the task filters to the default configuration if it exists and stores it. + * If there is no default configuration for the task cloud filter with the provided filter name, + * then it changes nothing but stores the current values of the filter + * + * @param appName Name of the target app + * @param filter The task filter to be restored to defaults + * @returns Observable of task filters details + */ + resetTaskFilterToDefaults(appName: string, filter: TaskFilterCloudModel): Observable { + const defaultFilter = this.defaultTaskFilters(appName).find(defaultFilterDefinition => defaultFilterDefinition.name === filter.name) || filter; + defaultFilter.id = filter.id; + return this.updateFilter(defaultFilter); + } }