@hmcts/ccd-case-ui-toolkit 7.3.49-user-by-idam-fixed → 7.3.50-fix-security-issue

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.
package/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # ccd-case-ui-toolkit
2
2
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
3
- [![Build Status](https://travis-ci.org/hmcts/ccd-case-ui-toolkit.svg?branch=master)](https://travis-ci.org/hmcts/ccd-case-ui-toolkit)
4
3
  [![codecov](https://codecov.io/gh/hmcts/ccd-case-ui-toolkit/branch/master/graph/badge.svg)](https://codecov.io/gh/hmcts/ccd-case-ui-toolkit)
5
4
  [![Known Vulnerabilities](https://snyk.io/test/github/hmcts/ccd-case-ui-toolkit/badge.svg)](https://snyk.io/test/github/hmcts/ccd-case-ui-toolkit)
6
5
  [![HitCount](http://hits.dwyl.io/hmcts/ccd-case-ui-toolkit.svg)](#ccd-case-ui-toolkit)
@@ -124,7 +123,6 @@ case-ui-toolkit
124
123
  ├─ .editorconfig - Common IDE configuration
125
124
  ├─ .gitignore - List of files that are ignored while publishing to git repo
126
125
  ├─ .npmignore - List of files that are ignored while publishing to npmjs
127
- ├─ .travis.yml - Travis CI configuration
128
126
  ├─ LICENSE.md - License details
129
127
  ├─ README.md - README for the library
130
128
  ├─ gulpfile.js - Gulp helper scripts
@@ -181,7 +179,6 @@ As a result once you change library source code it will be automatically re-comp
181
179
 
182
180
  ### Library Release
183
181
 
184
- Travis build system automatically publish NPM packages including GitHub releases whenever there is a version change in package.json
185
182
 
186
183
  Prerelease version from PR branch should follow the format as `x.y.z-RDM-xxx-prerelease`
187
184
 
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, DOCUMENT, Injectable, Inject, ChangeDetectorRef, Directive, InjectionToken, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, SecurityContext, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, DOCUMENT, Injectable, Inject, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, SecurityContext, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
3
  import * as i5 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe, CurrencyPipe, formatDate } from '@angular/common';
5
5
  import * as i1 from 'rpx-xui-translation';
@@ -1638,23 +1638,89 @@ class SessionStorageService {
1638
1638
  sessionStorage.clear();
1639
1639
  }
1640
1640
  static ɵfac = function SessionStorageService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionStorageService)(); };
1641
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageService, factory: SessionStorageService.ɵfac });
1641
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageService, factory: SessionStorageService.ɵfac, providedIn: 'root' });
1642
1642
  }
1643
1643
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionStorageService, [{
1644
- type: Injectable
1644
+ type: Injectable,
1645
+ args: [{
1646
+ providedIn: 'root',
1647
+ }]
1645
1648
  }], null, null); })();
1646
1649
 
1650
+ function safeJsonParse(value, fallback = null) {
1651
+ if (!value) {
1652
+ return fallback;
1653
+ }
1654
+ try {
1655
+ return JSON.parse(value);
1656
+ }
1657
+ catch (error) {
1658
+ // Log for diagnostics, then return fallback to avoid UI crashes.
1659
+ // eslint-disable-next-line no-console
1660
+ console.error('safeJsonParse failed to parse JSON', error);
1661
+ return fallback;
1662
+ }
1663
+ }
1664
+
1665
+ const SessionErrorRoute = new InjectionToken('SessionErrorRoute');
1666
+ const SessionJsonErrorLogger = new InjectionToken('SessionJsonErrorLogger');
1667
+ class SessionStorageGuard {
1668
+ sessionStorageService;
1669
+ router;
1670
+ errorRoute;
1671
+ errorLogger;
1672
+ constructor(sessionStorageService, router, errorRoute, errorLogger) {
1673
+ this.sessionStorageService = sessionStorageService;
1674
+ this.router = router;
1675
+ this.errorRoute = errorRoute;
1676
+ this.errorLogger = errorLogger;
1677
+ }
1678
+ canActivate() {
1679
+ const userInfoStr = this.sessionStorageService.getItem('userDetails');
1680
+ if (!userInfoStr) {
1681
+ return true;
1682
+ }
1683
+ const parsed = safeJsonParse(userInfoStr, null);
1684
+ if (parsed !== null) {
1685
+ return true;
1686
+ }
1687
+ const error = new Error('Invalid userDetails in session storage');
1688
+ if (this.errorLogger) {
1689
+ this.errorLogger(error);
1690
+ }
1691
+ else {
1692
+ // eslint-disable-next-line no-console
1693
+ console.error('Invalid userDetails in session storage', error);
1694
+ }
1695
+ this.router.navigate([this.errorRoute || '/session-error']);
1696
+ return false;
1697
+ }
1698
+ static ɵfac = function SessionStorageGuard_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionStorageGuard)(i0.ɵɵinject(SessionStorageService), i0.ɵɵinject(i1$1.Router), i0.ɵɵinject(SessionErrorRoute, 8), i0.ɵɵinject(SessionJsonErrorLogger, 8)); };
1699
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageGuard, factory: SessionStorageGuard.ɵfac, providedIn: 'root' });
1700
+ }
1701
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionStorageGuard, [{
1702
+ type: Injectable,
1703
+ args: [{
1704
+ providedIn: 'root',
1705
+ }]
1706
+ }], () => [{ type: SessionStorageService }, { type: i1$1.Router }, { type: undefined, decorators: [{
1707
+ type: Optional
1708
+ }, {
1709
+ type: Inject,
1710
+ args: [SessionErrorRoute]
1711
+ }] }, { type: SessionJsonErrorLogger, decorators: [{
1712
+ type: Optional
1713
+ }, {
1714
+ type: Inject,
1715
+ args: [SessionJsonErrorLogger]
1716
+ }] }], null); })();
1717
+
1647
1718
  const USER_DETAILS = 'userDetails';
1648
1719
  const PUI_CASE_MANAGER = 'pui-case-manager';
1649
1720
  const JUDGE = 'judge';
1650
1721
  function getUserDetails(sessionStorageService) {
1651
- try {
1652
- const item = sessionStorageService?.getItem(USER_DETAILS);
1653
- return item ? JSON.parse(item) : null;
1654
- }
1655
- catch {
1656
- return null;
1657
- }
1722
+ const item = sessionStorageService?.getItem(USER_DETAILS);
1723
+ return safeJsonParse(item, null);
1658
1724
  }
1659
1725
  function isInternalUser(sessionStorageService) {
1660
1726
  const userDetails = getUserDetails(sessionStorageService);
@@ -1693,8 +1759,11 @@ class ActivityService {
1693
1759
  return error;
1694
1760
  }
1695
1761
  getOptions() {
1696
- const userDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
1697
- const headers = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', userDetails.token);
1762
+ const userDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS));
1763
+ let headers = new HttpHeaders().set('Content-Type', 'application/json');
1764
+ if (userDetails?.token) {
1765
+ headers = headers.set('Authorization', userDetails.token);
1766
+ }
1698
1767
  return {
1699
1768
  headers,
1700
1769
  withCredentials: true,
@@ -4503,11 +4572,8 @@ class FieldsUtils {
4503
4572
  }
4504
4573
  }
