@netgrif/components-core 6.4.0-beta.2 → 6.4.0-beta.4

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.
Files changed (42) hide show
  1. package/esm2020/assets/i18n/de.json +5 -1
  2. package/esm2020/assets/i18n/en.json +5 -1
  3. package/esm2020/assets/i18n/sk.json +5 -1
  4. package/esm2020/lib/header/abstract-header.component.mjs +22 -7
  5. package/esm2020/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.mjs +1 -10
  6. package/esm2020/lib/navigation/model/group-navigation-constants.mjs +116 -35
  7. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +152 -107
  8. package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +3 -126
  9. package/esm2020/lib/navigation/service/uri.service.mjs +3 -3
  10. package/esm2020/lib/navigation/utility/filter-extraction.service.mjs +33 -9
  11. package/esm2020/lib/navigation/utility/navigation-item-task-utility-methods.mjs +38 -4
  12. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +5 -2
  13. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.mjs +5 -2
  14. package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +7 -5
  15. package/esm2020/lib/side-menu/content-components/import-net/abstract-import-net.component.mjs +10 -7
  16. package/esm2020/lib/side-menu/content-components/new-case/model/new-case-injection-data.mjs +1 -1
  17. package/esm2020/lib/utility/navigation-item-default-headers-factory.mjs +22 -0
  18. package/esm2020/lib/utility/public-api.mjs +2 -1
  19. package/esm2020/lib/view/case-view/service/case-view-service.mjs +10 -7
  20. package/fesm2015/netgrif-components-core.mjs +1095 -980
  21. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  22. package/fesm2020/netgrif-components-core.mjs +1089 -976
  23. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  24. package/lib/header/abstract-header.component.d.ts +7 -2
  25. package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +0 -1
  26. package/lib/navigation/model/group-navigation-constants.d.ts +115 -34
  27. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +38 -28
  28. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +2 -27
  29. package/lib/navigation/utility/filter-extraction.service.d.ts +9 -2
  30. package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +16 -1
  31. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +2 -1
  32. package/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.d.ts +2 -1
  33. package/lib/routing/routing-builder/routing-builder.service.d.ts +2 -0
  34. package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +3 -1
  35. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +2 -1
  36. package/lib/utility/navigation-item-default-headers-factory.d.ts +3 -0
  37. package/lib/utility/public-api.d.ts +1 -0
  38. package/lib/view/case-view/service/case-view-service.d.ts +2 -2
  39. package/package.json +1 -1
  40. package/src/assets/i18n/de.json +5 -1
  41. package/src/assets/i18n/en.json +5 -1
  42. package/src/assets/i18n/sk.json +5 -1
@@ -1209,7 +1209,11 @@ var publicView$2 = {
1209
1209
  errorCreate: "Error while creating case "
1210
1210
  };
1211
1211
  var dynamicNavigation$2 = {
1212
- couldNotResolveView: "An error has occurred during the view resolution process. The view could not be displayed"
1212
+ couldNotResolveView: "An error has occurred during the view resolution process. The view could not be displayed",
1213
+ filterNotFound: "This view has no filter",
1214
+ loadMoreItems: "More",
1215
+ ascending: "Ascending",
1216
+ descending: "Descending"
1213
1217
  };
