@alfresco/adf-process-services-cloud 9.2.0-38362903178 → 9.2.0-38460477523

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3960,7 +3960,6 @@ const FilterCounterEntityType = {
3960
3960
  * See the License for the specific language governing permissions and
3961
3961
  * limitations under the License.
3962
3962
  */
3963
- const BATCHED_COUNTERS_UNAVAILABLE_STATUSES = [404, 501];
3964
3963
  const ENGINE_EVENTS_SUBSCRIPTION_QUERIES = {
3965
3964
  [FilterCounterEntityType.TASK]: `
3966
3965
  subscription {
@@ -4006,9 +4005,7 @@ class FilterCountersCloudService extends BaseCloudService {
4006
4005
  this.eventRecountPerApp = new Map();
4007
4006
  this.activeEntityTypesPerApp = new Map();
4008
4007
  this.subscribersPerEntityType = new Map();
4009
- this.batchedCountersPerEntityType = new Map();
4010
4008
  this.eventSubscriptionsPerEntityType = new Map();
4011
- this.appsWithoutBatchedCounters = new Set();
4012
4009
  this.taskFiltersPerApp = new Map();
4013
4010
  this.processFiltersPerApp = new Map();
4014
4011
  this.countersPerApp = new Map();
@@ -4022,14 +4019,14 @@ class FilterCountersCloudService extends BaseCloudService {
4022
4019
  getProcessFilters(appName) {
4023
4020
  return this.shareFilters(this.processFiltersPerApp, appName, () => this.injector.get(ProcessFilterCloudService).getProcessFilters(appName));
4024
4021
  }
4025
- getFilterCounters(appName, entityType, batchedCounters = false) {
4022
+ getFilterCounters(appName, entityType) {
4026
4023
  if (!appName) {
4027
4024
  return EMPTY;
4028
4025
  }
4029
4026
  return defer(() => {
4030
- this.activateEntityType(appName, entityType, batchedCounters);
4027
+ this.activateEntityType(appName, entityType);
4031
4028
  return this.getCounters(appName);
4032
- }).pipe(map(({ counters, batched }) => ({ counters: counters[entityType] ?? {}, batched })), finalize(() => this.deactivateEntityType(appName, entityType)));
4029
+ }).pipe(map((counters) => ({ counters: counters[entityType] ?? {} })), finalize(() => this.deactivateEntityType(appName, entityType)));
4033
4030
  }
4034
4031
  refreshFilterCounters(appName) {
4035
4032
  this.recount(appName);
@@ -4058,14 +4055,13 @@ class FilterCountersCloudService extends BaseCloudService {
4058
4055
  get notificationsEnabled() {
4059
4056
  return this.appConfigService.get('notifications', true);
4060
4057
  }
4061
- activateEntityType(appName, entityType, batchedCounters) {
4058
+ activateEntityType(appName, entityType) {
4062
4059
  const key = this.entityTypeKey(appName, entityType);
4063
4060
  const subscribers = (this.subscribersPerEntityType.get(key) ?? 0) + 1;
4064
4061
  this.subscribersPerEntityType.set(key, subscribers);
4065
4062
  if (subscribers > 1) {
4066
4063
  return;
4067
4064
  }
4068
- this.batchedCountersPerEntityType.set(key, batchedCounters);
4069
4065
  const activeEntityTypes = this.activeEntityTypes(appName);
4070
4066
  const joinsResolvedCounters = activeEntityTypes.size > 0;
4071
4067
  activeEntityTypes.add(entityType);
@@ -4084,7 +4080,6 @@ class FilterCountersCloudService extends BaseCloudService {
4084
4080
  return;
4085
4081
  }
4086
4082
  this.subscribersPerEntityType.delete(key);
4087
- this.batchedCountersPerEntityType.delete(key);
4088
4083
  this.activeEntityTypes(appName).delete(entityType);
4089
4084
  this.eventSubscriptionsPerEntityType.get(key)?.unsubscribe();
4090
4085
  this.eventSubscriptionsPerEntityType.delete(key);
@@ -4131,20 +4126,10 @@ class FilterCountersCloudService extends BaseCloudService {
4131
4126
  return counters$;
4132
4127
  }
4133
4128
  resolveCounters(appName) {
4134
- if (!this.batchedCountersEnabled(appName) || this.appsWithoutBatchedCounters.has(appName)) {
4135
- return of({ counters: {}, batched: false });
4129
+ if (this.activeEntityTypes(appName).size === 0) {
4130
+ return of({});
4136
4131
  }
4137
- return this.getFiltersForCounters(appName).pipe(take(1), switchMap((filters) => this.fetchFilterCounters(appName, this.buildRequest(filters))), map((counters) => ({ counters, batched: true })), catchError((error) => {
4138
- if (BATCHED_COUNTERS_UNAVAILABLE_STATUSES.includes(error?.status)) {
4139
- this.appsWithoutBatchedCounters.add(appName);
4140
- }
4141
- return of({ counters: {}, batched: false });
4142
- }));
4143
- }
4144
- batchedCountersEnabled(appName) {
4145
- const activeEntityTypes = [...this.activeEntityTypes(appName)];
4146
- return (activeEntityTypes.length > 0 &&
4147
- activeEntityTypes.every((entityType) => this.batchedCountersPerEntityType.get(this.entityTypeKey(appName, entityType))));
4132
+ return this.getFiltersForCounters(appName).pipe(take(1), switchMap((filters) => this.fetchFilterCounters(appName, this.buildRequest(filters))), catchError(() => of({})));
4148
4133
  }
4149
4134
  recounts(appName) {
4150
4135
  return merge(merge(of(undefined), this.recountTrigger(appName)).pipe(debounceTime(0, asapScheduler)), this.eventRecountTrigger(appName).pipe(debounceTime(this.notificationDebounceTime)));
@@ -4733,12 +4718,6 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4733
4718
  *
4734
4719
  */
4735
4720
  this.searchApiMethod = 'GET';
4736
- /**
4737
- * (optional) Resolves the counters of the task and the process filters with a single call to
4738
- * `POST /query/v1/count`. Both filter components have to
4739
- * ask for it, otherwise the counters are resolved one filter at a time.
4740
- */
4741
- this.useBatchedCounters = false;
4742
4721
  /** Emitted when a filter is being selected based on the filterParam input. */
4743
4722
  this.filterSelected = new EventEmitter();
4744
4723
  /** Emitted when a filter is being clicked from the UI. */
@@ -4751,7 +4730,6 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4751
4730
  this.enableNotifications = true;
4752
4731
  this.notificationDebounceTime = 3000;
4753
4732
  this.currentFiltersValues = {};
4754
- this.batchedCounters = true;
4755
4733
  this.taskFilterCloudService = inject(TaskFilterCloudService);
4756
4734
  this.taskListCloudService = inject(TaskListCloudService);
4757
4735
  this.filterCountersCloudService = inject(FilterCountersCloudService);
@@ -4778,9 +4756,6 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4778
4756
  else if (filter && filter.currentValue !== filter.previousValue) {
4779
4757
  this.selectFilterAndEmit(filter.currentValue);
4780
4758
  }
4781
- else if (changes['useBatchedCounters'] && !changes['useBatchedCounters'].firstChange && this.filtersLoadedFor) {
4782
- this.loadFilterCounters(this.filtersLoadedFor);
4783
- }
4784
4759
  }
4785
4760
  /**
4786
4761
  * Loads the filter list filtered by appName
@@ -4897,7 +4872,7 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4897
4872
  onFilterClick(filter) {
4898
4873
  if (filter) {
4899
4874
  this.selectFilter(filter);
4900
- this.refreshFilterCounter(this.currentFilter);
4875
+ this.refreshFilterCounter();
4901
4876
  this.filterClicked.emit(this.currentFilter);
4902
4877
  this.updatedCountersSet.delete(filter.key);
4903
4878
  }
@@ -4945,17 +4920,11 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4945
4920
  this.countersSubscription?.unsubscribe();
4946
4921
  this.countersSubscription = combineLatest([
4947
4922
  this.countersFilters$.pipe(catchError(() => of([]))),
4948
- this.filterCountersCloudService.getFilterCounters(appName, FilterCounterEntityType.TASK, this.useBatchedCounters)
4923
+ this.filterCountersCloudService.getFilterCounters(appName, FilterCounterEntityType.TASK)
4949
4924
  ])
4950
4925
  .pipe(takeUntilDestroyed(this.destroyRef))
4951
- .subscribe(([, { counters, batched }]) => {
4952
- this.batchedCounters = batched;
4953
- if (batched) {
4954
- this.applyFilterCounters(counters);
4955
- }
4956
- else {
4957
- this.updateFilterCounters();
4958
- }
4926
+ .subscribe(([, { counters }]) => {
4927
+ this.applyFilterCounters(counters);
4959
4928
  });
4960
4929
  }
4961
4930
  applyFilterCounters(counters) {
@@ -4985,24 +4954,17 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4985
4954
  this.filters = [];
4986
4955
  this.currentFilter = undefined;
4987
4956
  }
4988
- refreshFilterCounter(filter) {
4989
- if (this.batchedCounters) {
4990
- this.filterCountersCloudService.refreshFilterCounters(this.appName);
4991
- }
4992
- else {
4993
- this.updateFilterCounter(filter);
4994
- }
4957
+ refreshFilterCounter() {
4958
+ this.filterCountersCloudService.refreshFilterCounters(this.appName);
4995
4959
  }
4996
4960
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFiltersCloudComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4997
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: TaskFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-task-filters", inputs: { searchApiMethod: "searchApiMethod", useBatchedCounters: "useBatchedCounters" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", filterCounterUpdated: "filterCounterUpdated", updatedFilter: "updatedFilter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[TASKS_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-task-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name | translate\"\n [attr.aria-label]=\"filter.name | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key]) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-task-filters__entry-counter\"\n [class.adf-active]=\"wasFilterUpdated(filter.key)\"\n >\n {{ counters[filter.key] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_TASK_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n", styles: [".adf-task-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-task-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4961
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: TaskFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-task-filters", inputs: { searchApiMethod: "searchApiMethod" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", filterCounterUpdated: "filterCounterUpdated", updatedFilter: "updatedFilter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[TASKS_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-task-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name | translate\"\n [attr.aria-label]=\"filter.name | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key]) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-task-filters__entry-counter\"\n [class.adf-active]=\"wasFilterUpdated(filter.key)\"\n >\n {{ counters[filter.key] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_TASK_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n", styles: [".adf-task-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-task-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4998
4962
  }
4999
4963
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFiltersCloudComponent, decorators: [{
5000
4964
  type: Component,
5001
4965
  args: [{ selector: 'adf-cloud-task-filters', imports: [AsyncPipe, MatProgressSpinnerModule, TranslatePipe, MatListModule, RouterLink, IconModule], template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[TASKS_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-task-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name | translate\"\n [attr.aria-label]=\"filter.name | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key]) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-task-filters__entry-counter\"\n [class.adf-active]=\"wasFilterUpdated(filter.key)\"\n >\n {{ counters[filter.key] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_TASK_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n", styles: [".adf-task-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-task-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"] }]
5002
4966
  }], propDecorators: { searchApiMethod: [{
5003
4967
  type: Input
5004
- }], useBatchedCounters: [{
5005
- type: Input
5006
4968
  }], filterSelected: [{
5007
4969
  type: Output
5008
4970
  }], filterClicked: [{
@@ -10728,6 +10690,8 @@ class TaskFormCloudComponent {
10728
10690
  this.customSaveButtonText = '';
10729
10691
  /** Toggle readonly state of the task. */
10730
10692
  this.readOnly = false;
10693
+ /** When false, Claim/Release (self-service) buttons are hidden regardless of task state. */
10694
+ this.allowSelfService = true;
10731
10695
  /**
10732
10696
  * Toggle to enable parent visibility check for validation.
10733
10697
  * When enabled, fields inside hidden groups/sections will skip validation.
@@ -10772,10 +10736,10 @@ class TaskFormCloudComponent {
10772
10736
  return this.showCompleteButton && !this.readOnly && this.taskCloudService.canCompleteTask(this.taskDetails);
10773
10737
  }
10774
10738
  canClaimTask() {
10775
- return !this.readOnly && this.taskCloudService.canClaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
10739
+ return this.allowSelfService && !this.readOnly && this.taskCloudService.canClaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
10776
10740
  }
10777
10741
  canUnclaimTask() {
10778
- return !this.readOnly && this.taskCloudService.canUnclaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
10742
+ return this.allowSelfService && !this.readOnly && this.taskCloudService.canUnclaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
10779
10743
  }
10780
10744
  hasCandidateUsers() {
10781
10745
  return this.candidateUsers.length !== 0;
@@ -10827,7 +10791,7 @@ class TaskFormCloudComponent {
10827
10791
  this.formLoaded.emit(form);
10828
10792
  }
10829
10793
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFormCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10830
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: TaskFormCloudComponent, isStandalone: true, selector: "adf-cloud-task-form", inputs: { appName: "appName", candidateUsers: "candidateUsers", candidateGroups: "candidateGroups", taskId: "taskId", showTitle: "showTitle", showRefreshButton: "showRefreshButton", showValidationIcon: "showValidationIcon", showCancelButton: "showCancelButton", showCompleteButton: "showCompleteButton", showSaveButton: "showSaveButton", customCancelButtonText: "customCancelButtonText", customCompleteButtonText: "customCompleteButtonText", customSaveButtonText: "customSaveButtonText", readOnly: "readOnly", displayModeConfigurations: "displayModeConfigurations", enableParentVisibilityCheck: "enableParentVisibilityCheck", taskDetails: "taskDetails" }, outputs: { formLoaded: "formLoaded", formSaved: "formSaved", formCompleted: "formCompleted", taskCompleted: "taskCompleted", taskClaimed: "taskClaimed", taskUnclaimed: "taskUnclaimed", cancelClick: "cancelClick", error: "error", formContentClicked: "formContentClicked", executeOutcome: "executeOutcome", displayModeOn: "displayModeOn", displayModeOff: "displayModeOff" }, viewQueries: [{ propertyName: "adfCloudForm", first: true, predicate: ["adfCloudForm"], descendants: true }], ngImport: i0, template: "<div class=\"adf-task-form-cloud-container\">\n <adf-cloud-form\n #adfCloudForm\n [appName]=\"appName\"\n [appVersion]=\"taskDetails.appVersion\"\n [taskId]=\"taskId\"\n [showTitle]=\"showTitle\"\n [processInstanceId]=\"taskDetails.processInstanceId\"\n [readOnly]=\"isReadOnly()\"\n [showRefreshButton]=\"showRefreshButton\"\n [showValidationIcon]=\"showValidationIcon\"\n [showCompleteButton]=\"showCompleteButton && canCompleteTask()\"\n [showSaveButton]=\"showSaveButton && canCompleteTask()\"\n [customSaveButtonText]=\"customSaveButtonText\"\n [customCompleteButtonText]=\"customCompleteButtonText\"\n [displayModeConfigurations]=\"displayModeConfigurations\"\n [enableParentVisibilityCheck]=\"enableParentVisibilityCheck\"\n (formLoaded)=\"onFormLoaded($event)\"\n (formSaved)=\"onFormSaved($event)\"\n (formCompleted)=\"onFormCompleted($event)\"\n (formError)=\"onError($event)\"\n (error)=\"onError($event)\"\n (formContentClicked)=\"onFormContentClicked($event)\"\n (executeOutcome)=\"onFormExecuteOutcome($event)\"\n (displayModeOn)=\"onDisplayModeOn($event)\"\n (displayModeOff)=\"onDisplayModeOff($event)\"\n >\n <adf-cloud-form-custom-outcomes>\n <adf-cloud-user-task-cloud-buttons\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [showCancelButton]=\"showCancelButton\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [taskId]=\"taskId\"\n (cancelClick)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (error)=\"onError($event)\"\n />\n </adf-cloud-form-custom-outcomes>\n </adf-cloud-form>\n</div>\n", styles: [".adf-task-form-cloud-container{height:100%}.adf-task-form-cloud-container .adf-task-form-container{overflow:hidden}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button){padding-bottom:25px;padding-right:25px}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button) .adf-task-form-actions-button{height:36px;border-radius:5px}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button) .mat-mdc-button{height:36px;border-radius:5px;width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button) .mdc-button__label{min-width:58px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: UserTaskCloudButtonsComponent, selector: "adf-cloud-user-task-cloud-buttons", inputs: ["appName", "canClaimTask", "canUnclaimTask", "taskId", "showCancelButton", "customCancelButtonText"], outputs: ["error", "cancelClick", "claimTask", "unclaimTask"] }, { kind: "component", type: FormCustomOutcomesComponent, selector: "adf-cloud-form-custom-outcomes" }, { kind: "component", type: FormCloudComponent, selector: "adf-cloud-form", inputs: ["appName", "appVersion", "formId", "processInstanceId", "taskId", "data", "displayModeConfigurations", "showCompleteButton", "customSaveButtonText", "customCompleteButtonText", "enableParentVisibilityCheck", "form"], outputs: ["formSaved", "formCompleted", "formLoaded", "formDataRefreshed", "visibleOutcomesChanged", "formContentClicked", "displayModeOn", "displayModeOff"] }], encapsulation: i0.ViewEncapsulation.None }); }
10794
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: TaskFormCloudComponent, isStandalone: true, selector: "adf-cloud-task-form", inputs: { appName: "appName", candidateUsers: "candidateUsers", candidateGroups: "candidateGroups", taskId: "taskId", showTitle: "showTitle", showRefreshButton: "showRefreshButton", showValidationIcon: "showValidationIcon", showCancelButton: "showCancelButton", showCompleteButton: "showCompleteButton", showSaveButton: "showSaveButton", customCancelButtonText: "customCancelButtonText", customCompleteButtonText: "customCompleteButtonText", customSaveButtonText: "customSaveButtonText", readOnly: "readOnly", allowSelfService: "allowSelfService", displayModeConfigurations: "displayModeConfigurations", enableParentVisibilityCheck: "enableParentVisibilityCheck", taskDetails: "taskDetails" }, outputs: { formLoaded: "formLoaded", formSaved: "formSaved", formCompleted: "formCompleted", taskCompleted: "taskCompleted", taskClaimed: "taskClaimed", taskUnclaimed: "taskUnclaimed", cancelClick: "cancelClick", error: "error", formContentClicked: "formContentClicked", executeOutcome: "executeOutcome", displayModeOn: "displayModeOn", displayModeOff: "displayModeOff" }, viewQueries: [{ propertyName: "adfCloudForm", first: true, predicate: ["adfCloudForm"], descendants: true }], ngImport: i0, template: "<div class=\"adf-task-form-cloud-container\">\n <adf-cloud-form\n #adfCloudForm\n [appName]=\"appName\"\n [appVersion]=\"taskDetails.appVersion\"\n [taskId]=\"taskId\"\n [showTitle]=\"showTitle\"\n [processInstanceId]=\"taskDetails.processInstanceId\"\n [readOnly]=\"isReadOnly()\"\n [showRefreshButton]=\"showRefreshButton\"\n [showValidationIcon]=\"showValidationIcon\"\n [showCompleteButton]=\"showCompleteButton && canCompleteTask()\"\n [showSaveButton]=\"showSaveButton && canCompleteTask()\"\n [customSaveButtonText]=\"customSaveButtonText\"\n [customCompleteButtonText]=\"customCompleteButtonText\"\n [displayModeConfigurations]=\"displayModeConfigurations\"\n [enableParentVisibilityCheck]=\"enableParentVisibilityCheck\"\n (formLoaded)=\"onFormLoaded($event)\"\n (formSaved)=\"onFormSaved($event)\"\n (formCompleted)=\"onFormCompleted($event)\"\n (formError)=\"onError($event)\"\n (error)=\"onError($event)\"\n (formContentClicked)=\"onFormContentClicked($event)\"\n (executeOutcome)=\"onFormExecuteOutcome($event)\"\n (displayModeOn)=\"onDisplayModeOn($event)\"\n (displayModeOff)=\"onDisplayModeOff($event)\"\n >\n <adf-cloud-form-custom-outcomes>\n <adf-cloud-user-task-cloud-buttons\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [showCancelButton]=\"showCancelButton\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [taskId]=\"taskId\"\n (cancelClick)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (error)=\"onError($event)\"\n />\n </adf-cloud-form-custom-outcomes>\n </adf-cloud-form>\n</div>\n", styles: [".adf-task-form-cloud-container{height:100%}.adf-task-form-cloud-container .adf-task-form-container{overflow:hidden}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button){padding-bottom:25px;padding-right:25px}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button) .adf-task-form-actions-button{height:36px;border-radius:5px}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button) .mat-mdc-button{height:36px;border-radius:5px;width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-task-form-cloud-container .adf-task-form-container .adf-task-form-actions:has(button) .mdc-button__label{min-width:58px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: UserTaskCloudButtonsComponent, selector: "adf-cloud-user-task-cloud-buttons", inputs: ["appName", "canClaimTask", "canUnclaimTask", "taskId", "showCancelButton", "customCancelButtonText"], outputs: ["error", "cancelClick", "claimTask", "unclaimTask"] }, { kind: "component", type: FormCustomOutcomesComponent, selector: "adf-cloud-form-custom-outcomes" }, { kind: "component", type: FormCloudComponent, selector: "adf-cloud-form", inputs: ["appName", "appVersion", "formId", "processInstanceId", "taskId", "data", "displayModeConfigurations", "showCompleteButton", "customSaveButtonText", "customCompleteButtonText", "enableParentVisibilityCheck", "form"], outputs: ["formSaved", "formCompleted", "formLoaded", "formDataRefreshed", "visibleOutcomesChanged", "formContentClicked", "displayModeOn", "displayModeOff"] }], encapsulation: i0.ViewEncapsulation.None }); }
10831
10795
  }
10832
10796
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFormCloudComponent, decorators: [{
10833
10797
  type: Component,
@@ -10860,6 +10824,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
10860
10824
  type: Input
10861
10825
  }], readOnly: [{
10862
10826
  type: Input
10827
+ }], allowSelfService: [{
10828
+ type: Input
10863
10829
  }], displayModeConfigurations: [{
10864
10830
  type: Input
10865
10831
  }], enableParentVisibilityCheck: [{
@@ -11387,6 +11353,8 @@ class UserTaskCloudComponent {
11387
11353
  this.enableParentVisibilityCheck = false;
11388
11354
  /** Toggle readonly state of the task. */
11389
11355
  this.readOnly = false;
11356
+ /** When false, Claim/Release (self-service) buttons are hidden regardless of task state. */
11357
+ this.allowSelfService = true;
11390
11358
  /** Toggle rendering of the `Cancel` button. */
11391
11359
  this.showCancelButton = true;
11392
11360
  /** Toggle rendering of the `Complete` button. */
@@ -11469,13 +11437,13 @@ class UserTaskCloudComponent {
11469
11437
  }
11470
11438
  }
11471
11439
  canClaimTask() {
11472
- return !this.readOnly && this.taskCloudService.canClaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
11440
+ return this.allowSelfService && !this.readOnly && this.taskCloudService.canClaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
11473
11441
  }
11474
11442
  canCompleteTask() {
11475
11443
  return this.showCompleteButton && !this.readOnly && this.taskCloudService.canCompleteTask(this.taskDetails);
11476
11444
  }
11477
11445
  canUnclaimTask() {
11478
- return !this.readOnly && this.taskCloudService.canUnclaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
11446
+ return this.allowSelfService && !this.readOnly && this.taskCloudService.canUnclaimTask(this.taskDetails) && this.hasCandidateUsersOrGroups();
11479
11447
  }
11480
11448
  getTaskType() {
11481
11449
  this.taskType = this.taskTypeResolverService.getUserTaskType(this.taskDetails?.formKey);
@@ -11567,7 +11535,7 @@ class UserTaskCloudComponent {
11567
11535
  }
11568
11536
  }
11569
11537
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: UserTaskCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11570
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: UserTaskCloudComponent, isStandalone: true, selector: "adf-cloud-user-task", inputs: { appName: "appName", displayModeConfigurations: "displayModeConfigurations", enableParentVisibilityCheck: "enableParentVisibilityCheck", readOnly: "readOnly", showCancelButton: "showCancelButton", showCompleteButton: "showCompleteButton", showSaveButton: "showSaveButton", customCancelButtonText: "customCancelButtonText", customCompleteButtonText: "customCompleteButtonText", customSaveButtonText: "customSaveButtonText", showNextTaskCheckbox: "showNextTaskCheckbox", isNextTaskCheckboxChecked: "isNextTaskCheckboxChecked", showTitle: "showTitle", showValidationIcon: "showValidationIcon", taskId: "taskId" }, outputs: { cancelClick: "cancelClick", error: "error", nextTaskCheckboxCheckedChanged: "nextTaskCheckboxCheckedChanged", executeOutcome: "executeOutcome", formContentClicked: "formContentClicked", formLoaded: "formLoaded", formSaved: "formSaved", onTaskLoaded: "onTaskLoaded", taskClaimed: "taskClaimed", taskUnclaimed: "taskUnclaimed", taskCompleted: "taskCompleted" }, viewQueries: [{ propertyName: "adfCloudTaskForm", first: true, predicate: ["adfCloudTaskForm"], descendants: true }, { propertyName: "adfCloudTaskScreen", first: true, predicate: ["adfCloudTaskScreen"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"adf-user-task-cloud-container\">\n <div *ngIf=\"!loading; else loadingTemplate\">\n <ng-container [ngSwitch]=\"taskType\">\n <ng-container *ngSwitchCase=\"taskTypeEnum.Form\">\n <adf-cloud-task-form\n #adfCloudTaskForm\n [appName]=\"appName\"\n [candidateUsers]=\"candidateUsers\"\n [candidateGroups]=\"candidateGroups\"\n [displayModeConfigurations]=\"displayModeConfigurations\"\n [enableParentVisibilityCheck]=\"enableParentVisibilityCheck\"\n [showValidationIcon]=\"showValidationIcon\"\n [showTitle]=\"showTitle\"\n [taskId]=\"taskId\"\n [taskDetails]=\"taskDetails\"\n [showCancelButton]=\"showCancelButton\"\n [showSaveButton]=\"showSaveButton && canCompleteTask()\"\n [showCompleteButton]=\"showCompleteButton && canCompleteTask()\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [customSaveButtonText]=\"customSaveButtonText\"\n [customCompleteButtonText]=\"customCompleteButtonText\"\n (cancelClick)=\"onCancelForm()\"\n (executeOutcome)=\"onExecuteOutcome($event)\"\n (error)=\"onError($event)\"\n (formLoaded)=\"onFormLoaded($event)\"\n (formSaved)=\"onFormSaved()\"\n (formContentClicked)=\"onFormContentClicked($event)\"\n (taskCompleted)=\"onCompleteTaskForm()\"\n (taskClaimed)=\"onClaimTask()\"\n (taskUnclaimed)=\"onTaskUnclaimed()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.Screen\">\n <adf-cloud-task-screen\n #adfCloudTaskScreen\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [processInstanceId]=\"taskDetails.processInstanceId\"\n [rootProcessInstanceId]=\"taskDetails.rootProcessInstanceId\"\n [screenId]=\"screenId\"\n [showCancelButton]=\"showCancelButton\"\n [taskName]=\"taskDetails.name\"\n [taskId]=\"taskId\"\n [showNextTaskCheckbox]=\"showNextTaskCheckbox && canCompleteTask()\"\n [isNextTaskCheckboxChecked]=\"isNextTaskCheckboxChecked\"\n (cancelTask)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (error)=\"onError($event)\"\n (taskCompleted)=\"onCompleteTask($event, taskType)\"\n (taskSaved)=\"onFormSaved()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (nextTaskCheckboxCheckedChanged)=\"onNextTaskCheckboxCheckedChanged($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.None\">\n <mat-card appearance=\"outlined\" class=\"adf-task-form-container\">\n <mat-card-header *ngIf=\"showTitle\">\n <mat-card-title>\n <h4>\n <span class=\"adf-form-title\">\n {{ taskDetails?.name || 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <adf-empty-content\n [icon]=\"'description'\"\n [title]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.TITLE'\"\n [subtitle]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.SUBTITLE'\"\n />\n </mat-card-content>\n <mat-card-actions class=\"adf-task-form-actions\" align=\"end\">\n <ng-template [ngTemplateOutlet]=\"taskFormCloudButtons\" />\n <button\n *ngIf=\"canCompleteTask()\"\n mat-flat-button\n adf-cloud-complete-task\n [appName]=\"appName\"\n [taskId]=\"taskId\"\n (success)=\"onCompleteTask(false, taskType)\"\n (error)=\"onError($event)\"\n id=\"adf-form-complete\"\n >\n {{ customCompleteButtonText || ('ADF_CLOUD_TASK_FORM.EMPTY_FORM.BUTTONS.COMPLETE' | translate) }}\n </button>\n </mat-card-actions>\n </mat-card>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTemplate>\n <mat-spinner class=\"adf-user-task-cloud-spinner\" />\n</ng-template>\n\n<ng-template #taskFormCloudButtons>\n <adf-cloud-user-task-cloud-buttons\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [showCancelButton]=\"showCancelButton\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [taskId]=\"taskId\"\n (cancelClick)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (error)=\"onError($event)\"\n />\n</ng-template>\n", styles: [".adf-user-task-cloud-container{height:100%}.adf-user-task-cloud-container>div{height:100%}.adf-user-task-cloud-spinner{top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: UserTaskCloudButtonsComponent, selector: "adf-cloud-user-task-cloud-buttons", inputs: ["appName", "canClaimTask", "canUnclaimTask", "taskId", "showCancelButton", "customCancelButtonText"], outputs: ["error", "cancelClick", "claimTask", "unclaimTask"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2$3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2$3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: TaskScreenCloudComponent, selector: "adf-cloud-task-screen", inputs: ["taskId", "appName", "canClaimTask", "canUnclaimTask", "showCancelButton", "processInstanceId", "taskName", "readOnly", "rootProcessInstanceId", "isNextTaskCheckboxChecked", "showNextTaskCheckbox"], outputs: ["taskSaved", "taskCompleted", "error", "cancelTask", "claimTask", "unclaimTask", "nextTaskCheckboxCheckedChanged"] }, { kind: "component", type: TaskFormCloudComponent, selector: "adf-cloud-task-form", inputs: ["appName", "candidateUsers", "candidateGroups", "taskId", "showTitle", "showRefreshButton", "showValidationIcon", "showCancelButton", "showCompleteButton", "showSaveButton", "customCancelButtonText", "customCompleteButtonText", "customSaveButtonText", "readOnly", "displayModeConfigurations", "enableParentVisibilityCheck", "taskDetails"], outputs: ["formLoaded", "formSaved", "formCompleted", "taskCompleted", "taskClaimed", "taskUnclaimed", "cancelClick", "error", "formContentClicked", "executeOutcome", "displayModeOn", "displayModeOff"] }, { kind: "directive", type: CompleteTaskDirective, selector: "[adf-cloud-complete-task]", inputs: ["taskId", "appName"], outputs: ["success", "error"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
11538
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: UserTaskCloudComponent, isStandalone: true, selector: "adf-cloud-user-task", inputs: { appName: "appName", displayModeConfigurations: "displayModeConfigurations", enableParentVisibilityCheck: "enableParentVisibilityCheck", readOnly: "readOnly", allowSelfService: "allowSelfService", showCancelButton: "showCancelButton", showCompleteButton: "showCompleteButton", showSaveButton: "showSaveButton", customCancelButtonText: "customCancelButtonText", customCompleteButtonText: "customCompleteButtonText", customSaveButtonText: "customSaveButtonText", showNextTaskCheckbox: "showNextTaskCheckbox", isNextTaskCheckboxChecked: "isNextTaskCheckboxChecked", showTitle: "showTitle", showValidationIcon: "showValidationIcon", taskId: "taskId" }, outputs: { cancelClick: "cancelClick", error: "error", nextTaskCheckboxCheckedChanged: "nextTaskCheckboxCheckedChanged", executeOutcome: "executeOutcome", formContentClicked: "formContentClicked", formLoaded: "formLoaded", formSaved: "formSaved", onTaskLoaded: "onTaskLoaded", taskClaimed: "taskClaimed", taskUnclaimed: "taskUnclaimed", taskCompleted: "taskCompleted" }, viewQueries: [{ propertyName: "adfCloudTaskForm", first: true, predicate: ["adfCloudTaskForm"], descendants: true }, { propertyName: "adfCloudTaskScreen", first: true, predicate: ["adfCloudTaskScreen"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"adf-user-task-cloud-container\">\n <div *ngIf=\"!loading; else loadingTemplate\">\n <ng-container [ngSwitch]=\"taskType\">\n <ng-container *ngSwitchCase=\"taskTypeEnum.Form\">\n <adf-cloud-task-form\n #adfCloudTaskForm\n [appName]=\"appName\"\n [candidateUsers]=\"candidateUsers\"\n [candidateGroups]=\"candidateGroups\"\n [displayModeConfigurations]=\"displayModeConfigurations\"\n [enableParentVisibilityCheck]=\"enableParentVisibilityCheck\"\n [showValidationIcon]=\"showValidationIcon\"\n [showTitle]=\"showTitle\"\n [allowSelfService]=\"allowSelfService\"\n [taskId]=\"taskId\"\n [taskDetails]=\"taskDetails\"\n [showCancelButton]=\"showCancelButton\"\n [showSaveButton]=\"showSaveButton && canCompleteTask()\"\n [showCompleteButton]=\"showCompleteButton && canCompleteTask()\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [customSaveButtonText]=\"customSaveButtonText\"\n [customCompleteButtonText]=\"customCompleteButtonText\"\n (cancelClick)=\"onCancelForm()\"\n (executeOutcome)=\"onExecuteOutcome($event)\"\n (error)=\"onError($event)\"\n (formLoaded)=\"onFormLoaded($event)\"\n (formSaved)=\"onFormSaved()\"\n (formContentClicked)=\"onFormContentClicked($event)\"\n (taskCompleted)=\"onCompleteTaskForm()\"\n (taskClaimed)=\"onClaimTask()\"\n (taskUnclaimed)=\"onTaskUnclaimed()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.Screen\">\n <adf-cloud-task-screen\n #adfCloudTaskScreen\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [processInstanceId]=\"taskDetails.processInstanceId\"\n [rootProcessInstanceId]=\"taskDetails.rootProcessInstanceId\"\n [screenId]=\"screenId\"\n [showCancelButton]=\"showCancelButton\"\n [taskName]=\"taskDetails.name\"\n [taskId]=\"taskId\"\n [showNextTaskCheckbox]=\"showNextTaskCheckbox && canCompleteTask()\"\n [isNextTaskCheckboxChecked]=\"isNextTaskCheckboxChecked\"\n (cancelTask)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (error)=\"onError($event)\"\n (taskCompleted)=\"onCompleteTask($event, taskType)\"\n (taskSaved)=\"onFormSaved()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (nextTaskCheckboxCheckedChanged)=\"onNextTaskCheckboxCheckedChanged($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.None\">\n <mat-card appearance=\"outlined\" class=\"adf-task-form-container\">\n <mat-card-header *ngIf=\"showTitle\">\n <mat-card-title>\n <h4>\n <span class=\"adf-form-title\">\n {{ taskDetails?.name || 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <adf-empty-content\n [icon]=\"'description'\"\n [title]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.TITLE'\"\n [subtitle]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.SUBTITLE'\"\n />\n </mat-card-content>\n <mat-card-actions class=\"adf-task-form-actions\" align=\"end\">\n <ng-template [ngTemplateOutlet]=\"taskFormCloudButtons\" />\n <button\n *ngIf=\"canCompleteTask()\"\n mat-flat-button\n adf-cloud-complete-task\n [appName]=\"appName\"\n [taskId]=\"taskId\"\n (success)=\"onCompleteTask(false, taskType)\"\n (error)=\"onError($event)\"\n id=\"adf-form-complete\"\n >\n {{ customCompleteButtonText || ('ADF_CLOUD_TASK_FORM.EMPTY_FORM.BUTTONS.COMPLETE' | translate) }}\n </button>\n </mat-card-actions>\n </mat-card>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTemplate>\n <mat-spinner class=\"adf-user-task-cloud-spinner\" />\n</ng-template>\n\n<ng-template #taskFormCloudButtons>\n <adf-cloud-user-task-cloud-buttons\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [showCancelButton]=\"showCancelButton\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [taskId]=\"taskId\"\n (cancelClick)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (error)=\"onError($event)\"\n />\n</ng-template>\n", styles: [".adf-user-task-cloud-container{height:100%}.adf-user-task-cloud-container>div{height:100%}.adf-user-task-cloud-spinner{top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: UserTaskCloudButtonsComponent, selector: "adf-cloud-user-task-cloud-buttons", inputs: ["appName", "canClaimTask", "canUnclaimTask", "taskId", "showCancelButton", "customCancelButtonText"], outputs: ["error", "cancelClick", "claimTask", "unclaimTask"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2$3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2$3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: TaskScreenCloudComponent, selector: "adf-cloud-task-screen", inputs: ["taskId", "appName", "canClaimTask", "canUnclaimTask", "showCancelButton", "processInstanceId", "taskName", "readOnly", "rootProcessInstanceId", "isNextTaskCheckboxChecked", "showNextTaskCheckbox"], outputs: ["taskSaved", "taskCompleted", "error", "cancelTask", "claimTask", "unclaimTask", "nextTaskCheckboxCheckedChanged"] }, { kind: "component", type: TaskFormCloudComponent, selector: "adf-cloud-task-form", inputs: ["appName", "candidateUsers", "candidateGroups", "taskId", "showTitle", "showRefreshButton", "showValidationIcon", "showCancelButton", "showCompleteButton", "showSaveButton", "customCancelButtonText", "customCompleteButtonText", "customSaveButtonText", "readOnly", "allowSelfService", "displayModeConfigurations", "enableParentVisibilityCheck", "taskDetails"], outputs: ["formLoaded", "formSaved", "formCompleted", "taskCompleted", "taskClaimed", "taskUnclaimed", "cancelClick", "error", "formContentClicked", "executeOutcome", "displayModeOn", "displayModeOff"] }, { kind: "directive", type: CompleteTaskDirective, selector: "[adf-cloud-complete-task]", inputs: ["taskId", "appName"], outputs: ["success", "error"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
11571
11539
  }
11572
11540
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: UserTaskCloudComponent, decorators: [{
11573
11541
  type: Component,
@@ -11583,7 +11551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
11583
11551
  TaskFormCloudComponent,
11584
11552
  CompleteTaskDirective,
11585
11553
  MatCheckboxModule
11586
- ], template: "<div class=\"adf-user-task-cloud-container\">\n <div *ngIf=\"!loading; else loadingTemplate\">\n <ng-container [ngSwitch]=\"taskType\">\n <ng-container *ngSwitchCase=\"taskTypeEnum.Form\">\n <adf-cloud-task-form\n #adfCloudTaskForm\n [appName]=\"appName\"\n [candidateUsers]=\"candidateUsers\"\n [candidateGroups]=\"candidateGroups\"\n [displayModeConfigurations]=\"displayModeConfigurations\"\n [enableParentVisibilityCheck]=\"enableParentVisibilityCheck\"\n [showValidationIcon]=\"showValidationIcon\"\n [showTitle]=\"showTitle\"\n [taskId]=\"taskId\"\n [taskDetails]=\"taskDetails\"\n [showCancelButton]=\"showCancelButton\"\n [showSaveButton]=\"showSaveButton && canCompleteTask()\"\n [showCompleteButton]=\"showCompleteButton && canCompleteTask()\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [customSaveButtonText]=\"customSaveButtonText\"\n [customCompleteButtonText]=\"customCompleteButtonText\"\n (cancelClick)=\"onCancelForm()\"\n (executeOutcome)=\"onExecuteOutcome($event)\"\n (error)=\"onError($event)\"\n (formLoaded)=\"onFormLoaded($event)\"\n (formSaved)=\"onFormSaved()\"\n (formContentClicked)=\"onFormContentClicked($event)\"\n (taskCompleted)=\"onCompleteTaskForm()\"\n (taskClaimed)=\"onClaimTask()\"\n (taskUnclaimed)=\"onTaskUnclaimed()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.Screen\">\n <adf-cloud-task-screen\n #adfCloudTaskScreen\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [processInstanceId]=\"taskDetails.processInstanceId\"\n [rootProcessInstanceId]=\"taskDetails.rootProcessInstanceId\"\n [screenId]=\"screenId\"\n [showCancelButton]=\"showCancelButton\"\n [taskName]=\"taskDetails.name\"\n [taskId]=\"taskId\"\n [showNextTaskCheckbox]=\"showNextTaskCheckbox && canCompleteTask()\"\n [isNextTaskCheckboxChecked]=\"isNextTaskCheckboxChecked\"\n (cancelTask)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (error)=\"onError($event)\"\n (taskCompleted)=\"onCompleteTask($event, taskType)\"\n (taskSaved)=\"onFormSaved()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (nextTaskCheckboxCheckedChanged)=\"onNextTaskCheckboxCheckedChanged($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.None\">\n <mat-card appearance=\"outlined\" class=\"adf-task-form-container\">\n <mat-card-header *ngIf=\"showTitle\">\n <mat-card-title>\n <h4>\n <span class=\"adf-form-title\">\n {{ taskDetails?.name || 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <adf-empty-content\n [icon]=\"'description'\"\n [title]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.TITLE'\"\n [subtitle]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.SUBTITLE'\"\n />\n </mat-card-content>\n <mat-card-actions class=\"adf-task-form-actions\" align=\"end\">\n <ng-template [ngTemplateOutlet]=\"taskFormCloudButtons\" />\n <button\n *ngIf=\"canCompleteTask()\"\n mat-flat-button\n adf-cloud-complete-task\n [appName]=\"appName\"\n [taskId]=\"taskId\"\n (success)=\"onCompleteTask(false, taskType)\"\n (error)=\"onError($event)\"\n id=\"adf-form-complete\"\n >\n {{ customCompleteButtonText || ('ADF_CLOUD_TASK_FORM.EMPTY_FORM.BUTTONS.COMPLETE' | translate) }}\n </button>\n </mat-card-actions>\n </mat-card>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTemplate>\n <mat-spinner class=\"adf-user-task-cloud-spinner\" />\n</ng-template>\n\n<ng-template #taskFormCloudButtons>\n <adf-cloud-user-task-cloud-buttons\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [showCancelButton]=\"showCancelButton\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [taskId]=\"taskId\"\n (cancelClick)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (error)=\"onError($event)\"\n />\n</ng-template>\n", styles: [".adf-user-task-cloud-container{height:100%}.adf-user-task-cloud-container>div{height:100%}.adf-user-task-cloud-spinner{top:50%;left:50%;transform:translate(-50%,-50%)}\n"] }]
11554
+ ], template: "<div class=\"adf-user-task-cloud-container\">\n <div *ngIf=\"!loading; else loadingTemplate\">\n <ng-container [ngSwitch]=\"taskType\">\n <ng-container *ngSwitchCase=\"taskTypeEnum.Form\">\n <adf-cloud-task-form\n #adfCloudTaskForm\n [appName]=\"appName\"\n [candidateUsers]=\"candidateUsers\"\n [candidateGroups]=\"candidateGroups\"\n [displayModeConfigurations]=\"displayModeConfigurations\"\n [enableParentVisibilityCheck]=\"enableParentVisibilityCheck\"\n [showValidationIcon]=\"showValidationIcon\"\n [showTitle]=\"showTitle\"\n [allowSelfService]=\"allowSelfService\"\n [taskId]=\"taskId\"\n [taskDetails]=\"taskDetails\"\n [showCancelButton]=\"showCancelButton\"\n [showSaveButton]=\"showSaveButton && canCompleteTask()\"\n [showCompleteButton]=\"showCompleteButton && canCompleteTask()\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [customSaveButtonText]=\"customSaveButtonText\"\n [customCompleteButtonText]=\"customCompleteButtonText\"\n (cancelClick)=\"onCancelForm()\"\n (executeOutcome)=\"onExecuteOutcome($event)\"\n (error)=\"onError($event)\"\n (formLoaded)=\"onFormLoaded($event)\"\n (formSaved)=\"onFormSaved()\"\n (formContentClicked)=\"onFormContentClicked($event)\"\n (taskCompleted)=\"onCompleteTaskForm()\"\n (taskClaimed)=\"onClaimTask()\"\n (taskUnclaimed)=\"onTaskUnclaimed()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.Screen\">\n <adf-cloud-task-screen\n #adfCloudTaskScreen\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [processInstanceId]=\"taskDetails.processInstanceId\"\n [rootProcessInstanceId]=\"taskDetails.rootProcessInstanceId\"\n [screenId]=\"screenId\"\n [showCancelButton]=\"showCancelButton\"\n [taskName]=\"taskDetails.name\"\n [taskId]=\"taskId\"\n [showNextTaskCheckbox]=\"showNextTaskCheckbox && canCompleteTask()\"\n [isNextTaskCheckboxChecked]=\"isNextTaskCheckboxChecked\"\n (cancelTask)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (error)=\"onError($event)\"\n (taskCompleted)=\"onCompleteTask($event, taskType)\"\n (taskSaved)=\"onFormSaved()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (nextTaskCheckboxCheckedChanged)=\"onNextTaskCheckboxCheckedChanged($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"taskTypeEnum.None\">\n <mat-card appearance=\"outlined\" class=\"adf-task-form-container\">\n <mat-card-header *ngIf=\"showTitle\">\n <mat-card-title>\n <h4>\n <span class=\"adf-form-title\">\n {{ taskDetails?.name || 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <adf-empty-content\n [icon]=\"'description'\"\n [title]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.TITLE'\"\n [subtitle]=\"'ADF_CLOUD_TASK_FORM.EMPTY_FORM.SUBTITLE'\"\n />\n </mat-card-content>\n <mat-card-actions class=\"adf-task-form-actions\" align=\"end\">\n <ng-template [ngTemplateOutlet]=\"taskFormCloudButtons\" />\n <button\n *ngIf=\"canCompleteTask()\"\n mat-flat-button\n adf-cloud-complete-task\n [appName]=\"appName\"\n [taskId]=\"taskId\"\n (success)=\"onCompleteTask(false, taskType)\"\n (error)=\"onError($event)\"\n id=\"adf-form-complete\"\n >\n {{ customCompleteButtonText || ('ADF_CLOUD_TASK_FORM.EMPTY_FORM.BUTTONS.COMPLETE' | translate) }}\n </button>\n </mat-card-actions>\n </mat-card>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTemplate>\n <mat-spinner class=\"adf-user-task-cloud-spinner\" />\n</ng-template>\n\n<ng-template #taskFormCloudButtons>\n <adf-cloud-user-task-cloud-buttons\n [appName]=\"appName\"\n [canClaimTask]=\"canClaimTask()\"\n [canUnclaimTask]=\"canUnclaimTask()\"\n [showCancelButton]=\"showCancelButton\"\n [customCancelButtonText]=\"customCancelButtonText\"\n [taskId]=\"taskId\"\n (cancelClick)=\"onCancelClick()\"\n (claimTask)=\"onClaimTask()\"\n (unclaimTask)=\"onUnclaimTask()\"\n (error)=\"onError($event)\"\n />\n</ng-template>\n", styles: [".adf-user-task-cloud-container{height:100%}.adf-user-task-cloud-container>div{height:100%}.adf-user-task-cloud-spinner{top:50%;left:50%;transform:translate(-50%,-50%)}\n"] }]
11587
11555
  }], propDecorators: { adfCloudTaskForm: [{
11588
11556
  type: ViewChild,
11589
11557
  args: ['adfCloudTaskForm']
@@ -11598,6 +11566,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
11598
11566
  type: Input
11599
11567
  }], readOnly: [{
11600
11568
  type: Input
11569
+ }], allowSelfService: [{
11570
+ type: Input
11601
11571
  }], showCancelButton: [{
11602
11572
  type: Input
11603
11573
  }], showCompleteButton: [{
@@ -11701,6 +11671,8 @@ class TaskHeaderCloudComponent {
11701
11671
  this.appName = '';
11702
11672
  /** Show/Hide the task title */
11703
11673
  this.showTitle = true;
11674
+ /** When false, the assignee property is not clickable (self-service reassignment disabled). */
11675
+ this.allowSelfService = true;
11704
11676
  /** Emitted when the task is claimed. */
11705
11677
  this.claim = new EventEmitter();
11706
11678
  /** Emitted when the task is unclaimed (ie, requeued). */
@@ -11931,13 +11903,13 @@ class TaskHeaderCloudComponent {
11931
11903
  * @returns `true` if assignee property is clickable, otherwise `false`
11932
11904
  */
11933
11905
  isAssigneePropertyClickable() {
11934
- return this.taskCloudService.isAssigneePropertyClickable(this.taskDetails, this.candidateUsers, []);
11906
+ return this.allowSelfService && this.taskCloudService.isAssigneePropertyClickable(this.taskDetails, this.candidateUsers, []);
11935
11907
  }
11936
11908
  isValidSelection(filteredProperties, cardItem) {
11937
11909
  return filteredProperties ? filteredProperties.indexOf(cardItem.key) >= 0 : true;
11938
11910
  }
11939
11911
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskHeaderCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11940
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: TaskHeaderCloudComponent, isStandalone: true, selector: "adf-cloud-task-header", inputs: { appName: "appName", taskId: "taskId", showTitle: "showTitle", processInstanceId: "processInstanceId" }, outputs: { claim: "claim", unclaim: "unclaim", error: "error" }, usesOnChanges: true, ngImport: i0, template: "<h3 *ngIf=\"showTitle\" class=\"adf-task-title\">{{ taskDetails?.name }}</h3>\n\n<div class=\"adf-task-header-container\">\n <mat-card appearance=\"outlined\" *ngIf=\"isTaskValid()\" class=\"adf-card-container\">\n <mat-card-content>\n <adf-card-view\n *ngIf=\"!isLoading; else loadingTemplate\"\n [displayNoneOption]=\"false\"\n [properties]=\"properties\"\n [editable]=\"isTaskEditable()\"\n [displayClearAction]=\"displayDateClearAction\" />\n </mat-card-content>\n </mat-card>\n</div>\n\n<ng-template #loadingTemplate>\n <div class=\"adf-task-header-loading\">\n <mat-spinner />\n </div>\n</ng-template>\n", styles: [".adf-controls{display:flex;justify-content:space-between}.adf-edit-controls{display:flex;justify-content:flex-end;margin-left:auto}.adf-switch-to-edit-mode,.adf-save-edit-mode{color:var(--mat-sys-primary)}.adf-cancel-edit-mode,.adf-claim-controls{color:var(--mat-sys-on-surface-variant)}.adf-task-header-loading{display:flex;justify-content:center}@media(max-width:959.9px){adf-card-view .adf-property-value{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: CardViewComponent, selector: "adf-card-view", inputs: ["properties", "editable", "displayEmpty", "displayNoneOption", "displayClearAction", "copyToClipboardAction", "displayCopyToClipboardIcon", "useChipsForMultiValueProperty", "multiValueSeparator"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }], encapsulation: i0.ViewEncapsulation.None }); }
11912
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: TaskHeaderCloudComponent, isStandalone: true, selector: "adf-cloud-task-header", inputs: { appName: "appName", taskId: "taskId", showTitle: "showTitle", processInstanceId: "processInstanceId", allowSelfService: "allowSelfService" }, outputs: { claim: "claim", unclaim: "unclaim", error: "error" }, usesOnChanges: true, ngImport: i0, template: "<h3 *ngIf=\"showTitle\" class=\"adf-task-title\">{{ taskDetails?.name }}</h3>\n\n<div class=\"adf-task-header-container\">\n <mat-card appearance=\"outlined\" *ngIf=\"isTaskValid()\" class=\"adf-card-container\">\n <mat-card-content>\n <adf-card-view\n *ngIf=\"!isLoading; else loadingTemplate\"\n [displayNoneOption]=\"false\"\n [properties]=\"properties\"\n [editable]=\"isTaskEditable()\"\n [displayClearAction]=\"displayDateClearAction\" />\n </mat-card-content>\n </mat-card>\n</div>\n\n<ng-template #loadingTemplate>\n <div class=\"adf-task-header-loading\">\n <mat-spinner />\n </div>\n</ng-template>\n", styles: [".adf-controls{display:flex;justify-content:space-between}.adf-edit-controls{display:flex;justify-content:flex-end;margin-left:auto}.adf-switch-to-edit-mode,.adf-save-edit-mode{color:var(--mat-sys-primary)}.adf-cancel-edit-mode,.adf-claim-controls{color:var(--mat-sys-on-surface-variant)}.adf-task-header-loading{display:flex;justify-content:center}@media(max-width:959.9px){adf-card-view .adf-property-value{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: CardViewComponent, selector: "adf-card-view", inputs: ["properties", "editable", "displayEmpty", "displayNoneOption", "displayClearAction", "copyToClipboardAction", "displayCopyToClipboardIcon", "useChipsForMultiValueProperty", "multiValueSeparator"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2$3.MatCardContent, selector: "mat-card-content" }], encapsulation: i0.ViewEncapsulation.None }); }
11941
11913
  }
11942
11914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskHeaderCloudComponent, decorators: [{
11943
11915
  type: Component,
@@ -11952,6 +11924,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
11952
11924
  type: Input
11953
11925
  }], processInstanceId: [{
11954
11926
  type: Input
11927
+ }], allowSelfService: [{
11928
+ type: Input
11955
11929
  }], claim: [{
11956
11930
  type: Output
11957
11931
  }], unclaim: [{
@@ -12016,12 +11990,6 @@ class ProcessFiltersCloudComponent {
12016
11990
  *
12017
11991
  */
12018
11992
  this.searchApiMethod = 'GET';
12019
- /**
12020
- * (optional) Resolves the counters of the task and the process filters with a single call to
12021
- * `POST /query/v1/count`. Both filter components have to
12022
- * ask for it, otherwise the counters are resolved one filter at a time.
12023
- */
12024
- this.useBatchedCounters = false;
12025
11993
  /** (optional) Toggles showing an icon by the side of each filter */
12026
11994
  this.showIcons = false;
12027
11995
  /** Emitted when a filter is being selected based on the filterParam input. */
@@ -12040,7 +12008,6 @@ class ProcessFiltersCloudComponent {
12040
12008
  this.updatedFiltersSet = new Set();
12041
12009
  this.enableNotifications = true;
12042
12010
  this.notificationDebounceTime = 3000;
12043
- this.batchedCounters = true;
12044
12011
  this.destroyRef = inject(DestroyRef);
12045
12012
  this.processFilterCloudService = inject(ProcessFilterCloudService);
12046
12013
  this.translationService = inject(TranslationService);
@@ -12067,9 +12034,6 @@ class ProcessFiltersCloudComponent {
12067
12034
  else if (filter && filter.currentValue !== filter.previousValue) {
12068
12035
  this.selectFilterAndEmit(filter.currentValue);
12069
12036
  }
12070
- else if (changes['useBatchedCounters'] && !changes['useBatchedCounters'].firstChange && this.filtersLoadedFor) {
12071
- this.loadFilterCounters(this.filtersLoadedFor);
12072
- }
12073
12037
  }
12074
12038
  /**
12075
12039
  * Fetch the filter list based on appName
@@ -12153,7 +12117,7 @@ class ProcessFiltersCloudComponent {
12153
12117
  if (filter) {
12154
12118
  this.selectFilter(filter);
12155
12119
  this.filterClicked.emit(this.currentFilter);
12156
- this.refreshFilterCounter(this.currentFilter);
12120
+ this.refreshFilterCounter();
12157
12121
  this.updatedFiltersSet.delete(filter.key);
12158
12122
  }
12159
12123
  else {
@@ -12262,17 +12226,11 @@ class ProcessFiltersCloudComponent {
12262
12226
  this.countersSubscription?.unsubscribe();
12263
12227
  this.countersSubscription = combineLatest([
12264
12228
  this.countersFilters$.pipe(catchError(() => of([]))),
12265
- this.filterCountersCloudService.getFilterCounters(appName, FilterCounterEntityType.PROCESS_INSTANCE, this.useBatchedCounters)
12229
+ this.filterCountersCloudService.getFilterCounters(appName, FilterCounterEntityType.PROCESS_INSTANCE)
12266
12230
  ])
12267
12231
  .pipe(takeUntilDestroyed(this.destroyRef))
12268
- .subscribe(([, { counters, batched }]) => {
12269
- this.batchedCounters = batched;
12270
- if (batched) {
12271
- this.applyFilterCounters(counters);
12272
- }
12273
- else {
12274
- this.updateFilterCounters();
12275
- }
12232
+ .subscribe(([, { counters }]) => {
12233
+ this.applyFilterCounters(counters);
12276
12234
  });
12277
12235
  }
12278
12236
  applyFilterCounters(counters) {
@@ -12290,13 +12248,8 @@ class ProcessFiltersCloudComponent {
12290
12248
  this.counters = { ...this.counters, [filterKey]: counter };
12291
12249
  });
12292
12250
  }
12293
- refreshFilterCounter(filter) {
12294
- if (this.batchedCounters) {
12295
- this.filterCountersCloudService.refreshFilterCounters(this.appName);
12296
- }
12297
- else if (filter) {
12298
- this.updateFilterCounter(filter);
12299
- }
12251
+ refreshFilterCounter() {
12252
+ this.filterCountersCloudService.refreshFilterCounters(this.appName);
12300
12253
  }
12301
12254
  fetchProcessFilterCounter(filter) {
12302
12255
  return this.searchApiMethod === 'POST'
@@ -12304,7 +12257,7 @@ class ProcessFiltersCloudComponent {
12304
12257
  : this.processListCloudService.getProcessCounter(filter.appName, filter.status);
12305
12258
  }
12306
12259
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ProcessFiltersCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: ProcessFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-process-filters", inputs: { appName: "appName", searchApiMethod: "searchApiMethod", useBatchedCounters: "useBatchedCounters", filterParam: "filterParam", showIcons: "showIcons" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", success: "success", error: "error", updatedFilter: "updatedFilter" }, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[PROCESSES_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-process-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name ?? '' | translate\"\n [attr.aria-label]=\"filter.name ?? '' | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name ?? '' | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon ?? ''\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key ?? '']) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-process-filters__entry-counter\"\n [class.adf-active]=\"isFilterUpdated(filter.key ?? '')\"\n >\n {{ counters[filter.key ?? ''] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_PROCESS_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n\n", styles: [".adf-process-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-process-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
12260
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: ProcessFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-process-filters", inputs: { appName: "appName", searchApiMethod: "searchApiMethod", filterParam: "filterParam", showIcons: "showIcons" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", success: "success", error: "error", updatedFilter: "updatedFilter" }, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[PROCESSES_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-process-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name ?? '' | translate\"\n [attr.aria-label]=\"filter.name ?? '' | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name ?? '' | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon ?? ''\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key ?? '']) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-process-filters__entry-counter\"\n [class.adf-active]=\"isFilterUpdated(filter.key ?? '')\"\n >\n {{ counters[filter.key ?? ''] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_PROCESS_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n\n", styles: [".adf-process-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-process-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
12308
12261
  }
12309
12262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ProcessFiltersCloudComponent, decorators: [{
12310
12263
  type: Component,
@@ -12313,8 +12266,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
12313
12266
  type: Input
12314
12267
  }], searchApiMethod: [{
12315
12268
  type: Input
12316
- }], useBatchedCounters: [{
12317
- type: Input
12318
12269
  }], filterParam: [{
12319
12270
  type: Input
12320
12271
  }], showIcons: [{