4505
4574
  static getUserTaskFromClientContext(clientContextStr) {
4506
- if (clientContextStr) {
4507
- let clientContext = JSON.parse(clientContextStr);
4508
- return clientContext.client_context.user_task;
4509
- }
4510
- return null;
4575
+ const clientContext = safeJsonParse(clientContextStr, null);
4576
+ return clientContext?.client_context?.user_task || null;
4511
4577
  }
4512
4578
  buildCanShowPredicate(eventTrigger, form) {
4513
4579
  const currentState = this.getCurrentEventState(eventTrigger, form);
@@ -5967,17 +6033,15 @@ class FormValueService {
5967
6033
  return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');
5968
6034
  }
5969
6035
  else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {
5970
- return currentForm.map(fieldValue => fieldValue['value']).join(', ');
6036
+ return currentForm.map((fieldValue) => fieldValue.value).join(', ');
5971
6037
  }
5972
6038
  else if (FieldsUtils.isCollection(currentForm)) {
5973
- return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);
6039
+ return this.getFieldValue(currentForm[colIndex].value, fieldIds.slice(1).join('.'), colIndex);
5974
6040
  }
5975
6041
  else if (FieldsUtils.isNonEmptyObject(currentForm)) {
5976
6042
  return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);
5977
6043
  }
5978
- else {
5979
- return currentForm;
5980
- }
6044
+ return currentForm;
5981
6045
  }
5982
6046
  /**
5983
6047
  * A recursive method to remove anything with a `---LABEL` suffix.
@@ -6015,9 +6079,7 @@ class FormValueService {
6015
6079
  if (field.field_type) {
6016
6080
  return field.field_type.type === 'Label';
6017
6081
  }
6018
- else {
6019
- return false;
6020
- }
6082
+ return false;
6021
6083
  }
6022
6084
  static isEmptyData(data) {
6023
6085
  if (data) {
@@ -6064,10 +6126,13 @@ class FormValueService {
6064
6126
  return s;
6065
6127
  }
6066
6128
  filterCurrentPageFields(caseFields, editForm) {
6067
- const cloneForm = JSON.parse(JSON.stringify(editForm));
6068
- Object.keys(cloneForm['data']).forEach((key) => {
6129
+ const cloneForm = {
6130
+ ...(editForm || {}),
6131
+ data: { ...((editForm && editForm.data) || {}) }
6132
+ };
6133
+ Object.keys(cloneForm.data).forEach((key) => {
6069
6134
  if (caseFields.findIndex((element) => element.id === key) < 0) {
6070
- delete cloneForm['data'][key];
6135
+ delete cloneForm.data[key];
6071
6136
  }
6072
6137
  });
6073
6138
  return cloneForm;
@@ -6111,7 +6176,7 @@ class FormValueService {
6111
6176
  if (!rawArray) {
6112
6177
  return rawArray;
6113
6178
  }
6114
- rawArray.forEach(item => {
6179
+ rawArray.forEach((item) => {
6115
6180
  if (item && item.hasOwnProperty('value')) {
6116
6181
  item.value = this.sanitiseValue(item.value, isCaseFlagJourney);
6117
6182
  }
@@ -6120,8 +6185,8 @@ class FormValueService {
6120
6185
  // association of a value. In addition, if the array contains items with a "value" object property, return only
6121
6186
  // those whose value object contains non-empty values, including for any descendant objects
6122
6187
  return rawArray
6123
- .filter(item => !!item)
6124
- .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);
6188
+ .filter((item) => !!item)
6189
+ .filter((item) => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);
6125
6190
  }
6126
6191
  sanitiseValue(rawValue, isCaseFlagJourney = false) {
6127
6192
  if (Array.isArray(rawValue)) {
@@ -6140,7 +6205,7 @@ class FormValueService {
6140
6205
  }
6141
6206
  clearNonCaseFields(data, caseFields) {
6142
6207
  for (const dataKey in data) {
6143
- if (!caseFields.find(cf => cf.id === dataKey)) {
6208
+ if (!caseFields.find((cf) => cf.id === dataKey)) {
6144
6209
  delete data[dataKey];
6145
6210
  }
6146
6211
  }
@@ -6338,7 +6403,7 @@ class FormValueService {
6338
6403
  */