1214
1218
  var impersonation$2 = {
1215
1219
  user: {
@@ -1726,7 +1730,11 @@ var publicView$1 = {
1726
1730
  errorCreate: "Chyba pri vytváraní prípadu "
1727
1731
  };
1728
1732
  var dynamicNavigation$1 = {
1729
- couldNotResolveView: "Počas načítania zobrazenia sa vyskytla chyba. Zobrazenie nie je možné zobraziť"
1733
+ couldNotResolveView: "Počas načítania zobrazenia sa vyskytla chyba. Zobrazenie nie je možné zobraziť",
1734
+ filterNotFound: "Toto zobrazenie neobsahuje filter",
1735
+ loadMoreItems: "Viac",
1736
+ ascending: "Vzostupne",
1737
+ descending: "Zostupne"
1730
1738
  };
1731
1739
  var impersonation$1 = {
1732
1740
  user: {
@@ -2243,7 +2251,11 @@ var publicView = {
2243
2251
  errorCreate: "Fehler beim Erstellen des Falles "
2244
2252
  };
2245
2253
  var dynamicNavigation = {
2246
- couldNotResolveView: "Ein Fehler ist aufgetreten während des Ansichtauflösungsprocess. Der Ansicht kann nicht angezeigt werden"
2254
+ couldNotResolveView: "Ein Fehler ist aufgetreten während des Ansichtauflösungsprocess. Der Ansicht kann nicht angezeigt werden",
2255
+ filterNotFound: "Diese Ansicht hat keinen Filter",
2256
+ loadMoreItems: "Mehr",
2257
+ ascending: "Aufsteigend",
2258
+ descending: "Absteigend"
2247
2259
  };
2248
2260
  var impersonation = {
2249
2261
  user: {
@@ -18373,7 +18385,7 @@ class CaseViewService extends AbstractSortableViewComponent {
18373
18385
  minWidth: '300px',
18374
18386
  panelClass: "dialog-responsive",
18375
18387
  data: {
18376
- allowedNets$: this.getNewCaseAllowedNets(),
18388
+ allowedNets$: this.getNewCaseAllowedNets(newCaseCreationConfiguration.blockNets),
18377
18389
  newCaseCreationConfiguration
18378
18390
  },
18379
18391
  });
@@ -18387,9 +18399,12 @@ class CaseViewService extends AbstractSortableViewComponent {
18387
18399
  });
18388
18400
  return myCase.asObservable();
18389
18401
  }
18390
- createDefaultNewCase() {
18402
+ createDefaultNewCase(newCaseCreationConfiguration = {
18403
+ enableCaseTitle: true,
18404
+ isCaseTitleRequired: true
18405
+ }) {
18391
18406
  const myCase = new Subject();
18392
- this.getNewCaseAllowedNets().subscribe((nets) => {
18407
+ this.getNewCaseAllowedNets(newCaseCreationConfiguration.blockNets).subscribe((nets) => {
18393
18408
  this._caseResourceService.createCase({
18394
18409
  title: null,
18395
18410
  color: 'panel-primary-icon',
@@ -18404,13 +18419,13 @@ class CaseViewService extends AbstractSortableViewComponent {
18404
18419
  });
18405
18420
  return myCase;
18406
18421
  }
18407
- getNewCaseAllowedNets() {
18422
+ getNewCaseAllowedNets(blockNets = []) {
18408
18423
  if (this._newCaseConfiguration.useCachedProcesses) {
18409
- return this._allowedNetsService.allowedNets$.pipe(map(net => net.filter(n => this._permissionService.hasNetPermission(PermissionType.CREATE, n))));
18424
+ return this._allowedNetsService.allowedNets$.pipe(map(net => net.filter(n => blockNets.indexOf(n.identifier) == -1)), map(net => net.filter(n => this._permissionService.hasNetPermission(PermissionType.CREATE, n))));
18410
18425
  }
18411
18426
  else {
18412
18427
  return this._allowedNetsService.allowedNets$.pipe(switchMap(allowedNets => {
18413
- return this._processService.getNetReferences(allowedNets.map(net => net.identifier)).pipe(map(net => net.filter(n => this._permissionService.hasNetPermission(PermissionType.CREATE, n))));
18428
+ return this._processService.getNetReferences(allowedNets.map(net => net.identifier)).pipe(map(net => net.filter(n => blockNets.indexOf(n.identifier) == -1)), map(net => net.filter(n => this._permissionService.hasNetPermission(PermissionType.CREATE, n))));
18414
18429
  }));
18415
18430
  }
18416
18431
  }
@@ -20028,6 +20043,7 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
20028
20043
  this.responsiveBody = true;
20029
20044
  this.preventCollapse = false;
20030
20045
  this.hidePanelHeader = false;
20046
+ this.showMoreMenu = true;
20031
20047
  this.thisContext = {
20032
20048
  canAssign: () => this.canAssign(),
20033
20049
  assign: () => this.assign(),
@@ -20296,7 +20312,7 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
20296
20312
  }
20297
20313
  }
20298
20314
  AbstractTaskPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskPanelComponent, deps: [{ token: TaskContentService }, { token: LoggerService }, { token: TaskViewService }, { token: PaperViewService }, { token: TaskEventService }, { token: AssignTaskService }, { token: DelegateTaskService }, { token: CancelTaskService }, { token: FinishTaskService }, { token: TaskRequestStateService }, { token: TaskDataService }, { token: AssignPolicyService }, { token: FinishPolicyService }, { token: CallChainService }, { token: SubjectTaskOperations }, { token: NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, optional: true }, { token: i1$2.TranslateService }, { token: i5.CurrencyPipe }, { token: ChangedFieldsService }, { token: PermissionService }, { token: OverflowService, optional: true }, { token: NAE_TASK_FORCE_OPEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
20299
- AbstractTaskPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractTaskPanelComponent, selector: "ncc-abstract-legal-notice", inputs: { taskListVirtualScroll: "taskListVirtualScroll", panelContentComponent: "panelContentComponent", selectedHeaders$: "selectedHeaders$", first: "first", last: "last", responsiveBody: "responsiveBody", preventCollapse: "preventCollapse", hidePanelHeader: "hidePanelHeader", actionButtonTemplates: "actionButtonTemplates", actionRowJustifyContent: "actionRowJustifyContent", forceLoadDataOnOpen: "forceLoadDataOnOpen", textEllipsis: "textEllipsis", taskPanelData: "taskPanelData" }, outputs: { taskEvent: "taskEvent", panelRefOutput: "panelRefOutput" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
20315
+ AbstractTaskPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractTaskPanelComponent, selector: "ncc-abstract-legal-notice", inputs: { taskListVirtualScroll: "taskListVirtualScroll", panelContentComponent: "panelContentComponent", selectedHeaders$: "selectedHeaders$", first: "first", last: "last", responsiveBody: "responsiveBody", preventCollapse: "preventCollapse", hidePanelHeader: "hidePanelHeader", actionButtonTemplates: "actionButtonTemplates", actionRowJustifyContent: "actionRowJustifyContent", showMoreMenu: "showMoreMenu", forceLoadDataOnOpen: "forceLoadDataOnOpen", textEllipsis: "textEllipsis", taskPanelData: "taskPanelData" }, outputs: { taskEvent: "taskEvent", panelRefOutput: "panelRefOutput" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
20300
20316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskPanelComponent, decorators: [{
20301
20317
  type: Component,
20302
20318
  args: [{
@@ -20337,6 +20353,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20337
20353
  type: Input
20338
20354
  }], actionRowJustifyContent: [{
20339
20355
  type: Input
20356
+ }], showMoreMenu: [{
20357
+ type: Input
20340
20358
  }], forceLoadDataOnOpen: [{
20341
20359
  type: Input
20342
20360
  }], textEllipsis: [{
@@ -20404,6 +20422,7 @@ class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent {
20404
20422
  this.responsiveBody = true;
20405
20423
  this.forceLoadDataOnOpen = false;
20406
20424
  this.textEllipsis = false;
20425
+ this.showMoreMenu = true;
20407
20426
  this.taskEvent = new EventEmitter();
20408
20427
  this._taskPanelRefs = new Map();
20409
20428
  this._unsubscribe$ = new Subject();
@@ -20451,7 +20470,7 @@ class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent {
20451
20470
  }
20452
20471
  }
20453
20472
  AbstractDefaultTaskListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractDefaultTaskListComponent, deps: [{ token: TaskViewService }, { token: LoggerService }, { token: NAE_TAB_DATA, optional: true }, { token: i2$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
20454
- AbstractDefaultTaskListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractDefaultTaskListComponent, selector: "ncc-abstract-default-task-list", inputs: { loading$: "loading$", selectedHeaders$: "selectedHeaders$", responsiveBody: "responsiveBody", forceLoadDataOnOpen: "forceLoadDataOnOpen", textEllipsis: "textEllipsis", allowMultiOpen: "allowMultiOpen" }, outputs: { taskEvent: "taskEvent" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
20473
+ AbstractDefaultTaskListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractDefaultTaskListComponent, selector: "ncc-abstract-default-task-list", inputs: { loading$: "loading$", selectedHeaders$: "selectedHeaders$", responsiveBody: "responsiveBody", forceLoadDataOnOpen: "forceLoadDataOnOpen", textEllipsis: "textEllipsis", showMoreMenu: "showMoreMenu", allowMultiOpen: "allowMultiOpen" }, outputs: { taskEvent: "taskEvent" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
20455
20474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractDefaultTaskListComponent, decorators: [{
20456
20475
  type: Component,
20457
20476
  args: [{
@@ -20475,6 +20494,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20475
20494
  type: Input
20476
20495
  }], textEllipsis: [{
20477
20496
  type: Input
20497
+ }], showMoreMenu: [{
20498
+ type: Input
20478
20499
  }], allowMultiOpen: [{
20479
20500
  type: Input
20480
20501
  }], taskEvent: [{
@@ -22022,12 +22043,420 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22022
22043
  type: Input
22023
22044
  }] } });
22024
22045
 
22046
+ /**
22047
+ * Case search request page size
22048
+ */
22049
+ const NAE_URI_NODE_CASES_PAGE_SIZE = new InjectionToken('NaeUriNodeCasesPageSize');
22050
+
22051
+ /**
22052
+ * Service for accessing backend resource to resolve URI objects
22053
+ * */
22054
+ class UriResourceService extends AbstractResourceService {
22055
+ constructor(provider, configService) {
22056
+ super('petrinet', provider, configService);
22057
+ }
22058
+ getRoot() {
22059
+ return this._resourceProvider.get$('uri/root', this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
22060
+ }
22061
+ getByLevel(level) {
22062
+ return this._resourceProvider.get$('uri/level/' + level, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
22063
+ }
22064
+ getNodesByParent(parentId) {
22065
+ return this._resourceProvider.get$('uri/parent/' + parentId, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
22066
+ }
22067
+ getNodeByUri(uriPath) {
22068
+ return this._resourceProvider.get$('uri/' + btoa(uriPath), this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
22069
+ }
22070
+ }
22071
+ UriResourceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, deps: [{ token: ResourceProvider }, { token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
22072
+ UriResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, providedIn: 'root' });
22073
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, decorators: [{
22074
+ type: Injectable,
22075
+ args: [{
22076
+ providedIn: 'root'
22077
+ }]
22078
+ }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: ConfigurationService }]; } });
22079
+
22080
+ /**
22081
+ * This service allows access to information about the groups of the currently logged user.
22082
+ *
22083
+ * If no user is logged an empty array is provided.
22084
+ *
22085
+ * If a user can be owner of at most one group, this service provides utility methods to access this group directly.
22086
+ *
22087
+ * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
22088
+ */
22089
+ class NextGroupService {
22090
+ constructor(_userService, _caseResourceService) {
22091
+ this._userService = _userService;
22092
+ this._caseResourceService = _caseResourceService;
22093
+ this._ownerGroups$ = new BehaviorSubject([]);
22094
+ this._memberGroups$ = new BehaviorSubject([]);
22095
+ this._userSub = this._userService.user$.pipe(switchMap(user => {
22096
+ if (!user || user.id === '') {
22097
+ return of([]);
22098
+ }
22099
+ const params = new HttpParams();
22100
+ params.set(PaginationParams.PAGE_SIZE, `${user.nextGroups.length}`);
22101
+ return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery({ stringId: user.nextGroups }), params)
22102
+ .pipe(map(page => page.content ? page.content : []), map(groups => groups.filter(group => group.author.fullName !== 'application engine')));
22103
+ })).subscribe(groups => {
22104
+ const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email);
22105
+ this._ownerGroups$.next(ownerGroups);
22106
+ this._memberGroups$.next(groups);
22107
+ });
22108
+ }
22109
+ ngOnDestroy() {
22110
+ this._userSub.unsubscribe();
22111
+ this._memberGroups$.complete();
22112
+ this._ownerGroups$.complete();
22113
+ }
22114
+ /**
22115
+ * @returns an Observable of all the groups the currently logged user is a member of
22116
+ */
22117
+ get memberGroups$() {
22118
+ return this._memberGroups$.asObservable();
22119
+ }
22120
+ /**
22121
+ * @returns an Observable of all the groups the currently logged user is an owner of
22122
+ */
22123
+ get ownerGroups$() {
22124
+ return this._ownerGroups$.asObservable();
22125
+ }
22126
+ /**
22127
+ * @returns an Array of all the groups the currently logged user is a member of
22128
+ */
22129
+ get memberGroups() {
22130
+ return this._memberGroups$.getValue();
22131
+ }
22132
+ /**
22133
+ * @returns an Array of all the groups the currently logged user is an owner of
22134
+ */
22135
+ get ownerGroups() {
22136
+ return this._ownerGroups$.getValue();
22137
+ }
22138
+ /**
22139
+ * @returns an Observable containing the first element of the [ownerGroups$]{@link NextGroupService#ownerGroups$} observable,
22140
+ * or `undefined` if the contained array is empty
22141
+ */
22142
+ get firstOwnerGroup$() {
22143
+ return this._ownerGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
22144
+ }
22145
+ /**
22146
+ * @returns the first element of the [ownerGroups]{@link NextGroupService#ownerGroups} array, or `undefined` if the array is empty
22147
+ */
22148
+ get firstOwnerGroup() {
22149
+ const ownerGroups = this.ownerGroups;
22150
+ return ownerGroups.length > 0 ? ownerGroups[0] : undefined;
22151
+ }
22152
+ /**
22153
+ * @deprecated in NAE 5.6.0 - use [ownerGroups]{@link NextGroupService#ownerGroups} instead
22154
+ */
22155
+ get groupOfUser() {
22156
+ return this.ownerGroups;
22157
+ }
22158
+ }
22159
+ NextGroupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, deps: [{ token: UserService }, { token: CaseResourceService }], target: i0.ɵɵFactoryTarget.Injectable });
22160
+ NextGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, providedIn: 'root' });
22161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, decorators: [{
22162
+ type: Injectable,
22163
+ args: [{
22164
+ providedIn: 'root'
22165
+ }]
22166
+ }], ctorParameters: function () { return [{ type: UserService }, { type: CaseResourceService }]; } });
22167
+
22168
+ /**
22169
+ * This service to the groups that are "active" for the logged user.
22170
+ *
22171
+ * The meaning of "active" can wary from application to application. And this service provides the utility to track this state.
22172
+ *
22173
+ * The active groups are assumed to be a subset of the groups the logged user is a member of,
22174
+ * but this assumption is not enforced nor checked.
22175
+ *
22176
+ * If at most one group can be active at a time, this service provides utility methods to access this group directly.
22177
+ *
22178
+ * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
22179
+ *
22180
+ * In the default implementation the initially active groups are all the groups the logged user is a member of.
22181
+ */
22182
+ class ActiveGroupService {
22183
+ constructor(_groupService) {
22184
+ this._groupService = _groupService;
22185
+ this._activeGroups$ = new BehaviorSubject([]);
22186
+ this._groupSub = this._groupService.memberGroups$.subscribe(groups => {
22187
+ this._activeGroups$.next(groups);
22188
+ });
22189
+ }
22190
+ ngOnDestroy() {
22191
+ this._groupSub.unsubscribe();
22192
+ this._activeGroups$.complete();
22193
+ }
22194
+ /**
22195
+ * In the default implementation this stream copies the values of the [memberGroups$]{@link NextGroupService#memberGroups$} stream
22196
+ * of the {@link NextGroupService}. Whenever the copies stream emits, the underlying stream in this class emits the same value.
22197
+ *
22198
+ * @returns an Observable of all the groups that are currently active
22199
+ */
22200
+ get activeGroups$() {
22201
+ return this._activeGroups$.asObservable();
22202
+ }
22203
+ get activeGroups() {
22204
+ return this._activeGroups$.getValue();
22205
+ }
22206
+ set activeGroups(activeGroups) {
22207
+ this._activeGroups$.next(activeGroups);
22208
+ }
22209
+ /**
22210
+ * @returns an Observable containing the first element of the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable,
22211
+ * or `undefined` if the contained array is empty
22212
+ */
22213
+ get activeGroup$() {
22214
+ return this.activeGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
22215
+ }
22216
+ /**
22217
+ * @returns the first element of the [activeGroups]{@link ActiveGroupService#activeGroups} array, or `undefined` if the array is empty
22218
+ */
22219
+ get activeGroup() {
22220
+ const activeGroups = this.activeGroups;
22221
+ return activeGroups.length > 0 ? activeGroups[0] : undefined;
22222
+ }
22223
+ /**
22224
+ * Emits a new array into the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable, that contains only
22225
+ * the provided {@link Case} object. If `undefined` is passed as argument, an empty array will be pushed into the observable.
22226
+ * @param activeGroup the new active group case reference
22227
+ */
22228
+ set activeGroup(activeGroup) {
22229
+ if (activeGroup === undefined) {
22230
+ this._activeGroups$.next([]);
22231
+ }
22232
+ else {
22233
+ this._activeGroups$.next([activeGroup]);
22234
+ }
22235
+ }
22236
+ }
22237
+ ActiveGroupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, deps: [{ token: NextGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
22238
+ ActiveGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, providedIn: 'root' });
22239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, decorators: [{
22240
+ type: Injectable,
22241
+ args: [{
22242
+ providedIn: 'root'
22243
+ }]
22244
+ }], ctorParameters: function () { return [{ type: NextGroupService }]; } });
22245
+
22246
+ /**
22247
+ * Service for managing URIs
22248
+ * */
22249
+ class UriService {
22250
+ constructor(_logger, _resourceService, _caseResourceService, _activeGroupService, pageSize) {
22251
+ this._logger = _logger;
22252
+ this._resourceService = _resourceService;
22253
+ this._caseResourceService = _caseResourceService;
22254
+ this._activeGroupService = _activeGroupService;
22255
+ this.pageSize = pageSize;
22256
+ if (!pageSize) {
22257
+ this.pageSize = 20;
22258
+ }
22259
+ if (typeof this.pageSize === 'string') {
22260
+ this.pageSize = parseInt(this.pageSize);
22261
+ }
22262
+ this._rootLoading$ = new LoadingEmitter();
22263
+ this._parentLoading$ = new LoadingEmitter();
22264
+ this._activeNode$ = new BehaviorSubject(undefined);
22265
+ this.loadRoot();
22266
+ }
22267
+ ngOnDestroy() {
22268
+ this._rootLoading$.complete();
22269
+ this._parentLoading$.complete();
22270
+ this._activeNode$.complete();
22271
+ }
22272
+ get root() {
22273
+ return this._rootNode;
22274
+ }
22275
+ get rootLoaded$() {
22276
+ return this._rootLoading$;
22277
+ }
22278
+ isRoot(node) {
22279
+ return node.id === this._rootNode.id && node.uriPath === this._rootNode.uriPath;
22280
+ }
22281
+ get activeNode() {
22282
+ return this._activeNode$.getValue();
22283
+ }
22284
+ set activeNode(node) {
22285
+ if (node.parentId && !node.parent) {
22286
+ if (node.parentId === this._rootNode.id) {
22287
+ node.parent = this._rootNode;
22288
+ }
22289
+ else {
22290
+ this._parentLoading$.on();
22291
+ this.getNodeByPath(this.resolveParentPath(node)).subscribe(n => {
22292
+ node.parent = !n ? this._rootNode : n;
22293
+ this._parentLoading$.off();
22294
+ }, error => {
22295
+ this._logger.error(error);
22296
+ this._parentLoading$.off();
22297
+ });
22298
+ }
22299
+ }
22300
+ this._activeNode$.next(node);
22301
+ }
22302
+ get activeNode$() {
22303
+ return this._activeNode$;
22304
+ }
22305
+ get parentNodeLoading$() {
22306
+ return this._parentLoading$;
22307
+ }
22308
+ /**
22309
+ * Loads root ID into variable.
22310
+ * When root node is loaded and active node is not set yet the root node is set as active node
22311
+ * */
22312
+ loadRoot() {
22313
+ this._rootLoading$.on();
22314
+ this._resourceService.getRoot().subscribe(node => {
22315
+ if (!!node) {
22316
+ this._rootNode = node;
22317
+ if (!this.activeNode) {
22318
+ this.activeNode = this._rootNode;
22319
+ }
22320
+ }
22321
+ this._rootLoading$.off();
22322
+ }, error => {
22323
+ this._logger.error(error);
22324
+ this._rootLoading$.off();
22325
+ });
22326
+ }
22327
+ reset() {
22328
+ this.activeNode = this._rootNode;
22329
+ return this._rootNode;
22330
+ }
22331
+ /**
22332
+ * Get uri node by uri path.
22333
+ * @param path
22334
+ */
22335
+ getNodeByPath(path) {
22336
+ return this._resourceService.getNodeByUri(path).pipe(map(n => this.capitalizeName(n)));
22337
+ }
22338
+ /**
22339
+ * Get child nodes of provides node.
22340
+ * @param node parent node
22341
+ */
22342
+ getChildNodes(node) {
22343
+ if (!node)
22344
+ node = this.activeNode;
22345
+ return this._resourceService.getNodesByParent(node.id).pipe(map(nodes => {
22346
+ this.capitalizeNames(nodes);
22347
+ return nodes;
22348
+ }));
22349
+ }
22350
+ /**
22351
+ * Get cases under uri node
22352
+ * @param node parent node of cases
22353
+ * @param processIdentifiers optional search filter for process identifier to get only cases from the process
22354
+ * @param pageNumber optional parameter for load page on the index. Default value is 0 (the first page).
22355
+ * @param pageSize optional parameter for loaded page size. Defaults to value of injection token URI_NODE_CASES_PAGE_SIZE or to value "20".
22356
+ */
22357
+ getCasesOfNode(node, processIdentifiers, pageNumber = 0, pageSize = this.pageSize) {
22358
+ if (!node)
22359
+ node = this.activeNode;
22360
+ const searchBody = {
22361
+ uriNodeId: node.id,
22362
+ };
22363
+ if (!!processIdentifiers) {
22364
+ searchBody.process = processIdentifiers.map(id => ({ identifier: id }));
22365
+ }
22366
+ // TODO active group is broken a given the wrong id
22367
+ // if (!!this._activeGroupService.activeGroup) {
22368
+ // searchBody.data = {};
22369
+ // searchBody.data['parentId'] = this._activeGroupService.activeGroup.stringId;
22370
+ // }
22371
+ let httpParams = new HttpParams()
22372
+ .set(PaginationParams.PAGE_SIZE, pageSize)
22373
+ .set(PaginationParams.PAGE_NUMBER, pageNumber);
22374
+ return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery(searchBody), httpParams);
22375
+ }
22376
+ /**
22377
+ * Get siblings node of the provided node
22378
+ * @param node siblings node
22379
+ */
22380
+ getSiblingsOfNode(node) {
22381
+ if (!node)
22382
+ node = this.activeNode;
22383
+ return this._resourceService.getNodesByParent(node.parentId).pipe(map(nodes => {
22384
+ this.capitalizeNames(nodes);
22385
+ return nodes;
22386
+ }));
22387
+ }
22388
+ /**
22389
+ * Get nodes on the same uri level starting from 0. Root node is no 0 level.
22390
+ * @param level
22391
+ * @param parent optional parameter to filter nodes with common parent
22392
+ */
22393
+ getNodesOnLevel(level, parent) {
22394
+ if (level === 0)
22395
+ return of([this.root]);
22396
+ return this._resourceService.getByLevel(level).pipe(map(nodes => {
22397
+ const ns = !!(parent === null || parent === void 0 ? void 0 : parent.id) ? nodes.filter(n => n.parentId === parent.id) : nodes;
22398
+ this.capitalizeNames(ns);
22399
+ return ns;
22400
+ }));
22401
+ }
22402
+ resolveParentPath(node) {
22403
+ if (!node)
22404
+ node = this.activeNode;
22405
+ const lastDelimiter = node.uriPath.lastIndexOf('/');
22406
+ if (lastDelimiter === 0)
22407
+ return '/';
22408
+ return node.uriPath.substring(0, lastDelimiter);
22409
+ }
22410
+ splitNodePath(node) {
22411
+ return node === null || node === void 0 ? void 0 : node.uriPath.split('/').filter(s => s !== UriService.ROOT);
22412
+ }
22413
+ capitalizeNames(nodes) {
22414
+ if (!(nodes instanceof Array))
22415
+ return;
22416
+ nodes.forEach(n => this.capitalizeName(n));
22417
+ }
22418
+ /**
22419
+ * /netgrif/nae_system/processes/... => Netgrif -> Nae Systems -> Processes
22420
+ * @param node
22421
+ * @private
22422
+ */
22423
+ capitalizeName(node) {
22424
+ let parts = node.name.split('_');
22425
+ parts = parts.map(p => {
22426
+ if (p === undefined || p.length === 0)
22427
+ return;
22428
+ if (p.length === 1)
22429
+ return p.toUpperCase();
22430
+ return p.charAt(0).toUpperCase() + p.substring(1);
22431
+ });
22432
+ node.name = parts.join(' ');
22433
+ return node;
22434
+ }
22435
+ }
22436
+ UriService.ROOT = 'root';
22437
+ UriService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, deps: [{ token: LoggerService }, { token: UriResourceService }, { token: CaseResourceService }, { token: ActiveGroupService }, { token: NAE_URI_NODE_CASES_PAGE_SIZE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
22438
+ UriService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, providedIn: 'root' });
22439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, decorators: [{
22440
+ type: Injectable,
22441
+ args: [{
22442
+ providedIn: 'root',
22443
+ }]
22444
+ }], ctorParameters: function () {
22445
+ return [{ type: LoggerService }, { type: UriResourceService }, { type: CaseResourceService }, { type: ActiveGroupService }, { type: undefined, decorators: [{
22446
+ type: Optional
22447
+ }, {
22448
+ type: Inject,
22449
+ args: [NAE_URI_NODE_CASES_PAGE_SIZE]
22450
+ }] }];
22451
+ } });
22452
+
22025
22453
  class FileUploadModel {
22026
22454
  }
22027
22455
  class AbstractImportNetComponent {
22028
- constructor(_sideMenuControl, _petriNetResource, _log, _snackbar, _translate) {
22456
+ constructor(_sideMenuControl, _petriNetResource, _uriService, _log, _snackbar, _translate) {
22029
22457
  this._sideMenuControl = _sideMenuControl;
22030
22458
  this._petriNetResource = _petriNetResource;
22459
+ this._uriService = _uriService;
22031
22460
  this._log = _log;
22032
22461
  this._snackbar = _snackbar;
22033
22462
  this._translate = _translate;
@@ -22103,6 +22532,7 @@ class AbstractImportNetComponent {
22103
22532
  uploadFile(file) {
22104
22533
  const fileFormData = new FormData();
22105
22534
  fileFormData.append('file', file.data);
22535
+ fileFormData.append('uriNodeId', this._uriService.activeNode.id);
22106
22536
  fileFormData.append('meta', this.releaseTypeControl.value.toString().toUpperCase());
22107
22537
  file.inProgress = true;
22108
22538
  file.completed = false;
@@ -22140,7 +22570,7 @@ class AbstractImportNetComponent {
22140
22570
  });
22141
22571
  }
22142
22572
  }
22143
- AbstractImportNetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractImportNetComponent, deps: [{ token: SideMenuControl }, { token: PetriNetResourceService }, { token: LoggerService }, { token: SnackBarService }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
22573
+ AbstractImportNetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractImportNetComponent, deps: [{ token: SideMenuControl }, { token: PetriNetResourceService }, { token: UriService }, { token: LoggerService }, { token: SnackBarService }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
22144
22574
  AbstractImportNetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractImportNetComponent, selector: "ncc-abstract-import-net", ngImport: i0, template: '', isInline: true });
22145
22575
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractImportNetComponent, decorators: [{
22146
22576
  type: Component,
@@ -22148,7 +22578,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22148
22578
  selector: 'ncc-abstract-import-net',
22149
22579
  template: ''
22150
22580
  }]
22151
- }], ctorParameters: function () { return [{ type: SideMenuControl }, { type: PetriNetResourceService }, { type: LoggerService }, { type: SnackBarService }, { type: i1$2.TranslateService }]; } });
22581
+ }], ctorParameters: function () { return [{ type: SideMenuControl }, { type: PetriNetResourceService }, { type: UriService }, { type: LoggerService }, { type: SnackBarService }, { type: i1$2.TranslateService }]; } });
22152
22582
 
22153
22583
  class AbstractNewCaseComponent {
22154
22584
  constructor(_sideMenuControl, _formBuilder, _snackBarService, _caseResourceService, _hotkeysService, _translate) {
@@ -24813,14 +25243,16 @@ class AbstractHeaderComponent {
24813
25243
  this.DEFAULT_COLUMN_WIDTH = 220;
24814
25244
  this.INPUT_DEBOUNCE_TIME = 600;
24815
25245
  this.type = HeaderType.CASE;
24816
- this.hideEditMode = false;
25246
+ this.hideHeaderMenu = false;
25247
+ this.showEditButton = true;
25248
+ this.showSortButton = true;
25249
+ this.showSearchButton = true;
25250
+ this.showTableSection = true;
24817
25251
  this.headerModeEnum = HeaderMode;
24818
25252
  this.headerTypeEnum = HeaderType;
24819
25253
  this._initHeaderCount = undefined;
24820
25254
  this._initResponsiveHeaders = undefined;
24821
- (this._overflowService !== null) ?
24822
- this.initializeFormControls(true) :
24823
- this.initializeFormControls(false);
25255
+ this.initializeFormControls(this._overflowService !== null);
24824
25256
  }
24825
25257
  set maxHeaderColumns(count) {
24826
25258
  if (this.headerService) {
@@ -24841,6 +25273,11 @@ class AbstractHeaderComponent {
24841
25273
  this._initResponsiveHeaders = responsive;
24842
25274
  }
24843
25275
  }
25276
+ changeHeadersMode(mode, saveLastMode = true) {
25277
+ if (this.headerService) {
25278
+ this.headerService.changeMode(mode, saveLastMode);
25279
+ }
25280
+ }
24844
25281
  ngOnInit() {
24845
25282
  this.resolveHeaderService();
24846
25283
  this.initializedHeaderSearch();
@@ -24949,7 +25386,7 @@ class AbstractHeaderComponent {
24949
25386
  }
24950
25387
  }
24951
25388
  AbstractHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractHeaderComponent, deps: [{ token: i0.Injector }, { token: i1$2.TranslateService }, { token: OverflowService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
24952
- AbstractHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractHeaderComponent, selector: "ncc-abstract-header", inputs: { type: "type", hideEditMode: "hideEditMode", maxHeaderColumns: "maxHeaderColumns", responsiveHeaders: "responsiveHeaders" }, ngImport: i0, template: '', isInline: true });
25389
+ AbstractHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractHeaderComponent, selector: "ncc-abstract-header", inputs: { type: "type", hideHeaderMenu: "hideHeaderMenu", showEditButton: "showEditButton", showSortButton: "showSortButton", showSearchButton: "showSearchButton", showTableSection: "showTableSection", maxHeaderColumns: "maxHeaderColumns", responsiveHeaders: "responsiveHeaders" }, ngImport: i0, template: '', isInline: true });
24953
25390
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractHeaderComponent, decorators: [{
24954
25391
  type: Component,
24955
25392
  args: [{
@@ -24962,7 +25399,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24962
25399
  }] }];
24963
25400
  }, propDecorators: { type: [{
24964
25401
  type: Input
24965
- }], hideEditMode: [{
25402
+ }], hideHeaderMenu: [{
25403
+ type: Input
25404
+ }], showEditButton: [{
25405
+ type: Input
25406
+ }], showSortButton: [{
25407
+ type: Input
25408
+ }], showSearchButton: [{
25409
+ type: Input
25410
+ }], showTableSection: [{
24966
25411
  type: Input
24967
25412
  }], maxHeaderColumns: [{
24968
25413
  type: Input
@@ -25706,147 +26151,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
25706
26151
 
25707
26152
  /* COMPONENTS */
25708
26153
 
25709
- var GroupNavigationConstants;
25710
- (function (GroupNavigationConstants) {
25711
- /**
25712
- * Name of the component that indicates the position of the group specific navigation elements.
25713
- */
25714
- GroupNavigationConstants["GROUP_NAVIGATION_OUTLET"] = "groupNavigation";
25715
- /**
25716
- * Name of the router param that is used to provide information about the selected filter to the group navigation view component
25717
- */
25718
- GroupNavigationConstants["GROUP_NAVIGATION_ROUTER_PARAM"] = "filterCaseId";
25719
- /**
25720
- * Id of the transition that stores the group navigation menu data
25721
- */
25722
- GroupNavigationConstants["NAVIGATION_CONFIG_TRANSITION_ID"] = "navigationMenuConfig";
25723
- /**
25724
- * Id of the task ref field that holds the ids of the individual navigation item tasks
25725
- */
25726
- GroupNavigationConstants["NAVIGATION_ENTRIES_TASK_REF_FIELD_ID"] = "filter_tasks";
25727
- /**
25728
- * Suffix of the field id that contains the name of the navigation entry.
25729
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25730
- */
25731
- GroupNavigationConstants["NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX"] = "entry_name";
25732
- /**
25733
- * Suffix of the field id that contains the filter case id.
25734
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25735
- */
25736
- GroupNavigationConstants["NAVIGATION_FILTER_CASE_ID_FIELD_ID_SUFFIX"] = "filter_case_id";
25737
- /**
25738
- * Suffix of the field id that is the navigation entry marker.
25739
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25740
- */
25741
- GroupNavigationConstants["NAVIGATION_ENTRY_MARKER_FIELD_ID_SUFFIX"] = "entry_marker";
25742
- /**
25743
- * Suffix of the boolean field id that determines if the navigation entry defines an icon.
25744
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25745
- */
25746
- GroupNavigationConstants["NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX"] = "use_icon";
25747
- /**
25748
- * Suffix of the text field id that contains the id of the used material icon.
25749
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25750
- */
25751
- GroupNavigationConstants["NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX"] = "icon_name";
25752
- /**
25753
- * Suffix of the text field id that contains the IDs of roles that are able to view the navigation entry.
25754
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25755
- */
25756
- GroupNavigationConstants["NAVIGATION_ENTRY_ALLOWED_ROLES_FIELD_ID_SUFFIX"] = "allowed_roles";
25757
- /**
25758
- * Suffix of the text field id that contains the IDs of roles that are banned from viewing the navigation entry.
25759
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25760
- */
25761
- GroupNavigationConstants["NAVIGATION_ENTRY_BANNED_ROLES_FIELD_ID_SUFFIX"] = "banned_roles";
25762
- /**
25763
- * The number of datagroups in the navigation configuration task that correspond to a single navigation entry.
25764
- */
25765
- GroupNavigationConstants[GroupNavigationConstants["DATAGROUPS_PER_NAVIGATION_ENTRY"] = 2] = "DATAGROUPS_PER_NAVIGATION_ENTRY";
25766
- })(GroupNavigationConstants || (GroupNavigationConstants = {}));
25767
-
25768
- /**
25769
- * Forces a re-render of the tree backed by the datasource
25770
- */
25771
- function refreshTree(tree) {
25772
- const d = tree.data;
25773
- tree.data = null;
25774
- tree.data = d;
25775
- }
25776
-
25777
- /**
25778
- * Extracts the item name and item icon (if any) rom a section of the navigation item task data.
25779
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25780
- */
25781
- function extractIconAndTitle(dataSection) {
25782
- const result = { name: '' };
25783
- if (dataSection.length === 0) {
25784
- throw new Error('The provided task data does not belong to a Navigation menu item task. Icon and title cannot be extracted');
25785
- }
25786
- const nameField = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX);
25787
- if (nameField === undefined) {
25788
- throw new Error('Navigation entry name could not be resolved');
25789
- }
25790
- result.name = nameField.value;
25791
- const useIcon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX);
25792
- if (useIcon !== undefined && useIcon.value) {
25793
- const icon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX);
25794
- if (icon === undefined) {
25795
- this._log.error('Navigation entry icon could not be resolved, but is enabled. Icon was ignored');
25796
- }
25797
- else {
25798
- result.icon = icon.value;
25799
- }
25800
- }
25801
- return result;
25802
- }
25803
- /**
25804
- * Based on provided parameter extracts allowed or banned roles into an Array of strings from a section of the navigation item task data.
25805
- * Each item has format ROLE_IMPORT_ID:NET_IMPORT_ID
25806
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25807
- * @param roleFieldId ID of field containing banned or allowed role IDs
25808
- * @returns an Array of string values representing role IDs
25809
- */
25810
- function extractRoles(dataSection, roleFieldId) {
25811
- if (dataSection.length === 0) {
25812
- throw new Error('The provided task data does not belong to a Navigation menu item task. Role entries cannot be extracted');
25813
- }
25814
- const roleIds = getFieldFromDataGroups(dataSection, roleFieldId);
25815
- if (roleIds === undefined) {
25816
- throw new Error('Navigation entry role authorization field could not be resolved');
25817
- }
25818
- return roleIds.choices.map(choice => choice.key);
25819
- }
25820
- /**
25821
- * Extracts the data and creates a filter object from the navigation item task data.
25822
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25823
- */
25824
- function extractFilterFromData(dataSection) {
25825
- return extractFilterFromFilterField(extractFilterFieldFromData(dataSection));
25826
- }
25827
- /**
25828
- * Extracts the filter field from the navigation item task data.
25829
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25830
- * @returns The extracted {@link FilterField} or `undefined` if it could not be extracted.
25831
- */
25832
- function extractFilterFieldFromData(dataSection) {
25833
- const filterField = getFieldFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID);
25834
- if (filterField === undefined || !(filterField instanceof FilterField)) {
25835
- throw new Error(`Filter could not be extracted. The provided datagroups do not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'`);
25836
- }
25837
- return filterField;
25838
- }
25839
- /**
25840
- * @returns a {@link SimpleFilter} containing the filter stored in the provided {@link FilterField}.
25841
- * Throws an error if this is not possible.
25842
- */
25843
- function extractFilterFromFilterField(filterField) {
25844
- if (filterField === undefined || !(filterField instanceof FilterField)) {
25845
- throw new Error('Filter could not be resolved');
25846
- }
25847
- return SimpleFilter.fromQuery({ query: filterField.value }, filterField.filterMetadata.filterType);
25848
- }
25849
-
25850
26154
  class RoleGuardService {
25851
26155
  constructor(_redirectService, _userService, _configService, _log) {
25852
26156
  this._redirectService = _redirectService;
@@ -25983,94 +26287,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
25983
26287
  }]
