@hmcts/ccd-case-ui-toolkit 7.3.53-polling → 7.3.54-unused-package

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.
@@ -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';
@@ -8,10 +8,11 @@ import * as i1$1 from '@angular/router';
8
8
  import { RouterModule, NavigationStart, NavigationEnd } from '@angular/router';
9
9
  import * as i4 from '@angular/forms';
10
10
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormArray, FormGroup, FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
11
- import { BehaviorSubject, throwError, Subject, EMPTY, concat, defer, timer, Observable, skip, of, forkJoin, fromEvent, Subscription, combineLatest } from 'rxjs';
12
- import { distinctUntilChanged, catchError, map, switchMap, repeat, retry, publish, refCount, debounceTime, delay, finalize, timeout, mergeMap, retryWhen, tap, delayWhen, publishReplay, take, first, takeUntil, filter } from 'rxjs/operators';
11
+ import { BehaviorSubject, throwError, Subject, EMPTY, Observable, skip, of, timer, forkJoin, fromEvent, Subscription, combineLatest } from 'rxjs';
13
12
  import * as i1$2 from '@angular/common/http';
14
13
  import { HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';
14
+ import { distinctUntilChanged, catchError, map, publish, refCount, switchMap, debounceTime, delay, finalize, timeout, mergeMap, retryWhen, tap, delayWhen, publishReplay, take, first, takeUntil, filter } from 'rxjs/operators';
15
+ import { polling } from 'rx-polling-hmcts';
15
16
  import { Type, Exclude, Expose, plainToClassFromExist, plainToClass } from 'class-transformer';
16
17
  import moment from 'moment';
17
18
  import { __decorate, __metadata } from 'tslib';
@@ -1637,23 +1638,89 @@ class SessionStorageService {
1637
1638
  sessionStorage.clear();
1638
1639
  }
1639
1640
  static ɵfac = function SessionStorageService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionStorageService)(); };
1640
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageService, factory: SessionStorageService.ɵfac });
1641
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageService, factory: SessionStorageService.ɵfac, providedIn: 'root' });
1641
1642
  }
1642
1643
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionStorageService, [{
1643
- type: Injectable
1644
+ type: Injectable,
1645
+ args: [{
1646
+ providedIn: 'root',
1647
+ }]
1644
1648
  }], null, null); })();
1645
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
+
1646
1718
  const USER_DETAILS = 'userDetails';
1647
1719
  const PUI_CASE_MANAGER = 'pui-case-manager';
1648
1720
  const JUDGE = 'judge';
1649
1721
  function getUserDetails(sessionStorageService) {
1650
- try {
1651
- const item = sessionStorageService?.getItem(USER_DETAILS);
1652
- return item ? JSON.parse(item) : null;
1653
- }
1654
- catch {
1655
- return null;
1656
- }
1722
+ const item = sessionStorageService?.getItem(USER_DETAILS);
1723
+ return safeJsonParse(item, null);
1657
1724
  }
1658
1725
  function isInternalUser(sessionStorageService) {
1659
1726
  const userDetails = getUserDetails(sessionStorageService);
@@ -1692,8 +1759,11 @@ class ActivityService {
1692
1759
  return error;
1693
1760
  }
1694
1761
  getOptions() {
1695
- const userDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
1696
- 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
+ }
1697
1767
  return {
1698
1768
  headers,
1699
1769
  withCredentials: true,
@@ -1759,7 +1829,8 @@ class ActivityPollingService {
1759
1829
  this.config = config;
1760
1830
  this.pollConfig = {
1761
1831
  interval: config.getActivityNexPollRequestMs(),
1762
- attempts: config.getActivityRetry()
1832
+ attempts: config.getActivityRetry(),
1833
+ backgroundPolling: true
1763
1834
  };
1764
1835
  this.batchCollectionDelayMs = config.getActivityBatchCollectionDelayMs();
1765
1836
  this.maxRequestsPerBatch = config.getActivityMaxRequestPerBatch();
@@ -1776,19 +1847,17 @@ class ActivityPollingService {
1776
1847
  subject.subscribe(done);
1777
1848
  }
1778
1849
  else {
1779
- // Only the first pending request should start the batch collection timer.
1780
- const wasEmpty = this.pendingRequests.size === 0;
1781
1850
  subject = new Subject();
1782
1851
  subject.subscribe(done);
1783
- this.addPendingRequest(caseId, subject);
1784
- if (wasEmpty) {
1785
- this.ngZone.runOutsideAngular(() => {
1786
- this.currentTimeoutHandle = setTimeout(() => this.ngZone.run(() => {
1787
- // console.log('timeout: flushing requests')
1788
- this.flushRequests();
1789
- }), this.batchCollectionDelayMs);
1790
- });
1791
- }
1852
+ this.pendingRequests.set(caseId, subject);
1853
+ }
1854
+ if (this.pendingRequests.size === 1) {
1855
+ this.ngZone.runOutsideAngular(() => {
1856
+ this.currentTimeoutHandle = setTimeout(() => this.ngZone.run(() => {
1857
+ // console.log('timeout: flushing requests')
1858
+ this.flushRequests();
1859
+ }), this.batchCollectionDelayMs);
1860
+ });
1792
1861
  }
1793
1862
  if (this.pendingRequests.size >= this.maxRequestsPerBatch) {
1794
1863
  // console.log('max pending hit: flushing requests');
@@ -1806,9 +1875,6 @@ class ActivityPollingService {
1806
1875
  clearTimeout(this.currentTimeoutHandle);
1807
1876
  this.currentTimeoutHandle = undefined;
1808
1877
  }
1809
- if (!this.pendingRequests.size) {
1810
- return;
1811
- }
1812
1878
  const requests = new Map(this.pendingRequests);
1813
1879
  this.pendingRequests.clear();
1814
1880
  this.performBatchRequest(requests);
@@ -1817,7 +1883,7 @@ class ActivityPollingService {
1817
1883
  if (!this.isEnabled) {
1818
1884
  return EMPTY;
1819
1885
  }
1820
- return this.polling(this.activityService.getActivities(...caseIds), this.pollConfig);
1886
+ return polling(this.activityService.getActivities(...caseIds), this.pollConfig);
1821
1887
  }
1822
1888
  postViewActivity(caseId) {
1823
1889
  return this.postActivity(caseId, ActivityService.ACTIVITY_VIEW);
@@ -1830,20 +1896,17 @@ class ActivityPollingService {
1830
1896
  // console.log('issuing batch request for cases: ' + caseIds);
1831
1897
  this.ngZone.runOutsideAngular(() => {
1832
1898
  // run polling outside angular zone so it does not trigger change detection
1833
- this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe({
1834
- // process activity inside zone so it triggers change detection for activity.component.ts
1835
- next: (activities) => this.ngZone.run(() => {
1836
- activities.forEach((activity) => {
1837
- // console.log('pushing activity: ' + activity.caseId);
1838
- // Ignore activities returned for cases outside this local batch.
1839
- requests.get(activity.caseId)?.next(activity);
1840
- });
1841
- }),
1842
- error: (err) => this.ngZone.run(() => {
1843
- console.log(`error: ${err}`);
1844
- Array.from(requests.values()).forEach((subject) => subject.error(err));
1845
- })
1846
- });
1899
+ this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe(
1900
+ // process activity inside zone so it triggers change detection for activity.component.ts
1901
+ (activities) => this.ngZone.run(() => {
1902
+ activities.forEach((activity) => {
1903
+ // console.log('pushing activity: ' + activity.caseId);
1904
+ requests.get(activity.caseId).next(activity);
1905
+ });
1906
+ }, (err) => {
1907
+ console.log(`error: ${err}`);
1908
+ Array.from(requests.values()).forEach((subject) => subject.error(err));
1909
+ }));
1847
1910
  });
1848
1911
  }
1849
1912
  postActivity(caseId, activityType) {
@@ -1854,42 +1917,7 @@ class ActivityPollingService {
1854
1917
  ...this.pollConfig,
1855
1918
  interval: 5000 // inline with CCD Backend
1856
1919
  };
1857
- return this.polling(this.activityService.postActivity(caseId, activityType), pollingConfig);
1858
- }
1859
- addPendingRequest(caseId, subject) {
1860
- this.pendingRequests.set(caseId, subject);
1861
- // Components complete their returned Subject on destroy; remove it so a later same-case subscription gets a fresh Subject.
1862
- subject.subscribe({
1863
- complete: () => this.removePendingRequest(caseId, subject),
1864
- error: () => this.removePendingRequest(caseId, subject)
1865
- });
1866
- }
1867
- removePendingRequest(caseId, subject) {
1868
- if (this.pendingRequests.get(caseId) !== subject) {
1869
- return;
1870
- }
1871
- this.pendingRequests.delete(caseId);
1872
- if (!this.pendingRequests.size && this.currentTimeoutHandle) {
1873
- clearTimeout(this.currentTimeoutHandle);
1874
- this.currentTimeoutHandle = undefined;
1875
- }
1876
- }
1877
- polling(request$, options) {
1878
- const pollingOptions = {
1879
- interval: options.interval,
1880
- attempts: options.attempts ?? 9,
1881
- exponentialUnit: options.exponentialUnit ?? 1000
1882
- };
1883
- return concat(request$, defer(() => timer(pollingOptions.interval).pipe(switchMap(() => request$))).pipe(repeat())).pipe(
1884
- // Preserve consecutive-failure retry behaviour using the current RxJS retry config.
1885
- retry({
1886
- count: pollingOptions.attempts,
1887
- delay: (_error, retryCount) => timer(this.getExponentialRetryDelay(retryCount, pollingOptions.exponentialUnit)),
1888
- resetOnSuccess: true
1889
- }));
1890
- }
1891
- getExponentialRetryDelay(consecutiveErrorsCount, exponentialUnit) {
1892
- return Math.pow(2, consecutiveErrorsCount - 1) * exponentialUnit;
1920
+ return polling(this.activityService.postActivity(caseId, activityType), pollingConfig);
1893
1921
  }
1894
1922
  static ɵfac = function ActivityPollingService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActivityPollingService)(i0.ɵɵinject(ActivityService), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(AbstractAppConfig)); };
1895
1923
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ActivityPollingService, factory: ActivityPollingService.ɵfac });
@@ -4544,11 +4572,8 @@ class FieldsUtils {
4544
4572
  }
4545
4573
  }
