@hmcts/ccd-case-ui-toolkit 4.8.3-rc.3 → 4.8.3-rc.7

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 (47) hide show
  1. package/RELEASE-NOTES.md +3 -78
  2. package/dist/index.umd.js +186 -130
  3. package/dist/index.umd.js.map +1 -1
  4. package/dist/index.umd.min.js +1 -1
  5. package/dist/index.umd.min.js.LICENSE.txt +1 -1
  6. package/dist/index.umd.min.js.map +1 -1
  7. package/dist/shared/components/case-editor/case-access-utils/index.d.ts +3 -2
  8. package/dist/shared/components/case-editor/case-access-utils/index.js +31 -0
  9. package/dist/shared/components/case-editor/case-access-utils/index.js.map +1 -1
  10. package/dist/shared/components/case-editor/case-access-utils/index.metadata.json +1 -1
  11. package/dist/shared/components/case-editor/case-edit-page/case-edit-page.component.js +1 -1
  12. package/dist/shared/components/case-editor/case-edit-page/case-edit-page.component.js.map +1 -1
  13. package/dist/shared/components/case-editor/services/case-edit-wizard.guard.js +10 -0
  14. package/dist/shared/components/case-editor/services/case-edit-wizard.guard.js.map +1 -1
  15. package/dist/shared/components/case-editor/services/case-edit-wizard.guard.metadata.json +1 -1
  16. package/dist/shared/components/case-editor/services/cases.service.d.ts +2 -17
  17. package/dist/shared/components/case-editor/services/cases.service.js +18 -109
  18. package/dist/shared/components/case-editor/services/cases.service.js.map +1 -1
  19. package/dist/shared/components/case-editor/services/cases.service.metadata.json +1 -1
  20. package/dist/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +1 -0
  21. package/dist/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +10 -3
  22. package/dist/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js.map +1 -1
  23. package/dist/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.metadata.json +1 -1
  24. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +3 -1
  25. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +21 -1
  26. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js.map +1 -1
  27. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.metadata.json +1 -1
  28. package/dist/shared/components/case-viewer/case-viewer.component.d.ts +1 -0
  29. package/dist/shared/components/case-viewer/case-viewer.component.js +7 -2
  30. package/dist/shared/components/case-viewer/case-viewer.component.js.map +1 -1
  31. package/dist/shared/components/case-viewer/case-viewer.component.metadata.json +1 -1
  32. package/dist/shared/components/palette/case-link/write-case-link-field.component.js +0 -2
  33. package/dist/shared/components/palette/case-link/write-case-link-field.component.js.map +1 -1
  34. package/dist/shared/components/palette/complex/ccd-read-fields-filter.pipe.js +4 -0
  35. package/dist/shared/components/palette/complex/ccd-read-fields-filter.pipe.js.map +1 -1
  36. package/dist/shared/components/palette/document/write-document-field.component.js +0 -3
  37. package/dist/shared/components/palette/document/write-document-field.component.js.map +1 -1
  38. package/dist/shared/domain/case-view/specific-access-request.model.d.ts +0 -2
  39. package/dist/shared/services/document-management/document-management.service.d.ts +0 -1
  40. package/dist/shared/services/document-management/document-management.service.js +0 -8
  41. package/dist/shared/services/document-management/document-management.service.js.map +1 -1
  42. package/dist/shared/services/document-management/document-management.service.metadata.json +1 -1
  43. package/dist/shared/services/fields/fields.utils.d.ts +19 -1
  44. package/dist/shared/services/fields/fields.utils.js +83 -0
  45. package/dist/shared/services/fields/fields.utils.js.map +1 -1
  46. package/dist/shared/services/fields/fields.utils.metadata.json +1 -1
  47. package/package.json +1 -1
package/RELEASE-NOTES.md CHANGED
@@ -3,6 +3,9 @@
3
3
  ### Version 4.3.6-hotfix-EUI-4404
4
4
  **EUI-4404** Fix rendering of read-only Collection field within editable Complex field
5
5
 
6
+ ### Version 4.7.6-hearings-tab
7
+ **EUI-4441** Add hearings tab in case details
8
+
6
9
  ### Version 4.7.0-EUI-4412-order-fields-CYA-page
7
10
  **EUI-4414** Field order on the CYA page changes
8
11
 
@@ -55,15 +58,6 @@
55
58
  **EUI-4344** Document uploaded shows incorrect name
56
59
  **EUI-4377** removing unwanted html tags from title
57
60
 
58
- ### Version 4.2.3
59
- **EUI-3425** Hotfix for work already done. Secure uploading for new cases
60
-
61
- ### Version 4.2.2
62
- **EUI-4161** Turn HRS documentLink URLs into relative URLs, as is done for dm-store URLs
63
-
64
- ### Version 4.2.1
65
- **EUI-3425** Update Document Management Service to call new document upload API in ccd-case-ui-toolkit
66
- **EUI-3426** Repoint node layer at the new document store API
67
61
 
68
62
  ### Version 4.2.3
69
63
  **EUI-3425** Hotfix for work already done. Secure uploading for new cases
@@ -200,75 +194,6 @@ fixed an issue with the rendering of complex collections on the Case Details tab
200
194
  **EUI-3868** "Retain Hidden Value" matrix - support for Scenarios 5 and 8 for "retain = true"
201
195
  **EUI-2744** EventToComplexTypes regression with hidden fields
202
196
  **EUI-4106** Show/hide functionality