25984
26288
  }], ctorParameters: function () { return [{ type: RedirectService }, { type: UserService }, { type: ConfigurationService }, { type: i2$3.Router }]; } });
25985
26289
 
25986
- /**
25987
- * This service allows access to information about the groups of the currently logged user.
25988
- *
25989
- * If no user is logged an empty array is provided.
25990
- *
25991
- * If a user can be owner of at most one group, this service provides utility methods to access this group directly.
25992
- *
25993
- * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
25994
- */
25995
- class NextGroupService {
25996
- constructor(_userService, _caseResourceService) {
25997
- this._userService = _userService;
25998
- this._caseResourceService = _caseResourceService;
25999
- this._ownerGroups$ = new BehaviorSubject([]);
26000
- this._memberGroups$ = new BehaviorSubject([]);
26001
- this._userSub = this._userService.user$.pipe(switchMap(user => {
26002
- if (!user || user.id === '') {
26003
- return of([]);
26004
- }
26005
- const params = new HttpParams();
26006
- params.set(PaginationParams.PAGE_SIZE, `${user.nextGroups.length}`);
26007
- return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery({ stringId: user.nextGroups }), params)
26008
- .pipe(map(page => page.content ? page.content : []), map(groups => groups.filter(group => group.author.fullName !== 'application engine')));
26009
- })).subscribe(groups => {
26010
- const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email);
26011
- this._ownerGroups$.next(ownerGroups);
26012
- this._memberGroups$.next(groups);
26013
- });
26014
- }
26015
- ngOnDestroy() {
26016
- this._userSub.unsubscribe();
26017
- this._memberGroups$.complete();
26018
- this._ownerGroups$.complete();
26019
- }
26020
- /**
26021
- * @returns an Observable of all the groups the currently logged user is a member of
26022
- */
26023
- get memberGroups$() {
26024
- return this._memberGroups$.asObservable();
26025
- }
26026
- /**
26027
- * @returns an Observable of all the groups the currently logged user is an owner of
26028
- */
26029
- get ownerGroups$() {
26030
- return this._ownerGroups$.asObservable();
26031
- }
26032
- /**
26033
- * @returns an Array of all the groups the currently logged user is a member of
26034
- */
26035
- get memberGroups() {
26036
- return this._memberGroups$.getValue();
26037
- }
26038
- /**
26039
- * @returns an Array of all the groups the currently logged user is an owner of
26040
- */
26041
- get ownerGroups() {
26042
- return this._ownerGroups$.getValue();
26043
- }
26044
- /**
26045
- * @returns an Observable containing the first element of the [ownerGroups$]{@link NextGroupService#ownerGroups$} observable,
26046
- * or `undefined` if the contained array is empty
26047
- */
26048
- get firstOwnerGroup$() {
26049
- return this._ownerGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
26050
- }
26051
- /**
26052
- * @returns the first element of the [ownerGroups]{@link NextGroupService#ownerGroups} array, or `undefined` if the array is empty
26053
- */
26054
- get firstOwnerGroup() {
26055
- const ownerGroups = this.ownerGroups;
26056
- return ownerGroups.length > 0 ? ownerGroups[0] : undefined;
26057
- }
26058
- /**
26059
- * @deprecated in NAE 5.6.0 - use [ownerGroups]{@link NextGroupService#ownerGroups} instead
26060
- */
26061
- get groupOfUser() {
26062
- return this.ownerGroups;
26063
- }
26064
- }
26065
- NextGroupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, deps: [{ token: UserService }, { token: CaseResourceService }], target: i0.ɵɵFactoryTarget.Injectable });
26066
- NextGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, providedIn: 'root' });
26067
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, decorators: [{
26068
- type: Injectable,
26069
- args: [{
26070
- providedIn: 'root'
26071
- }]
26072
- }], ctorParameters: function () { return [{ type: UserService }, { type: CaseResourceService }]; } });
26073
-
26074
26290
  class GroupGuardService {
26075
26291
  constructor(_redirectService, _userService, _nextGroupService, _configService, _log) {
26076
26292
  this._redirectService = _redirectService;
@@ -26180,84 +26396,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
26180
26396
  }]
26181
26397
  }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: UserService }, { type: RoleGuardService }, { type: AuthorityGuardService }, { type: GroupGuardService }]; } });
26182
26398
 
26183
- /**
26184
- * This service to the groups that are "active" for the logged user.
26185
- *
26186
- * The meaning of "active" can wary from application to application. And this service provides the utility to track this state.
26187
- *
26188
- * The active groups are assumed to be a subset of the groups the logged user is a member of,
26189
- * but this assumption is not enforced nor checked.
26190
- *
26191
- * If at most one group can be active at a time, this service provides utility methods to access this group directly.
26192
- *
26193
- * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
26194
- *
26195
- * In the default implementation the initially active groups are all the groups the logged user is a member of.
26196
- */
26197
- class ActiveGroupService {
26198
- constructor(_groupService) {
26199
- this._groupService = _groupService;
26200
- this._activeGroups$ = new BehaviorSubject([]);
26201
- this._groupSub = this._groupService.memberGroups$.subscribe(groups => {
26202
- this._activeGroups$.next(groups);
26203
- });
26204
- }
26205
- ngOnDestroy() {
26206
- this._groupSub.unsubscribe();
26207
- this._activeGroups$.complete();
26208
- }
26209
- /**
26210
- * In the default implementation this stream copies the values of the [memberGroups$]{@link NextGroupService#memberGroups$} stream
26211
- * of the {@link NextGroupService}. Whenever the copies stream emits, the underlying stream in this class emits the same value.
26212
- *
26213
- * @returns an Observable of all the groups that are currently active
26214
- */
26215
- get activeGroups$() {
26216
- return this._activeGroups$.asObservable();
26217
- }
26218
- get activeGroups() {
26219
- return this._activeGroups$.getValue();
26220
- }
26221
- set activeGroups(activeGroups) {
26222
- this._activeGroups$.next(activeGroups);
26223
- }
26224
- /**
26225
- * @returns an Observable containing the first element of the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable,
26226
- * or `undefined` if the contained array is empty
26227
- */
26228
- get activeGroup$() {
26229
- return this.activeGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
26230
- }
26231
- /**
26232
- * @returns the first element of the [activeGroups]{@link ActiveGroupService#activeGroups} array, or `undefined` if the array is empty
26233
- */
26234
- get activeGroup() {
26235
- const activeGroups = this.activeGroups;
26236
- return activeGroups.length > 0 ? activeGroups[0] : undefined;
26237
- }
26238
- /**
26239
- * Emits a new array into the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable, that contains only
26240
- * the provided {@link Case} object. If `undefined` is passed as argument, an empty array will be pushed into the observable.
26241
- * @param activeGroup the new active group case reference
26242
- */
26243
- set activeGroup(activeGroup) {
26244
- if (activeGroup === undefined) {
26245
- this._activeGroups$.next([]);
26246
- }
26247
- else {
26248
- this._activeGroups$.next([activeGroup]);
26249
- }
26250
- }
26251
- }
26252
- ActiveGroupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, deps: [{ token: NextGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
26253
- ActiveGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, providedIn: 'root' });
26254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, decorators: [{
26255
- type: Injectable,
26256
- args: [{
26257
- providedIn: 'root'
26258
- }]
26259
- }], ctorParameters: function () { return [{ type: NextGroupService }]; } });
26260
-
26261
26399
  class DynamicNavigationRouteProviderService {
26262
26400
  constructor(_config) {
26263
26401
  this._config = _config;
@@ -26298,10 +26436,8 @@ class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerC
26298
26436
  this._taskResourceService = _taskResourceService;
26299
26437
  this._languageService = _languageService;
26300
26438
  this._navigationRouteProvider = _navigationRouteProvider;
26301
- this._groupNavNodesCount = 0;
26302
26439
  this.treeControl = new NestedTreeControl(node => node.children);
26303
26440
  this.dataSource = new MatTreeNestedDataSource();
26304
- this._groupNavigationConfig = this._config.getConfigurationSubtree(['services', 'groupNavigation']);
26305
26441
  this.dataSource.data = this.resolveNavigationNodes(_config.getConfigurationSubtree(['views']), '');
26306
26442
  this.resolveLevels(this.dataSource.data);
26307
26443
  this._reloadNavigation = new ReplaySubject(1);
@@ -26368,19 +26504,9 @@ class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerC
26368
26504
  if (!views || Object.keys(views).length === 0) {
26369
26505
  return null;
26370
26506
  }
26371
- let groupNavigationGenerated = false;
26372
26507
  const nodes = [];
26373
26508
  Object.keys(views).forEach((viewKey) => {
26374
26509
  const view = views[viewKey];
26375
- if (!groupNavigationGenerated && this.isGroupNavigationNode(view)) {
26376
- groupNavigationGenerated = true;
26377
- const insertPosition = (ancestorNodeContainer !== null && ancestorNodeContainer !== void 0 ? ancestorNodeContainer : nodes).length;
26378
- this._subLangChange = this._languageService.getLangChange$().subscribe(() => {
26379
- this.loadGroupNavigationNodes(insertPosition, ancestorNodeContainer !== null && ancestorNodeContainer !== void 0 ? ancestorNodeContainer : nodes);
26380
- });
26381
- this.loadGroupNavigationNodes(insertPosition, ancestorNodeContainer !== null && ancestorNodeContainer !== void 0 ? ancestorNodeContainer : nodes);
26382
- return; // continue
26383
- }
26384
26510
  if (!this.hasNavigation(view) && !this.hasSubRoutes(view)) {
26385
26511
  return; // continue
26386
26512
  }
@@ -26486,112 +26612,6 @@ class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerC
26486
26612
  }
26487
26613
  this.resolveLevels(this.dataSource.data);
26488
26614
  }
26489
- /**
26490
- * @returns `true` if the layout of the provided {@link View} node's name indicates it is a
26491
- * [group navigation outlet]{@link GroupNavigationConstants#GROUP_NAVIGATION_OUTLET}. Returns `false` otherwise.
26492
- */
26493
- isGroupNavigationNode(view) {
26494
- var _a;
26495
- return ((_a = view === null || view === void 0 ? void 0 : view.layout) === null || _a === void 0 ? void 0 : _a.name) === GroupNavigationConstants.GROUP_NAVIGATION_OUTLET;
26496
- }
26497
- /**
26498
- * Forces a reload of the group navigation nodes.
26499
- * @param insertPosition the position in the container where group navigation nodes reside
26500
- * @param nodeContainer the node container that contains the group navigation nodes
26501
- * (can be an inner node of the navigation tree or its root)
26502
- */
26503
- loadGroupNavigationNodes(insertPosition, nodeContainer) {
26504
- if (this._subGroupResolution !== undefined && !this._subGroupResolution.closed) {
26505
- this._subGroupResolution.unsubscribe();
26506
- }
26507
- this._subGroupResolution = this.generateGroupNavigationNodes().pipe(take(1)).subscribe(groupNavNodes => {
26508
- nodeContainer.splice(insertPosition, this._groupNavNodesCount, ...groupNavNodes);
26509
- this._groupNavNodesCount = groupNavNodes.length;
26510
- refreshTree(this.dataSource);
26511
- });
26512
- }
26513
- generateGroupNavigationNodes() {
26514
- return forkJoin(this._activeGroupService.activeGroups.map(groupCase => {
26515
- return this._taskResourceService.searchTask(SimpleFilter.fromTaskQuery({
26516
- case: { id: groupCase.stringId },
26517
- transitionId: GroupNavigationConstants.NAVIGATION_CONFIG_TRANSITION_ID
26518
- })).pipe(map(taskPage => {
26519
- if (hasContent(taskPage)) {
26520
- return this._taskResourceService.getData(taskPage.content[0].stringId);
26521
- }
26522
- else {
26523
- this._log.error('Group navigation configuration task was not found.'
26524
- + ' Navigation for this group cannot be constructed.');
26525
- return of([]);
26526
- }
26527
- }), concatMap(o => o));
26528
- })).pipe(map((navigationConfigurations) => {
26529
- const result = [];
26530
- for (const navConfig of navigationConfigurations) {
26531
- result.push(...this.convertDatagroupsToNavEntries(navConfig));
26532
- }
26533
- return result;
26534
- }));
26535
- }
26536
- convertDatagroupsToNavEntries(navConfigDatagroups) {
26537
- const result = [];
26538
- const entryDataGroupIndices = [];
26539
- navConfigDatagroups.forEach((group, index) => {
26540
- if (group.fields.some(field => field.stringId === GroupNavigationConstants.NAVIGATION_ENTRY_MARKER_FIELD_ID_SUFFIX)) {
26541
- entryDataGroupIndices.push(index);
26542
- }
26543
- });
26544
- let navEntriesTaskRef;
26545
- navConfigDatagroups.some(group => {
26546
- const taskRef = getField(group.fields, GroupNavigationConstants.NAVIGATION_ENTRIES_TASK_REF_FIELD_ID);
26547
- if (taskRef !== undefined) {
26548
- navEntriesTaskRef = taskRef;
26549
- }
26550
- return !!taskRef;
26551
- });
26552
- if (!navEntriesTaskRef) {
26553
- throw new Error('The navigation configuration task contains no task ref with entries. Navigation cannot be constructed');
26554
- }
26555
- for (let order = 0; order < navEntriesTaskRef.value.length; order++) {
26556
- const index = entryDataGroupIndices[order];
26557
- const label = extractIconAndTitle(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY));
26558
- const newNode = Object.assign({ url: '' }, label);
26559
- const url = this._navigationRouteProvider.route;
26560
- if (url === undefined) {
26561
- this._log.error(`No URL is configured in nae.json for configurable group navigation. Dynamic navigation entry was ignored`);
26562
- continue;
26563
- }
26564
- newNode.url = `/${url}/${navEntriesTaskRef.value[order]}`;
26565
- const allowedRoles = extractRoles(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY), GroupNavigationConstants.NAVIGATION_ENTRY_ALLOWED_ROLES_FIELD_ID_SUFFIX);
26566
- const bannedRoles = extractRoles(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY), GroupNavigationConstants.NAVIGATION_ENTRY_BANNED_ROLES_FIELD_ID_SUFFIX);
26567
- const splitAllowedRoles = this.extractRoleAndNetId(allowedRoles);
26568
- const splitBannedRoles = this.extractRoleAndNetId(bannedRoles);
26569
- if ((splitAllowedRoles.length === 0
26570
- || splitAllowedRoles.some(idPair => this._userService.hasRoleByIdentifier(idPair[0], idPair[1])))
26571
- && !splitBannedRoles.some(idPair => this._userService.hasRoleByIdentifier(idPair[0], idPair[1]))) {
26572
- result.push(newNode);
26573
- }
26574
- }
26575
- return result;
26576
- }
26577
- /**
26578
- * Splits the provided strings on the ':' character and returns an array of the resulting splits.
26579
- *
26580
- * If any of the input strings split into fewer or more than 2 strings an error is thrown.
26581
- *
26582
- * @param joined a list of strings in the form `<role identifier>:<net identifier>`
26583
- */
26584
- extractRoleAndNetId(joined) {
26585
- const split = [];
26586
- for (const pair of joined) {
26587
- const splitPair = pair.split(':');
26588
- if (splitPair.length !== 2) {
26589
- throw new Error(`The role-net pair '${pair}' has invalid format! Cannot extract role and net identifiers.`);
26590
- }
26591
- split.push(splitPair);
26592
- }
26593
- return split;
26594
- }
26595
26615
  }
