@alfresco/adf-process-services-cloud 9.2.0-38736972803 → 9.2.0-38778559181
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.
|
@@ -3,7 +3,7 @@ import { inject, Injectable, InjectionToken, EventEmitter, DestroyRef, Output, I
|
|
|
3
3
|
import * as i3 from '@alfresco/adf-core';
|
|
4
4
|
import { AppConfigService, JwtHelperService, OAuth2Service, TranslationService, DataTableSchema, UserPreferencesService, UserPreferenceValues, CustomEmptyContentTemplateDirective, ObjectDataTableAdapter, ColumnsSelectorComponent, MainMenuDataTableTemplateDirective, EmptyContentComponent, NoContentTemplateDirective, LoadingContentTemplateDirective, DataTableComponent, AdfDateFnsAdapter, MOMENT_DATE_FORMATS, AuthenticationService, StorageService, IconModule, DateFnsUtils, ADF_DATE_FORMATS, FullNamePipe, InitialUsernamePipe, FormFieldTypes, FormService, FormModel, ROW_ID_PREFIX, FormBaseComponent, ADF_DISPLAY_TEXT_SETTINGS, WidgetVisibilityService, FormExpressionService, UploadWidgetContentLinkModel, FormEvent, FormOutcomeModel, ConfirmDialogComponent, FormRulesEvent, FormOutcomeEvent, FormRendererComponent, ToolbarDividerComponent, ToolbarComponent, FormatSpacePipe, NotificationService, DownloadService, WidgetComponent, ThumbnailService, ErrorWidgetComponent, LocalizedDatePipe, UploadDirective, ContentLinkModel, getDynamicDateFieldRange, getDateFieldRange, isEmptyFieldValue, getValidationSummaryTranslationParameters, DEFAULT_DATE_FORMAT, FormFieldValueFormatterService, ADF_TYPED_VALUE_FORMATTING_ENABLED, FormFieldEvent, SelectFilterInputComponent, FormRenderingService, DynamicComponentMapper, CardViewUpdateService, ClipboardService, CardViewTextItemModel, CardViewSelectItemModel, CardViewDatetimeItemModel, CardViewDateItemModel, CardViewArrayItemModel, CardViewComponent, CustomLoadingContentTemplateDirective, isOutcomeButtonVisible, FormOutcomeNotFoundError, InplaceFormInputComponent, BaseViewerWidgetComponent, ErrorMessageModel, BaseDisplayTextWidgetComponent, ObjectDataColumn, ObjectDataRow, FormBaseModule, provideTranslations } from '@alfresco/adf-core';
|
|
5
5
|
import { from, EMPTY, isObservable, of, Subject, throwError, BehaviorSubject, combineLatest, defer, merge, asapScheduler, firstValueFrom, forkJoin, catchError as catchError$1 } from 'rxjs';
|
|
6
|
-
import { map, take, switchMap, catchError, distinctUntilChanged, filter, tap, finalize, debounceTime, shareReplay, mergeMap, expand, reduce, mapTo, concatMap } from 'rxjs/operators';
|
|
6
|
+
import { map, take, switchMap, catchError, distinctUntilChanged, filter, tap, finalize, debounceTime, shareReplay, scan, mergeMap, expand, reduce, mapTo, concatMap } from 'rxjs/operators';
|
|
7
7
|
import { AlfrescoApiService, NodeAction, ContentNodeSelectorComponent, NodesApiService, ContentService, ContentNodeSelectorPanelService, NewVersionUploaderService, NewVersionUploaderDataAction, ContentMetadataComponent, AlfrescoViewerComponent } from '@alfresco/adf-content-services';
|
|
8
8
|
import { AdfHttpClient } from '@alfresco/adf-core/api';
|
|
9
9
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
@@ -4193,6 +4193,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
|
|
|
4193
4193
|
args: [{ providedIn: 'root' }]
|
|
4194
4194
|
}] });
|
|
4195
4195
|
|
|
4196
|
+
/*!
|
|
4197
|
+
* @license
|
|
4198
|
+
* Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4199
|
+
*
|
|
4200
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4201
|
+
* you may not use this file except in compliance with the License.
|
|
4202
|
+
* You may obtain a copy of the License at
|
|
4203
|
+
*
|
|
4204
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
4205
|
+
*
|
|
4206
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4207
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
4208
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4209
|
+
* See the License for the specific language governing permissions and
|
|
4210
|
+
* limitations under the License.
|
|
4211
|
+
*/
|
|
4212
|
+
|
|
4196
4213
|
/*!
|
|
4197
4214
|
* @license
|
|
4198
4215
|
* Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
@@ -4376,6 +4393,259 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
|
|
|
4376
4393
|
* limitations under the License.
|
|
4377
4394
|
*/
|
|
4378
4395
|
|
|
4396
|
+
/*!
|
|
4397
|
+
* @license
|
|
4398
|
+
* Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4399
|
+
*
|
|
4400
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4401
|
+
* you may not use this file except in compliance with the License.
|
|
4402
|
+
* You may obtain a copy of the License at
|
|
4403
|
+
*
|
|
4404
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
4405
|
+
*
|
|
4406
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4407
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
4408
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4409
|
+
* See the License for the specific language governing permissions and
|
|
4410
|
+
* limitations under the License.
|
|
4411
|
+
*/
|
|
4412
|
+
const PUSHED_COUNTER_SUBSCRIPTIONS_BY_ENTITY_TYPE = {
|
|
4413
|
+
[FilterCounterEntityType.TASK]: [
|
|
4414
|
+
{
|
|
4415
|
+
filterKey: 'my-tasks',
|
|
4416
|
+
graphQlFieldName: 'assignedTasks',
|
|
4417
|
+
subscriptionQuery: `
|
|
4418
|
+
subscription {
|
|
4419
|
+
assignedTasks {
|
|
4420
|
+
count
|
|
4421
|
+
asOf
|
|
4422
|
+
}
|
|
4423
|
+
}
|
|
4424
|
+
`
|
|
4425
|
+
},
|
|
4426
|
+
{
|
|
4427
|
+
filterKey: 'queued-tasks',
|
|
4428
|
+
graphQlFieldName: 'queuedTasks',
|
|
4429
|
+
subscriptionQuery: `
|
|
4430
|
+
subscription {
|
|
4431
|
+
queuedTasks {
|
|
4432
|
+
count
|
|
4433
|
+
asOf
|
|
4434
|
+
}
|
|
4435
|
+
}
|
|
4436
|
+
`
|
|
4437
|
+
}
|
|
4438
|
+
],
|
|
4439
|
+
[FilterCounterEntityType.PROCESS_INSTANCE]: [
|
|
4440
|
+
{
|
|
4441
|
+
filterKey: 'running-processes',
|
|
4442
|
+
graphQlFieldName: 'runningProcesses',
|
|
4443
|
+
subscriptionQuery: `
|
|
4444
|
+
subscription {
|
|
4445
|
+
runningProcesses {
|
|
4446
|
+
count
|
|
4447
|
+
asOf
|
|
4448
|
+
}
|
|
4449
|
+
}
|
|
4450
|
+
`
|
|
4451
|
+
}
|
|
4452
|
+
]
|
|
4453
|
+
};
|
|
4454
|
+
class QueryPushedFilterCountersCloudService extends BaseCloudService {
|
|
4455
|
+
constructor() {
|
|
4456
|
+
super(...arguments);
|
|
4457
|
+
this.notificationCloudService = inject(NotificationCloudService);
|
|
4458
|
+
this.taskListCloudService = inject(TaskListCloudService);
|
|
4459
|
+
this.processListCloudService = inject(ProcessListCloudService);
|
|
4460
|
+
this.injector = inject(Injector);
|
|
4461
|
+
this.taskFiltersPerApp = new Map();
|
|
4462
|
+
this.processFiltersPerApp = new Map();
|
|
4463
|
+
this.recountTriggerPerApp = new Map();
|
|
4464
|
+
this.entityTypeCountersPerApp = new Map();
|
|
4465
|
+
this.activeEntityTypesPerApp = new Map();
|
|
4466
|
+
this.activeSubscriberCountPerEntityType = new Map();
|
|
4467
|
+
this.initialCountersPerApp = new Map();
|
|
4468
|
+
this.applyCounterUpdate = (entries, event) => {
|
|
4469
|
+
if (event.source === 'initialFetch') {
|
|
4470
|
+
const mergedEntries = { ...entries };
|
|
4471
|
+
Object.entries(event.counters).forEach(([filterKey, count]) => {
|
|
4472
|
+
if (mergedEntries[filterKey]?.source === 'webSocketPush') {
|
|
4473
|
+
return;
|
|
4474
|
+
}
|
|
4475
|
+
mergedEntries[filterKey] = { count, source: 'initialFetch' };
|
|
4476
|
+
});
|
|
4477
|
+
return mergedEntries;
|
|
4478
|
+
}
|
|
4479
|
+
const existingEntry = entries[event.filterKey];
|
|
4480
|
+
const isOutOfOrderPush = existingEntry?.source === 'webSocketPush' &&
|
|
4481
|
+
existingEntry.asOf !== undefined &&
|
|
4482
|
+
event.asOf !== undefined &&
|
|
4483
|
+
event.asOf < existingEntry.asOf;
|
|
4484
|
+
if (isOutOfOrderPush) {
|
|
4485
|
+
return entries;
|
|
4486
|
+
}
|
|
4487
|
+
return { ...entries, [event.filterKey]: { count: event.count, asOf: event.asOf, source: 'webSocketPush' } };
|
|
4488
|
+
};
|
|
4489
|
+
}
|
|
4490
|
+
getTaskFilters(appName) {
|
|
4491
|
+
return this.shareFilters(this.taskFiltersPerApp, appName, () => this.injector.get(TaskFilterCloudService).getTaskListFilters(appName));
|
|
4492
|
+
}
|
|
4493
|
+
getProcessFilters(appName) {
|
|
4494
|
+
return this.shareFilters(this.processFiltersPerApp, appName, () => this.injector.get(ProcessFilterCloudService).getProcessFilters(appName));
|
|
4495
|
+
}
|
|
4496
|
+
getFilterCounters(appName, entityType) {
|
|
4497
|
+
if (!appName) {
|
|
4498
|
+
return EMPTY;
|
|
4499
|
+
}
|
|
4500
|
+
return defer(() => {
|
|
4501
|
+
this.activateEntityType(appName, entityType);
|
|
4502
|
+
return this.watchEntityTypeCounters(appName, entityType);
|
|
4503
|
+
}).pipe(map((counters) => ({ counters })), finalize(() => this.deactivateEntityType(appName, entityType)));
|
|
4504
|
+
}
|
|
4505
|
+
refreshFilterCounters(appName) {
|
|
4506
|
+
this.recountTrigger(appName).next();
|
|
4507
|
+
}
|
|
4508
|
+
getEngineEvents(_appName, _entityType) {
|
|
4509
|
+
return EMPTY;
|
|
4510
|
+
}
|
|
4511
|
+
watchEntityTypeCounters(appName, entityType) {
|
|
4512
|
+
const key = this.entityTypeKey(appName, entityType);
|
|
4513
|
+
let entityTypeCounters$ = this.entityTypeCountersPerApp.get(key);
|
|
4514
|
+
if (!entityTypeCounters$) {
|
|
4515
|
+
const initialCountersEvents$ = this.initialCounters(appName).pipe(map((counters) => ({
|
|
4516
|
+
source: 'initialFetch',
|
|
4517
|
+
counters: counters[entityType] ?? {}
|
|
4518
|
+
})));
|
|
4519
|
+
const pushedCounterEvents$ = this.pushedCounterUpdates(appName, entityType).pipe(map(({ filterKey, count, asOf }) => ({
|
|
4520
|
+
source: 'webSocketPush',
|
|
4521
|
+
filterKey,
|
|
4522
|
+
count,
|
|
4523
|
+
asOf
|
|
4524
|
+
})));
|
|
4525
|
+
entityTypeCounters$ = merge(initialCountersEvents$, pushedCounterEvents$).pipe(scan(this.applyCounterUpdate, {}), map((entries) => this.toEntityTypeCounters(entries)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
4526
|
+
this.entityTypeCountersPerApp.set(key, entityTypeCounters$);
|
|
4527
|
+
}
|
|
4528
|
+
return entityTypeCounters$;
|
|
4529
|
+
}
|
|
4530
|
+
activateEntityType(appName, entityType) {
|
|
4531
|
+
const key = this.entityTypeKey(appName, entityType);
|
|
4532
|
+
const activeSubscriberCount = (this.activeSubscriberCountPerEntityType.get(key) ?? 0) + 1;
|
|
4533
|
+
this.activeSubscriberCountPerEntityType.set(key, activeSubscriberCount);
|
|
4534
|
+
if (activeSubscriberCount > 1) {
|
|
4535
|
+
return;
|
|
4536
|
+
}
|
|
4537
|
+
const activeEntityTypes = this.activeEntityTypes(appName);
|
|
4538
|
+
const joinsAlreadyActiveEntityTypes = activeEntityTypes.size > 0;
|
|
4539
|
+
activeEntityTypes.add(entityType);
|
|
4540
|
+
if (joinsAlreadyActiveEntityTypes) {
|
|
4541
|
+
this.refreshFilterCounters(appName);
|
|
4542
|
+
}
|
|
4543
|
+
}
|
|
4544
|
+
deactivateEntityType(appName, entityType) {
|
|
4545
|
+
const key = this.entityTypeKey(appName, entityType);
|
|
4546
|
+
const activeSubscriberCount = (this.activeSubscriberCountPerEntityType.get(key) ?? 1) - 1;
|
|
4547
|
+
if (activeSubscriberCount > 0) {
|
|
4548
|
+
this.activeSubscriberCountPerEntityType.set(key, activeSubscriberCount);
|
|
4549
|
+
return;
|
|
4550
|
+
}
|
|
4551
|
+
this.activeSubscriberCountPerEntityType.delete(key);
|
|
4552
|
+
this.activeEntityTypes(appName).delete(entityType);
|
|
4553
|
+
}
|
|
4554
|
+
activeEntityTypes(appName) {
|
|
4555
|
+
let activeEntityTypes = this.activeEntityTypesPerApp.get(appName);
|
|
4556
|
+
if (!activeEntityTypes) {
|
|
4557
|
+
activeEntityTypes = new Set();
|
|
4558
|
+
this.activeEntityTypesPerApp.set(appName, activeEntityTypes);
|
|
4559
|
+
}
|
|
4560
|
+
return activeEntityTypes;
|
|
4561
|
+
}
|
|
4562
|
+
initialCounters(appName) {
|
|
4563
|
+
let initialCounters$ = this.initialCountersPerApp.get(appName);
|
|
4564
|
+
if (!initialCounters$) {
|
|
4565
|
+
initialCounters$ = merge(of(undefined), this.recountTrigger(appName)).pipe(debounceTime(0), switchMap(() => this.fetchActiveEntityTypesCounters(appName)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
4566
|
+
this.initialCountersPerApp.set(appName, initialCounters$);
|
|
4567
|
+
}
|
|
4568
|
+
return initialCounters$;
|
|
4569
|
+
}
|
|
4570
|
+
pushedCounterUpdates(appName, entityType) {
|
|
4571
|
+
return merge(...PUSHED_COUNTER_SUBSCRIPTIONS_BY_ENTITY_TYPE[entityType].map((subscription) => this.pushedCounterUpdate(appName, subscription)));
|
|
4572
|
+
}
|
|
4573
|
+
pushedCounterUpdate(appName, subscription) {
|
|
4574
|
+
return defer(() => this.notificationCloudService.makeGQLQuery(appName, subscription.subscriptionQuery)).pipe(map((result) => result.data?.[subscription.graphQlFieldName]), filter((value) => value?.count !== undefined), map((value) => ({ filterKey: subscription.filterKey, count: value.count, asOf: value.asOf })), catchError(() => EMPTY));
|
|
4575
|
+
}
|
|
4576
|
+
toEntityTypeCounters(entries) {
|
|
4577
|
+
return Object.fromEntries(Object.entries(entries).map(([filterKey, entry]) => [filterKey, entry.count]));
|
|
4578
|
+
}
|
|
4579
|
+
fetchActiveEntityTypesCounters(appName) {
|
|
4580
|
+
const activeEntityTypes = this.activeEntityTypes(appName);
|
|
4581
|
+
return combineLatest({
|
|
4582
|
+
[FilterCounterEntityType.TASK]: activeEntityTypes.has(FilterCounterEntityType.TASK)
|
|
4583
|
+
? this.getTaskFilters(appName).pipe(catchError(() => of([])))
|
|
4584
|
+
: of([]),
|
|
4585
|
+
[FilterCounterEntityType.PROCESS_INSTANCE]: activeEntityTypes.has(FilterCounterEntityType.PROCESS_INSTANCE)
|
|
4586
|
+
? this.getProcessFilters(appName).pipe(catchError(() => of([])))
|
|
4587
|
+
: of([])
|
|
4588
|
+
}).pipe(take(1), switchMap((filters) => this.fetchFilterCounters(appName, this.buildRequest(filters))), catchError(() => EMPTY));
|
|
4589
|
+
}
|
|
4590
|
+
buildRequest(filters) {
|
|
4591
|
+
const request = {};
|
|
4592
|
+
const taskQueries = this.buildQueries(filters[FilterCounterEntityType.TASK], (taskFilter) => this.taskListCloudService.buildQueryData(new TaskFilterCloudAdapter(taskFilter)));
|
|
4593
|
+
if (taskQueries.length) {
|
|
4594
|
+
request[FilterCounterEntityType.TASK] = taskQueries;
|
|
4595
|
+
}
|
|
4596
|
+
const processQueries = this.buildQueries(filters[FilterCounterEntityType.PROCESS_INSTANCE], (processFilter) => this.processListCloudService.buildQueryData(new ProcessFilterCloudAdapter(processFilter)));
|
|
4597
|
+
if (processQueries.length) {
|
|
4598
|
+
request[FilterCounterEntityType.PROCESS_INSTANCE] = processQueries;
|
|
4599
|
+
}
|
|
4600
|
+
return request;
|
|
4601
|
+
}
|
|
4602
|
+
buildQueries(filters, buildQuery) {
|
|
4603
|
+
return (filters ?? [])
|
|
4604
|
+
.filter((candidate) => candidate?.showCounter && !!candidate?.key)
|
|
4605
|
+
.map((candidate) => {
|
|
4606
|
+
try {
|
|
4607
|
+
return { ...buildQuery(candidate), requestId: candidate.key };
|
|
4608
|
+
}
|
|
4609
|
+
catch {
|
|
4610
|
+
return undefined;
|
|
4611
|
+
}
|
|
4612
|
+
})
|
|
4613
|
+
.filter((query) => !!query);
|
|
4614
|
+
}
|
|
4615
|
+
fetchFilterCounters(appName, request) {
|
|
4616
|
+
if (!Object.keys(request).length) {
|
|
4617
|
+
return of({});
|
|
4618
|
+
}
|
|
4619
|
+
const queryUrl = `${this.getBasePath(appName)}/query/v1/count`;
|
|
4620
|
+
return this.post(queryUrl, request).pipe(map((counters) => counters || {}));
|
|
4621
|
+
}
|
|
4622
|
+
shareFilters(cache, appName, loadFilters) {
|
|
4623
|
+
let filters$ = cache.get(appName);
|
|
4624
|
+
if (!filters$) {
|
|
4625
|
+
filters$ = defer(loadFilters).pipe(shareReplay({ bufferSize: 1, refCount: true }));
|
|
4626
|
+
cache.set(appName, filters$);
|
|
4627
|
+
}
|
|
4628
|
+
return filters$;
|
|
4629
|
+
}
|
|
4630
|
+
recountTrigger(appName) {
|
|
4631
|
+
let recountTrigger$ = this.recountTriggerPerApp.get(appName);
|
|
4632
|
+
if (!recountTrigger$) {
|
|
4633
|
+
recountTrigger$ = new Subject();
|
|
4634
|
+
this.recountTriggerPerApp.set(appName, recountTrigger$);
|
|
4635
|
+
}
|
|
4636
|
+
return recountTrigger$;
|
|
4637
|
+
}
|
|
4638
|
+
entityTypeKey(appName, entityType) {
|
|
4639
|
+
return `${appName}|${entityType}`;
|
|
4640
|
+
}
|
|
4641
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: QueryPushedFilterCountersCloudService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4642
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: QueryPushedFilterCountersCloudService, providedIn: 'root' }); }
|
|
4643
|
+
}
|
|
4644
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: QueryPushedFilterCountersCloudService, decorators: [{
|
|
4645
|
+
type: Injectable,
|
|
4646
|
+
args: [{ providedIn: 'root' }]
|
|
4647
|
+
}] });
|
|
4648
|
+
|
|
4379
4649
|
/*!
|
|
4380
4650
|
* @license
|
|
4381
4651
|
* Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
@@ -4718,6 +4988,13 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4718
4988
|
*
|
|
4719
4989
|
*/
|
|
4720
4990
|
this.searchApiMethod = 'GET';
|
|
4991
|
+
/**
|
|
4992
|
+
* (optional) Resolves the initial counters of the filters with a single call to
|
|
4993
|
+
* `POST /query/v1/count`, then keeps the counters of the `my-tasks` and `queued-tasks`
|
|
4994
|
+
* filters in sync with the counts pushed by the engine over the web socket, without any
|
|
4995
|
+
* further call to the count endpoint. Both filter components have to use the same value.
|
|
4996
|
+
*/
|
|
4997
|
+
this.queryPushedCounter = false;
|
|
4721
4998
|
/** Emitted when a filter is being selected based on the filterParam input. */
|
|
4722
4999
|
this.filterSelected = new EventEmitter();
|
|
4723
5000
|
/** Emitted when a filter is being clicked from the UI. */
|
|
@@ -4733,11 +5010,15 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4733
5010
|
this.taskFilterCloudService = inject(TaskFilterCloudService);
|
|
4734
5011
|
this.taskListCloudService = inject(TaskListCloudService);
|
|
4735
5012
|
this.filterCountersCloudService = inject(FilterCountersCloudService);
|
|
5013
|
+
this.queryPushedFilterCountersCloudService = inject(QueryPushedFilterCountersCloudService);
|
|
4736
5014
|
this.translationService = inject(TranslationService);
|
|
4737
5015
|
this.appConfigService = inject(AppConfigService);
|
|
4738
5016
|
this.activatedRoute = inject(ActivatedRoute);
|
|
4739
5017
|
this.currentRouteFilterId = toSignal(this.activatedRoute.queryParamMap.pipe(map((params) => params.get('filterId'))));
|
|
4740
5018
|
}
|
|
5019
|
+
get filterCountersService() {
|
|
5020
|
+
return this.queryPushedCounter ? this.queryPushedFilterCountersCloudService : this.filterCountersCloudService;
|
|
5021
|
+
}
|
|
4741
5022
|
ngOnInit() {
|
|
4742
5023
|
this.enableNotifications = this.appConfigService.get('notifications', true);
|
|
4743
5024
|
this.notificationDebounceTime = this.appConfigService.get('notificationDebounceTime', 3000);
|
|
@@ -4756,6 +5037,10 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4756
5037
|
else if (filter && filter.currentValue !== filter.previousValue) {
|
|
4757
5038
|
this.selectFilterAndEmit(filter.currentValue);
|
|
4758
5039
|
}
|
|
5040
|
+
else if (changes['queryPushedCounter'] && !changes['queryPushedCounter'].firstChange && this.filtersLoadedFor) {
|
|
5041
|
+
this.initFilterCounterNotifications();
|
|
5042
|
+
this.loadFilterCounters(this.filtersLoadedFor);
|
|
5043
|
+
}
|
|
4759
5044
|
}
|
|
4760
5045
|
/**
|
|
4761
5046
|
* Loads the filter list filtered by appName
|
|
@@ -4764,7 +5049,7 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4764
5049
|
*/
|
|
4765
5050
|
getFilters(appName) {
|
|
4766
5051
|
this.filtersLoadedFor = appName;
|
|
4767
|
-
const filters$ = this.
|
|
5052
|
+
const filters$ = this.filterCountersService.getTaskFilters(appName);
|
|
4768
5053
|
this.filters$ = filters$.pipe(catchError(() => of([])));
|
|
4769
5054
|
filters$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
|
|
4770
5055
|
next: (res) => {
|
|
@@ -4816,8 +5101,9 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4816
5101
|
if (!this.appName) {
|
|
4817
5102
|
return;
|
|
4818
5103
|
}
|
|
5104
|
+
this.notificationsSubscription?.unsubscribe();
|
|
4819
5105
|
if (this.enableNotifications) {
|
|
4820
|
-
this.
|
|
5106
|
+
this.notificationsSubscription = this.filterCountersService
|
|
4821
5107
|
.getEngineEvents(this.appName, FilterCounterEntityType.TASK)
|
|
4822
5108
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
4823
5109
|
.subscribe((events) => {
|
|
@@ -4920,7 +5206,7 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4920
5206
|
this.countersSubscription?.unsubscribe();
|
|
4921
5207
|
this.countersSubscription = combineLatest([
|
|
4922
5208
|
this.countersFilters$.pipe(catchError(() => of([]))),
|
|
4923
|
-
this.
|
|
5209
|
+
this.filterCountersService.getFilterCounters(appName, FilterCounterEntityType.TASK)
|
|
4924
5210
|
])
|
|
4925
5211
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
4926
5212
|
.subscribe(([, { counters }]) => {
|
|
@@ -4955,16 +5241,18 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
|
|
|
4955
5241
|
this.currentFilter = undefined;
|
|
4956
5242
|
}
|
|
4957
5243
|
refreshFilterCounter() {
|
|
4958
|
-
this.
|
|
5244
|
+
this.filterCountersService.refreshFilterCounters(this.appName);
|
|
4959
5245
|
}
|
|
4960
5246
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFiltersCloudComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
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" }] }); }
|
|
5247
|
+
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", queryPushedCounter: "queryPushedCounter" }, 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" }] }); }
|
|
4962
5248
|
}
|
|
4963
5249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFiltersCloudComponent, decorators: [{
|
|
4964
5250
|
type: Component,
|
|
4965
5251
|
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"] }]
|
|
4966
5252
|
}], propDecorators: { searchApiMethod: [{
|
|
4967
5253
|
type: Input
|
|
5254
|
+
}], queryPushedCounter: [{
|
|
5255
|
+
type: Input
|
|
4968
5256
|
}], filterSelected: [{
|
|
4969
5257
|
type: Output
|
|
4970
5258
|
}], filterClicked: [{
|
|
@@ -7774,7 +8062,7 @@ const isDropdownCloudValidValue = (value, options) => !!value && isDropdownCloud
|
|
|
7774
8062
|
const isDropdownCloudRestField = (field) => field?.optionType === 'rest' && !!field?.restUrl;
|
|
7775
8063
|
const isDropdownCloudLinkedField = (field) => !!field?.rule?.ruleOn;
|
|
7776
8064
|
const getOptionsFromPath = (data, path, id, label) => {
|
|
7777
|
-
const properties = path.split('.');
|
|
8065
|
+
const properties = path.split('.').map((property) => property.trim());
|
|
7778
8066
|
const currentProperty = properties.shift();
|
|
7779
8067
|
if (data === null || typeof data !== 'object' || !Object.hasOwn(data, currentProperty)) {
|
|
7780
8068
|
return { options: [], errors: [`${currentProperty} not found in ${JSON.stringify(data)}`] };
|
|
@@ -7792,7 +8080,11 @@ const resolveDropdownCloudVariableOptions = (field, variableConfig = field?.vari
|
|
|
7792
8080
|
if (data == null) {
|
|
7793
8081
|
return null;
|
|
7794
8082
|
}
|
|
7795
|
-
|
|
8083
|
+
const optionsPath = variableConfig?.optionsPath ?? DEFAULT_VARIABLE_OPTION_PATH;
|
|
8084
|
+
if (!optionsPath.trim()) {
|
|
8085
|
+
return { options: [], errors: ['Options path is empty'] };
|
|
8086
|
+
}
|
|
8087
|
+
return getOptionsFromPath(data, optionsPath, variableConfig?.optionsId ?? DEFAULT_VARIABLE_OPTION_ID, variableConfig?.optionsLabel ?? DEFAULT_VARIABLE_OPTION_LABEL);
|
|
7796
8088
|
};
|
|
7797
8089
|
|
|
7798
8090
|
/*!
|
|
@@ -11990,6 +12282,13 @@ class ProcessFiltersCloudComponent {
|
|
|
11990
12282
|
*
|
|
11991
12283
|
*/
|
|
11992
12284
|
this.searchApiMethod = 'GET';
|
|
12285
|
+
/**
|
|
12286
|
+
* (optional) Resolves the initial counters of the filters with a single call to
|
|
12287
|
+
* `POST /query/v1/count`, then keeps the counter of the `running-processes` filter in sync
|
|
12288
|
+
* with the counts pushed by the engine over the web socket, without any further call to the
|
|
12289
|
+
* count endpoint. Both filter components have to use the same value.
|
|
12290
|
+
*/
|
|
12291
|
+
this.queryPushedCounter = false;
|
|
11993
12292
|
/** (optional) Toggles showing an icon by the side of each filter */
|
|
11994
12293
|
this.showIcons = false;
|
|
11995
12294
|
/** Emitted when a filter is being selected based on the filterParam input. */
|
|
@@ -12014,9 +12313,13 @@ class ProcessFiltersCloudComponent {
|
|
|
12014
12313
|
this.appConfigService = inject(AppConfigService);
|
|
12015
12314
|
this.processListCloudService = inject(ProcessListCloudService);
|
|
12016
12315
|
this.filterCountersCloudService = inject(FilterCountersCloudService);
|
|
12316
|
+
this.queryPushedFilterCountersCloudService = inject(QueryPushedFilterCountersCloudService);
|
|
12017
12317
|
this.activatedRoute = inject(ActivatedRoute);
|
|
12018
12318
|
this.currentRouteFilterId = toSignal(this.activatedRoute.queryParamMap.pipe(map((params) => params.get('filterId'))));
|
|
12019
12319
|
}
|
|
12320
|
+
get filterCountersService() {
|
|
12321
|
+
return this.queryPushedCounter ? this.queryPushedFilterCountersCloudService : this.filterCountersCloudService;
|
|
12322
|
+
}
|
|
12020
12323
|
ngOnInit() {
|
|
12021
12324
|
this.enableNotifications = this.appConfigService.get('notifications', true);
|
|
12022
12325
|
this.notificationDebounceTime = this.appConfigService.get('notificationDebounceTime', 3000);
|
|
@@ -12034,6 +12337,9 @@ class ProcessFiltersCloudComponent {
|
|
|
12034
12337
|
else if (filter && filter.currentValue !== filter.previousValue) {
|
|
12035
12338
|
this.selectFilterAndEmit(filter.currentValue);
|
|
12036
12339
|
}
|
|
12340
|
+
else if (changes['queryPushedCounter'] && !changes['queryPushedCounter'].firstChange && this.filtersLoadedFor) {
|
|
12341
|
+
this.loadFilterCounters(this.filtersLoadedFor);
|
|
12342
|
+
}
|
|
12037
12343
|
}
|
|
12038
12344
|
/**
|
|
12039
12345
|
* Fetch the filter list based on appName
|
|
@@ -12042,7 +12348,7 @@ class ProcessFiltersCloudComponent {
|
|
|
12042
12348
|
*/
|
|
12043
12349
|
getFilters(appName) {
|
|
12044
12350
|
this.filtersLoadedFor = appName;
|
|
12045
|
-
const filters$ = this.
|
|
12351
|
+
const filters$ = this.filterCountersService.getProcessFilters(appName);
|
|
12046
12352
|
this.filters$ = filters$.pipe(catchError(() => of([])));
|
|
12047
12353
|
filters$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
|
|
12048
12354
|
next: (res) => {
|
|
@@ -12226,7 +12532,7 @@ class ProcessFiltersCloudComponent {
|
|
|
12226
12532
|
this.countersSubscription?.unsubscribe();
|
|
12227
12533
|
this.countersSubscription = combineLatest([
|
|
12228
12534
|
this.countersFilters$.pipe(catchError(() => of([]))),
|
|
12229
|
-
this.
|
|
12535
|
+
this.filterCountersService.getFilterCounters(appName, FilterCounterEntityType.PROCESS_INSTANCE)
|
|
12230
12536
|
])
|
|
12231
12537
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
12232
12538
|
.subscribe(([, { counters }]) => {
|
|
@@ -12249,7 +12555,7 @@ class ProcessFiltersCloudComponent {
|
|
|
12249
12555
|
});
|
|
12250
12556
|
}
|
|
12251
12557
|
refreshFilterCounter() {
|
|
12252
|
-
this.
|
|
12558
|
+
this.filterCountersService.refreshFilterCounters(this.appName);
|
|
12253
12559
|
}
|
|
12254
12560
|
fetchProcessFilterCounter(filter) {
|
|
12255
12561
|
return this.searchApiMethod === 'POST'
|
|
@@ -12257,7 +12563,7 @@ class ProcessFiltersCloudComponent {
|
|
|
12257
12563
|
: this.processListCloudService.getProcessCounter(filter.appName, filter.status);
|
|
12258
12564
|
}
|
|
12259
12565
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ProcessFiltersCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
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" }] }); }
|
|
12566
|
+
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", queryPushedCounter: "queryPushedCounter", 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" }] }); }
|
|
12261
12567
|
}
|
|
12262
12568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ProcessFiltersCloudComponent, decorators: [{
|
|
12263
12569
|
type: Component,
|
|
@@ -12266,6 +12572,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
|
|
|
12266
12572
|
type: Input
|
|
12267
12573
|
}], searchApiMethod: [{
|
|
12268
12574
|
type: Input
|
|
12575
|
+
}], queryPushedCounter: [{
|
|
12576
|
+
type: Input
|
|
12269
12577
|
}], filterParam: [{
|
|
12270
12578
|
type: Input
|
|
12271
12579
|
}], showIcons: [{
|
|
@@ -15620,6 +15928,9 @@ class DataTablePathParserHelper {
|
|
|
15620
15928
|
return undefined;
|
|
15621
15929
|
}
|
|
15622
15930
|
const properties = this.splitPathIntoProperties(path);
|
|
15931
|
+
if (properties.length === 0) {
|
|
15932
|
+
return undefined;
|
|
15933
|
+
}
|
|
15623
15934
|
const currentProperty = properties.shift();
|
|
15624
15935
|
const propertyIndexReferences = this.getIndexReferencesFromProperty(currentProperty);
|
|
15625
15936
|
const purePropertyName = this.extractPurePropertyName(currentProperty);
|
|
@@ -15651,7 +15962,7 @@ class DataTablePathParserHelper {
|
|
|
15651
15962
|
switch (char) {
|
|
15652
15963
|
case separator:
|
|
15653
15964
|
if (isPropertySeparatorOutsideBrackets()) {
|
|
15654
|
-
properties.push(currentPropertyBuffer);
|
|
15965
|
+
properties.push(currentPropertyBuffer.trim());
|
|
15655
15966
|
currentPropertyBuffer = '';
|
|
15656
15967
|
}
|
|
15657
15968
|
else {
|
|
@@ -15671,8 +15982,9 @@ class DataTablePathParserHelper {
|
|
|
15671
15982
|
break;
|
|
15672
15983
|
}
|
|
15673
15984
|
}
|
|
15674
|
-
|
|
15675
|
-
|
|
15985
|
+
const lastProperty = currentPropertyBuffer.trim();
|
|
15986
|
+
if (lastProperty) {
|
|
15987
|
+
properties.push(lastProperty);
|
|
15676
15988
|
}
|
|
15677
15989
|
return properties;
|
|
15678
15990
|
}
|
|
@@ -17108,5 +17420,5 @@ const DATE_FORMAT_CLOUD = 'YYYY-MM-DD';
|
|
|
17108
17420
|
* Generated bundle index. Do not edit.
|
|
17109
17421
|
*/
|
|
17110
17422
|
|
|
17111
|
-
export { ADF_FORM_TAB_NAV_ENABLED, ADF_TASK_RUNTIME_BUNDLE_FALLBACK_ENABLED, APP_CUSTOM_SCREEN_TOKEN, ApplicationVersionModel, ApplicationVersionResponseModel, AppsProcessCloudService, AssignmentType, AttachFileCloudWidgetComponent, BaseCloudService, CLOUD_FORM_FIELD_VALIDATORS, CloudFormRenderingService, ContentCloudNodeSelectorService, DATE_FORMAT_CLOUD, DEFAULT_OPTION, DEFAULT_TASK_PRIORITIES, DROPDOWN_CLOUD_WIDGET_SET_VALUE_DEBOUNCE, DateCloudFilterType, DateCloudWidgetComponent, DateRangeFilterService, DescriptorCustomUIAuthFlowType, DisplayModeService, DisplayRichTextWidgetComponent, DropdownCloudFieldValidator, DropdownCloudWidgetComponent, EditProcessFilterCloudComponent, EditServiceTaskFilterCloudComponent, EditTaskFilterCloudComponent, FORM_CLOUD_DIRECTIVES, FORM_CLOUD_FIELD_VALIDATORS_TOKEN, FORM_CLOUD_SERVICE_FIELD_VALIDATORS_TOKEN, FilePropertiesTableCloudComponent, FileViewerWidgetComponent, FilterCounterEntityType, FilterCountersCloudService, FormCloudComponent, FormCloudDisplayMode, FormCloudModule, FormCloudService, FormCustomOutcomesComponent, FormFieldType, FormSpinnerComponent, GroupCloudComponent, GroupCloudModule, GroupCloudWidgetComponent, HIDE_FILTER_LIMIT, IdentityGroupService, IdentityUserService, LocalPreferenceCloudService, NotificationCloudService, PROCESS_CLOUD_DIRECTIVES, PROCESS_FILTERS_CLOUD_DIRECTIVES, PROCESS_FILTERS_SERVICE_TOKEN, PROCESS_FILTER_ACTION_DELETE, PROCESS_FILTER_ACTION_RESTORE, PROCESS_FILTER_ACTION_SAVE, PROCESS_FILTER_ACTION_SAVE_AS, PROCESS_FILTER_ACTION_SAVE_DEFAULT, PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN, PROCESS_SERVICES_CLOUD_DIRECTIVES, PeopleCloudComponent, PeopleCloudModule, PeopleCloudWidgetComponent, PeopleModeOptions, ProcessCloudContentService, ProcessCloudModule, ProcessCloudService, ProcessDefinitionCloud, ProcessFilterCloudAdapter, ProcessFilterCloudModel, ProcessFilterCloudService, ProcessFilterDialogCloudComponent, ProcessFiltersCloudComponent, ProcessFiltersCloudModule, ProcessHeaderCloudComponent, ProcessHeaderCloudModule, ProcessListCloudComponent, ProcessListCloudModule, ProcessListCloudPreferences, ProcessListCloudService, ProcessListCloudSortingModel, ProcessListRequestModel, ProcessListRequestSortingModel, ProcessPayloadCloud, ProcessQueryCloudRequestModel, ProcessServicesCloudModule, ProcessTaskListCloudService, PropertiesViewerWidgetComponent, PropertiesViewerWrapperComponent, RICH_TEXT_PARSER_TOKEN, RadioButtonsCloudWidgetComponent, ScreenRenderingService, ServiceTaskFilterCloudService, ServiceTaskFiltersCloudComponent, ServiceTaskListCloudComponent, ServiceTaskListCloudService, StartProcessCloudComponent, StartProcessCloudService, StartProcessScreenCloudComponent, StartTaskCloudRequestModel, TASK_ASSIGNED_STATE, TASK_CANCELLED_STATE, TASK_CLAIM_PERMISSION, TASK_COMPLETED_STATE, TASK_CREATED_STATE, TASK_FILTERS_CLOUD_DIRECTIVES, TASK_FILTERS_SERVICE_TOKEN, TASK_FORM_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_TOKEN, TASK_LIST_PREFERENCES_SERVICE_TOKEN, TASK_RELEASE_PERMISSION, TASK_SUSPENDED_STATE, TASK_UPDATE_PERMISSION, TASK_VIEW_PERMISSION, TaskAssignmentFilterCloudComponent, TaskCloudEntryModel, TaskCloudModule, TaskCloudNodePaging, TaskCloudPagingList, TaskCloudService, TaskFilterCloudAdapter, TaskFilterCloudModel, TaskFilterCloudService, TaskFilterDialogCloudComponent, TaskFiltersCloudComponent, TaskFiltersCloudModule, TaskFormCloudComponent, TaskFormModule, TaskHeaderCloudComponent, TaskHeaderCloudModule, TaskListCloudComponent, TaskListCloudModule, TaskListCloudService, TaskListCloudSortingModel, TaskListRequestModel, TaskListRequestSortingModel, TaskQueryCloudRequestModel, TaskStatusFilter, TaskVariableCloud, UploadCloudWidgetComponent, UserPreferenceCloudService, UserTaskCloudButtonsComponent, UserTaskCloudComponent, VariableMapperService, WebSocketService, getDateCloudWidgetRange, getExpressionEvaluationEnabled$, materializeSubmissionValues, processCloudPresetsDefaultModel, provideCloudFormRenderer, provideCloudPreferences, provideScreen, radioButtonsSchema, resolveTaskRuntimeBundleFallback$ };
|
|
17423
|
+
export { ADF_FORM_TAB_NAV_ENABLED, ADF_TASK_RUNTIME_BUNDLE_FALLBACK_ENABLED, APP_CUSTOM_SCREEN_TOKEN, ApplicationVersionModel, ApplicationVersionResponseModel, AppsProcessCloudService, AssignmentType, AttachFileCloudWidgetComponent, BaseCloudService, CLOUD_FORM_FIELD_VALIDATORS, CloudFormRenderingService, ContentCloudNodeSelectorService, DATE_FORMAT_CLOUD, DEFAULT_OPTION, DEFAULT_TASK_PRIORITIES, DROPDOWN_CLOUD_WIDGET_SET_VALUE_DEBOUNCE, DateCloudFilterType, DateCloudWidgetComponent, DateRangeFilterService, DescriptorCustomUIAuthFlowType, DisplayModeService, DisplayRichTextWidgetComponent, DropdownCloudFieldValidator, DropdownCloudWidgetComponent, EditProcessFilterCloudComponent, EditServiceTaskFilterCloudComponent, EditTaskFilterCloudComponent, FORM_CLOUD_DIRECTIVES, FORM_CLOUD_FIELD_VALIDATORS_TOKEN, FORM_CLOUD_SERVICE_FIELD_VALIDATORS_TOKEN, FilePropertiesTableCloudComponent, FileViewerWidgetComponent, FilterCounterEntityType, FilterCountersCloudService, FormCloudComponent, FormCloudDisplayMode, FormCloudModule, FormCloudService, FormCustomOutcomesComponent, FormFieldType, FormSpinnerComponent, GroupCloudComponent, GroupCloudModule, GroupCloudWidgetComponent, HIDE_FILTER_LIMIT, IdentityGroupService, IdentityUserService, LocalPreferenceCloudService, NotificationCloudService, PROCESS_CLOUD_DIRECTIVES, PROCESS_FILTERS_CLOUD_DIRECTIVES, PROCESS_FILTERS_SERVICE_TOKEN, PROCESS_FILTER_ACTION_DELETE, PROCESS_FILTER_ACTION_RESTORE, PROCESS_FILTER_ACTION_SAVE, PROCESS_FILTER_ACTION_SAVE_AS, PROCESS_FILTER_ACTION_SAVE_DEFAULT, PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN, PROCESS_SERVICES_CLOUD_DIRECTIVES, PeopleCloudComponent, PeopleCloudModule, PeopleCloudWidgetComponent, PeopleModeOptions, ProcessCloudContentService, ProcessCloudModule, ProcessCloudService, ProcessDefinitionCloud, ProcessFilterCloudAdapter, ProcessFilterCloudModel, ProcessFilterCloudService, ProcessFilterDialogCloudComponent, ProcessFiltersCloudComponent, ProcessFiltersCloudModule, ProcessHeaderCloudComponent, ProcessHeaderCloudModule, ProcessListCloudComponent, ProcessListCloudModule, ProcessListCloudPreferences, ProcessListCloudService, ProcessListCloudSortingModel, ProcessListRequestModel, ProcessListRequestSortingModel, ProcessPayloadCloud, ProcessQueryCloudRequestModel, ProcessServicesCloudModule, ProcessTaskListCloudService, PropertiesViewerWidgetComponent, PropertiesViewerWrapperComponent, QueryPushedFilterCountersCloudService, RICH_TEXT_PARSER_TOKEN, RadioButtonsCloudWidgetComponent, ScreenRenderingService, ServiceTaskFilterCloudService, ServiceTaskFiltersCloudComponent, ServiceTaskListCloudComponent, ServiceTaskListCloudService, StartProcessCloudComponent, StartProcessCloudService, StartProcessScreenCloudComponent, StartTaskCloudRequestModel, TASK_ASSIGNED_STATE, TASK_CANCELLED_STATE, TASK_CLAIM_PERMISSION, TASK_COMPLETED_STATE, TASK_CREATED_STATE, TASK_FILTERS_CLOUD_DIRECTIVES, TASK_FILTERS_SERVICE_TOKEN, TASK_FORM_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_TOKEN, TASK_LIST_PREFERENCES_SERVICE_TOKEN, TASK_RELEASE_PERMISSION, TASK_SUSPENDED_STATE, TASK_UPDATE_PERMISSION, TASK_VIEW_PERMISSION, TaskAssignmentFilterCloudComponent, TaskCloudEntryModel, TaskCloudModule, TaskCloudNodePaging, TaskCloudPagingList, TaskCloudService, TaskFilterCloudAdapter, TaskFilterCloudModel, TaskFilterCloudService, TaskFilterDialogCloudComponent, TaskFiltersCloudComponent, TaskFiltersCloudModule, TaskFormCloudComponent, TaskFormModule, TaskHeaderCloudComponent, TaskHeaderCloudModule, TaskListCloudComponent, TaskListCloudModule, TaskListCloudService, TaskListCloudSortingModel, TaskListRequestModel, TaskListRequestSortingModel, TaskQueryCloudRequestModel, TaskStatusFilter, TaskVariableCloud, UploadCloudWidgetComponent, UserPreferenceCloudService, UserTaskCloudButtonsComponent, UserTaskCloudComponent, VariableMapperService, WebSocketService, getDateCloudWidgetRange, getExpressionEvaluationEnabled$, materializeSubmissionValues, processCloudPresetsDefaultModel, provideCloudFormRenderer, provideCloudPreferences, provideScreen, radioButtonsSchema, resolveTaskRuntimeBundleFallback$ };
|
|
17112
17424
|
//# sourceMappingURL=adf-process-services-cloud.mjs.map
|