6339
6404
  removeCaseFieldsOfType(data, caseFields, types) {
6340
6405
  if (data && caseFields && caseFields.length > 0 && types.length > 0) {
6341
- const caseFieldsToRemove = caseFields.filter(caseField => FieldsUtils.isCaseFieldOfType(caseField, types));
6406
+ const caseFieldsToRemove = caseFields.filter((caseField) => FieldsUtils.isCaseFieldOfType(caseField, types));
6342
6407
  for (const caseField of caseFieldsToRemove) {
6343
6408
  delete data[caseField.id];
6344
6409
  }
@@ -6357,10 +6422,10 @@ class FormValueService {
6357
6422
  */
6358
6423
  repopulateFormDataFromCaseFieldValues(data, caseFields) {
6359
6424
  if (data && caseFields && caseFields.length > 0 &&
6360
- caseFields.findIndex(caseField => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6425
+ caseFields.findIndex((caseField) => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6361
6426
  // Ignore the FlagLauncher CaseField because it does not hold any values
6362
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6363
- .forEach(caseField => {
6427
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6428
+ .forEach((caseField) => {
6364
6429
  // Ensure that the data object is populated for all CaseField keys it contains, even if for a given
6365
6430
  // CaseField key, the data object has a falsy value (hence the use of hasOwnProperty() for the check below)
6366
6431
  // See https://tools.hmcts.net/jira/browse/EUI-7377
@@ -6392,8 +6457,8 @@ class FormValueService {
6392
6457
  */
6393
6458
  populateLinkedCasesDetailsFromCaseFields(data, caseFields) {
6394
6459
  if (data && caseFields && caseFields.length > 0) {
6395
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6396
- .forEach(caseField => {
6460
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6461
+ .forEach((caseField) => {
6397
6462
  if (data.hasOwnProperty('caseLinks') && caseField.value) {
6398
6463
  data[caseField.id] = caseField.value;
6399
6464
  }
@@ -8849,10 +8914,10 @@ class CaseworkerService {
8849
8914
  this.appConfig = appConfig;
8850
8915
  this.errorService = errorService;
8851
8916
  }
8852
- getUserByIdamId(idamId) {
8853
- const url = `${this.appConfig.getWorkAllocationApiUrl()}/caseworker/getUserByIdamId`;
8917
+ getCaseworkers(serviceId) {
8918
+ const url = `${this.appConfig.getWorkAllocationApiUrl()}/caseworker/getUsersByServiceName`;
8854
8919
  return this.http
8855
- .post(url, idamId)
8920
+ .post(url, { services: [serviceId] })
8856
8921
  .pipe(catchError(error => {
8857
8922
  this.errorService.setError(error);
8858
8923
  return throwError(error);
@@ -9535,7 +9600,7 @@ class CaseEditComponent {
9535
9600
  ngOnInit() {
9536
9601
  this.wizard = this.wizardFactory.create(this.eventTrigger);
9537
9602
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
9538
- this.isPageRefreshed = JSON.parse(this.sessionStorageService.getItem('isPageRefreshed'));
9603
+ this.isPageRefreshed = safeJsonParse(this.sessionStorageService.getItem('isPageRefreshed'), false);
9539
9604
  this.checkPageRefresh();
9540
9605
  this.form = this.fb.group({
9541
9606
  data: new FormGroup({}),
@@ -9659,15 +9724,11 @@ class CaseEditComponent {
9659
9724
  const taskEventCompletionStr = this.sessionStorageService.getItem(CaseEditComponent.TASK_EVENT_COMPLETION_INFO);
9660
9725
  const userInfoStr = this.sessionStorageService.getItem('userDetails');
9661
9726
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded');
9662
- if (taskEventCompletionStr) {
9663
- taskEventCompletionInfo = JSON.parse(taskEventCompletionStr);
9664
- }
9665
- if (userInfoStr) {
9666
- userInfo = JSON.parse(userInfoStr);
9667
- }
9727
+ taskEventCompletionInfo = safeJsonParse(taskEventCompletionStr, null);
9728
+ userInfo = safeJsonParse(userInfoStr, null);
9668
9729
  const eventId = this.getEventId(form);
9669
9730
  const caseId = this.getCaseId(caseDetails);
9670
- const userId = userInfo.id ? userInfo.id : userInfo.uid;
9731
+ const userId = userInfo?.id ? userInfo.id : userInfo?.uid;
9671
9732
  const eventDetails = { eventId, caseId, userId, assignNeeded };
9672
9733
  if (this.taskExistsForThisEvent(taskInSessionStorage, taskEventCompletionInfo, eventDetails)) {
9673
9734
  this.abstractConfig.logMessage(`task ${taskInSessionStorage?.id} exist for this event for caseId and eventId as ${caseId} ${eventId}`);
@@ -10029,7 +10090,7 @@ class CaseEditComponent {
10029
10090
  }], submitted: [{
10030
10091
  type: Output
10031
10092
  }] }); })();
10032
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 38 }); })();
10093
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 39 }); })();
10033
10094
 
10034
10095
  function convertNonASCIICharacter(character) {
10035
10096
  if (character === '£') {
@@ -12088,6 +12149,42 @@ class CallbackErrorsComponent {
12088
12149
  }] }); })();
12089
12150
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CallbackErrorsComponent, { className: "CallbackErrorsComponent", filePath: "lib/shared/components/error/callback-errors.component.ts", lineNumber: 11 }); })();
12090
12151
 
12152
+ class SessionErrorPageComponent {
12153
+ title = 'There is a problem with your session';
12154
+ primaryMessage = 'Go to landing page. Refreshing the page. If the problem persists, sign out and sign in again.';
12155
+ secondaryMessage = 'If you still cannot access the service, clear your browser data for this website.';
12156
+ static ɵfac = function SessionErrorPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionErrorPageComponent)(); };
12157
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SessionErrorPageComponent, selectors: [["ccd-session-error-page"]], inputs: { title: "title", primaryMessage: "primaryMessage", secondaryMessage: "secondaryMessage" }, decls: 10, vars: 3, consts: [[1, "govuk-width-container"], ["id", "content", "role", "main", 1, "govuk-main-wrapper", "govuk-main-wrapper--l"], [1, "govuk-grid-row"], [1, "govuk-grid-column-two-thirds"], [1, "govuk-heading-xl"], [1, "govuk-body"]], template: function SessionErrorPageComponent_Template(rf, ctx) { if (rf & 1) {
12158
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "main", 1)(2, "div", 2)(3, "div", 3)(4, "h1", 4);
12159
+ i0.ɵɵtext(5);
12160
+ i0.ɵɵdomElementEnd();
12161
+ i0.ɵɵdomElementStart(6, "p", 5);
12162
+ i0.ɵɵtext(7);
12163
+ i0.ɵɵdomElementEnd();
12164
+ i0.ɵɵdomElementStart(8, "p", 5);
12165
+ i0.ɵɵtext(9);
12166
+ i0.ɵɵdomElementEnd()()()()();
12167
+ } if (rf & 2) {
12168
+ i0.ɵɵadvance(5);
12169
+ i0.ɵɵtextInterpolate(ctx.title);
12170
+ i0.ɵɵadvance(2);
12171
+ i0.ɵɵtextInterpolate(ctx.primaryMessage);
12172
+ i0.ɵɵadvance(2);
12173
+ i0.ɵɵtextInterpolate(ctx.secondaryMessage);
12174
+ } }, dependencies: [CommonModule], encapsulation: 2 });
12175
+ }
12176
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionErrorPageComponent, [{
12177
+ type: Component,
12178
+ args: [{ selector: 'ccd-session-error-page', standalone: true, imports: [CommonModule], template: "<div class=\"govuk-width-container\">\n <main class=\"govuk-main-wrapper govuk-main-wrapper--l\" id=\"content\" role=\"main\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">{{ title }}</h1>\n <p class=\"govuk-body\">{{ primaryMessage }}</p>\n <p class=\"govuk-body\">{{ secondaryMessage }}</p>\n </div>\n </div>\n </main>\n</div>\n" }]
12179
+ }], null, { title: [{
12180
+ type: Input
12181
+ }], primaryMessage: [{
12182
+ type: Input
12183
+ }], secondaryMessage: [{
12184
+ type: Input
12185
+ }] }); })();
12186
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SessionErrorPageComponent, { className: "SessionErrorPageComponent", filePath: "lib/shared/components/error/session-error-page.component.ts", lineNumber: 10 }); })();
12187
+
12091
12188
  function CaseEventCompletionComponent_app_case_event_completion_task_cancelled_0_Template(rf, ctx) { if (rf & 1) {
12092
12189
  const _r1 = i0.ɵɵgetCurrentView();
12093
12190
  i0.ɵɵelementStart(0, "app-case-event-completion-task-cancelled", 2);
@@ -12351,9 +12448,12 @@ class CaseEventCompletionTaskReassignedComponent {
12351
12448
  this.jurisdiction = task.jurisdiction;
12352
12449
  this.caseType = task.case_type_id;
12353
12450
  // Current user is a caseworker?
12354
- this.caseworkerSubscription = this.caseworkerService.getUserByIdamId(task.assignee).subscribe(caseworker => {
12355
- if (caseworker) {
12356
- this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
12451
+ this.caseworkerSubscription = this.caseworkerService.getCaseworkers(task.jurisdiction).subscribe(result => {
12452
+ if (result && result[0].service === task.jurisdiction && result[0].caseworkers) {
12453
+ const caseworker = result[0].caseworkers.find(x => x.idamId === task.assignee);
12454
+ if (caseworker) {
12455
+ this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
12456
+ }
12357
12457
  }
12358
12458
  if (!this.assignedUserName) {
12359
12459
  // Current user is a judicial user?
@@ -13336,9 +13436,10 @@ class CaseFileViewFieldComponent {
13336
13436
  error: _ => this.getCategoriesAndDocumentsError = true
13337
13437
  });
13338
13438
  // EXUI-8000
13339
- const userInfo = JSON.parse(this.sessionStorageService.getItem('userDetails'));
13439
+ const userInfo = safeJsonParse(this.sessionStorageService.getItem('userDetails'), null);
13440
+ const userRoles = userInfo?.roles || [];
13340
13441
  // Get acls that intersects from acl roles and user roles
13341
- const acls = this.caseField.acls.filter(acl => userInfo.roles.includes(acl.role));
13442
+ const acls = this.caseField.acls.filter(acl => userRoles.includes(acl.role));
13342
13443
  // As there can be more than one intersecting role, if any acls are update: true
13343
13444
  this.allowMoving = acls.some(acl => acl.update);
13344
13445
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
@@ -13429,7 +13530,7 @@ class CaseFileViewFieldComponent {
13429
13530
  type: Component,
13430
13531
  args: [{ selector: 'ccd-case-file-view-field', standalone: false, template: "<ng-container *ngIf=\"errorMessages?.length\">\n <div\n id=\"case-file-view-field-errors\"\n class=\"govuk-error-summary govuk-!-margin-bottom-4\"\n data-module=\"govuk-error-summary\"\n >\n <div role=\"alert\">\n <h2 class=\"govuk-error-summary__title\">There is a problem</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <button type=\"button\" class=\"govuk-js-link\">{{ errorMessage }}</button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"getCategoriesAndDocumentsError\"\n class=\"govuk-grid-column-two-thirds\"\n>\n <h1 class=\"govuk-heading-xl\">Sorry, there is a problem with the service</h1>\n <p class=\"govuk-body\">Try again later.</p>\n</div>\n<div *ngIf=\"!getCategoriesAndDocumentsError\">\n <h2 class=\"govuk-heading-l\">Case file</h2>\n <div class=\"govuk-form-group\" id=\"case-file-view\">\n <!-- Document tree -->\n <div class=\"document-tree-container\">\n <ccd-case-file-view-folder \n class=\"document-tree-container__tree\"\n [categoriesAndDocuments]=\"categoriesAndDocuments$\"\n (clickedDocument)=\"setMediaViewerFile($event); resetErrorMessages()\" \n (moveDocument)=\"moveDocument($event)\"\n [allowMoving]=\"allowMoving\">\n </ccd-case-file-view-folder>\n </div>\n <!-- Slider -->\n <div class=\"slider\"></div>\n <!-- Media viewer -->\n <div class=\"media-viewer-container\">\n <ng-container *ngIf=\"currentDocument\">\n <mv-media-viewer\n [url]=\"currentDocument.document_binary_url\"\n [downloadFileName]=\"currentDocument.document_filename\"\n [showToolbar]=\"true\"\n [contentType]=\"currentDocument.content_type\"\n [enableAnnotations]=\"true\"\n [enableRedactions]=\"true\"\n [height]=\"'94.5vh'\"\n [caseId]=\"caseId\"\n [multimediaPlayerEnabled]=\"true\"\n [enableICP]=\"isIcpEnabled()\"\n >\n </mv-media-viewer>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: ["#case-file-view{display:flex;border:2px solid #C9C9C9;height:100vh;position:relative}#case-file-view .document-tree-container{background-color:#faf8f8;width:30%;min-height:400px;min-width:10%}#case-file-view .slider{width:.2%;background-color:#6b6b6b}#case-file-view .slider:hover,#case-file-view .slider:focus{cursor:col-resize}#case-file-view .media-viewer-container{background-color:#dee0e2;flex:1 1 0;overflow:hidden}\n"] }]
13431
13532
  }], () => [{ type: i0.ElementRef }, { type: i1$1.ActivatedRoute }, { type: CaseFileViewService }, { type: DocumentManagementService }, { type: LoadingService }, { type: SessionStorageService }, { type: WindowService }, { type: CaseNotifier }, { type: AbstractAppConfig }], null); })();
13432
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 18 }); })();
13533
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 19 }); })();
13433
13534
 