26596
26616
  AbstractNavigationTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationTreeComponent, deps: [{ token: ConfigurationService }, { token: i2$3.Router }, { token: LoggerService }, { token: UserService }, { token: AccessService }, { token: ActiveGroupService }, { token: TaskResourceService }, { token: LanguageService }, { token: DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
26597
26617
  AbstractNavigationTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractNavigationTreeComponent, selector: "ncc-abstract-navigation-tree", inputs: { viewPath: "viewPath", parentUrl: "parentUrl", routerChange: "routerChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
@@ -26974,6 +26994,146 @@ class ViewClassInfo extends ImportToAdd {
26974
26994
  }
26975
26995
  }
26976
26996
 
26997
+ var GroupNavigationConstants;
26998
+ (function (GroupNavigationConstants) {
26999
+ /**
27000
+ * Name of the component that indicates the position of the group specific navigation elements.
27001
+ */
27002
+ GroupNavigationConstants["GROUP_NAVIGATION_OUTLET"] = "groupNavigation";
27003
+ /**
27004
+ * Name of the router param that is used to provide information about the selected filter to the group navigation view component
27005
+ */
27006
+ GroupNavigationConstants["GROUP_NAVIGATION_ROUTER_PARAM"] = "filterCaseId";
27007
+ /**
27008
+ * Field id, that contains the tab name of the navigation item.
27009
+ */
27010
+ GroupNavigationConstants["NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX"] = "tab_name";
27011
+ /**
27012
+ * Boolean field id, that determines if the navigation defines a tab icon.
27013
+ */
27014
+ GroupNavigationConstants["NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX"] = "use_tab_icon";
27015
+ /**
27016
+ * Text field id, that contains the id of the used material icon.
27017
+ */
27018
+ GroupNavigationConstants["NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX"] = "tab_icon";
27019
+ /**
27020
+ * TaskRef field, that contains taskId of filter task
27021
+ * */
27022
+ GroupNavigationConstants["ITEM_FIELD_ID_FILTER_TASKREF"] = "current_filter_preview";
27023
+ /**
27024
+ * Text field id, that contains title of create case button
27025
+ * */
27026
+ GroupNavigationConstants["ITEM_FIELD_ID_CREATE_CASE_BUTTON_TITLE"] = "create_case_button_title";
27027
+ /**
27028
+ * Text field id, that contains icon name of create case button
27029
+ * */
27030
+ GroupNavigationConstants["ITEM_FIELD_ID_CREATE_CASE_BUTTON_ICON"] = "create_case_button_icon";
27031
+ /**
27032
+ * EnumerationMap field, that contains selected search type for case view
27033
+ * */
27034
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_VIEW_SEARCH_TYPE"] = "case_view_search_type";
27035
+ /**
27036
+ * EnumerationMap field, that contains selected search type for task view
27037
+ * */
27038
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_VIEW_SEARCH_TYPE"] = "task_view_search_type";
27039
+ /**
27040
+ * Boolean field, that is true if user wants to merge base filter and custom filter
27041
+ * */
27042
+ GroupNavigationConstants["ITEM_FIELD_ID_MERGE_FILTERS"] = "merge_filters";
27043
+ /**
27044
+ * TaskRef field, that contains taskId of custom filter for task view
27045
+ * */
27046
+ GroupNavigationConstants["ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF"] = "current_additional_filter_preview";
27047
+ /**
27048
+ * Boolean field, that is true if the user wants to see more menu for case item in case view
27049
+ * */
27050
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_SHOW_MORE_MENU"] = "case_show_more_menu";
27051
+ /**
27052
+ * Boolean field, that is true if no input for title in case creation is shown
27053
+ * */
27054
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_TITLE_IN_CREATION"] = "case_require_title_in_creation";
27055
+ /**
27056
+ * Text field, that contains banned processes in case creation as a value
27057
+ * */
27058
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_BANNED_PROCESS_CREATION"] = "case_banned_nets_in_creation";
27059
+ /**
27060
+ * Boolean field, that is true if the user wants to see more menu for task item in task view
27061
+ * */
27062
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_SHOW_MORE_MENU"] = "task_show_more_menu";
27063
+ /**
27064
+ * MultichoiceMap field, that contains selected header modes for case view as a value
27065
+ * */
27066
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_HEADERS_MODE"] = "case_headers_mode";
27067
+ /**
27068
+ * Boolean field, that is true if table mode can be applied in case view
27069
+ * */
27070
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_ALLOW_TABLE_MODE"] = "case_allow_header_table_mode";
27071
+ /**
27072
+ * EnumerationMap field, that contains selected default header mode for case view as a value
27073
+ * */
27074
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_DEFAULT_HEADERS_MODE"] = "case_headers_default_mode";
27075
+ /**
27076
+ * Boolean field, that is true to make mode menu in case view visible
27077
+ * */
27078
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_HEADERS_CHANGEABLE"] = "case_is_header_mode_changeable";
27079
+ /**
27080
+ * MultichoiceMap field, that contains selected header modes for task view as a value
27081
+ * */
27082
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_HEADERS_MODE"] = "task_headers_mode";
27083
+ /**
27084
+ * Boolean field, that is true if table mode can be applied in task view
27085
+ * */
27086
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_ALLOW_TABLE_MODE"] = "task_allow_header_table_mode";
27087
+ /**
27088
+ * EnumerationMap field, that contains selected default header mode for task view as a value
27089
+ * */
27090
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_DEFAULT_HEADERS_MODE"] = "task_headers_default_mode";
27091
+ /**
27092
+ * Boolean field, that is true to make mode menu in task view visible
27093
+ * */
27094
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_HEADERS_CHANGEABLE"] = "task_is_header_mode_changeable";
27095
+ /**
27096
+ * Boolean field, that is true to use default headers configuration for case view
27097
+ * */
27098
+ GroupNavigationConstants["ITEM_FIELD_ID_USE_CASE_DEFAULT_HEADERS"] = "use_case_default_headers";
27099
+ /**
27100
+ * Text field, that contains default header metadata separated by comma for case view as a value
27101
+ * */
27102
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_DEFAULT_HEADERS"] = "case_default_headers";
27103
+ /**
27104
+ * Boolean field, that is true to use default headers configuration for task view
27105
+ * */
27106
+ GroupNavigationConstants["ITEM_FIELD_ID_USE_TASK_DEFAULT_HEADERS"] = "use_task_default_headers";
27107
+ /**
27108
+ * Text field, that contains default header metadata separated by comma for task view as a value
27109
+ * */
27110
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_DEFAULT_HEADERS"] = "task_default_headers";
27111
+ /**
27112
+ * MultichoiceMap field, that contains allowed roles as value
27113
+ * */
27114
+ GroupNavigationConstants["ITEM_FIELD_ID_ALLOWED_ROLES"] = "allowed_roles";
27115
+ /**
27116
+ * MultichoiceMap field, that contains banned roles as value
27117
+ * */
27118
+ GroupNavigationConstants["ITEM_FIELD_ID_BANNED_ROLES"] = "banned_roles";
27119
+ /**
27120
+ * Text field, that contains icon identifier
27121
+ * */
27122
+ GroupNavigationConstants["ITEM_FIELD_ID_MENU_ICON"] = "menu_icon";
27123
+ /**
27124
+ * I18n field, that contains labels of menu item
27125
+ * */
27126
+ GroupNavigationConstants["ITEM_FIELD_ID_MENU_NAME"] = "menu_name";
27127
+ /**
27128
+ * Text field, that contains URI
27129
+ * */
27130
+ GroupNavigationConstants["ITEM_FIELD_ID_NODE_PATH"] = "nodePath";
27131
+ /**
27132
+ * Boolean field, that is true if item contains child items
27133
+ * */
27134
+ GroupNavigationConstants["ITEM_FIELD_ID_HAS_CHILDREN"] = "hasChildren";
27135
+ })(GroupNavigationConstants || (GroupNavigationConstants = {}));
27136
+
26977
27137
  /**
26978
27138
  * Holds component for dynamic routing resolution of group navigation component resolver component by the {@link RoutingBuilderService}.
26979
27139
  */
@@ -27099,15 +27259,17 @@ class RoutingBuilderService {
27099
27259
  if (view.layout.name === GroupNavigationConstants.GROUP_NAVIGATION_OUTLET) {
27100
27260
  return this._groupNavigationComponentResolverComponent;
27101
27261
  }
27102
- let className;
27262
+ const className = RoutingBuilderService.parseClassNameFromView(view, configPath);
27263
+ return this._viewService.resolveNameToClass(className);
27264
+ }
27265
+ static parseClassNameFromView(view, configPath) {
27103
27266
  if (!!view.layout.componentName) {
27104
- className = `${classify(view.layout.componentName)}Component`;
27267
+ return `${classify(view.layout.componentName)}Component`;
27105
27268
  }
27106
27269
  else {
27107
27270
  const classInfo = new ViewClassInfo(configPath, view.layout.name, view.layout.componentName);
27108
- className = classInfo.className;
27271
+ return classInfo.className;
27109
27272
  }
27110
- return this._viewService.resolveNameToClass(className);
27111
27273
  }
27112
27274
  defaultRoutesRedirects() {
27113
27275
  const result = [];
@@ -27146,247 +27308,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
27146
27308
  }] }];
27147
27309
  } });
27148
27310
 
27149
- /**
27150
- * Case search request page size
27151
- */
27152
- const NAE_URI_NODE_CASES_PAGE_SIZE = new InjectionToken('NaeUriNodeCasesPageSize');
27153
-
27154
- /**
27155
- * Service for accessing backend resource to resolve URI objects
27156
- * */
27157
- class UriResourceService extends AbstractResourceService {
27158
- constructor(provider, configService) {
27159
- super('petrinet', provider, configService);
27160
- }
27161
- getRoot() {
27162
- return this._resourceProvider.get$('uri/root', this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
27163
- }
27164
- getByLevel(level) {
27165
- return this._resourceProvider.get$('uri/level/' + level, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
27166
- }
27167
- getNodesByParent(parentId) {
27168
- return this._resourceProvider.get$('uri/parent/' + parentId, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
27169
- }
27170
- getNodeByUri(uriPath) {
27171
- return this._resourceProvider.get$('uri/' + btoa(uriPath), this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
27172
- }
27173
- }
27174
- UriResourceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, deps: [{ token: ResourceProvider }, { token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
27175
- UriResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, providedIn: 'root' });
27176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, decorators: [{
27177
- type: Injectable,
27178
- args: [{
27179
- providedIn: 'root'
27180
- }]
27181
- }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: ConfigurationService }]; } });
27182
-
27183
- /**
27184
- * Service for managing URIs
27185
- * */
27186
- class UriService {
27187
- constructor(_logger, _resourceService, _caseResourceService, _activeGroupService, pageSize) {
27188
- this._logger = _logger;
27189
- this._resourceService = _resourceService;
27190
- this._caseResourceService = _caseResourceService;
27191
- this._activeGroupService = _activeGroupService;
27192
- this.pageSize = pageSize;
27193
- if (!pageSize) {
27194
- this.pageSize = 20;
27195
- }
27196
- if (typeof this.pageSize === 'string') {
27197
- this.pageSize = parseInt(this.pageSize);
27198
- }
27199
- this._rootLoading$ = new LoadingEmitter();
27200
- this._parentLoading$ = new LoadingEmitter();
27201
- this._activeNode$ = new BehaviorSubject(undefined);
27202
- this.loadRoot();
27203
- }
27204
- ngOnDestroy() {
27205
- this._rootLoading$.complete();
27206
- this._parentLoading$.complete();
27207
- this._activeNode$.complete();
27208
- }
27209
- get root() {
27210
- return this._rootNode;
27211
- }
27212
- get rootLoaded$() {
27213
- return this._rootLoading$;
27214
- }
27215
- isRoot(node) {
27216
- return node.id === this._rootNode.id && node.uriPath === this._rootNode.uriPath;
27217
- }
27218
- get activeNode() {
27219
- return this._activeNode$.getValue();
27220
- }
27221
- set activeNode(node) {
27222
- if (node.parentId && !node.parent) {
27223
- if (node.parentId === this._rootNode.id) {
27224
- node.parent = this._rootNode;
27225
- }
27226
- else {
27227
- this._parentLoading$.on();
27228
- this.getNodeByPath(this.resolveParentPath(node)).subscribe(n => {
27229
- node.parent = !n ? this._rootNode : n;
27230
- this._parentLoading$.off();
27231
- }, error => {
27232
- this._logger.error(error);
27233
- this._parentLoading$.off();
27234
- });
27235
- }
27236
- }
27237
- this._activeNode$.next(node);
27238
- }
27239
- get activeNode$() {
27240
- return this._activeNode$;
27241
- }
27242
- get parentNodeLoading$() {
27243
- return this._parentLoading$;
27244
- }
27245
- /**
27246
- * Loads root ID into variable.
27247
- * When root node is loaded and active node is not set yet the root node is set as active node
27248
- * */
27249
- loadRoot() {
27250
- this._rootLoading$.on();
27251
- this._resourceService.getRoot().subscribe(node => {
27252
- if (!!node) {
27253
- this._rootNode = node;
27254
- if (!this.activeNode) {
27255
- this.activeNode = this._rootNode;
27256
- }
27257
- }
27258
- this._rootLoading$.off();
27259
- }, error => {
27260
- this._logger.error(error);
27261
- this._rootLoading$.off();
27262
- });
27263
- }
27264
- reset() {
27265
- this.activeNode = this._rootNode;
27266
- return this._rootNode;
27267
- }
27268
- /**
27269
- * Get uri node by uri path.
27270
- * @param path
27271
- */
27272
- getNodeByPath(path) {
27273
- return this._resourceService.getNodeByUri(path).pipe(map(n => this.capitalizeName(n)));
27274
- }
27275
- /**
27276
- * Get child nodes of provides node.
27277
- * @param node parent node
27278
- */
27279
- getChildNodes(node) {
27280
- if (!node)
27281
- node = this.activeNode;
27282
- return this._resourceService.getNodesByParent(node.id).pipe(map(nodes => {
27283
- this.capitalizeNames(nodes);
27284
- return nodes;
27285
- }));
27286
- }
27287
- /**
27288
- * Get cases under uri node
27289
- * @param node parent node of cases
27290
- * @param processIdentifiers optional search filter for process identifier to get only cases from the process
27291
- * @param pageNumber optional parameter for load page on the index. Default value is 0 (the first page).
27292
- * @param pageSize optional parameter for loaded page size. Defaults to value of injection token URI_NODE_CASES_PAGE_SIZE or to value "20".
27293
- */
27294
- getCasesOfNode(node, processIdentifiers, pageNumber = 0, pageSize = this.pageSize) {
27295
- if (!node)
27296
- node = this.activeNode;
27297
- const searchBody = {
27298
- uriNodeId: node.id,
27299
- };
27300
- if (!!processIdentifiers) {
27301
- searchBody.process = processIdentifiers.map(id => ({ identifier: id }));
27302
- }
27303
- // TODO active group is broken a given the wrong id
27304
- // if (!!this._activeGroupService.activeGroup) {
27305
- // searchBody.data = {};
27306
- // searchBody.data['parentId'] = this._activeGroupService.activeGroup.stringId;
27307
- // }
27308
- let httpParams = new HttpParams()
27309
- .set(PaginationParams.PAGE_SIZE, pageSize)
27310
- .set(PaginationParams.PAGE_NUMBER, pageNumber);
27311
- return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery(searchBody), httpParams);
27312
- }
27313
- /**
27314
- * Get siblings node of the provided node
27315
- * @param node siblings node
27316
- */
27317
- getSiblingsOfNode(node) {
27318
- if (!node)
27319
- node = this.activeNode;
27320
- return this._resourceService.getNodesByParent(node.parentId).pipe(map(nodes => {
27321
- this.capitalizeNames(nodes);
27322
- return nodes;
27323
- }));
27324
- }
27325
- /**
27326
- * Get nodes on the same uri level starting from 0. Root node is no 0 level.
27327
- * @param level
27328
- * @param parent optional parameter to filter nodes with common parent
27329
- */
27330
- getNodesOnLevel(level, parent) {
27331
- if (level === 0)
27332
- return of([this.root]);
27333
- return this._resourceService.getByLevel(level).pipe(map(nodes => {
27334
- const ns = !!(parent === null || parent === void 0 ? void 0 : parent.id) ? nodes.filter(n => n.parentId === parent.id) : nodes;
27335
- this.capitalizeNames(ns);
27336
- return ns;
27337
- }));
27338
- }
27339
- resolveParentPath(node) {
27340
- if (!node)
27341
- node = this.activeNode;
27342
- const lastDelimiter = node.uriPath.lastIndexOf('/');
27343
- if (lastDelimiter === -1)
27344
- return 'root';
27345
- return node.uriPath.substring(0, lastDelimiter);
27346
- }
27347
- splitNodePath(node) {
27348
- return node === null || node === void 0 ? void 0 : node.uriPath.split('/').filter(s => s !== UriService.ROOT);
27349
- }
27350
- capitalizeNames(nodes) {
27351
- if (!(nodes instanceof Array))
27352
- return;
27353
- nodes.forEach(n => this.capitalizeName(n));
27354
- }
27355
- /**
27356
- * /netgrif/nae_system/processes/... => Netgrif -> Nae Systems -> Processes
27357
- * @param node
27358
- * @private
27359
- */
27360
- capitalizeName(node) {
27361
- let parts = node.name.split('_');
27362
- parts = parts.map(p => {
27363
- if (p === undefined || p.length === 0)
27364
- return;
27365
- if (p.length === 1)
27366
- return p.toUpperCase();
27367
- return p.charAt(0).toUpperCase() + p.substring(1);
27368
- });
27369
- node.name = parts.join(' ');
27370
- return node;
27371
- }
27372
- }
27373
- UriService.ROOT = 'root';
27374
- UriService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, deps: [{ token: LoggerService }, { token: UriResourceService }, { token: CaseResourceService }, { token: ActiveGroupService }, { token: NAE_URI_NODE_CASES_PAGE_SIZE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
27375
- UriService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, providedIn: 'root' });
27376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, decorators: [{
27377
- type: Injectable,
27378
- args: [{
27379
- providedIn: 'root',
27380
- }]
27381
- }], ctorParameters: function () {
27382
- return [{ type: LoggerService }, { type: UriResourceService }, { type: CaseResourceService }, { type: ActiveGroupService }, { type: undefined, decorators: [{
27383
- type: Optional
27384
- }, {
27385
- type: Inject,
27386
- args: [NAE_URI_NODE_CASES_PAGE_SIZE]
27387
- }] }];
27388
- } });
27389
-
27390
27311
  /**
27391
27312
  * Holds all identifiers of the Impersonation config process in an accessible manner
27392
27313
  */
@@ -27559,21 +27480,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
27559
27480
  }] }];
27560
27481
  } });
27561
27482
 
