@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
@@ -1152,6 +1152,17 @@ var publicView$2 = {
1152
1152
  var dynamicNavigation$2 = {
1153
1153
  couldNotResolveView: "An error has occurred during the view resolution process. The view could not be displayed"
1154
1154
  };
1155
+ var impersonation$2 = {
1156
+ user: {
1157
+ successfullyRepresented: "User successfully represented",
1158
+ currentlyAlreadyRepresented: "User is already being represented by someone else",
1159
+ currentlyLogged: "User is currently logged in"
1160
+ },
1161
+ action: {
1162
+ failed: "Action failed",
1163
+ deactivated: "Representation was successfully deactivated"
1164
+ }
1165
+ };
1155
1166
  var en = {
1156
1167
  toolbar: toolbar$2,
1157
1168
  tasks: tasks$2,
@@ -1187,7 +1198,8 @@ var en = {
1187
1198
  errThird: "Color is required.",
1188
1199
  noNets: "No allowed Nets",
1189
1200
  createCase: "Successful create new case",
1190
- defaultCaseName: "with default case name"
1201
+ defaultCaseName: "with default case name",
1202
+ createCaseError: "A new case was created, but an error occurred while executing actions"
1191
1203
  },
1192
1204
  user: {
1193
1205
  assign: "User Assign",
@@ -1208,6 +1220,12 @@ var en = {
1208
1220
  "option-selector": {
1209
1221
  select: "Select",
1210
1222
  "choose-one-option": "Choose one of the provided options"
1223
+ },
1224
+ impersonation: {
1225
+ title: "Impersonate user",
1226
+ submit: "Impersonate",
1227
+ cease: "Cancel impersonation",
1228
+ impersonating: "impersonating"
1211
1229
  }
1212
1230
  },
1213
1231
  search: search$2,
@@ -1228,7 +1246,8 @@ var en = {
1228
1246
  workflow: workflow$2,
1229
1247
  legal: legal$2,
1230
1248
  publicView: publicView$2,
1231
- dynamicNavigation: dynamicNavigation$2
1249
+ dynamicNavigation: dynamicNavigation$2,
1250
+ impersonation: impersonation$2
1232
1251
  };
1233
1252
 
1234
1253
  var toolbar$1 = {
@@ -1630,6 +1649,17 @@ var publicView$1 = {
1630
1649
  var dynamicNavigation$1 = {
1631
1650
  couldNotResolveView: "Počas načítania zobrazenia sa vyskytla chyba. Zobrazenie nie je možné zobraziť"
1632
1651
  };
1652
+ var impersonation$1 = {
1653
+ user: {
1654
+ successfullyRepresented: "Používateľ bol úspešne zastúpený",
1655
+ currentlyAlreadyRepresented: "Používateľ je momentálne zastupovaný",
1656
+ currentlyLogged: "Používateľ je momentálne prihlásený"
1657
+ },
1658
+ action: {
1659
+ failed: "Akciu sa nepodarilo vykonať",
1660
+ deactivated: "Zastupovanie bolo úspešne deaktivované"
1661
+ }
1662
+ };
1633
1663
  var sk = {
1634
1664
  toolbar: toolbar$1,
1635
1665
  tasks: tasks$1,
@@ -1665,7 +1695,8 @@ var sk = {
1665
1695
  errThird: "Farba je povinné pole.",
1666
1696
  noNets: "Žiadne povolené siete",
1667
1697
  createCase: "Úspešne vytvorený nový prípad",
1668
- defaultCaseName: "s prednastaveným názvom prípadu"
1698
+ defaultCaseName: "s prednastaveným názvom prípadu",
1699
+ createCaseError: "Nový prípad vytvorený, nastala však chyba pri vykonávaní akcií"
1669
1700
  },
1670
1701
  user: {
1671
1702
  assign: "Priradiť používateľa",
@@ -1686,6 +1717,12 @@ var sk = {
1686
1717
  "option-selector": {
1687
1718
  select: "Zvoliť",
1688
1719
  "choose-one-option": "Vyberte jednu z možností"
1720
+ },
1721
+ impersonation: {
1722
+ title: "Zastúpenie používateľa",
1723
+ submit: "Zastúpiť",
1724
+ cease: "Zrušiť zastúpenie",
1725
+ impersonating: "v zastúpení"
1689
1726
  }
1690
1727
  },
1691
1728
  search: search$1,
@@ -1706,7 +1743,8 @@ var sk = {
1706
1743
  workflow: workflow$1,
1707
1744
  legal: legal$1,
1708
1745
  publicView: publicView$1,
1709
- dynamicNavigation: dynamicNavigation$1
1746
+ dynamicNavigation: dynamicNavigation$1,
1747
+ impersonation: impersonation$1
1710
1748
  };
1711
1749
 
1712
1750
  var toolbar = {
@@ -1943,8 +1981,8 @@ var forms = {
1943
1981
  enterEmail: "Ihre E-Mail Adresse eingeben"
1944
1982
  },
1945
1983
  login: {
1946
- length: "Das Benützername muss mindestens 4 Zeichen enthalten",
1947
- login: "Benützername",
1984
+ length: "Das Benutzername muss mindestens 4 Zeichen enthalten",
1985
+ login: "Benutzername",
1948
1986
  wrongCredentials: "Falsche Anmeldeinformationen!",
1949
1987
  loginButton: "Anmelden",
1950
1988
  reset: "Kennwort wiederherstellen",
@@ -2108,6 +2146,17 @@ var publicView = {
2108
2146
  var dynamicNavigation = {
2109
2147
  couldNotResolveView: "Ein Fehler ist aufgetreten während des Ansichtauflösungsprocess. Der Ansicht kann nicht angezeigt werden"
2110
2148
  };
2149
+ var impersonation = {
2150
+ user: {
2151
+ successfullyRepresented: "Benutzer wird jetzt vertreten",
2152
+ currentlyAlreadyRepresented: "Für den Benutzer existiert bereits eine Vertretung",
2153
+ currentlyLogged: "Benutzer ist bereits angemeldet"
2154
+ },
2155
+ action: {
2156
+ failed: "Aktion ist fehlgeschlagen",
2157
+ deactivated: "Vertretung wurde erfolgreich deaktiviert"
2158
+ }
2159
+ };
2111
2160
  var de = {
2112
2161
  toolbar: toolbar,
2113
2162
  tasks: tasks,
@@ -2143,14 +2192,15 @@ var de = {
2143
2192
  errThird: "Sie müssen eine Farbe auswählen.",
2144
2193
  noNets: "Es gibt keine erlaubte Netze",
2145
2194
  createCase: "Neuen Fall würde erfolgreich erzeugt",
2146
- defaultCaseName: "mit einem Standardfallnamen"
2195
+ defaultCaseName: "mit einem Standardfallnamen",
2196
+ createCaseError: "Neuer Fall wurde erstellt, aber beim Ausführen von Aktionen ist ein Fehler aufgetreten"
2147
2197
  },
2148
2198
  user: {
2149
- assign: "Benützer zuweisen",
2150
- choose: "Benützer auswählen",
2151
- noUser: "Es gibt keine Benützer",
2152
- err: "Beim laden der Benützer ist eine Fehler aufgetreten",
2153
- showcase: "Benützeransichtmodus ist nicht ausgewählt!"
2199
+ assign: "Benutzer zuweisen",
2200
+ choose: "Benutzer auswählen",
2201
+ noUser: "Es gibt keine Benutzer",
2202
+ err: "Beim laden der Benutzer ist eine Fehler aufgetreten",
2203
+ showcase: "Die Benutzeransicht ist nicht gesetzt!"
2154
2204
  },
2155
2205
  ldapGroup: {
2156
2206
  choose: "LDAP-Gruppe suchen",
@@ -2164,6 +2214,12 @@ var de = {
2164
2214
  "option-selector": {
2165
2215
  select: "Auswählen",
2166
2216
  "choose-one-option": "Wählen Sie eine Option aus"
2217
+ },
2218
+ impersonation: {
2219
+ title: "Benutzer vertreten",
2220
+ submit: "Vertreten",
2221
+ cease: "Vertretung abbrechen",
2222
+ impersonating: "in Vertretung als"
2167
2223
  }
2168
2224
  },
2169
2225
  search: search,
@@ -2184,14 +2240,15 @@ var de = {
2184
2240
  workflow: workflow,
2185
2241
  legal: legal,
2186
2242
  publicView: publicView,
2187
- dynamicNavigation: dynamicNavigation
2243
+ dynamicNavigation: dynamicNavigation,
2244
+ impersonation: impersonation
2188
2245
  };
2189
2246
 
2190
2247
  /**
2191
2248
  * The user object that is used by the frontend in its logic.
2192
2249
  */
2193
2250
  class User {
2194
- constructor(id, email, firstName, lastName, authorities, roles, groups, nextGroups) {
2251
+ constructor(id, email, firstName, lastName, authorities, roles, groups, nextGroups, impersonated) {
2195
2252
  this.id = id;
2196
2253
  this.email = email;
2197
2254
  this.firstName = firstName;
@@ -2200,6 +2257,7 @@ class User {
2200
2257
  this.roles = roles;
2201
2258
  this.groups = groups;
2202
2259
  this.nextGroups = nextGroups;
2260
+ this.impersonated = impersonated;
2203
2261
  }
2204
2262
  get fullName() {
2205
2263
  return this.firstName + ' ' + this.lastName;
@@ -2222,6 +2280,18 @@ class User {
2222
2280
  isEmpty() {
2223
2281
  return this.id === '';
2224
2282
  }
2283
+ /**
2284
+ * @returns self if no impersonated user is present, or impersonated user otherwise
2285
+ */
2286
+ getSelfOrImpersonated() {
2287
+ return this.isImpersonating() ? this.impersonated : this;
2288
+ }
2289
+ /**
2290
+ * @returns true if user is impersonating another user
2291
+ */
2292
+ isImpersonating() {
2293
+ return !!this.impersonated;
2294
+ }
2225
2295
  }
2226
2296
 
2227
2297
  class AuthenticationMethodService {
@@ -2404,7 +2474,7 @@ class UserTransformer {
2404
2474
  }
2405
2475
  transform(user) {
2406
2476
  const groups = []; // TODO groups parsing
2407
- return new User(user.id, user.email, user.name, user.surname, this.transformAuthorities(user.authorities), user.processRoles, groups, user.nextGroups);
2477
+ 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);
2408
2478
  }
2409
2479
  }
2410
2480
  UserTransformer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UserTransformer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -3009,31 +3079,34 @@ class UserService {
3009
3079
  * If calculated intersection isn't empty returns true, otherwise false.
3010
3080
  */
3011
3081
  hasAuthority(authority) {
3012
- if (!authority || !this._user.authorities) {
3082
+ const user = this._user.getSelfOrImpersonated();
3083
+ if (!authority || !user.authorities) {
3013
3084
  return false;
3014
3085
  }
3015
3086
  if (authority instanceof Array) {
3016
- return authority.some(a => this._user.authorities.some(u => u === a));
3087
+ return authority.some(a => user.authorities.some(u => u === a));
3017
3088
  }
3018
3089
  else {
3019
- return this._user.authorities.some(a => a === authority);
3090
+ return user.authorities.some(a => a === authority);
3020
3091
  }
3021
3092
  }
3022
3093
  hasRole(role) {
3023
- if (!role || !this._user.roles) {
3094
+ const user = this._user.getSelfOrImpersonated();
3095
+ if (!role || !user.roles) {
3024
3096
  return false;
3025
3097
  }
3026
- return this._user.roles.some(r => r === role);
3098
+ return user.roles.some(r => r === role);
3027
3099
  }
3028
3100
  /**
3029
3101
  * Checks whether the user has role with a specific stringId
3030
3102
  * @param roleStringId ID of the role we want to check
3031
3103
  */
3032
3104
  hasRoleById(roleStringId) {
3033
- if (!roleStringId || !this._user.roles) {
3105
+ const user = this._user.getSelfOrImpersonated();
3106
+ if (!roleStringId || !user.roles) {
3034
3107
  return false;
3035
3108
  }
3036
- return this._user.roles.some(r => r.stringId === roleStringId);
3109
+ return user.roles.some(r => r.stringId === roleStringId);
3037
3110
  }
3038
3111
  /**
3039
3112
  * Checks whether the user has role with the specified identifier in a process with the specified identifier (any version)
@@ -3041,10 +3114,11 @@ class UserService {
3041
3114
  * @param netIdentifier identifier (import ID) of the process the role is defined in
3042
3115
  */
3043
3116
  hasRoleByIdentifier(roleIdentifier, netIdentifier) {
3044
- if (!roleIdentifier || !netIdentifier || !this._user.roles) {
3117
+ const user = this._user.getSelfOrImpersonated();
3118
+ if (!roleIdentifier || !netIdentifier || !user.roles) {
3045
3119
  return false;
3046
3120
  }
3047
- return this._user.roles.some(r => r.netImportId === netIdentifier && r.importId === roleIdentifier);
3121
+ return user.roles.some(r => r.netImportId === netIdentifier && r.importId === roleIdentifier);
3048
3122
  }
3049
3123
  /**
3050
3124
  * Checks whether the user has role with the specified name in a process with the specified identifier (any version)
@@ -3052,10 +3126,11 @@ class UserService {
3052
3126
  * @param netIdentifier identifier (import ID) of the process the role is defined in
3053
3127
  */
3054
3128
  hasRoleByName(roleName, netIdentifier) {
3055
- if (!roleName || !netIdentifier || !this._user.roles) {
3129
+ const user = this._user.getSelfOrImpersonated();
3130
+ if (!roleName || !netIdentifier || !user.roles) {
3056
3131
  return false;
3057
3132
  }
3058
- return this._user.roles.some(r => r.netImportId === netIdentifier && r.name === roleName);
3133
+ return user.roles.some(r => r.netImportId === netIdentifier && r.name === roleName);
3059
3134
  }
3060
3135
  login(credentials) {
3061
3136
  this._loginCalled = true;
@@ -6284,9 +6359,9 @@ class TaskResourceService extends AbstractResourceService {
6284
6359
  * Delete file from the task
6285
6360
  * DELETE
6286
6361
  */
6287
- deleteFile(taskId, fieldId, name) {
6362
+ deleteFile(taskId, fieldId, name, param) {
6288
6363
  const url = !!name ? 'task/' + taskId + '/file/' + fieldId + '/' + name : 'task/' + taskId + '/file/' + fieldId;
6289
- return this._resourceProvider.delete$(url, this.SERVER_URL).pipe(map(r => this.changeType(r, undefined)));
6364
+ return this._resourceProvider.delete$(url, this.SERVER_URL, param).pipe(map(r => this.changeType(r, undefined)));
6290
6365
  }
6291
6366
  /**
6292
6367
  * Download task file preview for field value
@@ -6613,7 +6688,9 @@ class AbstractFileFieldComponent extends AbstractDataFieldComponent {
6613
6688
  this._log.error('File cannot be deleted. No task is set to the field.');
6614
6689
  return;
6615
6690
  }
6616
- this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId).pipe(take(1)).subscribe(response => {
6691
+ let param = new HttpParams();
6692
+ param = param.set("parentTaskId", this.resolveParentTaskId());
6693
+ this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, undefined, param).pipe(take(1)).subscribe(response => {
6617
6694
  if (response.success) {
6618
6695
  const filename = this.dataField.value.name;
6619
6696
  this.dataField.value = {};
@@ -6697,7 +6774,7 @@ class AbstractFileFieldComponent extends AbstractDataFieldComponent {
6697
6774
  if (!this.checkFileBeforeDownload()) {
6698
6775
  return;
6699
6776
  }
6700
- this._taskResourceService.downloadFile(this.taskId, this.dataField.stringId).subscribe(response => {
6777
+ this._taskResourceService.downloadFile(this.resolveParentTaskId(), this.dataField.stringId).subscribe(response => {
6701
6778
  if (!response.type || response.type !== ProgressType.DOWNLOAD) {
6702
6779
  this._log.debug(`File [${this.dataField.stringId}] ${this.dataField.value.name} was successfully downloaded`);
6703
6780
  this.initDownloadFile(response);
@@ -7004,7 +7081,9 @@ class AbstractFileListFieldComponent extends AbstractDataFieldComponent {
7004
7081
  this._log.error('File cannot be deleted. No task is set to the field.');
7005
7082
  return;
7006
7083
  }
7007
- this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, fileName).pipe(take(1)).subscribe((response) => {
7084
+ let param = new HttpParams();
7085
+ param = param.set("parentTaskId", this.resolveParentTaskId());
7086
+ this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, fileName, param).pipe(take(1)).subscribe((response) => {
7008
7087
  if (response.success) {
7009
7088
  const changedFieldsMap = this._eventService.parseChangedFieldsFromOutcomeTree(response.outcome);
7010
7089
  this.dataField.emitChangedFields(changedFieldsMap);
@@ -7300,6 +7379,7 @@ class AbstractCurrencyNumberFieldComponent extends AbstractNumberErrorsComponent
7300
7379
  this._currencyPipe = _currencyPipe;
7301
7380
  this.NUMBER_TYPE = 'number';
7302
7381
  this.TEXT_TYPE = 'text';
7382
+ this.WHITESPACE = ' ';
7303
7383
  }
7304
7384
  ngAfterViewInit() {
7305
7385
  this.fieldType = this.TEXT_TYPE;
@@ -7307,7 +7387,7 @@ class AbstractCurrencyNumberFieldComponent extends AbstractNumberErrorsComponent
7307
7387
  this.numberField.valueChanges().subscribe(value => {
7308
7388
  if (value !== undefined) {
7309
7389
  if (this.fieldType === this.TEXT_TYPE) {
7310
- this.transformedValue = this.transformCurrency(value.toString());
7390
+ this.transformedValue = this.transformCurrency(value.toString()) + this.WHITESPACE;
7311
7391
  }
7312
7392
  }
7313
7393
  else {
@@ -7602,6 +7682,7 @@ var SideMenuSize;
7602
7682
  SideMenuSize["SMALL"] = "side-menu-width-small";
7603
7683
  SideMenuSize["MEDIUM"] = "side-menu-width-medium";
7604
7684
  SideMenuSize["LARGE"] = "side-menu-width-large";
7685
+ SideMenuSize["XL"] = "side-menu-width-xl";
7605
7686
  })(SideMenuSize || (SideMenuSize = {}));
7606
7687
 
7607
7688
  const NAE_SIDE_MENU_CONTROL = new InjectionToken('NaeSideMenuControl');
@@ -11084,14 +11165,17 @@ class CaseDataset extends Category {
11084
11165
  return resolver.getIndex(datafield.fieldId, SearchIndex.BOOLEAN);
11085
11166
  case 'file':
11086
11167
  case 'fileList':
11087
- return resolver.getIndex(datafield.fieldId, SearchIndex.FILE_NAME, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring));
11168
+ return resolver.getIndex(datafield.fieldId, SearchIndex.FILE_NAME, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring)
11169
+ || this.isSelectedOperator(IsNull));
11088
11170
  case 'user':
11089
11171
  case 'userList':
11090
11172
  return resolver.getIndex(datafield.fieldId, SearchIndex.USER_ID);
11091
11173
  case 'i18n':
11092
- return resolver.getIndex(datafield.fieldId, SearchIndex.TEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring));
11174
+ return resolver.getIndex(datafield.fieldId, SearchIndex.TEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring)
11175
+ || this.isSelectedOperator(IsNull));
11093
11176
  default:
11094
- return resolver.getIndex(datafield.fieldId, SearchIndex.FULLTEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring));
11177
+ return resolver.getIndex(datafield.fieldId, SearchIndex.FULLTEXT, this.isSelectedOperator(Equals) || this.isSelectedOperator(NotEquals) || this.isSelectedOperator(Substring)
11178
+ || this.isSelectedOperator(IsNull));
11095
11179
  }
11096
11180
  }
11097
11181
  get inputPlaceholder() {
@@ -13993,8 +14077,9 @@ class UserComparatorService {
13993
14077
  constructor(_userService) {
13994
14078
  this._userService = _userService;
13995
14079
  }
13996
- compareUsers(user) {
13997
- return user.email === this._userService.user.email ||
14080
+ compareUsers(user, acceptImpersonator = true) {
14081
+ const loggedUser = acceptImpersonator ? this._userService.user.getSelfOrImpersonated() : this._userService.user;
14082
+ return user.email === loggedUser.email ||
13998
14083
  user.email.includes('anonymous') && this._userService.user.email.includes('anonymous');
13999
14084
  }
14000
14085
  }
@@ -14877,6 +14962,8 @@ const NAE_NEW_CASE_COMPONENT = new InjectionToken('NaeNewCaseComponent');
14877
14962
  const NAE_OPTION_SELECTOR_COMPONENT = new InjectionToken('NaeOptionSelectorComponent');
14878
14963
  const NAE_SAVE_FILTER_COMPONENT = new InjectionToken('NaeSaveFilterComponent');
14879
14964
  const NAE_LOAD_FILTER_COMPONENT = new InjectionToken('NaeLoadFilterComponent');
14965
+ const NAE_USER_IMPERSONATE_COMPONENT = new InjectionToken('NaeUserImpersonateComponent');
14966
+ const NAE_ADMIN_IMPERSONATE_COMPONENT = new InjectionToken('NaeAdminImpersonateComponent');
14880
14967
 
14881
14968
  /**
14882
14969
  * Holds the information that accompanies a page load request. These information are held outside of the
@@ -15159,7 +15246,7 @@ class PermissionService {
15159
15246
  checkUserPerms(users, permission) {
15160
15247
  let userPermValue;
15161
15248
  if (!!users) {
15162
- const loggedUserId = this._userService.user.id;
15249
+ const loggedUserId = this._userService.user.getSelfOrImpersonated().id;
15163
15250
  Object.keys(users).forEach(user => {
15164
15251
  if (user === loggedUserId && users[user][permission] !== undefined) {
15165
15252
  userPermValue = userPermValue === undefined ?
@@ -20047,16 +20134,27 @@ class AbstractNewCaseComponent {
20047
20134
  };
20048
20135
  this._caseResourceService.createCase(newCase)
20049
20136
  .subscribe((response) => {
20050
- this._snackBarService.openSuccessSnackBar(response.outcome.message === undefined
20051
- ? this._translate.instant('side-menu.new-case.createCase') + ' ' + newCase.title
20052
- : response.outcome.message);
20053
- this._sideMenuControl.close({
20054
- opened: false,
20055
- message: response.outcome.message === undefined
20056
- ? 'Confirm new case setup'
20057
- : response.outcome.message,
20058
- data: response.outcome.aCase
20059
- });
20137
+ if (!!response.outcome) {
20138
+ this._snackBarService.openSuccessSnackBar(response.outcome.message === undefined
20139
+ ? this._translate.instant('side-menu.new-case.createCase') + ' ' + newCase.title
20140
+ : response.outcome.message);
20141
+ this._sideMenuControl.close({
20142
+ opened: false,
20143
+ message: response.outcome.message === undefined
20144
+ ? 'Confirm new case setup'
20145
+ : response.outcome.message,
20146
+ data: response.outcome.aCase
20147
+ });
20148
+ }
20149
+ else if (!!response.error) {
20150
+ this._snackBarService.openWarningSnackBar(this._translate.instant('side-menu.new-case.createCaseError') + ' ' + newCase.title);
20151
+ this._sideMenuControl.close({
20152
+ opened: false,
20153
+ message: response.error === undefined
20154
+ ? 'Confirm new case setup'
20155
+ : response.error
20156
+ });
20157
+ }
20060
20158
  }, error => this._snackBarService.openErrorSnackBar(error.message ? error.message : error));
20061
20159
  }
20062
20160
  }
@@ -20534,6 +20632,12 @@ class FilterRepository {
20534
20632
  });
20535
20633
  return result;
20536
20634
  }
20635
+ /**
20636
+ * Removes all stored filters from the repository
20637
+ */
20638
+ removeAllFilters() {
20639
+ this._filters = new Map();
20640
+ }
20537
20641
  }
20538
20642
  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 });
20539
20643
  FilterRepository.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FilterRepository, providedIn: 'root' });
@@ -21361,6 +21465,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
21361
21465
  args: [NAE_SIDE_MENU_CONTROL]
21362
21466
  }] }, { type: LoggerService }, { type: CaseViewService }]; } });
21363
21467
 
21468
+ class AbstractUserImpersonateComponent extends AbstractCaseViewComponent {
21469
+ constructor(_sideMenuControl, caseViewService) {
21470
+ super(caseViewService);
21471
+ this._sideMenuControl = _sideMenuControl;
21472
+ if (this._sideMenuControl.data) {
21473
+ this._injectedData = this._sideMenuControl.data;
21474
+ }
21475
+ }
21476
+ handleCaseClick(clickedCase) {
21477
+ this._sideMenuControl.close({
21478
+ opened: false,
21479
+ message: 'User selected',
21480
+ data: {
21481
+ stringId: clickedCase.stringId
21482
+ }
21483
+ });
21484
+ }
21485
+ }
21486
+ 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 });
21487
+ 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 });
21488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractUserImpersonateComponent, decorators: [{
21489
+ type: Component,
21490
+ args: [{
21491
+ selector: 'ncc-abstract-user-impersonate',
21492
+ template: ''
21493
+ }]
21494
+ }], ctorParameters: function () { return [{ type: SideMenuControl, decorators: [{
21495
+ type: Inject,
21496
+ args: [NAE_SIDE_MENU_CONTROL]
21497
+ }] }, { type: CaseViewService }]; } });
21498
+
21364
21499
  /* COMPONENTS */
21365
21500
 
21366
21501
  class AbstractSideMenuContainerComponent {
@@ -23410,16 +23545,35 @@ class RoleGuardService {
23410
23545
  return this.canAccessView(view, state.url.toString());
23411
23546
  }
23412
23547
  canAccessView(view, url) {
23413
- if (typeof view.access !== 'string' && view.access.hasOwnProperty('role')) {
23414
- const allowedRoles = this.parseRoleConstraints(view.access.role, url);
23415
- return allowedRoles.some(constraint => {
23416
- if (constraint.roleIdentifier) {
23417
- return this._userService.hasRoleByIdentifier(constraint.roleIdentifier, constraint.processIdentifier);
23548
+ if (typeof view.access !== 'string' && (view.access.hasOwnProperty('role') || view.access.hasOwnProperty('bannedRole'))) {
23549
+ if (view.access.hasOwnProperty('role') && view.access.hasOwnProperty('bannedRole')) {
23550
+ const bannedRoles = this.parseRoleConstraints(view.access.bannedRole, url);
23551
+ const allowedRoles = this.parseRoleConstraints(view.access.role, url);
23552
+ if (bannedRoles.some(role => this.decideAccessByRole(role))) {
23553
+ return false;
23418
23554
  }
23419
- else {
23420
- return this._userService.hasRoleByName(constraint.roleName, constraint.processIdentifier);
23555
+ if (allowedRoles.length === 0) {
23556
+ this._log.warn(`View at '${url}' defines role access constraint with an empty array!`
23557
+ + ` No users will be allowed to enter this view!`);
23421
23558
  }
23422
- });
23559
+ return allowedRoles.some(role => this.decideAccessByRole(role)); // user was not denied access by a banned role, they need at least one allowed role
23560
+ }
23561
+ if (view.access.hasOwnProperty('bannedRole')) {
23562
+ const bannedRoles = this.parseRoleConstraints(view.access.bannedRole, url);
23563
+ return !bannedRoles.some(constraint => {
23564
+ return this.decideAccessByRole(constraint);
23565
+ });
23566
+ }
23567
+ if (view.access.hasOwnProperty('role')) {
23568
+ const allowedRoles = this.parseRoleConstraints(view.access.role, url);
23569
+ if (allowedRoles.length === 0) {
23570
+ this._log.warn(`View at '${url}' defines role access constraint with an empty array!`
23571
+ + ` No users will be allowed to enter this view!`);
23572
+ }
23573
+ return allowedRoles.some(constraint => {
23574
+ return this.decideAccessByRole(constraint);
23575
+ });
23576
+ }
23423
23577
  }
23424
23578
  throw new Error('Role guard is declared for a view with no role guard configuration!'
23425
23579
  + ` Add role guard configuration for view at ${url}, or remove the guard.`);
@@ -23430,8 +23584,6 @@ class RoleGuardService {
23430
23584
  }
23431
23585
  if (Array.isArray(roleConstrains)) {
23432
23586
  if (roleConstrains.length === 0) {
23433
- this._log.warn(`View at '${viewUrl}' defines role access constraint with an empty array!`
23434
- + ` No users will be allowed to enter this view!`);
23435
23587
  return [];
23436
23588
  }
23437
23589
  if (typeof roleConstrains[0] === 'string') {
@@ -23469,6 +23621,14 @@ class RoleGuardService {
23469
23621
  return { processIdentifier: constraint.processId, roleIdentifier: constraint.roleId };
23470
23622
  });
23471
23623
  }
23624
+ decideAccessByRole(constraint) {
23625
+ if (constraint.roleIdentifier) {
23626
+ return this._userService.hasRoleByIdentifier(constraint.roleIdentifier, constraint.processIdentifier);
23627
+ }
23628
+ else {
23629
+ return this._userService.hasRoleByName(constraint.roleName, constraint.processIdentifier);
23630
+ }
23631
+ }
23472
23632
  }
23473
23633
  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 });
23474
23634
  RoleGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RoleGuardService, providedIn: AuthenticationModule });
@@ -23676,7 +23836,7 @@ class AccessService {
23676
23836
  * @returns whether the user passes the role guard condition for accessing the specified view
23677
23837
  */
23678
23838
  passesRoleGuard(view, url) {
23679
- return !view.access.hasOwnProperty('role') || this._roleGuard.canAccessView(view, url);
23839
+ return (!view.access.hasOwnProperty('role') && !view.access.hasOwnProperty('bannedRole')) || this._roleGuard.canAccessView(view, url);
23680
23840
  }
23681
23841
  /**
23682
23842
  * @param view the view whose access permissions we want to check
@@ -24144,7 +24304,7 @@ class AbstractNavigationDrawerComponent {
24144
24304
  this.openedChange = new EventEmitter();
24145
24305
  this._fixed = true;
24146
24306
  this.opened = true;
24147
- this.quickPanelItems = ['language', 'settings', 'logout'];
24307
+ this.quickPanelItems = ['language', 'settings', 'logout', 'impersonation'];
24148
24308
  if (this.userPreferenceService.drawerWidth !== undefined) {
24149
24309
  this.contentWidth = new BehaviorSubject(this.userPreferenceService.drawerWidth);
24150
24310
  }
@@ -24885,6 +25045,168 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
24885
25045
  }]
24886
25046
  }], ctorParameters: function () { return [{ type: LoggerService }, { type: UriResourceService }, { type: CaseResourceService }, { type: ActiveGroupService }]; } });
24887
25047
 
25048
+ /**
25049
+ * Holds all identifiers of the Impersonation config process in an accessible manner
25050
+ */
25051
+ var UserImpersonationConstants;
25052
+ (function (UserImpersonationConstants) {
25053
+ UserImpersonationConstants["IMPERSONATION_CONFIG_NET_IDENTIFIER"] = "impersonation_config";
25054
+ UserImpersonationConstants["IMPERSONATION_CONFIG_FIELD_IMPERSONATED"] = "impersonated";
25055
+ UserImpersonationConstants["IMPERSONATION_CONFIG_FIELD_ROLES"] = "impersonated_roles";
25056
+ UserImpersonationConstants["IMPERSONATION_CONFIG_FIELD_AUTHS"] = "impersonated_authorities";
25057
+ })(UserImpersonationConstants || (UserImpersonationConstants = {}));
25058
+
25059
+ class ImpersonationService extends AbstractResourceService {
25060
+ constructor(provider, _router, _configService, _userService, _snackbar, _filter, _log, _translate) {
25061
+ super('impersonation', provider, _configService);
25062
+ this.provider = provider;
25063
+ this._router = _router;
25064
+ this._configService = _configService;
25065
+ this._userService = _userService;
25066
+ this._snackbar = _snackbar;
25067
+ this._filter = _filter;
25068
+ this._log = _log;
25069
+ this._translate = _translate;
25070
+ this._impersonating$ = new Subject();
25071
+ this._sub = this._userService.user$.subscribe(user => this._resolveUserChange(user));
25072
+ }
25073
+ get impersonating$() {
25074
+ return this._impersonating$.asObservable();
25075
+ }
25076
+ impersonateUser(userId) {
25077
+ this.provider.post$('impersonate/user/' + userId, this.SERVER_URL, {}).subscribe((user) => {
25078
+ this._resolveSuccess(user);
25079
+ }, (response => {
25080
+ this._resolveError(response);
25081
+ }));
25082
+ }
25083
+ impersonateByConfig(configId) {
25084
+ this.provider.post$('impersonate/config/' + configId, this.SERVER_URL, {}).subscribe((user) => {
25085
+ this._resolveSuccess(user);
25086
+ }, (response => {
25087
+ this._resolveError(response);
25088
+ }));
25089
+ }
25090
+ cease() {
25091
+ this.provider.post$('impersonate/clear', this.SERVER_URL, {}).subscribe(user => {
25092
+ this._snackbar.openSuccessSnackBar(this._translate.instant('impersonation.action.deactivated'));
25093
+ return this._triggerReload();
25094
+ }, (error => {
25095
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.action.failed'));
25096
+ }));
25097
+ }
25098
+ _resolveSuccess(user) {
25099
+ this._snackbar.openSuccessSnackBar(this._translate.instant('impersonation.user.successfullyRepresented'));
25100
+ this._triggerReload();
25101
+ }
25102
+ _resolveError(response) {
25103
+ if (response.status === 400) {
25104
+ response.error.alreadyImpersonated ?
25105
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.user.currentlyAlreadyRepresented')) :
25106
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.user.currentlyLogged'));
25107
+ }
25108
+ else {
25109
+ this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.action.failed'));
25110
+ }
25111
+ }
25112
+ _triggerReload() {
25113
+ this._userService.reload();
25114
+ }
25115
+ _resolveUserChange(user) {
25116
+ if (this._lastUser && this._lastUser.isImpersonating() != user.isImpersonating()) {
25117
+ this._filter.removeAllFilters();
25118
+ this._impersonating$.next(user.isImpersonating());
25119
+ }
25120
+ this._lastUser = user;
25121
+ }
25122
+ ngOnDestroy() {
25123
+ if (this._sub) {
25124
+ this._sub.unsubscribe();
25125
+ }
25126
+ }
25127
+ }
25128
+ 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 });
25129
+ ImpersonationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationService, providedIn: 'root' });
25130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationService, decorators: [{
25131
+ type: Injectable,
25132
+ args: [{
25133
+ providedIn: 'root'
25134
+ }]
25135
+ }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: i2$3.Router }, { type: ConfigurationService }, { type: UserService }, { type: SnackBarService }, { type: FilterRepository }, { type: LoggerService }, { type: i1$2.TranslateService }]; } });
25136
+
25137
+ class ImpersonationUserSelectService {
25138
+ constructor(_log, _sideMenuService, _snackBar, _impersonation, _user, _userImpersonateComponent, _adminImpersonateComponent) {
25139
+ this._log = _log;
25140
+ this._sideMenuService = _sideMenuService;
25141
+ this._snackBar = _snackBar;
25142
+ this._impersonation = _impersonation;
25143
+ this._user = _user;
25144
+ this._userImpersonateComponent = _userImpersonateComponent;
25145
+ this._adminImpersonateComponent = _adminImpersonateComponent;
25146
+ }
25147
+ /**
25148
+ * Opens side menu with users who can be impersonated by logged user
25149
+ */
25150
+ selectImpersonate() {
25151
+ if (this.isAdmin()) {
25152
+ this._sideMenuService.open(this._adminImpersonateComponent, SideMenuSize.LARGE, this.injectedData()).onClose.subscribe(event => {
25153
+ this._log.debug('Impersonable user select :' + event);
25154
+ if (event.data === undefined) {
25155
+ return;
25156
+ }
25157
+ this._impersonation.impersonateUser(event.data._id);
25158
+ });
25159
+ }
25160
+ else {
25161
+ this._sideMenuService.open(this._userImpersonateComponent, SideMenuSize.XL, this.injectedData()).onClose.subscribe(event => {
25162
+ this._log.debug('Impersonable config select :' + event);
25163
+ if (event.data === undefined) {
25164
+ return;
25165
+ }
25166
+ this._impersonation.impersonateByConfig(event.data.stringId);
25167
+ });
25168
+ }
25169
+ }
25170
+ injectedData() {
25171
+ const currentTime = moment();
25172
+ let filterCasesFilter = SimpleFilter.fromCaseQuery({
25173
+ process: {
25174
+ identifier: UserImpersonationConstants.IMPERSONATION_CONFIG_NET_IDENTIFIER
25175
+ },
25176
+ query: `
25177
+ (dataSet.impersonators.keyValue:${this._user.user.id}) AND
25178
+ (dataSet.is_active.booleanValue:true) AND
25179
+ ((!(_exists_:dataSet.valid_from.timestampValue)) OR (dataSet.valid_from.timestampValue:<` + currentTime.valueOf() + `)) AND
25180
+ ((!(_exists_:dataSet.valid_to.timestampValue)) OR (dataSet.valid_to.timestampValue:>${currentTime.valueOf()}))
25181
+ `
25182
+ });
25183
+ return {
25184
+ filter: filterCasesFilter
25185
+ };
25186
+ }
25187
+ isAdmin() {
25188
+ return this._user.hasAuthority('ROLE_ADMIN');
25189
+ }
25190
+ }
25191
+ 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 });
25192
+ ImpersonationUserSelectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserSelectService, providedIn: 'root' });
25193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserSelectService, decorators: [{
25194
+ type: Injectable,
25195
+ args: [{
25196
+ providedIn: 'root'
25197
+ }]
25198
+ }], ctorParameters: function () { return [{ type: LoggerService }, { type: SideMenuService }, { type: SnackBarService }, { type: ImpersonationService }, { type: UserService }, { type: undefined, decorators: [{
25199
+ type: Optional
25200
+ }, {
25201
+ type: Inject,
25202
+ args: [NAE_USER_IMPERSONATE_COMPONENT]
25203
+ }] }, { type: undefined, decorators: [{
25204
+ type: Optional
25205
+ }, {
25206
+ type: Inject,
25207
+ args: [NAE_ADMIN_IMPERSONATE_COMPONENT]
25208
+ }] }]; } });
25209
+
24888
25210
  const FILTER_IDENTIFIERS = [
24889
25211
  "preference_filter_item"
24890
25212
  ];