13434
13535
  const PVP_FLAG_CODE = 'PF0021';
13435
13536
  const PVP_DISPLAY_TEXT = 'POTENTIALLY VIOLENT PERSON';
@@ -20777,14 +20878,14 @@ class PaymentField extends AbstractFieldReadComponent {
20777
20878
  return this.appConfig.getNotificationUrl();
20778
20879
  }
20779
20880
  getUserRoles() {
20780
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20881
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20781
20882
  if (!userDetails || !userDetails.hasOwnProperty('roles')) {
20782
20883
  return [];
20783
20884
  }
20784
20885
  return userDetails.roles;
20785
20886
  }
20786
20887
  getUserEmail() {
20787
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20888
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20788
20889
  if (!userDetails || !userDetails.hasOwnProperty('sub')) {
20789
20890
  return '';
20790
20891
  }
@@ -21510,7 +21611,7 @@ class QueryManagementService {
21510
21611
  ) {
21511
21612
  let currentUserDetails;
21512
21613
  try {
21513
- currentUserDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
21614
+ currentUserDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), {});
21514
21615
  }
21515
21616
  catch (e) {
21516
21617
  console.error('Could not parse USER_DETAILS from session storage:', e);
@@ -30469,7 +30570,9 @@ class EventLogTableComponent {
30469
30570
  }
30470
30571
  ngOnInit() {
30471
30572
  this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;
30472
- this.isUserExternal = JSON.parse(this.sessionStorage.getItem('userDetails')).roles.includes('pui-case-manager');
30573
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
30574
+ const roles = userDetails?.roles || [];
30575
+ this.isUserExternal = roles.includes('pui-case-manager');
30473
30576
  }
30474
30577
  select(event) {
30475
30578
  this.selected = event;
@@ -30558,7 +30661,7 @@ class EventLogTableComponent {
30558
30661
  }], onCaseHistory: [{
30559
30662
  type: Output
30560
30663
  }] }); })();
30561
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 12 }); })();
30664
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 13 }); })();
30562
30665
 