4546
4574
  static getUserTaskFromClientContext(clientContextStr) {
4547
- if (clientContextStr) {
4548
- let clientContext = JSON.parse(clientContextStr);
4549
- return clientContext.client_context.user_task;
4550
- }
4551
- return null;
4575
+ const clientContext = safeJsonParse(clientContextStr, null);
4576
+ return clientContext?.client_context?.user_task || null;
4552
4577
  }
4553
4578
  buildCanShowPredicate(eventTrigger, form) {
4554
4579
  const currentState = this.getCurrentEventState(eventTrigger, form);
@@ -5508,6 +5533,10 @@ class ConditionalShowFormDirective {
5508
5533
  }
5509
5534
  buildPath(c, field) {
5510
5535
  if (c && c instanceof AbstractFieldWriteComponent) {
5536
+ const parentPrefix = c.parent?.['component']?.idPrefix;
5537
+ if (parentPrefix) {
5538
+ return parentPrefix + field.id;
5539
+ }
5511
5540
  if (c.idPrefix) {
5512
5541
  return c.idPrefix + field.id;
5513
5542
  }
@@ -6008,17 +6037,15 @@ class FormValueService {
6008
6037
  return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');
6009
6038
  }
6010
6039
  else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {
6011
- return currentForm.map(fieldValue => fieldValue['value']).join(', ');
6040
+ return currentForm.map((fieldValue) => fieldValue.value).join(', ');
6012
6041
  }
6013
6042
  else if (FieldsUtils.isCollection(currentForm)) {
6014
- return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);
6043
+ return this.getFieldValue(currentForm[colIndex].value, fieldIds.slice(1).join('.'), colIndex);
6015
6044
  }
6016
6045
  else if (FieldsUtils.isNonEmptyObject(currentForm)) {
6017
6046
  return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);
6018
6047
  }
6019
- else {
6020
- return currentForm;
6021
- }
6048
+ return currentForm;
6022
6049
  }
6023
6050
  /**
6024
6051
  * A recursive method to remove anything with a `---LABEL` suffix.
@@ -6056,9 +6083,7 @@ class FormValueService {
6056
6083
  if (field.field_type) {
6057
6084
  return field.field_type.type === 'Label';
6058
6085
  }
6059
- else {
6060
- return false;
6061
- }
6086
+ return false;
6062
6087
  }
6063
6088
  static isEmptyData(data) {
6064
6089
  if (data) {
@@ -6105,10 +6130,13 @@ class FormValueService {
6105
6130
  return s;
6106
6131
  }
6107
6132
  filterCurrentPageFields(caseFields, editForm) {
6108
- const cloneForm = JSON.parse(JSON.stringify(editForm));
6109
- Object.keys(cloneForm['data']).forEach((key) => {
6133
+ const cloneForm = {
6134
+ ...(editForm || {}),
6135
+ data: { ...((editForm && editForm.data) || {}) }
6136
+ };
6137
+ Object.keys(cloneForm.data).forEach((key) => {
6110
6138
  if (caseFields.findIndex((element) => element.id === key) < 0) {
6111
- delete cloneForm['data'][key];
6139
+ delete cloneForm.data[key];
6112
6140
  }
6113
6141
  });
6114
6142
  return cloneForm;
@@ -6152,7 +6180,7 @@ class FormValueService {
6152
6180
  if (!rawArray) {
6153
6181
  return rawArray;
6154
6182
  }
6155
- rawArray.forEach(item => {
6183
+ rawArray.forEach((item) => {
6156
6184
  if (item && item.hasOwnProperty('value')) {
6157
6185
  item.value = this.sanitiseValue(item.value, isCaseFlagJourney);
6158
6186
  }
@@ -6161,8 +6189,8 @@ class FormValueService {
6161
6189
  // association of a value. In addition, if the array contains items with a "value" object property, return only
6162
6190
  // those whose value object contains non-empty values, including for any descendant objects
6163
6191
  return rawArray
6164
- .filter(item => !!item)
6165
- .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);
6192
+ .filter((item) => !!item)
6193
+ .filter((item) => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);
6166
6194
  }
6167
6195
  sanitiseValue(rawValue, isCaseFlagJourney = false) {
6168
6196
  if (Array.isArray(rawValue)) {
@@ -6181,7 +6209,7 @@ class FormValueService {
6181
6209
  }
6182
6210
  clearNonCaseFields(data, caseFields) {
6183
6211
  for (const dataKey in data) {
6184
- if (!caseFields.find(cf => cf.id === dataKey)) {
6212
+ if (!caseFields.find((cf) => cf.id === dataKey)) {
6185
6213
  delete data[dataKey];
6186
6214
  }
6187
6215
  }
@@ -6379,7 +6407,7 @@ class FormValueService {
6379
6407
  */
