@hmcts/ccd-case-ui-toolkit 4.7.0-rc.7 → 4.7.1-EUI-4703-hearing-date

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 (97) hide show
  1. package/.github/workflows/npmpublish.yml +40 -2
  2. package/RELEASE-NOTES.md +8 -0
  3. package/dist/app.config.d.ts +2 -0
  4. package/dist/app.config.js +3 -0
  5. package/dist/app.config.js.map +1 -1
  6. package/dist/app.config.metadata.json +1 -1
  7. package/dist/cut-styles/shared/components/loading-spinner/loading-spinner.component.scss +36 -0
  8. package/dist/index.umd.js +442 -66
  9. package/dist/index.umd.js.map +1 -1
  10. package/dist/index.umd.min.js +1 -1
  11. package/dist/index.umd.min.js.LICENSE.txt +1 -1
  12. package/dist/index.umd.min.js.map +1 -1
  13. package/dist/shared/components/case-editor/case-access-utils/index.d.ts +21 -0
  14. package/dist/shared/components/case-editor/case-access-utils/index.js +69 -0
  15. package/dist/shared/components/case-editor/case-access-utils/index.js.map +1 -0
  16. package/dist/shared/components/case-editor/case-access-utils/index.metadata.json +1 -0
  17. package/dist/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +2 -1
  18. package/dist/shared/components/case-editor/case-edit-page/case-edit-page.component.js +19 -6
  19. package/dist/shared/components/case-editor/case-edit-page/case-edit-page.component.js.map +1 -1
  20. package/dist/shared/components/case-editor/case-edit-page/case-edit-page.component.metadata.json +1 -1
  21. package/dist/shared/components/case-editor/case-editor.module.js +4 -1
  22. package/dist/shared/components/case-editor/case-editor.module.js.map +1 -1
  23. package/dist/shared/components/case-editor/case-editor.module.metadata.json +1 -1
  24. package/dist/shared/components/case-editor/domain/wizard.model.d.ts +1 -1
  25. package/dist/shared/components/case-editor/domain/wizard.model.js +2 -2
  26. package/dist/shared/components/case-editor/domain/wizard.model.js.map +1 -1
  27. package/dist/shared/components/case-editor/index.d.ts +1 -0
  28. package/dist/shared/components/case-editor/index.js +1 -0
  29. package/dist/shared/components/case-editor/index.js.map +1 -1
  30. package/dist/shared/components/case-editor/index.metadata.json +1 -1
  31. package/dist/shared/components/case-editor/services/cases.service.js +24 -38
  32. package/dist/shared/components/case-editor/services/cases.service.js.map +1 -1
  33. package/dist/shared/components/case-editor/services/cases.service.metadata.json +1 -1
  34. package/dist/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts +1 -0
  35. package/dist/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js +4 -1
  36. package/dist/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js.map +1 -1
  37. package/dist/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.metadata.json +1 -1
  38. package/dist/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +5 -9
  39. package/dist/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js.map +1 -1
  40. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +27 -0
  41. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +87 -0
  42. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js.map +1 -0
  43. package/dist/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.metadata.json +1 -0
  44. package/dist/shared/components/case-viewer/case-specific-access-request/index.d.ts +1 -0
  45. package/dist/shared/components/case-viewer/case-specific-access-request/index.js +7 -0
  46. package/dist/shared/components/case-viewer/case-specific-access-request/index.js.map +1 -0
  47. package/dist/shared/components/case-viewer/case-specific-access-request/index.metadata.json +1 -0
  48. package/dist/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts +8 -0
  49. package/dist/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.js +13 -0
  50. package/dist/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.js.map +1 -0
  51. package/dist/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.metadata.json +1 -0
  52. package/dist/shared/components/case-viewer/case-specific-access-request/models/index.d.ts +1 -0
  53. package/dist/shared/components/case-viewer/case-specific-access-request/models/index.js +7 -0
  54. package/dist/shared/components/case-viewer/case-specific-access-request/models/index.js.map +1 -0
  55. package/dist/shared/components/case-viewer/case-specific-access-request/models/index.metadata.json +1 -0
  56. package/dist/shared/components/case-viewer/case-viewer.module.js +2 -1
  57. package/dist/shared/components/case-viewer/case-viewer.module.js.map +1 -1
  58. package/dist/shared/components/case-viewer/case-viewer.module.metadata.json +1 -1
  59. package/dist/shared/components/case-viewer/viewer.routing.js +15 -1
  60. package/dist/shared/components/case-viewer/viewer.routing.js.map +1 -1
  61. package/dist/shared/components/case-viewer/viewer.routing.metadata.json +1 -1
  62. package/dist/shared/components/loading-spinner/loading-spinner.component.d.ts +3 -0
  63. package/dist/shared/components/loading-spinner/loading-spinner.component.js +32 -0
  64. package/dist/shared/components/loading-spinner/loading-spinner.component.js.map +1 -0
  65. package/dist/shared/components/loading-spinner/loading-spinner.component.metadata.json +1 -0
  66. package/dist/shared/components/palette/base-field/abstract-field-read.component.d.ts +2 -2
  67. package/dist/shared/components/palette/base-field/abstract-field-read.component.js +1 -1
  68. package/dist/shared/components/palette/base-field/abstract-field-read.component.js.map +1 -1
  69. package/dist/shared/components/palette/complex/ccd-read-fields-filter.pipe.d.ts +3 -2
  70. package/dist/shared/components/palette/complex/ccd-read-fields-filter.pipe.js +24 -4
  71. package/dist/shared/components/palette/complex/ccd-read-fields-filter.pipe.js.map +1 -1
  72. package/dist/shared/components/palette/complex/ccd-read-fields-filter.pipe.metadata.json +1 -1
  73. package/dist/shared/components/palette/multi-select-list/write-multi-select-list-field.component.js +8 -0
  74. package/dist/shared/components/palette/multi-select-list/write-multi-select-list-field.component.js.map +1 -1
  75. package/dist/shared/directives/conditional-show/services/conditional-show-registrar.service.js +2 -0
  76. package/dist/shared/directives/conditional-show/services/conditional-show-registrar.service.js.map +1 -1
  77. package/dist/shared/domain/case-view/index.d.ts +1 -1
  78. package/dist/shared/domain/case-view/index.metadata.json +1 -1
  79. package/dist/shared/domain/case-view/role-assignment-response.model.d.ts +1 -1
  80. package/dist/shared/domain/case-view/role-request.model.d.ts +28 -10
  81. package/dist/shared/domain/case-view/role-request.model.metadata.json +1 -1
  82. package/dist/shared/domain/case-view/specific-access-request.model.d.ts +5 -0
  83. package/dist/shared/domain/case-view/{requested-role.model.js → specific-access-request.model.js} +1 -1
  84. package/dist/shared/domain/case-view/specific-access-request.model.js.map +1 -0
  85. package/dist/shared/domain/case-view/specific-access-request.model.metadata.json +1 -0
  86. package/dist/shared/domain/user/user-info.model.d.ts +1 -0
  87. package/dist/shared/services/form/form-value.service.d.ts +7 -0
  88. package/dist/shared/services/form/form-value.service.js +25 -0
  89. package/dist/shared/services/form/form-value.service.js.map +1 -1
  90. package/dist/shared/services/form/form-value.service.metadata.json +1 -1
  91. package/dist/shared/services/loading/loading.service.js +1 -1
  92. package/dist/shared/services/loading/loading.service.js.map +1 -1
  93. package/package.json +3 -3
  94. package/sonar-project.properties +4 -5
  95. package/dist/shared/domain/case-view/requested-role.model.d.ts +0 -25
  96. package/dist/shared/domain/case-view/requested-role.model.js.map +0 -1
  97. package/dist/shared/domain/case-view/requested-role.model.metadata.json +0 -1
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.7.0-rc.7
3
+ * @version v4.7.1-EUI-4703-hearing-date
4
4
  * @link undefined