203
- ### Version 4.0.0-activity-tracker-unauthorised-beta
204
- **EUI-4226** Fixed an issue with 401/403 errors ignoring that the user is unauthorised.
205
-
206
- ### Version 3.1.5-complex-hidden-collection-show
207
- **EUI-3983** Fixed issue with show fields displaying momentarily before show-condition logic evaluated
208
-
209
- ### Version 3.1.6-case-field-labels-showing-on-summary-screen-when-complex-type-is-hidden
210
- **EUI-2276** Case field showing on summary screen when complex type field is hidden
211
-
212
- ### Version 3.1.5-nested-multi-select-labels-theta
213
- **EUI-3581** Fixed an issue with label placeholders not working for multiselects within complex fields or collections. Also fixed an issue with FixedRadioList fields showing the code, not the label. Finally,
214
- fixed an issue with the rendering of complex collections on the Case Details tabs.
215
-
216
- ### Version 3.1.5-datetime-picker-validation
217
- **EUI-4118** Add and improve validation to datetime picker
218
-
219
- ### Version 3.1.5-datetime-picker-validation
220
- **EUI-4118** Add and improve validation to datetime picker
221
-
222
- ### Version 4.1.0
223
- **EUI-2027** Button Labels (AA)
224
- **EUI-2030** Colour Contrast (AA)
225
- **EUI-3155** Non-Descriptive Headings (AA) - issues 02, 06, 05 (part of it)
226
- **EUI-4118** Mandatory datetime picker fields are not giving required field errors
227
- **EUI-1621** Date/time DISPLAY for Workbasket & Search Input & Results
228
- **EUI-1692** DateTime Entry & Display Formatting for Complex Types
229
- **EUI-2792** Date and Time entry (Testing Story)
230
- **EUI-4155** WA post-MVP Pagination- Angular - My tasks (in Tasks list) - CCD UI Toolkit
231
- **EUI-3049** Wrap and restyle date time picker component
232
- **EUI-3051** Handle #DATETIMEENTRY field context
233
- **EUI-3581** Field interpolation does not work for the field type MultiSelectList
234
- **EUI-4244** SSCS - Midevent callbacks sending empty fields for optional empty document
235
-
236
- ### Version 4.0.0
237
- **EUI-4227** Fixed an error with show/hide not working quite right in some configurations.
238
- **EUI-2022** ExUI - Error Messages (Complex Type)
239
- **EUI-4033** Ensured complex fields were interpolated on Check Your Answers page
240
- **EUI-4077** Ensuring searchForCompletable not called if user is pui-case-manager
241
- **EUI-2027** Accessibility amends for button labels
242
- **EUI-3155** Accessibility amends for non-descriptive headings
243
- **EUI-3550** Replace heading tags with spans on case edit pages
244
- **EUI-2792** Datetime picker fixes after testing integration with webapp
245
- **EUI-3825** Fix for missing FTPA tab contents.
246
- **EUI-2017** ExUI - Navigate in table using keyboard
247
- **EUI-2022** ExUI - Error Messages (A)
248
- **EUI-2023** ExUI - Labels (A)
249
- **EUI-3538** ExUI - FieldShowCondition failing on SearchInputFields and WorkBasketInputFields
250
- **EUI-3466** ExUI - Spinner issue in demo MO unassigned cases page
251
- **EUI-3497** ExUI - Unassigned cases does not show all unassigned cases
252
- **EUI-3049** Create datetime picker for use in write date fields (and edit read date fields for consistency)
253
- **EUI-3732** ExUI - Breathing space data not persisted on Previous button click with ExpUI Demo
254
- **EUI-2569** ExUI - Labels not displaying in Case Heading
255
- **EUI-3870** ExUI - Unresponsive and 'laggy' show-hide conditions
256
- **EUI-3682** Callback Error still not showing proper error message in XUI screen
257
- **EUI-3505** Applied fix to disable and enable collection remove button based on CRUD permissions
258
- **EUI-2039** Changed Date Input fields to conform to accessibility standards
259
- **EUI-2029** WCAG AA Status Message Fixes
260
- **EUI-2739** Fix "retain hidden fields" functionality for Complex collection, nested Complex, and nested Complex collection types
261
- **EUI-3622** Re-evaluate "retain hidden value" matrix linked to acceptance criteria
262
- **EUI-3868** "Retain Hidden Value" matrix - support for Scenarios 5 and 8 for "retain = true"
263
- **EUI-2744** EventToComplexTypes regression with hidden fields
264
- **EUI-4106** Show/hide functionality
265
-
266
- ### Version 3.1.5-nested-multi-select-labels-theta
267
- **EUI-3581** Fixed an issue with label placeholders not working for multiselects within complex fields or collections. Also fixed an issue with FixedRadioList fields showing the code, not the label. Finally,
268
- fixed an issue with the rendering of complex collections on the Case Details tabs.
269
-
270
- ### Version 3.1.5-datetime-picker-validation
271
- **EUI-4118** Add and improve validation to datetime picker
272
197
 
273
198
  ### Version 3.1.5-nested-multi-select-labels-theta
274
199
  **EUI-3581** Fixed an issue with label placeholders not working for multiselects within complex fields or collections. Also fixed an issue with FixedRadioList fields showing the code, not the label. Finally,
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @hmcts/ccd-case-ui-toolkit - Case UI Toolkit
3
- * @version v4.8.3-rc.3
3
+ * @version v4.8.3-rc.7
4
4
  * @link undefined
5
5
  * @license MIT
6
6
  */
