@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
@@ -1207,7 +1207,11 @@ var publicView$2 = {
1207
1207
  errorCreate: "Error while creating case "
1208
1208
  };
1209
1209
  var dynamicNavigation$2 = {
1210
- couldNotResolveView: "An error has occurred during the view resolution process. The view could not be displayed"
1210
+ couldNotResolveView: "An error has occurred during the view resolution process. The view could not be displayed",
1211
+ filterNotFound: "This view has no filter",
1212
+ loadMoreItems: "More",
1213
+ ascending: "Ascending",
1214
+ descending: "Descending"
1211
1215
  };
1212
1216
  var impersonation$2 = {
1213
1217
  user: {
@@ -1724,7 +1728,11 @@ var publicView$1 = {
1724
1728
  errorCreate: "Chyba pri vytváraní prípadu "
1725
1729
  };
1726
1730
  var dynamicNavigation$1 = {
1727
- couldNotResolveView: "Počas načítania zobrazenia sa vyskytla chyba. Zobrazenie nie je možné zobraziť"
1731
+ couldNotResolveView: "Počas načítania zobrazenia sa vyskytla chyba. Zobrazenie nie je možné zobraziť",
1732
+ filterNotFound: "Toto zobrazenie neobsahuje filter",
1733
+ loadMoreItems: "Viac",
1734
+ ascending: "Vzostupne",
1735
+ descending: "Zostupne"
1728
1736
  };
1729
1737
  var impersonation$1 = {
1730
1738
  user: {
@@ -2241,7 +2249,11 @@ var publicView = {
2241
2249
  errorCreate: "Fehler beim Erstellen des Falles "
2242
2250
  };
2243
2251
  var dynamicNavigation = {
2244
- couldNotResolveView: "Ein Fehler ist aufgetreten während des Ansichtauflösungsprocess. Der Ansicht kann nicht angezeigt werden"
2252
+ couldNotResolveView: "Ein Fehler ist aufgetreten während des Ansichtauflösungsprocess. Der Ansicht kann nicht angezeigt werden",
2253
+ filterNotFound: "Diese Ansicht hat keinen Filter",
2254
+ loadMoreItems: "Mehr",
2255
+ ascending: "Aufsteigend",
2256
+ descending: "Absteigend"
2245
2257
  };
2246
2258
  var impersonation = {
2247
2259
  user: {
@@ -18191,7 +18203,7 @@ class CaseViewService extends AbstractSortableViewComponent {
18191
18203
  minWidth: '300px',
18192
18204
  panelClass: "dialog-responsive",
18193
18205
  data: {
18194
- allowedNets$: this.getNewCaseAllowedNets(),
18206
+ allowedNets$: this.getNewCaseAllowedNets(newCaseCreationConfiguration.blockNets),
18195
18207
  newCaseCreationConfiguration
18196
18208
  },
18197
18209
  });
@@ -18205,9 +18217,12 @@ class CaseViewService extends AbstractSortableViewComponent {
18205
18217
  });
18206
18218
  return myCase.asObservable();
18207
18219
  }
18208
- createDefaultNewCase() {
18220
+ createDefaultNewCase(newCaseCreationConfiguration = {
18221
+ enableCaseTitle: true,
18222
+ isCaseTitleRequired: true
18223
+ }) {
18209
18224
  const myCase = new Subject();
18210
- this.getNewCaseAllowedNets().subscribe((nets) => {
18225
+ this.getNewCaseAllowedNets(newCaseCreationConfiguration.blockNets).subscribe((nets) => {
18211
18226
  this._caseResourceService.createCase({
18212
18227
  title: null,
18213
18228
  color: 'panel-primary-icon',
@@ -18222,13 +18237,13 @@ class CaseViewService extends AbstractSortableViewComponent {
18222
18237
  });
18223
18238
  return myCase;
18224
18239
  }
18225
- getNewCaseAllowedNets() {
18240
+ getNewCaseAllowedNets(blockNets = []) {
18226
18241
  if (this._newCaseConfiguration.useCachedProcesses) {
18227
- return this._allowedNetsService.allowedNets$.pipe(map(net => net.filter(n => this._permissionService.hasNetPermission(PermissionType.CREATE, n))));
18242
+ 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))));
18228
18243
  }
18229
18244
  else {
18230
18245
  return this._allowedNetsService.allowedNets$.pipe(switchMap(allowedNets => {
18231
- return this._processService.getNetReferences(allowedNets.map(net => net.identifier)).pipe(map(net => net.filter(n => this._permissionService.hasNetPermission(PermissionType.CREATE, n))));
18246
+ 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))));
18232
18247
  }));
18233
18248
  }
18234
18249
  }
@@ -19827,6 +19842,7 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
19827
19842
  this.responsiveBody = true;
19828
19843
  this.preventCollapse = false;
19829
19844
  this.hidePanelHeader = false;
19845
+ this.showMoreMenu = true;
19830
19846
  this.thisContext = {
19831
19847
  canAssign: () => this.canAssign(),
19832
19848
  assign: () => this.assign(),
@@ -20094,7 +20110,7 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
20094
20110
  }
20095
20111
  }
20096
20112
  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 });
20097
- 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 });
20113
+ 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 });
20098
20114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskPanelComponent, decorators: [{
20099
20115
  type: Component,
20100
20116
  args: [{
@@ -20133,6 +20149,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20133
20149
  type: Input
20134
20150
  }], actionRowJustifyContent: [{
20135
20151
  type: Input
20152
+ }], showMoreMenu: [{
20153
+ type: Input
20136
20154
  }], forceLoadDataOnOpen: [{
20137
20155
  type: Input
20138
20156
  }], textEllipsis: [{
@@ -20198,6 +20216,7 @@ class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent {
20198
20216
  this.responsiveBody = true;
20199
20217
  this.forceLoadDataOnOpen = false;
20200
20218
  this.textEllipsis = false;
20219
+ this.showMoreMenu = true;
20201
20220
  this.taskEvent = new EventEmitter();
20202
20221
  this._taskPanelRefs = new Map();
20203
20222
  this._unsubscribe$ = new Subject();
@@ -20245,7 +20264,7 @@ class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent {
20245
20264
  }
20246
20265
  }
20247
20266
  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 });
20248
- 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 });
20267
+ 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 });
20249
20268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractDefaultTaskListComponent, decorators: [{
20250
20269
  type: Component,
20251
20270
  args: [{
@@ -20267,6 +20286,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20267
20286
  type: Input
20268
20287
  }], textEllipsis: [{
20269
20288
  type: Input
20289
+ }], showMoreMenu: [{
20290
+ type: Input
20270
20291
  }], allowMultiOpen: [{
20271
20292
  type: Input
20272
20293
  }], taskEvent: [{
@@ -21792,12 +21813,418 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
21792
21813
  type: Input
21793
21814
  }] } });
21794
21815
 