@@ -24894,7 +25216,7 @@ const RIGHT_DRAWER_DEFAULT_WIDTH = 240;
24894
25216
  const RIGHT_DRAWER_DEFAULT_MIN_WIDTH = 180;
24895
25217
  const RIGHT_DRAWER_MAX_WIDTH = 460;
24896
25218
  class AbstractNavigationDoubleDrawerComponent {
24897
- constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _dynamicRoutingService) {
25219
+ constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
24898
25220
  this._router = _router;
24899
25221
  this._activatedRoute = _activatedRoute;
24900
25222
  this._breakpoint = _breakpoint;
@@ -24904,6 +25226,8 @@ class AbstractNavigationDoubleDrawerComponent {
24904
25226
  this._log = _log;
24905
25227
  this._config = _config;
24906
25228
  this._uriService = _uriService;
25229
+ this._impersonationUserSelect = _impersonationUserSelect;
25230
+ this._impersonation = _impersonation;
24907
25231
  this._dynamicRoutingService = _dynamicRoutingService;
24908
25232
  this.imageRouterLink = "/";
24909
25233
  this.imageAlt = "Logo";
@@ -24911,6 +25235,7 @@ class AbstractNavigationDoubleDrawerComponent {
24911
25235
  this.includeUser = true;
24912
25236
  this.includeLanguage = true;
24913
25237
  this.includeMoreMenu = true;
25238
+ this.includeImpersonation = true;
24914
25239
  this.allClosable = true;
24915
25240
  this.folderIcon = "folder";
24916
25241
  this.openedFolderIcon = "folder_open";
@@ -25068,6 +25393,12 @@ class AbstractNavigationDoubleDrawerComponent {
25068
25393
  }
25069
25394
  });
25070
25395
  }