6380
6408
  removeCaseFieldsOfType(data, caseFields, types) {
6381
6409
  if (data && caseFields && caseFields.length > 0 && types.length > 0) {
6382
- const caseFieldsToRemove = caseFields.filter(caseField => FieldsUtils.isCaseFieldOfType(caseField, types));
6410
+ const caseFieldsToRemove = caseFields.filter((caseField) => FieldsUtils.isCaseFieldOfType(caseField, types));
6383
6411
  for (const caseField of caseFieldsToRemove) {
6384
6412
  delete data[caseField.id];
6385
6413
  }
@@ -6398,10 +6426,10 @@ class FormValueService {
6398
6426
  */
6399
6427
  repopulateFormDataFromCaseFieldValues(data, caseFields) {
6400
6428
  if (data && caseFields && caseFields.length > 0 &&
6401
- caseFields.findIndex(caseField => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6429
+ caseFields.findIndex((caseField) => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6402
6430
  // Ignore the FlagLauncher CaseField because it does not hold any values
6403
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6404
- .forEach(caseField => {
6431
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6432
+ .forEach((caseField) => {
6405
6433
  // Ensure that the data object is populated for all CaseField keys it contains, even if for a given
6406
6434
  // CaseField key, the data object has a falsy value (hence the use of hasOwnProperty() for the check below)
6407
6435
  // See https://tools.hmcts.net/jira/browse/EUI-7377
@@ -6433,8 +6461,8 @@ class FormValueService {
6433
6461
  */
6434
6462
  populateLinkedCasesDetailsFromCaseFields(data, caseFields) {
6435
6463
  if (data && caseFields && caseFields.length > 0) {
6436
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6437
- .forEach(caseField => {
6464
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6465
+ .forEach((caseField) => {
6438
6466
  if (data.hasOwnProperty('caseLinks') && caseField.value) {
6439
6467
  data[caseField.id] = caseField.value;
6440
6468
  }
@@ -8890,10 +8918,10 @@ class CaseworkerService {
8890
8918
  this.appConfig = appConfig;
8891
8919
  this.errorService = errorService;
8892
8920
  }
8893
- getCaseworkers(serviceId) {
8894
- const url = `${this.appConfig.getWorkAllocationApiUrl()}/caseworker/getUsersByServiceName`;
8921
+ getUserByIdamId(idamId) {
8922
+ const url = `${this.appConfig.getWorkAllocationApiUrl()}/caseworker/getUserByIdamId`;
8895
8923
  return this.http
8896
- .post(url, { services: [serviceId] })
8924
+ .post(url, idamId)
8897
8925
  .pipe(catchError(error => {
8898
8926
  this.errorService.setError(error);
8899
8927
  return throwError(error);
@@ -9576,7 +9604,7 @@ class CaseEditComponent {
9576
9604
  ngOnInit() {
9577
9605
  this.wizard = this.wizardFactory.create(this.eventTrigger);
9578
9606
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
9579
- this.isPageRefreshed = JSON.parse(this.sessionStorageService.getItem('isPageRefreshed'));
9607
+ this.isPageRefreshed = safeJsonParse(this.sessionStorageService.getItem('isPageRefreshed'), false);
9580
9608
  this.checkPageRefresh();
9581
9609
  this.form = this.fb.group({
9582
9610
  data: new FormGroup({}),
@@ -9700,15 +9728,11 @@ class CaseEditComponent {
9700
9728
  const taskEventCompletionStr = this.sessionStorageService.getItem(CaseEditComponent.TASK_EVENT_COMPLETION_INFO);
9701
9729
  const userInfoStr = this.sessionStorageService.getItem('userDetails');
9702
9730
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded');
9703
- if (taskEventCompletionStr) {
9704
- taskEventCompletionInfo = JSON.parse(taskEventCompletionStr);
9705
- }
9706
- if (userInfoStr) {
9707
- userInfo = JSON.parse(userInfoStr);
9708
- }
9731
+ taskEventCompletionInfo = safeJsonParse(taskEventCompletionStr, null);
9732
+ userInfo = safeJsonParse(userInfoStr, null);
9709
9733
  const eventId = this.getEventId(form);
9710
9734
  const caseId = this.getCaseId(caseDetails);
9711
- const userId = userInfo.id ? userInfo.id : userInfo.uid;
9735
+ const userId = userInfo?.id ? userInfo.id : userInfo?.uid;
9712
9736
  const eventDetails = { eventId, caseId, userId, assignNeeded };
9713
9737
  if (this.taskExistsForThisEvent(taskInSessionStorage, taskEventCompletionInfo, eventDetails)) {
9714
9738
  this.abstractConfig.logMessage(`task ${taskInSessionStorage?.id} exist for this event for caseId and eventId as ${caseId} ${eventId}`);
@@ -9937,6 +9961,11 @@ class CaseEditComponent {
9937
9961
  const userTask = FieldsUtils.getUserTaskFromClientContext(clientContextStr);
9938
9962
  const [task, taskToBeCompleted] = userTask ? [userTask.task_data, userTask.complete_task] : [null, false];
9939
9963
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded') === 'true';
9964
+ if (this.caseDetails && (this.caseDetails.case_id !== task?.case_id)) {
9965
+ this.abstractConfig.logMessage(`postCompleteTaskIfRequired: task in session storage with taskId ${task?.id} has caseId: ${task?.case_id} which does not match case details case id ${this.caseDetails.case_id}, NOT completing task and clearing client context`);
9966
+ this.sessionStorageService.removeItem(CaseEditComponent.CLIENT_CONTEXT);
9967
+ return of(true);
9968
+ }
9940
9969
  if (task && assignNeeded && taskToBeCompleted) {
9941
9970
  this.abstractConfig.logMessage(`postCompleteTaskIfRequired with assignNeeded: taskId ${task.id} and event name ${this.eventTrigger?.name}`);
9942
9971
  return this.workAllocationService.assignAndCompleteTask(task.id, this.eventTrigger.name);
@@ -10070,7 +10099,7 @@ class CaseEditComponent {
10070
10099
  }], submitted: [{
10071
10100
  type: Output
10072
10101
  }] }); })();
10073
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 38 }); })();
10102
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 39 }); })();
10074
10103
 
10075
10104
  function convertNonASCIICharacter(character) {
10076
10105
  if (character === '£') {
@@ -11683,6 +11712,10 @@ class CaseEditPageComponent {
11683
11712
  updateEventTriggerCaseFields(caseFieldId, jsonData, eventTrigger) {
11684
11713
  /* istanbul ignore else */
11685
11714
  if (eventTrigger?.case_fields) {
11715
+ const isCaseFlagJourney = eventTrigger.case_fields.some((caseField) => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']));
11716
+ if (isCaseFlagJourney) {
11717
+ return;
11718
+ }
11686
11719
  eventTrigger.case_fields
11687
11720
  .filter(element => element.id === caseFieldId)
11688
11721
  .forEach(element => {
@@ -12129,6 +12162,42 @@ class CallbackErrorsComponent {
12129
12162
  }] }); })();
12130
12163
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CallbackErrorsComponent, { className: "CallbackErrorsComponent", filePath: "lib/shared/components/error/callback-errors.component.ts", lineNumber: 11 }); })();
12131
12164
 
12165
+ class SessionErrorPageComponent {
12166
+ title = 'There is a problem with your session';
12167
+ primaryMessage = 'Go to landing page. Refreshing the page. If the problem persists, sign out and sign in again.';
12168
+ secondaryMessage = 'If you still cannot access the service, clear your browser data for this website.';
12169
+ static ɵfac = function SessionErrorPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionErrorPageComponent)(); };
12170
+ 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) {
12171
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "main", 1)(2, "div", 2)(3, "div", 3)(4, "h1", 4);
12172
+ i0.ɵɵtext(5);
12173
+ i0.ɵɵdomElementEnd();
12174
+ i0.ɵɵdomElementStart(6, "p", 5);
12175
+ i0.ɵɵtext(7);
12176
+ i0.ɵɵdomElementEnd();
12177
+ i0.ɵɵdomElementStart(8, "p", 5);
12178
+ i0.ɵɵtext(9);
12179
+ i0.ɵɵdomElementEnd()()()()();
12180
+ } if (rf & 2) {
12181
+ i0.ɵɵadvance(5);
12182
+ i0.ɵɵtextInterpolate(ctx.title);
12183
+ i0.ɵɵadvance(2);
12184
+ i0.ɵɵtextInterpolate(ctx.primaryMessage);
12185
+ i0.ɵɵadvance(2);
12186
+ i0.ɵɵtextInterpolate(ctx.secondaryMessage);
12187
+ } }, dependencies: [CommonModule], encapsulation: 2 });
12188
+ }
12189
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionErrorPageComponent, [{
12190
+ type: Component,
12191
+ 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" }]
12192
+ }], null, { title: [{
12193
+ type: Input
12194
+ }], primaryMessage: [{
12195
+ type: Input
12196
+ }], secondaryMessage: [{
12197
+ type: Input
12198
+ }] }); })();
12199
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SessionErrorPageComponent, { className: "SessionErrorPageComponent", filePath: "lib/shared/components/error/session-error-page.component.ts", lineNumber: 10 }); })();
12200
+
12132
12201
  function CaseEventCompletionComponent_app_case_event_completion_task_cancelled_0_Template(rf, ctx) { if (rf & 1) {
12133
12202
  const _r1 = i0.ɵɵgetCurrentView();
12134
12203
  i0.ɵɵelementStart(0, "app-case-event-completion-task-cancelled", 2);
@@ -12392,12 +12461,9 @@ class CaseEventCompletionTaskReassignedComponent {
12392
12461
  this.jurisdiction = task.jurisdiction;
12393
12462
  this.caseType = task.case_type_id;
12394
12463
  // Current user is a caseworker?
12395
- this.caseworkerSubscription = this.caseworkerService.getCaseworkers(task.jurisdiction).subscribe(result => {
12396
- if (result && result[0].service === task.jurisdiction && result[0].caseworkers) {
12397
- const caseworker = result[0].caseworkers.find(x => x.idamId === task.assignee);
12398
- if (caseworker) {
12399
- this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
12400
- }
12464
+ this.caseworkerSubscription = this.caseworkerService.getUserByIdamId(task.assignee).subscribe(caseworker => {
12465
+ if (caseworker) {
12466
+ this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
12401
12467
  }
12402
12468
  if (!this.assignedUserName) {
12403
12469
  // Current user is a judicial user?
@@ -13380,9 +13446,10 @@ class CaseFileViewFieldComponent {
13380
13446
  error: _ => this.getCategoriesAndDocumentsError = true
13381
13447
  });
13382
13448
  // EXUI-8000
13383
- const userInfo = JSON.parse(this.sessionStorageService.getItem('userDetails'));
13449
+ const userInfo = safeJsonParse(this.sessionStorageService.getItem('userDetails'), null);
13450
+ const userRoles = userInfo?.roles || [];
13384
13451
  // Get acls that intersects from acl roles and user roles
13385
- const acls = this.caseField.acls.filter(acl => userInfo.roles.includes(acl.role));
13452
+ const acls = this.caseField.acls.filter(acl => userRoles.includes(acl.role));
13386
13453
  // As there can be more than one intersecting role, if any acls are update: true
13387
13454
  this.allowMoving = acls.some(acl => acl.update);
13388
13455
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
@@ -13473,7 +13540,7 @@ class CaseFileViewFieldComponent {
13473
13540
  type: Component,
13474
13541
  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"] }]
13475
13542
  }], () => [{ type: i0.ElementRef }, { type: i1$1.ActivatedRoute }, { type: CaseFileViewService }, { type: DocumentManagementService }, { type: LoadingService }, { type: SessionStorageService }, { type: WindowService }, { type: CaseNotifier }, { type: AbstractAppConfig }], null); })();
13476
- (() => { (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 }); })();
13543
+ (() => { (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 }); })();
13477
13544
 
13478
13545
  const PVP_FLAG_CODE = 'PF0021';
13479
13546
  const PVP_DISPLAY_TEXT = 'POTENTIALLY VIOLENT PERSON';
@@ -15033,7 +15100,7 @@ function WriteCollectionFieldComponent_div_7_Template(rf, ctx) { if (rf & 1) {
15033
15100
  const ctx_r0 = i0.ɵɵnextContext();
15034
15101
  i0.ɵɵproperty("hidden", ctx_r0.caseField.hidden);
15035
15102
  i0.ɵɵadvance(2);
15036
- i0.ɵɵproperty("ngForOf", ctx_r0.collItems);
15103
+ i0.ɵɵproperty("ngForOf", ctx_r0.collItems)("ngForTrackBy", ctx_r0.trackByCollectionItem);
15037
15104
  } }
15038
15105
  function WriteCollectionFieldComponent_button_8_Template(rf, ctx) { if (rf & 1) {
15039
15106
  const _r5 = i0.ɵɵgetCurrentView();
@@ -15059,6 +15126,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15059
15126
  profileSubscription;
15060
15127
  items;
15061
15128
  collItems = [];
15129
+ collectionItemUidCounter = 0;
15062
15130
  constructor(dialog, scrollToService, profileNotifier, cdRef) {
15063
15131
  super();
15064
15132
  this.dialog = dialog;
@@ -15081,7 +15149,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15081
15149
  if (this.collItems.length <= index) {
15082
15150
  this.collItems.length = index + 1;
15083
15151
  }
15084
- this.collItems[index] = { caseField, item, prefix, index, container };
15152
+ this.collItems[index] = { uid: this.createCollectionItemUid(), caseField, item, prefix, index, container };
15085
15153
  });
15086
15154
  }
15087
15155
  ngOnDestroy() {
@@ -15190,7 +15258,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15190
15258
  const caseField = this.buildCaseField(item, index, true);
15191
15259
  const prefix = this.buildIdPrefix(index);
15192
15260
  const container = this.getContainer(index);
15193
- this.collItems.push({ caseField, item, index, prefix, container });
15261
+ this.collItems.push({ uid: this.createCollectionItemUid(), caseField, item, index, prefix, container });
15194
15262
  // Update DOM required after pushing a new item to do the next steps (i.e. scrolling and focusing)
15195
15263
  this.cdRef.detectChanges();
15196
15264
  if (doScroll) {
@@ -15249,6 +15317,12 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15249
15317
  this.caseField.value.splice(index, 1);
15250
15318
  this.formArray.removeAt(index);
15251
15319
  }
15320
+ trackByCollectionItem(_, item) {
15321
+ return item.uid;
15322
+ }
15323
+ createCollectionItemUid() {
15324
+ return `collection-item-${this.collectionItemUidCounter++}`;
15325
+ }
15252
15326
  resetIds(index) {
15253
15327
  for (let i = index; i < this.collItems.length; i++) {
15254
15328
  const counter = i + 1;
@@ -15355,7 +15429,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15355
15429
  } if (rf & 2) {
15356
15430
  let _t;
15357
15431
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.items = _t);
15358
- } }, inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 9, consts: [["collectionItem", ""], [1, "form-group", 3, "id"], [1, "panel", "collection-indicator"], ["class", "heading-h2 error-spacing", 4, "ngIf"], ["type", "button", 1, "button", "write-collection-add-item__top", 3, "click", "disabled"], ["class", "form-group", 3, "hidden", 4, "ngIf"], ["class", "button write-collection-add-item__bottom", "type", "button", 3, "disabled", "click", 4, "ngIf"], [1, "heading-h2", "error-spacing"], ["class", "form-hint", 4, "ngIf"], ["class", "error-message", 4, "ngIf"], [1, "form-hint"], [3, "content"], [1, "error-message"], [1, "form-group", 3, "hidden"], [1, "govuk-fieldset"], ["class", "form-group", 3, "id", 4, "ngFor", "ngForOf"], [1, "collection-title"], [1, "float-left"], [1, "govuk-fieldset__legend"], [3, "for"], [1, "heading-h3"], [1, "float-right"], ["type", "button", 1, "button", "button-secondary", 3, "click", "disabled"], [3, "caseField", "caseFields", "formGroup", "parent", "idPrefix", "hidden", "isExpanded", "isInSearchBlock"], ["type", "button", 1, "button", "write-collection-add-item__bottom", 3, "click", "disabled"]], template: function WriteCollectionFieldComponent_Template(rf, ctx) { if (rf & 1) {
15432
+ } }, inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 9, consts: [["collectionItem", ""], [1, "form-group", 3, "id"], [1, "panel", "collection-indicator"], ["class", "heading-h2 error-spacing", 4, "ngIf"], ["type", "button", 1, "button", "write-collection-add-item__top", 3, "click", "disabled"], ["class", "form-group", 3, "hidden", 4, "ngIf"], ["class", "button write-collection-add-item__bottom", "type", "button", 3, "disabled", "click", 4, "ngIf"], [1, "heading-h2", "error-spacing"], ["class", "form-hint", 4, "ngIf"], ["class", "error-message", 4, "ngIf"], [1, "form-hint"], [3, "content"], [1, "error-message"], [1, "form-group", 3, "hidden"], [1, "govuk-fieldset"], ["class", "form-group", 3, "id", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "collection-title"], [1, "float-left"], [1, "govuk-fieldset__legend"], [3, "for"], [1, "heading-h3"], [1, "float-right"], ["type", "button", 1, "button", "button-secondary", 3, "click", "disabled"], [3, "caseField", "caseFields", "formGroup", "parent", "idPrefix", "hidden", "isExpanded", "isInSearchBlock"], ["type", "button", 1, "button", "write-collection-add-item__bottom", 3, "click", "disabled"]], template: function WriteCollectionFieldComponent_Template(rf, ctx) { if (rf & 1) {
15359
15433
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
15360
15434
  i0.ɵɵtemplate(2, WriteCollectionFieldComponent_h2_2_Template, 3, 3, "h2", 3);
15361
15435
  i0.ɵɵelementStart(3, "button", 4);
@@ -15363,7 +15437,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15363
15437
  i0.ɵɵtext(4);
15364
15438
  i0.ɵɵpipe(5, "rpxTranslate");
15365
15439
  i0.ɵɵelementEnd();
15366
- i0.ɵɵtemplate(6, WriteCollectionFieldComponent_h2_6_Template, 3, 2, "h2", 3)(7, WriteCollectionFieldComponent_div_7_Template, 3, 2, "div", 5)(8, WriteCollectionFieldComponent_button_8_Template, 3, 4, "button", 6);
15440
+ i0.ɵɵtemplate(6, WriteCollectionFieldComponent_h2_6_Template, 3, 2, "h2", 3)(7, WriteCollectionFieldComponent_div_7_Template, 3, 3, "div", 5)(8, WriteCollectionFieldComponent_button_8_Template, 3, 4, "button", 6);
15367
15441
  i0.ɵɵelementEnd()();
15368
15442
  } if (rf & 2) {
15369
15443
  i0.ɵɵproperty("id", ctx.id());
@@ -15383,14 +15457,14 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15383
15457
  }
15384
15458
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WriteCollectionFieldComponent, [{
15385
15459
  type: Component,
15386
- args: [{ selector: 'ccd-write-collection-field', standalone: false, template: "<div class=\"form-group\" [id]=\"id()\">\n\n <div class=\"panel collection-indicator\">\n\n <h2 class=\"heading-h2 error-spacing\" *ngIf=\"!caseField.hidden\">\n {{(caseField | ccdFieldLabel)}}\n </h2>\n <button class=\"button write-collection-add-item__top\" type=\"button\" (click)=\"addItem(true)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\">{{'Add new' | rpxTranslate}}</button>\n <h2 class=\"heading-h2 error-spacing\" *ngIf=\"caseField.hint_text || formArray.errors\">\n <span *ngIf=\"caseField.hint_text\" class=\"form-hint\">\n <ccd-markdown [content]=\"caseField.hint_text | rpxTranslate\"></ccd-markdown>\n </span>\n <span *ngIf=\"formArray.errors\" class=\"error-message\">\n {{(formArray.errors | ccdFirstError:caseField.label)}}\n </span>\n </h2>\n\n <div class=\"form-group\" [hidden]=\"caseField.hidden\" *ngIf=\"caseField.value && caseField.value.length\">\n <fieldset class=\"govuk-fieldset\">\n <div *ngFor=\"let item of collItems; let i = index\" #collectionItem\n [id]=\"this.buildIdPrefix(i) + i\" class=\"form-group\">\n <div class=\"collection-title\">\n <div class=\"float-left\">\n <legend class=\"govuk-fieldset__legend\">\n <label [for]=\"item.prefix + i\"><h3 class=\"heading-h3\">{{itemLabel(i) | rpxTranslate}}</h3></label>\n </legend>\n </div>\n <div class=\"float-right\">\n <button class=\"button button-secondary\" type=\"button\" (click)=\"openModal(i)\"\n [disabled]=\"isNotAuthorisedToDelete(i)\"\n attr.aria-label=\"Remove {{ itemLabel(i) }}\">{{'Remove' | rpxTranslate}}</button>\n </div>\n </div>\n <ccd-field-write [caseField]=\"item.caseField\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [parent]=\"item.container\"\n [idPrefix]=\"item.prefix\"\n [hidden]=\"item.caseField.hidden\"\n [isExpanded]=\"isExpanded\"\n [isInSearchBlock]=\"isInSearchBlock\">\n </ccd-field-write>\n </div>\n </fieldset>\n </div>\n\n <button class=\"button write-collection-add-item__bottom\" type=\"button\" (click)=\"addItem(false)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\" *ngIf=\"caseField.value && caseField.value.length\">{{'Add new' | rpxTranslate }}</button>\n\n </div>\n\n</div>\n", styles: [".collection-field-table tr:first-child>td{padding-top:0}.collection-field-table tr:last-child>td{border-bottom:none}.collection-field-table td.collection-actions{width:1px;white-space:nowrap}.error-spacing{margin-top:10px}.collection-title{height:51px}.float-left{float:left;padding-top:8px}.float-right{float:right}.complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th,.complex-panel .complex-panel-table>tbody>tr:last-child>td{border-bottom:none}.complex-panel .complex-panel-simple-field th{padding-left:5px;width:295px}.complex-panel .complex-panel-compound-field td{padding:5px}.collection-indicator{border-left:solid 5px #b1b4b6}\n"] }]
15460
+ args: [{ selector: 'ccd-write-collection-field', standalone: false, template: "<div class=\"form-group\" [id]=\"id()\">\n\n <div class=\"panel collection-indicator\">\n\n <h2 class=\"heading-h2 error-spacing\" *ngIf=\"!caseField.hidden\">\n {{(caseField | ccdFieldLabel)}}\n </h2>\n <button class=\"button write-collection-add-item__top\" type=\"button\" (click)=\"addItem(true)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\">{{'Add new' | rpxTranslate}}</button>\n <h2 class=\"heading-h2 error-spacing\" *ngIf=\"caseField.hint_text || formArray.errors\">\n <span *ngIf=\"caseField.hint_text\" class=\"form-hint\">\n <ccd-markdown [content]=\"caseField.hint_text | rpxTranslate\"></ccd-markdown>\n </span>\n <span *ngIf=\"formArray.errors\" class=\"error-message\">\n {{(formArray.errors | ccdFirstError:caseField.label)}}\n </span>\n </h2>\n\n <div class=\"form-group\" [hidden]=\"caseField.hidden\" *ngIf=\"caseField.value && caseField.value.length\">\n <fieldset class=\"govuk-fieldset\">\n <div *ngFor=\"let item of collItems; let i = index; trackBy: trackByCollectionItem\" #collectionItem\n [id]=\"this.buildIdPrefix(i) + i\" class=\"form-group\">\n <div class=\"collection-title\">\n <div class=\"float-left\">\n <legend class=\"govuk-fieldset__legend\">\n <label [for]=\"item.prefix + i\"><h3 class=\"heading-h3\">{{itemLabel(i) | rpxTranslate}}</h3></label>\n </legend>\n </div>\n <div class=\"float-right\">\n <button class=\"button button-secondary\" type=\"button\" (click)=\"openModal(i)\"\n [disabled]=\"isNotAuthorisedToDelete(i)\"\n attr.aria-label=\"Remove {{ itemLabel(i) }}\">{{'Remove' | rpxTranslate}}</button>\n </div>\n </div>\n <ccd-field-write [caseField]=\"item.caseField\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [parent]=\"item.container\"\n [idPrefix]=\"item.prefix\"\n [hidden]=\"item.caseField.hidden\"\n [isExpanded]=\"isExpanded\"\n [isInSearchBlock]=\"isInSearchBlock\">\n </ccd-field-write>\n </div>\n </fieldset>\n </div>\n\n <button class=\"button write-collection-add-item__bottom\" type=\"button\" (click)=\"addItem(false)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\" *ngIf=\"caseField.value && caseField.value.length\">{{'Add new' | rpxTranslate }}</button>\n\n </div>\n\n</div>\n", styles: [".collection-field-table tr:first-child>td{padding-top:0}.collection-field-table tr:last-child>td{border-bottom:none}.collection-field-table td.collection-actions{width:1px;white-space:nowrap}.error-spacing{margin-top:10px}.collection-title{height:51px}.float-left{float:left;padding-top:8px}.float-right{float:right}.complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th,.complex-panel .complex-panel-table>tbody>tr:last-child>td{border-bottom:none}.complex-panel .complex-panel-simple-field th{padding-left:5px;width:295px}.complex-panel .complex-panel-compound-field td{padding:5px}.collection-indicator{border-left:solid 5px #b1b4b6}\n"] }]
15387
15461
  }], () => [{ type: i1$3.MatLegacyDialog }, { type: i2.ScrollToService }, { type: ProfileNotifier }, { type: i0.ChangeDetectorRef }], { caseFields: [{
15388
15462
  type: Input
15389
15463
  }], items: [{
15390
15464
  type: ViewChildren,
15391
15465
  args: ['collectionItem']
15392
15466
  }] }); })();
15393
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCollectionFieldComponent, { className: "WriteCollectionFieldComponent", filePath: "lib/shared/components/palette/collection/write-collection-field.component.ts", lineNumber: 32 }); })();
15467
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCollectionFieldComponent, { className: "WriteCollectionFieldComponent", filePath: "lib/shared/components/palette/collection/write-collection-field.component.ts", lineNumber: 33 }); })();
15394
15468
 