21816
+ /**
21817
+ * Case search request page size
21818
+ */
21819
+ const NAE_URI_NODE_CASES_PAGE_SIZE = new InjectionToken('NaeUriNodeCasesPageSize');
21820
+
21821
+ /**
21822
+ * Service for accessing backend resource to resolve URI objects
21823
+ * */
21824
+ class UriResourceService extends AbstractResourceService {
21825
+ constructor(provider, configService) {
21826
+ super('petrinet', provider, configService);
21827
+ }
21828
+ getRoot() {
21829
+ return this._resourceProvider.get$('uri/root', this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
21830
+ }
21831
+ getByLevel(level) {
21832
+ return this._resourceProvider.get$('uri/level/' + level, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
21833
+ }
21834
+ getNodesByParent(parentId) {
21835
+ return this._resourceProvider.get$('uri/parent/' + parentId, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
21836
+ }
21837
+ getNodeByUri(uriPath) {
21838
+ return this._resourceProvider.get$('uri/' + btoa(uriPath), this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
21839
+ }
21840
+ }
21841
+ 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 });
21842
+ UriResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, providedIn: 'root' });
21843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, decorators: [{
21844
+ type: Injectable,
21845
+ args: [{
21846
+ providedIn: 'root'
21847
+ }]
21848
+ }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: ConfigurationService }]; } });
21849
+
21850
+ /**
21851
+ * This service allows access to information about the groups of the currently logged user.
21852
+ *
21853
+ * If no user is logged an empty array is provided.
21854
+ *
21855
+ * If a user can be owner of at most one group, this service provides utility methods to access this group directly.
21856
+ *
21857
+ * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
21858
+ */
21859
+ class NextGroupService {
21860
+ constructor(_userService, _caseResourceService) {
21861
+ this._userService = _userService;
21862
+ this._caseResourceService = _caseResourceService;
21863
+ this._ownerGroups$ = new BehaviorSubject([]);
21864
+ this._memberGroups$ = new BehaviorSubject([]);
21865
+ this._userSub = this._userService.user$.pipe(switchMap(user => {
21866
+ if (!user || user.id === '') {
21867
+ return of([]);
21868
+ }
21869
+ const params = new HttpParams();
21870
+ params.set(PaginationParams.PAGE_SIZE, `${user.nextGroups.length}`);
21871
+ return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery({ stringId: user.nextGroups }), params)
21872
+ .pipe(map(page => page.content ? page.content : []), map(groups => groups.filter(group => group.author.fullName !== 'application engine')));
21873
+ })).subscribe(groups => {
21874
+ const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email);
21875
+ this._ownerGroups$.next(ownerGroups);
21876
+ this._memberGroups$.next(groups);
21877
+ });
21878
+ }
21879
+ ngOnDestroy() {
21880
+ this._userSub.unsubscribe();
21881
+ this._memberGroups$.complete();
21882
+ this._ownerGroups$.complete();
21883
+ }
21884
+ /**
21885
+ * @returns an Observable of all the groups the currently logged user is a member of
21886
+ */
21887
+ get memberGroups$() {
21888
+ return this._memberGroups$.asObservable();
21889
+ }
21890
+ /**
21891
+ * @returns an Observable of all the groups the currently logged user is an owner of
21892
+ */
21893
+ get ownerGroups$() {
21894
+ return this._ownerGroups$.asObservable();
21895
+ }
21896
+ /**
21897
+ * @returns an Array of all the groups the currently logged user is a member of
21898
+ */
21899
+ get memberGroups() {
21900
+ return this._memberGroups$.getValue();
21901
+ }
21902
+ /**
21903
+ * @returns an Array of all the groups the currently logged user is an owner of
21904
+ */
21905
+ get ownerGroups() {
21906
+ return this._ownerGroups$.getValue();
21907
+ }
21908
+ /**
21909
+ * @returns an Observable containing the first element of the [ownerGroups$]{@link NextGroupService#ownerGroups$} observable,
21910
+ * or `undefined` if the contained array is empty
21911
+ */
21912
+ get firstOwnerGroup$() {
21913
+ return this._ownerGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
21914
+ }
21915
+ /**
21916
+ * @returns the first element of the [ownerGroups]{@link NextGroupService#ownerGroups} array, or `undefined` if the array is empty
21917
+ */
21918
+ get firstOwnerGroup() {
21919
+ const ownerGroups = this.ownerGroups;
21920
+ return ownerGroups.length > 0 ? ownerGroups[0] : undefined;
21921
+ }
21922
+ /**
21923
+ * @deprecated in NAE 5.6.0 - use [ownerGroups]{@link NextGroupService#ownerGroups} instead
21924
+ */
21925
+ get groupOfUser() {
21926
+ return this.ownerGroups;
21927
+ }
21928
+ }
21929
+ 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 });
21930
+ NextGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, providedIn: 'root' });
21931
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, decorators: [{
21932
+ type: Injectable,
21933
+ args: [{
21934
+ providedIn: 'root'
21935
+ }]
21936
+ }], ctorParameters: function () { return [{ type: UserService }, { type: CaseResourceService }]; } });
21937
+
21938
+ /**
21939
+ * This service to the groups that are "active" for the logged user.
21940
+ *
21941
+ * The meaning of "active" can wary from application to application. And this service provides the utility to track this state.
21942
+ *
21943
+ * The active groups are assumed to be a subset of the groups the logged user is a member of,
21944
+ * but this assumption is not enforced nor checked.
21945
+ *
21946
+ * If at most one group can be active at a time, this service provides utility methods to access this group directly.
21947
+ *
21948
+ * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
21949
+ *
21950
+ * In the default implementation the initially active groups are all the groups the logged user is a member of.
21951
+ */
21952
+ class ActiveGroupService {
21953
+ constructor(_groupService) {
21954
+ this._groupService = _groupService;
21955
+ this._activeGroups$ = new BehaviorSubject([]);
21956
+ this._groupSub = this._groupService.memberGroups$.subscribe(groups => {
21957
+ this._activeGroups$.next(groups);
21958
+ });
21959
+ }
21960
+ ngOnDestroy() {
21961
+ this._groupSub.unsubscribe();
21962
+ this._activeGroups$.complete();
21963
+ }
21964
+ /**
21965
+ * In the default implementation this stream copies the values of the [memberGroups$]{@link NextGroupService#memberGroups$} stream
21966
+ * of the {@link NextGroupService}. Whenever the copies stream emits, the underlying stream in this class emits the same value.
21967
+ *
21968
+ * @returns an Observable of all the groups that are currently active
21969
+ */
21970
+ get activeGroups$() {
21971
+ return this._activeGroups$.asObservable();
21972
+ }
21973
+ get activeGroups() {
21974
+ return this._activeGroups$.getValue();
21975
+ }
21976
+ set activeGroups(activeGroups) {
21977
+ this._activeGroups$.next(activeGroups);
21978
+ }
21979
+ /**
21980
+ * @returns an Observable containing the first element of the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable,
21981
+ * or `undefined` if the contained array is empty
21982
+ */
21983
+ get activeGroup$() {
21984
+ return this.activeGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
21985
+ }
21986
+ /**
21987
+ * @returns the first element of the [activeGroups]{@link ActiveGroupService#activeGroups} array, or `undefined` if the array is empty
21988
+ */
21989
+ get activeGroup() {
21990
+ const activeGroups = this.activeGroups;
21991
+ return activeGroups.length > 0 ? activeGroups[0] : undefined;
21992
+ }
21993
+ /**
21994
+ * Emits a new array into the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable, that contains only
21995
+ * the provided {@link Case} object. If `undefined` is passed as argument, an empty array will be pushed into the observable.
21996
+ * @param activeGroup the new active group case reference
21997
+ */
21998
+ set activeGroup(activeGroup) {
21999
+ if (activeGroup === undefined) {
22000
+ this._activeGroups$.next([]);
22001
+ }
22002
+ else {
22003
+ this._activeGroups$.next([activeGroup]);
22004
+ }
22005
+ }
22006
+ }
22007
+ ActiveGroupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, deps: [{ token: NextGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
22008
+ ActiveGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, providedIn: 'root' });
22009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, decorators: [{
22010
+ type: Injectable,
22011
+ args: [{
22012
+ providedIn: 'root'
22013
+ }]
22014
+ }], ctorParameters: function () { return [{ type: NextGroupService }]; } });
22015
+
22016
+ /**
22017
+ * Service for managing URIs
22018
+ * */
22019
+ class UriService {
22020
+ constructor(_logger, _resourceService, _caseResourceService, _activeGroupService, pageSize) {
22021
+ this._logger = _logger;
22022
+ this._resourceService = _resourceService;
22023
+ this._caseResourceService = _caseResourceService;
22024
+ this._activeGroupService = _activeGroupService;
22025
+ this.pageSize = pageSize;
22026
+ if (!pageSize) {
22027
+ this.pageSize = 20;
22028
+ }
22029
+ if (typeof this.pageSize === 'string') {
22030
+ this.pageSize = parseInt(this.pageSize);
22031
+ }
22032
+ this._rootLoading$ = new LoadingEmitter();
22033
+ this._parentLoading$ = new LoadingEmitter();
22034
+ this._activeNode$ = new BehaviorSubject(undefined);
22035
+ this.loadRoot();
22036
+ }
22037
+ ngOnDestroy() {
22038
+ this._rootLoading$.complete();
22039
+ this._parentLoading$.complete();
22040
+ this._activeNode$.complete();
22041
+ }
22042
+ get root() {
22043
+ return this._rootNode;
22044
+ }
22045
+ get rootLoaded$() {
22046
+ return this._rootLoading$;
22047
+ }
22048
+ isRoot(node) {
22049
+ return node.id === this._rootNode.id && node.uriPath === this._rootNode.uriPath;
22050
+ }
22051
+ get activeNode() {
22052
+ return this._activeNode$.getValue();
22053
+ }
22054
+ set activeNode(node) {
22055
+ if (node.parentId && !node.parent) {
22056
+ if (node.parentId === this._rootNode.id) {
22057
+ node.parent = this._rootNode;
22058
+ }
22059
+ else {
22060
+ this._parentLoading$.on();
22061
+ this.getNodeByPath(this.resolveParentPath(node)).subscribe(n => {
22062
+ node.parent = !n ? this._rootNode : n;
22063
+ this._parentLoading$.off();
22064
+ }, error => {
22065
+ this._logger.error(error);
22066
+ this._parentLoading$.off();
22067
+ });
22068
+ }
22069
+ }
22070
+ this._activeNode$.next(node);
22071
+ }
22072
+ get activeNode$() {
22073
+ return this._activeNode$;
22074
+ }
22075
+ get parentNodeLoading$() {
22076
+ return this._parentLoading$;
22077
+ }
22078
+ /**
22079
+ * Loads root ID into variable.
22080
+ * When root node is loaded and active node is not set yet the root node is set as active node
22081
+ * */
22082
+ loadRoot() {
22083
+ this._rootLoading$.on();
22084
+ this._resourceService.getRoot().subscribe(node => {
22085
+ if (!!node) {
22086
+ this._rootNode = node;
22087
+ if (!this.activeNode) {
22088
+ this.activeNode = this._rootNode;
22089
+ }
22090
+ }
22091
+ this._rootLoading$.off();
22092
+ }, error => {
22093
+ this._logger.error(error);
22094
+ this._rootLoading$.off();
22095
+ });
22096
+ }
22097
+ reset() {
22098
+ this.activeNode = this._rootNode;
22099
+ return this._rootNode;
22100
+ }
22101
+ /**
22102
+ * Get uri node by uri path.
22103
+ * @param path
22104
+ */
22105
+ getNodeByPath(path) {
22106
+ return this._resourceService.getNodeByUri(path).pipe(map(n => this.capitalizeName(n)));
22107
+ }
22108
+ /**
22109
+ * Get child nodes of provides node.
22110
+ * @param node parent node
22111
+ */
22112
+ getChildNodes(node) {
22113
+ if (!node)
22114
+ node = this.activeNode;
22115
+ return this._resourceService.getNodesByParent(node.id).pipe(map(nodes => {
22116
+ this.capitalizeNames(nodes);
22117
+ return nodes;
22118
+ }));
22119
+ }
22120
+ /**
22121
+ * Get cases under uri node
22122
+ * @param node parent node of cases
22123
+ * @param processIdentifiers optional search filter for process identifier to get only cases from the process
22124
+ * @param pageNumber optional parameter for load page on the index. Default value is 0 (the first page).
22125
+ * @param pageSize optional parameter for loaded page size. Defaults to value of injection token URI_NODE_CASES_PAGE_SIZE or to value "20".
22126
+ */
22127
+ getCasesOfNode(node, processIdentifiers, pageNumber = 0, pageSize = this.pageSize) {
22128
+ if (!node)
22129
+ node = this.activeNode;
22130
+ const searchBody = {
22131
+ uriNodeId: node.id,
22132
+ };
22133
+ if (!!processIdentifiers) {
22134
+ searchBody.process = processIdentifiers.map(id => ({ identifier: id }));
22135
+ }
22136
+ // TODO active group is broken a given the wrong id
22137
+ // if (!!this._activeGroupService.activeGroup) {
22138
+ // searchBody.data = {};
22139
+ // searchBody.data['parentId'] = this._activeGroupService.activeGroup.stringId;
22140
+ // }
22141
+ let httpParams = new HttpParams()
22142
+ .set(PaginationParams.PAGE_SIZE, pageSize)
22143
+ .set(PaginationParams.PAGE_NUMBER, pageNumber);
22144
+ return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery(searchBody), httpParams);
22145
+ }
22146
+ /**
22147
+ * Get siblings node of the provided node
22148
+ * @param node siblings node
22149
+ */
22150
+ getSiblingsOfNode(node) {
22151
+ if (!node)
22152
+ node = this.activeNode;
22153
+ return this._resourceService.getNodesByParent(node.parentId).pipe(map(nodes => {
22154
+ this.capitalizeNames(nodes);
22155
+ return nodes;
22156
+ }));
22157
+ }
22158
+ /**
22159
+ * Get nodes on the same uri level starting from 0. Root node is no 0 level.
22160
+ * @param level
22161
+ * @param parent optional parameter to filter nodes with common parent
22162
+ */
22163
+ getNodesOnLevel(level, parent) {
22164
+ if (level === 0)
22165
+ return of([this.root]);
22166
+ return this._resourceService.getByLevel(level).pipe(map(nodes => {
22167
+ const ns = !!parent?.id ? nodes.filter(n => n.parentId === parent.id) : nodes;
22168
+ this.capitalizeNames(ns);
22169
+ return ns;
22170
+ }));
22171
+ }
22172
+ resolveParentPath(node) {
22173
+ if (!node)
22174
+ node = this.activeNode;
22175
+ const lastDelimiter = node.uriPath.lastIndexOf('/');
22176
+ if (lastDelimiter === 0)
22177
+ return '/';
22178
+ return node.uriPath.substring(0, lastDelimiter);
22179
+ }
22180
+ splitNodePath(node) {
22181
+ return node?.uriPath.split('/').filter(s => s !== UriService.ROOT);
22182
+ }
22183
+ capitalizeNames(nodes) {
22184
+ if (!(nodes instanceof Array))
22185
+ return;
22186
+ nodes.forEach(n => this.capitalizeName(n));
22187
+ }
22188
+ /**
22189
+ * /netgrif/nae_system/processes/... => Netgrif -> Nae Systems -> Processes
22190
+ * @param node
22191
+ * @private
22192
+ */
22193
+ capitalizeName(node) {
22194
+ let parts = node.name.split('_');
22195
+ parts = parts.map(p => {
22196
+ if (p === undefined || p.length === 0)
22197
+ return;
22198
+ if (p.length === 1)
22199
+ return p.toUpperCase();
22200
+ return p.charAt(0).toUpperCase() + p.substring(1);
22201
+ });
22202
+ node.name = parts.join(' ');
22203
+ return node;
22204
+ }
22205
+ }
22206
+ UriService.ROOT = 'root';
22207
+ 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 });
22208
+ UriService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, providedIn: 'root' });
22209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, decorators: [{
22210
+ type: Injectable,
22211
+ args: [{
22212
+ providedIn: 'root',
22213
+ }]
22214
+ }], ctorParameters: function () { return [{ type: LoggerService }, { type: UriResourceService }, { type: CaseResourceService }, { type: ActiveGroupService }, { type: undefined, decorators: [{
22215
+ type: Optional
22216
+ }, {
22217
+ type: Inject,
22218
+ args: [NAE_URI_NODE_CASES_PAGE_SIZE]
22219
+ }] }]; } });
22220
+
21795
22221
  class FileUploadModel {
21796
22222
  }
21797
22223
  class AbstractImportNetComponent {
21798
- constructor(_sideMenuControl, _petriNetResource, _log, _snackbar, _translate) {
22224
+ constructor(_sideMenuControl, _petriNetResource, _uriService, _log, _snackbar, _translate) {
21799
22225
  this._sideMenuControl = _sideMenuControl;
21800
22226
  this._petriNetResource = _petriNetResource;
22227
+ this._uriService = _uriService;
21801
22228
  this._log = _log;
21802
22229
  this._snackbar = _snackbar;
21803
22230
  this._translate = _translate;
@@ -21873,6 +22300,7 @@ class AbstractImportNetComponent {
21873
22300
  uploadFile(file) {
21874
22301
  const fileFormData = new FormData();
21875
22302
  fileFormData.append('file', file.data);
22303
+ fileFormData.append('uriNodeId', this._uriService.activeNode.id);
21876
22304
  fileFormData.append('meta', this.releaseTypeControl.value.toString().toUpperCase());
21877
22305
  file.inProgress = true;
21878
22306
  file.completed = false;
@@ -21909,7 +22337,7 @@ class AbstractImportNetComponent {
21909
22337
  });
21910
22338
  }
21911
22339
  }
21912
- 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 });
22340
+ 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 });
21913
22341
  AbstractImportNetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractImportNetComponent, selector: "ncc-abstract-import-net", ngImport: i0, template: '', isInline: true });
21914
22342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractImportNetComponent, decorators: [{
21915
22343
  type: Component,
@@ -21917,7 +22345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
21917
22345
  selector: 'ncc-abstract-import-net',
21918
22346
  template: ''
21919
22347
  }]
21920
- }], ctorParameters: function () { return [{ type: SideMenuControl }, { type: PetriNetResourceService }, { type: LoggerService }, { type: SnackBarService }, { type: i1$2.TranslateService }]; } });
22348
+ }], ctorParameters: function () { return [{ type: SideMenuControl }, { type: PetriNetResourceService }, { type: UriService }, { type: LoggerService }, { type: SnackBarService }, { type: i1$2.TranslateService }]; } });
21921
22349
 