27562
- const FILTER_IDENTIFIERS = [
27563
- 'preference_filter_item',
27483
+ const MENU_IDENTIFIERS = [
27484
+ 'preference_item',
27564
27485
  ];
27565
- const FILTER_VIEW_TASK_TRANSITION_ID = 'view';
27566
- const FILTER_DEFAULT_HEADERS_ID = 'default_headers';
27486
+ const SETTINGS_TRANSITION_ID = 'item_settings';
27567
27487
  const LEFT_DRAWER_DEFAULT_WIDTH = 60;
27568
27488
  const RIGHT_DRAWER_DEFAULT_WIDTH = 240;
27569
27489
  const RIGHT_DRAWER_DEFAULT_MIN_WIDTH = 180;
27570
27490
  const RIGHT_DRAWER_MAX_WIDTH = 460;
27491
+ const RIGHT_SIDE_NEW_PAGE_SIZE = 10;
27492
+ const RIGHT_SIDE_INIT_PAGE_SIZE = 20;
27493
+ var MenuOrder;
27494
+ (function (MenuOrder) {
27495
+ MenuOrder[MenuOrder["Ascending"] = 0] = "Ascending";
27496
+ MenuOrder[MenuOrder["Descending"] = 1] = "Descending";
27497
+ })(MenuOrder || (MenuOrder = {}));
27571
27498
  class AbstractNavigationDoubleDrawerComponent {
27572
- constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
27499
+ constructor(_router, _activatedRoute, _breakpoint, _languageService, _translateService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
27573
27500
  this._router = _router;
27574
27501
  this._activatedRoute = _activatedRoute;
27575
27502
  this._breakpoint = _breakpoint;
27576
27503
  this._languageService = _languageService;
27504
+ this._translateService = _translateService;
27577
27505
  this._userService = _userService;
27578
27506
  this._accessService = _accessService;
27579
27507
  this._log = _log;
@@ -27607,14 +27535,14 @@ class AbstractNavigationDoubleDrawerComponent {
27607
27535
  disableClose: false,
27608
27536
  width: RIGHT_DRAWER_DEFAULT_WIDTH,
27609
27537
  };
27610
- this.leftNodes = new Array();
27611
- this.rightNodes = new Array();
27612
- this.views = new Array();
27538
+ this.leftItems = new Array();
27539
+ this.rightItems = new Array();
27613
27540
  this.leftLoading$ = new LoadingEmitter();
27614
27541
  this.rightLoading$ = new LoadingEmitter();
27615
27542
  this.nodeLoading$ = new LoadingEmitter();
27543
+ this.itemsOrder = MenuOrder.Ascending;
27544
+ this.hiddenCustomItems = [];
27616
27545
  this._childCustomViews = {};
27617
- this.moreMenuItems = new Array();
27618
27546
  }
27619
27547
  ngOnInit() {
27620
27548
  this._breakpointSubscription = this._breakpoint.observe([Breakpoints.HandsetLandscape]).subscribe(() => {
@@ -27670,44 +27598,19 @@ class AbstractNavigationDoubleDrawerComponent {
27670
27598
  this.rightLoading$.off();
27671
27599
  }
27672
27600
  if (this._uriService.isRoot(node)) {
27673
- this.leftNodes = [];
27601
+ this.leftItems = [];
27674
27602
  this.loadRightSide();
27675
27603
  return;
27676
27604
  }
27677
- if (!this.leftNodes.find(n => n.id === node.id)) {
27605
+ if (!this.leftItems.find(item => { var _a; return ((_a = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)) === null || _a === void 0 ? void 0 : _a.value) === node.uriPath; })) {
27678
27606
  this.loadLeftSide();
27679
27607
  }
27680
27608
  this.loadRightSide();
27681
27609
  }
27682
- resolveUriForChildViews(configPath, childView) {
27683
- if (!childView.processUri)
27684
- return;
27685
- if (!this._accessService.canAccessView(childView, configPath))
27686
- return;
27687
- if (!this._childCustomViews[childView.processUri]) {
27688
- this._childCustomViews[childView.processUri] = {};
27689
- }
27690
- this._childCustomViews[childView.processUri][configPath] = Object.assign({ id: configPath }, childView);
27691
- }
27692
- resolveHiddenMenuItemFromChildViews(configPath, childView) {
27693
- var _a;
27694
- if (!childView.navigation)
27695
- return;
27696
- if (!this._accessService.canAccessView(childView, configPath))
27697
- return;
27698
- // @ts-ignore
27699
- if (!!((_a = childView === null || childView === void 0 ? void 0 : childView.navigation) === null || _a === void 0 ? void 0 : _a.hidden)) {
27700
- this.moreMenuItems.push(Object.assign({ id: configPath }, childView));
27701
- }
27702
- }
27703
27610
  ngOnDestroy() {
27704
- var _a, _b, _c, _d, _e, _f;
27611
+ var _a, _b;
27705
27612
  (_a = this._breakpointSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
27706
- (_b = this._leftNodesSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
27707
- (_c = this._rightNodesSubscription) === null || _c === void 0 ? void 0 : _c.unsubscribe();
27708
- (_d = this._filtersSubscription) === null || _d === void 0 ? void 0 : _d.unsubscribe();
27709
- (_e = this._rootSubscription) === null || _e === void 0 ? void 0 : _e.unsubscribe();
27710
- (_f = this._currentNodeSubscription) === null || _f === void 0 ? void 0 : _f.unsubscribe();
27613
+ (_b = this._currentNodeSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
27711
27614
  this.leftLoading$.complete();
27712
27615
  this.rightLoading$.complete();
27713
27616
  this.nodeLoading$.complete();
@@ -27797,75 +27700,125 @@ class AbstractNavigationDoubleDrawerComponent {
27797
27700
  return;
27798
27701
  this.currentNode = this._currentNode.parent;
27799
27702
  }
27800
- onNodeClick(node) {
27801
- this.currentNode = node;
27802
- }
27803
- onViewClick(view) {
27703
+ onItemClick(item) {
27704
+ var _a;
27804
27705
  this._uriService.activeNode = this._currentNode;
27706
+ if (this.hasItemChildren(item)) {
27707
+ const path = (_a = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)) === null || _a === void 0 ? void 0 : _a.value;
27708
+ this._uriService.getNodeByPath(path).subscribe(node => {
27709
+ this.currentNode = node;
27710
+ }, error => {
27711
+ this._log.error(error);
27712
+ });
27713
+ }
27714
+ }
27715
+ hasItemChildren(item) {
27716
+ var _a;
27717
+ return (_a = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)) === null || _a === void 0 ? void 0 : _a.value;
27718
+ }
27719
+ isItemAndNodeEqual(item, node) {
27720
+ var _a;
27721
+ return ((_a = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)) === null || _a === void 0 ? void 0 : _a.value) === node.uriPath;
27805
27722
  }
27806
27723
  loadLeftSide() {
27807
27724
  if (this._uriService.isRoot(this._currentNode)) {
27808
- this.leftNodes = [];
27725
+ this.leftItems = [];
27809
27726
  return;
27810
27727
  }
27811
27728
  this.leftLoading$.on();
27812
- this._leftNodesSubscription = this._uriService.getSiblingsOfNode(this._currentNode).subscribe(nodes => {
27813
- this.leftNodes = nodes instanceof Array ? nodes : [];
27814
- this.leftNodes.sort((a, b) => this.compareStrings(a.name, b.name));
27815
- this.leftLoading$.off();
27729
+ this._uriService.getCasesOfNode(this.currentNode.parent, MENU_IDENTIFIERS, 0, 1).subscribe(page => {
27730
+ var _a;
27731
+ ((_a = page === null || page === void 0 ? void 0 : page.pagination) === null || _a === void 0 ? void 0 : _a.totalElements) === 0 ? of([]) : this._uriService.getCasesOfNode(this.currentNode.parent, MENU_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content)).subscribe(result => {
27732
+ this.leftItems = result.filter(folder => { var _a; return ((_a = folder.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)) === null || _a === void 0 ? void 0 : _a.value) === true; }).map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27733
+ this.leftItems.sort((a, b) => { var _a, _b; return (_a = a === null || a === void 0 ? void 0 : a.navigation) === null || _a === void 0 ? void 0 : _a.title.localeCompare((_b = b === null || b === void 0 ? void 0 : b.navigation) === null || _b === void 0 ? void 0 : _b.title); });
27734
+ this.leftLoading$.off();
27735
+ }, error => {
27736
+ this._log.error(error);
27737
+ this.leftItems = [];
27738
+ this.leftLoading$.off();
27739
+ });
27816
27740
  }, error => {
27817
27741
  this._log.error(error);
27818
- this.leftNodes = [];
27742
+ this.leftItems = [];
27819
27743
  this.leftLoading$.off();
27820
27744
  });
27821
27745
  }
27822
27746
  loadRightSide() {
27823
27747
  this.rightLoading$.on();
27824
- this._uriService.getCasesOfNode(this.currentNode, FILTER_IDENTIFIERS, 0, 1).subscribe(page => {
27748
+ this.moreItems = [];
27749
+ this._uriService.getCasesOfNode(this.currentNode, MENU_IDENTIFIERS, 0, 1).subscribe(page => {
27825
27750
  var _a, _b;
27826
- this._log.debug('Number of filters for uri ' + this._currentNode.uriPath + ': ' + ((_a = page === null || page === void 0 ? void 0 : page.pagination) === null || _a === void 0 ? void 0 : _a.totalElements));
27827
- forkJoin({
27828
- folders: this._uriService.getChildNodes(this._currentNode),
27829
- filters: ((_b = page === null || page === void 0 ? void 0 : page.pagination) === null || _b === void 0 ? void 0 : _b.totalElements) === 0 ? of([]) : this._uriService.getCasesOfNode(this._currentNode, FILTER_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content)),
27830
- }).subscribe(result => {
27831
- this.rightNodes = result.folders instanceof Array ? result.folders : [];
27832
- this.rightNodes.sort((a, b) => this.compareStrings(a.name, b.name));
27833
- this.views = (result.filters instanceof Array ? result.filters : []).map(f => this.resolveFilterCaseToViewNavigationItem(f)).filter(i => !!i);
27834
- if (!!this._childCustomViews[this._currentNode.uriPath]) {
27835
- this.views.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
27751
+ this._log.debug('Number of items for uri ' + this._currentNode.uriPath + ': ' + ((_a = page === null || page === void 0 ? void 0 : page.pagination) === null || _a === void 0 ? void 0 : _a.totalElements));
27752
+ (((_b = page === null || page === void 0 ? void 0 : page.pagination) === null || _b === void 0 ? void 0 : _b.totalElements) === 0 ? of([]) : this._uriService.getCasesOfNode(this._currentNode, MENU_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content))).subscribe(result => {
27753
+ result = result.sort((a, b) => a === null || a === void 0 ? void 0 : a.title.localeCompare(b === null || b === void 0 ? void 0 : b.title));
27754
+ if (result.length > RIGHT_SIDE_INIT_PAGE_SIZE) {
27755
+ const rawRightItems = result.splice(0, RIGHT_SIDE_INIT_PAGE_SIZE);
27756
+ this.rightItems = rawRightItems.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27757
+ this.moreItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27836
27758
  }
27837
- // @ts-ignore
27838
- this.views.sort((a, b) => { var _a, _b; return this.compareStrings((_a = a === null || a === void 0 ? void 0 : a.navigation) === null || _a === void 0 ? void 0 : _a.title, (_b = b === null || b === void 0 ? void 0 : b.navigation) === null || _b === void 0 ? void 0 : _b.title); });
27759
+ else {
27760
+ this.rightItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27761
+ }
27762
+ this.resolveCustomViewsInRightSide();
27839
27763
  this.rightLoading$.off();
27840
27764
  }, error => {
27841
27765
  this._log.error(error);
27842
- this.rightNodes = [];
27843
- this.views = [];
27766
+ this.rightItems = [];
27767
+ this.moreItems = [];
27768
+ this.resolveCustomViewsInRightSide();
27844
27769
  this.rightLoading$.off();
27845
27770
  });
27846
27771
  }, error => {
27847
27772
  this._log.error(error);
27848
- this.rightNodes = [];
27849
- this.views = [];
27773
+ this.rightItems = [];
27774
+ this.moreItems = [];
27775
+ this.resolveCustomViewsInRightSide();
27850
27776
  this.rightLoading$.off();
27851
27777
  });
27852
27778
  }
27853
- resolveFilterCaseToViewNavigationItem(filter) {
27854
- var _a, _b, _c;
27779
+ loadMoreItems() {
27780
+ if (this.moreItems.length > RIGHT_SIDE_NEW_PAGE_SIZE) {
27781
+ this.rightItems.push(...this.moreItems.splice(0, RIGHT_SIDE_NEW_PAGE_SIZE));
27782
+ }
27783
+ else {
27784
+ this.rightItems.push(...this.moreItems);
27785
+ this.moreItems = [];
27786
+ }
27787
+ }
27788
+ isAscending() {
27789
+ return this.itemsOrder === MenuOrder.Ascending;
27790
+ }
27791
+ switchOrder() {
27792
+ this.itemsOrder = (this.itemsOrder + 1) % 2;
27793
+ let multiplier = 1;
27794
+ if (this.itemsOrder === MenuOrder.Descending) {
27795
+ multiplier = -1;
27796
+ }
27797
+ this.rightItems = this.rightItems.sort((a, b) => { var _a, _b; return multiplier * ((_a = a === null || a === void 0 ? void 0 : a.navigation) === null || _a === void 0 ? void 0 : _a.title.localeCompare((_b = b === null || b === void 0 ? void 0 : b.navigation) === null || _b === void 0 ? void 0 : _b.title)); });
27798
+ this.leftItems = this.leftItems.sort((a, b) => { var _a, _b; return multiplier * ((_a = a === null || a === void 0 ? void 0 : a.navigation) === null || _a === void 0 ? void 0 : _a.title.localeCompare((_b = b === null || b === void 0 ? void 0 : b.navigation) === null || _b === void 0 ? void 0 : _b.title)); });
27799
+ this.moreItems = this.moreItems.sort((a, b) => { var _a, _b; return multiplier * ((_a = a === null || a === void 0 ? void 0 : a.navigation) === null || _a === void 0 ? void 0 : _a.title.localeCompare((_b = b === null || b === void 0 ? void 0 : b.navigation) === null || _b === void 0 ? void 0 : _b.title)); });
27800
+ }
27801
+ resolveCustomViewsInRightSide() {
27802
+ if (!!this._childCustomViews[this._currentNode.uriPath]) {
27803
+ this.rightItems.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
27804
+ }
27805
+ }
27806
+ resolveItemCaseToNavigationItem(itemCase) {
27807
+ var _a, _b;
27855
27808
  const item = {
27856
27809
  access: {},
27857
27810
  navigation: {
27858
- icon: ((_a = filter.immediateData.find(f => f.stringId === 'icon_name')) === null || _a === void 0 ? void 0 : _a.value) || this.filterIcon,
27859
- title: ((_c = (_b = filter.immediateData.find(f => f.stringId === 'entry_name')) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.defaultValue) || filter.title,
27811
+ icon: ((_a = itemCase.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_MENU_ICON)) === null || _a === void 0 ? void 0 : _a.value) || this.filterIcon,
27812
+ title: this.getTranslation((_b = itemCase.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_MENU_NAME)) === null || _b === void 0 ? void 0 : _b.value) || itemCase.title,
27860
27813
  },
27861
27814
  routing: {
27862
- path: this.getFilterRoutingPath(filter),
27815
+ path: this.getItemRoutingPath(itemCase),
27863
27816
  },
27864
- id: filter.stringId,
27865
- resource: filter,
27817
+ id: itemCase.stringId,
27818
+ resource: itemCase,
27866
27819
  };
27867
- const resolvedRoles = this.resolveAccessRoles(filter, 'allowed_roles');
27868
- const resolvedBannedRoles = this.resolveAccessRoles(filter, 'banned_roles');
27820
+ const resolvedRoles = this.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_ALLOWED_ROLES);
27821
+ const resolvedBannedRoles = this.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_BANNED_ROLES);
27869
27822
  if (!!resolvedRoles)
27870
27823
  item.access['role'] = resolvedRoles;
27871
27824
  if (!!resolvedBannedRoles)
@@ -27874,6 +27827,10 @@ class AbstractNavigationDoubleDrawerComponent {
27874
27827
  return;
27875
27828
  return item;
27876
27829
  }
27830
+ getTranslation(value) {
27831
+ const locale = this._translateService.currentLang.split('-')[0];
27832
+ return locale in value.translations ? value.translations[locale] : value.defaultValue;
27833
+ }
27877
27834
  resolveAccessRoles(filter, roleType) {
27878
27835
  var _a;
27879
27836
  const allowedRoles = (_a = filter.immediateData.find(f => f.stringId === roleType)) === null || _a === void 0 ? void 0 : _a.options;
@@ -27889,17 +27846,11 @@ class AbstractNavigationDoubleDrawerComponent {
27889
27846
  });
27890
27847
  return roles;
27891
27848
  }
27892
- getFilterRoutingPath(filterCase) {
27893
- const viewTaskId = filterCase.tasks.find(taskPair => taskPair.transition === FILTER_VIEW_TASK_TRANSITION_ID).task;
27849
+ getItemRoutingPath(itemCase) {
27850
+ const transId = SETTINGS_TRANSITION_ID;
27851
+ const taskId = itemCase.tasks.find(taskPair => taskPair.transition === transId).task;
27894
27852
  const url = this._dynamicRoutingService.route;
27895
- return `/${url}/${viewTaskId}`;
27896
- }
27897
- compareStrings(a, b) {
27898
- if (!a && !b)
27899
- return 0;
27900
- if (a < b)
27901
- return -1;
27902
- return a > b ? 1 : 0;
27853
+ return `/${url}/${taskId}`;
27903
27854
  }
27904
27855
  /**
27905
27856
  * Function to check whether the back button should be displayed
@@ -27909,20 +27860,17 @@ class AbstractNavigationDoubleDrawerComponent {
27909
27860
  var _a;
27910
27861
  return !!((_a = this._currentNode) === null || _a === void 0 ? void 0 : _a.level) ? this._currentNode.level == 0 : true;
27911
27862
  }
27912
- isLeftNodesEmpty() {
27913
- return this.leftNodes === undefined || this.leftNodes.length === 0;
27863
+ isLeftItemsEmpty() {
27864
+ return this.leftItems === undefined || this.leftItems.length === 0;
27914
27865
  }
27915
- isRightNodesEmpty() {
27916
- return this.rightNodes === undefined || this.rightNodes.length === 0;
27917
- }
27918
- isViewsEmpty() {
27919
- return this.views === undefined || this.views.length === 0;
27866
+ isRightItemsEmpty() {
27867
+ return this.rightItems === undefined || this.rightItems.length === 0;
27920
27868
  }
27921
27869
  uriNodeTrackBy(index, node) {
27922
27870
  return node.id;
27923
27871
  }
27924
- viewsTrackBy(index, view) {
27925
- return view.id;
27872
+ itemsTrackBy(index, item) {
27873
+ return item.id;
27926
27874
  }
27927
27875
  onResizeEvent(event) {
27928
27876
  if (event.rectangle.width > RIGHT_DRAWER_MAX_WIDTH) {
@@ -27938,8 +27886,28 @@ class AbstractNavigationDoubleDrawerComponent {
27938
27886
  // this.userPreferenceService._drawerWidthChanged$.next(this.width);
27939
27887
  // this.contentWidth.next(this.width);
27940
27888
  }
27889
+ resolveUriForChildViews(configPath, childView) {
27890
+ if (!childView.processUri)
27891
+ return;
27892
+ if (!this._accessService.canAccessView(childView, configPath))
27893
+ return;
27894
+ if (!this._childCustomViews[childView.processUri]) {
27895
+ this._childCustomViews[childView.processUri] = {};
27896
+ }
27897
+ this._childCustomViews[childView.processUri][configPath] = Object.assign({ id: configPath }, childView);
27898
+ }
27899
+ resolveHiddenMenuItemFromChildViews(configPath, childView) {
27900
+ var _a;
27901
+ if (!childView.navigation)
27902
+ return;
27903
+ if (!this._accessService.canAccessView(childView, configPath))
27904
+ return;
27905
+ if (!!((_a = childView === null || childView === void 0 ? void 0 : childView.navigation) === null || _a === void 0 ? void 0 : _a.hidden)) {
27906
+ this.hiddenCustomItems.push(Object.assign({ id: configPath }, childView));
27907
+ }
27908
+ }
27941
27909
  }
27942
- AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, deps: [{ token: i2$3.Router }, { token: i2$3.ActivatedRoute }, { token: i1$7.BreakpointObserver }, { token: LanguageService }, { token: UserService }, { token: AccessService }, { token: LoggerService }, { token: ConfigurationService }, { token: UriService }, { token: ImpersonationUserSelectService }, { token: ImpersonationService }, { token: DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
27910
+ AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, deps: [{ token: i2$3.Router }, { token: i2$3.ActivatedRoute }, { token: i1$7.BreakpointObserver }, { token: LanguageService }, { token: i1$2.TranslateService }, { token: UserService }, { token: AccessService }, { token: LoggerService }, { token: ConfigurationService }, { token: UriService }, { token: ImpersonationUserSelectService }, { token: ImpersonationService }, { token: DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
27943
27911
  AbstractNavigationDoubleDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractNavigationDoubleDrawerComponent, selector: "ncc-abstract-navigation-double-drawer", inputs: { portalLeftMenu: "portalLeftMenu", portalRightMenu: "portalRightMenu", imageRouterLink: "imageRouterLink", imageAlt: "imageAlt", image: "image", profileRouterLink: "profileRouterLink", includeUser: "includeUser", includeLanguage: "includeLanguage", includeMoreMenu: "includeMoreMenu", includeImpersonation: "includeImpersonation", allClosable: "allClosable", folderIcon: "folderIcon", openedFolderIcon: "openedFolderIcon", filterIcon: "filterIcon", foldersCategoryName: "foldersCategoryName", viewsCategoryName: "viewsCategoryName" }, ngImport: i0, template: '', isInline: true });
27944
27912
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, decorators: [{
27945
27913
  type: Component,
@@ -27947,7 +27915,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
27947
27915
  selector: 'ncc-abstract-navigation-double-drawer',
27948
27916
  template: '',
27949
27917
  }]
27950
- }], ctorParameters: function () { return [{ type: i2$3.Router }, { type: i2$3.ActivatedRoute }, { type: i1$7.BreakpointObserver }, { type: LanguageService }, { type: UserService }, { type: AccessService }, { type: LoggerService }, { type: ConfigurationService }, { type: UriService }, { type: ImpersonationUserSelectService }, { type: ImpersonationService }, { type: DynamicNavigationRouteProviderService }]; }, propDecorators: { portalLeftMenu: [{
27918
+ }], ctorParameters: function () { return [{ type: i2$3.Router }, { type: i2$3.ActivatedRoute }, { type: i1$7.BreakpointObserver }, { type: LanguageService }, { type: i1$2.TranslateService }, { type: UserService }, { type: AccessService }, { type: LoggerService }, { type: ConfigurationService }, { type: UriService }, { type: ImpersonationUserSelectService }, { type: ImpersonationService }, { type: DynamicNavigationRouteProviderService }]; }, propDecorators: { portalLeftMenu: [{
27951
27919
  type: Input
27952
27920
  }], portalRightMenu: [{
27953
27921
  type: Input
@@ -28050,7 +28018,6 @@ class GroupNavigationComponentResolverService {
28050
28018
  result.next(new ComponentPortal(this.resolveViewComponent(taskData), null, Injector.create({
28051
28019
  providers: [
28052
28020
  { provide: NAE_NAVIGATION_ITEM_TASK_DATA, useValue: taskData },
28053
- { provide: NAE_DEFAULT_HEADERS, useValue: this.resolveDefaultHeaders(taskData) },
28054
28021
  ],
28055
28022
  parent: parentInjector
28056
28023
  })));
@@ -28064,13 +28031,6 @@ class GroupNavigationComponentResolverService {
28064
28031
  });
28065
28032
  return result.asObservable();
28066
28033
  }
28067
- resolveDefaultHeaders(caze) {
28068
- var _a;
28069
- const defaultHeadersResponse = (_a = [].concat(...caze.map(dataGroup => dataGroup.fields)).find(field => field.stringId === FILTER_DEFAULT_HEADERS_ID)) === null || _a === void 0 ? void 0 : _a.value; //ES2019
28070
- if (!defaultHeadersResponse || Object.keys(defaultHeadersResponse).length === 0)
28071
- return undefined;
28072
- return defaultHeadersResponse.split(",");
28073
- }
28074
28034
  forwardError(result, error) {
28075
28035
  result.error(error instanceof HttpErrorResponse ? error.error.message : error.message);
28076
28036
  result.complete();
@@ -28186,17 +28146,322 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
28186
28146
  type: Input
28187
28147
  }] } });
28188
28148
 
28149
+ /**
28150
+ * Search component search mode
28151
+ */
28152
+ var SearchMode;
28153
+ (function (SearchMode) {
28154
+ SearchMode[SearchMode["FULLTEXT"] = 0] = "FULLTEXT";
28155
+ SearchMode[SearchMode["ADVANCED"] = 1] = "ADVANCED";
28156
+ })(SearchMode || (SearchMode = {}));
28157
+
28158
+ /**
28159
+ * Extracts the item name and item icon (if any) rom a section of the navigation item task data.
28160
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
28161
+ * @param translateService is a service to translate label name
28162
+ */
28163
+ function extractIconAndTitle(dataSection, translateService) {
28164
+ const result = { name: '' };
28165
+ if (dataSection.length === 0) {
28166
+ throw new Error('The provided task data does not belong to a Navigation menu item task. Icon and title cannot be extracted');
28167
+ }
28168
+ const nameField = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX);
28169
+ if (nameField === undefined) {
28170
+ throw new Error('Navigation name could not be resolved');
28171
+ }
28172
+ const locale = translateService.currentLang.split('-')[0];
28173
+ result.name = locale in nameField.value.translations ? nameField.value.translations[locale] : nameField.value.defaultValue;
28174
+ const useIcon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX);
28175
+ if (useIcon !== undefined && useIcon.value) {
28176
+ const icon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX);
28177
+ if (icon === undefined) {
28178
+ this._log.error('Navigation entry icon could not be resolved, but is enabled. Icon was ignored');
28179
+ }
28180
+ else {
28181
+ result.icon = icon.value;
28182
+ }
28183
+ }
28184
+ return result;
28185
+ }
28186
+ /**
28187
+ * Based on provided parameter extracts allowed or banned roles into an Array of strings from a section of the navigation item task data.
28188
+ * Each item has format ROLE_IMPORT_ID:NET_IMPORT_ID
28189
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
28190
+ * @param roleFieldId ID of field containing banned or allowed role IDs
28191
+ * @returns an Array of string values representing role IDs
28192
+ */
28193
+ function extractRoles(dataSection, roleFieldId) {
28194
+ if (dataSection.length === 0) {
28195
+ throw new Error('The provided task data does not belong to a Navigation menu item task. Role entries cannot be extracted');
28196
+ }
28197
+ const roleIds = getFieldFromDataGroups(dataSection, roleFieldId);
28198
+ if (roleIds === undefined) {
28199
+ throw new Error('Navigation entry role authorization field could not be resolved');
28200
+ }
28201
+ return roleIds.choices.map(choice => choice.key);
28202
+ }
28203
+ /**
28204
+ * Extracts the data and creates a filter object from the navigation item task data.
28205
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
28206
+ */
28207
+ function extractFilterFromData(dataSection) {
28208
+ return extractFilterFromFilterField(extractFilterFieldFromData(dataSection));
28209
+ }
28210
+ /**
28211
+ * Extracts the filter field from the navigation item task data.
28212
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
28213
+ * @returns The extracted {@link FilterField} or `undefined` if it could not be extracted.
28214
+ */
28215
+ function extractFilterFieldFromData(dataSection) {
28216
+ const filterField = getFieldFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID);
28217
+ if (filterField === undefined || !(filterField instanceof FilterField)) {
28218
+ throw new Error(`Filter could not be extracted. The provided datagroups do not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'`);
28219
+ }
28220
+ return filterField;
28221
+ }
28222
+ /**
28223
+ * @returns a {@link SimpleFilter} containing the filter stored in the provided {@link FilterField}.
28224
+ * Throws an error if this is not possible.
28225
+ */
28226
+ function extractFilterFromFilterField(filterField) {
28227
+ if (filterField === undefined || !(filterField instanceof FilterField)) {
28228
+ throw new Error('Filter could not be resolved');
28229
+ }
28230
+ return SimpleFilter.fromQuery({ query: filterField.value }, filterField.filterMetadata.filterType);
28231
+ }
28232
+ /**
28233
+ * Extracts the selected search type from enumeration field of the navigation item task data.
28234
+ * @returns a {@link SearchMode} containing {@link SearchMode.ADVANCED} or {@link SearchMode.FULLTEXT} or {@link undefined}
28235
+ * if unexpected value is found
28236
+ * */
28237
+ function extractSearchTypeFromData(dataSection, typeFieldId) {
28238
+ const typeField = getFieldFromDataGroups(dataSection, typeFieldId);
28239
+ if (typeField === undefined) {
28240
+ throw new Error('Navigation entry search type field could not be resolved');
28241
+ }
28242
+ switch (typeField.value) {
28243
+ case 'fulltext':
28244
+ return SearchMode.FULLTEXT;
28245
+ case 'fulltext_advanced':
28246
+ return SearchMode.ADVANCED;
28247
+ default:
28248
+ return undefined;
28249
+ }
28250
+ }
28251
+ /**
28252
+ * Extracts field value from data
28253
+ * @returns value of extracted field
28254
+ * @throws Error if no field is found
28255
+ * */
28256
+ function extractFieldValueFromData(dataSection, fieldId) {
28257
+ const field = getFieldFromDataGroups(dataSection, fieldId);
28258
+ if (field === undefined) {
28259
+ throw new Error(`Field ${fieldId} could not be resolved`);
28260
+ }
28261
+ return field.value;
28262
+ }
28263
+
28264
+ function addAllowedNets(allowedNets, existingAllowedNets) {
28265
+ if (!!allowedNets && allowedNets.length > 0) {
28266
+ existingAllowedNets.next([...allowedNets]);
28267
+ }
28268
+ }
28269
+ /**
28270
+ * Convenience method that can be used as an allowed nets factory for tabbed task views.
28271
+ * If no allowed nets are provided in the injected data then an {@link AllowedNetsService} with no allowed nets is created.
28272
+ * It has a dependency on this class and {@link NAE_TAB_DATA} injection token.
28273
+ */
28274
+ function tabbedAllowedNetsServiceFactory(factory, tabData) {
28275
+ var _a;
28276
+ return factory.createFromArray((_a = tabData === null || tabData === void 0 ? void 0 : tabData.allowedNets) !== null && _a !== void 0 ? _a : []);
28277
+ }
28278
+ /**
28279
+ * Convenience method that can be used as an allowed nets factory for views that are loaded from filter process instances.
28280
+ * It has a dependency on this class and {@link NAE_NAVIGATION_ITEM_TASK_DATA} injection token.
28281
+ */
28282
+ function navigationItemTaskAllowedNetsServiceFactory(factory, baseAllowedNets, navigationItemTaskData) {
28283
+ const filterField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.FILTER_FIELD_ID);
28284
+ const allowedNetsField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.ALLOWED_NETS_FIELD_ID);
28285
+ if (filterField === undefined) {
28286
+ throw new Error(`Provided navigation item task data does not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'! Allowed nets cannot be generated from it!`);
28287
+ }
28288
+ const nets = new BehaviorSubject(Array.from(new Set([...filterField.allowedNets])));
28289
+ if (filterField.filterMetadata.inheritAllowedNets) {
28290
+ baseAllowedNets.allowedNets$.subscribe(allowedNets => {
28291
+ const netSet = new Set(allowedNets);
28292
+ nets.next(Array.from(netSet));
28293
+ });
28294
+ }
28295
+ if (!!allowedNetsField) {
28296
+ addAllowedNets(allowedNetsField.value, nets);
28297
+ allowedNetsField.valueChanges().subscribe(allowedNets => {
28298
+ addAllowedNets(allowedNetsField.value, nets);
28299
+ });
28300
+ }
28301
+ return factory.createFromObservable(nets.asObservable());
28302
+ }
28303
+ /**
28304
+ * Simplifies the creation of {@link AllowedNetsService} instances
28305
+ */
28306
+ class AllowedNetsServiceFactory {
28307
+ constructor(_processService, _petriNetResource, _configService, _log) {
28308
+ this._processService = _processService;
28309
+ this._petriNetResource = _petriNetResource;
28310
+ this._configService = _configService;
28311
+ this._log = _log;
28312
+ }
28313
+ /**
28314
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28315
+ * @returns an instance of {@link AllowedNetsService} with all nets set as the `allowedNets`
28316
+ */
28317
+ createWithAllNets() {
28318
+ return new AllowedNetsService(this._petriNetResource.getAll().pipe(switchMap(nets => {
28319
+ if (nets && Array.isArray(nets)) {
28320
+ return of(nets.map(n => n.identifier));
28321
+ }
28322
+ else {
28323
+ return of([]);
28324
+ }
28325
+ })), this._processService);
28326
+ }
28327
+ /**
28328
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28329
+ * @param allowedNetsIdentifiers identifiers of the allowed nets
28330
+ */
28331
+ createFromArray(allowedNetsIdentifiers) {
28332
+ return new AllowedNetsService(of(allowedNetsIdentifiers), this._processService);
28333
+ }
28334
+ /**
28335
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28336
+ * @param webViewPath path to the view as specified in its configuration. No leading backslash.
28337
+ * Allowed nets are loaded from the configuration of the view.
28338
+ */
28339
+ createFromConfig(webViewPath) {
28340
+ var _a, _b;
28341
+ const view = this._configService.getViewByPath(webViewPath);
28342
+ if (((_a = view === null || view === void 0 ? void 0 : view.layout) === null || _a === void 0 ? void 0 : _a.params) === undefined) {
28343
+ throw new Error(`Can't load configuration for view with webPath: '${webViewPath}'`);
28344
+ }
28345
+ const viewParams = view.layout.params;
28346
+ if (viewParams.allowedNets === undefined) {
28347
+ this._log.warn(`No 'allowedNets' provided for view with webPath '${webViewPath}'`);
28348
+ }
28349
+ return new AllowedNetsService(of((_b = viewParams.allowedNets) !== null && _b !== void 0 ? _b : []), this._processService);
28350
+ }
28351
+ /**
28352
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28353
+ * @param netIdentifiers$ observable containing the identifiers of the allowed nets.
28354
+ * When a new value is emitted the allowed nets will be updated.
28355
+ */
28356
+ createFromObservable(netIdentifiers$) {
28357
+ return new AllowedNetsService(netIdentifiers$, this._processService);
28358
+ }
28359
+ /**
28360
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28361
+ * @param filterCase a filter process instance
28362
+ * Allowed nets are set from filter process immediate data
28363
+ */
28364
+ createFromFilterCase(filterCase) {
28365
+ const filterData = getImmediateData(filterCase, UserFilterConstants.FILTER_FIELD_ID);
28366
+ if (filterData === undefined) {
28367
+ throw new Error(`Cannot get filter from case '${filterCase.title}' with id '${filterCase.stringId}'`);
28368
+ }
28369
+ return new AllowedNetsService(of(filterData.allowedNets), this._processService);
28370
+ }
28371
+ }
28372
+ AllowedNetsServiceFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, deps: [{ token: ProcessService }, { token: PetriNetResourceService }, { token: ConfigurationService }, { token: LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
28373
+ AllowedNetsServiceFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, providedIn: 'root' });
28374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, decorators: [{
28375
+ type: Injectable,
28376
+ args: [{
28377
+ providedIn: 'root'
28378
+ }]
28379
+ }], ctorParameters: function () { return [{ type: ProcessService }, { type: PetriNetResourceService }, { type: ConfigurationService }, { type: LoggerService }]; } });
28380
+
28381
+ class BaseAllowedNetsService {
28382
+ constructor() {
28383
+ this._baseAllowedNets = new BehaviorSubject([]);
28384
+ }
28385
+ ngOnDestroy() {
28386
+ this._baseAllowedNets.complete();
28387
+ if (this._sub !== undefined) {
28388
+ this._sub.unsubscribe();
28389
+ }
28390
+ }
28391
+ /**
28392
+ * Sets the new identifiers of the base allowed nets
28393
+ * @param nets new base net identifiers
28394
+ */
28395
+ set allowedNets(nets) {
28396
+ this._baseAllowedNets.next(nets);
28397
+ }
28398
+ /**
28399
+ * @deprecated This method should not be used. Use {@link BaseAllowedNetsService#allowedNets$} instead
28400
+ * @returns the currently set allowed nets. Returns an empty array if no value was set.
28401
+ */
28402
+ get allowedNets() {
28403
+ return this._baseAllowedNets.value;
28404
+ }
28405
+ /**
28406
+ * Subscribes to the provided `Observable` and forwards the emissions to the baseAllowedNets `Subject`.
28407
+ * If a new `Observable` is set, the previous Subscription is unsubscribed.
28408
+ * @param observableNets an observable emitting the new base net identifiers
28409
+ */
28410
+ set allowedNets$(observableNets) {
28411
+ if (this._sub !== undefined) {
28412
+ this._sub.unsubscribe();
28413
+ }
28414
+ this._sub = observableNets.subscribe(nets => {
28415
+ this._baseAllowedNets.next(nets);
28416
+ });
28417
+ }
28418
+ /**
28419
+ * @returns an observable that emits the currently set base allowed nets and any subsequent values
28420
+ */
28421
+ get allowedNets$() {
28422
+ return this._baseAllowedNets.asObservable();
28423
+ }
28424
+ }
28425
+ BaseAllowedNetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28426
+ BaseAllowedNetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, providedIn: 'root' });
28427
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, decorators: [{
28428
+ type: Injectable,
28429
+ args: [{
28430
+ providedIn: 'root'
28431
+ }]
28432
+ }], ctorParameters: function () { return []; } });
28433
+
28189
28434
  /**
28190
28435
  * This service is able to load the full saved filter including all of its ancestor filters.
28191
28436
  */