15395
15469
  function ReadComplexFieldComponent_ccd_read_complex_field_raw_1_Template(rf, ctx) { if (rf & 1) {
15396
15470
  i0.ɵɵelement(0, "ccd-read-complex-field-raw", 4);
@@ -16331,11 +16405,13 @@ class MarkdownComponent {
16331
16405
  }
16332
16406
  renderUrlToText() {
16333
16407
  const renderer = new marked.Renderer();
16334
- renderer.link = (href, title, text) => {
16335
- if (!text || text === href) {
16336
- return this.isAllowedUrl(href) ? `<a href="${href}">${href}</a>` : href;
16408
+ renderer.link = ({ href, tokens }) => {
16409
+ const linkHref = href || '';
16410
+ const text = tokens?.map((token) => token.raw).join('') || linkHref;
16411
+ if (!text || text === linkHref) {
16412
+ return this.isAllowedUrl(linkHref) ? `<a href="${linkHref}">${linkHref}</a>` : linkHref;
16337
16413
  }
16338
- return this.detectMarkdownLinks(this.content) ? `<a href="${href}">${text}</a>` : text;
16414
+ return this.detectMarkdownLinks(this.content) ? `<a href="${linkHref}">${text}</a>` : text;
16339
16415
  };
16340
16416
  marked.setOptions({
16341
16417
  renderer: renderer
@@ -16370,7 +16446,7 @@ class MarkdownComponent {
16370
16446
  }], renderUrlToTextFeature: [{
16371
16447
  type: Input
16372
16448
  }] }); })();
16373
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MarkdownComponent, { className: "MarkdownComponent", filePath: "lib/shared/components/palette/markdown/markdown.component.ts", lineNumber: 11 }); })();
16449
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MarkdownComponent, { className: "MarkdownComponent", filePath: "lib/shared/components/palette/markdown/markdown.component.ts", lineNumber: 12 }); })();
16374
16450
 
