@netgrif/components-core 6.2.1 → 6.3.0-rc.1

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 (72) hide show
  1. package/commons/schema.d.ts +1 -0
  2. package/esm2020/assets/i18n/de.json +26 -8
  3. package/esm2020/assets/i18n/en.json +19 -1
  4. package/esm2020/assets/i18n/sk.json +19 -1
  5. package/esm2020/commons/schema.mjs +1 -1
  6. package/esm2020/lib/authentication/models/user.transformer.mjs +2 -2
  7. package/esm2020/lib/authentication/public-api.mjs +3 -1
  8. package/esm2020/lib/authorization/permission/access.service.mjs +2 -2
  9. package/esm2020/lib/authorization/permission/permission.service.mjs +2 -2
  10. package/esm2020/lib/authorization/role/role-guard.service.mjs +36 -11
  11. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +6 -3
  12. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +5 -2
  13. package/esm2020/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.mjs +3 -2
  14. package/esm2020/lib/filter/filter.repository.mjs +7 -1
  15. package/esm2020/lib/impersonation/models/user-impersonate-config-metadata.mjs +2 -0
  16. package/esm2020/lib/impersonation/models/user-impersonation-constants.mjs +11 -0
  17. package/esm2020/lib/impersonation/public-api.mjs +9 -0
  18. package/esm2020/lib/impersonation/services/impersonation-user-list.service.mjs +19 -0
  19. package/esm2020/lib/impersonation/services/impersonation-user-resource.service.mjs +25 -0
  20. package/esm2020/lib/impersonation/services/impersonation-user-select.service.mjs +85 -0
  21. package/esm2020/lib/impersonation/services/impersonation.service.mjs +90 -0
  22. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +25 -9
  23. package/esm2020/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.mjs +2 -2
  24. package/esm2020/lib/navigation/quick-panel/components/abstract-quick-panel.component.mjs +1 -1
  25. package/esm2020/lib/resources/engine-endpoint/task-resource.service.mjs +3 -3
  26. package/esm2020/lib/resources/interface/user-resource.mjs +1 -1
  27. package/esm2020/lib/search/models/category/case/case-dataset.mjs +7 -4
  28. package/esm2020/lib/search/search-operand-input-component/abstract-search-operand-input.component.mjs +3 -3
  29. package/esm2020/lib/side-menu/content-components/injection-tokens.mjs +3 -1
  30. package/esm2020/lib/side-menu/content-components/new-case/abstract-new-case.component.mjs +22 -11
  31. package/esm2020/lib/side-menu/content-components/public-api.mjs +3 -1
  32. package/esm2020/lib/side-menu/content-components/user-impersonate/abstract-user-impersonate.component.mjs +37 -0
  33. package/esm2020/lib/side-menu/content-components/user-impersonate/model/user-impersonate-injection-data.mjs +2 -0
  34. package/esm2020/lib/side-menu/models/side-menu-size.mjs +2 -1
  35. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +2 -3
  36. package/esm2020/lib/user/models/user.mjs +15 -2
  37. package/esm2020/lib/user/services/user-comparator.service.mjs +4 -3
  38. package/esm2020/lib/user/services/user.service.mjs +17 -12
  39. package/esm2020/lib/utility/tests/test-config.mjs +6 -1
  40. package/esm2020/public-api.mjs +2 -1
  41. package/fesm2015/netgrif-components-core.mjs +449 -72
  42. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  43. package/fesm2020/netgrif-components-core.mjs +445 -72
  44. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  45. package/lib/authentication/public-api.d.ts +2 -0
  46. package/lib/authorization/role/role-guard.service.d.ts +2 -1
  47. package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +1 -0
  48. package/lib/filter/filter.repository.d.ts +4 -0
  49. package/lib/impersonation/models/user-impersonate-config-metadata.d.ts +3 -0
  50. package/lib/impersonation/models/user-impersonation-constants.d.ts +9 -0
  51. package/lib/impersonation/public-api.d.ts +6 -0
  52. package/lib/impersonation/services/impersonation-user-list.service.d.ts +12 -0
  53. package/lib/impersonation/services/impersonation-user-resource.service.d.ts +17 -0
  54. package/lib/impersonation/services/impersonation-user-select.service.d.ts +25 -0
  55. package/lib/impersonation/services/impersonation.service.d.ts +37 -0
  56. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +10 -3
  57. package/lib/navigation/quick-panel/components/abstract-quick-panel.component.d.ts +1 -1
  58. package/lib/resources/engine-endpoint/task-resource.service.d.ts +2 -1
  59. package/lib/resources/interface/user-resource.d.ts +1 -0
  60. package/lib/search/search-operand-input-component/abstract-search-operand-input.component.d.ts +1 -1
  61. package/lib/side-menu/content-components/injection-tokens.d.ts +2 -0
  62. package/lib/side-menu/content-components/public-api.d.ts +2 -0
  63. package/lib/side-menu/content-components/user-impersonate/abstract-user-impersonate.component.d.ts +14 -0
  64. package/lib/side-menu/content-components/user-impersonate/model/user-impersonate-injection-data.d.ts +8 -0
  65. package/lib/side-menu/models/side-menu-size.d.ts +2 -1
  66. package/lib/user/models/user.d.ts +10 -1
  67. package/lib/user/services/user-comparator.service.d.ts +1 -1
  68. package/package.json +1 -1
  69. package/public-api.d.ts +1 -0
  70. package/src/assets/i18n/de.json +26 -8
  71. package/src/assets/i18n/en.json +19 -1
  72. package/src/assets/i18n/sk.json +19 -1