21922
22350
  class AbstractNewCaseComponent {
21923
22351
  constructor(_sideMenuControl, _formBuilder, _snackBarService, _caseResourceService, _hotkeysService, _translate) {
@@ -24564,14 +24992,16 @@ class AbstractHeaderComponent {
24564
24992
  this.DEFAULT_COLUMN_WIDTH = 220;
24565
24993
  this.INPUT_DEBOUNCE_TIME = 600;
24566
24994
  this.type = HeaderType.CASE;
24567
- this.hideEditMode = false;
24995
+ this.hideHeaderMenu = false;
24996
+ this.showEditButton = true;
24997
+ this.showSortButton = true;
24998
+ this.showSearchButton = true;
24999
+ this.showTableSection = true;
24568
25000
  this.headerModeEnum = HeaderMode;
24569
25001
  this.headerTypeEnum = HeaderType;
24570
25002
  this._initHeaderCount = undefined;
24571
25003
  this._initResponsiveHeaders = undefined;
24572
- (this._overflowService !== null) ?
24573
- this.initializeFormControls(true) :
24574
- this.initializeFormControls(false);
25004
+ this.initializeFormControls(this._overflowService !== null);
24575
25005
  }
24576
25006
  set maxHeaderColumns(count) {
24577
25007
  if (this.headerService) {
@@ -24592,6 +25022,11 @@ class AbstractHeaderComponent {
24592
25022
  this._initResponsiveHeaders = responsive;
24593
25023
  }
24594
25024
  }
25025
+ changeHeadersMode(mode, saveLastMode = true) {
25026
+ if (this.headerService) {
25027
+ this.headerService.changeMode(mode, saveLastMode);
25028
+ }
25029
+ }
24595
25030
  ngOnInit() {
24596
25031
  this.resolveHeaderService();
24597
25032
  this.initializedHeaderSearch();
@@ -24700,7 +25135,7 @@ class AbstractHeaderComponent {
24700
25135
  }
24701
25136
  }
24702
25137
  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 });
24703
- 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 });
25138
+ 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 });
24704
25139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractHeaderComponent, decorators: [{
24705
25140
  type: Component,
24706
25141
  args: [{
@@ -24711,7 +25146,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24711
25146
  type: Optional
24712
25147
  }] }]; }, propDecorators: { type: [{
24713
25148
  type: Input
24714
- }], hideEditMode: [{
25149
+ }], hideHeaderMenu: [{
25150
+ type: Input
25151
+ }], showEditButton: [{
25152
+ type: Input
25153
+ }], showSortButton: [{
25154
+ type: Input
25155
+ }], showSearchButton: [{
25156
+ type: Input
25157
+ }], showTableSection: [{
24715
25158
  type: Input
24716
25159
  }], maxHeaderColumns: [{
24717
25160
  type: Input
@@ -25454,147 +25897,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
25454
25897
 
25455
25898
  /* COMPONENTS */
25456
25899
 
25457
- var GroupNavigationConstants;
25458
- (function (GroupNavigationConstants) {
25459
- /**
25460
- * Name of the component that indicates the position of the group specific navigation elements.
25461
- */
25462
- GroupNavigationConstants["GROUP_NAVIGATION_OUTLET"] = "groupNavigation";
25463
- /**
25464
- * Name of the router param that is used to provide information about the selected filter to the group navigation view component
25465
- */
25466
- GroupNavigationConstants["GROUP_NAVIGATION_ROUTER_PARAM"] = "filterCaseId";
25467
- /**
25468
- * Id of the transition that stores the group navigation menu data
25469
- */
25470
- GroupNavigationConstants["NAVIGATION_CONFIG_TRANSITION_ID"] = "navigationMenuConfig";
25471
- /**
25472
- * Id of the task ref field that holds the ids of the individual navigation item tasks
25473
- */
25474
- GroupNavigationConstants["NAVIGATION_ENTRIES_TASK_REF_FIELD_ID"] = "filter_tasks";
25475
- /**
25476
- * Suffix of the field id that contains the name of the navigation entry.
25477
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25478
- */
25479
- GroupNavigationConstants["NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX"] = "entry_name";
25480
- /**
25481
- * Suffix of the field id that contains the filter case id.
25482
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25483
- */
25484
- GroupNavigationConstants["NAVIGATION_FILTER_CASE_ID_FIELD_ID_SUFFIX"] = "filter_case_id";
25485
- /**
25486
- * Suffix of the field id that is the navigation entry marker.
25487
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25488
- */
25489
- GroupNavigationConstants["NAVIGATION_ENTRY_MARKER_FIELD_ID_SUFFIX"] = "entry_marker";
25490
- /**
25491
- * Suffix of the boolean field id that determines if the navigation entry defines an icon.
25492
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25493
- */
25494
- GroupNavigationConstants["NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX"] = "use_icon";
25495
- /**
25496
- * Suffix of the text field id that contains the id of the used material icon.
25497
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25498
- */
25499
- GroupNavigationConstants["NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX"] = "icon_name";
25500
- /**
25501
- * Suffix of the text field id that contains the IDs of roles that are able to view the navigation entry.
25502
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25503
- */
25504
- GroupNavigationConstants["NAVIGATION_ENTRY_ALLOWED_ROLES_FIELD_ID_SUFFIX"] = "allowed_roles";
25505
- /**
25506
- * Suffix of the text field id that contains the IDs of roles that are banned from viewing the navigation entry.
25507
- * Since the field itself is inserted via task ref the actual id is prefixed by the task id.
25508
- */
25509
- GroupNavigationConstants["NAVIGATION_ENTRY_BANNED_ROLES_FIELD_ID_SUFFIX"] = "banned_roles";
25510
- /**
25511
- * The number of datagroups in the navigation configuration task that correspond to a single navigation entry.
25512
- */
25513
- GroupNavigationConstants[GroupNavigationConstants["DATAGROUPS_PER_NAVIGATION_ENTRY"] = 2] = "DATAGROUPS_PER_NAVIGATION_ENTRY";
25514
- })(GroupNavigationConstants || (GroupNavigationConstants = {}));
25515
-
25516
- /**
25517
- * Forces a re-render of the tree backed by the datasource
25518
- */
25519
- function refreshTree(tree) {
25520
- const d = tree.data;
25521
- tree.data = null;
25522
- tree.data = d;
25523
- }
25524
-
25525
- /**
25526
- * Extracts the item name and item icon (if any) rom a section of the navigation item task data.
25527
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25528
- */
25529
- function extractIconAndTitle(dataSection) {
25530
- const result = { name: '' };
25531
- if (dataSection.length === 0) {
25532
- throw new Error('The provided task data does not belong to a Navigation menu item task. Icon and title cannot be extracted');
25533
- }
25534
- const nameField = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX);
25535
- if (nameField === undefined) {
25536
- throw new Error('Navigation entry name could not be resolved');
25537
- }
25538
- result.name = nameField.value;
25539
- const useIcon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX);
25540
- if (useIcon !== undefined && useIcon.value) {
25541
- const icon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX);
25542
- if (icon === undefined) {
25543
- this._log.error('Navigation entry icon could not be resolved, but is enabled. Icon was ignored');
25544
- }
25545
- else {
25546
- result.icon = icon.value;
25547
- }
25548
- }
25549
- return result;
25550
- }
25551
- /**
25552
- * Based on provided parameter extracts allowed or banned roles into an Array of strings from a section of the navigation item task data.
25553
- * Each item has format ROLE_IMPORT_ID:NET_IMPORT_ID
25554
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25555
- * @param roleFieldId ID of field containing banned or allowed role IDs
25556
- * @returns an Array of string values representing role IDs
25557
- */
25558
- function extractRoles(dataSection, roleFieldId) {
25559
- if (dataSection.length === 0) {
25560
- throw new Error('The provided task data does not belong to a Navigation menu item task. Role entries cannot be extracted');
25561
- }
25562
- const roleIds = getFieldFromDataGroups(dataSection, roleFieldId);
25563
- if (roleIds === undefined) {
25564
- throw new Error('Navigation entry role authorization field could not be resolved');
25565
- }
25566
- return roleIds.choices.map(choice => choice.key);
25567
- }
25568
- /**
25569
- * Extracts the data and creates a filter object from the navigation item task data.
25570
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25571
- */
25572
- function extractFilterFromData(dataSection) {
25573
- return extractFilterFromFilterField(extractFilterFieldFromData(dataSection));
25574
- }
25575
- /**
25576
- * Extracts the filter field from the navigation item task data.
25577
- * @param dataSection an array containing the data groups that correspond to a single navigation entry
25578
- * @returns The extracted {@link FilterField} or `undefined` if it could not be extracted.
25579
- */
25580
- function extractFilterFieldFromData(dataSection) {
25581
- const filterField = getFieldFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID);
25582
- if (filterField === undefined || !(filterField instanceof FilterField)) {
25583
- throw new Error(`Filter could not be extracted. The provided datagroups do not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'`);
25584
- }
25585
- return filterField;
25586
- }
25587
- /**
25588
- * @returns a {@link SimpleFilter} containing the filter stored in the provided {@link FilterField}.
25589
- * Throws an error if this is not possible.
25590
- */
25591
- function extractFilterFromFilterField(filterField) {
25592
- if (filterField === undefined || !(filterField instanceof FilterField)) {
25593
- throw new Error('Filter could not be resolved');
25594
- }
25595
- return SimpleFilter.fromQuery({ query: filterField.value }, filterField.filterMetadata.filterType);
25596
- }
25597
-
25598
25900
  class RoleGuardService {
25599
25901
  constructor(_redirectService, _userService, _configService, _log) {
25600
25902
  this._redirectService = _redirectService;
@@ -25731,94 +26033,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
25731
26033
  }]
25732
26034
  }], ctorParameters: function () { return [{ type: RedirectService }, { type: UserService }, { type: ConfigurationService }, { type: i2$3.Router }]; } });
25733
26035
 
25734
- /**
25735
- * This service allows access to information about the groups of the currently logged user.
25736
- *
25737
- * If no user is logged an empty array is provided.
25738
- *
25739
- * If a user can be owner of at most one group, this service provides utility methods to access this group directly.
25740
- *
25741
- * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
25742
- */
25743
- class NextGroupService {
25744
- constructor(_userService, _caseResourceService) {
25745
- this._userService = _userService;
25746
- this._caseResourceService = _caseResourceService;
25747
- this._ownerGroups$ = new BehaviorSubject([]);
25748
- this._memberGroups$ = new BehaviorSubject([]);
25749
- this._userSub = this._userService.user$.pipe(switchMap(user => {
25750
- if (!user || user.id === '') {
25751
- return of([]);
25752
- }
25753
- const params = new HttpParams();
25754
- params.set(PaginationParams.PAGE_SIZE, `${user.nextGroups.length}`);
25755
- return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery({ stringId: user.nextGroups }), params)
25756
- .pipe(map(page => page.content ? page.content : []), map(groups => groups.filter(group => group.author.fullName !== 'application engine')));
25757
- })).subscribe(groups => {
25758
- const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email);
25759
- this._ownerGroups$.next(ownerGroups);
25760
- this._memberGroups$.next(groups);
25761
- });
25762
- }
25763
- ngOnDestroy() {
25764
- this._userSub.unsubscribe();
25765
- this._memberGroups$.complete();
25766
- this._ownerGroups$.complete();
25767
- }
25768
- /**
25769
- * @returns an Observable of all the groups the currently logged user is a member of
25770
- */
25771
- get memberGroups$() {
25772
- return this._memberGroups$.asObservable();
25773
- }
25774
- /**
25775
- * @returns an Observable of all the groups the currently logged user is an owner of
25776
- */
25777
- get ownerGroups$() {
25778
- return this._ownerGroups$.asObservable();
25779
- }
25780
- /**
25781
- * @returns an Array of all the groups the currently logged user is a member of
25782
- */
25783
- get memberGroups() {
25784
- return this._memberGroups$.getValue();
25785
- }
25786
- /**
25787
- * @returns an Array of all the groups the currently logged user is an owner of
25788
- */
25789
- get ownerGroups() {
25790
- return this._ownerGroups$.getValue();
25791
- }
25792
- /**
25793
- * @returns an Observable containing the first element of the [ownerGroups$]{@link NextGroupService#ownerGroups$} observable,
25794
- * or `undefined` if the contained array is empty
25795
- */
25796
- get firstOwnerGroup$() {
25797
- return this._ownerGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
25798
- }
25799
- /**
25800
- * @returns the first element of the [ownerGroups]{@link NextGroupService#ownerGroups} array, or `undefined` if the array is empty
25801
- */
25802
- get firstOwnerGroup() {
25803
- const ownerGroups = this.ownerGroups;
25804
- return ownerGroups.length > 0 ? ownerGroups[0] : undefined;
25805
- }
25806
- /**
25807
- * @deprecated in NAE 5.6.0 - use [ownerGroups]{@link NextGroupService#ownerGroups} instead
25808
- */
25809
- get groupOfUser() {
25810
- return this.ownerGroups;
25811
- }
25812
- }
25813
- 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 });
25814
- NextGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, providedIn: 'root' });
25815
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NextGroupService, decorators: [{
25816
- type: Injectable,
25817
- args: [{
25818
- providedIn: 'root'
25819
- }]
25820
- }], ctorParameters: function () { return [{ type: UserService }, { type: CaseResourceService }]; } });
25821
-
25822
26036
  class GroupGuardService {
25823
26037
  constructor(_redirectService, _userService, _nextGroupService, _configService, _log) {
25824
26038
  this._redirectService = _redirectService;
@@ -25927,84 +26141,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
25927
26141
  }]
25928
26142
  }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: UserService }, { type: RoleGuardService }, { type: AuthorityGuardService }, { type: GroupGuardService }]; } });
25929
26143
 