16375
16451
  class FixedListPipe {
16376
16452
  static EMPTY = '';
@@ -20821,14 +20897,14 @@ class PaymentField extends AbstractFieldReadComponent {
20821
20897
  return this.appConfig.getNotificationUrl();
20822
20898
  }
20823
20899
  getUserRoles() {
20824
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20900
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20825
20901
  if (!userDetails || !userDetails.hasOwnProperty('roles')) {
20826
20902
  return [];
20827
20903
  }
20828
20904
  return userDetails.roles;
20829
20905
  }
20830
20906
  getUserEmail() {
20831
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20907
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20832
20908
  if (!userDetails || !userDetails.hasOwnProperty('sub')) {
20833
20909
  return '';
20834
20910
  }
@@ -21554,7 +21630,7 @@ class QueryManagementService {
21554
21630
  ) {
21555
21631
  let currentUserDetails;
21556
21632
  try {
21557
- currentUserDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
21633
+ currentUserDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), {});
21558
21634
  }
21559
21635
  catch (e) {
21560
21636
  console.error('Could not parse USER_DETAILS from session storage:', e);
@@ -25016,6 +25092,7 @@ class FieldWriteComponent extends AbstractFieldWriteComponent {
25016
25092
  canHaveGreyBar = false;
25017
25093
  caseFields = [];
25018
25094
  fieldContainer;
25095
+ componentRef;
25019
25096
  constructor(resolver, paletteService) {
25020
25097
  super();
25021
25098
  this.resolver = resolver;
@@ -25027,7 +25104,7 @@ class FieldWriteComponent extends AbstractFieldWriteComponent {
25027
25104
  ngOnInit() {
25028
25105
  const componentClass = this.paletteService.getFieldComponentClass(this.caseField, true);
25029
25106
  const injector = Injector.create([], this.fieldContainer.parentInjector);
25030
- const component = this.resolver.resolveComponentFactory(componentClass).create(injector);
25107
+ this.componentRef = this.resolver.resolveComponentFactory(componentClass).create(injector);
25031
25108
  // Only Fixed list use plainToClassFromExist
25032
25109
  // Better performance
25033
25110
  // TODO AW 30/12/20 figure out why FixedLists need plainToClassFromExist
@@ -25036,28 +25113,41 @@ class FieldWriteComponent extends AbstractFieldWriteComponent {
25036
25113
  if (FIX_CASEFIELD_FOR.indexOf(this.caseField.field_type.type) > -1 && !(this.caseField instanceof CaseField)) {
25037
25114
  this.caseField = plainToClassFromExist(new CaseField(), this.caseField);
25038
25115
  }
25039
- component.instance['caseField'] = this.caseField;
25040
- component.instance['caseFields'] = this.caseFields;
25041
- component.instance['formGroup'] = this.formGroup;
25042
- component.instance['parent'] = this.parent;
25043
- component.instance['idPrefix'] = this.idPrefix;
25116
+ this.applyInputsToChild();
25044
25117
  if (this.caseField.field_type.id === 'AddressGlobal') {
25045
- component.instance['ignoreMandatory'] = true;
25118
+ this.componentRef.instance['ignoreMandatory'] = true;
25046
25119
  }
25047
- component.instance['isExpanded'] = this.isExpanded;
25048
- component.instance['isInSearchBlock'] = this.isInSearchBlock;
25049
- this.fieldContainer.insert(component.hostView);
25120
+ this.fieldContainer.insert(this.componentRef.hostView);
25050
25121
  // EUI-3267.
25051
25122
  // Set up the flag for whether this can have a grey bar.
25052
25123
  this.canHaveGreyBar = this.caseField.show_condition && this.caseField.field_type.type !== 'Collection';
25053
25124
  }
25125
+ ngOnChanges(changes) {
25126
+ if (this.componentRef && (changes.caseField || changes.caseFields || changes.formGroup || changes.parent || changes.idPrefix
25127
+ || changes.isExpanded || changes.isInSearchBlock)) {
25128
+ this.applyInputsToChild();
25129
+ this.componentRef.changeDetectorRef.detectChanges();
25130
+ }
25131
+ }
25132
+ applyInputsToChild() {
25133
+ if (!this.componentRef) {
25134
+ return;
25135
+ }
25136
+ this.componentRef.instance['caseField'] = this.caseField;
25137
+ this.componentRef.instance['caseFields'] = this.caseFields;
25138
+ this.componentRef.instance['formGroup'] = this.formGroup;
25139
+ this.componentRef.instance['parent'] = this.parent;
25140
+ this.componentRef.instance['idPrefix'] = this.idPrefix;
25141
+ this.componentRef.instance['isExpanded'] = this.isExpanded;
25142
+ this.componentRef.instance['isInSearchBlock'] = this.isInSearchBlock;
25143
+ }
25054
25144
  static ɵfac = function FieldWriteComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FieldWriteComponent)(i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(PaletteService)); };
25055
25145
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FieldWriteComponent, selectors: [["ccd-field-write"]], viewQuery: function FieldWriteComponent_Query(rf, ctx) { if (rf & 1) {
25056
25146
  i0.ɵɵviewQuery(_c0$y, 7, ViewContainerRef);
25057
25147
  } if (rf & 2) {
25058
25148
  let _t;
25059
25149
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fieldContainer = _t.first);
25060
- } }, inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 3, consts: [["fieldContainer", ""], [3, "hidden"]], template: function FieldWriteComponent_Template(rf, ctx) { if (rf & 1) {
25150
+ } }, inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 3, vars: 3, consts: [["fieldContainer", ""], [3, "hidden"]], template: function FieldWriteComponent_Template(rf, ctx) { if (rf & 1) {
25061
25151
  i0.ɵɵelementStart(0, "div", 1);
25062
25152
  i0.ɵɵelementContainer(1, null, 0);
25063
25153
  i0.ɵɵelementEnd();
@@ -30513,7 +30603,9 @@ class EventLogTableComponent {
30513
30603
  }
30514
30604
  ngOnInit() {
30515
30605
  this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;
30516
- this.isUserExternal = JSON.parse(this.sessionStorage.getItem('userDetails')).roles.includes('pui-case-manager');
30606
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
30607
+ const roles = userDetails?.roles || [];
30608
+ this.isUserExternal = roles.includes('pui-case-manager');
30517
30609
  }
30518
30610
  select(event) {
30519
30611
  this.selected = event;
@@ -30602,7 +30694,7 @@ class EventLogTableComponent {
30602
30694
  }], onCaseHistory: [{
30603
30695
  type: Output
30604
30696
  }] }); })();
30605
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 12 }); })();
30697
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 13 }); })();
30606
30698
 