28192
28437
  class FilterExtractionService {
28193
- constructor(_filterRepository, _taskResourceService, _log) {
28438
+ constructor(_filterRepository, _taskResourceService, _factory, baseAllowedNets, _log) {
28194
28439
  this._filterRepository = _filterRepository;
28195
28440
  this._taskResourceService = _taskResourceService;
28441
+ this._factory = _factory;
28442
+ this.baseAllowedNets = baseAllowedNets;
28196
28443
  this._log = _log;
28197
28444
  }
28198
- extractCompleteFilterFromData(dataSection) {
28199
- const filterIndex = getFieldIndexFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID);
28445
+ extractAdditionalFilterAllowedNets(dataSection) {
28446
+ const taskRefIndex = getFieldIndexFromDataGroups(dataSection, GroupNavigationConstants.ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF);
28447
+ if (taskRefIndex === undefined) {
28448
+ return undefined;
28449
+ }
28450
+ const sliced = dataSection.slice(taskRefIndex.dataGroupIndex + 1);
28451
+ if (sliced.length == 0) {
28452
+ return undefined;
28453
+ }
28454
+ return navigationItemTaskAllowedNetsServiceFactory(this._factory, this.baseAllowedNets, sliced);
28455
+ }
28456
+ extractCompleteAdditionalFilterFromData(dataSection) {
28457
+ const taskRefIndex = getFieldIndexFromDataGroups(dataSection, GroupNavigationConstants.ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF);
28458
+ if (taskRefIndex === undefined) {
28459
+ return undefined;
28460
+ }
28461
+ return this.extractCompleteFilterFromData(dataSection.slice(taskRefIndex.dataGroupIndex + 1));
28462
+ }
28463
+ extractCompleteFilterFromData(dataSection, fieldId = UserFilterConstants.FILTER_FIELD_ID) {
28464
+ const filterIndex = getFieldIndexFromDataGroups(dataSection, fieldId);
28200
28465
  if (filterIndex === undefined) {
28201
28466
  return undefined;
28202
28467
  }
@@ -28208,7 +28473,7 @@ class FilterExtractionService {
28208
28473
  throw new Error('Filter segment could not be extracted from filter field');
28209
28474
  }
28210
28475
  const parentFilter = this.extractCompleteFilterFromData(dataSection.slice(filterIndex.dataGroupIndex + 1));
28211
- if (parentFilter !== undefined) {
28476
+ if (parentFilter !== undefined && parentFilter.type === filterSegment.type) {
28212
28477
  return filterSegment.merge(parentFilter, MergeOperator.AND);
28213
28478
  }
28214
28479
  // Is the filter view rooted?
@@ -28241,16 +28506,16 @@ class FilterExtractionService {
28241
28506
  return appOriginFilter;
28242
28507
  }
28243
28508
  }
28244
- // the same regexs is used in a backend filter process action. Please keep them in sync
28509
+ // the same regex is used in a backend filter process action. Please keep them in sync
28245
28510
  FilterExtractionService.UNTABBED_VIEW_ID_EXTRACTOR = '^.*?(-\\d+)?$';
28246
- FilterExtractionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, deps: [{ token: FilterRepository }, { token: TaskResourceService }, { token: LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
28511
+ FilterExtractionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, deps: [{ token: FilterRepository }, { token: TaskResourceService }, { token: AllowedNetsServiceFactory }, { token: BaseAllowedNetsService }, { token: LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
28247
28512
  FilterExtractionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, providedIn: 'root' });
28248
28513
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, decorators: [{
28249
28514
  type: Injectable,
28250
28515
  args: [{
28251
28516
  providedIn: 'root'
28252
28517
  }]
28253
- }], ctorParameters: function () { return [{ type: FilterRepository }, { type: TaskResourceService }, { type: LoggerService }]; } });
28518
+ }], ctorParameters: function () { return [{ type: FilterRepository }, { type: TaskResourceService }, { type: AllowedNetsServiceFactory }, { type: BaseAllowedNetsService }, { type: LoggerService }]; } });
28254
28519
 
28255
28520
  var UriContentType;