25930
- /**
25931
- * This service to the groups that are "active" for the logged user.
25932
- *
25933
- * The meaning of "active" can wary from application to application. And this service provides the utility to track this state.
25934
- *
25935
- * The active groups are assumed to be a subset of the groups the logged user is a member of,
25936
- * but this assumption is not enforced nor checked.
25937
- *
25938
- * If at most one group can be active at a time, this service provides utility methods to access this group directly.
25939
- *
25940
- * The groups are assumed to be instances of the engine group process, this is never checked nor enforced.
25941
- *
25942
- * In the default implementation the initially active groups are all the groups the logged user is a member of.
25943
- */
25944
- class ActiveGroupService {
25945
- constructor(_groupService) {
25946
- this._groupService = _groupService;
25947
- this._activeGroups$ = new BehaviorSubject([]);
25948
- this._groupSub = this._groupService.memberGroups$.subscribe(groups => {
25949
- this._activeGroups$.next(groups);
25950
- });
25951
- }
25952
- ngOnDestroy() {
25953
- this._groupSub.unsubscribe();
25954
- this._activeGroups$.complete();
25955
- }
25956
- /**
25957
- * In the default implementation this stream copies the values of the [memberGroups$]{@link NextGroupService#memberGroups$} stream
25958
- * of the {@link NextGroupService}. Whenever the copies stream emits, the underlying stream in this class emits the same value.
25959
- *
25960
- * @returns an Observable of all the groups that are currently active
25961
- */
25962
- get activeGroups$() {
25963
- return this._activeGroups$.asObservable();
25964
- }
25965
- get activeGroups() {
25966
- return this._activeGroups$.getValue();
25967
- }
25968
- set activeGroups(activeGroups) {
25969
- this._activeGroups$.next(activeGroups);
25970
- }
25971
- /**
25972
- * @returns an Observable containing the first element of the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable,
25973
- * or `undefined` if the contained array is empty
25974
- */
25975
- get activeGroup$() {
25976
- return this.activeGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
25977
- }
25978
- /**
25979
- * @returns the first element of the [activeGroups]{@link ActiveGroupService#activeGroups} array, or `undefined` if the array is empty
25980
- */
25981
- get activeGroup() {
25982
- const activeGroups = this.activeGroups;
25983
- return activeGroups.length > 0 ? activeGroups[0] : undefined;
25984
- }
25985
- /**
25986
- * Emits a new array into the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable, that contains only
25987
- * the provided {@link Case} object. If `undefined` is passed as argument, an empty array will be pushed into the observable.
25988
- * @param activeGroup the new active group case reference
25989
- */
25990
- set activeGroup(activeGroup) {
25991
- if (activeGroup === undefined) {
25992
- this._activeGroups$.next([]);
25993
- }
25994
- else {
25995
- this._activeGroups$.next([activeGroup]);
25996
- }
25997
- }
25998
- }
25999
- ActiveGroupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, deps: [{ token: NextGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
26000
- ActiveGroupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, providedIn: 'root' });
26001
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ActiveGroupService, decorators: [{
26002
- type: Injectable,
26003
- args: [{
26004
- providedIn: 'root'
26005
- }]
26006
- }], ctorParameters: function () { return [{ type: NextGroupService }]; } });
26007
-
26008
26144
  class DynamicNavigationRouteProviderService {
26009
26145
  constructor(_config) {
26010
26146
  this._config = _config;
@@ -26044,10 +26180,8 @@ class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerC
26044
26180
  this._taskResourceService = _taskResourceService;
26045
26181
  this._languageService = _languageService;
26046
26182
  this._navigationRouteProvider = _navigationRouteProvider;
26047
- this._groupNavNodesCount = 0;
26048
26183
  this.treeControl = new NestedTreeControl(node => node.children);
26049
26184
  this.dataSource = new MatTreeNestedDataSource();
26050
- this._groupNavigationConfig = this._config.getConfigurationSubtree(['services', 'groupNavigation']);
26051
26185
  this.dataSource.data = this.resolveNavigationNodes(_config.getConfigurationSubtree(['views']), '');
26052
26186
  this.resolveLevels(this.dataSource.data);
26053
26187
  this._reloadNavigation = new ReplaySubject(1);
@@ -26114,19 +26248,9 @@ class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerC
26114
26248
  if (!views || Object.keys(views).length === 0) {
26115
26249
  return null;
26116
26250
  }
26117
- let groupNavigationGenerated = false;
26118
26251
  const nodes = [];
26119
26252
  Object.keys(views).forEach((viewKey) => {
26120
26253
  const view = views[viewKey];
26121
- if (!groupNavigationGenerated && this.isGroupNavigationNode(view)) {
26122
- groupNavigationGenerated = true;
26123
- const insertPosition = (ancestorNodeContainer ?? nodes).length;
26124
- this._subLangChange = this._languageService.getLangChange$().subscribe(() => {
26125
- this.loadGroupNavigationNodes(insertPosition, ancestorNodeContainer ?? nodes);
26126
- });
26127
- this.loadGroupNavigationNodes(insertPosition, ancestorNodeContainer ?? nodes);
26128
- return; // continue
26129
- }
26130
26254
  if (!this.hasNavigation(view) && !this.hasSubRoutes(view)) {
26131
26255
  return; // continue
26132
26256
  }
@@ -26231,111 +26355,6 @@ class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerC
26231
26355
  }
26232
26356
  this.resolveLevels(this.dataSource.data);
26233
26357
  }
26234
- /**
26235
- * @returns `true` if the layout of the provided {@link View} node's name indicates it is a
26236
- * [group navigation outlet]{@link GroupNavigationConstants#GROUP_NAVIGATION_OUTLET}. Returns `false` otherwise.
26237
- */
26238
- isGroupNavigationNode(view) {
26239
- return view?.layout?.name === GroupNavigationConstants.GROUP_NAVIGATION_OUTLET;
26240
- }
26241
- /**
26242
- * Forces a reload of the group navigation nodes.
26243
- * @param insertPosition the position in the container where group navigation nodes reside
26244
- * @param nodeContainer the node container that contains the group navigation nodes
26245
- * (can be an inner node of the navigation tree or its root)
26246
- */
26247
- loadGroupNavigationNodes(insertPosition, nodeContainer) {
26248
- if (this._subGroupResolution !== undefined && !this._subGroupResolution.closed) {
26249
- this._subGroupResolution.unsubscribe();
26250
- }
26251
- this._subGroupResolution = this.generateGroupNavigationNodes().pipe(take(1)).subscribe(groupNavNodes => {
26252
- nodeContainer.splice(insertPosition, this._groupNavNodesCount, ...groupNavNodes);
26253
- this._groupNavNodesCount = groupNavNodes.length;
26254
- refreshTree(this.dataSource);
26255
- });
26256
- }
26257
- generateGroupNavigationNodes() {
26258
- return forkJoin(this._activeGroupService.activeGroups.map(groupCase => {
26259
- return this._taskResourceService.searchTask(SimpleFilter.fromTaskQuery({
26260
- case: { id: groupCase.stringId },
26261
- transitionId: GroupNavigationConstants.NAVIGATION_CONFIG_TRANSITION_ID
26262
- })).pipe(map(taskPage => {
26263
- if (hasContent(taskPage)) {
26264
- return this._taskResourceService.getData(taskPage.content[0].stringId);
26265
- }
26266
- else {
26267
- this._log.error('Group navigation configuration task was not found.'
26268
- + ' Navigation for this group cannot be constructed.');
26269
- return of([]);
26270
- }
26271
- }), concatMap(o => o));
26272
- })).pipe(map((navigationConfigurations) => {
26273
- const result = [];
26274
- for (const navConfig of navigationConfigurations) {
26275
- result.push(...this.convertDatagroupsToNavEntries(navConfig));
26276
- }
26277
- return result;
26278
- }));
26279
- }
26280
- convertDatagroupsToNavEntries(navConfigDatagroups) {
26281
- const result = [];
26282
- const entryDataGroupIndices = [];
26283
- navConfigDatagroups.forEach((group, index) => {
26284
- if (group.fields.some(field => field.stringId === GroupNavigationConstants.NAVIGATION_ENTRY_MARKER_FIELD_ID_SUFFIX)) {
26285
- entryDataGroupIndices.push(index);
26286
- }
26287
- });
26288
- let navEntriesTaskRef;
26289
- navConfigDatagroups.some(group => {
26290
- const taskRef = getField(group.fields, GroupNavigationConstants.NAVIGATION_ENTRIES_TASK_REF_FIELD_ID);
26291
- if (taskRef !== undefined) {
26292
- navEntriesTaskRef = taskRef;
26293
- }
26294
- return !!taskRef;
26295
- });
26296
- if (!navEntriesTaskRef) {
26297
- throw new Error('The navigation configuration task contains no task ref with entries. Navigation cannot be constructed');
26298
- }
26299
- for (let order = 0; order < navEntriesTaskRef.value.length; order++) {
26300
- const index = entryDataGroupIndices[order];
26301
- const label = extractIconAndTitle(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY));
26302
- const newNode = { url: '', ...label };
26303
- const url = this._navigationRouteProvider.route;
26304
- if (url === undefined) {
26305
- this._log.error(`No URL is configured in nae.json for configurable group navigation. Dynamic navigation entry was ignored`);
26306
- continue;
26307
- }
26308
- newNode.url = `/${url}/${navEntriesTaskRef.value[order]}`;
26309
- const allowedRoles = extractRoles(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY), GroupNavigationConstants.NAVIGATION_ENTRY_ALLOWED_ROLES_FIELD_ID_SUFFIX);
26310
- const bannedRoles = extractRoles(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY), GroupNavigationConstants.NAVIGATION_ENTRY_BANNED_ROLES_FIELD_ID_SUFFIX);
26311
- const splitAllowedRoles = this.extractRoleAndNetId(allowedRoles);
26312
- const splitBannedRoles = this.extractRoleAndNetId(bannedRoles);
26313
- if ((splitAllowedRoles.length === 0
26314
- || splitAllowedRoles.some(idPair => this._userService.hasRoleByIdentifier(idPair[0], idPair[1])))
26315
- && !splitBannedRoles.some(idPair => this._userService.hasRoleByIdentifier(idPair[0], idPair[1]))) {
26316
- result.push(newNode);
26317
- }
26318
- }
26319
- return result;
26320
- }
26321
- /**
26322
- * Splits the provided strings on the ':' character and returns an array of the resulting splits.
26323
- *
26324
- * If any of the input strings split into fewer or more than 2 strings an error is thrown.
26325
- *
26326
- * @param joined a list of strings in the form `<role identifier>:<net identifier>`
26327
- */
26328
- extractRoleAndNetId(joined) {
26329
- const split = [];
26330
- for (const pair of joined) {
26331
- const splitPair = pair.split(':');
26332
- if (splitPair.length !== 2) {
26333
- throw new Error(`The role-net pair '${pair}' has invalid format! Cannot extract role and net identifiers.`);
26334
- }
26335
- split.push(splitPair);
26336
- }
26337
- return split;
26338
- }
26339
26358
  }
26340
26359
  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 });
26341
26360
  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 });
@@ -26718,6 +26737,146 @@ class ViewClassInfo extends ImportToAdd {
26718
26737
  }
26719
26738
  }
26720
26739
 
26740
+ var GroupNavigationConstants;
26741
+ (function (GroupNavigationConstants) {
26742
+ /**
26743
+ * Name of the component that indicates the position of the group specific navigation elements.
26744
+ */
26745
+ GroupNavigationConstants["GROUP_NAVIGATION_OUTLET"] = "groupNavigation";
26746
+ /**
26747
+ * Name of the router param that is used to provide information about the selected filter to the group navigation view component
26748
+ */
26749
+ GroupNavigationConstants["GROUP_NAVIGATION_ROUTER_PARAM"] = "filterCaseId";
26750
+ /**
26751
+ * Field id, that contains the tab name of the navigation item.
26752
+ */
26753
+ GroupNavigationConstants["NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX"] = "tab_name";
26754
+ /**
26755
+ * Boolean field id, that determines if the navigation defines a tab icon.
26756
+ */
26757
+ GroupNavigationConstants["NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX"] = "use_tab_icon";
26758
+ /**
26759
+ * Text field id, that contains the id of the used material icon.
26760
+ */
26761
+ GroupNavigationConstants["NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX"] = "tab_icon";
26762
+ /**
26763
+ * TaskRef field, that contains taskId of filter task
26764
+ * */
26765
+ GroupNavigationConstants["ITEM_FIELD_ID_FILTER_TASKREF"] = "current_filter_preview";
26766
+ /**
26767
+ * Text field id, that contains title of create case button
26768
+ * */
26769
+ GroupNavigationConstants["ITEM_FIELD_ID_CREATE_CASE_BUTTON_TITLE"] = "create_case_button_title";
26770
+ /**
26771
+ * Text field id, that contains icon name of create case button
26772
+ * */
26773
+ GroupNavigationConstants["ITEM_FIELD_ID_CREATE_CASE_BUTTON_ICON"] = "create_case_button_icon";
26774
+ /**
26775
+ * EnumerationMap field, that contains selected search type for case view
26776
+ * */
26777
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_VIEW_SEARCH_TYPE"] = "case_view_search_type";
26778
+ /**
26779
+ * EnumerationMap field, that contains selected search type for task view
26780
+ * */
26781
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_VIEW_SEARCH_TYPE"] = "task_view_search_type";
26782
+ /**
26783
+ * Boolean field, that is true if user wants to merge base filter and custom filter
26784
+ * */
26785
+ GroupNavigationConstants["ITEM_FIELD_ID_MERGE_FILTERS"] = "merge_filters";
26786
+ /**
26787
+ * TaskRef field, that contains taskId of custom filter for task view
26788
+ * */
26789
+ GroupNavigationConstants["ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF"] = "current_additional_filter_preview";
26790
+ /**
26791
+ * Boolean field, that is true if the user wants to see more menu for case item in case view
26792
+ * */
26793
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_SHOW_MORE_MENU"] = "case_show_more_menu";
26794
+ /**
26795
+ * Boolean field, that is true if no input for title in case creation is shown
26796
+ * */
26797
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_TITLE_IN_CREATION"] = "case_require_title_in_creation";
26798
+ /**
26799
+ * Text field, that contains banned processes in case creation as a value
26800
+ * */
26801
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_BANNED_PROCESS_CREATION"] = "case_banned_nets_in_creation";
26802
+ /**
26803
+ * Boolean field, that is true if the user wants to see more menu for task item in task view
26804
+ * */
26805
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_SHOW_MORE_MENU"] = "task_show_more_menu";
26806
+ /**
26807
+ * MultichoiceMap field, that contains selected header modes for case view as a value
26808
+ * */
26809
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_HEADERS_MODE"] = "case_headers_mode";
26810
+ /**
26811
+ * Boolean field, that is true if table mode can be applied in case view
26812
+ * */
26813
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_ALLOW_TABLE_MODE"] = "case_allow_header_table_mode";
26814
+ /**
26815
+ * EnumerationMap field, that contains selected default header mode for case view as a value
26816
+ * */
26817
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_DEFAULT_HEADERS_MODE"] = "case_headers_default_mode";
26818
+ /**
26819
+ * Boolean field, that is true to make mode menu in case view visible
26820
+ * */
26821
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_HEADERS_CHANGEABLE"] = "case_is_header_mode_changeable";
26822
+ /**
26823
+ * MultichoiceMap field, that contains selected header modes for task view as a value
26824
+ * */
26825
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_HEADERS_MODE"] = "task_headers_mode";
26826
+ /**
26827
+ * Boolean field, that is true if table mode can be applied in task view
26828
+ * */
26829
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_ALLOW_TABLE_MODE"] = "task_allow_header_table_mode";
26830
+ /**
26831
+ * EnumerationMap field, that contains selected default header mode for task view as a value
26832
+ * */
26833
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_DEFAULT_HEADERS_MODE"] = "task_headers_default_mode";
26834
+ /**
26835
+ * Boolean field, that is true to make mode menu in task view visible
26836
+ * */
26837
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_HEADERS_CHANGEABLE"] = "task_is_header_mode_changeable";
26838
+ /**
26839
+ * Boolean field, that is true to use default headers configuration for case view
26840
+ * */
26841
+ GroupNavigationConstants["ITEM_FIELD_ID_USE_CASE_DEFAULT_HEADERS"] = "use_case_default_headers";
26842
+ /**
26843
+ * Text field, that contains default header metadata separated by comma for case view as a value
26844
+ * */
26845
+ GroupNavigationConstants["ITEM_FIELD_ID_CASE_DEFAULT_HEADERS"] = "case_default_headers";
26846
+ /**
26847
+ * Boolean field, that is true to use default headers configuration for task view
26848
+ * */
26849
+ GroupNavigationConstants["ITEM_FIELD_ID_USE_TASK_DEFAULT_HEADERS"] = "use_task_default_headers";
26850
+ /**
26851
+ * Text field, that contains default header metadata separated by comma for task view as a value
26852
+ * */
26853
+ GroupNavigationConstants["ITEM_FIELD_ID_TASK_DEFAULT_HEADERS"] = "task_default_headers";
26854
+ /**
26855
+ * MultichoiceMap field, that contains allowed roles as value
26856
+ * */
26857
+ GroupNavigationConstants["ITEM_FIELD_ID_ALLOWED_ROLES"] = "allowed_roles";
26858
+ /**
26859
+ * MultichoiceMap field, that contains banned roles as value
26860
+ * */
26861
+ GroupNavigationConstants["ITEM_FIELD_ID_BANNED_ROLES"] = "banned_roles";
26862
+ /**
26863
+ * Text field, that contains icon identifier
26864
+ * */
26865
+ GroupNavigationConstants["ITEM_FIELD_ID_MENU_ICON"] = "menu_icon";
26866
+ /**
26867
+ * I18n field, that contains labels of menu item
26868
+ * */
26869
+ GroupNavigationConstants["ITEM_FIELD_ID_MENU_NAME"] = "menu_name";
26870
+ /**
26871
+ * Text field, that contains URI
26872
+ * */
26873
+ GroupNavigationConstants["ITEM_FIELD_ID_NODE_PATH"] = "nodePath";
26874
+ /**
26875
+ * Boolean field, that is true if item contains child items
26876
+ * */
26877
+ GroupNavigationConstants["ITEM_FIELD_ID_HAS_CHILDREN"] = "hasChildren";
26878
+ })(GroupNavigationConstants || (GroupNavigationConstants = {}));
26879
+
26721
26880
  /**
26722
26881
  * Holds component for dynamic routing resolution of group navigation component resolver component by the {@link RoutingBuilderService}.
26723
26882
  */