30607
30699
  function EventLogComponent_ccd_event_log_table_3_Template(rf, ctx) { if (rf & 1) {
30608
30700
  const _r1 = i0.ɵɵgetCurrentView();
@@ -30830,6 +30922,101 @@ class ReadFieldsFilterPipe {
30830
30922
  static isCompound(field) {
30831
30923
  return ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type];
30832
30924
  }
30925
+ static findAncestorOfType(field, type) {
30926
+ let current = field?.parent;
30927
+ while (current) {
30928
+ if (current?.field_type?.type === type) {
30929
+ return current;
30930
+ }
30931
+ current = current.parent || undefined;
30932
+ }
30933
+ return undefined;
30934
+ }
30935
+ static getCollectionItemValue(field) {
30936
+ let current = field?.parent;
30937
+ while (current) {
30938
+ if (current?.field_type?.type === 'Complex' && current?.parent?.field_type?.type === 'Collection') {
30939
+ return current.value || {};
30940
+ }
30941
+ current = current.parent || undefined;
30942
+ }
30943
+ return {};
30944
+ }
30945
+ static getBaseConditionalShowContext(formGroup, values) {
30946
+ const currentValues = values || {};
30947
+ if (!formGroup) {
30948
+ return { checkConditionalShowAgainst: currentValues, formGroupAvailable: false };
30949
+ }
30950
+ return {
30951
+ checkConditionalShowAgainst: formGroup.value ? formGroup.parent.getRawValue().data : formGroup,
30952
+ formGroupAvailable: true
30953
+ };
30954
+ }
30955
+ static resolvePrefixedConditionalShowContext(checkConditionalShowAgainst, currentValues, idPrefix) {
30956
+ const fieldId = idPrefix.substring(0, idPrefix.indexOf('_'));
30957
+ if (checkConditionalShowAgainst[fieldId]) {
30958
+ return {
30959
+ checkConditionalShowAgainst: currentValues,
30960
+ formGroupAvailable: false
30961
+ };
30962
+ }
30963
+ return {
30964
+ checkConditionalShowAgainst,
30965
+ formGroupAvailable: true
30966
+ };
30967
+ }
30968
+ static resolveCollectionConditionalShowContext(complexField, checkConditionalShowAgainst, currentValues) {
30969
+ const collectionItemValue = ReadFieldsFilterPipe.getCollectionItemValue(complexField);
30970
+ if (Object.keys(collectionItemValue).length > 0) {
30971
+ return {
30972
+ checkConditionalShowAgainst: Object.assign(collectionItemValue, currentValues),
30973
+ formGroupAvailable: false
30974
+ };
30975
+ }
30976
+ return {
30977
+ checkConditionalShowAgainst: Object.assign(checkConditionalShowAgainst, currentValues),
30978
+ formGroupAvailable: false
30979
+ };
30980
+ }
30981
+ static resolveFallbackConditionalShowContext(checkConditionalShowAgainst, currentValues) {
30982
+ return {
30983
+ checkConditionalShowAgainst: Object.assign(checkConditionalShowAgainst, currentValues),
30984
+ formGroupAvailable: false
30985
+ };
30986
+ }
30987
+ static getConditionalShowContext(complexField, formGroup, path, idPrefix, values) {
30988
+ const currentValues = values || {};
30989
+ const baseContext = ReadFieldsFilterPipe.getBaseConditionalShowContext(formGroup, currentValues);
30990
+ let checkConditionalShowAgainst = baseContext.checkConditionalShowAgainst;
30991
+ let formGroupAvailable = baseContext.formGroupAvailable;
30992
+ if (!formGroup || idPrefix === undefined) {
30993
+ return { checkConditionalShowAgainst, formGroupAvailable };
30994
+ }
30995
+ if (idPrefix !== '') {
30996
+ return ReadFieldsFilterPipe.resolvePrefixedConditionalShowContext(checkConditionalShowAgainst, currentValues, idPrefix);
30997
+ }
30998
+ if (path === 'parent_value' && ReadFieldsFilterPipe.findAncestorOfType(complexField, 'Collection')) {
30999
+ return ReadFieldsFilterPipe.resolveCollectionConditionalShowContext(complexField, checkConditionalShowAgainst, currentValues);
31000
+ }
31001
+ return ReadFieldsFilterPipe.resolveFallbackConditionalShowContext(checkConditionalShowAgainst, currentValues);
31002
+ }
31003
+ static cloneFieldWithValue(field, values, index) {
31004
+ const clone = FieldsUtils.cloneObject(field);
31005
+ const value = ReadFieldsFilterPipe.getValue(field, values, index);
31006
+ if (!ReadFieldsFilterPipe.isEmpty(value)) {
31007
+ clone.value = value;
31008
+ }
31009
+ return clone;
31010
+ }
31011
+ static applyDisplayContextAndHidden(field, complexField, setupHidden, checkConditionalShowAgainst, formGroupAvailable, path) {
31012
+ if (!field.display_context && FieldsUtils.isValidDisplayContext(complexField.display_context)) {
31013
+ field.display_context = complexField.display_context;
31014
+ }
31015
+ if (setupHidden) {
31016
+ ReadFieldsFilterPipe.evaluateConditionalShow(field, checkConditionalShowAgainst, path, formGroupAvailable, complexField.id);
31017
+ }
31018
+ return field;
31019
+ }
30833
31020
  static isValidCompound(field, value, checkConditionalShowAgainst) {
30834
31021
  return ReadFieldsFilterPipe.isCompound(field)
30835
31022
  && ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value, checkConditionalShowAgainst);
@@ -30901,46 +31088,11 @@ class ReadFieldsFilterPipe {
30901
31088
  }
30902
31089
  const fields = complexField.field_type.complex_fields || [];
30903
31090
  const values = complexField.value || {};
30904
- let checkConditionalShowAgainst = values;
30905
- let formGroupAvailable = false;
30906
- if (formGroup) {
30907
- checkConditionalShowAgainst = formGroup.value ? formGroup.parent.getRawValue().data : formGroup;
30908
- formGroupAvailable = true;
30909
- if (idPrefix !== undefined) {
30910
- if (idPrefix !== '') {
30911
- const fieldId = idPrefix.substring(0, idPrefix.indexOf('_'));
30912
- if (checkConditionalShowAgainst[fieldId]) {
30913
- checkConditionalShowAgainst = values;
30914
- formGroupAvailable = false;
30915
- }
30916
- }
30917
- else {
30918
- checkConditionalShowAgainst = Object.assign(checkConditionalShowAgainst, values);
30919
- formGroupAvailable = false;
30920
- }
30921
- }
30922
- }
31091
+ const conditionalShowContext = ReadFieldsFilterPipe.getConditionalShowContext(complexField, formGroup, path, idPrefix, values);
30923
31092
  return fields
30924
- .map(f => {
30925
- const clone = FieldsUtils.cloneObject(f);
30926
- const value = ReadFieldsFilterPipe.getValue(f, values, index);
30927
- if (!ReadFieldsFilterPipe.isEmpty(value)) {
30928
- clone.value = value;
30929
- }
30930
- return clone;
30931
- })
30932
- .map(f => {
30933
- if (!f.display_context) {
30934
- if (FieldsUtils.isValidDisplayContext(complexField.display_context)) {
30935
- f.display_context = complexField.display_context;
30936
- }
30937
- }
30938
- if (setupHidden) {
30939
- ReadFieldsFilterPipe.evaluateConditionalShow(f, checkConditionalShowAgainst, path, formGroupAvailable, complexField.id);
30940
- }
30941
- return f;
30942
- })
30943
- .filter(f => keepEmpty || ReadFieldsFilterPipe.keepField(f, undefined, false, checkConditionalShowAgainst));
31093
+ .map(f => ReadFieldsFilterPipe.cloneFieldWithValue(f, values, index))
31094
+ .map(f => ReadFieldsFilterPipe.applyDisplayContextAndHidden(f, complexField, setupHidden, conditionalShowContext.checkConditionalShowAgainst, conditionalShowContext.formGroupAvailable, path))
31095
+ .filter(f => keepEmpty || ReadFieldsFilterPipe.keepField(f, undefined, false, conditionalShowContext.checkConditionalShowAgainst));
30944
31096
  }
30945
31097
  static ɵfac = function ReadFieldsFilterPipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadFieldsFilterPipe)(); };