28256
28521
  (function (UriContentType) {
@@ -28556,6 +28821,15 @@ class ResultWithAfterActions {
28556
28821
  }
28557
28822
  }
28558
28823
 
28824
+ /**
28825
+ * Forces a re-render of the tree backed by the datasource
28826
+ */
28827
+ function refreshTree(tree) {
28828
+ const d = tree.data;
28829
+ tree.data = null;
28830
+ tree.data = d;
28831
+ }
28832
+
28559
28833
  class CaseTreeService {
28560
28834
  constructor(_caseResourceService, _treeCaseViewService, _taskResourceService, _logger, _processService, _sideMenuService, _translateService, _optionSelectorComponent, _treeConfiguration) {
28561
28835
  this._caseResourceService = _caseResourceService;
@@ -30628,15 +30902,6 @@ class ClausePredicate extends Predicate {
30628
30902
  }
30629
30903
  }
30630
30904
 
30631
- /**
30632
- * Search component search mode
30633
- */
30634
- var SearchMode;
30635
- (function (SearchMode) {
30636
- SearchMode[SearchMode["FULLTEXT"] = 0] = "FULLTEXT";
30637
- SearchMode[SearchMode["ADVANCED"] = 1] = "ADVANCED";
30638
- })(SearchMode || (SearchMode = {}));
30639
-
30640
30905
  /**
30641
30906
  * This service is used to signal to inputs in advanced search components, whether they should autofocus, or not.
30642
30907
  *
@@ -32243,6 +32508,26 @@ function navigationItemTaskCategoryFactory(categoryResolverService, navigationIt
32243
32508
  return cats;
32244
32509
  }
32245
32510
 
32511
+ function navigationItemCaseViewDefaultHeadersFactory(navigationItemTaskData) {
32512
+ return navigationItemDefaultHeadersFactory(navigationItemTaskData, GroupNavigationConstants.ITEM_FIELD_ID_USE_CASE_DEFAULT_HEADERS, GroupNavigationConstants.ITEM_FIELD_ID_CASE_DEFAULT_HEADERS);
32513
+ }
32514
+ function navigationItemTaskViewDefaultHeadersFactory(navigationItemTaskData) {
32515
+ return navigationItemDefaultHeadersFactory(navigationItemTaskData, GroupNavigationConstants.ITEM_FIELD_ID_USE_TASK_DEFAULT_HEADERS, GroupNavigationConstants.ITEM_FIELD_ID_TASK_DEFAULT_HEADERS);
32516
+ }
32517
+ function navigationItemDefaultHeadersFactory(navigationItemTaskData, useFieldId, defaultHeadersFieldId) {
32518
+ const isUse = extractFieldValueFromData(navigationItemTaskData, useFieldId);
32519
+ if (isUse) {
32520
+ const defaultHeaders = extractFieldValueFromData(navigationItemTaskData, defaultHeadersFieldId);
32521
+ if (defaultHeaders === undefined || defaultHeaders === "") {
32522
+ return undefined;
32523
+ }
32524
+ return defaultHeaders.split(',');
32525
+ }
32526
+ else {
32527
+ return undefined;
32528
+ }
32529
+ }
32530
+
32246
32531
  class IsEmptyPipe {
32247
32532
  /**
32248
32533
  * Check if is value is empty.
@@ -34885,176 +35170,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
34885
35170
  type: Input
34886
35171
  }] } });
34887
35172
 
34888
- class BaseAllowedNetsService {
34889
- constructor() {
34890
- this._baseAllowedNets = new BehaviorSubject([]);
34891
- }
34892
- ngOnDestroy() {
34893
- this._baseAllowedNets.complete();
34894
- if (this._sub !== undefined) {
34895
- this._sub.unsubscribe();
34896
- }
34897
- }
34898
- /**
34899
- * Sets the new identifiers of the base allowed nets
34900
- * @param nets new base net identifiers
34901
- */
34902
- set allowedNets(nets) {
34903
- this._baseAllowedNets.next(nets);
34904
- }
34905
- /**
34906
- * @deprecated This method should not be used. Use {@link BaseAllowedNetsService#allowedNets$} instead
34907
- * @returns the currently set allowed nets. Returns an empty array if no value was set.
34908
- */
34909
- get allowedNets() {
34910
- return this._baseAllowedNets.value;
34911
- }
34912
- /**
34913
- * Subscribes to the provided `Observable` and forwards the emissions to the baseAllowedNets `Subject`.
34914
- * If a new `Observable` is set, the previous Subscription is unsubscribed.
34915
- * @param observableNets an observable emitting the new base net identifiers
34916
- */
34917
- set allowedNets$(observableNets) {
34918
- if (this._sub !== undefined) {
34919
- this._sub.unsubscribe();
34920
- }
34921
- this._sub = observableNets.subscribe(nets => {
34922
- this._baseAllowedNets.next(nets);
34923
- });
34924
- }
34925
- /**
34926
- * @returns an observable that emits the currently set base allowed nets and any subsequent values
34927
- */
34928
- get allowedNets$() {
34929
- return this._baseAllowedNets.asObservable();
34930
- }
34931
- }
34932
- BaseAllowedNetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34933
- BaseAllowedNetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, providedIn: 'root' });
34934
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, decorators: [{
34935
- type: Injectable,
34936
- args: [{
34937
- providedIn: 'root'
34938
- }]
34939
- }], ctorParameters: function () { return []; } });
34940
-
34941
- function addAllowedNets(allowedNets, existingAllowedNets) {
34942
- if (!!allowedNets && allowedNets.length > 0) {
34943
- existingAllowedNets.next([...allowedNets]);
34944
- }
34945
- }
34946
- /**
34947
- * Convenience method that can be used as an allowed nets factory for tabbed task views.
34948
- * If no allowed nets are provided in the injected data then an {@link AllowedNetsService} with no allowed nets is created.
34949
- * It has a dependency on this class and {@link NAE_TAB_DATA} injection token.
34950
- */
34951
- function tabbedAllowedNetsServiceFactory(factory, tabData) {
34952
- var _a;
34953
- return factory.createFromArray((_a = tabData === null || tabData === void 0 ? void 0 : tabData.allowedNets) !== null && _a !== void 0 ? _a : []);
34954
- }
34955
- /**
34956
- * Convenience method that can be used as an allowed nets factory for views that are loaded from filter process instances.
34957
- * It has a dependency on this class and {@link NAE_NAVIGATION_ITEM_TASK_DATA} injection token.
34958
- */
34959
- function navigationItemTaskAllowedNetsServiceFactory(factory, baseAllowedNets, navigationItemTaskData) {
34960
- const filterField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.FILTER_FIELD_ID);
34961
- const allowedNetsField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.ALLOWED_NETS_FIELD_ID);
34962
- if (filterField === undefined) {
34963
- throw new Error(`Provided navigation item task data does not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'! Allowed nets cannot be generated from it!`);
34964
- }
34965
- const nets = new BehaviorSubject(Array.from(new Set([...filterField.allowedNets])));
34966
- if (filterField.filterMetadata.inheritAllowedNets) {
34967
- baseAllowedNets.allowedNets$.subscribe(allowedNets => {
34968
- const netSet = new Set(allowedNets);
34969
- nets.next(Array.from(netSet));
34970
- });
34971
- }
34972
- if (!!allowedNetsField) {
34973
- addAllowedNets(allowedNetsField.value, nets);
34974
- allowedNetsField.valueChanges().subscribe(allowedNets => {
34975
- addAllowedNets(allowedNetsField.value, nets);
34976
- });
34977
- }
34978
- return factory.createFromObservable(nets.asObservable());
34979
- }
34980
- /**
34981
- * Simplifies the creation of {@link AllowedNetsService} instances
34982
- */
34983
- class AllowedNetsServiceFactory {
34984
- constructor(_processService, _petriNetResource, _configService, _log) {
34985
- this._processService = _processService;
34986
- this._petriNetResource = _petriNetResource;
34987
- this._configService = _configService;
34988
- this._log = _log;
34989
- }
34990
- /**
34991
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
34992
- * @returns an instance of {@link AllowedNetsService} with all nets set as the `allowedNets`
34993
- */
34994
- createWithAllNets() {
34995
- return new AllowedNetsService(this._petriNetResource.getAll().pipe(switchMap(nets => {
34996
- if (nets && Array.isArray(nets)) {
34997
- return of(nets.map(n => n.identifier));
34998
- }
34999
- else {
35000
- return of([]);
35001
- }
35002
- })), this._processService);
35003
- }
35004
- /**
35005
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
35006
- * @param allowedNetsIdentifiers identifiers of the allowed nets
35007
- */
35008
- createFromArray(allowedNetsIdentifiers) {
35009
- return new AllowedNetsService(of(allowedNetsIdentifiers), this._processService);
35010
- }
35011
- /**
35012
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
35013
- * @param webViewPath path to the view as specified in its configuration. No leading backslash.
35014
- * Allowed nets are loaded from the configuration of the view.
35015
- */
35016
- createFromConfig(webViewPath) {
35017
- var _a, _b;
35018
- const view = this._configService.getViewByPath(webViewPath);
35019
- if (((_a = view === null || view === void 0 ? void 0 : view.layout) === null || _a === void 0 ? void 0 : _a.params) === undefined) {
35020
- throw new Error(`Can't load configuration for view with webPath: '${webViewPath}'`);
35021
- }
35022
- const viewParams = view.layout.params;
35023
- if (viewParams.allowedNets === undefined) {
35024
- this._log.warn(`No 'allowedNets' provided for view with webPath '${webViewPath}'`);
35025
- }
35026
- return new AllowedNetsService(of((_b = viewParams.allowedNets) !== null && _b !== void 0 ? _b : []), this._processService);
35027
- }
35028
- /**
35029
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
35030
- * @param netIdentifiers$ observable containing the identifiers of the allowed nets.
35031
- * When a new value is emitted the allowed nets will be updated.
35032
- */
35033
- createFromObservable(netIdentifiers$) {
35034
- return new AllowedNetsService(netIdentifiers$, this._processService);
35035
- }
35036
- /**
35037
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
35038
- * @param filterCase a filter process instance
35039
- * Allowed nets are set from filter process immediate data
35040
- */
35041
- createFromFilterCase(filterCase) {
35042
- const filterData = getImmediateData(filterCase, UserFilterConstants.FILTER_FIELD_ID);
35043
- if (filterData === undefined) {
35044
- throw new Error(`Cannot get filter from case '${filterCase.title}' with id '${filterCase.stringId}'`);
35045
- }
35046
- return new AllowedNetsService(of(filterData.allowedNets), this._processService);
35047
- }
35048
- }
35049
- AllowedNetsServiceFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, deps: [{ token: ProcessService }, { token: PetriNetResourceService }, { token: ConfigurationService }, { token: LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
35050
- AllowedNetsServiceFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, providedIn: 'root' });
35051
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, decorators: [{
35052
- type: Injectable,
35053
- args: [{
35054
- providedIn: 'root'
35055
- }]
35056
- }], ctorParameters: function () { return [{ type: ProcessService }, { type: PetriNetResourceService }, { type: ConfigurationService }, { type: LoggerService }]; } });
35057
-
35058
35173
  /* SERVICES */
35059
35174
 
35060
35175
  /* EVENT OUTCOMES */
@@ -35100,5 +35215,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
35100
35215
  * Generated bundle index. Do not edit.
35101
35216
  */
35102
35217
 