@@ -26842,15 +27001,17 @@ class RoutingBuilderService {
26842
27001
  if (view.layout.name === GroupNavigationConstants.GROUP_NAVIGATION_OUTLET) {
26843
27002
  return this._groupNavigationComponentResolverComponent;
26844
27003
  }
26845
- let className;
27004
+ const className = RoutingBuilderService.parseClassNameFromView(view, configPath);
27005
+ return this._viewService.resolveNameToClass(className);
27006
+ }
27007
+ static parseClassNameFromView(view, configPath) {
26846
27008
  if (!!view.layout.componentName) {
26847
- className = `${classify(view.layout.componentName)}Component`;
27009
+ return `${classify(view.layout.componentName)}Component`;
26848
27010
  }
26849
27011
  else {
26850
27012
  const classInfo = new ViewClassInfo(configPath, view.layout.name, view.layout.componentName);
26851
- className = classInfo.className;
27013
+ return classInfo.className;
26852
27014
  }
26853
- return this._viewService.resolveNameToClass(className);
26854
27015
  }
26855
27016
  defaultRoutesRedirects() {
26856
27017
  const result = [];
@@ -26887,245 +27048,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
26887
27048
  args: [NAE_GROUP_NAVIGATION_COMPONENT_RESOLVER_COMPONENT]
26888
27049
  }] }]; } });
26889
27050
 
26890
- /**
26891
- * Case search request page size
26892
- */
26893
- const NAE_URI_NODE_CASES_PAGE_SIZE = new InjectionToken('NaeUriNodeCasesPageSize');
26894
-
26895
- /**
26896
- * Service for accessing backend resource to resolve URI objects
26897
- * */
26898
- class UriResourceService extends AbstractResourceService {
26899
- constructor(provider, configService) {
26900
- super('petrinet', provider, configService);
26901
- }
26902
- getRoot() {
26903
- return this._resourceProvider.get$('uri/root', this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
26904
- }
26905
- getByLevel(level) {
26906
- return this._resourceProvider.get$('uri/level/' + level, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
26907
- }
26908
- getNodesByParent(parentId) {
26909
- return this._resourceProvider.get$('uri/parent/' + parentId, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
26910
- }
26911
- getNodeByUri(uriPath) {
26912
- return this._resourceProvider.get$('uri/' + btoa(uriPath), this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
26913
- }
26914
- }
26915
- 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 });
26916
- UriResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, providedIn: 'root' });
26917
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriResourceService, decorators: [{
26918
- type: Injectable,
26919
- args: [{
26920
- providedIn: 'root'
26921
- }]
26922
- }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: ConfigurationService }]; } });
26923
-
26924
- /**
26925
- * Service for managing URIs
26926
- * */
26927
- class UriService {
26928
- constructor(_logger, _resourceService, _caseResourceService, _activeGroupService, pageSize) {
26929
- this._logger = _logger;
26930
- this._resourceService = _resourceService;
26931
- this._caseResourceService = _caseResourceService;
26932
- this._activeGroupService = _activeGroupService;
26933
- this.pageSize = pageSize;
26934
- if (!pageSize) {
26935
- this.pageSize = 20;
26936
- }
26937
- if (typeof this.pageSize === 'string') {
26938
- this.pageSize = parseInt(this.pageSize);
26939
- }
26940
- this._rootLoading$ = new LoadingEmitter();
26941
- this._parentLoading$ = new LoadingEmitter();
26942
- this._activeNode$ = new BehaviorSubject(undefined);
26943
- this.loadRoot();
26944
- }
26945
- ngOnDestroy() {
26946
- this._rootLoading$.complete();
26947
- this._parentLoading$.complete();
26948
- this._activeNode$.complete();
26949
- }
26950
- get root() {
26951
- return this._rootNode;
26952
- }
26953
- get rootLoaded$() {
26954
- return this._rootLoading$;
26955
- }
26956
- isRoot(node) {
26957
- return node.id === this._rootNode.id && node.uriPath === this._rootNode.uriPath;
26958
- }
26959
- get activeNode() {
26960
- return this._activeNode$.getValue();
26961
- }
26962
- set activeNode(node) {
26963
- if (node.parentId && !node.parent) {
26964
- if (node.parentId === this._rootNode.id) {
26965
- node.parent = this._rootNode;
26966
- }
26967
- else {
26968
- this._parentLoading$.on();
26969
- this.getNodeByPath(this.resolveParentPath(node)).subscribe(n => {
26970
- node.parent = !n ? this._rootNode : n;
26971
- this._parentLoading$.off();
26972
- }, error => {
26973
- this._logger.error(error);
26974
- this._parentLoading$.off();
26975
- });
26976
- }
26977
- }
26978
- this._activeNode$.next(node);
26979
- }
26980
- get activeNode$() {
26981
- return this._activeNode$;
26982
- }
26983
- get parentNodeLoading$() {
26984
- return this._parentLoading$;
26985
- }
26986
- /**
26987
- * Loads root ID into variable.
26988
- * When root node is loaded and active node is not set yet the root node is set as active node
26989
- * */
26990
- loadRoot() {
26991
- this._rootLoading$.on();
26992
- this._resourceService.getRoot().subscribe(node => {
26993
- if (!!node) {
26994
- this._rootNode = node;
26995
- if (!this.activeNode) {
26996
- this.activeNode = this._rootNode;
26997
- }
26998
- }
26999
- this._rootLoading$.off();
27000
- }, error => {
27001
- this._logger.error(error);
27002
- this._rootLoading$.off();
27003
- });
27004
- }
27005
- reset() {
27006
- this.activeNode = this._rootNode;
27007
- return this._rootNode;
27008
- }
27009
- /**
27010
- * Get uri node by uri path.
27011
- * @param path
27012
- */
27013
- getNodeByPath(path) {
27014
- return this._resourceService.getNodeByUri(path).pipe(map(n => this.capitalizeName(n)));
27015
- }
27016
- /**
27017
- * Get child nodes of provides node.
27018
- * @param node parent node
27019
- */
27020
- getChildNodes(node) {
27021
- if (!node)
27022
- node = this.activeNode;
27023
- return this._resourceService.getNodesByParent(node.id).pipe(map(nodes => {
27024
- this.capitalizeNames(nodes);
27025
- return nodes;
27026
- }));
27027
- }
27028
- /**
27029
- * Get cases under uri node
27030
- * @param node parent node of cases
27031
- * @param processIdentifiers optional search filter for process identifier to get only cases from the process
27032
- * @param pageNumber optional parameter for load page on the index. Default value is 0 (the first page).
27033
- * @param pageSize optional parameter for loaded page size. Defaults to value of injection token URI_NODE_CASES_PAGE_SIZE or to value "20".
27034
- */
27035
- getCasesOfNode(node, processIdentifiers, pageNumber = 0, pageSize = this.pageSize) {
27036
- if (!node)
27037
- node = this.activeNode;
27038
- const searchBody = {
27039
- uriNodeId: node.id,
27040
- };
27041
- if (!!processIdentifiers) {
27042
- searchBody.process = processIdentifiers.map(id => ({ identifier: id }));
27043
- }
27044
- // TODO active group is broken a given the wrong id
27045
- // if (!!this._activeGroupService.activeGroup) {
27046
- // searchBody.data = {};
27047
- // searchBody.data['parentId'] = this._activeGroupService.activeGroup.stringId;
27048
- // }
27049
- let httpParams = new HttpParams()
27050
- .set(PaginationParams.PAGE_SIZE, pageSize)
27051
- .set(PaginationParams.PAGE_NUMBER, pageNumber);
27052
- return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery(searchBody), httpParams);
27053
- }
27054
- /**
27055
- * Get siblings node of the provided node
27056
- * @param node siblings node
27057
- */
27058
- getSiblingsOfNode(node) {
27059
- if (!node)
27060
- node = this.activeNode;
27061
- return this._resourceService.getNodesByParent(node.parentId).pipe(map(nodes => {
27062
- this.capitalizeNames(nodes);
27063
- return nodes;
27064
- }));
27065
- }
27066
- /**
27067
- * Get nodes on the same uri level starting from 0. Root node is no 0 level.
27068
- * @param level
27069
- * @param parent optional parameter to filter nodes with common parent
27070
- */
27071
- getNodesOnLevel(level, parent) {
27072
- if (level === 0)
27073
- return of([this.root]);
27074
- return this._resourceService.getByLevel(level).pipe(map(nodes => {
27075
- const ns = !!parent?.id ? nodes.filter(n => n.parentId === parent.id) : nodes;
27076
- this.capitalizeNames(ns);
27077
- return ns;
27078
- }));
27079
- }
27080
- resolveParentPath(node) {
27081
- if (!node)
27082
- node = this.activeNode;
27083
- const lastDelimiter = node.uriPath.lastIndexOf('/');
27084
- if (lastDelimiter === -1)
27085
- return 'root';
27086
- return node.uriPath.substring(0, lastDelimiter);
27087
- }
27088
- splitNodePath(node) {
27089
- return node?.uriPath.split('/').filter(s => s !== UriService.ROOT);
27090
- }
27091
- capitalizeNames(nodes) {
27092
- if (!(nodes instanceof Array))
27093
- return;
27094
- nodes.forEach(n => this.capitalizeName(n));
27095
- }
27096
- /**
27097
- * /netgrif/nae_system/processes/... => Netgrif -> Nae Systems -> Processes
27098
- * @param node
27099
- * @private
27100
- */
27101
- capitalizeName(node) {
27102
- let parts = node.name.split('_');
27103
- parts = parts.map(p => {
27104
- if (p === undefined || p.length === 0)
27105
- return;
27106
- if (p.length === 1)
27107
- return p.toUpperCase();
27108
- return p.charAt(0).toUpperCase() + p.substring(1);
27109
- });
27110
- node.name = parts.join(' ');
27111
- return node;
27112
- }
27113
- }
27114
- UriService.ROOT = 'root';
27115
- 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 });
27116
- UriService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, providedIn: 'root' });
27117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UriService, decorators: [{
27118
- type: Injectable,
27119
- args: [{
27120
- providedIn: 'root',
27121
- }]
27122
- }], ctorParameters: function () { return [{ type: LoggerService }, { type: UriResourceService }, { type: CaseResourceService }, { type: ActiveGroupService }, { type: undefined, decorators: [{
27123
- type: Optional
27124
- }, {
27125
- type: Inject,
27126
- args: [NAE_URI_NODE_CASES_PAGE_SIZE]
27127
- }] }]; } });
27128
-
27129
27051
  /**
27130
27052
  * Holds all identifiers of the Impersonation config process in an accessible manner
27131
27053
  */
@@ -27296,21 +27218,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
27296
27218
  args: [NAE_ADMIN_IMPERSONATE_DIALOG_COMPONENT]
27297
27219
  }] }]; } });
27298
27220
 