30946
31098
  static ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "ccdReadFieldsFilter", type: ReadFieldsFilterPipe, pure: true, standalone: false });
@@ -35384,7 +35536,7 @@ class CaseResolver {
35384
35536
  // as discussed for EUI-5456, need functionality to go to default page
35385
35537
  goToDefaultPage() {
35386
35538
  console.info('Going to default page!');
35387
- const userDetails = JSON.parse(this.sessionStorage.getItem(USER_DETAILS));
35539
+ const userDetails = safeJsonParse(this.sessionStorage.getItem(USER_DETAILS));
35388
35540
  userDetails && userDetails.roles
35389
35541
  && !userDetails.roles.includes(PUI_CASE_MANAGER)
35390
35542
  &&
@@ -35437,7 +35589,7 @@ class EventTriggerResolver {
35437
35589
  const query = route.queryParams;
35438
35590
  // If jurisdiction or caseType are missing, redirect to correct URL
35439
35591
  if (!jurisdiction || !caseType) {
35440
- const caseInfo = JSON.parse(this.sessionStorageService.getItem('caseInfo') || '{}');
35592
+ const caseInfo = safeJsonParse(this.sessionStorageService.getItem('caseInfo'), {});
35441
35593
  const jurisdictionId = caseInfo?.jurisdiction;
35442
35594
  const caseTypeId = caseInfo?.caseType;
35443
35595
  const caseId = caseInfo?.caseId;
@@ -37420,12 +37572,9 @@ class TaskAssignedComponent {
37420
37572
  // Current user is a caseworker?
37421
37573
  this.jurisdiction = this.task.jurisdiction;
37422
37574
  this.caseType = this.task.case_type_id;
37423
- this.caseworkerSubscription = this.caseworkerService.getCaseworkers(this.task.jurisdiction).subscribe(result => {
37424
- if (result && result[0].service === this.task.jurisdiction && result[0].caseworkers) {
37425
- const caseworker = result[0].caseworkers.find(x => x.idamId === this.task.assignee);
37426
- if (caseworker) {
37427
- this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
37428
- }
37575
+ this.caseworkerSubscription = this.caseworkerService.getUserByIdamId(this.task.assignee).subscribe(caseworker => {
37576
+ if (caseworker) {
37577
+ this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;
37429
37578
  }
37430
37579
  if (!this.assignedUserName) {
37431
37580
  // Current user is a judicial user?
@@ -39714,7 +39863,7 @@ class CreateCaseFiltersComponent {
39714
39863
  return events.filter(event => event.pre_states.length === 0);
39715
39864
  }
39716
39865
  retainEventsWithCreateRights(events) {
39717
- const userProfile = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
39866
+ const userProfile = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), null);
39718
39867
  return events.filter(event => userProfile && userProfile.roles &&
39719
39868
  !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));
39720
39869
  }
@@ -39852,7 +40001,7 @@ class CreateCaseFiltersComponent {
39852
40001
  }], selectionChanged: [{
39853
40002
  type: Output
39854
40003
  }] }); })();
39855
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 19 }); })();
40004
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 20 }); })();
39856
40005
 
39857
40006
  class CreateCaseFiltersModule {
39858
40007
  static ɵfac = function CreateCaseFiltersModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CreateCaseFiltersModule)(); };
@@ -41473,5 +41622,5 @@ class TestRouteSnapshotBuilder {
41473
41622
  * Generated bundle index. Do not edit.
41474
41623
  */
41475
41624
 
41476
- 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 };
41625
+ 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 };
41477
41626
  //# sourceMappingURL=hmcts-ccd-case-ui-toolkit.mjs.map