30563
30666
  function EventLogComponent_ccd_event_log_table_3_Template(rf, ctx) { if (rf & 1) {
30564
30667
  const _r1 = i0.ɵɵgetCurrentView();
@@ -35340,7 +35443,7 @@ class CaseResolver {
35340
35443
  // as discussed for EUI-5456, need functionality to go to default page
35341
35444
  goToDefaultPage() {
35342
35445
  console.info('Going to default page!');
35343
- const userDetails = JSON.parse(this.sessionStorage.getItem(USER_DETAILS));
35446
+ const userDetails = safeJsonParse(this.sessionStorage.getItem(USER_DETAILS));
35344
35447
  userDetails && userDetails.roles
35345
35448
  && !userDetails.roles.includes(PUI_CASE_MANAGER)
35346
35449
  &&
@@ -35393,7 +35496,7 @@ class EventTriggerResolver {
35393
35496
  const query = route.queryParams;
35394
35497
  // If jurisdiction or caseType are missing, redirect to correct URL
35395
35498
  if (!jurisdiction || !caseType) {
35396
- const caseInfo = JSON.parse(this.sessionStorageService.getItem('caseInfo') || '{}');
35499
+ const caseInfo = safeJsonParse(this.sessionStorageService.getItem('caseInfo'), {});
35397
35500
  const jurisdictionId = caseInfo?.jurisdiction;
35398
35501
  const caseTypeId = caseInfo?.caseType;
35399
35502
  const caseId = caseInfo?.caseId;
@@ -37376,9 +37479,12 @@ class TaskAssignedComponent {
37376
37479
  // Current user is a caseworker?
37377
37480
  this.jurisdiction = this.task.jurisdiction;
37378
37481
  this.caseType = this.task.case_type_id;
37379
- this.caseworkerSubscription = this.caseworkerService.getUserByIdamId(this.task.assignee).subscribe(caseworker => {
37380
- if (caseworker) {
37381
- this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
37482
+ this.caseworkerSubscription = this.caseworkerService.getCaseworkers(this.task.jurisdiction).subscribe(result => {
37483
+ if (result && result[0].service === this.task.jurisdiction && result[0].caseworkers) {
37484
+ const caseworker = result[0].caseworkers.find(x => x.idamId === this.task.assignee);
37485
+ if (caseworker) {
37486
+ this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
37487
+ }
37382
37488
  }
37383
37489
  if (!this.assignedUserName) {
37384
37490
  // Current user is a judicial user?
@@ -39667,7 +39773,7 @@ class CreateCaseFiltersComponent {
39667
39773
  return events.filter(event => event.pre_states.length === 0);
39668
39774
  }
39669
39775
  retainEventsWithCreateRights(events) {
39670
- const userProfile = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
39776
+ const userProfile = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), null);
39671
39777
  return events.filter(event => userProfile && userProfile.roles &&
39672
39778
  !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));
39673
39779
  }
@@ -39805,7 +39911,7 @@ class CreateCaseFiltersComponent {
39805
39911
  }], selectionChanged: [{
39806
39912
  type: Output
39807
39913
  }] }); })();
39808
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 19 }); })();
39914
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 20 }); })();
39809
39915
 
39810
39916
  class CreateCaseFiltersModule {
39811
39917
  static ɵfac = function CreateCaseFiltersModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CreateCaseFiltersModule)(); };