@@ -17166,6 +17166,8 @@ var CaseAccessUtils = /** @class */ (function () {
17166
17166
  function CaseAccessUtils() {
17167
17167
  }
17168
17168
  CaseAccessUtils.prototype.getMappedRoleCategory = function (roles, roleCategories) {
17169
+ if (roles === void 0) { roles = []; }
17170
+ if (roleCategories === void 0) { roleCategories = []; }
17169
17171
  var roleKeywords = roles.join().split('-').join().split(',');
17170
17172
  if (this.roleOrCategoryExists(CaseAccessUtils.JUDGE_ROLE, CaseAccessUtils.JUDGE_ROLE_CATEGORY, roleKeywords, roleCategories)) {
17171
17173
  return CaseAccessUtils.JUDGE_ROLE_CATEGORY;
@@ -17209,6 +17211,35 @@ var CaseAccessUtils = /** @class */ (function () {
17209
17211
  }
17210
17212
  return roleName;
17211
17213
  };
17214
+ CaseAccessUtils.prototype.getAMPayload = function (assignerId, actorId, roleName, roleCategory, grantType, caseId, details, beginTime, endTime) {
17215
+ if (beginTime === void 0) { beginTime = null; }
17216
+ if (endTime === void 0) { endTime = null; }
17217
+ var payload = {
17218
+ roleRequest: {
17219
+ assignerId: assignerId
17220
+ },
17221
+ requestedRoles: [{
17222
+ actorIdType: 'IDAM',
17223
+ actorId: actorId,
17224
+ roleType: 'CASE',
17225
+ roleName: roleName,
17226
+ classification: 'PUBLIC',
17227
+ roleCategory: roleCategory,
17228
+ grantType: grantType,
17229
+ beginTime: beginTime,
17230
+ endTime: endTime,
17231
+ attributes: {
17232
+ caseId: caseId
17233
+ },
17234
+ notes: [{
17235
+ userId: assignerId,
17236
+ time: new Date(),
17237
+ comment: JSON.stringify(details)
17238
+ }]
17239
+ }]
17240
+ };
17241
+ return payload;
17242
+ };
17212
17243
  // User role mapping
17213
17244
  CaseAccessUtils.JUDGE_ROLE = 'judge';
17214
17245
  CaseAccessUtils.JUDGE_ROLE_CATEGORY = 'JUDICIAL';
@@ -17721,11 +17752,11 @@ var CaseEditPageComponent = /** @class */ (function () {
17721
17752
  if (this.currentPageIsNotValid()) {
17722
17753
  this.generateErrorMessage(this.currentPage.case_fields);
17723
17754
  }
17724
- this.showSpinner = true;
17725
17755
  if (!this.isSubmitting && !this.currentPageIsNotValid()) {
17726
17756
  this.isSubmitting = true;
17727
17757
  this.error = null;
17728
17758
  var caseEventData = this.buildCaseEventData();
17759
+ this.showSpinner = true;
17729
17760
  this.caseEdit.validate(caseEventData, this.currentPage.id)
17730
17761
  .subscribe(function (jsonData) {
17731
17762
  if (jsonData) {
@@ -19043,6 +19074,7 @@ var router_helper_service_1 = __webpack_require__(61957);
19043
19074
  var wizard_factory_service_1 = __webpack_require__(13125);
19044
19075
  var conditional_show_model_1 = __webpack_require__(5369);
19045
19076
  var event_trigger_service_1 = __webpack_require__(17051);
19077
+ var fields_1 = __webpack_require__(64906);
19046
19078
  var CaseEditWizardGuard = /** @class */ (function () {
19047
19079
  function CaseEditWizardGuard(router, routerHelper, wizardFactory, alertService, eventTriggerService) {
19048
19080
  this.router = router;
@@ -19098,6 +19130,15 @@ var CaseEditWizardGuard = /** @class */ (function () {
19098
19130
  };
19099
19131
  CaseEditWizardGuard.prototype.buildState = function (caseFields) {
19100
19132
  var state = {};
19133
+ /**
19134
+ *
19135
+ * EUI-4873 SSCS - Dynamic lists in a collection within a complex type
19136
+ *
19137
+ * Catering for mid event callbacks, hence the call to re-evaluate
19138
+ * for DynamicList's
19139
+ *
19140
+ */
19141
+ fields_1.FieldsUtils.handleNestedDynamicLists({ case_fields: caseFields });
19101
19142
  caseFields.forEach(function (field) {
19102
19143
  state[field.id] = field.value;
19103
19144
  });
@@ -19159,17 +19200,6 @@ exports.CaseNotifier = CaseNotifier;
19159
19200
 
19160
19201
  "use strict";
19161
19202
 
19162
- var __assign = (this && this.__assign) || function () {
19163
- __assign = Object.assign || function(t) {
19164
- for (var s, i = 1, n = arguments.length; i < n; i++) {
19165
- s = arguments[i];
19166
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
19167
- t[p] = s[p];
19168
- }
19169
- return t;
19170
- };
19171
- return __assign.apply(this, arguments);
19172
- };
19173
19203
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19174
19204
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19175
19205
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -19240,73 +19270,6 @@ var CasesService = /** @class */ (function () {
19240
19270
  return rxjs_1.throwError(error);
19241
19271
  }), operators_1.finalize(function () { return _this.loadingService.unregister(loadingToken); }));
19242
19272
  };
19243
- /**
19244
- * handleNestedDynamicLists()
19245
- * Reassigns list_item and value data to DynamicList children
19246
- * down the tree. Server response returns data only in
19247
- * the `value` object of parent complex type
19248
- *
19249
- * EUI-2530 Dynamic Lists for Elements in a Complex Type
19250
- *
19251
- * @param jsonBody - { case_fields: [ CaseField, CaseField ] }
19252
- */
19253
- CasesService.prototype.handleNestedDynamicLists = function (jsonBody) {
19254
- var _this = this;
19255
- if (jsonBody.case_fields) {
19256
- jsonBody.case_fields.forEach(function (caseField) {
19257
- if (caseField.field_type) {
19258
- _this.setDynamicListDefinition(caseField, caseField.field_type, caseField);
19259
- }
19260
- });
19261
- }
19262
- return jsonBody;
19263
- };
19264
- CasesService.prototype.setDynamicListDefinition = function (caseField, caseFieldType, rootCaseField) {
19265
- var _this = this;
19266
- if (caseFieldType.type === CasesService_1.SERVER_RESPONSE_FIELD_TYPE_COMPLEX) {
19267
- caseFieldType.complex_fields.forEach(function (field) {
19268
- try {
19269
- var isDynamicField = CasesService_1.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE.indexOf(field.field_type.type) !== -1;
19270
- if (isDynamicField) {
19271
- var dynamicListValue = _this.getDynamicListValue(rootCaseField.value, field.id);
19272
- if (dynamicListValue) {
19273
- var list_items = dynamicListValue.list_items;
19274
- var value = dynamicListValue.value;
19275
- field.value = {
19276
- list_items: list_items,
19277
- value: value ? value : undefined
19278
- };
19279
- field.formatted_value = __assign({}, field.formatted_value, field.value);
19280
- }
19281
- }
19282
- else {
19283
- _this.setDynamicListDefinition(field, field.field_type, rootCaseField);
19284
- }
19285
- }
19286
- catch (error) {
19287
- console.log(error);
19288
- }
19289
- });
19290
- }
19291
- else if (caseFieldType.type === CasesService_1.SERVER_RESPONSE_FIELD_TYPE_COLLECTION) {
19292
- if (caseFieldType.collection_field_type) {
19293
- this.setDynamicListDefinition(caseField, caseFieldType.collection_field_type, rootCaseField);
19294
- }
19295
- }
19296
- };
19297
- CasesService.prototype.getDynamicListValue = function (jsonBlock, key) {
19298
- if (jsonBlock[key]) {
19299
- return jsonBlock[key];
19300
- }
19301
- else {
19302
- for (var elementKey in jsonBlock) {
19303
- if (typeof jsonBlock === 'object' && jsonBlock.hasOwnProperty(elementKey)) {
19304
- return this.getDynamicListValue(jsonBlock[elementKey], key);
19305
- }
19306
- }
19307
- }
19308
- return null;
19309
- };
19310
19273
  CasesService.prototype.getEventTrigger = function (caseTypeId, eventTriggerId, caseId, ignoreWarning) {
19311
19274
  var _this = this;
19312
19275
  ignoreWarning = undefined !== ignoreWarning ? ignoreWarning : 'false';
@@ -19326,7 +19289,7 @@ var CasesService = /** @class */ (function () {
19326
19289
  return this.http
19327
19290
  .get(url, { headers: headers, observe: 'body' })
19328
19291
  .pipe(operators_1.map(function (body) {
19329
- return _this.handleNestedDynamicLists(body);
19292
+ return services_1.FieldsUtils.handleNestedDynamicLists(body);
19330
19293
  }), operators_1.catchError(function (error) {
19331
19294
  _this.errorService.setError(error);
19332
19295
  return rxjs_1.throwError(error);
@@ -19468,32 +19431,23 @@ var CasesService = /** @class */ (function () {
19468
19431
  }
19469
19432
  var roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
19470
19433
  var roleName = camUtils.getAMRoleName('challenged', roleCategory);
19471
- var payload = {
19472
- roleRequest: {
19473
- assignerId: userInfo.id
19474
- },
19475
- requestedRoles: [{
19476
- actorIdType: 'IDAM',
19477
- actorId: userInfo.id,
19478
- roleType: 'CASE',
19479
- roleName: roleName,
19480
- classification: 'PUBLIC',
19481
- roleCategory: roleCategory,
19482
- grantType: 'CHALLENGED',
19483
- beginTime: new Date(),
19484
- endTime: new Date(new Date().setUTCHours(23, 59, 59, 999)),
19485
- attributes: {
19486
- caseId: caseId
19487
- },
19488
- notes: [{
19489
- userId: userInfo.id,
19490
- time: new Date(),
19491
- comment: JSON.stringify(car)
19492
- }
19493
- ]
19494
- }]
19495
- };
19496
- return this.http.post("" + this.appConfig.getCamRoleAssignmentsApiUrl(), payload);
19434
+ var beginTime = new Date();
19435
+ var endTime = new Date(new Date().setUTCHours(23, 59, 59, 999));
19436
+ var payload = camUtils.getAMPayload(userInfo.id, userInfo.id, roleName, roleCategory, 'CHALLENGED', caseId, car, beginTime, endTime);
19437
+ return this.http.post(this.appConfig.getCamRoleAssignmentsApiUrl() + "/challenged", payload);
19438
+ };
19439
+ CasesService.prototype.createSpecificAccessRequest = function (caseId, sar) {
19440
+ // Assignment API endpoint
19441
+ var userInfoStr = this.sessionStorageService.getItem('userDetails');
19442
+ var camUtils = new case_access_utils_1.CaseAccessUtils();
19443
+ var userInfo;
19444
+ if (userInfoStr) {
19445
+ userInfo = JSON.parse(userInfoStr);
19446
+ }
19447
+ var roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
19448
+ var roleName = camUtils.getAMRoleName('specific', roleCategory);
19449
+ var payload = camUtils.getAMPayload(null, userInfo.id, roleName, roleCategory, 'SPECIFIC', caseId, sar);
19450
+ return this.http.post(this.appConfig.getCamRoleAssignmentsApiUrl() + "/specific", payload);
19497
19451
  };
19498
19452
  var CasesService_1;
19499
19453
  // Internal (UI) API
@@ -19506,10 +19460,6 @@ var CasesService = /** @class */ (function () {
19506
19460
  CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.case-data-validate.v2+json;charset=UTF-8';
19507
19461
  CasesService.V2_MEDIATYPE_CREATE_EVENT = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-event.v2+json;charset=UTF-8';
19508
19462
  CasesService.V2_MEDIATYPE_CREATE_CASE = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-case.v2+json;charset=UTF-8';
19509
- // Handling of Dynamic Lists in Complex Types
19510
- CasesService.SERVER_RESPONSE_FIELD_TYPE_COLLECTION = 'Collection';
19511
- CasesService.SERVER_RESPONSE_FIELD_TYPE_COMPLEX = 'Complex';
19512
- CasesService.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE = ['DynamicList', 'DynamicRadioList'];
19513
19463
  CasesService.PUI_CASE_MANAGER = 'pui-case-manager';
19514
19464
  CasesService = CasesService_1 = __decorate([
19515
19465
  core_1.Injectable(),
@@ -21395,6 +21345,7 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
21395
21345
  this.hasPrint = true;
21396
21346
  this.hasEventSelector = true;
21397
21347
  this.prependedTabs = [];
21348
+ this.appendedTabs = [];
21398
21349
  this.BANNER = domain_1.DisplayMode.BANNER;
21399
21350
  this.triggerTextStart = CaseFullAccessViewComponent_1.TRIGGER_TEXT_START;
21400
21351
  this.triggerTextIgnoreWarnings = CaseFullAccessViewComponent_1.TRIGGER_TEXT_CONTINUE;
@@ -21484,7 +21435,7 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
21484
21435
  }
21485
21436
  };
21486
21437
  CaseFullAccessViewComponent.prototype.hasTabsPresent = function () {
21487
- return this.sortedTabs.length > 0 || this.prependedTabs.length > 0;
21438
+ return this.sortedTabs.length > 0 || this.prependedTabs.length > 0 || this.appendedTabs.length > 0;
21488
21439
  };
21489
21440
  CaseFullAccessViewComponent.prototype.callbackErrorsNotify = function (callbackErrorsContext) {
21490
21441
  this.ignoreWarning = callbackErrorsContext.ignore_warning;
@@ -21533,7 +21484,9 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
21533
21484
  CaseFullAccessViewComponent.prototype.tabChanged = function (tabChangeEvent) {
21534
21485
  var tab = tabChangeEvent.tab['_viewContainerRef'];
21535
21486
  var id = tab.element.nativeElement.id;
21536
- if (tabChangeEvent.index <= 1 && this.prependedTabs.length) {
21487
+ var tabsLengthBeforeAppended = this.prependedTabs.length + this.caseDetails.tabs.length;
21488
+ if ((tabChangeEvent.index <= 1 && this.prependedTabs.length) ||
21489
+ (tabChangeEvent.index >= tabsLengthBeforeAppended && this.appendedTabs.length)) {
21537
21490
  this.router.navigate([id], { relativeTo: this.route });
21538
21491
  }
21539
21492
  else {
@@ -21616,6 +21569,10 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
21616
21569
  core_1.Input(),
21617
21570
  __metadata("design:type", Array)
21618
21571
  ], CaseFullAccessViewComponent.prototype, "prependedTabs", void 0);
21572
+ __decorate([
21573
+ core_1.Input(),
21574
+ __metadata("design:type", Array)
21575
+ ], CaseFullAccessViewComponent.prototype, "appendedTabs", void 0);
21619
21576
  __decorate([
21620
21577
  core_1.ViewChild('tabGroup'),
21621
21578
  __metadata("design:type", material_1.MatTabGroup)
@@ -21898,11 +21855,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
21898
21855
  var core_1 = __webpack_require__(57208);
21899
21856
  var forms_1 = __webpack_require__(92985);
21900
21857
  var router_1 = __webpack_require__(92302);
21858
+ var case_editor_1 = __webpack_require__(27070);
21901
21859
  var models_1 = __webpack_require__(3234);
21902
21860
  var CaseSpecificAccessRequestComponent = /** @class */ (function () {
21903
- function CaseSpecificAccessRequestComponent(fb, router, route) {
21861
+ function CaseSpecificAccessRequestComponent(fb, router, casesService, route) {
21904
21862
  this.fb = fb;
21905
21863
  this.router = router;
21864
+ this.casesService = casesService;
21906
21865
  this.route = route;
21907
21866
  this.collapsed = false;
21908
21867
  this.submitted = false;
@@ -21940,6 +21899,7 @@ var CaseSpecificAccessRequestComponent = /** @class */ (function () {
21940
21899
  this.formGroup.get(this.specificReasonControlName).setValue('');
21941
21900
  };
21942
21901
  CaseSpecificAccessRequestComponent.prototype.onSubmit = function () {
21902
+ var _this = this;
21943
21903
  this.submitted = true;
21944
21904
  if (this.formGroup.get(this.specificReasonControlName).invalid) {
21945
21905
  this.errorMessage = {
@@ -21948,6 +21908,22 @@ var CaseSpecificAccessRequestComponent = /** @class */ (function () {
21948
21908
  fieldId: 'specific-reason',
21949
21909
  };
21950
21910
  }
21911
+ // Initiate Specific Access Request
21912
+ if (this.formGroup.valid) {
21913
+ // Get the Case Reference (for which access is being requested) from the ActivatedRouteSnapshot data
21914
+ var caseId = this.route.snapshot.data.case.case_id;
21915
+ var specificAccessRequest = {
21916
+ specificReason: this.formGroup.get(this.specificReasonControlName).value
21917
+ };
21918
+ this.$roleAssignmentResponseSubscription = this.casesService.createSpecificAccessRequest(caseId, specificAccessRequest)
21919
+ .subscribe(function (_response) {
21920
+ // Would have been nice to pass the caseId within state.data, but this isn't part of NavigationExtras until
21921
+ // Angular 7.2!
21922
+ _this.router.navigate(['success'], { relativeTo: _this.route });
21923
+ }, function (_error) {
21924
+ // Navigate to error page
21925
+ });
21926
+ }
21951
21927
  };
21952
21928
  CaseSpecificAccessRequestComponent.prototype.onCancel = function () {
21953
21929
  // Navigate to the page before previous one (should be Search Results or Case List page, for example)
@@ -21965,6 +21941,7 @@ var CaseSpecificAccessRequestComponent = /** @class */ (function () {
21965
21941
  }),
21966
21942
  __metadata("design:paramtypes", [forms_1.FormBuilder,
21967
21943
  router_1.Router,
21944
+ case_editor_1.CasesService,
21968
21945
  router_1.ActivatedRoute])
21969
21946
  ], CaseSpecificAccessRequestComponent);
21970
21947
  return CaseSpecificAccessRequestComponent;
@@ -22175,6 +22152,7 @@ var CaseViewerComponent = /** @class */ (function () {
22175
22152
  this.hasPrint = true;
22176
22153
  this.hasEventSelector = true;
22177
22154
  this.prependedTabs = [];
22155
+ this.appendedTabs = [];
22178
22156
  }
22179
22157
  CaseViewerComponent_1 = CaseViewerComponent;
22180
22158
  CaseViewerComponent.prototype.ngOnInit = function () {
@@ -22218,7 +22196,7 @@ var CaseViewerComponent = /** @class */ (function () {
22218
22196
  // remove once Access management goes live
22219
22197
  CaseViewerComponent.prototype.setMockData = function (caseDetails) {
22220
22198
  var accessManagementBasicViewMock = this.appConfig.getAccessManagementBasicViewMock();
22221
- if (accessManagementBasicViewMock.active && !caseDetails.basicFields) {
22199
+ if (accessManagementBasicViewMock && accessManagementBasicViewMock.active && !caseDetails.basicFields) {
22222
22200
  var access_process_index = caseDetails.metadataFields.findIndex(function (metadataField) {
22223
22201
  return metadataField.id === CaseViewerComponent_1.METADATA_FIELD_ACCESS_PROCEES_ID;
22224
22202
  });
@@ -22253,6 +22231,10 @@ var CaseViewerComponent = /** @class */ (function () {
22253
22231
  core_1.Input(),
22254
22232
  __metadata("design:type", Array)
22255
22233
  ], CaseViewerComponent.prototype, "prependedTabs", void 0);
22234
+ __decorate([
22235
+ core_1.Input(),
22236
+ __metadata("design:type", Array)
22237
+ ], CaseViewerComponent.prototype, "appendedTabs", void 0);
22256
22238
  __decorate([
22257
22239
  core_1.Input(),
22258
22240
  __metadata("design:type", domain_1.CaseView)
@@ -25250,13 +25232,11 @@ var WriteCaseLinkFieldComponent = /** @class */ (function (_super) {
25250
25232
  WriteCaseLinkFieldComponent.prototype.ngOnInit = function () {
25251
25233
  if (this.caseField.value) {
25252
25234
  this.caseLinkGroup = this.registerControl(new forms_1.FormGroup({
25253
- 'Id': new forms_1.FormControl('LinkedCase'),
25254
25235
  'CaseReference': new forms_1.FormControl(this.caseField.value.CaseReference),
25255
25236
  }), true);
25256
25237
  }
25257
25238
  else {
25258
25239
  this.caseLinkGroup = this.registerControl(new forms_1.FormGroup({
25259
- 'Id': new forms_1.FormControl('LinkedCase'),
25260
25240
  'CaseReference': new forms_1.FormControl(),
25261
25241
  }), true);
25262
25242
  }
@@ -25860,6 +25840,10 @@ var ReadFieldsFilterPipe = /** @class */ (function () {
25860
25840
  return !!hasChildrenWithValue;
25861
25841
  };
25862
25842
  ReadFieldsFilterPipe.isValidCollection = function (field, values) {
25843
+ // if field is collection and it has complex/collection child field; parent field doesnt have value defined
25844
+ if (!Array.isArray(field.value) && values && values.hasOwnProperty(field.id)) {
25845
+ return true;
25846
+ }
25863
25847
  var isNotEmpty = Array.isArray(field.value) && field.value.length > 0;
25864
25848
  if (isNotEmpty && field.field_type.collection_field_type.type === 'Complex') {
25865
25849
  return !!field.value.find(function (item) {
@@ -27761,9 +27745,6 @@ var WriteDocumentFieldComponent = /** @class */ (function (_super) {
27761
27745
  this.displayFileUploadMessages(WriteDocumentFieldComponent_1.UPLOAD_WAITING_FILE_STATUS);
27762
27746
  var documentUpload = this.buildDocumentUploadData(this.selectedFile);
27763
27747
  this.fileUploadStateService.setUploadInProgress(true);
27764
- var uploadFile = this.secureModeOn ?
27765
- this.documentManagement.secureUploadFile(documentUpload) :
27766
- this.documentManagement.uploadFile(documentUpload);
27767
27748
  this.fileUploadSubscription = this.documentManagement.uploadFile(documentUpload).subscribe({
27768
27749
  next: function (resultDocument) { return _this.handleDocumentUploadResult(resultDocument); },
27769
27750
  error: function (error) { return _this.handleDocumentUploadError(error); }
@@ -38472,14 +38453,6 @@ var DocumentManagementService = /** @class */ (function () {
38472
38453
  .pipe(operators_1.delay(DocumentManagementService_1.RESPONSE_DELAY))
38473
38454
  .pipe();
38474
38455
  };
38475
- DocumentManagementService.prototype.secureUploadFile = function (formData) {
38476
- var url = this.appConfig.getDocumentManagementUrlV2();
38477
- var headers = new http_2.HttpHeaders();
38478
- return this.http
38479
- .post(url, formData, { headers: headers, observe: 'body' })
38480
- .pipe(operators_1.delay(DocumentManagementService_1.RESPONSE_DELAY))
38481
- .pipe();
38482
- };
38483
38456
  DocumentManagementService.prototype.getMediaViewerInfo = function (documentFieldValue) {
38484
38457
  var mediaViewerInfo = {
38485
38458
  document_binary_url: this.transformDocumentUrl(documentFieldValue.document_binary_url),
@@ -39120,6 +39093,17 @@ exports.FieldsPurger = FieldsPurger;
39120
39093
 
39121
39094
  "use strict";
39122
39095
 
39096
+ var __assign = (this && this.__assign) || function () {
39097
+ __assign = Object.assign || function(t) {
39098
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
39099
+ s = arguments[i];
39100
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
39101
+ t[p] = s[p];
39102
+ }
39103
+ return t;
39104
+ };
39105
+ return __assign.apply(this, arguments);
39106
+ };
39123
39107
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
39124
39108
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
39125
39109
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -39263,6 +39247,74 @@ var FieldsUtils = /** @class */ (function () {
39263
39247
  : typeof x === 'number' || x.length > 0)); });
39264
39248
  return !hasNonNullPrimitive ? objectRefs.some(function (y) { return _this.containsNonEmptyValues(y); }) : hasNonNullPrimitive;
39265
39249
  };
39250
+ /**
39251
+ * handleNestedDynamicLists()
39252
+ * Reassigns list_item and value data to DynamicList children
39253
+ * down the tree. Server response returns data only in
39254
+ * the `value` object of parent complex type
39255
+ *
39256
+ * EUI-2530 Dynamic Lists for Elements in a Complex Type
39257
+ *
39258
+ * @param jsonBody - { case_fields: [ CaseField, CaseField ] }
39259
+ */
39260
+ FieldsUtils.handleNestedDynamicLists = function (jsonBody) {
39261
+ var _this = this;
39262
+ if (jsonBody.case_fields) {
39263
+ jsonBody.case_fields.forEach(function (caseField) {
39264
+ if (caseField.field_type) {
39265
+ _this.setDynamicListDefinition(caseField, caseField.field_type, caseField);
39266
+ }
39267
+ });
39268
+ }
39269
+ return jsonBody;
39270
+ };
39271
+ FieldsUtils.setDynamicListDefinition = function (caseField, caseFieldType, rootCaseField) {
39272
+ var _this = this;
39273
+ if (caseFieldType.type === FieldsUtils_1.SERVER_RESPONSE_FIELD_TYPE_COMPLEX) {
39274
+ caseFieldType.complex_fields.forEach(function (field) {
39275
+ try {
39276
+ var isDynamicField = FieldsUtils_1.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE.indexOf(field.field_type.type) !== -1;
39277
+ if (isDynamicField) {
39278
+ var dynamicListValue = _this.getDynamicListValue(rootCaseField.value, field.id);
39279
+ if (dynamicListValue) {
39280
+ var list_items = dynamicListValue.list_items;
39281
+ var complexValue = dynamicListValue.value;
39282
+ var value = {
39283
+ list_items: list_items,
39284
+ value: complexValue ? complexValue : undefined
39285
+ };
39286
+ field.value = __assign({}, value);
39287
+ field.formatted_value = __assign({}, field.formatted_value, value);
39288
+ }
39289
+ }
39290
+ else {
39291
+ _this.setDynamicListDefinition(field, field.field_type, rootCaseField);
39292
+ }
39293
+ }
39294
+ catch (error) {
39295
+ console.log(error);
39296
+ }
39297
+ });
39298
+ }
39299
+ else if (caseFieldType.type === FieldsUtils_1.SERVER_RESPONSE_FIELD_TYPE_COLLECTION) {
39300
+ if (caseFieldType.collection_field_type) {
39301
+ this.setDynamicListDefinition(caseField, caseFieldType.collection_field_type, rootCaseField);
39302
+ }
39303
+ }
39304
+ };
39305
+ FieldsUtils.getDynamicListValue = function (jsonBlock, key) {
39306
+ if (jsonBlock[key]) {
39307
+ return jsonBlock[key];
39308
+ }
39309
+ else {
39310
+ for (var elementKey in jsonBlock) {
39311
+ if (typeof jsonBlock === 'object' && jsonBlock.hasOwnProperty(elementKey)) {
39312
+ return this.getDynamicListValue(jsonBlock[elementKey], key);
39313
+ }
39314
+ }
39315
+ }
39316
+ return null;
39317
+ };
39266
39318
  FieldsUtils.prototype.buildCanShowPredicate = function (eventTrigger, form) {
39267
39319
  var currentState = this.getCurrentEventState(eventTrigger, form);
39268
39320
  return function (page) {
@@ -39308,6 +39360,10 @@ var FieldsUtils = /** @class */ (function () {
39308
39360
  FieldsUtils.datePipe = new utils_1.DatePipe(new format_translator_service_1.FormatTranslatorService());
39309
39361
  // EUI-4244. 3 dashes instead of 1 to make this less likely to clash with a real field.
39310
39362
  FieldsUtils.LABEL_SUFFIX = '---LABEL';
39363
+ // Handling of Dynamic Lists in Complex Types
39364
+ FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COLLECTION = 'Collection';
39365
+ FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COMPLEX = 'Complex';
39366
+ FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE = ['DynamicList', 'DynamicRadioList'];
39311
39367
  FieldsUtils.DEFAULT_MERGE_FUNCTION = function mergeFunction(field, result) {
39312
39368
  if (!result.hasOwnProperty(field.id)) {
39313
39369
  result[field.id] = field.value;
@@ -69173,7 +69229,7 @@ module.exports = "<div *ngIf=\"isDataLoaded()\" class=\"screen-990\">\n <ccd-ac
69173
69229
  /***/ 99839:
69174
69230
  /***/ ((module) => {
69175
69231
 
69176
- module.exports = "<!-- Generic error heading and error message to be displayed only if there are no specific callback errors or warnings, or no error details -->\n<div *ngIf=\"error && !(error.callbackErrors || error.callbackWarnings || error.details)\" class=\"error-summary\"\n role=\"group\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h1 class=\"heading-h1 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n Something went wrong\n </h1>\n <div class=\"govuk-error-summary__body\" id=\"edit-case-event_error-summary-body\">\n <p>We're working to fix the problem. Try again shortly.</p>\n <p><a href=\"get-help\" target=\"_blank\">Contact us</a> if you're still having problems.</p>\n </div>\n</div>\n<!-- Callback error heading and error message to be displayed if there are specific error details -->\n<div *ngIf=\"error && error.details\" class=\"error-summary\" role=\"group\"\n aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-h2 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n The callback data failed validation\n </h2>\n <p>{{error.message}}</p>\n <ul *ngIf=\"error.details?.field_errors\" class=\"error-summary-list\">\n <li *ngFor=\"let fieldError of error.details.field_errors\">\n {{fieldError.message}}\n </li>\n </ul>\n</div>\n<ccd-callback-errors\n [triggerTextContinue]=\"triggerTextStart\"\n [triggerTextIgnore]=\"triggerTextIgnoreWarnings\"\n [callbackErrorsSubject]=\"callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\">\n</ccd-callback-errors>\n<ccd-activity [caseId]=\"caseDetails.case_id\" [displayMode]=\"BANNER\"></ccd-activity>\n<div class=\"grid-row\">\n <div class=\"column-one-half\">\n <ccd-case-header [caseDetails]=\"caseDetails\"></ccd-case-header>\n <div class=\"case-viewer-controls\" *ngIf=\"hasPrint && !isDraft() && isPrintEnabled()\">\n <a id=\"case-viewer-control-print\" routerLink=\"print\" class=\"button button-secondary\">Print</a>\n </div>\n </div>\n <div *ngIf=\"hasEventSelector\" class=\"column-one-half\">\n <ccd-event-trigger [isDisabled]=\"isTriggerButtonDisabled()\" [triggers]=\"caseDetails.triggers\"\n [triggerText]=\"triggerText\" (onTriggerChange)=\"clearErrorsAndWarnings()\"\n (onTriggerSubmit)=\"applyTrigger($event)\"></ccd-event-trigger>\n </div>\n</div>\n<div class=\"grid-row\">\n <div class=\"column-full\">\n <ng-container *ngIf=\"hasTabsPresent()\">\n <mat-tab-group #tabGroup animationDuration=\"0ms\" (selectedTabChange)=\"tabChanged($event)\" [disableRipple]=\"true\">\n <mat-tab *ngFor=\"let tab of prependedTabs\" [id]=\"tab.id\" [label]=\"tab.label\">\n </mat-tab>\n <mat-tab *ngFor=\"let tab of sortedTabs; let curIdx=index\" [id]=\"tab.id\" [label]=\"tab.label\">\n <ng-template matTabContent>\n <table [class]=\"tab.id\">\n <tbody>\n <ng-container *ngFor=\"let field of tab | ccdTabFields | ccdReadFieldsFilter:false :undefined :true : formGroup.controls['data']\">\n <div ccdLabelSubstitutor [caseField]=\"field\" [contextFields]=\"caseFields\" [hidden]=\"field.hidden\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\">\n <th>\n <div class=\"case-viewer-label text-16\">{{field.label}}</div>\n </th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"formGroup.controls['data']\"\n [caseField]=\"field\" [caseReference]=\"caseDetails.case_id\">\n </ccd-field-read>\n </span>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\">\n <th>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"formGroup.controls['data']\"\n [caseField]=\"field\" [caseReference]=\"caseDetails.case_id\">\n </ccd-field-read>\n </span>\n </th>\n </tr>\n </ng-container>\n </div>\n </ng-container>\n </tbody>\n </table>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n <router-outlet *ngIf=\"prependedTabs && prependedTabs.length\"></router-outlet>\n </ng-container>\n </div>\n</div>"
69232
+ module.exports = "<!-- Generic error heading and error message to be displayed only if there are no specific callback errors or warnings, or no error details -->\n<div *ngIf=\"error && !(error.callbackErrors || error.callbackWarnings || error.details)\" class=\"error-summary\"\n role=\"group\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h1 class=\"heading-h1 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n Something went wrong\n </h1>\n <div class=\"govuk-error-summary__body\" id=\"edit-case-event_error-summary-body\">\n <p>We're working to fix the problem. Try again shortly.</p>\n <p><a href=\"get-help\" target=\"_blank\">Contact us</a> if you're still having problems.</p>\n </div>\n</div>\n<!-- Callback error heading and error message to be displayed if there are specific error details -->\n<div *ngIf=\"error && error.details\" class=\"error-summary\" role=\"group\"\n aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-h2 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n The callback data failed validation\n </h2>\n <p>{{error.message}}</p>\n <ul *ngIf=\"error.details?.field_errors\" class=\"error-summary-list\">\n <li *ngFor=\"let fieldError of error.details.field_errors\">\n {{fieldError.message}}\n </li>\n </ul>\n</div>\n<ccd-callback-errors\n [triggerTextContinue]=\"triggerTextStart\"\n [triggerTextIgnore]=\"triggerTextIgnoreWarnings\"\n [callbackErrorsSubject]=\"callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\">\n</ccd-callback-errors>\n<ccd-activity [caseId]=\"caseDetails.case_id\" [displayMode]=\"BANNER\"></ccd-activity>\n<div class=\"grid-row\">\n <div class=\"column-one-half\">\n <ccd-case-header [caseDetails]=\"caseDetails\"></ccd-case-header>\n <div class=\"case-viewer-controls\" *ngIf=\"hasPrint && !isDraft() && isPrintEnabled()\">\n <a id=\"case-viewer-control-print\" routerLink=\"print\" class=\"button button-secondary\">Print</a>\n </div>\n </div>\n <div *ngIf=\"hasEventSelector\" class=\"column-one-half\">\n <ccd-event-trigger [isDisabled]=\"isTriggerButtonDisabled()\" [triggers]=\"caseDetails.triggers\"\n [triggerText]=\"triggerText\" (onTriggerChange)=\"clearErrorsAndWarnings()\"\n (onTriggerSubmit)=\"applyTrigger($event)\"></ccd-event-trigger>\n </div>\n</div>\n<div class=\"grid-row\">\n <div class=\"column-full\">\n <ng-container *ngIf=\"hasTabsPresent()\">\n <mat-tab-group #tabGroup animationDuration=\"0ms\" (selectedTabChange)=\"tabChanged($event)\" [disableRipple]=\"true\">\n <mat-tab *ngFor=\"let tab of prependedTabs\" [id]=\"tab.id\" [label]=\"tab.label\">\n </mat-tab>\n <mat-tab *ngFor=\"let tab of sortedTabs; let curIdx=index\" [id]=\"tab.id\" [label]=\"tab.label\">\n <ng-template matTabContent>\n <table [class]=\"tab.id\">\n <tbody>\n <ng-container *ngFor=\"let field of tab | ccdTabFields | ccdReadFieldsFilter:false :undefined :true : formGroup.controls['data']\">\n <div ccdLabelSubstitutor [caseField]=\"field\" [contextFields]=\"caseFields\" [hidden]=\"field.hidden\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\">\n <th>\n <div class=\"case-viewer-label text-16\">{{field.label}}</div>\n </th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"formGroup.controls['data']\"\n [caseField]=\"field\" [caseReference]=\"caseDetails.case_id\">\n </ccd-field-read>\n </span>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\">\n <th>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"formGroup.controls['data']\"\n [caseField]=\"field\" [caseReference]=\"caseDetails.case_id\">\n </ccd-field-read>\n </span>\n </th>\n </tr>\n </ng-container>\n </div>\n </ng-container>\n </tbody>\n </table>\n </ng-template>\n </mat-tab>\n <mat-tab *ngFor=\"let tab of appendedTabs\" [id]=\"tab.id\" [label]=\"tab.label\">\n </mat-tab>\n </mat-tab-group>\n <router-outlet *ngIf=\"(prependedTabs && prependedTabs.length) || (appendedTabs && appendedTabs.length)\"></router-outlet>\n </ng-container>\n </div>\n</div>\n"
69177
69233
 
69178
69234
  /***/ }),
69179
69235
 
@@ -69208,7 +69264,7 @@ module.exports = "<div *ngIf=\"isDataLoaded()\">\n <ccd-case-viewer [hasPrint
69208
69264
  /***/ 67025:
69209
69265
  /***/ ((module) => {
69210
69266
 
69211
- module.exports = "<div *ngIf=\"isDataLoaded()\">\n <ccd-case-basic-access-view *ngIf=\"!hasStandardAccess()\" [accessType]=\"userAccessType\" [caseDetails]=\"caseDetails\"></ccd-case-basic-access-view>\n <ccd-case-full-access-view *ngIf=\"hasStandardAccess()\" [caseDetails]=\"caseDetails\" [hasPrint]=\"hasPrint\" [hasEventSelector]=\"hasEventSelector\" [prependedTabs]=\"prependedTabs\"></ccd-case-full-access-view>\n</div>\n"
69267
+ module.exports = "<div *ngIf=\"isDataLoaded()\">\n <ccd-case-basic-access-view *ngIf=\"!hasStandardAccess()\" [accessType]=\"userAccessType\" [caseDetails]=\"caseDetails\"></ccd-case-basic-access-view>\n <ccd-case-full-access-view *ngIf=\"hasStandardAccess()\" [caseDetails]=\"caseDetails\" [hasPrint]=\"hasPrint\" [hasEventSelector]=\"hasEventSelector\" [prependedTabs]=\"prependedTabs\" [appendedTabs]=\"appendedTabs\"></ccd-case-full-access-view>\n</div>\n"
69212
69268
 
69213
69269
  /***/ }),
69214
69270