35103
- export { AbstractAddChildNodeComponent, AbstractAdvancedSearchComponent, AbstractAuthenticationOverlayComponent, AbstractBaseDataFieldComponent, AbstractBooleanDefaultFieldComponent, AbstractBooleanFieldComponent, AbstractBreadcrumbsComponent, AbstractButtonDefaultFieldComponent, AbstractButtonFieldComponent, AbstractCaseListComponent, AbstractCaseListPaginatorComponent, AbstractCasePanelComponent, AbstractCaseRefDefaultComponent, AbstractCaseViewComponent, AbstractChangePasswordComponent, AbstractCountCardComponent, AbstractCurrencyNumberFieldComponent, AbstractCustomCardComponent, AbstractDashboardBarChartTextFieldComponent, AbstractDashboardContentComponent, AbstractDashboardIframeTextFieldComponent, AbstractDashboardLineChartTextFieldComponent, AbstractDashboardPieChartTextFieldComponent, AbstractDashboardPortalTextFieldComponent, AbstractDashboardTextFieldComponent, AbstractDataFieldTemplateComponent, AbstractDateDefaultFieldComponent, AbstractDateFieldComponent, AbstractDateTimeDefaultFieldComponent, AbstractDateTimeFieldComponent, AbstractDefaultNumberFieldComponent, AbstractEditModeComponent, AbstractEmailSubmissionFormComponent, AbstractEnumerationAutocompleteDynamicFieldComponent, AbstractEnumerationAutocompleteSelectFieldComponent, AbstractEnumerationFieldComponent, AbstractEnumerationIconFieldComponent, AbstractEnumerationListFieldComponent, AbstractEnumerationSelectFieldComponent, AbstractEnumerationStepperFieldComponent, AbstractFieldComponentResolverComponent, AbstractFileDefaultFieldComponent, AbstractFileFieldComponent, AbstractFileListDefaultFieldComponent, AbstractFileListFieldComponent, AbstractFilterDefaultFieldComponent, AbstractFilterFieldComponent, AbstractFilterFieldContentComponent, AbstractFilterFieldTabViewComponent, AbstractFilterFieldTabViewContentComponent, AbstractFilterSelectorComponent, AbstractFilterSelectorListItemComponent, AbstractForgottenPasswordComponent, AbstractFulltextSearchComponent, AbstractGroupNavigationComponentResolverComponent, AbstractHeaderComponent, AbstractHeaderService, AbstractHtmlTextareaFieldComponent, AbstractI18nDividerFieldComponent, AbstractI18nErrorsComponent, AbstractI18nFieldComponent, AbstractI18nTextFieldComponent, AbstractIframeCardComponent, AbstractImmediateFilterTextComponent, AbstractImmediateFilterTextContentComponent, AbstractImportNetComponent, AbstractInternalLinkComponent, AbstractLanguageSelectorComponent, AbstractLdapGroupRoleAssignmentComponent, AbstractLegalNoticeComponent, AbstractLoadFilterComponent, AbstractLoadingModeComponent, AbstractLoggerService, AbstractLoginFormComponent, AbstractLogoutShortcutComponent, AbstractMultiUserAssignComponent, AbstractMultiUserAssignItemComponent, AbstractMultiUserAssignListComponent, AbstractMultichoiceAutocompleteFieldComponentComponent, AbstractMultichoiceFieldComponent, AbstractMultichoiceListFieldComponent, AbstractMultichoiceSelectFieldComponent, AbstractNavigationDoubleDrawerComponent, AbstractNavigationDrawerComponent, AbstractNavigationRailComponent, AbstractNavigationTreeComponent, AbstractNewCaseComponent, AbstractNumberErrorsComponent, AbstractNumberFieldComponent, AbstractOptionSelectorComponent, AbstractPanelComponent, AbstractPanelItemComponent, AbstractPasswordTextFieldComponent, AbstractProfileComponent, AbstractQuickPanelComponent, AbstractRegistrationComponent, AbstractRegistrationFormComponent, AbstractRemoveNodeComponent, AbstractResourceProvider, AbstractResourceService, AbstractRichTextareaFieldComponent, AbstractRoleAssignmentComponent, AbstractSaveFilterComponent, AbstractSearchClauseComponent, AbstractSearchComponent, AbstractSearchConfigurationInputComponent, AbstractSearchModeComponent, AbstractSearchOperandInputComponent, AbstractSearchPredicateComponent, AbstractSessionIdleComponent, AbstractSideMenuContainerComponent, AbstractSimpleTextFieldComponent, AbstractSingleTaskComponent, AbstractSingleTaskViewComponent, AbstractSortModeComponent, AbstractSortableViewComponent, AbstractTabCreationDetectorComponent, AbstractTabViewComponent, AbstractTabbedCaseViewComponent, AbstractTabbedTaskViewComponent, AbstractTaskContentComponent, AbstractTaskListComponent, AbstractTaskListPaginationComponent, AbstractTaskPanelComponent, AbstractTaskRefDashboardFieldComponent, AbstractTaskRefDashboardTileComponent, AbstractTaskRefFieldComponent, AbstractTaskRefListFieldComponent, AbstractTaskViewComponent, AbstractTextErrorsComponent, AbstractTextFieldComponent, AbstractTextareaFieldComponent, AbstractToolbarComponent, AbstractTreeComponent, AbstractTreeTaskContentComponent, AbstractUserAssignComponent, AbstractUserAssignItemComponent, AbstractUserAssignListComponent, AbstractUserCardComponent, AbstractUserDefaultFieldComponent, AbstractUserFieldComponent, AbstractUserImpersonateComponent, AbstractUserInviteComponent, AbstractUserListDefaultFieldComponent, AbstractUserListFieldComponent, AbstractViewWithHeadersComponent, AbstractWorkflowPanelComponent, AbstractWorkflowViewComponent, AccessService, ActiveGroupService, AdvancedSearchComponentInitializationService, AfterAction, AlertDialogComponent, AlertDialogModule, AllowedNetsService, AllowedNetsServiceFactory, AnonymousAuthenticationInterceptor, AnonymousService, AssignPolicy, AssignPolicyService, AssignTaskService, AuthenticationGuardService, AuthenticationInterceptor, AuthenticationMethodService, AuthenticationModule, AuthenticationService, AuthorityGuardService, AutocompleteCategory, BOOLEAN_VALUE_LABEL_ENABLED, BaseAllowedNetsService, BasicAuthenticationService, BooleanField, BooleanFieldValidation, BooleanOperator, ButtonField, ButtonFieldValidation, CONFIRM_PASSWORD, CallChainService, CancelTaskService, CaseAuthor, CaseCreationDate, CaseCreationDateTime, CaseDataset, CaseHeaderService, CaseListFontColorService, CaseMetaField, CaseNetAttributeAutocompleteCategory, CaseProcess, CaseRefField, CaseResourceService, CaseRole, CaseSearch, CaseSimpleDataset, CaseStringId, CaseTask, CaseTitle, CaseTreeNode, CaseTreeService, CaseViewService, CaseVisualId, Categories, Category, CategoryFactory, CategoryResolverService, ChangedFieldsService, ClausePredicate, ComponentPrefixes, ComponentRegistryService, ConfigParams, ConfigurationInput, ConfigurationService, ConfirmDialogComponent, ConfirmDialogModule, ConsoleLogPublisher, ContainsPipe, CovalentModule, CurrencyModule, CustomDateAdapter, DATA_FIELD_PORTAL_DATA, DATE_FORMAT, DATE_FORMAT_STRING, DATE_TIME_FORMAT, DATE_TIME_FORMAT_STRING, DEFAULT, DEFAULT_LANGUAGE_CODE, Dashboard, DashboardCardTypes, DashboardMultiData, DashboardResourceService, DashboardSingleData, DataField, DataFieldsModule, DataFocusPolicy, DataFocusPolicyService, DataGroupAlignment, DatafieldMapKey, DateField, DateTimeField, DefaultSearchCategoriesModule, DelegateTaskService, DialogModule, DialogService, DynamicEnumerationField, DynamicNavigationRouteProviderService, EditableClausePredicate, EditableClausePredicateWithGenerators, EditableElementaryPredicate, EditablePredicate, EditablePredicateWithGenerator, ElementaryPredicate, EnumerationAutocompleteFilterProperty, EnumerationField, EnumerationFieldValidation, Equals, EqualsDate, ErrorSnackBarComponent, EventConstants, EventQueueService, EventService, FILTER_DEFAULT_HEADERS_ID, FILTER_IDENTIFIERS, FILTER_VIEW_TASK_TRANSITION_ID, FieldAlignment, FieldConverterService, FieldTypeResource, FileField, FileListField, FileListFieldValidation, FilePreviewType, FileUploadMIMEType, FileUploadModel, Filter, FilterExtractionService, FilterField, FilterRepository, FilterType, FilteredArray, FinishPolicy, FinishPolicyService, FinishTaskService, GenericSnackBarComponent, GroupGuardService, GroupNavigationComponentResolverService, GroupNavigationConstants, HeaderColumn, HeaderColumnType, HeaderMode, HeaderSearchService, HeaderType, HttpLoaderFactory, I18nField, I18nFieldValidation, ImpersonationService, ImpersonationUserListService, ImpersonationUserResourceService, ImpersonationUserSelectService, InRange, InRangeDate, IncrementingCounter, IsEmptyPipe, IsNonEmptyPipe, IsNull, LanguageIconsService, LanguageService, LdapGroupListService, LdapGroupResourceService, LessThan, LessThanDate, LessThanDateTime, LetContext, LetDirective, Like, LoadingEmitter, LoadingWithFilterEmitter, LocalStorageLogPublisher, LogEntry, LogLevel, LogPublisher, LogPublisherService, LoggerService, MaterialAppearance, MaterialModule, MergeOperator, MergedFilter, MockAuthenticationMethodService, MockAuthenticationService, MockEndpoint, MockProfileService, MockSignUpService, MockUserPreferenceService, MockUserResourceService, MockUserService, MoreThan, MoreThanDate, MoreThanDateTime, MultichoiceAutocompleteFilterProperty, MultichoiceField, NAE_ADMIN_IMPERSONATE_COMPONENT, NAE_ADMIN_IMPERSONATE_DIALOG_COMPONENT, NAE_ASYNC_RENDERING_CONFIGURATION, NAE_AUTOSWITCH_TAB_TOKEN, NAE_BASE_FILTER, NAE_CASE_REF_CREATE_CASE, NAE_CASE_REF_SEARCH, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_HEADERS, NAE_DEFAULT_MIN_PASSWORD_LENGTH, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, NAE_FILES_UPLOAD_COMPONENT, NAE_FILES_UPLOAD_DIALOG_COMPONENT, NAE_FILTERS_FILTER, NAE_FILTER_FIELD, NAE_FILTER_TEXT, NAE_GROUP_NAVIGATION_COMPONENT_RESOLVER_COMPONENT, NAE_INFORM_ABOUT_INVALID_DATA, NAE_LOAD_FILTER_COMPONENT, NAE_LOAD_FILTER_DIALOG_COMPONENT, NAE_MIN_PASSWORD_LENGTH, NAE_NAVIGATION_ITEM_TASK_DATA, NAE_NET_ALL_VERSIONS, NAE_NET_VERSION_VISIBLE, NAE_NEW_CASE_COMPONENT, NAE_NEW_CASE_CONFIGURATION, NAE_NEW_CASE_CREATION_CONFIGURATION_DATA, NAE_NEW_CASE_DIALOG_COMPONENT, NAE_OPEN_EXISTING_TAB, NAE_OPTION_SELECTOR_COMPONENT, NAE_OPTION_SELECTOR_DIALOG_COMPONENT, NAE_PREFERRED_TASK_ENDPOINT, NAE_ROUTING_CONFIGURATION_PATH, NAE_SAVE_FILTER_COMPONENT, NAE_SAVE_FILTER_DIALOG_COMPONENT, NAE_SEARCH_CATEGORIES, NAE_SEARCH_COMPONENT_CONFIGURATION, NAE_SIDE_MENU_CONTROL, NAE_SNACKBAR_HORIZONTAL_POSITION, NAE_SNACKBAR_VERTICAL_POSITION, NAE_TAB_DATA, NAE_TASK_FORCE_OPEN, NAE_TASK_OPERATIONS, NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, NAE_TASK_VIEW_CONFIGURATION, NAE_TREE_CASE_VIEW_CONFIGURATION, NAE_URI_NODE_CASES_PAGE_SIZE, NAE_USER_ASSIGN_COMPONENT, NAE_USER_ASSIGN_DIALOG_COMPONENT, NAE_USER_IMPERSONATE_COMPONENT, NAE_USER_IMPERSONATE_DIALOG_COMPONENT, NAE_VIEW_ID, NAE_VIEW_ID_SEGMENT, NAE_WORKFLOW_SERVICE_CONFIRM_DELETE, NAE_WORKFLOW_SERVICE_FILTER, Net, NetAttributeAutocompleteCategory, NextGroupService, NoConfigurationAutocompleteCategory, NoConfigurationCategory, NoConfigurationUserAutocompleteCategory, NotEquals, NotEqualsDate, NotEqualsDateTime, NullAuthenticationService, NullTaskOperations, NumberField, NumberFieldValidation, OLD_PASSWORD, OpenedTab, Operator, OperatorResolverService, OperatorService, OperatorTemplatePart, OperatorTemplatePartType, Operators, OrganizationListService, OverflowService, PASSWORD, PUBLISHERS, PageLoadRequestContext, PaginationParams, PaginationSort, PaperViewService, PermissionService, PermissionType, PetriNetResourceService, Predicate, PredicateWithGenerator, ProcessList, ProcessService, ProfileModule, ProfileService, ProgressType, PromptDialogComponent, PromptDialogModule, PublicCaseResourceService, PublicPetriNetResourceService, PublicProcessService, PublicTaskLoadingService, PublicTaskResourceService, PublicUrlResolverService, Query, QueuedEvent, RedirectService, ResourceProvider, ResultWithAfterActions, RoleAssignmentLdapGroupService, RoleAssignmentService, RoleGuardService, RoutingBuilderService, SearchIndex, SearchIndexResolverService, SearchInputType, SearchMode, SearchService, SelectedCaseService, SessionIdleTimerService, SessionService, SideMenuControl, SideMenuRef, SideMenuService, SideMenuSize, SignUpModule, SignUpService, SimpleFilter, SingleTaskContentService, SnackBarComponent, SnackBarHorizontalPosition, SnackBarModule, SnackBarService, SnackBarVerticalPosition, SpinnerOverlayService, Subgrid, SubjectTaskOperations, Substring, SuccessSnackBarComponent, TabLabelStream, TabView, TabbedVirtualScrollComponent, TaskAssignee, TaskConst, TaskContentService, TaskDataService, TaskElementType, TaskEndpoint, TaskEvent, TaskEventService, TaskHandlingService, TaskHeaderService, TaskMetaField, TaskNetAttributeAutocompleteCategory, TaskProcess, TaskRefComponents, TaskRefDashboardConstants, TaskRefDashboardTileConstants, TaskRefField, TaskRequestStateService, TaskResourceService, TaskRole, TaskTask, TaskViewService, TemplateAppearance, TestCaseBaseFilterProvider, TestCaseViewAllowedNetsFactory, TestConfigurationService, TestMockDependenciesModule, TestNoAllowedNetsFactory, TestTaskBaseFilterProvider, TestTaskViewAllowedNetsFactory, TestViewService, TextAreaField, TextAreaHeight, TextField, TextFieldComponent, TextFieldValidation, TextFieldView, TranslateLibModule, TreeCaseViewService, TreePetriflowIdentifiers, TreeTaskContentService, UnlimitedTaskContentService, UriContentType, UriResourceService, UriService, User, UserAutocomplete, UserComparatorService, UserField, UserFilterConstants, UserFiltersService, UserImpersonationConstants, UserInviteService, UserListField, UserListService, UserListValue, UserPreferenceService, UserResourceService, UserService, UserTransformer, UserValue, UtilityModule, ViewIdService, ViewService, WarningSnackBarComponent, WorkflowHeaderService, WorkflowMetaField, WorkflowViewService, WrappedBoolean, arrayToObservable, authenticationServiceFactory, clearTimeInformation, configureCategory, createMockCase, createMockCaseOutcome, createMockDataGroup, createMockDependencies, createMockField, createMockGetDataOutcome, createMockImmediateData, createMockNet, createMockPage, createMockPetriNetOutcome, createMockSetDataOutcome, createMockTask, createMockTaskOutcome, createSortParam, createTaskEventNotification, decodeBase64, defaultCaseSearchCategoriesFactory, defaultTaskSearchCategoriesFactory, destroySubscription, encodeBase64, extractFilterFieldFromData, extractFilterFromData, extractFilterFromFilterField, extractIconAndTitle, extractRoles, getField, getFieldFromDataGroups, getFieldIndex, getFieldIndexFromDataGroups, getImmediateData, getNetAndCreateCase, groupNavigationViewIdSegmentFactory, hasContent, loadAllPages, mockUserAutocompleteValue, navigationItemTaskAllowedNetsServiceFactory, navigationItemTaskCategoryFactory, navigationItemTaskFilterFactory, ofVoid, processMessageResponse, publicBaseFilterFactory, publicFactoryResolver, refreshTree, tabbedAllowedNetsServiceFactory, tabbedTaskViewConfigurationFactory, toMoment };
35218
+ export { AbstractAddChildNodeComponent, AbstractAdvancedSearchComponent, AbstractAuthenticationOverlayComponent, AbstractBaseDataFieldComponent, AbstractBooleanDefaultFieldComponent, AbstractBooleanFieldComponent, AbstractBreadcrumbsComponent, AbstractButtonDefaultFieldComponent, AbstractButtonFieldComponent, AbstractCaseListComponent, AbstractCaseListPaginatorComponent, AbstractCasePanelComponent, AbstractCaseRefDefaultComponent, AbstractCaseViewComponent, AbstractChangePasswordComponent, AbstractCountCardComponent, AbstractCurrencyNumberFieldComponent, AbstractCustomCardComponent, AbstractDashboardBarChartTextFieldComponent, AbstractDashboardContentComponent, AbstractDashboardIframeTextFieldComponent, AbstractDashboardLineChartTextFieldComponent, AbstractDashboardPieChartTextFieldComponent, AbstractDashboardPortalTextFieldComponent, AbstractDashboardTextFieldComponent, AbstractDataFieldTemplateComponent, AbstractDateDefaultFieldComponent, AbstractDateFieldComponent, AbstractDateTimeDefaultFieldComponent, AbstractDateTimeFieldComponent, AbstractDefaultNumberFieldComponent, AbstractEditModeComponent, AbstractEmailSubmissionFormComponent, AbstractEnumerationAutocompleteDynamicFieldComponent, AbstractEnumerationAutocompleteSelectFieldComponent, AbstractEnumerationFieldComponent, AbstractEnumerationIconFieldComponent, AbstractEnumerationListFieldComponent, AbstractEnumerationSelectFieldComponent, AbstractEnumerationStepperFieldComponent, AbstractFieldComponentResolverComponent, AbstractFileDefaultFieldComponent, AbstractFileFieldComponent, AbstractFileListDefaultFieldComponent, AbstractFileListFieldComponent, AbstractFilterDefaultFieldComponent, AbstractFilterFieldComponent, AbstractFilterFieldContentComponent, AbstractFilterFieldTabViewComponent, AbstractFilterFieldTabViewContentComponent, AbstractFilterSelectorComponent, AbstractFilterSelectorListItemComponent, AbstractForgottenPasswordComponent, AbstractFulltextSearchComponent, AbstractGroupNavigationComponentResolverComponent, AbstractHeaderComponent, AbstractHeaderService, AbstractHtmlTextareaFieldComponent, AbstractI18nDividerFieldComponent, AbstractI18nErrorsComponent, AbstractI18nFieldComponent, AbstractI18nTextFieldComponent, AbstractIframeCardComponent, AbstractImmediateFilterTextComponent, AbstractImmediateFilterTextContentComponent, AbstractImportNetComponent, AbstractInternalLinkComponent, AbstractLanguageSelectorComponent, AbstractLdapGroupRoleAssignmentComponent, AbstractLegalNoticeComponent, AbstractLoadFilterComponent, AbstractLoadingModeComponent, AbstractLoggerService, AbstractLoginFormComponent, AbstractLogoutShortcutComponent, AbstractMultiUserAssignComponent, AbstractMultiUserAssignItemComponent, AbstractMultiUserAssignListComponent, AbstractMultichoiceAutocompleteFieldComponentComponent, AbstractMultichoiceFieldComponent, AbstractMultichoiceListFieldComponent, AbstractMultichoiceSelectFieldComponent, AbstractNavigationDoubleDrawerComponent, AbstractNavigationDrawerComponent, AbstractNavigationRailComponent, AbstractNavigationTreeComponent, AbstractNewCaseComponent, AbstractNumberErrorsComponent, AbstractNumberFieldComponent, AbstractOptionSelectorComponent, AbstractPanelComponent, AbstractPanelItemComponent, AbstractPasswordTextFieldComponent, AbstractProfileComponent, AbstractQuickPanelComponent, AbstractRegistrationComponent, AbstractRegistrationFormComponent, AbstractRemoveNodeComponent, AbstractResourceProvider, AbstractResourceService, AbstractRichTextareaFieldComponent, AbstractRoleAssignmentComponent, AbstractSaveFilterComponent, AbstractSearchClauseComponent, AbstractSearchComponent, AbstractSearchConfigurationInputComponent, AbstractSearchModeComponent, AbstractSearchOperandInputComponent, AbstractSearchPredicateComponent, AbstractSessionIdleComponent, AbstractSideMenuContainerComponent, AbstractSimpleTextFieldComponent, AbstractSingleTaskComponent, AbstractSingleTaskViewComponent, AbstractSortModeComponent, AbstractSortableViewComponent, AbstractTabCreationDetectorComponent, AbstractTabViewComponent, AbstractTabbedCaseViewComponent, AbstractTabbedTaskViewComponent, AbstractTaskContentComponent, AbstractTaskListComponent, AbstractTaskListPaginationComponent, AbstractTaskPanelComponent, AbstractTaskRefDashboardFieldComponent, AbstractTaskRefDashboardTileComponent, AbstractTaskRefFieldComponent, AbstractTaskRefListFieldComponent, AbstractTaskViewComponent, AbstractTextErrorsComponent, AbstractTextFieldComponent, AbstractTextareaFieldComponent, AbstractToolbarComponent, AbstractTreeComponent, AbstractTreeTaskContentComponent, AbstractUserAssignComponent, AbstractUserAssignItemComponent, AbstractUserAssignListComponent, AbstractUserCardComponent, AbstractUserDefaultFieldComponent, AbstractUserFieldComponent, AbstractUserImpersonateComponent, AbstractUserInviteComponent, AbstractUserListDefaultFieldComponent, AbstractUserListFieldComponent, AbstractViewWithHeadersComponent, AbstractWorkflowPanelComponent, AbstractWorkflowViewComponent, AccessService, ActiveGroupService, AdvancedSearchComponentInitializationService, AfterAction, AlertDialogComponent, AlertDialogModule, AllowedNetsService, AllowedNetsServiceFactory, AnonymousAuthenticationInterceptor, AnonymousService, AssignPolicy, AssignPolicyService, AssignTaskService, AuthenticationGuardService, AuthenticationInterceptor, AuthenticationMethodService, AuthenticationModule, AuthenticationService, AuthorityGuardService, AutocompleteCategory, BOOLEAN_VALUE_LABEL_ENABLED, BaseAllowedNetsService, BasicAuthenticationService, BooleanField, BooleanFieldValidation, BooleanOperator, ButtonField, ButtonFieldValidation, CONFIRM_PASSWORD, CallChainService, CancelTaskService, CaseAuthor, CaseCreationDate, CaseCreationDateTime, CaseDataset, CaseHeaderService, CaseListFontColorService, CaseMetaField, CaseNetAttributeAutocompleteCategory, CaseProcess, CaseRefField, CaseResourceService, CaseRole, CaseSearch, CaseSimpleDataset, CaseStringId, CaseTask, CaseTitle, CaseTreeNode, CaseTreeService, CaseViewService, CaseVisualId, Categories, Category, CategoryFactory, CategoryResolverService, ChangedFieldsService, ClausePredicate, ComponentPrefixes, ComponentRegistryService, ConfigParams, ConfigurationInput, ConfigurationService, ConfirmDialogComponent, ConfirmDialogModule, ConsoleLogPublisher, ContainsPipe, CovalentModule, CurrencyModule, CustomDateAdapter, DATA_FIELD_PORTAL_DATA, DATE_FORMAT, DATE_FORMAT_STRING, DATE_TIME_FORMAT, DATE_TIME_FORMAT_STRING, DEFAULT, DEFAULT_LANGUAGE_CODE, Dashboard, DashboardCardTypes, DashboardMultiData, DashboardResourceService, DashboardSingleData, DataField, DataFieldsModule, DataFocusPolicy, DataFocusPolicyService, DataGroupAlignment, DatafieldMapKey, DateField, DateTimeField, DefaultSearchCategoriesModule, DelegateTaskService, DialogModule, DialogService, DynamicEnumerationField, DynamicNavigationRouteProviderService, EditableClausePredicate, EditableClausePredicateWithGenerators, EditableElementaryPredicate, EditablePredicate, EditablePredicateWithGenerator, ElementaryPredicate, EnumerationAutocompleteFilterProperty, EnumerationField, EnumerationFieldValidation, Equals, EqualsDate, ErrorSnackBarComponent, EventConstants, EventQueueService, EventService, FieldAlignment, FieldConverterService, FieldTypeResource, FileField, FileListField, FileListFieldValidation, FilePreviewType, FileUploadMIMEType, FileUploadModel, Filter, FilterExtractionService, FilterField, FilterRepository, FilterType, FilteredArray, FinishPolicy, FinishPolicyService, FinishTaskService, GenericSnackBarComponent, GroupGuardService, GroupNavigationComponentResolverService, GroupNavigationConstants, HeaderColumn, HeaderColumnType, HeaderMode, HeaderSearchService, HeaderType, HttpLoaderFactory, I18nField, I18nFieldValidation, ImpersonationService, ImpersonationUserListService, ImpersonationUserResourceService, ImpersonationUserSelectService, InRange, InRangeDate, IncrementingCounter, IsEmptyPipe, IsNonEmptyPipe, IsNull, LanguageIconsService, LanguageService, LdapGroupListService, LdapGroupResourceService, LessThan, LessThanDate, LessThanDateTime, LetContext, LetDirective, Like, LoadingEmitter, LoadingWithFilterEmitter, LocalStorageLogPublisher, LogEntry, LogLevel, LogPublisher, LogPublisherService, LoggerService, MENU_IDENTIFIERS, MaterialAppearance, MaterialModule, MergeOperator, MergedFilter, MockAuthenticationMethodService, MockAuthenticationService, MockEndpoint, MockProfileService, MockSignUpService, MockUserPreferenceService, MockUserResourceService, MockUserService, MoreThan, MoreThanDate, MoreThanDateTime, MultichoiceAutocompleteFilterProperty, MultichoiceField, NAE_ADMIN_IMPERSONATE_COMPONENT, NAE_ADMIN_IMPERSONATE_DIALOG_COMPONENT, NAE_ASYNC_RENDERING_CONFIGURATION, NAE_AUTOSWITCH_TAB_TOKEN, NAE_BASE_FILTER, NAE_CASE_REF_CREATE_CASE, NAE_CASE_REF_SEARCH, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_HEADERS, NAE_DEFAULT_MIN_PASSWORD_LENGTH, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, NAE_FILES_UPLOAD_COMPONENT, NAE_FILES_UPLOAD_DIALOG_COMPONENT, NAE_FILTERS_FILTER, NAE_FILTER_FIELD, NAE_FILTER_TEXT, NAE_GROUP_NAVIGATION_COMPONENT_RESOLVER_COMPONENT, NAE_INFORM_ABOUT_INVALID_DATA, NAE_LOAD_FILTER_COMPONENT, NAE_LOAD_FILTER_DIALOG_COMPONENT, NAE_MIN_PASSWORD_LENGTH, NAE_NAVIGATION_ITEM_TASK_DATA, NAE_NET_ALL_VERSIONS, NAE_NET_VERSION_VISIBLE, NAE_NEW_CASE_COMPONENT, NAE_NEW_CASE_CONFIGURATION, NAE_NEW_CASE_CREATION_CONFIGURATION_DATA, NAE_NEW_CASE_DIALOG_COMPONENT, NAE_OPEN_EXISTING_TAB, NAE_OPTION_SELECTOR_COMPONENT, NAE_OPTION_SELECTOR_DIALOG_COMPONENT, NAE_PREFERRED_TASK_ENDPOINT, NAE_ROUTING_CONFIGURATION_PATH, NAE_SAVE_FILTER_COMPONENT, NAE_SAVE_FILTER_DIALOG_COMPONENT, NAE_SEARCH_CATEGORIES, NAE_SEARCH_COMPONENT_CONFIGURATION, NAE_SIDE_MENU_CONTROL, NAE_SNACKBAR_HORIZONTAL_POSITION, NAE_SNACKBAR_VERTICAL_POSITION, NAE_TAB_DATA, NAE_TASK_FORCE_OPEN, NAE_TASK_OPERATIONS, NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, NAE_TASK_VIEW_CONFIGURATION, NAE_TREE_CASE_VIEW_CONFIGURATION, NAE_URI_NODE_CASES_PAGE_SIZE, NAE_USER_ASSIGN_COMPONENT, NAE_USER_ASSIGN_DIALOG_COMPONENT, NAE_USER_IMPERSONATE_COMPONENT, NAE_USER_IMPERSONATE_DIALOG_COMPONENT, NAE_VIEW_ID, NAE_VIEW_ID_SEGMENT, NAE_WORKFLOW_SERVICE_CONFIRM_DELETE, NAE_WORKFLOW_SERVICE_FILTER, Net, NetAttributeAutocompleteCategory, NextGroupService, NoConfigurationAutocompleteCategory, NoConfigurationCategory, NoConfigurationUserAutocompleteCategory, NotEquals, NotEqualsDate, NotEqualsDateTime, NullAuthenticationService, NullTaskOperations, NumberField, NumberFieldValidation, OLD_PASSWORD, OpenedTab, Operator, OperatorResolverService, OperatorService, OperatorTemplatePart, OperatorTemplatePartType, Operators, OrganizationListService, OverflowService, PASSWORD, PUBLISHERS, PageLoadRequestContext, PaginationParams, PaginationSort, PaperViewService, PermissionService, PermissionType, PetriNetResourceService, Predicate, PredicateWithGenerator, ProcessList, ProcessService, ProfileModule, ProfileService, ProgressType, PromptDialogComponent, PromptDialogModule, PublicCaseResourceService, PublicPetriNetResourceService, PublicProcessService, PublicTaskLoadingService, PublicTaskResourceService, PublicUrlResolverService, Query, QueuedEvent, RedirectService, ResourceProvider, ResultWithAfterActions, RoleAssignmentLdapGroupService, RoleAssignmentService, RoleGuardService, RoutingBuilderService, SETTINGS_TRANSITION_ID, SearchIndex, SearchIndexResolverService, SearchInputType, SearchMode, SearchService, SelectedCaseService, SessionIdleTimerService, SessionService, SideMenuControl, SideMenuRef, SideMenuService, SideMenuSize, SignUpModule, SignUpService, SimpleFilter, SingleTaskContentService, SnackBarComponent, SnackBarHorizontalPosition, SnackBarModule, SnackBarService, SnackBarVerticalPosition, SpinnerOverlayService, Subgrid, SubjectTaskOperations, Substring, SuccessSnackBarComponent, TabLabelStream, TabView, TabbedVirtualScrollComponent, TaskAssignee, TaskConst, TaskContentService, TaskDataService, TaskElementType, TaskEndpoint, TaskEvent, TaskEventService, TaskHandlingService, TaskHeaderService, TaskMetaField, TaskNetAttributeAutocompleteCategory, TaskProcess, TaskRefComponents, TaskRefDashboardConstants, TaskRefDashboardTileConstants, TaskRefField, TaskRequestStateService, TaskResourceService, TaskRole, TaskTask, TaskViewService, TemplateAppearance, TestCaseBaseFilterProvider, TestCaseViewAllowedNetsFactory, TestConfigurationService, TestMockDependenciesModule, TestNoAllowedNetsFactory, TestTaskBaseFilterProvider, TestTaskViewAllowedNetsFactory, TestViewService, TextAreaField, TextAreaHeight, TextField, TextFieldComponent, TextFieldValidation, TextFieldView, TranslateLibModule, TreeCaseViewService, TreePetriflowIdentifiers, TreeTaskContentService, UnlimitedTaskContentService, UriContentType, UriResourceService, UriService, User, UserAutocomplete, UserComparatorService, UserField, UserFilterConstants, UserFiltersService, UserImpersonationConstants, UserInviteService, UserListField, UserListService, UserListValue, UserPreferenceService, UserResourceService, UserService, UserTransformer, UserValue, UtilityModule, ViewIdService, ViewService, WarningSnackBarComponent, WorkflowHeaderService, WorkflowMetaField, WorkflowViewService, WrappedBoolean, arrayToObservable, authenticationServiceFactory, clearTimeInformation, configureCategory, createMockCase, createMockCaseOutcome, createMockDataGroup, createMockDependencies, createMockField, createMockGetDataOutcome, createMockImmediateData, createMockNet, createMockPage, createMockPetriNetOutcome, createMockSetDataOutcome, createMockTask, createMockTaskOutcome, createSortParam, createTaskEventNotification, decodeBase64, defaultCaseSearchCategoriesFactory, defaultTaskSearchCategoriesFactory, destroySubscription, encodeBase64, extractFieldValueFromData, extractFilterFieldFromData, extractFilterFromData, extractFilterFromFilterField, extractIconAndTitle, extractRoles, extractSearchTypeFromData, getField, getFieldFromDataGroups, getFieldIndex, getFieldIndexFromDataGroups, getImmediateData, getNetAndCreateCase, groupNavigationViewIdSegmentFactory, hasContent, loadAllPages, mockUserAutocompleteValue, navigationItemCaseViewDefaultHeadersFactory, navigationItemTaskAllowedNetsServiceFactory, navigationItemTaskCategoryFactory, navigationItemTaskFilterFactory, navigationItemTaskViewDefaultHeadersFactory, ofVoid, processMessageResponse, publicBaseFilterFactory, publicFactoryResolver, refreshTree, tabbedAllowedNetsServiceFactory, tabbedTaskViewConfigurationFactory, toMoment };
35104
35219
  //# sourceMappingURL=netgrif-components-core.mjs.map