27299
- const FILTER_IDENTIFIERS = [
27300
- 'preference_filter_item',
27221
+ const MENU_IDENTIFIERS = [
27222
+ 'preference_item',
27301
27223
  ];
27302
- const FILTER_VIEW_TASK_TRANSITION_ID = 'view';
27303
- const FILTER_DEFAULT_HEADERS_ID = 'default_headers';
27224
+ const SETTINGS_TRANSITION_ID = 'item_settings';
27304
27225
  const LEFT_DRAWER_DEFAULT_WIDTH = 60;
27305
27226
  const RIGHT_DRAWER_DEFAULT_WIDTH = 240;
27306
27227
  const RIGHT_DRAWER_DEFAULT_MIN_WIDTH = 180;
27307
27228
  const RIGHT_DRAWER_MAX_WIDTH = 460;
27229
+ const RIGHT_SIDE_NEW_PAGE_SIZE = 10;
27230
+ const RIGHT_SIDE_INIT_PAGE_SIZE = 20;
27231
+ var MenuOrder;
27232
+ (function (MenuOrder) {
27233
+ MenuOrder[MenuOrder["Ascending"] = 0] = "Ascending";
27234
+ MenuOrder[MenuOrder["Descending"] = 1] = "Descending";
27235
+ })(MenuOrder || (MenuOrder = {}));
27308
27236
  class AbstractNavigationDoubleDrawerComponent {
27309
- constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
27237
+ constructor(_router, _activatedRoute, _breakpoint, _languageService, _translateService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
27310
27238
  this._router = _router;
27311
27239
  this._activatedRoute = _activatedRoute;
27312
27240
  this._breakpoint = _breakpoint;
27313
27241
  this._languageService = _languageService;
27242
+ this._translateService = _translateService;
27314
27243
  this._userService = _userService;
27315
27244
  this._accessService = _accessService;
27316
27245
  this._log = _log;
@@ -27344,14 +27273,14 @@ class AbstractNavigationDoubleDrawerComponent {
27344
27273
  disableClose: false,
27345
27274
  width: RIGHT_DRAWER_DEFAULT_WIDTH,
27346
27275
  };
27347
- this.leftNodes = new Array();
27348
- this.rightNodes = new Array();
27349
- this.views = new Array();
27276
+ this.leftItems = new Array();
27277
+ this.rightItems = new Array();
27350
27278
  this.leftLoading$ = new LoadingEmitter();
27351
27279
  this.rightLoading$ = new LoadingEmitter();
27352
27280
  this.nodeLoading$ = new LoadingEmitter();
27281
+ this.itemsOrder = MenuOrder.Ascending;
27282
+ this.hiddenCustomItems = [];
27353
27283
  this._childCustomViews = {};
27354
- this.moreMenuItems = new Array();
27355
27284
  }
27356
27285
  ngOnInit() {
27357
27286
  this._breakpointSubscription = this._breakpoint.observe([Breakpoints.HandsetLandscape]).subscribe(() => {
@@ -27407,47 +27336,17 @@ class AbstractNavigationDoubleDrawerComponent {
27407
27336
  this.rightLoading$.off();
27408
27337
  }
27409
27338
  if (this._uriService.isRoot(node)) {
27410
- this.leftNodes = [];
27339
+ this.leftItems = [];
27411
27340
  this.loadRightSide();
27412
27341
  return;
27413
27342
  }
27414
- if (!this.leftNodes.find(n => n.id === node.id)) {
27343
+ if (!this.leftItems.find(item => item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.uriPath)) {
27415
27344
  this.loadLeftSide();
27416
27345
  }
27417
27346
  this.loadRightSide();
27418
27347
  }
27419
- resolveUriForChildViews(configPath, childView) {
27420
- if (!childView.processUri)
27421
- return;
27422
- if (!this._accessService.canAccessView(childView, configPath))
27423
- return;
27424
- if (!this._childCustomViews[childView.processUri]) {
27425
- this._childCustomViews[childView.processUri] = {};
27426
- }
27427
- this._childCustomViews[childView.processUri][configPath] = {
27428
- id: configPath,
27429
- ...childView,
27430
- };
27431
- }
27432
- resolveHiddenMenuItemFromChildViews(configPath, childView) {
27433
- if (!childView.navigation)
27434
- return;
27435
- if (!this._accessService.canAccessView(childView, configPath))
27436
- return;
27437
- // @ts-ignore
27438
- if (!!(childView?.navigation?.hidden)) {
27439
- this.moreMenuItems.push({
27440
- id: configPath,
27441
- ...childView,
27442
- });
27443
- }
27444
- }
27445
27348
  ngOnDestroy() {
27446
27349
  this._breakpointSubscription?.unsubscribe();
27447
- this._leftNodesSubscription?.unsubscribe();
27448
- this._rightNodesSubscription?.unsubscribe();
27449
- this._filtersSubscription?.unsubscribe();
27450
- this._rootSubscription?.unsubscribe();
27451
27350
  this._currentNodeSubscription?.unsubscribe();
27452
27351
  this.leftLoading$.complete();
27453
27352
  this.rightLoading$.complete();
@@ -27538,73 +27437,119 @@ class AbstractNavigationDoubleDrawerComponent {
27538
27437
  return;
27539
27438
  this.currentNode = this._currentNode.parent;
27540
27439
  }
27541
- onNodeClick(node) {
27542
- this.currentNode = node;
27543
- }
27544
- onViewClick(view) {
27440
+ onItemClick(item) {
27545
27441
  this._uriService.activeNode = this._currentNode;
27442
+ if (this.hasItemChildren(item)) {
27443
+ const path = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value;
27444
+ this._uriService.getNodeByPath(path).subscribe(node => {
27445
+ this.currentNode = node;
27446
+ }, error => {
27447
+ this._log.error(error);
27448
+ });
27449
+ }
27450
+ }
27451
+ hasItemChildren(item) {
27452
+ return item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)?.value;
27453
+ }
27454
+ isItemAndNodeEqual(item, node) {
27455
+ return item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.uriPath;
27546
27456
  }
27547
27457
  loadLeftSide() {
27548
27458
  if (this._uriService.isRoot(this._currentNode)) {
27549
- this.leftNodes = [];
27459
+ this.leftItems = [];
27550
27460
  return;
27551
27461
  }
27552
27462
  this.leftLoading$.on();
27553
- this._leftNodesSubscription = this._uriService.getSiblingsOfNode(this._currentNode).subscribe(nodes => {
27554
- this.leftNodes = nodes instanceof Array ? nodes : [];
27555
- this.leftNodes.sort((a, b) => this.compareStrings(a.name, b.name));
27556
- this.leftLoading$.off();
27463
+ this._uriService.getCasesOfNode(this.currentNode.parent, MENU_IDENTIFIERS, 0, 1).subscribe(page => {
27464
+ page?.pagination?.totalElements === 0 ? of([]) : this._uriService.getCasesOfNode(this.currentNode.parent, MENU_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content)).subscribe(result => {
27465
+ this.leftItems = result.filter(folder => folder.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)?.value === true).map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27466
+ this.leftItems.sort((a, b) => a?.navigation?.title.localeCompare(b?.navigation?.title));
27467
+ this.leftLoading$.off();
27468
+ }, error => {
27469
+ this._log.error(error);
27470
+ this.leftItems = [];
27471
+ this.leftLoading$.off();
27472
+ });
27557
27473
  }, error => {
27558
27474
  this._log.error(error);
27559
- this.leftNodes = [];
27475
+ this.leftItems = [];
27560
27476
  this.leftLoading$.off();
27561
27477
  });
27562
27478
  }
27563
27479
  loadRightSide() {
27564
27480
  this.rightLoading$.on();
27565
- this._uriService.getCasesOfNode(this.currentNode, FILTER_IDENTIFIERS, 0, 1).subscribe(page => {
27566
- this._log.debug('Number of filters for uri ' + this._currentNode.uriPath + ': ' + page?.pagination?.totalElements);
27567
- forkJoin({
27568
- folders: this._uriService.getChildNodes(this._currentNode),
27569
- filters: page?.pagination?.totalElements === 0 ? of([]) : this._uriService.getCasesOfNode(this._currentNode, FILTER_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content)),
27570
- }).subscribe(result => {
27571
- this.rightNodes = result.folders instanceof Array ? result.folders : [];
27572
- this.rightNodes.sort((a, b) => this.compareStrings(a.name, b.name));
27573
- this.views = (result.filters instanceof Array ? result.filters : []).map(f => this.resolveFilterCaseToViewNavigationItem(f)).filter(i => !!i);
27574
- if (!!this._childCustomViews[this._currentNode.uriPath]) {
27575
- this.views.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
27481
+ this.moreItems = [];
27482
+ this._uriService.getCasesOfNode(this.currentNode, MENU_IDENTIFIERS, 0, 1).subscribe(page => {
27483
+ this._log.debug('Number of items for uri ' + this._currentNode.uriPath + ': ' + page?.pagination?.totalElements);
27484
+ (page?.pagination?.totalElements === 0 ? of([]) : this._uriService.getCasesOfNode(this._currentNode, MENU_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content))).subscribe(result => {
27485
+ result = result.sort((a, b) => a?.title.localeCompare(b?.title));
27486
+ if (result.length > RIGHT_SIDE_INIT_PAGE_SIZE) {
27487
+ const rawRightItems = result.splice(0, RIGHT_SIDE_INIT_PAGE_SIZE);
27488
+ this.rightItems = rawRightItems.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27489
+ this.moreItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27576
27490
  }
27577
- // @ts-ignore
27578
- this.views.sort((a, b) => this.compareStrings(a?.navigation?.title, b?.navigation?.title));
27491
+ else {
27492
+ this.rightItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
27493
+ }
27494
+ this.resolveCustomViewsInRightSide();
27579
27495
  this.rightLoading$.off();
27580
27496
  }, error => {
27581
27497
  this._log.error(error);
27582
- this.rightNodes = [];
27583
- this.views = [];
27498
+ this.rightItems = [];
27499
+ this.moreItems = [];
27500
+ this.resolveCustomViewsInRightSide();
27584
27501
  this.rightLoading$.off();
27585
27502
  });
27586
27503
  }, error => {
27587
27504
  this._log.error(error);
27588
- this.rightNodes = [];
27589
- this.views = [];
27505
+ this.rightItems = [];
27506
+ this.moreItems = [];
27507
+ this.resolveCustomViewsInRightSide();
27590
27508
  this.rightLoading$.off();
27591
27509
  });
27592
27510
  }
27593
- resolveFilterCaseToViewNavigationItem(filter) {
27511
+ loadMoreItems() {
27512
+ if (this.moreItems.length > RIGHT_SIDE_NEW_PAGE_SIZE) {
27513
+ this.rightItems.push(...this.moreItems.splice(0, RIGHT_SIDE_NEW_PAGE_SIZE));
27514
+ }
27515
+ else {
27516
+ this.rightItems.push(...this.moreItems);
27517
+ this.moreItems = [];
27518
+ }
27519
+ }
27520
+ isAscending() {
27521
+ return this.itemsOrder === MenuOrder.Ascending;
27522
+ }
27523
+ switchOrder() {
27524
+ this.itemsOrder = (this.itemsOrder + 1) % 2;
27525
+ let multiplier = 1;
27526
+ if (this.itemsOrder === MenuOrder.Descending) {
27527
+ multiplier = -1;
27528
+ }
27529
+ this.rightItems = this.rightItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
27530
+ this.leftItems = this.leftItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
27531
+ this.moreItems = this.moreItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
27532
+ }
27533
+ resolveCustomViewsInRightSide() {
27534
+ if (!!this._childCustomViews[this._currentNode.uriPath]) {
27535
+ this.rightItems.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
27536
+ }
27537
+ }
27538
+ resolveItemCaseToNavigationItem(itemCase) {
27594
27539
  const item = {
27595
27540
  access: {},
27596
27541
  navigation: {
27597
- icon: filter.immediateData.find(f => f.stringId === 'icon_name')?.value || this.filterIcon,
27598
- title: filter.immediateData.find(f => f.stringId === 'entry_name')?.value?.defaultValue || filter.title,
27542
+ icon: itemCase.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_MENU_ICON)?.value || this.filterIcon,
27543
+ title: this.getTranslation(itemCase.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_MENU_NAME)?.value) || itemCase.title,
27599
27544
  },
27600
27545
  routing: {
27601
- path: this.getFilterRoutingPath(filter),
27546
+ path: this.getItemRoutingPath(itemCase),
27602
27547
  },
27603
- id: filter.stringId,
27604
- resource: filter,
27548
+ id: itemCase.stringId,
27549
+ resource: itemCase,
27605
27550
  };
27606
- const resolvedRoles = this.resolveAccessRoles(filter, 'allowed_roles');
27607
- const resolvedBannedRoles = this.resolveAccessRoles(filter, 'banned_roles');
27551
+ const resolvedRoles = this.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_ALLOWED_ROLES);
27552
+ const resolvedBannedRoles = this.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_BANNED_ROLES);
27608
27553
  if (!!resolvedRoles)
27609
27554
  item.access['role'] = resolvedRoles;
27610
27555
  if (!!resolvedBannedRoles)
@@ -27613,6 +27558,10 @@ class AbstractNavigationDoubleDrawerComponent {
27613
27558
  return;
27614
27559
  return item;
27615
27560
  }
27561
+ getTranslation(value) {
27562
+ const locale = this._translateService.currentLang.split('-')[0];
27563
+ return locale in value.translations ? value.translations[locale] : value.defaultValue;
27564
+ }
27616
27565
  resolveAccessRoles(filter, roleType) {
27617
27566
  const allowedRoles = filter.immediateData.find(f => f.stringId === roleType)?.options;
27618
27567
  if (!allowedRoles || Object.keys(allowedRoles).length === 0)
@@ -27627,17 +27576,11 @@ class AbstractNavigationDoubleDrawerComponent {
27627
27576
  });
27628
27577
  return roles;
27629
27578
  }
27630
- getFilterRoutingPath(filterCase) {
27631
- const viewTaskId = filterCase.tasks.find(taskPair => taskPair.transition === FILTER_VIEW_TASK_TRANSITION_ID).task;
27579
+ getItemRoutingPath(itemCase) {
27580
+ const transId = SETTINGS_TRANSITION_ID;
27581
+ const taskId = itemCase.tasks.find(taskPair => taskPair.transition === transId).task;
27632
27582
  const url = this._dynamicRoutingService.route;
27633
- return `/${url}/${viewTaskId}`;
27634
- }
27635
- compareStrings(a, b) {
27636
- if (!a && !b)
27637
- return 0;
27638
- if (a < b)
27639
- return -1;
27640
- return a > b ? 1 : 0;
27583
+ return `/${url}/${taskId}`;
27641
27584
  }
27642
27585
  /**
27643
27586
  * Function to check whether the back button should be displayed
@@ -27646,20 +27589,17 @@ class AbstractNavigationDoubleDrawerComponent {
27646
27589
  isOnZeroLevel() {
27647
27590
  return !!this._currentNode?.level ? this._currentNode.level == 0 : true;
27648
27591
  }
27649
- isLeftNodesEmpty() {
27650
- return this.leftNodes === undefined || this.leftNodes.length === 0;
27592
+ isLeftItemsEmpty() {
27593
+ return this.leftItems === undefined || this.leftItems.length === 0;
27651
27594
  }
27652
- isRightNodesEmpty() {
27653
- return this.rightNodes === undefined || this.rightNodes.length === 0;
27654
- }
27655
- isViewsEmpty() {
27656
- return this.views === undefined || this.views.length === 0;
27595
+ isRightItemsEmpty() {
27596
+ return this.rightItems === undefined || this.rightItems.length === 0;
27657
27597
  }
27658
27598
  uriNodeTrackBy(index, node) {
27659
27599
  return node.id;
27660
27600
  }
27661
- viewsTrackBy(index, view) {
27662
- return view.id;
27601
+ itemsTrackBy(index, item) {
27602
+ return item.id;
27663
27603
  }
27664
27604
  onResizeEvent(event) {
27665
27605
  if (event.rectangle.width > RIGHT_DRAWER_MAX_WIDTH) {
@@ -27675,8 +27615,33 @@ class AbstractNavigationDoubleDrawerComponent {
27675
27615
  // this.userPreferenceService._drawerWidthChanged$.next(this.width);
27676
27616
  // this.contentWidth.next(this.width);
27677
27617
  }
27618
+ resolveUriForChildViews(configPath, childView) {
27619
+ if (!childView.processUri)
27620
+ return;
27621
+ if (!this._accessService.canAccessView(childView, configPath))
27622
+ return;
27623
+ if (!this._childCustomViews[childView.processUri]) {
27624
+ this._childCustomViews[childView.processUri] = {};
27625
+ }
27626
+ this._childCustomViews[childView.processUri][configPath] = {
27627
+ id: configPath,
27628
+ ...childView,
27629
+ };
27630
+ }
27631
+ resolveHiddenMenuItemFromChildViews(configPath, childView) {
27632
+ if (!childView.navigation)
27633
+ return;
27634
+ if (!this._accessService.canAccessView(childView, configPath))
27635
+ return;
27636
+ if (!!(childView?.navigation?.hidden)) {
27637
+ this.hiddenCustomItems.push({
27638
+ id: configPath,
27639
+ ...childView,
27640
+ });
27641
+ }
27642
+ }
27678
27643
  }
27679
- 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 });
27644
+ 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 });
27680
27645
  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 });
27681
27646
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, decorators: [{
27682
27647
  type: Component,
@@ -27684,7 +27649,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
27684
27649
  selector: 'ncc-abstract-navigation-double-drawer',
27685
27650
  template: '',
27686
27651
  }]
27687
- }], 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: [{
27652
+ }], 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: [{
27688
27653
  type: Input
27689
27654
  }], portalRightMenu: [{
27690
27655
  type: Input
@@ -27787,7 +27752,6 @@ class GroupNavigationComponentResolverService {
27787
27752
  result.next(new ComponentPortal(this.resolveViewComponent(taskData), null, Injector.create({
27788
27753
  providers: [
27789
27754
  { provide: NAE_NAVIGATION_ITEM_TASK_DATA, useValue: taskData },
27790
- { provide: NAE_DEFAULT_HEADERS, useValue: this.resolveDefaultHeaders(taskData) },
27791
27755
  ],
27792
27756
  parent: parentInjector
27793
27757
  })));
@@ -27801,12 +27765,6 @@ class GroupNavigationComponentResolverService {
27801
27765
  });
27802
27766
  return result.asObservable();
27803
27767
  }
27804
- resolveDefaultHeaders(caze) {
27805
- const defaultHeadersResponse = [].concat(...caze.map(dataGroup => dataGroup.fields)).find(field => field.stringId === FILTER_DEFAULT_HEADERS_ID)?.value; //ES2019
27806
- if (!defaultHeadersResponse || Object.keys(defaultHeadersResponse).length === 0)
27807
- return undefined;
27808
- return defaultHeadersResponse.split(",");
27809
- }
27810
27768
  forwardError(result, error) {
27811
27769
  result.error(error instanceof HttpErrorResponse ? error.error.message : error.message);
27812
27770
  result.complete();
@@ -27920,17 +27878,320 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
27920
27878
  type: Input
27921
27879
  }] } });
27922
27880
 
27881
+ /**
27882
+ * Search component search mode
27883
+ */
27884
+ var SearchMode;
27885
+ (function (SearchMode) {
27886
+ SearchMode[SearchMode["FULLTEXT"] = 0] = "FULLTEXT";
27887
+ SearchMode[SearchMode["ADVANCED"] = 1] = "ADVANCED";
27888
+ })(SearchMode || (SearchMode = {}));
27889
+
27890
+ /**
27891
+ * Extracts the item name and item icon (if any) rom a section of the navigation item task data.
27892
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
27893
+ * @param translateService is a service to translate label name
27894
+ */
27895
+ function extractIconAndTitle(dataSection, translateService) {
27896
+ const result = { name: '' };
27897
+ if (dataSection.length === 0) {
27898
+ throw new Error('The provided task data does not belong to a Navigation menu item task. Icon and title cannot be extracted');
27899
+ }
27900
+ const nameField = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX);
27901
+ if (nameField === undefined) {
27902
+ throw new Error('Navigation name could not be resolved');
27903
+ }
27904
+ const locale = translateService.currentLang.split('-')[0];
27905
+ result.name = locale in nameField.value.translations ? nameField.value.translations[locale] : nameField.value.defaultValue;
27906
+ const useIcon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX);
27907
+ if (useIcon !== undefined && useIcon.value) {
27908
+ const icon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX);
27909
+ if (icon === undefined) {
27910
+ this._log.error('Navigation entry icon could not be resolved, but is enabled. Icon was ignored');
27911
+ }
27912
+ else {
27913
+ result.icon = icon.value;
27914
+ }
27915
+ }
27916
+ return result;
27917
+ }
27918
+ /**
27919
+ * Based on provided parameter extracts allowed or banned roles into an Array of strings from a section of the navigation item task data.
27920
+ * Each item has format ROLE_IMPORT_ID:NET_IMPORT_ID
27921
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
27922
+ * @param roleFieldId ID of field containing banned or allowed role IDs
27923
+ * @returns an Array of string values representing role IDs
27924
+ */
27925
+ function extractRoles(dataSection, roleFieldId) {
27926
+ if (dataSection.length === 0) {
27927
+ throw new Error('The provided task data does not belong to a Navigation menu item task. Role entries cannot be extracted');
27928
+ }
27929
+ const roleIds = getFieldFromDataGroups(dataSection, roleFieldId);
27930
+ if (roleIds === undefined) {
27931
+ throw new Error('Navigation entry role authorization field could not be resolved');
27932
+ }
27933
+ return roleIds.choices.map(choice => choice.key);
27934
+ }
27935
+ /**
27936
+ * Extracts the data and creates a filter object from the navigation item task data.
27937
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
27938
+ */
27939
+ function extractFilterFromData(dataSection) {
27940
+ return extractFilterFromFilterField(extractFilterFieldFromData(dataSection));
27941
+ }
27942
+ /**
27943
+ * Extracts the filter field from the navigation item task data.
27944
+ * @param dataSection an array containing the data groups that correspond to a single navigation entry
27945
+ * @returns The extracted {@link FilterField} or `undefined` if it could not be extracted.
27946
+ */
27947
+ function extractFilterFieldFromData(dataSection) {
27948
+ const filterField = getFieldFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID);
27949
+ if (filterField === undefined || !(filterField instanceof FilterField)) {
27950
+ throw new Error(`Filter could not be extracted. The provided datagroups do not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'`);
27951
+ }
27952
+ return filterField;
27953
+ }
27954
+ /**
27955
+ * @returns a {@link SimpleFilter} containing the filter stored in the provided {@link FilterField}.
27956
+ * Throws an error if this is not possible.
27957
+ */
27958
+ function extractFilterFromFilterField(filterField) {
27959
+ if (filterField === undefined || !(filterField instanceof FilterField)) {
27960
+ throw new Error('Filter could not be resolved');
27961
+ }
27962
+ return SimpleFilter.fromQuery({ query: filterField.value }, filterField.filterMetadata.filterType);
27963
+ }
27964
+ /**
27965
+ * Extracts the selected search type from enumeration field of the navigation item task data.
27966
+ * @returns a {@link SearchMode} containing {@link SearchMode.ADVANCED} or {@link SearchMode.FULLTEXT} or {@link undefined}
27967
+ * if unexpected value is found
27968
+ * */
27969
+ function extractSearchTypeFromData(dataSection, typeFieldId) {
27970
+ const typeField = getFieldFromDataGroups(dataSection, typeFieldId);
27971
+ if (typeField === undefined) {
27972
+ throw new Error('Navigation entry search type field could not be resolved');
27973
+ }
27974
+ switch (typeField.value) {
27975
+ case 'fulltext':
27976
+ return SearchMode.FULLTEXT;
27977
+ case 'fulltext_advanced':
27978
+ return SearchMode.ADVANCED;
27979
+ default:
27980
+ return undefined;
27981
+ }
27982
+ }
27983
+ /**
27984
+ * Extracts field value from data
27985
+ * @returns value of extracted field
27986
+ * @throws Error if no field is found
27987
+ * */
27988
+ function extractFieldValueFromData(dataSection, fieldId) {
27989
+ const field = getFieldFromDataGroups(dataSection, fieldId);
27990
+ if (field === undefined) {
27991
+ throw new Error(`Field ${fieldId} could not be resolved`);
27992
+ }
27993
+ return field.value;
27994
+ }
27995
+
27996
+ function addAllowedNets(allowedNets, existingAllowedNets) {
27997
+ if (!!allowedNets && allowedNets.length > 0) {
27998
+ existingAllowedNets.next([...allowedNets]);
27999
+ }
28000
+ }
28001
+ /**
28002
+ * Convenience method that can be used as an allowed nets factory for tabbed task views.
28003
+ * If no allowed nets are provided in the injected data then an {@link AllowedNetsService} with no allowed nets is created.
28004
+ * It has a dependency on this class and {@link NAE_TAB_DATA} injection token.
28005
+ */
28006
+ function tabbedAllowedNetsServiceFactory(factory, tabData) {
28007
+ return factory.createFromArray(tabData?.allowedNets ?? []);
28008
+ }
28009
+ /**
28010
+ * Convenience method that can be used as an allowed nets factory for views that are loaded from filter process instances.
28011
+ * It has a dependency on this class and {@link NAE_NAVIGATION_ITEM_TASK_DATA} injection token.
28012
+ */
28013
+ function navigationItemTaskAllowedNetsServiceFactory(factory, baseAllowedNets, navigationItemTaskData) {
28014
+ const filterField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.FILTER_FIELD_ID);
28015
+ const allowedNetsField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.ALLOWED_NETS_FIELD_ID);
28016
+ if (filterField === undefined) {
28017
+ 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!`);
28018
+ }
28019
+ const nets = new BehaviorSubject(Array.from(new Set([...filterField.allowedNets])));
28020
+ if (filterField.filterMetadata.inheritAllowedNets) {
28021
+ baseAllowedNets.allowedNets$.subscribe(allowedNets => {
28022
+ const netSet = new Set(allowedNets);
28023
+ nets.next(Array.from(netSet));
28024
+ });
28025
+ }
28026
+ if (!!allowedNetsField) {
28027
+ addAllowedNets(allowedNetsField.value, nets);
28028
+ allowedNetsField.valueChanges().subscribe(allowedNets => {
28029
+ addAllowedNets(allowedNetsField.value, nets);
28030
+ });
28031
+ }
28032
+ return factory.createFromObservable(nets.asObservable());
28033
+ }
28034
+ /**
28035
+ * Simplifies the creation of {@link AllowedNetsService} instances
28036
+ */
28037
+ class AllowedNetsServiceFactory {
28038
+ constructor(_processService, _petriNetResource, _configService, _log) {
28039
+ this._processService = _processService;
28040
+ this._petriNetResource = _petriNetResource;
28041
+ this._configService = _configService;
28042
+ this._log = _log;
28043
+ }
28044
+ /**
28045
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28046
+ * @returns an instance of {@link AllowedNetsService} with all nets set as the `allowedNets`
28047
+ */
28048
+ createWithAllNets() {
28049
+ return new AllowedNetsService(this._petriNetResource.getAll().pipe(switchMap(nets => {
28050
+ if (nets && Array.isArray(nets)) {
28051
+ return of(nets.map(n => n.identifier));
28052
+ }
28053
+ else {
28054
+ return of([]);
28055
+ }
28056
+ })), this._processService);
28057
+ }
28058
+ /**
28059
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28060
+ * @param allowedNetsIdentifiers identifiers of the allowed nets
28061
+ */
28062
+ createFromArray(allowedNetsIdentifiers) {
28063
+ return new AllowedNetsService(of(allowedNetsIdentifiers), this._processService);
28064
+ }
28065
+ /**
28066
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28067
+ * @param webViewPath path to the view as specified in its configuration. No leading backslash.
28068
+ * Allowed nets are loaded from the configuration of the view.
28069
+ */
28070
+ createFromConfig(webViewPath) {
28071
+ const view = this._configService.getViewByPath(webViewPath);
28072
+ if (view?.layout?.params === undefined) {
28073
+ throw new Error(`Can't load configuration for view with webPath: '${webViewPath}'`);
28074
+ }
28075
+ const viewParams = view.layout.params;
28076
+ if (viewParams.allowedNets === undefined) {
28077
+ this._log.warn(`No 'allowedNets' provided for view with webPath '${webViewPath}'`);
28078
+ }
28079
+ return new AllowedNetsService(of(viewParams.allowedNets ?? []), this._processService);
28080
+ }
28081
+ /**
28082
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28083
+ * @param netIdentifiers$ observable containing the identifiers of the allowed nets.
28084
+ * When a new value is emitted the allowed nets will be updated.
28085
+ */
28086
+ createFromObservable(netIdentifiers$) {
28087
+ return new AllowedNetsService(netIdentifiers$, this._processService);
28088
+ }
28089
+ /**
28090
+ * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
28091
+ * @param filterCase a filter process instance
28092
+ * Allowed nets are set from filter process immediate data
28093
+ */
28094
+ createFromFilterCase(filterCase) {
28095
+ const filterData = getImmediateData(filterCase, UserFilterConstants.FILTER_FIELD_ID);
28096
+ if (filterData === undefined) {
28097
+ throw new Error(`Cannot get filter from case '${filterCase.title}' with id '${filterCase.stringId}'`);
28098
+ }
28099
+ return new AllowedNetsService(of(filterData.allowedNets), this._processService);
28100
+ }
28101
+ }
28102
+ 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 });
28103
+ AllowedNetsServiceFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, providedIn: 'root' });
28104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, decorators: [{
28105
+ type: Injectable,
28106
+ args: [{
28107
+ providedIn: 'root'
28108
+ }]
28109
+ }], ctorParameters: function () { return [{ type: ProcessService }, { type: PetriNetResourceService }, { type: ConfigurationService }, { type: LoggerService }]; } });
28110
+
28111
+ class BaseAllowedNetsService {
28112
+ constructor() {
28113
+ this._baseAllowedNets = new BehaviorSubject([]);
28114
+ }
28115
+ ngOnDestroy() {
28116
+ this._baseAllowedNets.complete();
28117
+ if (this._sub !== undefined) {
28118
+ this._sub.unsubscribe();
28119
+ }
28120
+ }
28121
+ /**
28122
+ * Sets the new identifiers of the base allowed nets
28123
+ * @param nets new base net identifiers
28124
+ */
28125
+ set allowedNets(nets) {
28126
+ this._baseAllowedNets.next(nets);
28127
+ }
28128
+ /**
28129
+ * @deprecated This method should not be used. Use {@link BaseAllowedNetsService#allowedNets$} instead
28130
+ * @returns the currently set allowed nets. Returns an empty array if no value was set.
28131
+ */
28132
+ get allowedNets() {
28133
+ return this._baseAllowedNets.value;
28134
+ }
28135
+ /**
28136
+ * Subscribes to the provided `Observable` and forwards the emissions to the baseAllowedNets `Subject`.
28137
+ * If a new `Observable` is set, the previous Subscription is unsubscribed.
28138
+ * @param observableNets an observable emitting the new base net identifiers
28139
+ */
28140
+ set allowedNets$(observableNets) {
28141
+ if (this._sub !== undefined) {
28142
+ this._sub.unsubscribe();
28143
+ }
28144
+ this._sub = observableNets.subscribe(nets => {
28145
+ this._baseAllowedNets.next(nets);
28146
+ });
28147
+ }
28148
+ /**
28149
+ * @returns an observable that emits the currently set base allowed nets and any subsequent values
28150
+ */
28151
+ get allowedNets$() {
28152
+ return this._baseAllowedNets.asObservable();
28153
+ }
28154
+ }
28155
+ BaseAllowedNetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28156
+ BaseAllowedNetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, providedIn: 'root' });
28157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, decorators: [{
28158
+ type: Injectable,
28159
+ args: [{
28160
+ providedIn: 'root'
28161
+ }]
28162
+ }], ctorParameters: function () { return []; } });
28163
+
27923
28164
  /**
27924
28165
  * This service is able to load the full saved filter including all of its ancestor filters.
27925
28166
  */