@@ -1151,6 +1151,17 @@ var publicView$2 = {
1151
1151
  var dynamicNavigation$2 = {
1152
1152
  couldNotResolveView: "An error has occurred during the view resolution process. The view could not be displayed"
1153
1153
  };
1154
+ var impersonation$2 = {
1155
+ user: {
1156
+ successfullyRepresented: "User successfully represented",
1157
+ currentlyAlreadyRepresented: "User is already being represented by someone else",
1158
+ currentlyLogged: "User is currently logged in"
1159
+ },
1160
+ action: {
1161
+ failed: "Action failed",
1162
+ deactivated: "Representation was successfully deactivated"
1163
+ }
1164
+ };
1154
1165
  var en = {
1155
1166
  toolbar: toolbar$2,
1156
1167
  tasks: tasks$2,
@@ -1186,7 +1197,8 @@ var en = {
1186
1197
  errThird: "Color is required.",
1187
1198
  noNets: "No allowed Nets",
1188
1199
  createCase: "Successful create new case",
1189
- defaultCaseName: "with default case name"
1200
+ defaultCaseName: "with default case name",
1201
+ createCaseError: "A new case was created, but an error occurred while executing actions"
1190
1202
  },
1191
1203
  user: {
1192
1204
  assign: "User Assign",
@@ -1207,6 +1219,12 @@ var en = {
1207
1219
  "option-selector": {
1208
1220
  select: "Select",
1209
1221
  "choose-one-option": "Choose one of the provided options"
1222
+ },
1223
+ impersonation: {
1224
+ title: "Impersonate user",
1225
+ submit: "Impersonate",
1226
+ cease: "Cancel impersonation",
1227
+ impersonating: "impersonating"
1210
1228
  }
1211
1229
  },
1212
1230
  search: search$2,
@@ -1227,7 +1245,8 @@ var en = {
1227
1245
  workflow: workflow$2,
1228
1246
  legal: legal$2,
1229
1247
  publicView: publicView$2,
1230
- dynamicNavigation: dynamicNavigation$2
1248
+ dynamicNavigation: dynamicNavigation$2,
1249
+ impersonation: impersonation$2
1231
1250
  };
1232
1251
 
1233
1252
  var toolbar$1 = {
@@ -1629,6 +1648,17 @@ var publicView$1 = {
1629
1648
  var dynamicNavigation$1 = {
1630
1649
  couldNotResolveView: "Počas načítania zobrazenia sa vyskytla chyba. Zobrazenie nie je možné zobraziť"
1631
1650
  };
1651
+ var impersonation$1 = {
1652
+ user: {
1653
+ successfullyRepresented: "Používateľ bol úspešne zastúpený",
1654
+ currentlyAlreadyRepresented: "Používateľ je momentálne zastupovaný",
1655
+ currentlyLogged: "Používateľ je momentálne prihlásený"
1656
+ },
1657
+ action: {
1658
+ failed: "Akciu sa nepodarilo vykonať",
1659
+ deactivated: "Zastupovanie bolo úspešne deaktivované"
1660
+ }
1661
+ };
1632
1662
  var sk = {
1633
1663
  toolbar: toolbar$1,
1634
1664
  tasks: tasks$1,
@@ -1664,7 +1694,8 @@ var sk = {
1664
1694
  errThird: "Farba je povinné pole.",
1665
1695
  noNets: "Žiadne povolené siete",
1666
1696
  createCase: "Úspešne vytvorený nový prípad",
1667
- defaultCaseName: "s prednastaveným názvom prípadu"
1697
+ defaultCaseName: "s prednastaveným názvom prípadu",
1698
+ createCaseError: "Nový prípad vytvorený, nastala však chyba pri vykonávaní akcií"
1668
1699
  },
1669
1700
  user: {
1670
1701
  assign: "Priradiť používateľa",
@@ -1685,6 +1716,12 @@ var sk = {
1685
1716
  "option-selector": {
1686
1717
  select: "Zvoliť",
1687
1718
  "choose-one-option": "Vyberte jednu z možností"
1719
+ },
1720
+ impersonation: {
1721
+ title: "Zastúpenie používateľa",
1722
+ submit: "Zastúpiť",
1723
+ cease: "Zrušiť zastúpenie",
1724
+ impersonating: "v zastúpení"
1688
1725
  }
1689
1726
  },
1690
1727
  search: search$1,
@@ -1705,7 +1742,8 @@ var sk = {
1705
1742
  workflow: workflow$1,
1706
1743
  legal: legal$1,
1707
1744
  publicView: publicView$1,
1708
- dynamicNavigation: dynamicNavigation$1
1745
+ dynamicNavigation: dynamicNavigation$1,
1746
+ impersonation: impersonation$1
1709
1747
  };
1710
1748
 
1711
1749
  var toolbar = {
@@ -1942,8 +1980,8 @@ var forms = {
1942
1980
  enterEmail: "Ihre E-Mail Adresse eingeben"
1943
1981
  },
1944
1982
  login: {
1945
- length: "Das Benützername muss mindestens 4 Zeichen enthalten",
1946
- login: "Benützername",
1983
+ length: "Das Benutzername muss mindestens 4 Zeichen enthalten",
1984
+ login: "Benutzername",
1947
1985
  wrongCredentials: "Falsche Anmeldeinformationen!",
1948
1986
  loginButton: "Anmelden",
1949
1987
  reset: "Kennwort wiederherstellen",
@@ -2107,6 +2145,17 @@ var publicView = {
2107
2145
  var dynamicNavigation = {
2108
2146
  couldNotResolveView: "Ein Fehler ist aufgetreten während des Ansichtauflösungsprocess. Der Ansicht kann nicht angezeigt werden"
2109
2147
  };
2148
+ var impersonation = {
2149
+ user: {
2150
+ successfullyRepresented: "Benutzer wird jetzt vertreten",
2151
+ currentlyAlreadyRepresented: "Für den Benutzer existiert bereits eine Vertretung",
2152
+ currentlyLogged: "Benutzer ist bereits angemeldet"
2153
+ },
2154
+ action: {
2155
+ failed: "Aktion ist fehlgeschlagen",
2156
+ deactivated: "Vertretung wurde erfolgreich deaktiviert"
2157
+ }
2158
+ };
2110
2159
  var de = {
2111
2160
  toolbar: toolbar,
2112
2161
  tasks: tasks,
@@ -2142,14 +2191,15 @@ var de = {
2142
2191
  errThird: "Sie müssen eine Farbe auswählen.",
2143
2192
  noNets: "Es gibt keine erlaubte Netze",
2144
2193
  createCase: "Neuen Fall würde erfolgreich erzeugt",
2145
- defaultCaseName: "mit einem Standardfallnamen"
2194
+ defaultCaseName: "mit einem Standardfallnamen",
2195
+ createCaseError: "Neuer Fall wurde erstellt, aber beim Ausführen von Aktionen ist ein Fehler aufgetreten"
2146
2196
  },
2147
2197
  user: {
2148
- assign: "Benützer zuweisen",
2149
- choose: "Benützer auswählen",
2150
- noUser: "Es gibt keine Benützer",
2151
- err: "Beim laden der Benützer ist eine Fehler aufgetreten",
2152
- showcase: "Benützeransichtmodus ist nicht ausgewählt!"
2198
+ assign: "Benutzer zuweisen",
2199
+ choose: "Benutzer auswählen",
2200
+ noUser: "Es gibt keine Benutzer",
2201
+ err: "Beim laden der Benutzer ist eine Fehler aufgetreten",
2202
+ showcase: "Die Benutzeransicht ist nicht gesetzt!"
2153
2203
  },
2154
2204
  ldapGroup: {
2155
2205
  choose: "LDAP-Gruppe suchen",
@@ -2163,6 +2213,12 @@ var de = {
2163
2213
  "option-selector": {
2164
2214
  select: "Auswählen",
2165
2215
  "choose-one-option": "Wählen Sie eine Option aus"
2216
+ },
2217
+ impersonation: {
2218
+ title: "Benutzer vertreten",
2219
+ submit: "Vertreten",
2220
+ cease: "Vertretung abbrechen",
2221
+ impersonating: "in Vertretung als"
2166
2222
  }
2167
2223
  },
2168
2224
  search: search,
@@ -2183,14 +2239,15 @@ var de = {
2183
2239
  workflow: workflow,
2184
2240
  legal: legal,
2185
2241
  publicView: publicView,
2186
- dynamicNavigation: dynamicNavigation
2242
+ dynamicNavigation: dynamicNavigation,
2243
+ impersonation: impersonation
2187
2244
  };
2188
2245
 
2189
2246
  /**
2190
2247
  * The user object that is used by the frontend in its logic.
2191
2248
  */
2192
2249
  class User {
2193
- constructor(id, email, firstName, lastName, authorities, roles, groups, nextGroups) {
2250
+ constructor(id, email, firstName, lastName, authorities, roles, groups, nextGroups, impersonated) {
2194
2251
  this.id = id;
2195
2252
  this.email = email;
2196
2253
  this.firstName = firstName;
@@ -2199,6 +2256,7 @@ class User {
2199
2256
  this.roles = roles;
2200
2257
  this.groups = groups;
2201
2258
  this.nextGroups = nextGroups;
2259
+ this.impersonated = impersonated;
2202
2260
  }
2203
2261
  get fullName() {
2204
2262
  return this.firstName + ' ' + this.lastName;
@@ -2221,6 +2279,18 @@ class User {
2221
2279
  isEmpty() {
2222
2280
  return this.id === '';
2223
2281
  }
2282
+ /**
2283
+ * @returns self if no impersonated user is present, or impersonated user otherwise
2284
+ */
2285
+ getSelfOrImpersonated() {
2286
+ return this.isImpersonating() ? this.impersonated : this;
2287
+ }
2288
+ /**
2289
+ * @returns true if user is impersonating another user
2290
+ */
2291
+ isImpersonating() {
2292
+ return !!this.impersonated;
2293
+ }
2224
2294
  }
2225
2295
 
2226
2296
  class AuthenticationMethodService {
@@ -2403,7 +2473,7 @@ class UserTransformer {
2403
2473
  }
2404
2474
  transform(user) {
2405
2475
  const groups = []; // TODO groups parsing
2406
- return new User(user.id, user.email, user.name, user.surname, this.transformAuthorities(user.authorities), user.processRoles, groups, user.nextGroups);
2476
+ return new User(user.id, user.email, user.name, user.surname, this.transformAuthorities(user.authorities), user.processRoles, groups, user.nextGroups, user.impersonated ? this.transform(user.impersonated) : undefined);
2407
2477
  }
2408
2478
  }
2409
2479
  UserTransformer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UserTransformer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -3007,31 +3077,34 @@ class UserService {
3007
3077
  * If calculated intersection isn't empty returns true, otherwise false.
3008
3078
  */
3009
3079
  hasAuthority(authority) {
3010
- if (!authority || !this._user.authorities) {
3080
+ const user = this._user.getSelfOrImpersonated();
3081
+ if (!authority || !user.authorities) {
3011
3082
  return false;
3012
3083
  }
3013
3084
  if (authority instanceof Array) {
3014
- return authority.some(a => this._user.authorities.some(u => u === a));
3085
+ return authority.some(a => user.authorities.some(u => u === a));
3015
3086
  }
3016
3087
  else {
3017
- return this._user.authorities.some(a => a === authority);
3088
+ return user.authorities.some(a => a === authority);
3018
3089
  }
3019
3090
  }
3020
3091
  hasRole(role) {
3021
- if (!role || !this._user.roles) {
3092
+ const user = this._user.getSelfOrImpersonated();
3093
+ if (!role || !user.roles) {
3022
3094
  return false;
3023
3095
  }
3024
- return this._user.roles.some(r => r === role);
3096
+ return user.roles.some(r => r === role);
3025
3097
  }
3026
3098
  /**
3027
3099
  * Checks whether the user has role with a specific stringId
3028
3100
  * @param roleStringId ID of the role we want to check
3029
3101
  */
3030
3102
  hasRoleById(roleStringId) {
3031
- if (!roleStringId || !this._user.roles) {
3103
+ const user = this._user.getSelfOrImpersonated();
3104
+ if (!roleStringId || !user.roles) {
3032
3105
  return false;
3033
3106
  }
3034
- return this._user.roles.some(r => r.stringId === roleStringId);
3107
+ return user.roles.some(r => r.stringId === roleStringId);
3035
3108
  }
3036
3109
  /**
3037
3110
  * Checks whether the user has role with the specified identifier in a process with the specified identifier (any version)
@@ -3039,10 +3112,11 @@ class UserService {
3039
3112
  * @param netIdentifier identifier (import ID) of the process the role is defined in
3040
3113
  */
3041
3114
  hasRoleByIdentifier(roleIdentifier, netIdentifier) {
3042
- if (!roleIdentifier || !netIdentifier || !this._user.roles) {
3115
+ const user = this._user.getSelfOrImpersonated();
3116
+ if (!roleIdentifier || !netIdentifier || !user.roles) {
3043
3117
  return false;
3044
3118
  }
3045
- return this._user.roles.some(r => r.netImportId === netIdentifier && r.importId === roleIdentifier);
3119
+ return user.roles.some(r => r.netImportId === netIdentifier && r.importId === roleIdentifier);
3046
3120
  }
3047
3121
  /**
3048
3122
  * Checks whether the user has role with the specified name in a process with the specified identifier (any version)
@@ -3050,10 +3124,11 @@ class UserService {
3050
3124
  * @param netIdentifier identifier (import ID) of the process the role is defined in
3051
3125
  */
3052
3126
  hasRoleByName(roleName, netIdentifier) {
3053
- if (!roleName || !netIdentifier || !this._user.roles) {
3127
+ const user = this._user.getSelfOrImpersonated();
3128
+ if (!roleName || !netIdentifier || !user.roles) {
3054
3129
  return false;
3055
3130
  }
3056
- return this._user.roles.some(r => r.netImportId === netIdentifier && r.name === roleName);
3131
+ return user.roles.some(r => r.netImportId === netIdentifier && r.name === roleName);
3057
3132
  }
3058
3133
  login(credentials) {
3059
3134
  this._loginCalled = true;
@@ -6319,9 +6394,9 @@ class TaskResourceService extends AbstractResourceService {
6319
6394
  * Delete file from the task
6320
6395
  * DELETE
6321
6396
  */
6322
- deleteFile(taskId, fieldId, name) {
6397
+ deleteFile(taskId, fieldId, name, param) {
6323
6398
  const url = !!name ? 'task/' + taskId + '/file/' + fieldId + '/' + name : 'task/' + taskId + '/file/' + fieldId;
6324
- return this._resourceProvider.delete$(url, this.SERVER_URL).pipe(map(r => this.changeType(r, undefined)));
6399
+ return this._resourceProvider.delete$(url, this.SERVER_URL, param).pipe(map(r => this.changeType(r, undefined)));
6325
6400
  }
6326
6401
  /**
6327
6402
  * Download task file preview for field value
@@ -6649,7 +6724,9 @@ class AbstractFileFieldComponent extends AbstractDataFieldComponent {
6649
6724
  this._log.error('File cannot be deleted. No task is set to the field.');
6650
6725
  return;
6651
6726
  }
6652
- this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId).pipe(take(1)).subscribe(response => {
6727
+ let param = new HttpParams();
6728
+ param = param.set("parentTaskId", this.resolveParentTaskId());
6729
+ this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, undefined, param).pipe(take(1)).subscribe(response => {
6653
6730
  if (response.success) {
6654
6731
  const filename = this.dataField.value.name;
6655
6732
  this.dataField.value = {};
@@ -6733,7 +6810,7 @@ class AbstractFileFieldComponent extends AbstractDataFieldComponent {
6733
6810
  if (!this.checkFileBeforeDownload()) {
6734
6811
  return;
6735
6812
  }
6736
- this._taskResourceService.downloadFile(this.taskId, this.dataField.stringId).subscribe(response => {
6813
+ this._taskResourceService.downloadFile(this.resolveParentTaskId(), this.dataField.stringId).subscribe(response => {
6737
6814
  if (!response.type || response.type !== ProgressType.DOWNLOAD) {
6738
6815
  this._log.debug(`File [${this.dataField.stringId}] ${this.dataField.value.name} was successfully downloaded`);
6739
6816
  this.initDownloadFile(response);
@@ -7043,7 +7120,9 @@ class AbstractFileListFieldComponent extends AbstractDataFieldComponent {
7043
7120
  this._log.error('File cannot be deleted. No task is set to the field.');
7044
7121
  return;
7045
7122
  }
7046
- this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, fileName).pipe(take(1)).subscribe((response) => {
7123
+ let param = new HttpParams();
7124
+ param = param.set("parentTaskId", this.resolveParentTaskId());
7125
+ this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, fileName, param).pipe(take(1)).subscribe((response) => {
7047
7126
  if (response.success) {
7048
7127
  const changedFieldsMap = this._eventService.parseChangedFieldsFromOutcomeTree(response.outcome);
7049
7128
  this.dataField.emitChangedFields(changedFieldsMap);
@@ -7345,6 +7424,7 @@ class AbstractCurrencyNumberFieldComponent extends AbstractNumberErrorsComponent
7345
7424
  this._currencyPipe = _currencyPipe;
7346
7425
  this.NUMBER_TYPE = 'number';
7347
7426
  this.TEXT_TYPE = 'text';
7427
+ this.WHITESPACE = ' ';
7348
7428
  }
7349
7429
  ngAfterViewInit() {
7350
7430
  var _a;
@@ -7353,7 +7433,7 @@ class AbstractCurrencyNumberFieldComponent extends AbstractNumberErrorsComponent
7353
7433
  this.numberField.valueChanges().subscribe(value => {
7354
7434
  if (value !== undefined) {
7355
7435
  if (this.fieldType === this.TEXT_TYPE) {
7356
- this.transformedValue = this.transformCurrency(value.toString());
7436
+ this.transformedValue = this.transformCurrency(value.toString()) + this.WHITESPACE;
7357
7437
  }
7358
7438
  }
7359
7439
  else {
@@ -7650,6 +7730,7 @@ var SideMenuSize;
7650
7730
  SideMenuSize["SMALL"] = "side-menu-width-small";
7651
7731
  SideMenuSize["MEDIUM"] = "side-menu-width-medium";
7652
7732
  SideMenuSize["LARGE"] = "side-menu-width-large";
7733
+ SideMenuSize["XL"] = "side-menu-width-xl";
7653
7734
  })(SideMenuSize || (SideMenuSize = {}));
7654
7735
 
7655
7736
  const NAE_SIDE_MENU_CONTROL = new InjectionToken('NaeSideMenuControl');
@@ -11142,14 +11223,17 @@ class CaseDataset extends Category {
11142
11223
  return resolver.getIndex(datafield.fieldId, SearchIndex.BOOLEAN);
11143
11224
  case 'file':
11144
11225
  case 'fileList':
11145
- return resolver.getIndex(datafield.fieldId, SearchIndex.FILE_NAME, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring));
11226
+ return resolver.getIndex(datafield.fieldId, SearchIndex.FILE_NAME, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring)
11227
+ || this.isSelectedOperator(IsNull));
11146
11228
  case 'user':
11147
11229
  case 'userList':
11148
11230
  return resolver.getIndex(datafield.fieldId, SearchIndex.USER_ID);
11149
11231
  case 'i18n':
11150
- return resolver.getIndex(datafield.fieldId, SearchIndex.TEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring));
11232
+ return resolver.getIndex(datafield.fieldId, SearchIndex.TEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring)
11233
+ || this.isSelectedOperator(IsNull));
11151
11234
  default:
11152
- return resolver.getIndex(datafield.fieldId, SearchIndex.FULLTEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring));
11235
+ return resolver.getIndex(datafield.fieldId, SearchIndex.FULLTEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring)
11236
+ || this.isSelectedOperator(IsNull));
11153
11237
  }
11154
11238
  }
11155
11239
  get inputPlaceholder() {
@@ -14060,8 +14144,9 @@ class UserComparatorService {
14060
14144
  constructor(_userService) {
14061
14145
  this._userService = _userService;
14062
14146
  }
14063
- compareUsers(user) {
14064
- return user.email === this._userService.user.email ||
14147
+ compareUsers(user, acceptImpersonator = true) {
14148
+ const loggedUser = acceptImpersonator ? this._userService.user.getSelfOrImpersonated() : this._userService.user;
14149
+ return user.email === loggedUser.email ||
14065
14150
  user.email.includes('anonymous') && this._userService.user.email.includes('anonymous');
14066
14151
  }
14067
14152
  }
@@ -14954,6 +15039,8 @@ const NAE_NEW_CASE_COMPONENT = new InjectionToken('NaeNewCaseComponent');
14954
15039
  const NAE_OPTION_SELECTOR_COMPONENT = new InjectionToken('NaeOptionSelectorComponent');
14955
15040
  const NAE_SAVE_FILTER_COMPONENT = new InjectionToken('NaeSaveFilterComponent');
14956
15041
  const NAE_LOAD_FILTER_COMPONENT = new InjectionToken('NaeLoadFilterComponent');
15042
+ const NAE_USER_IMPERSONATE_COMPONENT = new InjectionToken('NaeUserImpersonateComponent');
15043
+ const NAE_ADMIN_IMPERSONATE_COMPONENT = new InjectionToken('NaeAdminImpersonateComponent');
14957
15044
 
14958
15045
  /**
14959
15046
  * Holds the information that accompanies a page load request. These information are held outside of the
@@ -15236,7 +15323,7 @@ class PermissionService {
15236
15323
  checkUserPerms(users, permission) {
15237
15324
  let userPermValue;
15238
15325
  if (!!users) {
15239
- const loggedUserId = this._userService.user.id;
15326
+ const loggedUserId = this._userService.user.getSelfOrImpersonated().id;
15240
15327
  Object.keys(users).forEach(user => {
15241
15328
  if (user === loggedUserId && users[user][permission] !== undefined) {
15242
15329
  userPermValue = userPermValue === undefined ?
@@ -20163,16 +20250,27 @@ class AbstractNewCaseComponent {
20163
20250
  };
20164
20251
  this._caseResourceService.createCase(newCase)
20165
20252
  .subscribe((response) => {
20166
- this._snackBarService.openSuccessSnackBar(response.outcome.message === undefined
20167
- ? this._translate.instant('side-menu.new-case.createCase') + ' ' + newCase.title
20168
- : response.outcome.message);
20169
- this._sideMenuControl.close({
20170
- opened: false,
20171
- message: response.outcome.message === undefined
20172
- ? 'Confirm new case setup'
20173
- : response.outcome.message,
20174
- data: response.outcome.aCase
20175
- });
20253
+ if (!!response.outcome) {
20254
+ this._snackBarService.openSuccessSnackBar(response.outcome.message === undefined
20255
+ ? this._translate.instant('side-menu.new-case.createCase') + ' ' + newCase.title
20256
+ : response.outcome.message);
20257
+ this._sideMenuControl.close({
20258
+ opened: false,
20259
+ message: response.outcome.message === undefined
20260
+ ? 'Confirm new case setup'
20261
+ : response.outcome.message,
20262
+ data: response.outcome.aCase
20263
+ });
20264
+ }
20265
+ else if (!!response.error) {
20266
+ this._snackBarService.openWarningSnackBar(this._translate.instant('side-menu.new-case.createCaseError') + ' ' + newCase.title);
20267
+ this._sideMenuControl.close({
20268
+ opened: false,
20269
+ message: response.error === undefined
20270
+ ? 'Confirm new case setup'
20271
+ : response.error
20272
+ });
20273
+ }
20176
20274
  }, error => this._snackBarService.openErrorSnackBar(error.message ? error.message : error));
20177
20275
  }
20178
20276
  }
@@ -20654,6 +20752,12 @@ class FilterRepository {
20654
20752
  });
20655
20753
  return result;
20656
20754
  }
20755
+ /**
20756
+ * Removes all stored filters from the repository
20757
+ */
20758
+ removeAllFilters() {
20759
+ this._filters = new Map();
20760
+ }
20657
20761
  }
20658
20762
  FilterRepository.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FilterRepository, deps: [{ token: ConfigurationService }, { token: LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
20659
20763
  FilterRepository.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FilterRepository, providedIn: 'root' });
@@ -21489,6 +21593,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
21489
21593
  }] }, { type: LoggerService }, { type: CaseViewService }];
21490
21594
  } });
21491
21595
 
21596
+ class AbstractUserImpersonateComponent extends AbstractCaseViewComponent {
21597
+ constructor(_sideMenuControl, caseViewService) {
21598
+ super(caseViewService);
21599
+ this._sideMenuControl = _sideMenuControl;
21600
+ if (this._sideMenuControl.data) {
21601
+ this._injectedData = this._sideMenuControl.data;
21602
+ }
21603
+ }
21604
+ handleCaseClick(clickedCase) {
21605
+ this._sideMenuControl.close({
21606
+ opened: false,
21607
+ message: 'User selected',
21608
+ data: {
21609
+ stringId: clickedCase.stringId
21610
+ }
21611
+ });
21612
+ }
21613
+ }
21614
+ AbstractUserImpersonateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractUserImpersonateComponent, deps: [{ token: NAE_SIDE_MENU_CONTROL }, { token: CaseViewService }], target: i0.ɵɵFactoryTarget.Component });
21615
+ AbstractUserImpersonateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AbstractUserImpersonateComponent, selector: "ncc-abstract-user-impersonate", usesInheritance: true, ngImport: i0, template: '', isInline: true });
21616
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractUserImpersonateComponent, decorators: [{
21617
+ type: Component,
21618
+ args: [{
21619
+ selector: 'ncc-abstract-user-impersonate',
21620
+ template: ''
21621
+ }]
21622
+ }], ctorParameters: function () {
21623
+ return [{ type: SideMenuControl, decorators: [{
21624
+ type: Inject,
21625
+ args: [NAE_SIDE_MENU_CONTROL]
21626
+ }] }, { type: CaseViewService }];
21627
+ } });
21628
+
21492
21629
  /* COMPONENTS */
21493
21630
 
21494
21631
  class AbstractSideMenuContainerComponent {
@@ -23544,16 +23681,35 @@ class RoleGuardService {
23544
23681
  return this.canAccessView(view, state.url.toString());
23545
23682
  }
23546
23683
  canAccessView(view, url) {
23547
- if (typeof view.access !== 'string' && view.access.hasOwnProperty('role')) {
23548
- const allowedRoles = this.parseRoleConstraints(view.access.role, url);
23549
- return allowedRoles.some(constraint => {
23550
- if (constraint.roleIdentifier) {
23551
- return this._userService.hasRoleByIdentifier(constraint.roleIdentifier, constraint.processIdentifier);
23684
+ if (typeof view.access !== 'string' && (view.access.hasOwnProperty('role') || view.access.hasOwnProperty('bannedRole'))) {
23685
+ if (view.access.hasOwnProperty('role') && view.access.hasOwnProperty('bannedRole')) {
23686
+ const bannedRoles = this.parseRoleConstraints(view.access.bannedRole, url);
23687
+ const allowedRoles = this.parseRoleConstraints(view.access.role, url);
23688
+ if (bannedRoles.some(role => this.decideAccessByRole(role))) {
23689
+ return false;
23552
23690
  }
23553
- else {
23554
- return this._userService.hasRoleByName(constraint.roleName, constraint.processIdentifier);
23691
+ if (allowedRoles.length === 0) {
23692
+ this._log.warn(`View at '${url}' defines role access constraint with an empty array!`
23693
+ + ` No users will be allowed to enter this view!`);
23555
23694
  }
23556
- });
23695
+ return allowedRoles.some(role => this.decideAccessByRole(role)); // user was not denied access by a banned role, they need at least one allowed role
23696
+ }
23697
+ if (view.access.hasOwnProperty('bannedRole')) {
23698
+ const bannedRoles = this.parseRoleConstraints(view.access.bannedRole, url);
23699
+ return !bannedRoles.some(constraint => {
23700
+ return this.decideAccessByRole(constraint);
23701
+ });
23702
+ }
23703
+ if (view.access.hasOwnProperty('role')) {
23704
+ const allowedRoles = this.parseRoleConstraints(view.access.role, url);
23705
+ if (allowedRoles.length === 0) {
23706
+ this._log.warn(`View at '${url}' defines role access constraint with an empty array!`
23707
+ + ` No users will be allowed to enter this view!`);
23708
+ }
23709
+ return allowedRoles.some(constraint => {
23710
+ return this.decideAccessByRole(constraint);
23711
+ });
23712
+ }
23557
23713
  }
23558
23714
  throw new Error('Role guard is declared for a view with no role guard configuration!'
23559
23715
  + ` Add role guard configuration for view at ${url}, or remove the guard.`);
@@ -23564,8 +23720,6 @@ class RoleGuardService {
23564
23720
  }
23565
23721
  if (Array.isArray(roleConstrains)) {
23566
23722
  if (roleConstrains.length === 0) {
23567
- this._log.warn(`View at '${viewUrl}' defines role access constraint with an empty array!`
23568
- + ` No users will be allowed to enter this view!`);
23569
23723
  return [];
23570
23724
  }
23571
23725
  if (typeof roleConstrains[0] === 'string') {
@@ -23603,6 +23757,14 @@ class RoleGuardService {
23603
23757
  return { processIdentifier: constraint.processId, roleIdentifier: constraint.roleId };
23604
23758
  });
23605
23759
  }
23760
+ decideAccessByRole(constraint) {
23761
+ if (constraint.roleIdentifier) {
23762
+ return this._userService.hasRoleByIdentifier(constraint.roleIdentifier, constraint.processIdentifier);
23763
+ }
23764
+ else {
23765
+ return this._userService.hasRoleByName(constraint.roleName, constraint.processIdentifier);
23766
+ }
23767
+ }
23606
23768
  }
23607
23769
  RoleGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RoleGuardService, deps: [{ token: RedirectService }, { token: UserService }, { token: ConfigurationService }, { token: LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
23608
23770
  RoleGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RoleGuardService, providedIn: AuthenticationModule });
@@ -23811,7 +23973,7 @@ class AccessService {
23811
23973
  * @returns whether the user passes the role guard condition for accessing the specified view
23812
23974
  */
23813
23975
  passesRoleGuard(view, url) {
23814
- return !view.access.hasOwnProperty('role') || this._roleGuard.canAccessView(view, url);
23976
+ return (!view.access.hasOwnProperty('role') && !view.access.hasOwnProperty('bannedRole')) || this._roleGuard.canAccessView(view, url);
23815
23977
  }
23816
23978
  /**
23817
23979
  * @param view the view whose access permissions we want to check
@@ -24282,7 +24444,7 @@ class AbstractNavigationDrawerComponent {
24282
24444
  this.openedChange = new EventEmitter();
24283
24445
  this._fixed = true;
24284
24446
  this.opened = true;
24285
- this.quickPanelItems = ['language', 'settings', 'logout'];
24447
+ this.quickPanelItems = ['language', 'settings', 'logout', 'impersonation'];
24286
24448
  if (this.userPreferenceService.drawerWidth !== undefined) {
24287
24449
  this.contentWidth = new BehaviorSubject(this.userPreferenceService.drawerWidth);
24288
24450
  }
@@ -25027,6 +25189,170 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
25027
25189
  }]
25028
25190
  }], ctorParameters: function () { return [{ type: LoggerService }, { type: UriResourceService }, { type: CaseResourceService }, { type: ActiveGroupService }]; } });
25029
25191
 
25192
+ /**
25193
+ * Holds all identifiers of the Impersonation config process in an accessible manner
25194
+ */
25195
+ var UserImpersonationConstants;
25196
+ (function (UserImpersonationConstants) {
25197
+ UserImpersonationConstants["IMPERSONATION_CONFIG_NET_IDENTIFIER"] = "impersonation_config";
25198
+ UserImpersonationConstants["IMPERSONATION_CONFIG_FIELD_IMPERSONATED"] = "impersonated";
25199
+ UserImpersonationConstants["IMPERSONATION_CONFIG_FIELD_ROLES"] = "impersonated_roles";
25200
+ UserImpersonationConstants["IMPERSONATION_CONFIG_FIELD_AUTHS"] = "impersonated_authorities";
25201
+ })(UserImpersonationConstants || (UserImpersonationConstants = {}));
25202
+
25203
+ class ImpersonationService extends AbstractResourceService {
25204
+ constructor(provider, _router, _configService, _userService, _snackbar, _filter, _log, _translate) {
25205
+ super('impersonation', provider, _configService);
25206
+ this.provider = provider;
25207
+ this._router = _router;
25208
+ this._configService = _configService;
25209
+ this._userService = _userService;
25210
+ this._snackbar = _snackbar;
25211
+ this._filter = _filter;
25212
+ this._log = _log;
25213
+ this._translate = _translate;
25214
+ this._impersonating$ = new Subject();
25215
+ this._sub = this._userService.user$.subscribe(user => this._resolveUserChange(user));
25216
+ }
25217
+ get impersonating$() {
25218
+ return this._impersonating$.asObservable();
25219
+ }
25220
+ impersonateUser(userId) {
25221
+ this.provider.post$('impersonate/user/' + userId, this.SERVER_URL, {}).subscribe((user) => {
25222
+ this._resolveSuccess(user);
25223
+ }, (response => {
25224
+ this._resolveError(response);
25225
+ }));
25226
+ }
25227
+ impersonateByConfig(configId) {
25228
+ this.provider.post$('impersonate/config/' + configId, this.SERVER_URL, {}).subscribe((user) => {
25229
+ this._resolveSuccess(user);
25230
+ }, (response => {
25231
+ this._resolveError(response);
25232
+ }));
25233
+ }
25234
+ cease() {
25235
+ this.provider.post$('impersonate/clear', this.SERVER_URL, {}).subscribe(user => {
25236
+ this._snackbar.openSuccessSnackBar(this._translate.instant('impersonation.action.deactivated'));
25237
+ return this._triggerReload();
25238
+ }, (error => {
25239
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.action.failed'));
25240
+ }));
25241
+ }
25242
+ _resolveSuccess(user) {
25243
+ this._snackbar.openSuccessSnackBar(this._translate.instant('impersonation.user.successfullyRepresented'));
25244
+ this._triggerReload();
25245
+ }
25246
+ _resolveError(response) {
25247
+ if (response.status === 400) {
25248
+ response.error.alreadyImpersonated ?
25249
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.user.currentlyAlreadyRepresented')) :
25250
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.user.currentlyLogged'));
25251
+ }
25252
+ else {
25253
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.action.failed'));
25254
+ }
25255
+ }
25256
+ _triggerReload() {
25257
+ this._userService.reload();
25258
+ }
25259
+ _resolveUserChange(user) {
25260
+ if (this._lastUser && this._lastUser.isImpersonating() != user.isImpersonating()) {
25261
+ this._filter.removeAllFilters();
25262
+ this._impersonating$.next(user.isImpersonating());
25263
+ }
25264
+ this._lastUser = user;
25265
+ }
25266
+ ngOnDestroy() {
25267
+ if (this._sub) {
25268
+ this._sub.unsubscribe();
25269
+ }
25270
+ }
25271
+ }
25272
+ ImpersonationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationService, deps: [{ token: ResourceProvider }, { token: i2$3.Router }, { token: ConfigurationService }, { token: UserService }, { token: SnackBarService }, { token: FilterRepository }, { token: LoggerService }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
25273
+ ImpersonationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationService, providedIn: 'root' });
25274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationService, decorators: [{
25275
+ type: Injectable,
25276
+ args: [{
25277
+ providedIn: 'root'
25278
+ }]
25279
+ }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: i2$3.Router }, { type: ConfigurationService }, { type: UserService }, { type: SnackBarService }, { type: FilterRepository }, { type: LoggerService }, { type: i1$2.TranslateService }]; } });
25280
+
25281
+ class ImpersonationUserSelectService {
25282
+ constructor(_log, _sideMenuService, _snackBar, _impersonation, _user, _userImpersonateComponent, _adminImpersonateComponent) {
25283
+ this._log = _log;
25284
+ this._sideMenuService = _sideMenuService;
25285
+ this._snackBar = _snackBar;
25286
+ this._impersonation = _impersonation;
25287
+ this._user = _user;
25288
+ this._userImpersonateComponent = _userImpersonateComponent;
25289
+ this._adminImpersonateComponent = _adminImpersonateComponent;
25290
+ }
25291
+ /**
25292
+ * Opens side menu with users who can be impersonated by logged user
25293
+ */
25294
+ selectImpersonate() {
25295
+ if (this.isAdmin()) {
25296
+ this._sideMenuService.open(this._adminImpersonateComponent, SideMenuSize.LARGE, this.injectedData()).onClose.subscribe(event => {
25297
+ this._log.debug('Impersonable user select :' + event);
25298
+ if (event.data === undefined) {
25299
+ return;
25300
+ }
25301
+ this._impersonation.impersonateUser(event.data._id);
25302
+ });
25303
+ }
25304
+ else {
25305
+ this._sideMenuService.open(this._userImpersonateComponent, SideMenuSize.XL, this.injectedData()).onClose.subscribe(event => {
25306
+ this._log.debug('Impersonable config select :' + event);
25307
+ if (event.data === undefined) {
25308
+ return;
25309
+ }
25310
+ this._impersonation.impersonateByConfig(event.data.stringId);
25311
+ });
25312
+ }
25313
+ }
25314
+ injectedData() {
25315
+ const currentTime = moment();
25316
+ let filterCasesFilter = SimpleFilter.fromCaseQuery({
25317
+ process: {
25318
+ identifier: UserImpersonationConstants.IMPERSONATION_CONFIG_NET_IDENTIFIER
25319
+ },
25320
+ query: `
25321
+ (dataSet.impersonators.keyValue:${this._user.user.id}) AND
25322
+ (dataSet.is_active.booleanValue:true) AND
25323
+ ((!(_exists_:dataSet.valid_from.timestampValue)) OR (dataSet.valid_from.timestampValue:<` + currentTime.valueOf() + `)) AND
25324
+ ((!(_exists_:dataSet.valid_to.timestampValue)) OR (dataSet.valid_to.timestampValue:>${currentTime.valueOf()}))
25325
+ `
25326
+ });
25327
+ return {
25328
+ filter: filterCasesFilter
25329
+ };
25330
+ }
25331
+ isAdmin() {
25332
+ return this._user.hasAuthority('ROLE_ADMIN');
25333
+ }
25334
+ }
25335
+ ImpersonationUserSelectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserSelectService, deps: [{ token: LoggerService }, { token: SideMenuService }, { token: SnackBarService }, { token: ImpersonationService }, { token: UserService }, { token: NAE_USER_IMPERSONATE_COMPONENT, optional: true }, { token: NAE_ADMIN_IMPERSONATE_COMPONENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
25336
+ ImpersonationUserSelectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserSelectService, providedIn: 'root' });
25337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserSelectService, decorators: [{
25338
+ type: Injectable,
25339
+ args: [{
25340
+ providedIn: 'root'
25341
+ }]
25342
+ }], ctorParameters: function () {
25343
+ return [{ type: LoggerService }, { type: SideMenuService }, { type: SnackBarService }, { type: ImpersonationService }, { type: UserService }, { type: undefined, decorators: [{
25344
+ type: Optional
25345
+ }, {
25346
+ type: Inject,
25347
+ args: [NAE_USER_IMPERSONATE_COMPONENT]
25348
+ }] }, { type: undefined, decorators: [{
25349
+ type: Optional
25350
+ }, {
25351
+ type: Inject,
25352
+ args: [NAE_ADMIN_IMPERSONATE_COMPONENT]
25353
+ }] }];
25354
+ } });
25355
+
25030
25356
  const FILTER_IDENTIFIERS = [
25031
25357
  "preference_filter_item"
25032
25358
  ];
@@ -25036,7 +25362,7 @@ const RIGHT_DRAWER_DEFAULT_WIDTH = 240;
25036
25362
  const RIGHT_DRAWER_DEFAULT_MIN_WIDTH = 180;
25037
25363
  const RIGHT_DRAWER_MAX_WIDTH = 460;
25038
25364
  class AbstractNavigationDoubleDrawerComponent {
25039
- constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _dynamicRoutingService) {
25365
+ constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
25040
25366
  this._router = _router;
25041
25367
  this._activatedRoute = _activatedRoute;
25042
25368
  this._breakpoint = _breakpoint;
@@ -25046,6 +25372,8 @@ class AbstractNavigationDoubleDrawerComponent {
25046
25372
  this._log = _log;
25047
25373
  this._config = _config;
25048
25374
  this._uriService = _uriService;
25375
+ this._impersonationUserSelect = _impersonationUserSelect;
25376
+ this._impersonation = _impersonation;
25049
25377
  this._dynamicRoutingService = _dynamicRoutingService;
25050
25378
  this.imageRouterLink = "/";
25051
25379
  this.imageAlt = "Logo";
@@ -25053,6 +25381,7 @@ class AbstractNavigationDoubleDrawerComponent {
25053
25381
  this.includeUser = true;
25054
25382
  this.includeLanguage = true;
25055
25383
  this.includeMoreMenu = true;
25384
+ this.includeImpersonation = true;
25056
25385
  this.allClosable = true;
25057
25386
  this.folderIcon = "folder";
25058
25387
  this.openedFolderIcon = "folder_open";
@@ -25206,6 +25535,12 @@ class AbstractNavigationDoubleDrawerComponent {
25206
25535
  }
25207
25536
  });
25208
25537
  }
25538
+ impersonate() {
25539
+ this._impersonationUserSelect.selectImpersonate();
25540
+ }
25541
+ stopImpersonating() {
25542
+ this._impersonation.cease();
25543
+ }
25209
25544
  get user() {
25210
25545
  return this._userService.user;
25211
25546
  }
@@ -25285,16 +25620,19 @@ class AbstractNavigationDoubleDrawerComponent {
25285
25620
  id: filter.stringId,
25286
25621
  resource: filter
25287
25622
  };
25288
- const resolvedRoles = this.resolveAccessRoles(filter);
25623
+ const resolvedRoles = this.resolveAccessRoles(filter, 'allowed_roles');
25624
+ const resolvedBannedRoles = this.resolveAccessRoles(filter, 'banned_roles');
25289
25625
  if (!!resolvedRoles)
25290
25626
  item.access['role'] = resolvedRoles;
25627
+ if (!!resolvedBannedRoles)
25628
+ item.access['bannedRole'] = resolvedBannedRoles;
25291
25629
  if (!this._accessService.canAccessView(item, item.routingPath))
25292
25630
  return;
25293
25631
  return item;
25294
25632
  }
25295
- resolveAccessRoles(filter) {
25633
+ resolveAccessRoles(filter, roleType) {
25296
25634
  var _a;
25297
- const allowedRoles = (_a = filter.immediateData.find(f => f.stringId === 'allowed_roles')) === null || _a === void 0 ? void 0 : _a.options;
25635
+ const allowedRoles = (_a = filter.immediateData.find(f => f.stringId === roleType)) === null || _a === void 0 ? void 0 : _a.options;
25298
25636
  if (!allowedRoles || Object.keys(allowedRoles).length === 0)
25299
25637
  return undefined;
25300
25638
  const roles = [];
@@ -25357,15 +25695,15 @@ class AbstractNavigationDoubleDrawerComponent {
25357
25695
  // this.contentWidth.next(this.width);
25358
25696
  }
25359
25697
  }
25360
- AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", 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: DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
25361
- AbstractNavigationDoubleDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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", allClosable: "allClosable", folderIcon: "folderIcon", openedFolderIcon: "openedFolderIcon", filterIcon: "filterIcon", foldersCategoryName: "foldersCategoryName", viewsCategoryName: "viewsCategoryName" }, ngImport: i0, template: '', isInline: true });
25698
+ AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", 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 });
25699
+ AbstractNavigationDoubleDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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 });
25362
25700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, decorators: [{
25363
25701
  type: Component,
25364
25702
  args: [{
25365
25703
  selector: 'ncc-abstract-navigation-double-drawer',
25366
25704
  template: '',
25367
25705
  }]
25368
- }], 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: DynamicNavigationRouteProviderService }]; }, propDecorators: { portalLeftMenu: [{
25706
+ }], 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: [{
25369
25707
  type: Input
25370
25708
  }], portalRightMenu: [{
25371
25709
  type: Input
@@ -25383,6 +25721,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
25383
25721
  type: Input
25384
25722
  }], includeMoreMenu: [{
25385
25723
  type: Input
25724
+ }], includeImpersonation: [{
25725
+ type: Input
25386
25726
  }], allClosable: [{
25387
25727
  type: Input
25388
25728
  }], folderIcon: [{
@@ -28598,7 +28938,7 @@ class AbstractSearchOperandInputComponent {
28598
28938
  }
28599
28939
  return this._filteredOptions$;
28600
28940
  }
28601
- get isInputFilled() {
28941
+ isInputFilled() {
28602
28942
  if (!this._inputConfirmed) {
28603
28943
  return false;
28604
28944
  }
@@ -28611,7 +28951,7 @@ class AbstractSearchOperandInputComponent {
28611
28951
  return;
28612
28952
  }
28613
28953
  this._initialExpansion = false;
28614
- if (!this.isInputFilled) {
28954
+ if (!this.isInputFilled()) {
28615
28955
  setTimeout(() => {
28616
28956
  input.nativeElement.focus();
28617
28957
  });
@@ -30198,6 +30538,11 @@ class TestConfigurationService extends ConfigurationService {
30198
30538
  name: 'dashboard',
30199
30539
  address: 'http://localhost:8080/api/',
30200
30540
  format: 'json'
30541
+ },
30542
+ {
30543
+ name: 'impersonation',
30544
+ address: 'http://localhost:8080/api/',
30545
+ format: 'json'
30201
30546
  }
30202
30547
  ]
30203
30548
  },
@@ -31720,8 +32065,7 @@ class AbstractFieldComponentResolverComponent {
31720
32065
  return this.gridElement.item;
31721
32066
  }
31722
32067
  getTaskId() {
31723
- const referencedTaskId = this.taskContentService.getReferencedFieldTask(this.getDataField().stringId);
31724
- return referencedTaskId !== null && referencedTaskId !== void 0 ? referencedTaskId : this.taskContentService.task.stringId;
32068
+ return this.taskContentService.task.stringId;
31725
32069
  }
31726
32070
  isField() {
31727
32071
  return this.gridElement.type !== TaskElementType.BLANK && this.gridElement.type !== TaskElementType.DATA_GROUP_TITLE;
@@ -32039,6 +32383,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
32039
32383
 
32040
32384
  /* EVENT OUTCOMES */
32041
32385
 
32386
+ class ImpersonationUserResourceService extends UserResourceService {
32387
+ constructor(provider, configService) {
32388
+ super(provider, configService);
32389
+ this._IMPERSONATION_SERVER_URL = this.getResourceAddress('impersonation');
32390
+ }
32391
+ search(body, params) {
32392
+ return this._resourceProvider.post$('/impersonate/search', this._IMPERSONATION_SERVER_URL, { query: body.fulltext }, params)
32393
+ .pipe(map((r) => this.getResourcePage(r, 'users')));
32394
+ }
32395
+ }
32396
+ ImpersonationUserResourceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserResourceService, deps: [{ token: ResourceProvider }, { token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
32397
+ ImpersonationUserResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserResourceService, providedIn: 'root' });
32398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserResourceService, decorators: [{
32399
+ type: Injectable,
32400
+ args: [{
32401
+ providedIn: 'root'
32402
+ }]
32403
+ }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: ConfigurationService }]; } });
32404
+
32405
+ class ImpersonationUserListService extends UserListService {
32406
+ constructor(_resources, _logService, _snackbar, _translate) {
32407
+ super(_resources, _logService, _snackbar, _translate);
32408
+ this._logService = _logService;
32409
+ }
32410
+ }
32411
+ ImpersonationUserListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserListService, deps: [{ token: ImpersonationUserResourceService }, { token: LoggerService }, { token: SnackBarService }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
32412
+ ImpersonationUserListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserListService });
32413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserListService, decorators: [{
32414
+ type: Injectable
32415
+ }], ctorParameters: function () { return [{ type: ImpersonationUserResourceService }, { type: LoggerService }, { type: SnackBarService }, { type: i1$2.TranslateService }]; } });
32416
+
32417
+ /* MODELS */
32418
+
32042
32419
  /*
32043
32420
  * Public API Surface of netgrif-components-core
32044
32421
  */
@@ -32047,5 +32424,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
32047
32424
  * Generated bundle index. Do not edit.
32048
32425
  */
32049
32426
 
32050
- export { AbstractAddChildNodeComponent, AbstractAdvancedSearchComponent, AbstractAuthenticationOverlayComponent, AbstractBooleanFieldComponent, AbstractBreadcrumbsComponent, AbstractButtonFieldComponent, AbstractCaseListComponent, AbstractCaseListPaginatorComponent, AbstractCasePanelComponent, AbstractCaseViewComponent, AbstractCountCardComponent, AbstractCurrencyNumberFieldComponent, AbstractCustomCardComponent, AbstractDashboardContentComponent, AbstractDataFieldTemplateComponent, AbstractDateFieldComponent, AbstractDateTimeFieldComponent, AbstractDefaultNumberFieldComponent, AbstractEditModeComponent, AbstractEmailSubmissionFormComponent, AbstractEnumerationAutocompleteDynamicFieldComponent, AbstractEnumerationAutocompleteSelectFieldComponent, AbstractEnumerationFieldComponent, AbstractEnumerationIconFieldComponent, AbstractEnumerationListFieldComponent, AbstractEnumerationSelectFieldComponent, AbstractEnumerationStepperFieldComponent, AbstractFieldComponentResolverComponent, AbstractFileFieldComponent, AbstractFileListFieldComponent, AbstractFilterFieldComponent, AbstractFilterFieldContentComponent, 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, 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, AbstractSideMenuContainerComponent, AbstractSimpleTextFieldComponent, AbstractSingleTaskComponent, AbstractSingleTaskViewComponent, AbstractSortModeComponent, AbstractSortableViewComponent, AbstractTabCreationDetectorComponent, AbstractTabViewComponent, AbstractTabbedCaseViewComponent, AbstractTabbedTaskViewComponent, AbstractTaskContentComponent, AbstractTaskListComponent, AbstractTaskListPaginationComponent, AbstractTaskPanelComponent, AbstractTaskViewComponent, AbstractTextErrorsComponent, AbstractTextFieldComponent, AbstractTextareaFieldComponent, AbstractToolbarComponent, AbstractTreeComponent, AbstractTreeTaskContentComponent, AbstractUserAssignComponent, AbstractUserAssignItemComponent, AbstractUserAssignListComponent, AbstractUserCardComponent, AbstractUserFieldComponent, AbstractUserInviteComponent, AbstractUserListFieldComponent, AbstractViewWithHeadersComponent, AbstractWorkflowPanelComponent, AbstractWorkflowViewComponent, AccessService, ActiveGroupService, AdvancedSearchComponentInitializationService, AfterAction, AlertDialogComponent, AlertDialogModule, AllowedNetsService, AllowedNetsServiceFactory, AnonymousService, AssignPolicy, AssignPolicyService, AssignTaskService, AuthenticationGuardService, AuthenticationMethodService, AuthenticationModule, AuthenticationService, AuthorityGuardService, AutocompleteCategory, BOOLEAN_VALUE_LABEL_ENABLED, BaseAllowedNetsService, BasicAuthenticationService, BooleanField, BooleanFieldValidation, BooleanOperator, ButtonField, ButtonFieldValidation, CallChainService, CancelTaskService, CaseAuthor, CaseCreationDate, CaseCreationDateTime, CaseDataset, CaseHeaderService, CaseListFontColorService, CaseMetaField, CaseNetAttributeAutocompleteCategory, CaseProcess, CaseResourceService, CaseRole, CaseSearch, CaseSimpleDataset, CaseStringId, CaseTask, CaseTitle, CaseTreeNode, CaseTreeService, CaseViewService, CaseVisualId, Categories, Category, CategoryFactory, CategoryResolverService, ChangedFieldsService, ClausePredicate, ConfigParams, ConfigurationInput, ConfigurationService, ConfirmDialogComponent, ConfirmDialogModule, ConsoleLogPublisher, CovalentModule, CurrencyModule, CustomDateAdapter, DATE_FORMAT, DATE_FORMAT_STRING, DATE_TIME_FORMAT, DATE_TIME_FORMAT_STRING, DEFAULT_LANGUAGE_CODE, DashboardCardTypes, DashboardMultiData, DashboardResourceService, DashboardSingleData, DataField, DataFieldsModule, DataFocusPolicy, DataFocusPolicyService, DataGroupAlignment, DatafieldMapKey, DateField, DateTimeField, DefaultSearchCategoriesModule, DelegateTaskService, DialogModule, DialogService, DynamicEnumerationField, DynamicNavigationRouteProviderService, EditableClausePredicate, EditableClausePredicateWithGenerators, EditableElementaryPredicate, EditablePredicate, EditablePredicateWithGenerator, ElementaryPredicate, EnumerationField, EnumerationFieldValidation, Equals, EqualsDate, ErrorSnackBarComponent, EventConstants, EventQueueService, EventService, FILTER_IDENTIFIERS, FILTER_VIEW_TASK_TRANSITION_ID, FieldAlignment, FieldConverterService, FieldTypeResource, FileField, FileListField, FileListFieldValidation, FilePreviewType, FileUploadMIMEType, FileUploadModel, Filter, FilterExtractionService, FilterField, FilterRepository, FilterType, FinishPolicy, FinishPolicyService, FinishTaskService, GenericSnackBarComponent, GroupGuardService, GroupNavigationComponentResolverService, GroupNavigationConstants, HeaderColumn, HeaderColumnType, HeaderMode, HeaderSearchService, HeaderType, HttpLoaderFactory, I18nField, I18nFieldValidation, InRange, InRangeDate, IncrementingCounter, IsNull, LanguageIconsService, LanguageService, LdapGroupListService, LdapGroupResourceService, LessThan, LessThanDate, LessThanDateTime, Like, LoadingEmitter, LoadingWithFilterEmitter, LocalStorageLogPublisher, LogEntry, LogLevel, LogPublisher, LogPublisherService, LoggerService, MaterialAppearance, MaterialModule, MergeOperator, MergedFilter, MockAuthenticationMethodService, MockAuthenticationService, MockEndpoint, MockSignUpService, MockUserPreferenceService, MockUserResourceService, MoreThan, MoreThanDate, MoreThanDateTime, MultichoiceField, NAE_ASYNC_RENDERING_CONFIGURATION, NAE_AUTOSWITCH_TAB_TOKEN, NAE_BASE_FILTER, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_HEADERS, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, NAE_FILES_UPLOAD_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_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_OPEN_EXISTING_TAB, NAE_OPTION_SELECTOR_COMPONENT, NAE_PREFERRED_TASK_ENDPOINT, NAE_ROUTING_CONFIGURATION_PATH, NAE_SAVE_FILTER_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_OPERATIONS, NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, NAE_TASK_VIEW_CONFIGURATION, NAE_TREE_CASE_VIEW_CONFIGURATION, NAE_USER_ASSIGN_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, OpenedTab, Operator, OperatorResolverService, OperatorService, OperatorTemplatePart, OperatorTemplatePartType, Operators, OrganizationListService, OverflowService, PUBLISHERS, PageLoadRequestContext, PaginationParams, PaginationSort, PaperViewService, PermissionService, PermissionType, PetriNetResourceService, Predicate, PredicateWithGenerator, ProcessList, ProcessService, ProgressType, PromptDialogComponent, PromptDialogModule, PublicCaseResourceService, PublicPetriNetResourceService, PublicProcessService, PublicTaskLoadingService, PublicTaskResourceService, PublicUrlResolverService, Query, QueuedEvent, RedirectService, ResourceProvider, ResultWithAfterActions, RoleAssignmentLdapGroupService, RoleAssignmentService, RoleGuardService, RoutingBuilderService, SearchIndex, SearchIndexResolverService, SearchInputType, SearchMode, SearchService, SelectedCaseService, 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, TaskRefField, TaskRequestStateService, TaskResourceService, TaskRole, TaskTask, TaskViewService, TemplateAppearance, TestCaseBaseFilterProvider, TestCaseViewAllowedNetsFactory, TestConfigurationService, TestMockDependenciesModule, TestNoAllowedNetsFactory, TestTaskBaseFilterProvider, TestTaskViewAllowedNetsFactory, TestViewService, TextAreaField, TextAreaHeight, TextField, TextFieldValidation, TranslateLibModule, TreeCaseViewService, TreePetriflowIdentifiers, TreeTaskContentService, UnlimitedTaskContentService, UriContentType, UriResourceService, UriService, User, UserAutocomplete, UserComparatorService, UserField, UserFilterConstants, UserFiltersService, UserInviteService, UserListField, UserListService, UserPreferenceService, UserResourceService, UserService, UserTransformer, UserValue, 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, defaultCaseSearchCategoriesFactory, defaultTaskSearchCategoriesFactory, destroySubscription, 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 };
32427
+ export { AbstractAddChildNodeComponent, AbstractAdvancedSearchComponent, AbstractAuthenticationOverlayComponent, AbstractBooleanFieldComponent, AbstractBreadcrumbsComponent, AbstractButtonFieldComponent, AbstractCaseListComponent, AbstractCaseListPaginatorComponent, AbstractCasePanelComponent, AbstractCaseViewComponent, AbstractCountCardComponent, AbstractCurrencyNumberFieldComponent, AbstractCustomCardComponent, AbstractDashboardContentComponent, AbstractDataFieldTemplateComponent, AbstractDateFieldComponent, AbstractDateTimeFieldComponent, AbstractDefaultNumberFieldComponent, AbstractEditModeComponent, AbstractEmailSubmissionFormComponent, AbstractEnumerationAutocompleteDynamicFieldComponent, AbstractEnumerationAutocompleteSelectFieldComponent, AbstractEnumerationFieldComponent, AbstractEnumerationIconFieldComponent, AbstractEnumerationListFieldComponent, AbstractEnumerationSelectFieldComponent, AbstractEnumerationStepperFieldComponent, AbstractFieldComponentResolverComponent, AbstractFileFieldComponent, AbstractFileListFieldComponent, AbstractFilterFieldComponent, AbstractFilterFieldContentComponent, 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, 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, AbstractSideMenuContainerComponent, AbstractSimpleTextFieldComponent, AbstractSingleTaskComponent, AbstractSingleTaskViewComponent, AbstractSortModeComponent, AbstractSortableViewComponent, AbstractTabCreationDetectorComponent, AbstractTabViewComponent, AbstractTabbedCaseViewComponent, AbstractTabbedTaskViewComponent, AbstractTaskContentComponent, AbstractTaskListComponent, AbstractTaskListPaginationComponent, AbstractTaskPanelComponent, AbstractTaskViewComponent, AbstractTextErrorsComponent, AbstractTextFieldComponent, AbstractTextareaFieldComponent, AbstractToolbarComponent, AbstractTreeComponent, AbstractTreeTaskContentComponent, AbstractUserAssignComponent, AbstractUserAssignItemComponent, AbstractUserAssignListComponent, AbstractUserCardComponent, AbstractUserFieldComponent, AbstractUserImpersonateComponent, AbstractUserInviteComponent, 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, CallChainService, CancelTaskService, CaseAuthor, CaseCreationDate, CaseCreationDateTime, CaseDataset, CaseHeaderService, CaseListFontColorService, CaseMetaField, CaseNetAttributeAutocompleteCategory, CaseProcess, CaseResourceService, CaseRole, CaseSearch, CaseSimpleDataset, CaseStringId, CaseTask, CaseTitle, CaseTreeNode, CaseTreeService, CaseViewService, CaseVisualId, Categories, Category, CategoryFactory, CategoryResolverService, ChangedFieldsService, ClausePredicate, ConfigParams, ConfigurationInput, ConfigurationService, ConfirmDialogComponent, ConfirmDialogModule, ConsoleLogPublisher, CovalentModule, CurrencyModule, CustomDateAdapter, DATE_FORMAT, DATE_FORMAT_STRING, DATE_TIME_FORMAT, DATE_TIME_FORMAT_STRING, DEFAULT_LANGUAGE_CODE, DashboardCardTypes, DashboardMultiData, DashboardResourceService, DashboardSingleData, DataField, DataFieldsModule, DataFocusPolicy, DataFocusPolicyService, DataGroupAlignment, DatafieldMapKey, DateField, DateTimeField, DefaultSearchCategoriesModule, DelegateTaskService, DialogModule, DialogService, DynamicEnumerationField, DynamicNavigationRouteProviderService, EditableClausePredicate, EditableClausePredicateWithGenerators, EditableElementaryPredicate, EditablePredicate, EditablePredicateWithGenerator, ElementaryPredicate, EnumerationField, EnumerationFieldValidation, Equals, EqualsDate, ErrorSnackBarComponent, EventConstants, EventQueueService, EventService, FILTER_IDENTIFIERS, FILTER_VIEW_TASK_TRANSITION_ID, FieldAlignment, FieldConverterService, FieldTypeResource, FileField, FileListField, FileListFieldValidation, FilePreviewType, FileUploadMIMEType, FileUploadModel, Filter, FilterExtractionService, FilterField, FilterRepository, FilterType, FinishPolicy, FinishPolicyService, FinishTaskService, GenericSnackBarComponent, GroupGuardService, GroupNavigationComponentResolverService, GroupNavigationConstants, HeaderColumn, HeaderColumnType, HeaderMode, HeaderSearchService, HeaderType, HttpLoaderFactory, I18nField, I18nFieldValidation, ImpersonationService, ImpersonationUserListService, ImpersonationUserResourceService, ImpersonationUserSelectService, InRange, InRangeDate, IncrementingCounter, IsNull, LanguageIconsService, LanguageService, LdapGroupListService, LdapGroupResourceService, LessThan, LessThanDate, LessThanDateTime, Like, LoadingEmitter, LoadingWithFilterEmitter, LocalStorageLogPublisher, LogEntry, LogLevel, LogPublisher, LogPublisherService, LoggerService, MaterialAppearance, MaterialModule, MergeOperator, MergedFilter, MockAuthenticationMethodService, MockAuthenticationService, MockEndpoint, MockSignUpService, MockUserPreferenceService, MockUserResourceService, MoreThan, MoreThanDate, MoreThanDateTime, MultichoiceField, NAE_ADMIN_IMPERSONATE_COMPONENT, NAE_ASYNC_RENDERING_CONFIGURATION, NAE_AUTOSWITCH_TAB_TOKEN, NAE_BASE_FILTER, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_HEADERS, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, NAE_FILES_UPLOAD_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_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_OPEN_EXISTING_TAB, NAE_OPTION_SELECTOR_COMPONENT, NAE_PREFERRED_TASK_ENDPOINT, NAE_ROUTING_CONFIGURATION_PATH, NAE_SAVE_FILTER_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_OPERATIONS, NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, NAE_TASK_VIEW_CONFIGURATION, NAE_TREE_CASE_VIEW_CONFIGURATION, NAE_USER_ASSIGN_COMPONENT, NAE_USER_IMPERSONATE_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, OpenedTab, Operator, OperatorResolverService, OperatorService, OperatorTemplatePart, OperatorTemplatePartType, Operators, OrganizationListService, OverflowService, PUBLISHERS, PageLoadRequestContext, PaginationParams, PaginationSort, PaperViewService, PermissionService, PermissionType, PetriNetResourceService, Predicate, PredicateWithGenerator, ProcessList, ProcessService, ProgressType, PromptDialogComponent, PromptDialogModule, PublicCaseResourceService, PublicPetriNetResourceService, PublicProcessService, PublicTaskLoadingService, PublicTaskResourceService, PublicUrlResolverService, Query, QueuedEvent, RedirectService, ResourceProvider, ResultWithAfterActions, RoleAssignmentLdapGroupService, RoleAssignmentService, RoleGuardService, RoutingBuilderService, SearchIndex, SearchIndexResolverService, SearchInputType, SearchMode, SearchService, SelectedCaseService, 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, TaskRefField, TaskRequestStateService, TaskResourceService, TaskRole, TaskTask, TaskViewService, TemplateAppearance, TestCaseBaseFilterProvider, TestCaseViewAllowedNetsFactory, TestConfigurationService, TestMockDependenciesModule, TestNoAllowedNetsFactory, TestTaskBaseFilterProvider, TestTaskViewAllowedNetsFactory, TestViewService, TextAreaField, TextAreaHeight, TextField, TextFieldValidation, TranslateLibModule, TreeCaseViewService, TreePetriflowIdentifiers, TreeTaskContentService, UnlimitedTaskContentService, UriContentType, UriResourceService, UriService, User, UserAutocomplete, UserComparatorService, UserField, UserFilterConstants, UserFiltersService, UserImpersonationConstants, UserInviteService, UserListField, UserListService, UserPreferenceService, UserResourceService, UserService, UserTransformer, UserValue, 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, defaultCaseSearchCategoriesFactory, defaultTaskSearchCategoriesFactory, destroySubscription, 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 };
32051
32428
  //# sourceMappingURL=netgrif-components-core.mjs.map