@@ -41426,5 +41532,5 @@ class TestRouteSnapshotBuilder {
41426
41532
  * Generated bundle index. Do not edit.
41427
41533
  */
41428
41534
 
41429
- export { AbstractAppConfig, AbstractFieldReadComponent, AbstractFieldWriteComponent, AbstractFieldWriteJourneyComponent, AbstractJourneyComponent, Activity, ActivityBannerComponent, ActivityComponent, ActivityIconComponent, ActivityInfo, ActivityModule, ActivityPollingService, ActivityService, AddCommentsComponent, AddCommentsErrorMessage, AddCommentsStep, AddressModel, AddressOption, AddressesService, Alert, AlertComponent, AlertIconClassPipe, AlertMessageType, AlertModule, AlertService, AuthService, Banner, BannersService, BeforeYouStartComponent, BodyComponent, BrowserService, CCDCaseLinkType, COMPONENT_PORTAL_INJECTION_TOKEN, CallbackErrorsComponent, CallbackErrorsContext, CaseAccessUtils, CaseBasicAccessViewComponent, CaseChallengedAccessRequestComponent, CaseChallengedAccessSuccessComponent, CaseCreateComponent, CaseDetails, CaseEditComponent, CaseEditConfirmComponent, CaseEditDataModule, CaseEditDataService, CaseEditFormComponent, CaseEditPageComponent, CaseEditSubmitComponent, CaseEditWizardGuard, CaseEditorConfig, CaseEditorModule, CaseEvent, CaseEventCompletionComponent, CaseEventCompletionTaskCancelledComponent, CaseEventCompletionTaskReassignedComponent, CaseEventData, CaseEventTrigger, CaseEventTriggerComponent, CaseField, CaseFieldService, CaseFileViewFieldComponent, CaseFileViewFolderComponent, CaseFileViewFolderDocumentActionsComponent, CaseFileViewFolderSelectorComponent, CaseFileViewFolderSortComponent, CaseFileViewFolderToggleComponent, CaseFileViewOverlayMenuComponent, CaseFileViewService, CaseFlagCheckYourAnswersPageStep, CaseFlagDisplayContextParameter, CaseFlagErrorMessage, CaseFlagFieldState, CaseFlagFormFields, CaseFlagRefdataService, CaseFlagStatus, CaseFlagSummaryListComponent, CaseFlagSummaryListDisplayMode, CaseFlagTableComponent, CaseFlagWizardStepTitle, CaseFullAccessViewComponent, CaseHeaderComponent, CaseHeaderModule, CaseHistoryViewerFieldComponent, CaseLink, CaseLinkResponse, CaseListComponent, CaseListFiltersComponent, CaseListFiltersModule, CaseListModule, CaseNotifier, CasePaymentHistoryViewerFieldComponent, CasePrintDocument, CasePrinterComponent, CaseProgressComponent, CaseReferencePipe, CaseResolver, CaseSpecificAccessRequestComponent, CaseSpecificAccessSuccessComponent, CaseState, CaseTab, CaseTimelineComponent, CaseTimelineDisplayMode, CaseTimelineModule, CaseType, CaseTypeLite, CaseView, CaseViewComponent, CaseViewEvent, CaseViewTrigger, CaseViewerComponent, CaseViewerModule, CasesService, CaseworkerService, CcdCYAPageLabelFilterPipe, CcdCaseTitlePipe, CcdCollectionTableCaseFieldsFilterPipe, CcdPageFieldsPipe, CcdTabFieldsPipe, CheckYourAnswersComponent, CloseQueryComponent, ConditionalShowFormDirective, ConditionalShowModule, ConditionalShowRegistrarService, ConfirmFlagStatusComponent, ConfirmStatusErrorMessage, ConfirmStatusStep, Confirmation, ConvertHrefToRouterService, CreateCaseFiltersComponent, CreateCaseFiltersModule, CreateCaseFiltersSelection, DRAFT_PREFIX, DRAFT_QUERY_PARAM, DashPipe, DateInputComponent, DatePipe, DateTimeFormatUtils, DatetimePickerComponent, DefinitionsModule, DefinitionsService, DeleteOrCancelDialogComponent, DialogsModule, DisplayMode, Document, DocumentData, DocumentDialogComponent, DocumentLinks, DocumentManagementService, DocumentUrlPipe, Draft, DraftService, DynamicListPipe, DynamicRadioListPipe, ESQueryType, Embedded, EnumDisplayDescriptionPipe, ErrorMessageComponent, ErrorNotifierService, EventCaseField, EventCompletionReturnStates, EventCompletionStateMachineService, EventCompletionStates, EventLogComponent, EventLogDetailsComponent, EventLogTableComponent, EventMessageModule, EventStartComponent, EventStartModule, EventStartStateMachineService, EventStatusService, EventTriggerResolver, EventTriggerService, Fee, FeeValue, Field, FieldLabelPipe, FieldReadComponent, FieldReadLabelComponent, FieldType, FieldTypeSanitiser, FieldWriteComponent, FieldsFilterPipe, FieldsPurger, FieldsUtils, FirstErrorPipe, FixedListItem, FixedListPipe, FixedRadioListPipe, FlagFieldDisplayPipe, FocusElementDirective, FocusElementModule, FooterComponent, FormDocument, FormErrorService, FormValidatorsService, FormValueService, FormatTranslatorService, GreyBarService, HRef, HeaderBarComponent, HeadersModule, HttpError, HttpErrorService, HttpService, IsCompoundPipe, IsMandatoryPipe, IsReadOnlyAndNotCollectionPipe, IsReadOnlyPipe, JudicialworkerService, Jurisdiction, JurisdictionService, LabelFieldComponent, LabelSubstitutorDirective, LabelSubstitutorModule, LanguageInterpreterDisplayPipe, LinkCaseReason, LinkCasesComponent, LinkCasesFromReasonValuePipe, LinkCasesReasonValuePipe, LinkDetails, LinkFromReason, LinkReason, LinkedCasesErrorMessages, LinkedCasesEventTriggers, LinkedCasesFromTableComponent, LinkedCasesPages, LinkedCasesResponse, LinkedCasesToTableComponent, LoadingModule, LoadingService, LoadingSpinnerComponent, LoadingSpinnerModule, MEDIA_VIEWER_LOCALSTORAGE_KEY, MULTIPLE_TASKS_FOUND, ManageCaseFlagsComponent, ManageCaseFlagsLabelDisplayPipe, MarkdownComponent, MarkdownComponentModule, MoneyGbpInputComponent, MultipageComponentStateService, MultipleTasksExistComponent, NavigationComponent, NavigationItemComponent, NavigationNotifierService, NavigationOrigin, NoLinkedCasesComponent, NoTasksAvailableComponent, NotificationBannerComponent, NotificationBannerHeaderClass, NotificationBannerType, OrderService, OrderSummary, OrganisationConverter, OrganisationService, PageValidationService, PaginationComponent, PaginationMetadata, PaginationModule, PaletteContext, PaletteModule, PaletteService, PaletteUtilsModule, Patterns, PaymentField, PhaseComponent, PipesModule, PlaceholderService, PrintUrlPipe, Profile, ProfileNotifier, ProfileService, QualifyingQuestionDetailComponent, QualifyingQuestionOptionsComponent, QualifyingQuestionService, QualifyingQuestionsErrorMessage, QueryAttachmentsReadComponent, QueryCaseDetailsHeaderComponent, QueryCheckYourAnswersComponent, QueryConfirmationComponent, QueryCreateContext, QueryDetailsComponent, QueryEventCompletionComponent, QueryItemResponseStatus, QueryListComponent, QueryListData, QueryListItem, QueryManagementService, QueryWriteAddDocumentsComponent, QueryWriteDateInputComponent, QueryWriteRaiseQueryComponent, QueryWriteRespondToQueryComponent, RaiseQueryErrorMessage, ReadCaseFlagFieldComponent, ReadCaseLinkFieldComponent, ReadCollectionFieldComponent, ReadComplexFieldCollectionTableComponent, ReadComplexFieldComponent, ReadComplexFieldRawComponent, ReadComplexFieldTableComponent, ReadCookieService, ReadDateFieldComponent, ReadDocumentFieldComponent, ReadDynamicListFieldComponent, ReadDynamicMultiSelectListFieldComponent, ReadDynamicRadioListFieldComponent, ReadEmailFieldComponent, ReadFieldsFilterPipe, ReadFixedListFieldComponent, ReadFixedRadioListFieldComponent, ReadJudicialUserFieldComponent, ReadLinkedCasesFieldComponent, ReadMoneyGbpFieldComponent, ReadMultiSelectListFieldComponent, ReadNumberFieldComponent, ReadOrderSummaryFieldComponent, ReadOrderSummaryRowComponent, ReadOrganisationFieldComponent, ReadOrganisationFieldRawComponent, ReadOrganisationFieldTableComponent, ReadPhoneUKFieldComponent, ReadQueryManagementFieldComponent, ReadTextAreaFieldComponent, ReadTextFieldComponent, ReadYesNoFieldComponent, RefdataCaseFlagType, RemoveDialogComponent, RequestOptionsBuilder, RespondToQueryErrorMessages, RetryUtil, RouterHelperService, RouterLinkComponent, SaveOrDiscardDialogComponent, SearchFiltersComponent, SearchFiltersModule, SearchFiltersWrapperComponent, SearchInput, SearchLanguageInterpreterComponent, SearchLanguageInterpreterErrorMessage, SearchLanguageInterpreterStep, SearchResultComponent, SearchResultModule, SearchResultView, SearchResultViewColumn, SearchResultViewItem, SearchResultViewItemComparatorFactory, SearchService, SelectFlagErrorMessage, SelectFlagLocationComponent, SelectFlagLocationErrorMessage, SelectFlagTypeComponent, SelectFlagTypeErrorMessage, SessionStorageService, ShowCondition, SortOrder$1 as SortOrder, SortParameters, SortSearchResultPipe, TabComponent, TableColumnConfig, TableConfig, TabsComponent, TabsModule, TaskAssignedComponent, TaskCancelledComponent, TaskConflictComponent, TaskUnassignedComponent, Terms, TestRouteSnapshotBuilder, TranslatedMarkdownDirective, TranslatedMarkdownModule, UnLinkCasesComponent, UnsupportedFieldComponent, UpdateFlagAddTranslationErrorMessage, UpdateFlagAddTranslationFormComponent, UpdateFlagAddTranslationStep, UpdateFlagComponent, UpdateFlagErrorMessage, UpdateFlagStep, UpdateFlagTitleDisplayPipe, WaysToPayFieldComponent, WindowService, Wizard, WizardFactoryService, WizardPage, WizardPageField, WorkAllocationService, WorkbasketFiltersComponent, WorkbasketFiltersModule, WorkbasketInput, WorkbasketInputFilterService, WorkbasketInputModel, WriteAddressFieldComponent, WriteCaseFlagFieldComponent, WriteCaseLinkFieldComponent, WriteCollectionFieldComponent, WriteComplexFieldComponent, WriteDateContainerFieldComponent, WriteDateFieldComponent, WriteDocumentFieldComponent, WriteDynamicListFieldComponent, WriteDynamicMultiSelectListFieldComponent, WriteDynamicRadioListFieldComponent, WriteEmailFieldComponent, WriteFixedListFieldComponent, WriteFixedRadioListFieldComponent, WriteJudicialUserFieldComponent, WriteLinkedCasesFieldComponent, WriteMoneyGbpFieldComponent, WriteMultiSelectListFieldComponent, WriteNumberFieldComponent, WriteOrderSummaryFieldComponent, WriteOrganisationComplexFieldComponent, WriteOrganisationFieldComponent, WritePhoneUKFieldComponent, WriteTextAreaFieldComponent, WriteTextFieldComponent, WriteYesNoFieldComponent, YesNoService, aCaseField, caseMessagesMockData, createACL, createCaseEventTrigger, createCaseField, createComplexFieldOverride, createFieldType, createFixedListFieldType, createHiddenComplexFieldOverride, createMultiSelectListFieldType, createWizardPage, createWizardPageField, editorRouting, initDialog, newCaseField, textFieldType, viewerRouting };
41535
+ export { AbstractAppConfig, AbstractFieldReadComponent, AbstractFieldWriteComponent, AbstractFieldWriteJourneyComponent, AbstractJourneyComponent, Activity, ActivityBannerComponent, ActivityComponent, ActivityIconComponent, ActivityInfo, ActivityModule, ActivityPollingService, ActivityService, AddCommentsComponent, AddCommentsErrorMessage, AddCommentsStep, AddressModel, AddressOption, AddressesService, Alert, AlertComponent, AlertIconClassPipe, AlertMessageType, AlertModule, AlertService, AuthService, Banner, BannersService, BeforeYouStartComponent, BodyComponent, BrowserService, CCDCaseLinkType, COMPONENT_PORTAL_INJECTION_TOKEN, CallbackErrorsComponent, CallbackErrorsContext, CaseAccessUtils, CaseBasicAccessViewComponent, CaseChallengedAccessRequestComponent, CaseChallengedAccessSuccessComponent, CaseCreateComponent, CaseDetails, CaseEditComponent, CaseEditConfirmComponent, CaseEditDataModule, CaseEditDataService, CaseEditFormComponent, CaseEditPageComponent, CaseEditSubmitComponent, CaseEditWizardGuard, CaseEditorConfig, CaseEditorModule, CaseEvent, CaseEventCompletionComponent, CaseEventCompletionTaskCancelledComponent, CaseEventCompletionTaskReassignedComponent, CaseEventData, CaseEventTrigger, CaseEventTriggerComponent, CaseField, CaseFieldService, CaseFileViewFieldComponent, CaseFileViewFolderComponent, CaseFileViewFolderDocumentActionsComponent, CaseFileViewFolderSelectorComponent, CaseFileViewFolderSortComponent, CaseFileViewFolderToggleComponent, CaseFileViewOverlayMenuComponent, CaseFileViewService, CaseFlagCheckYourAnswersPageStep, CaseFlagDisplayContextParameter, CaseFlagErrorMessage, CaseFlagFieldState, CaseFlagFormFields, CaseFlagRefdataService, CaseFlagStatus, CaseFlagSummaryListComponent, CaseFlagSummaryListDisplayMode, CaseFlagTableComponent, CaseFlagWizardStepTitle, CaseFullAccessViewComponent, CaseHeaderComponent, CaseHeaderModule, CaseHistoryViewerFieldComponent, CaseLink, CaseLinkResponse, CaseListComponent, CaseListFiltersComponent, CaseListFiltersModule, CaseListModule, CaseNotifier, CasePaymentHistoryViewerFieldComponent, CasePrintDocument, CasePrinterComponent, CaseProgressComponent, CaseReferencePipe, CaseResolver, CaseSpecificAccessRequestComponent, CaseSpecificAccessSuccessComponent, CaseState, CaseTab, CaseTimelineComponent, CaseTimelineDisplayMode, CaseTimelineModule, CaseType, CaseTypeLite, CaseView, CaseViewComponent, CaseViewEvent, CaseViewTrigger, CaseViewerComponent, CaseViewerModule, CasesService, CaseworkerService, CcdCYAPageLabelFilterPipe, CcdCaseTitlePipe, CcdCollectionTableCaseFieldsFilterPipe, CcdPageFieldsPipe, CcdTabFieldsPipe, CheckYourAnswersComponent, CloseQueryComponent, ConditionalShowFormDirective, ConditionalShowModule, ConditionalShowRegistrarService, ConfirmFlagStatusComponent, ConfirmStatusErrorMessage, ConfirmStatusStep, Confirmation, ConvertHrefToRouterService, CreateCaseFiltersComponent, CreateCaseFiltersModule, CreateCaseFiltersSelection, DRAFT_PREFIX, DRAFT_QUERY_PARAM, DashPipe, DateInputComponent, DatePipe, DateTimeFormatUtils, DatetimePickerComponent, DefinitionsModule, DefinitionsService, DeleteOrCancelDialogComponent, DialogsModule, DisplayMode, Document, DocumentData, DocumentDialogComponent, DocumentLinks, DocumentManagementService, DocumentUrlPipe, Draft, DraftService, DynamicListPipe, DynamicRadioListPipe, ESQueryType, Embedded, EnumDisplayDescriptionPipe, ErrorMessageComponent, ErrorNotifierService, EventCaseField, EventCompletionReturnStates, EventCompletionStateMachineService, EventCompletionStates, EventLogComponent, EventLogDetailsComponent, EventLogTableComponent, EventMessageModule, EventStartComponent, EventStartModule, EventStartStateMachineService, EventStatusService, EventTriggerResolver, EventTriggerService, Fee, FeeValue, Field, FieldLabelPipe, FieldReadComponent, FieldReadLabelComponent, FieldType, FieldTypeSanitiser, FieldWriteComponent, FieldsFilterPipe, FieldsPurger, FieldsUtils, FirstErrorPipe, FixedListItem, FixedListPipe, FixedRadioListPipe, FlagFieldDisplayPipe, FocusElementDirective, FocusElementModule, FooterComponent, FormDocument, FormErrorService, FormValidatorsService, FormValueService, FormatTranslatorService, GreyBarService, HRef, HeaderBarComponent, HeadersModule, HttpError, HttpErrorService, HttpService, IsCompoundPipe, IsMandatoryPipe, IsReadOnlyAndNotCollectionPipe, IsReadOnlyPipe, JudicialworkerService, Jurisdiction, JurisdictionService, LabelFieldComponent, LabelSubstitutorDirective, LabelSubstitutorModule, LanguageInterpreterDisplayPipe, LinkCaseReason, LinkCasesComponent, LinkCasesFromReasonValuePipe, LinkCasesReasonValuePipe, LinkDetails, LinkFromReason, LinkReason, LinkedCasesErrorMessages, LinkedCasesEventTriggers, LinkedCasesFromTableComponent, LinkedCasesPages, LinkedCasesResponse, LinkedCasesToTableComponent, LoadingModule, LoadingService, LoadingSpinnerComponent, LoadingSpinnerModule, MEDIA_VIEWER_LOCALSTORAGE_KEY, MULTIPLE_TASKS_FOUND, ManageCaseFlagsComponent, ManageCaseFlagsLabelDisplayPipe, MarkdownComponent, MarkdownComponentModule, MoneyGbpInputComponent, MultipageComponentStateService, MultipleTasksExistComponent, NavigationComponent, NavigationItemComponent, NavigationNotifierService, NavigationOrigin, NoLinkedCasesComponent, NoTasksAvailableComponent, NotificationBannerComponent, NotificationBannerHeaderClass, NotificationBannerType, OrderService, OrderSummary, OrganisationConverter, OrganisationService, PageValidationService, PaginationComponent, PaginationMetadata, PaginationModule, PaletteContext, PaletteModule, PaletteService, PaletteUtilsModule, Patterns, PaymentField, PhaseComponent, PipesModule, PlaceholderService, PrintUrlPipe, Profile, ProfileNotifier, ProfileService, QualifyingQuestionDetailComponent, QualifyingQuestionOptionsComponent, QualifyingQuestionService, QualifyingQuestionsErrorMessage, QueryAttachmentsReadComponent, QueryCaseDetailsHeaderComponent, QueryCheckYourAnswersComponent, QueryConfirmationComponent, QueryCreateContext, QueryDetailsComponent, QueryEventCompletionComponent, QueryItemResponseStatus, QueryListComponent, QueryListData, QueryListItem, QueryManagementService, QueryWriteAddDocumentsComponent, QueryWriteDateInputComponent, QueryWriteRaiseQueryComponent, QueryWriteRespondToQueryComponent, RaiseQueryErrorMessage, ReadCaseFlagFieldComponent, ReadCaseLinkFieldComponent, ReadCollectionFieldComponent, ReadComplexFieldCollectionTableComponent, ReadComplexFieldComponent, ReadComplexFieldRawComponent, ReadComplexFieldTableComponent, ReadCookieService, ReadDateFieldComponent, ReadDocumentFieldComponent, ReadDynamicListFieldComponent, ReadDynamicMultiSelectListFieldComponent, ReadDynamicRadioListFieldComponent, ReadEmailFieldComponent, ReadFieldsFilterPipe, ReadFixedListFieldComponent, ReadFixedRadioListFieldComponent, ReadJudicialUserFieldComponent, ReadLinkedCasesFieldComponent, ReadMoneyGbpFieldComponent, ReadMultiSelectListFieldComponent, ReadNumberFieldComponent, ReadOrderSummaryFieldComponent, ReadOrderSummaryRowComponent, ReadOrganisationFieldComponent, ReadOrganisationFieldRawComponent, ReadOrganisationFieldTableComponent, ReadPhoneUKFieldComponent, ReadQueryManagementFieldComponent, ReadTextAreaFieldComponent, ReadTextFieldComponent, ReadYesNoFieldComponent, RefdataCaseFlagType, RemoveDialogComponent, RequestOptionsBuilder, RespondToQueryErrorMessages, RetryUtil, RouterHelperService, RouterLinkComponent, SaveOrDiscardDialogComponent, SearchFiltersComponent, SearchFiltersModule, SearchFiltersWrapperComponent, SearchInput, SearchLanguageInterpreterComponent, SearchLanguageInterpreterErrorMessage, SearchLanguageInterpreterStep, SearchResultComponent, SearchResultModule, SearchResultView, SearchResultViewColumn, SearchResultViewItem, SearchResultViewItemComparatorFactory, SearchService, SelectFlagErrorMessage, SelectFlagLocationComponent, SelectFlagLocationErrorMessage, SelectFlagTypeComponent, SelectFlagTypeErrorMessage, SessionErrorPageComponent, SessionErrorRoute, SessionJsonErrorLogger, SessionStorageGuard, SessionStorageService, ShowCondition, SortOrder$1 as SortOrder, SortParameters, SortSearchResultPipe, TabComponent, TableColumnConfig, TableConfig, TabsComponent, TabsModule, TaskAssignedComponent, TaskCancelledComponent, TaskConflictComponent, TaskUnassignedComponent, Terms, TestRouteSnapshotBuilder, TranslatedMarkdownDirective, TranslatedMarkdownModule, UnLinkCasesComponent, UnsupportedFieldComponent, UpdateFlagAddTranslationErrorMessage, UpdateFlagAddTranslationFormComponent, UpdateFlagAddTranslationStep, UpdateFlagComponent, UpdateFlagErrorMessage, UpdateFlagStep, UpdateFlagTitleDisplayPipe, WaysToPayFieldComponent, WindowService, Wizard, WizardFactoryService, WizardPage, WizardPageField, WorkAllocationService, WorkbasketFiltersComponent, WorkbasketFiltersModule, WorkbasketInput, WorkbasketInputFilterService, WorkbasketInputModel, WriteAddressFieldComponent, WriteCaseFlagFieldComponent, WriteCaseLinkFieldComponent, WriteCollectionFieldComponent, WriteComplexFieldComponent, WriteDateContainerFieldComponent, WriteDateFieldComponent, WriteDocumentFieldComponent, WriteDynamicListFieldComponent, WriteDynamicMultiSelectListFieldComponent, WriteDynamicRadioListFieldComponent, WriteEmailFieldComponent, WriteFixedListFieldComponent, WriteFixedRadioListFieldComponent, WriteJudicialUserFieldComponent, WriteLinkedCasesFieldComponent, WriteMoneyGbpFieldComponent, WriteMultiSelectListFieldComponent, WriteNumberFieldComponent, WriteOrderSummaryFieldComponent, WriteOrganisationComplexFieldComponent, WriteOrganisationFieldComponent, WritePhoneUKFieldComponent, WriteTextAreaFieldComponent, WriteTextFieldComponent, WriteYesNoFieldComponent, YesNoService, aCaseField, caseMessagesMockData, createACL, createCaseEventTrigger, createCaseField, createComplexFieldOverride, createFieldType, createFixedListFieldType, createHiddenComplexFieldOverride, createMultiSelectListFieldType, createWizardPage, createWizardPageField, editorRouting, initDialog, newCaseField, safeJsonParse, textFieldType, viewerRouting };
41430
41536
  //# sourceMappingURL=hmcts-ccd-case-ui-toolkit.mjs.map