27926
28167
  class FilterExtractionService {
27927
- constructor(_filterRepository, _taskResourceService, _log) {
28168
+ constructor(_filterRepository, _taskResourceService, _factory, baseAllowedNets, _log) {
27928
28169
  this._filterRepository = _filterRepository;
27929
28170
  this._taskResourceService = _taskResourceService;
28171
+ this._factory = _factory;
28172
+ this.baseAllowedNets = baseAllowedNets;
27930
28173
  this._log = _log;
27931
28174
  }
27932
- extractCompleteFilterFromData(dataSection) {
27933
- const filterIndex = getFieldIndexFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID);
28175
+ extractAdditionalFilterAllowedNets(dataSection) {
28176
+ const taskRefIndex = getFieldIndexFromDataGroups(dataSection, GroupNavigationConstants.ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF);
28177
+ if (taskRefIndex === undefined) {
28178
+ return undefined;
28179
+ }
28180
+ const sliced = dataSection.slice(taskRefIndex.dataGroupIndex + 1);
28181
+ if (sliced.length == 0) {
28182
+ return undefined;
28183
+ }
28184
+ return navigationItemTaskAllowedNetsServiceFactory(this._factory, this.baseAllowedNets, sliced);
28185
+ }
28186
+ extractCompleteAdditionalFilterFromData(dataSection) {
28187
+ const taskRefIndex = getFieldIndexFromDataGroups(dataSection, GroupNavigationConstants.ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF);
28188
+ if (taskRefIndex === undefined) {
28189
+ return undefined;
28190
+ }
28191
+ return this.extractCompleteFilterFromData(dataSection.slice(taskRefIndex.dataGroupIndex + 1));
28192
+ }
28193
+ extractCompleteFilterFromData(dataSection, fieldId = UserFilterConstants.FILTER_FIELD_ID) {
28194
+ const filterIndex = getFieldIndexFromDataGroups(dataSection, fieldId);
27934
28195
  if (filterIndex === undefined) {
27935
28196
  return undefined;
27936
28197
  }
@@ -27942,7 +28203,7 @@ class FilterExtractionService {
27942
28203
  throw new Error('Filter segment could not be extracted from filter field');
27943
28204
  }
27944
28205
  const parentFilter = this.extractCompleteFilterFromData(dataSection.slice(filterIndex.dataGroupIndex + 1));
27945
- if (parentFilter !== undefined) {
28206
+ if (parentFilter !== undefined && parentFilter.type === filterSegment.type) {
27946
28207
  return filterSegment.merge(parentFilter, MergeOperator.AND);
27947
28208
  }
27948
28209
  // Is the filter view rooted?
@@ -27974,16 +28235,16 @@ class FilterExtractionService {
27974
28235
  return appOriginFilter;
27975
28236
  }
27976
28237
  }
27977
- // the same regexs is used in a backend filter process action. Please keep them in sync
28238
+ // the same regex is used in a backend filter process action. Please keep them in sync
27978
28239
  FilterExtractionService.UNTABBED_VIEW_ID_EXTRACTOR = '^.*?(-\\d+)?$';
27979
- 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 });
28240
+ 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 });
27980
28241
  FilterExtractionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, providedIn: 'root' });