25396
+ impersonate() {
25397
+ this._impersonationUserSelect.selectImpersonate();
25398
+ }
25399
+ stopImpersonating() {
25400
+ this._impersonation.cease();
25401
+ }
25071
25402
  get user() {
25072
25403
  return this._userService.user;
25073
25404
  }
@@ -25146,15 +25477,18 @@ class AbstractNavigationDoubleDrawerComponent {
25146
25477
  id: filter.stringId,
25147
25478
  resource: filter
25148
25479
  };
25149
- const resolvedRoles = this.resolveAccessRoles(filter);
25480
+ const resolvedRoles = this.resolveAccessRoles(filter, 'allowed_roles');
25481
+ const resolvedBannedRoles = this.resolveAccessRoles(filter, 'banned_roles');
25150
25482
  if (!!resolvedRoles)
25151
25483
  item.access['role'] = resolvedRoles;
25484
+ if (!!resolvedBannedRoles)
25485
+ item.access['bannedRole'] = resolvedBannedRoles;
25152
25486
  if (!this._accessService.canAccessView(item, item.routingPath))
25153
25487
  return;
25154
25488
  return item;
25155
25489
  }
25156
- resolveAccessRoles(filter) {
25157
- const allowedRoles = filter.immediateData.find(f => f.stringId === 'allowed_roles')?.options;
25490
+ resolveAccessRoles(filter, roleType) {
25491
+ const allowedRoles = filter.immediateData.find(f => f.stringId === roleType)?.options;
25158
25492
  if (!allowedRoles || Object.keys(allowedRoles).length === 0)
25159
25493
  return undefined;
25160
25494
  const roles = [];
@@ -25216,15 +25550,15 @@ class AbstractNavigationDoubleDrawerComponent {
25216
25550
  // this.contentWidth.next(this.width);
25217
25551
  }
25218
25552
  }
25219
- 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 });
25220
- 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 });
25553
+ 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 });
25554
+ 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 });
25221
25555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, decorators: [{
25222
25556
  type: Component,
25223
25557
  args: [{
25224
25558
  selector: 'ncc-abstract-navigation-double-drawer',
25225
25559
  template: '',
25226
25560
  }]
25227
- }], 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: [{
25561
+ }], 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: [{
25228
25562
  type: Input
25229
25563
  }], portalRightMenu: [{
25230
25564
  type: Input
@@ -25242,6 +25576,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
25242
25576
  type: Input
25243
25577
  }], includeMoreMenu: [{
25244
25578
  type: Input
25579
+ }], includeImpersonation: [{
25580
+ type: Input
25245
25581
  }], allClosable: [{
25246
25582
  type: Input
25247
25583
  }], folderIcon: [{
@@ -28426,7 +28762,7 @@ class AbstractSearchOperandInputComponent {
28426
28762
  }
28427
28763
  return this._filteredOptions$;
28428
28764
  }
28429
- get isInputFilled() {
28765
+ isInputFilled() {
28430
28766
  if (!this._inputConfirmed) {
28431
28767
  return false;
28432
28768
  }
@@ -28439,7 +28775,7 @@ class AbstractSearchOperandInputComponent {
28439
28775
  return;
28440
28776
  }
28441
28777
  this._initialExpansion = false;
28442
- if (!this.isInputFilled) {
28778
+ if (!this.isInputFilled()) {
28443
28779
  setTimeout(() => {
28444
28780
  input.nativeElement.focus();
28445
28781
  });
@@ -30043,6 +30379,11 @@ class TestConfigurationService extends ConfigurationService {
30043
30379
  name: 'dashboard',
30044
30380
  address: 'http://localhost:8080/api/',
30045
30381
  format: 'json'
30382
+ },
30383
+ {
30384
+ name: 'impersonation',
30385
+ address: 'http://localhost:8080/api/',
30386
+ format: 'json'
30046
30387
  }
30047
30388
  ]
30048
30389
  },
@@ -31559,8 +31900,7 @@ class AbstractFieldComponentResolverComponent {
31559
31900
  return this.gridElement.item;
31560
31901
  }
31561
31902
  getTaskId() {
31562
- const referencedTaskId = this.taskContentService.getReferencedFieldTask(this.getDataField().stringId);
31563
- return referencedTaskId ?? this.taskContentService.task.stringId;
31903
+ return this.taskContentService.task.stringId;
31564
31904
  }
31565
31905
  isField() {
31566
31906
  return this.gridElement.type !== TaskElementType.BLANK && this.gridElement.type !== TaskElementType.DATA_GROUP_TITLE;
@@ -31875,6 +32215,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
31875
32215
 
31876
32216
  /* EVENT OUTCOMES */
31877
32217
 
32218
+ class ImpersonationUserResourceService extends UserResourceService {
32219
+ constructor(provider, configService) {
32220
+ super(provider, configService);
32221
+ this._IMPERSONATION_SERVER_URL = this.getResourceAddress('impersonation');
32222
+ }
32223
+ search(body, params) {
32224
+ return this._resourceProvider.post$('/impersonate/search', this._IMPERSONATION_SERVER_URL, { query: body.fulltext }, params)
32225
+ .pipe(map((r) => this.getResourcePage(r, 'users')));
32226
+ }
32227
+ }
32228
+ 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 });
32229
+ ImpersonationUserResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserResourceService, providedIn: 'root' });
32230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserResourceService, decorators: [{
32231
+ type: Injectable,
32232
+ args: [{
32233
+ providedIn: 'root'
32234
+ }]
32235
+ }], ctorParameters: function () { return [{ type: ResourceProvider }, { type: ConfigurationService }]; } });
32236
+
32237
+ class ImpersonationUserListService extends UserListService {
32238
+ constructor(_resources, _logService, _snackbar, _translate) {
32239
+ super(_resources, _logService, _snackbar, _translate);
32240
+ this._logService = _logService;
32241
+ }
32242
+ }
32243
+ 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 });
32244
+ ImpersonationUserListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserListService });
32245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ImpersonationUserListService, decorators: [{
32246
+ type: Injectable
32247
+ }], ctorParameters: function () { return [{ type: ImpersonationUserResourceService }, { type: LoggerService }, { type: SnackBarService }, { type: i1$2.TranslateService }]; } });
32248
+
32249
+ /* MODELS */
32250
+
31878
32251
  /*
31879
32252
  * Public API Surface of netgrif-components-core
31880
32253
  */
@@ -31883,5 +32256,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
31883
32256
  * Generated bundle index. Do not edit.
31884
32257
  */
31885
32258
 
31886
- 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 };
32259
+ 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 };
31887
32260
  //# sourceMappingURL=netgrif-components-core.mjs.map