5
5
  * @license MIT
6
6
  */
@@ -10754,6 +10754,9 @@ var AbstractAppConfig = /** @class */ (function () {
10754
10754
  AbstractAppConfig.prototype.getLocationRefApiUrl = function () {
10755
10755
  return undefined;
10756
10756
  };
10757
+ AbstractAppConfig.prototype.getCamRoleAssignmentsApiUrl = function () {
10758
+ return undefined;
10759
+ };
10757
10760
  return AbstractAppConfig;
10758
10761
  }());
10759
10762
  exports.AbstractAppConfig = AbstractAppConfig;
@@ -12379,6 +12382,82 @@ __export(__webpack_require__(41580));
12379
12382
  __export(__webpack_require__(4765));
12380
12383
 
12381
12384
 
12385
+ /***/ }),
12386
+
12387
+ /***/ 25919:
12388
+ /***/ ((__unused_webpack_module, exports) => {
12389
+
12390
+ "use strict";
12391
+
12392
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
12393
+ var CaseAccessUtils = /** @class */ (function () {
12394
+ function CaseAccessUtils() {
12395
+ }
12396
+ CaseAccessUtils.prototype.getMappedRoleCategory = function (roles, roleCategories) {
12397
+ var roleKeywords = roles.join().split('-').join().split(',');
12398
+ if (this.roleOrCategoryExists(CaseAccessUtils.JUDGE_ROLE, CaseAccessUtils.JUDGE_ROLE_CATEGORY, roleKeywords, roleCategories)) {
12399
+ return CaseAccessUtils.JUDGE_ROLE_CATEGORY;
12400
+ }
12401
+ else if (this.roleOrCategoryExists(CaseAccessUtils.PROFESSIONAL_ROLE, CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY, roleKeywords, roleCategories)) {
12402
+ return CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY;
12403
+ }
12404
+ else if (this.roleOrCategoryExists(CaseAccessUtils.CITIZEN_ROLE, CaseAccessUtils.CITIZEN_ROLE_CATEGORY, roleKeywords, roleCategories)) {
12405
+ return CaseAccessUtils.CITIZEN_ROLE_CATEGORY;
12406
+ }
12407
+ else if (this.roleOrCategoryExists(CaseAccessUtils.ADMIN_ROLE, CaseAccessUtils.ADMIN_ROLE_CATEGORY, roleKeywords, roleCategories)) {
12408
+ return CaseAccessUtils.ADMIN_ROLE_CATEGORY;
12409
+ }
12410
+ else {
12411
+ return CaseAccessUtils.LEGAL_OPERATIONS_ROLE_CATEGORY;
12412
+ }
12413
+ };
12414
+ CaseAccessUtils.prototype.roleOrCategoryExists = function (roleKeyword, roleCategory, roleKeywords, roleCategories) {
12415
+ var categoryExists = roleCategories.indexOf(roleCategory) > -1;
12416
+ var keywordExists = roleKeywords.indexOf(roleKeyword) > -1;
12417
+ return categoryExists ? categoryExists : keywordExists;
12418
+ };
12419
+ CaseAccessUtils.prototype.getAMRoleName = function (accessType, aMRole) {
12420
+ var roleName = '';
12421
+ switch (aMRole) {
12422
+ case CaseAccessUtils.JUDGE_ROLE_CATEGORY:
12423
+ roleName = accessType + "-access-" + CaseAccessUtils.JUDGE_ROLE_NAME;
12424
+ break;
12425
+ case CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY:
12426
+ roleName = accessType + "-access-" + CaseAccessUtils.PROFESSIONAL_ROLE_NAME;
12427
+ break;
12428
+ case CaseAccessUtils.CITIZEN_ROLE_CATEGORY:
12429
+ roleName = accessType + "-access-" + CaseAccessUtils.CITIZEN_ROLE_NAME;
12430
+ break;
12431
+ case CaseAccessUtils.ADMIN_ROLE_CATEGORY:
12432
+ roleName = accessType + "-access-" + CaseAccessUtils.ADMIN_ROLE_NAME;
12433
+ break;
12434
+ default:
12435
+ roleName = accessType + "-access-" + CaseAccessUtils.LEGAL_OPERATIONS_ROLE_NAME;
12436
+ break;
12437
+ }
12438
+ return roleName;
12439
+ };
12440
+ // User role mapping
12441
+ CaseAccessUtils.JUDGE_ROLE = 'judge';
12442
+ CaseAccessUtils.JUDGE_ROLE_CATEGORY = 'JUDICIAL';
12443
+ CaseAccessUtils.JUDGE_ROLE_NAME = 'judicial';
12444
+ CaseAccessUtils.ADMIN_ROLE = 'admin';
12445
+ CaseAccessUtils.ADMIN_ROLE_CATEGORY = 'ADMIN';
12446
+ CaseAccessUtils.ADMIN_ROLE_NAME = 'admin';
12447
+ CaseAccessUtils.PROFESSIONAL_ROLE = 'solicitor';
12448
+ CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY = 'PROFESSIONAL';
12449
+ CaseAccessUtils.PROFESSIONAL_ROLE_NAME = 'professional';
12450
+ CaseAccessUtils.LEGAL_OPERATIONS_ROLE = 'caseworker';
12451
+ CaseAccessUtils.LEGAL_OPERATIONS_ROLE_CATEGORY = 'LEGAL_OPERATIONS';
12452
+ CaseAccessUtils.LEGAL_OPERATIONS_ROLE_NAME = 'legal-operations';
12453
+ CaseAccessUtils.CITIZEN_ROLE = 'citizen';
12454
+ CaseAccessUtils.CITIZEN_ROLE_CATEGORY = 'CITIZEN';
12455
+ CaseAccessUtils.CITIZEN_ROLE_NAME = 'citizen';
12456
+ return CaseAccessUtils;
12457
+ }());
12458
+ exports.CaseAccessUtils = CaseAccessUtils;
12459
+
12460
+
12382
12461
  /***/ }),
12383
12462
 
12384
12463
  /***/ 19119:
@@ -12870,6 +12949,7 @@ var CaseEditPageComponent = /** @class */ (function () {
12870
12949
  if (this.currentPageIsNotValid()) {
12871
12950
  this.generateErrorMessage(this.currentPage.case_fields);
12872
12951
  }
12952
+ this.showSpinner = true;
12873
12953
  if (!this.isSubmitting && !this.currentPageIsNotValid()) {
12874
12954
  this.isSubmitting = true;
12875
12955
  this.error = null;
@@ -12880,8 +12960,12 @@ var CaseEditPageComponent = /** @class */ (function () {
12880
12960
  _this.updateFormData(jsonData);
12881
12961
  }
12882
12962
  _this.saveDraft();
12963
+ _this.showSpinner = false;
12883
12964
  _this.next();
12884
- }, function (error) { return _this.handleError(error); });
12965
+ }, function (error) {
12966
+ _this.showSpinner = false;
12967
+ _this.handleError(error);
12968
+ });
12885
12969
  CaseEditPageComponent_1.scrollToTop();
12886
12970
  }
12887
12971
  CaseEditPageComponent_1.setFocusToTop();