27981
28242
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, decorators: [{
27982
28243
  type: Injectable,
27983
28244
  args: [{
27984
28245
  providedIn: 'root'
27985
28246
  }]
27986
- }], ctorParameters: function () { return [{ type: FilterRepository }, { type: TaskResourceService }, { type: LoggerService }]; } });
28247
+ }], ctorParameters: function () { return [{ type: FilterRepository }, { type: TaskResourceService }, { type: AllowedNetsServiceFactory }, { type: BaseAllowedNetsService }, { type: LoggerService }]; } });
27987
28248
 
27988
28249
  var UriContentType;
27989
28250
  (function (UriContentType) {
@@ -28285,6 +28546,15 @@ class ResultWithAfterActions {
28285
28546
  }
28286
28547
  }
28287
28548
 
28549
+ /**
28550
+ * Forces a re-render of the tree backed by the datasource
28551
+ */
28552
+ function refreshTree(tree) {
28553
+ const d = tree.data;
28554
+ tree.data = null;
28555
+ tree.data = d;
28556
+ }
28557
+
28288
28558
  class CaseTreeService {
28289
28559
  constructor(_caseResourceService, _treeCaseViewService, _taskResourceService, _logger, _processService, _sideMenuService, _translateService, _optionSelectorComponent, _treeConfiguration) {
28290
28560
  this._caseResourceService = _caseResourceService;
@@ -30345,15 +30615,6 @@ class ClausePredicate extends Predicate {
30345
30615
  }
30346
30616
  }
30347
30617
 
30348
- /**
30349
- * Search component search mode
30350
- */
30351
- var SearchMode;
30352
- (function (SearchMode) {
30353
- SearchMode[SearchMode["FULLTEXT"] = 0] = "FULLTEXT";
30354
- SearchMode[SearchMode["ADVANCED"] = 1] = "ADVANCED";
30355
- })(SearchMode || (SearchMode = {}));
30356
-
30357
30618
  /**
30358
30619
  * This service is used to signal to inputs in advanced search components, whether they should autofocus, or not.
30359
30620
  *
@@ -31956,6 +32217,26 @@ function navigationItemTaskCategoryFactory(categoryResolverService, navigationIt
31956
32217
  return cats;
31957
32218
  }
31958
32219
 
32220
+ function navigationItemCaseViewDefaultHeadersFactory(navigationItemTaskData) {
32221
+ return navigationItemDefaultHeadersFactory(navigationItemTaskData, GroupNavigationConstants.ITEM_FIELD_ID_USE_CASE_DEFAULT_HEADERS, GroupNavigationConstants.ITEM_FIELD_ID_CASE_DEFAULT_HEADERS);
32222
+ }
32223
+ function navigationItemTaskViewDefaultHeadersFactory(navigationItemTaskData) {
32224
+ return navigationItemDefaultHeadersFactory(navigationItemTaskData, GroupNavigationConstants.ITEM_FIELD_ID_USE_TASK_DEFAULT_HEADERS, GroupNavigationConstants.ITEM_FIELD_ID_TASK_DEFAULT_HEADERS);
32225
+ }
32226
+ function navigationItemDefaultHeadersFactory(navigationItemTaskData, useFieldId, defaultHeadersFieldId) {
32227
+ const isUse = extractFieldValueFromData(navigationItemTaskData, useFieldId);
32228
+ if (isUse) {
32229
+ const defaultHeaders = extractFieldValueFromData(navigationItemTaskData, defaultHeadersFieldId);
32230
+ if (defaultHeaders === undefined || defaultHeaders === "") {
32231
+ return undefined;
32232
+ }
32233
+ return defaultHeaders.split(',');
32234
+ }
32235
+ else {
32236
+ return undefined;
32237
+ }
32238
+ }
32239
+
31959
32240
  class IsEmptyPipe {
31960
32241
  /**
31961
32242
  * Check if is value is empty.
@@ -34595,174 +34876,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
34595
34876
  type: Input
34596
34877
  }] } });
34597
34878
 
34598
- class BaseAllowedNetsService {
34599
- constructor() {
34600
- this._baseAllowedNets = new BehaviorSubject([]);
34601
- }
34602
- ngOnDestroy() {
34603
- this._baseAllowedNets.complete();
34604
- if (this._sub !== undefined) {
34605
- this._sub.unsubscribe();
34606
- }
34607
- }
34608
- /**
34609
- * Sets the new identifiers of the base allowed nets
34610
- * @param nets new base net identifiers
34611
- */
34612
- set allowedNets(nets) {
34613
- this._baseAllowedNets.next(nets);
34614
- }
34615
- /**
34616
- * @deprecated This method should not be used. Use {@link BaseAllowedNetsService#allowedNets$} instead
34617
- * @returns the currently set allowed nets. Returns an empty array if no value was set.
34618
- */
34619
- get allowedNets() {
34620
- return this._baseAllowedNets.value;
34621
- }
34622
- /**
34623
- * Subscribes to the provided `Observable` and forwards the emissions to the baseAllowedNets `Subject`.
34624
- * If a new `Observable` is set, the previous Subscription is unsubscribed.
34625
- * @param observableNets an observable emitting the new base net identifiers
34626
- */
34627
- set allowedNets$(observableNets) {
34628
- if (this._sub !== undefined) {
34629
- this._sub.unsubscribe();
34630
- }
34631
- this._sub = observableNets.subscribe(nets => {
34632
- this._baseAllowedNets.next(nets);
34633
- });
34634
- }
34635
- /**
34636
- * @returns an observable that emits the currently set base allowed nets and any subsequent values
34637
- */
34638
- get allowedNets$() {
34639
- return this._baseAllowedNets.asObservable();
34640
- }
34641
- }
34642
- BaseAllowedNetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34643
- BaseAllowedNetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, providedIn: 'root' });
34644
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaseAllowedNetsService, decorators: [{
34645
- type: Injectable,
34646
- args: [{
34647
- providedIn: 'root'
34648
- }]
34649
- }], ctorParameters: function () { return []; } });
34650
-
34651
- function addAllowedNets(allowedNets, existingAllowedNets) {
34652
- if (!!allowedNets && allowedNets.length > 0) {
34653
- existingAllowedNets.next([...allowedNets]);
34654
- }
34655
- }
34656
- /**
34657
- * Convenience method that can be used as an allowed nets factory for tabbed task views.
34658
- * If no allowed nets are provided in the injected data then an {@link AllowedNetsService} with no allowed nets is created.
34659
- * It has a dependency on this class and {@link NAE_TAB_DATA} injection token.
34660
- */
34661
- function tabbedAllowedNetsServiceFactory(factory, tabData) {
34662
- return factory.createFromArray(tabData?.allowedNets ?? []);
34663
- }
34664
- /**
34665
- * Convenience method that can be used as an allowed nets factory for views that are loaded from filter process instances.
34666
- * It has a dependency on this class and {@link NAE_NAVIGATION_ITEM_TASK_DATA} injection token.
34667
- */
34668
- function navigationItemTaskAllowedNetsServiceFactory(factory, baseAllowedNets, navigationItemTaskData) {
34669
- const filterField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.FILTER_FIELD_ID);
34670
- const allowedNetsField = getFieldFromDataGroups(navigationItemTaskData, UserFilterConstants.ALLOWED_NETS_FIELD_ID);
34671
- if (filterField === undefined) {
34672
- 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!`);
34673
- }
34674
- const nets = new BehaviorSubject(Array.from(new Set([...filterField.allowedNets])));
34675
- if (filterField.filterMetadata.inheritAllowedNets) {
34676
- baseAllowedNets.allowedNets$.subscribe(allowedNets => {
34677
- const netSet = new Set(allowedNets);
34678
- nets.next(Array.from(netSet));
34679
- });
34680
- }
34681
- if (!!allowedNetsField) {
34682
- addAllowedNets(allowedNetsField.value, nets);
34683
- allowedNetsField.valueChanges().subscribe(allowedNets => {
34684
- addAllowedNets(allowedNetsField.value, nets);
34685
- });
34686
- }
34687
- return factory.createFromObservable(nets.asObservable());
34688
- }
34689
- /**
34690
- * Simplifies the creation of {@link AllowedNetsService} instances
34691
- */
34692
- class AllowedNetsServiceFactory {
34693
- constructor(_processService, _petriNetResource, _configService, _log) {
34694
- this._processService = _processService;
34695
- this._petriNetResource = _petriNetResource;
34696
- this._configService = _configService;
34697
- this._log = _log;
34698
- }
34699
- /**
34700
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
34701
- * @returns an instance of {@link AllowedNetsService} with all nets set as the `allowedNets`
34702
- */
34703
- createWithAllNets() {
34704
- return new AllowedNetsService(this._petriNetResource.getAll().pipe(switchMap(nets => {
34705
- if (nets && Array.isArray(nets)) {
34706
- return of(nets.map(n => n.identifier));
34707
- }
34708
- else {
34709
- return of([]);
34710
- }
34711
- })), this._processService);
34712
- }
34713
- /**
34714
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
34715
- * @param allowedNetsIdentifiers identifiers of the allowed nets
34716
- */
34717
- createFromArray(allowedNetsIdentifiers) {
34718
- return new AllowedNetsService(of(allowedNetsIdentifiers), this._processService);
34719
- }
34720
- /**
34721
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
34722
- * @param webViewPath path to the view as specified in its configuration. No leading backslash.
34723
- * Allowed nets are loaded from the configuration of the view.
34724
- */
34725
- createFromConfig(webViewPath) {
34726
- const view = this._configService.getViewByPath(webViewPath);
34727
- if (view?.layout?.params === undefined) {
34728
- throw new Error(`Can't load configuration for view with webPath: '${webViewPath}'`);
34729
- }
34730
- const viewParams = view.layout.params;
34731
- if (viewParams.allowedNets === undefined) {
34732
- this._log.warn(`No 'allowedNets' provided for view with webPath '${webViewPath}'`);
34733
- }
34734
- return new AllowedNetsService(of(viewParams.allowedNets ?? []), this._processService);
34735
- }
34736
- /**
34737
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
34738
- * @param netIdentifiers$ observable containing the identifiers of the allowed nets.
34739
- * When a new value is emitted the allowed nets will be updated.
34740
- */
34741
- createFromObservable(netIdentifiers$) {
34742
- return new AllowedNetsService(netIdentifiers$, this._processService);
34743
- }
34744
- /**
34745
- * Creates an instance of {@link AllowedNetsService} without having to provide all the dependencies yourself.
34746
- * @param filterCase a filter process instance
34747
- * Allowed nets are set from filter process immediate data
34748
- */
34749
- createFromFilterCase(filterCase) {
34750
- const filterData = getImmediateData(filterCase, UserFilterConstants.FILTER_FIELD_ID);
34751
- if (filterData === undefined) {
34752
- throw new Error(`Cannot get filter from case '${filterCase.title}' with id '${filterCase.stringId}'`);
34753
- }
34754
- return new AllowedNetsService(of(filterData.allowedNets), this._processService);
34755
- }
34756
- }
34757
- 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 });
34758
- AllowedNetsServiceFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, providedIn: 'root' });
34759
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AllowedNetsServiceFactory, decorators: [{
34760
- type: Injectable,
34761
- args: [{
34762
- providedIn: 'root'
34763
- }]
34764
- }], ctorParameters: function () { return [{ type: ProcessService }, { type: PetriNetResourceService }, { type: ConfigurationService }, { type: LoggerService }]; } });
34765
-
34766
34879
  /* SERVICES */
34767
34880
 
34768
34881
  /* EVENT OUTCOMES */
@@ -34808,5 +34921,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
34808
34921
  * Generated bundle index. Do not edit.
34809
34922
  */
34810
34923
 
34811
- 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 };
34924
+ 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 };
34812
34925
  //# sourceMappingURL=netgrif-components-core.mjs.map