@@ -12889,15 +12973,15 @@ var CaseEditPageComponent = /** @class */ (function () {
12889
12973
  CaseEditPageComponent.prototype.updateFormData = function (jsonData) {
12890
12974
  for (var _i = 0, _a = Object.keys(jsonData.data); _i < _a.length; _i++) {
12891
12975
  var caseFieldId = _a[_i];
12892
- if (this.pageWithFieldExists(caseFieldId)) {
12976
+ if (this.pageWithFieldExists(caseFieldId, this.currentPage.id)) {
12893
12977
  this.updateEventTriggerCaseFields(caseFieldId, jsonData, this.caseEdit.eventTrigger);
12894
12978
  this.updateFormControlsValue(this.editForm, caseFieldId, jsonData.data[caseFieldId]);
12895
12979
  }
12896
12980
  }
12897
12981
  };
12898
12982
  // we do the check, becasue the data comes from the external source
12899
- CaseEditPageComponent.prototype.pageWithFieldExists = function (caseFieldId) {
12900
- return this.wizard.findWizardPage(caseFieldId);
12983
+ CaseEditPageComponent.prototype.pageWithFieldExists = function (caseFieldId, pageId) {
12984
+ return this.wizard.findWizardPage(caseFieldId, pageId);
12901
12985
  };
12902
12986
  CaseEditPageComponent.prototype.updateEventTriggerCaseFields = function (caseFieldId, jsonData, eventTrigger) {
12903
12987
  if (eventTrigger.case_fields) {
@@ -12909,7 +12993,15 @@ var CaseEditPageComponent = /** @class */ (function () {
12909
12993
  CaseEditPageComponent.prototype.updateFormControlsValue = function (formGroup, caseFieldId, value) {
12910
12994
  var theControl = formGroup.controls['data'].get(caseFieldId);
12911
12995
  if (theControl) {
12912
- theControl.patchValue(value);
12996
+ if (Array.isArray(theControl.value) && Array.isArray(value)
12997
+ && theControl.value.length > value.length && theControl['caseField']
12998
+ && theControl['caseField']['display_context'] && theControl['caseField']['display_context'] === 'OPTIONAL'
12999
+ && theControl['caseField']['field_type'] && theControl['caseField']['field_type']['type'] === 'Collection') {
13000
+ // do nothing
13001
+ }
13002
+ else {
13003
+ theControl.patchValue(value);
13004
+ }
12913
13005
  }
12914
13006
  };
12915
13007
  CaseEditPageComponent.prototype.callbackErrorsNotify = function (errorContext) {
@@ -13706,6 +13798,7 @@ var profile_1 = __webpack_require__(59412);
13706
13798
  var profile_service_1 = __webpack_require__(25925);
13707
13799
  var router_2 = __webpack_require__(71724);
13708
13800
  var errors_module_1 = __webpack_require__(61386);
13801
+ var loading_spinner_component_1 = __webpack_require__(41617);
13709
13802
  var palette_1 = __webpack_require__(22212);
13710
13803
  var case_create_component_1 = __webpack_require__(19119);
13711
13804
  var case_edit_confirm_component_1 = __webpack_require__(26329);
@@ -13744,7 +13837,8 @@ var CaseEditorModule = /** @class */ (function () {
13744
13837
  case_edit_form_component_1.CaseEditFormComponent,
13745
13838
  case_edit_submit_component_1.CaseEditSubmitComponent,
13746
13839
  case_create_component_1.CaseCreateComponent,
13747
- case_progress_component_1.CaseProgressComponent
13840
+ case_progress_component_1.CaseProgressComponent,
13841
+ loading_spinner_component_1.LoadingSpinnerComponent
13748
13842
  ],
13749
13843
  exports: [
13750
13844
  case_edit_confirm_component_1.CaseEditConfirmComponent,
@@ -13755,6 +13849,7 @@ var CaseEditorModule = /** @class */ (function () {
13755
13849
  case_create_component_1.CaseCreateComponent,
13756
13850
  case_progress_component_1.CaseProgressComponent,
13757
13851
  error_1.CallbackErrorsComponent,
13852
+ loading_spinner_component_1.LoadingSpinnerComponent,
13758
13853
  ],
13759
13854
  providers: [
13760
13855
  fields_utils_1.FieldsUtils,
@@ -14046,8 +14141,8 @@ var Wizard = /** @class */ (function () {
14046
14141
  }
14047
14142
  return canShow(foundPage) ? foundPage : undefined;
14048
14143
  };
14049
- Wizard.prototype.findWizardPage = function (caseFieldId) {
14050
- return this.pages.find(function (wizardPage) { return wizardPage.case_fields &&
14144
+ Wizard.prototype.findWizardPage = function (caseFieldId, pageId) {
14145
+ return this.pages.find(function (wizardPage) { return wizardPage.id === pageId || wizardPage.case_fields &&
14051
14146
  wizardPage.case_fields.filter(function (caseField) { return caseField.id === caseFieldId; }).length > 0; });
14052
14147
  };
14053
14148
  Wizard.prototype.nextPage = function (pageId, canShow) {
@@ -14149,6 +14244,7 @@ __export(__webpack_require__(29808));
14149
14244
  __export(__webpack_require__(25961));
14150
14245
  __export(__webpack_require__(20039));
14151
14246
  __export(__webpack_require__(41473));
14247
+ __export(__webpack_require__(25919));
14152
14248
 
14153
14249
 
14154
14250
  /***/ }),
@@ -14321,6 +14417,7 @@ var app_config_1 = __webpack_require__(35185);
14321
14417
  var directives_1 = __webpack_require__(66395);
14322
14418
  var domain_1 = __webpack_require__(59346);
14323
14419
  var services_1 = __webpack_require__(65010);
14420
+ var case_access_utils_1 = __webpack_require__(25919);
14324
14421
  var wizard_page_field_to_case_field_mapper_1 = __webpack_require__(12393);
14325
14422
  var work_allocation_service_1 = __webpack_require__(93603);
14326
14423
  var CasesService = /** @class */ (function () {
@@ -14590,56 +14687,41 @@ var CasesService = /** @class */ (function () {
14590
14687
  return this.http.get(this.appConfig.getLocationRefApiUrl() + "/building-locations?epimms_id=" + locationId);
14591
14688
  };
14592
14689
  CasesService.prototype.createChallengedAccessRequest = function (caseId, car) {
14593
- // Dummy implementation for now; the real one will make a call to the Node layer, which will call the appropriate Role
14594
14690
  // Assignment API endpoint
14595
- var roleAssignmentResponse = {
14691
+ var userInfoStr = this.sessionStorageService.getItem('userDetails');
14692
+ var camUtils = new case_access_utils_1.CaseAccessUtils();
14693
+ var userInfo;
14694
+ if (userInfoStr) {
14695
+ userInfo = JSON.parse(userInfoStr);
14696
+ }
14697
+ var roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
14698
+ var roleName = camUtils.getAMRoleName('challenged', roleCategory);
14699
+ var payload = {
14596
14700
  roleRequest: {
14597
- id: '0c6f56f5-4457-485e-a0de-828e6dfa1e33',
14598
- authenticatedUserId: '37d4eab7-e14c-404e-8cd1-55cd06b2fc06',
14599
- correlationId: '003352d0-e699-48bc-b6f5-5810411e60af',
14600
- assignerId: '37d4eab7-e14c-404e-8cd1-55cd06b2fc06',
14601
- requestType: 'CREATE',
14602
- process: 'businessProcess1',
14603
- reference: 'cf07ea33-31c0-4442-b2df-e2032d21b496',
14604
- replaceExisting: true,
14605
- status: 'APPROVED',
14606
- created: new Date('2021-01-28T18:16:49.100121Z'),
14607
- log: 'Request has been approved'
14701
+ assignerId: userInfo.id
14608
14702
  },
14609
14703
  requestedRoles: [{
14610
- id: '3ccabbf2-71fa-4c5d-af39-5675d25e9fcc',
14611
14704
  actorIdType: 'IDAM',
14612
- actorId: 'cf07ea33-31c0-4442-b2df-e2032d21b496',
14613
- roleType: 'ORGANISATION',
14614
- roleName: 'judge',
14705
+ actorId: userInfo.id,
14706
+ roleType: 'CASE',
14707
+ roleName: roleName,
14615
14708
  classification: 'PUBLIC',
14709
+ roleCategory: roleCategory,
14616
14710
  grantType: 'CHALLENGED',
14617
- roleCategory: 'JUDICIAL',
14618
- readOnly: false,
14619
- beginTime: new Date('2021-01-01T00:00:00Z'),
14620
- endTime: new Date('2023-01-01T00:00:00Z'),
14621
- process: 'businessProcess1',
14622
- reference: 'cf07ea33-31c0-4442-b2df-e2032d21b496',
14623
- status: 'LIVE',
14624
- created: new Date('2021-01-28T18:16:49.100155Z'),
14625
- log: 'Create requested with replace: true\nCreate approved : judicial_organisational_role_mapping_service_create',
14711
+ beginTime: new Date(),
14712
+ endTime: new Date(new Date().setUTCHours(23, 59, 59, 999)),
14626
14713
  attributes: {
14627
- jurisdiction: 'divorce',
14628
- region: 'south-east',
14629
- contractType: 'SALARIED'
14714
+ caseId: caseId
14630
14715
  },
14631
14716
  notes: [{
14632
- userId: '003352d0-e699-48bc-b6f5-5810411e60ag',
14633
- time: new Date('2020-01-01T00:00Z'),
14634
- comment: 'Need Access to case number 1234567890123456 for a month'
14635
- }, {
14636
- userId: '52aa3810-af1f-11ea-b3de-0242ac130004',
14637
- time: new Date('2020-01-02T00:00Z'),
14638
- comment: 'Access granted till end of day'
14639
- }]
14717
+ userId: userInfo.id,
14718
+ time: new Date(),
14719
+ comment: JSON.stringify(car)
14720
+ }
14721
+ ]
14640
14722
  }]
14641
14723
  };
14642
- return rxjs_1.of(roleAssignmentResponse);
14724
+ return this.http.post("" + this.appConfig.getCamRoleAssignmentsApiUrl(), payload);
14643
14725
  };
14644
14726
  var CasesService_1;
14645
14727
  // Internal (UI) API
@@ -16056,6 +16138,9 @@ var CaseBasicAccessViewComponent = /** @class */ (function () {
16056
16138
  // Navigate to the previous page
16057
16139
  window.history.go(-1);
16058
16140
  };
16141
+ CaseBasicAccessViewComponent.prototype.getRequestUrl = function (accessType) {
16142
+ return accessType === 'CHALLENGED' ? 'challenged-access-request' : 'specific-access-request';
16143
+ };
16059
16144
  __decorate([
16060
16145
  core_1.Input(),
16061
16146
  __metadata("design:type", domain_1.CaseView)
@@ -16564,13 +16649,11 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
16564
16649
  return this.caseDetails.case_type.printEnabled;
16565
16650
  };
16566
16651
  CaseFullAccessViewComponent.prototype.ngOnDestroy = function () {
16567
- if (this.activitySubscription && this.activityPollingService.isEnabled) {
16652
+ if (this.activityPollingService.isEnabled) {
16568
16653
  this.activitySubscription.unsubscribe();
16569
16654
  }
16570
- if (this.callbackErrorsSubject) {
16571
- this.callbackErrorsSubject.unsubscribe();
16572
- }
16573
- if (!this.route.snapshot.data.case && this.caseSubscription) {
16655
+ this.callbackErrorsSubject.unsubscribe();
16656
+ if (!this.route.snapshot.data.case) {
16574
16657
  this.caseSubscription.unsubscribe();
16575
16658
  }
16576
16659
  if (this.errorSubscription) {
@@ -16665,8 +16748,7 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
16665
16748
  var regExp = new RegExp(CaseFullAccessViewComponent_1.UNICODE_SPACE, 'g');
16666
16749
  hashValue = hashValue.replace(regExp, CaseFullAccessViewComponent_1.EMPTY_SPACE);
16667
16750
  matTab = this.tabGroup._tabs.find(function (x) {
16668
- return x.textLabel.replace(CaseFullAccessViewComponent_1.EMPTY_SPACE, '').toLowerCase() ===
16669
- hashValue.replace(CaseFullAccessViewComponent_1.EMPTY_SPACE, '').toLowerCase();
16751
+ return x.textLabel.replace(CaseFullAccessViewComponent_1.EMPTY_SPACE, '').toLowerCase() === hashValue.toLowerCase();
16670
16752
  });
16671
16753
  if (matTab && matTab.position) {
16672
16754
  this.tabGroup.selectedIndex = matTab.position;
@@ -16680,9 +16762,8 @@ var CaseFullAccessViewComponent = /** @class */ (function () {
16680
16762
  this.router.navigate([id], { relativeTo: this.route });
16681
16763
  }
16682
16764
  else {
16683
- var label_1 = tabChangeEvent.tab.textLabel;
16684
16765
  this.router.navigate(['cases', 'case-details', this.caseDetails.case_id]).then(function () {
16685
- window.location.hash = label_1;
16766
+ window.location.hash = id;
16686
16767
  });
16687
16768
  }
16688
16769
  };
@@ -16800,6 +16881,148 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
16800
16881
  __export(__webpack_require__(76764));
16801
16882
 
16802
16883
 
16884
+ /***/ }),
16885
+
16886
+ /***/ 38692:
16887
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
16888
+
16889
+ "use strict";
16890
+
16891
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16892
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16893
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16894
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16895
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
16896
+ };
16897
+ var __metadata = (this && this.__metadata) || function (k, v) {
16898
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16899
+ };
16900
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
16901
+ var core_1 = __webpack_require__(57208);
16902
+ var forms_1 = __webpack_require__(92985);
16903
+ var router_1 = __webpack_require__(92302);
16904
+ var models_1 = __webpack_require__(3234);
16905
+ var CaseSpecificAccessRequestComponent = /** @class */ (function () {
16906
+ function CaseSpecificAccessRequestComponent(fb, router, route) {
16907
+ this.fb = fb;
16908
+ this.router = router;
16909
+ this.route = route;
16910
+ this.collapsed = false;
16911
+ this.submitted = false;
16912
+ this.genericError = 'There is a problem';
16913
+ this.specificReasonControlName = 'specificReason';
16914
+ }
16915
+ CaseSpecificAccessRequestComponent.prototype.ngOnInit = function () {
16916
+ var _this = this;
16917
+ this.title = models_1.SpecificAccessRequestPageText.TITLE;
16918
+ this.hint = models_1.SpecificAccessRequestPageText.HINT;
16919
+ this.caseRefLabel = models_1.SpecificAccessRequestPageText.CASE_REF;
16920
+ this.formGroup = this.fb.group({
16921
+ radioSelected: new forms_1.FormControl(null, null),
16922
+ });
16923
+ this.formGroup.addControl(this.specificReasonControlName, new forms_1.FormControl('', {
16924
+ validators: [
16925
+ function (control) {
16926
+ if (_this.inputEmpty(control)) {
16927
+ return { invalid: true };
16928
+ }
16929
+ return null;
16930
+ },
16931
+ ],
16932
+ updateOn: 'submit',
16933
+ }));
16934
+ };
16935
+ CaseSpecificAccessRequestComponent.prototype.inputEmpty = function (input) {
16936
+ return input.value == null || input.value.trim().length === 0;
16937
+ };
16938
+ CaseSpecificAccessRequestComponent.prototype.onChange = function () {
16939
+ this.submitted = false;
16940
+ // Clear the "specific reason" fields manually. This prevents any previous value being retained by
16941
+ // the field's FormControl when the field itself is removed from the DOM by *ngIf. (If it is subsequently added back
16942
+ // to the DOM by *ngIf, it will appear empty but the associated FormControl still has the previous value.)
16943
+ this.formGroup.get(this.specificReasonControlName).setValue('');
16944
+ };
16945
+ CaseSpecificAccessRequestComponent.prototype.onSubmit = function () {
16946
+ this.submitted = true;
16947
+ if (this.formGroup.get(this.specificReasonControlName).invalid) {
16948
+ this.errorMessage = {
16949
+ title: this.genericError,
16950
+ description: models_1.SpecificAccessRequestErrors.NO_REASON,
16951
+ fieldId: 'specific-reason',
16952
+ };
16953
+ }
16954
+ };
16955
+ CaseSpecificAccessRequestComponent.prototype.onCancel = function () {
16956
+ // Navigate to the page before previous one (should be Search Results or Case List page, for example)
16957
+ window.history.go(-2);
16958
+ };
16959
+ CaseSpecificAccessRequestComponent.prototype.ngOnDestroy = function () {
16960
+ if (this.$roleAssignmentResponseSubscription) {
16961
+ this.$roleAssignmentResponseSubscription.unsubscribe();
16962
+ }
16963
+ };
16964
+ CaseSpecificAccessRequestComponent = __decorate([
16965
+ core_1.Component({
16966
+ selector: 'ccd-case-specific-access-request',
16967
+ template: __webpack_require__(5856),
16968
+ }),
16969
+ __metadata("design:paramtypes", [forms_1.FormBuilder,
16970
+ router_1.Router,
16971
+ router_1.ActivatedRoute])
16972
+ ], CaseSpecificAccessRequestComponent);
16973
+ return CaseSpecificAccessRequestComponent;
16974
+ }());
16975
+ exports.CaseSpecificAccessRequestComponent = CaseSpecificAccessRequestComponent;
16976
+
16977
+
16978
+ /***/ }),
16979
+
16980
+ /***/ 73343:
16981
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16982
+
16983
+ "use strict";
16984
+
16985
+ function __export(m) {
16986
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
16987
+ }
16988
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
16989
+ __export(__webpack_require__(38692));
16990
+
16991
+
16992
+ /***/ }),
16993
+
16994
+ /***/ 52772:
16995
+ /***/ ((__unused_webpack_module, exports) => {
16996
+
16997
+ "use strict";
16998
+
16999
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
17000
+ var SpecificAccessRequestPageText;
17001
+ (function (SpecificAccessRequestPageText) {
17002
+ SpecificAccessRequestPageText["TITLE"] = "Why do you need to access this case?";
17003
+ SpecificAccessRequestPageText["HINT"] = "Provide a reason.";
17004
+ SpecificAccessRequestPageText["CASE_REF"] = "Case reference";
17005
+ })(SpecificAccessRequestPageText = exports.SpecificAccessRequestPageText || (exports.SpecificAccessRequestPageText = {}));
17006
+ var SpecificAccessRequestErrors;
17007
+ (function (SpecificAccessRequestErrors) {
17008
+ SpecificAccessRequestErrors["NO_REASON"] = "Enter a reason";
17009
+ })(SpecificAccessRequestErrors = exports.SpecificAccessRequestErrors || (exports.SpecificAccessRequestErrors = {}));
17010
+
17011
+
17012
+ /***/ }),
17013
+
17014
+ /***/ 3234:
17015
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
17016
+
17017
+ "use strict";
17018
+
17019
+ function __export(m) {
17020
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
17021
+ }
17022
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
17023
+ __export(__webpack_require__(52772));
17024
+
17025
+
16803
17026
  /***/ }),
16804
17027
 
16805
17028
  /***/ 76979:
@@ -17086,6 +17309,7 @@ var palette_1 = __webpack_require__(22212);
17086
17309
  var case_basic_access_view_component_1 = __webpack_require__(42906);
17087
17310
  var case_challenged_access_request_component_1 = __webpack_require__(70776);
17088
17311
  var case_challenged_access_success_component_1 = __webpack_require__(41969);
17312
+ var case_specific_access_request_component_1 = __webpack_require__(38692);
17089
17313
  var case_event_trigger_1 = __webpack_require__(92100);
17090
17314
  var case_full_access_view_component_1 = __webpack_require__(76764);
17091
17315
  var case_view_1 = __webpack_require__(65389);
@@ -17114,7 +17338,6 @@ var CaseViewerModule = /** @class */ (function () {
17114
17338
  palette_1.EventLogModule,
17115
17339
  material_1.MatTabsModule,
17116
17340
  palette_1.ComplexModule,
17117
- forms_1.FormsModule,
17118
17341
  forms_1.ReactiveFormsModule,
17119
17342
  alert_1.AlertModule
17120
17343
  ],
@@ -17127,6 +17350,7 @@ var CaseViewerModule = /** @class */ (function () {
17127
17350
  case_view_1.CaseViewComponent,
17128
17351
  printer_1.PrintUrlPipe,
17129
17352
  case_challenged_access_request_component_1.CaseChallengedAccessRequestComponent,
17353
+ case_specific_access_request_component_1.CaseSpecificAccessRequestComponent,
17130
17354
  error_message_component_1.ErrorMessageComponent,
17131
17355
  case_challenged_access_success_component_1.CaseChallengedAccessSuccessComponent
17132
17356
  ],
@@ -17578,6 +17802,7 @@ var case_history_1 = __webpack_require__(30542);
17578
17802
  var file_upload_progress_guard_1 = __webpack_require__(27667);
17579
17803
  var case_challenged_access_request_1 = __webpack_require__(38403);
17580
17804
  var case_challenged_access_success_1 = __webpack_require__(26840);
17805
+ var case_specific_access_request_1 = __webpack_require__(73343);
17581
17806
  var case_event_trigger_component_1 = __webpack_require__(83645);
17582
17807
  var printer_1 = __webpack_require__(65773);
17583
17808
  var services_1 = __webpack_require__(50137);
@@ -17600,7 +17825,7 @@ exports.viewerRouting = [
17600
17825
  component: case_history_1.CaseHistoryComponent,
17601
17826
  },
17602
17827
  {
17603
- path: 'access-request',
17828
+ path: 'challenged-access-request',
17604
17829
  children: [
17605
17830
  {
17606
17831
  path: '',
@@ -17618,6 +17843,19 @@ exports.viewerRouting = [
17618
17843
  }
17619
17844
  }
17620
17845
  ]
17846
+ },
17847
+ {
17848
+ path: 'specific-access-request',
17849
+ children: [
17850
+ {
17851
+ path: '',
17852
+ component: case_specific_access_request_1.CaseSpecificAccessRequestComponent,
17853
+ data: {
17854
+ title: 'Request Specific Access'
17855
+ },
17856
+ pathMatch: 'full'
17857
+ }
17858
+ ]
17621
17859
  }
17622
17860
  ];
17623
17861
 
@@ -18652,6 +18890,45 @@ __export(__webpack_require__(13370));
18652
18890
  __export(__webpack_require__(62240));
18653
18891
 
18654
18892
 
18893
+ /***/ }),
18894
+
18895
+ /***/ 41617:
18896
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
18897
+
18898
+ "use strict";
18899
+
18900
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18901
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18902
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18903
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18904
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
18905
+ };
18906
+ var __metadata = (this && this.__metadata) || function (k, v) {
18907
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18908
+ };
18909
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
18910
+ var core_1 = __webpack_require__(57208);
18911
+ var LoadingSpinnerComponent = /** @class */ (function () {
18912
+ function LoadingSpinnerComponent() {
18913
+ this.loadingText = 'Loading';
18914
+ }
18915
+ __decorate([
18916
+ core_1.Input(),
18917
+ __metadata("design:type", Object)
18918
+ ], LoadingSpinnerComponent.prototype, "loadingText", void 0);
18919
+ LoadingSpinnerComponent = __decorate([
18920
+ core_1.Component({
18921
+ selector: 'ccd-loading-spinner',
18922
+ template: __webpack_require__(31851),
18923
+ styles: [__webpack_require__(6431)],
18924
+ encapsulation: core_1.ViewEncapsulation.None
18925
+ })
18926
+ ], LoadingSpinnerComponent);
18927
+ return LoadingSpinnerComponent;
18928
+ }());
18929
+ exports.LoadingSpinnerComponent = LoadingSpinnerComponent;
18930
+
18931
+
18655
18932
  /***/ }),
18656
18933
 
18657
18934
  /***/ 47174:
@@ -19253,7 +19530,7 @@ var AbstractFieldReadComponent = /** @class */ (function (_super) {
19253
19530
  ], AbstractFieldReadComponent.prototype, "caseReference", void 0);
19254
19531
  __decorate([
19255
19532
  core_1.Input(),
19256
- __metadata("design:type", forms_1.FormGroup)
19533
+ __metadata("design:type", Object)
19257
19534
  ], AbstractFieldReadComponent.prototype, "topLevelFormGroup", void 0);
19258
19535
  __decorate([
19259
19536
  core_1.Input(),
@@ -20533,7 +20810,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
20533
20810
  Object.defineProperty(exports, "__esModule", ({ value: true }));
20534
20811
  var core_1 = __webpack_require__(57208);
20535
20812
  var directives_1 = __webpack_require__(66395);
20813
+ var domain_1 = __webpack_require__(59346);
20536
20814
  var fields_1 = __webpack_require__(64906);
20815
+ var class_transformer_1 = __webpack_require__(86631);
20537
20816
  var ReadFieldsFilterPipe = /** @class */ (function () {
20538
20817
  function ReadFieldsFilterPipe() {
20539
20818
  }
@@ -20550,10 +20829,26 @@ var ReadFieldsFilterPipe = /** @class */ (function () {
20550
20829
  var type = field.field_type;
20551
20830
  var value = ReadFieldsFilterPipe_1.getValue(field, values);
20552
20831
  var hasChildrenWithValue = type.complex_fields.find(function (f) {
20553
- return ReadFieldsFilterPipe_1.keepField(f, value);
20832
+ var willKeep = ReadFieldsFilterPipe_1.keepField(f, value, true);
20833
+ return willKeep && ReadFieldsFilterPipe_1.evaluateConditionalShow(f, value).hidden !== true;
20554
20834
  });
20555
20835
  return !!hasChildrenWithValue;
20556
20836
  };
20837
+ ReadFieldsFilterPipe.isValidCollection = function (field, values) {
20838
+ var isNotEmpty = Array.isArray(field.value) && field.value.length > 0;
20839
+ if (isNotEmpty && field.field_type.collection_field_type.type === 'Complex') {
20840
+ return !!field.value.find(function (item) {
20841
+ var complexField = class_transformer_1.plainToClassFromExist(new domain_1.CaseField(), {
20842
+ id: field.field_type.collection_field_type.id,
20843
+ field_type: field.field_type.collection_field_type,
20844
+ value: item.value,
20845
+ label: null,
20846
+ });
20847
+ return ReadFieldsFilterPipe_1.isValidComplex(complexField);
20848
+ });
20849
+ }
20850
+ return isNotEmpty;
20851
+ };
20557
20852
  ReadFieldsFilterPipe.isEmpty = function (value) {
20558
20853
  return ReadFieldsFilterPipe_1.EMPTY_VALUES.indexOf(value) !== -1
20559
20854
  || value.length === 0;
@@ -20565,9 +20860,10 @@ var ReadFieldsFilterPipe = /** @class */ (function () {
20565
20860
  return ReadFieldsFilterPipe_1.isCompound(field)
20566
20861
  && ReadFieldsFilterPipe_1.NESTED_TYPES[field.field_type.type](field, value);
20567
20862
  };
20568
- ReadFieldsFilterPipe.keepField = function (field, value) {
20863
+ ReadFieldsFilterPipe.keepField = function (field, value, ignoreLabels) {
20864
+ if (ignoreLabels === void 0) { ignoreLabels = false; }
20569
20865
  // We shouldn't ditch labels.
20570
- if (field.field_type.type === 'Label' && (field.label || '').length > 0) {
20866
+ if (!ignoreLabels && field.field_type.type === 'Label' && (field.label || '').length > 0) {
20571
20867
  return true;
20572
20868
  }
20573
20869
  // We also shouldn't ditch CasePaymentHistoryViewer fields.
@@ -20654,7 +20950,8 @@ var ReadFieldsFilterPipe = /** @class */ (function () {
20654
20950
  {}
20655
20951
  ];
20656
20952
  ReadFieldsFilterPipe.NESTED_TYPES = {
20657
- 'Complex': ReadFieldsFilterPipe_1.isValidComplex
20953
+ 'Complex': ReadFieldsFilterPipe_1.isValidComplex,
20954
+ 'Collection': ReadFieldsFilterPipe_1.isValidCollection
20658
20955
  };
20659
20956
  ReadFieldsFilterPipe = ReadFieldsFilterPipe_1 = __decorate([
20660
20957
  core_1.Pipe({
@@ -24530,6 +24827,14 @@ var WriteMultiSelectListFieldComponent = /** @class */ (function (_super) {
24530
24827
  });
24531
24828
  }
24532
24829
  this.registerControl(this.checkboxes, true);
24830
+ if (this.caseField.display_context && this.caseField.display_context === 'MANDATORY' && this.caseField.field_type
24831
+ && this.caseField.field_type.type === 'MultiSelectList' && this.caseField.field_type.fixed_list_items.length > 0
24832
+ && this.checkboxes.controls.length === 0) {
24833
+ if (this.caseField.field_type.fixed_list_items[0].code) {
24834
+ this.checkboxes.push(new forms_1.FormControl(this.caseField.field_type.fixed_list_items[0].code));
24835
+ this.checkboxes.removeAt(0);
24836
+ }
24837
+ }
24533
24838
  };
24534
24839
  WriteMultiSelectListFieldComponent.prototype.onCheckChange = function (event) {
24535
24840
  var _this = this;
@@ -29266,10 +29571,12 @@ var ConditionalShowRegistrarService = /** @class */ (function () {
29266
29571
  this.registeredDirectives = [];
29267
29572
  }
29268
29573
  ConditionalShowRegistrarService.prototype.register = function (newDirective) {
29574
+ // console.log('[', this.registeredDirectives.length, ']adding new directive', newDirective.caseField.id);
29269
29575
  this.registeredDirectives.push(newDirective);
29270
29576
  };
29271
29577
  ConditionalShowRegistrarService.prototype.refresh = function () {
29272
29578
  this.registeredDirectives.forEach(function (dir) {
29579
+ // console.log('refreshing ', dir.caseField.id);
29273
29580
  dir.refreshVisibility();
29274
29581
  });
29275
29582
  };
@@ -34519,6 +34826,13 @@ var FormValueService = /** @class */ (function () {
34519
34826
  }
34520
34827
  else {
34521
34828
  sanitisedObject[key] = this.sanitiseValue(rawObject[key]);
34829
+ if (Array.isArray(sanitisedObject[key])) {
34830
+ // If the 'sanitised' array is empty, whereas the original array had 1 or more items
34831
+ // delete the property from the sanatised object
34832
+ if (sanitisedObject[key].length === 0 && rawObject[key].length > 0) {
34833
+ delete sanitisedObject[key];
34834
+ }
34835
+ }
34522
34836
  }
34523
34837
  }
34524
34838
  return sanitisedObject;
@@ -34698,6 +35012,8 @@ var FormValueService = /** @class */ (function () {
34698
35012
  }
34699
35013
  break;
34700
35014
  case 'Collection':
35015
+ // Check for valid collection data
35016
+ this.removeInvalidCollectionData(data, field);
34701
35017
  // Get hold of the collection.
34702
35018
  var collection = data[field.id];
34703
35019
  // Check if we actually have a collection to work with.
@@ -34723,6 +35039,22 @@ var FormValueService = /** @class */ (function () {
34723
35039
  // Clear out any MultiSelect labels.
34724
35040
  FormValueService_1.removeMultiSelectLabels(data);
34725
35041
  };
35042
+ /**
35043
+ * Remove any empty or invalid arry with only id
35044
+ *
35045
+ * @param data The object tree of form values on which to perform the removal
35046
+ * @param field {@link CaseField} domain model object for each field
35047
+ */
35048
+ FormValueService.prototype.removeInvalidCollectionData = function (data, field) {
35049
+ if (data[field.id] && data[field.id].length > 0) {
35050
+ for (var _i = 0, _a = data[field.id]; _i < _a.length; _i++) {
35051
+ var objCollection = _a[_i];
35052
+ if (Object.keys(objCollection).length === 1 && Object.keys(objCollection).indexOf('id') > -1) {
35053
+ data[field.id] = [];
35054
+ }
35055
+ }
35056
+ }
35057
+ };
34726
35058
  /**
34727
35059
  * Remove any empty collection fields where a value of greater than zero is specified in the field's {@link FieldType}
34728
35060
  * `min` attribute.
@@ -35146,7 +35478,7 @@ var LoadingService = /** @class */ (function () {
35146
35478
  }
35147
35479
  Object.defineProperty(LoadingService.prototype, "isLoading", {
35148
35480
  get: function () {
35149
- return this.loading.asObservable().pipe(operators_1.distinctUntilChanged());
35481
+ return this.loading.pipe(operators_1.distinctUntilChanged());
35150
35482
  },
35151
35483
  enumerable: true,
35152
35484
  configurable: true
@@ -37368,6 +37700,21 @@ exports.push([module.id, ".event-trigger{width:auto;margin-top:40px;margin-botto
37368
37700
  // exports
37369
37701
 
37370
37702
 
37703
+ /***/ }),
37704
+
37705
+ /***/ 68929:
37706
+ /***/ ((module, exports, __webpack_require__) => {
37707
+
37708
+ exports = module.exports = __webpack_require__(9252)(false);
37709
+ // imports
37710
+
37711
+
37712
+ // module
37713
+ exports.push([module.id, ".spinner-container{position:fixed;top:0;left:0;height:100%;width:100%;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,0.5);z-index:99}.spinner-container .spinner-inner-container p{text-align:center}.spinner-container .spinner-inner-container .spinner{border:10px solid #dddddd;border-top:10px solid #000000;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}\n", ""]);
37714
+
37715
+ // exports
37716
+
37717
+
37371
37718
  /***/ }),
37372
37719
 
37373
37720
  /***/ 47029:
@@ -63455,7 +63802,7 @@ module.exports = "<ng-container ccdConditionalShowForm [formGroup]=\"formGroup\"
63455
63802
  /***/ 61865:
63456
63803
  /***/ ((module) => {
63457
63804
 
63458
- module.exports = "<ng-container *ngIf=\"currentPage\">\n <h1 *ngIf=\"!currentPage.label\" class=\"govuk-heading-l\">{{eventTrigger.name}}</h1>\n <ng-container *ngIf=\"currentPage.label\">\n <span class=\"govuk-caption-l\">{{ eventTrigger.name}}</span>\n <h1 class=\"govuk-heading-l\">{{currentPage.label}}</h1>\n </ng-container>\n</ng-container>\n\n<!--Case ID or Title -->\n<div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n<ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: caseFields : editForm.controls['data']\"></ccd-markdown>\n</ng-template>\n<ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n</ng-template>\n\n<!-- Error message summary -->\n<div *ngIf=\"validationErrors.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div *ngFor=\"let validationError of validationErrors\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(validationError.id)\" class=\"validation-error\">{{validationError.message}}</a>\n </li>\n </ul>\n </div>\n</div>\n\n<!-- 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=\"status\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n\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<!-- Event error heading and error message to be displayed if there are specific error details -->\n<div *ngIf=\"error && error.details\" class=\"error-summary\" role=\"status\"\n aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h3 class=\"heading-h3 error-summary-heading\" id=\"edit-case-event_error-summary-heading-3\">\n The event could not be created\n </h3>\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\" class=\"ccd-error-summary-li\">{{fieldError.message}}</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<div class=\"width-50\">\n <form *ngIf=\"currentPage\" class=\"form\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <fieldset id=\"fieldset-case-data\">\n <!-- single column -->\n <ccd-case-edit-form id='caseEditForm' *ngIf=\"!currentPage.isMultiColumn()\" [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"\n [pageChangeSubject]=\"pageChangeSubject\"\n (valuesChanged)=\"applyValuesChanged($event)\"></ccd-case-edit-form>\n <!-- two columns -->\n <div *ngIf=\"currentPage.isMultiColumn()\" class=\"grid-row\">\n <div class=\"column-two-thirds rightBorderSeparator\">\n <ccd-case-edit-form id='caseEditForm1' [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n <div class=\"column-one-third\">\n <ccd-case-edit-form id='caseEditForm2' [fields]=\"currentPage.getCol2Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n </div>\n </fieldset>\n\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!(hasPreviousPage$ | async)\" (click)=\"toPreviousPage()\">\n Previous\n </button>\n <button class=\"button\" type=\"submit\" [disabled]=\"submitting()\">{{triggerText}}</button>\n </div>\n\n <p class=\"cancel\"><a (click)=\"cancel()\" href=\"javascript:void(0)\">{{getCancelText()}}</a></p>\n\n </form>\n</div>\n"
63805
+ module.exports = "<ccd-loading-spinner *ngIf=\"showSpinner\"></ccd-loading-spinner>\n<ng-container *ngIf=\"currentPage\">\n <h1 *ngIf=\"!currentPage.label\" class=\"govuk-heading-l\">{{eventTrigger.name}}</h1>\n <ng-container *ngIf=\"currentPage.label\">\n <span class=\"govuk-caption-l\">{{ eventTrigger.name}}</span>\n <h1 class=\"govuk-heading-l\">{{currentPage.label}}</h1>\n </ng-container>\n</ng-container>\n\n<!--Case ID or Title -->\n<div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n<ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: caseFields : editForm.controls['data']\"></ccd-markdown>\n</ng-template>\n<ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n</ng-template>\n\n<!-- Error message summary -->\n<div *ngIf=\"validationErrors.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div *ngFor=\"let validationError of validationErrors\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(validationError.id)\" class=\"validation-error\">{{validationError.message}}</a>\n </li>\n </ul>\n </div>\n</div>\n\n<!-- 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=\"status\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n\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<!-- Event error heading and error message to be displayed if there are specific error details -->\n<div *ngIf=\"error && error.details\" class=\"error-summary\" role=\"status\"\n aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h3 class=\"heading-h3 error-summary-heading\" id=\"edit-case-event_error-summary-heading-3\">\n The event could not be created\n </h3>\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\" class=\"ccd-error-summary-li\">{{fieldError.message}}</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<div class=\"width-50\">\n <form *ngIf=\"currentPage\" class=\"form\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <fieldset id=\"fieldset-case-data\">\n <!-- single column -->\n <ccd-case-edit-form id='caseEditForm' *ngIf=\"!currentPage.isMultiColumn()\" [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"\n [pageChangeSubject]=\"pageChangeSubject\"\n (valuesChanged)=\"applyValuesChanged($event)\"></ccd-case-edit-form>\n <!-- two columns -->\n <div *ngIf=\"currentPage.isMultiColumn()\" class=\"grid-row\">\n <div class=\"column-two-thirds rightBorderSeparator\">\n <ccd-case-edit-form id='caseEditForm1' [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n <div class=\"column-one-third\">\n <ccd-case-edit-form id='caseEditForm2' [fields]=\"currentPage.getCol2Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n </div>\n </fieldset>\n\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!(hasPreviousPage$ | async)\" (click)=\"toPreviousPage()\">\n Previous\n </button>\n <button class=\"button\" type=\"submit\" [disabled]=\"submitting()\">{{triggerText}}</button>\n </div>\n\n <p class=\"cancel\"><a (click)=\"cancel()\" href=\"javascript:void(0)\">{{getCancelText()}}</a></p>\n\n </form>\n</div>\n"
63459
63806
 
63460
63807
  /***/ }),
63461
63808
 
@@ -63518,7 +63865,7 @@ module.exports = "<div *ngIf=\"isDataLoaded()\">\n <ng-container [ngSwitch]=\
63518
63865
  /***/ 80734:
63519
63866
  /***/ ((module) => {
63520
63867
 
63521
- module.exports = "<form>\n <div>\n <cut-alert type=\"information\">This case requires {{accessType | lowercase}} access.<br />\n <ng-container *ngIf=\"accessType === 'CHALLENGED'\">This is because the case is outside your work area. If you request access to the case, it will be logged for auditing purposes.</ng-container>\n <ng-container *ngIf=\"accessType === 'SPECIFIC'\">This means it's outside your jurisdiction and requires authorisation. If you request access to the case, it will be logged for auditing purposes.</ng-container>\n </cut-alert>\n <h1 class=\"heading-h1\">#{{ caseDetails.case_id | ccdCaseReference}}</h1>\n <h2 class=\"govuk-heading-m\">Case details</h2>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.basicFields?.caseNameHmctsInternal\">\n <dt class=\"govuk-summary-list__key summary-key\">Case name</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.basicFields.caseNameHmctsInternal}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.case_type?.jurisdiction?.name\">\n <dt class=\"govuk-summary-list__key summary-key\">Service</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.case_type.jurisdiction.name}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.state?.description\">\n <dt class=\"govuk-summary-list__key summary-key\">State</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.state.description}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"courtOrHearingCentre\">\n <dt class=\"govuk-summary-list__key summary-key\">Court or hearing centre</dt>\n <dd class=\"govuk-summary-list__value\">{{courtOrHearingCentre | titlecase}}</dd>\n </div>\n\n <div class=\"govuk-summary-list__row\" *ngIf=\"accessType\">\n <dt class=\"govuk-summary-list__key summary-key\">Access</dt>\n <dd class=\"govuk-summary-list__value\">{{accessType | titlecase}}</dd>\n </div>\n </dl>\n </div>\n\n <button class=\"govuk-button govuk-!-margin-right-3\">Request access</button>\n</form>\n<a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\">Cancel</a>\n"
63868
+ module.exports = "<div>\n <cut-alert type=\"information\">This case requires {{accessType | lowercase}} access.<br />\n <ng-container *ngIf=\"accessType === 'CHALLENGED'\">This is because the case is outside your work area. If you request access to the case, it will be logged for auditing purposes.</ng-container>\n <ng-container *ngIf=\"accessType === 'SPECIFIC'\">This means it's outside your jurisdiction and requires authorisation. If you request access to the case, it will be logged for auditing purposes.</ng-container>\n </cut-alert>\n <h1 class=\"heading-h1\">#{{ caseDetails.case_id | ccdCaseReference}}</h1>\n <h2 class=\"govuk-heading-m\">Case details</h2>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.basicFields?.caseNameHmctsInternal\">\n <dt class=\"govuk-summary-list__key summary-key\">Case name</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.basicFields.caseNameHmctsInternal}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.case_type?.jurisdiction?.name\">\n <dt class=\"govuk-summary-list__key summary-key\">Service</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.case_type.jurisdiction.name}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.state?.description\">\n <dt class=\"govuk-summary-list__key summary-key\">State</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.state.description}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"courtOrHearingCentre\">\n <dt class=\"govuk-summary-list__key summary-key\">Court or hearing centre</dt>\n <dd class=\"govuk-summary-list__value\">{{courtOrHearingCentre | titlecase}}</dd>\n </div>\n\n <div class=\"govuk-summary-list__row\" *ngIf=\"accessType\">\n <dt class=\"govuk-summary-list__key summary-key\">Access</dt>\n <dd class=\"govuk-summary-list__value\">{{accessType | titlecase}}</dd>\n </div>\n </dl>\n</div>\n<div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" [routerLink]=\"getRequestUrl(accessType)\"> Request access </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\"> Cancel </a>\n </p>\n </div>\n</div>\n"
63522
63869
 
63523
63870
  /***/ }),
63524
63871
 
@@ -63550,6 +63897,13 @@ module.exports = "<!-- Generic error heading and error message to be displayed o
63550
63897
 
63551
63898
  /***/ }),
63552
63899
 
63900
+ /***/ 5856:
63901
+ /***/ ((module) => {
63902
+
63903
+ module.exports = "<exui-error-message\n *ngIf=\"formGroup.invalid && submitted\"\n [error]=\"errorMessage\"></exui-error-message>\n<cut-alert type=\"information\"\n >This case requires specific access.<br />This means it's outside your\n jurisdiction and requires authorisation. If you request access to the case, it\n will be logged for auditing purposes.</cut-alert>\n<form [formGroup]=\"formGroup\" (submit)=\"onSubmit()\">\n <div class=\"govuk-form-group\"\n [ngClass]=\"{ 'form-group-error': formGroup.invalid && submitted }\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"reason-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"govuk-fieldset__heading\">\n {{ title }}\n </h1>\n </legend>\n\n <details class=\"govuk-details\" data-module=\"govuk-details\" role=\"group\">\n <summary\n class=\"govuk-details__summary\"\n role=\"button\"\n aria-expanded=\"false\">\n <span class=\"govuk-details__summary-text\">\n Help with requesting case access\n </span>\n </summary>\n <div\n class=\"govuk-details__text\"\n aria-hidden=\"true\">\n <p class=\"govuk-body\">You could include:</p>\n <ul class=\"govuk-list govuk-list--bullet\">\n <li>the case reference of the linked case</li>\n <li>how long you require access to this case</li>\n <li>any other reasons why you require access</li>\n </ul>\n </div>\n </details>\n\n <div id=\"reason-hint\" class=\"govuk-hint\">\n {{ hint }}\n </div>\n <div id=\"conditional-reason-3\">\n <div class=\"govuk-form-group\">\n <div\n id=\"specific-reason-error-message\"\n class=\"govuk-error-message\"\n *ngIf=\"formGroup.get('specificReason').invalid && submitted\">\n {{ errorMessage.description }}\n </div>\n <textarea\n class=\"govuk-textarea\"\n [ngClass]=\"{\n 'govuk-textarea--error':\n formGroup.get('specificReason').invalid && submitted\n }\"\n id=\"specific-reason\"\n name=\"specific-reason\"\n rows=\"8\"\n formControlName=\"specificReason\">\n </textarea>\n </div>\n </div>\n </fieldset>\n </div>\n \n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" type=\"submit\">\n Submit\n </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\">\n Cancel\n </a>\n </p>\n </div>\n </div>\n</form>\n"
63904
+
63905
+ /***/ }),
63906
+
63553
63907
  /***/ 24288:
63554
63908
  /***/ ((module) => {
63555
63909
 
@@ -63627,6 +63981,13 @@ module.exports = "<form *ngIf=\"triggers && triggers.length\" class=\"event-trig
63627
63981
 
63628
63982
  /***/ }),
63629
63983
 
63984
+ /***/ 31851:
63985
+ /***/ ((module) => {
63986
+
63987
+ module.exports = "<div class=\"spinner-container\">\n <div class=\"spinner-inner-container\">\n <p>{{loadingText}}</p>\n <div class=\"spinner\" style=\"margin: auto;\"></div>\n </div>\n</div>"
63988
+
63989
+ /***/ }),
63990
+
63630
63991
  /***/ 6961:
63631
63992
  /***/ ((module) => {
63632
63993
 
@@ -64302,6 +64663,21 @@ function getStrategyDelay(consecutiveErrorsCount, options) {
64302
64663
  }
64303
64664
 
64304
64665
 
64666
+ /***/ }),
64667
+
64668
+ /***/ 6431:
64669
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
64670
+
64671
+
64672
+ var result = __webpack_require__(68929);
64673
+
64674
+ if (typeof result === "string") {
64675
+ module.exports = result;
64676
+ } else {
64677
+ module.exports = result.toString();
64678
+ }
64679
+
64680
+
64305
64681
  /***/ }),
64306
64682
 
64307
64683
  /***/ 5047: