@hmcts/ccd-case-ui-toolkit 7.3.61 → 7.3.62-fix-case-filter-issue-v2

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, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, SecurityContext, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, Injectable, DOCUMENT, 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';
@@ -1321,6 +1321,140 @@ class CaseEditorConfig {
1321
1321
  enable_service_specific_multi_followups;
1322
1322
  }
1323
1323
 
1324
+ class StructuredLoggerService {
1325
+ static CIRCULAR_VALUE = '[Circular]';
1326
+ static MAX_DEPTH_VALUE = '[MaxDepth]';
1327
+ static MAX_REDACTION_DEPTH = 10;
1328
+ static REDACTED_VALUE = '[REDACTED]';
1329
+ static KEY_VALUE_PATTERN = /\b([a-z][\w-]*(?:[ _-][a-z][\w-]*)?)([ \t]*[:=][ \t]*)((?:Bearer[ \t]+)?)([^,;&\s]+)/gi;
1330
+ static SENSITIVE_KEY_PATTERN = /(password|passcode|pwd|secret|token|authori[sz]ation|authentication|auth[-_ ]?context|^auth$|api[-_ ]?key|cookie|session|credential)/i;
1331
+ static BEARER_TOKEN_PATTERN = /\bBearer\s+([\w.~+/-]+=*)/gi;
1332
+ debug(message, context) {
1333
+ this.write('debug', message, context);
1334
+ }
1335
+ error(message, context) {
1336
+ this.write('error', message, context);
1337
+ }
1338
+ info(message, context) {
1339
+ this.write('info', message, context);
1340
+ }
1341
+ warn(message, context) {
1342
+ this.write('warn', message, context);
1343
+ }
1344
+ redact(value) {
1345
+ return this.redactValue(value, new WeakSet(), false, 0);
1346
+ }
1347
+ write(level, message, context) {
1348
+ const entry = {
1349
+ level,
1350
+ message,
1351
+ timestamp: new Date().toISOString()
1352
+ };
1353
+ if (context !== undefined) {
1354
+ entry.context = this.redact(context);
1355
+ }
1356
+ switch (level) {
1357
+ case 'error':
1358
+ console.error(entry);
1359
+ break;
1360
+ case 'warn':
1361
+ console.warn(entry);
1362
+ break;
1363
+ default:
1364
+ console.log(entry);
1365
+ }
1366
+ }
1367
+ redactValue(value, seen, redactCurrentValue, depth) {
1368
+ if (redactCurrentValue) {
1369
+ return StructuredLoggerService.REDACTED_VALUE;
1370
+ }
1371
+ if (value === null || value === undefined) {
1372
+ return value;
1373
+ }
1374
+ if (typeof value === 'string') {
1375
+ return this.redactSensitiveString(value);
1376
+ }
1377
+ if (typeof value !== 'object') {
1378
+ return value;
1379
+ }
1380
+ if (seen.has(value)) {
1381
+ return StructuredLoggerService.CIRCULAR_VALUE;
1382
+ }
1383
+ if (depth >= StructuredLoggerService.MAX_REDACTION_DEPTH) {
1384
+ return StructuredLoggerService.MAX_DEPTH_VALUE;
1385
+ }
1386
+ seen.add(value);
1387
+ let redactedValue;
1388
+ if (value instanceof Date) {
1389
+ redactedValue = value.toISOString();
1390
+ }
1391
+ else if (value instanceof Error) {
1392
+ redactedValue = this.redactError(value, seen, depth);
1393
+ }
1394
+ else if (Array.isArray(value)) {
1395
+ redactedValue = value.map(item => this.redactValue(item, seen, false, depth + 1));
1396
+ }
1397
+ else {
1398
+ redactedValue = this.redactObject(value, seen, depth);
1399
+ }
1400
+ seen.delete(value);
1401
+ return redactedValue;
1402
+ }
1403
+ redactError(error, seen, depth) {
1404
+ const redactedError = {
1405
+ name: this.redactValue(error.name, seen, false, depth + 1),
1406
+ message: this.redactValue(error.message, seen, false, depth + 1)
1407
+ };
1408
+ if (error.stack) {
1409
+ redactedError.stack = this.redactValue(error.stack, seen, false, depth + 1);
1410
+ }
1411
+ const errorContext = error;
1412
+ Object.keys(errorContext).forEach(key => {
1413
+ redactedError[key] = this.redactValue(errorContext[key], seen, this.isSensitiveKey(key), depth + 1);
1414
+ });
1415
+ return redactedError;
1416
+ }
1417
+ redactObject(value, seen, depth) {
1418
+ const redactedValue = {};
1419
+ const hasSensitiveNamedValue = this.hasSensitiveNamedValue(value);
1420
+ Object.keys(value).forEach(key => {
1421
+ redactedValue[key] = this.redactValue(value[key], seen, this.isSensitiveKey(key) || (hasSensitiveNamedValue && this.isValueKey(key)), depth + 1);
1422
+ });
1423
+ return redactedValue;
1424
+ }
1425
+ redactSensitiveString(value) {
1426
+ return value
1427
+ .replace(StructuredLoggerService.KEY_VALUE_PATTERN, (match, key, separator, bearerPrefix) => {
1428
+ return this.isSensitiveKey(key) ? `${key}${separator}${bearerPrefix}${StructuredLoggerService.REDACTED_VALUE}` : match;
1429
+ })
1430
+ .replace(StructuredLoggerService.BEARER_TOKEN_PATTERN, 'Bearer [REDACTED]');
1431
+ }
1432
+ hasSensitiveNamedValue(value) {
1433
+ return Object.keys(value)
1434
+ .some(key => {
1435
+ const namedValue = value[key];
1436
+ return this.isNameKey(key) && typeof namedValue === 'string' && this.isSensitiveKey(namedValue);
1437
+ });
1438
+ }
1439
+ isNameKey(key) {
1440
+ return ['key', 'name'].includes(key.toLowerCase());
1441
+ }
1442
+ isSensitiveKey(key) {
1443
+ return StructuredLoggerService.SENSITIVE_KEY_PATTERN.test(key);
1444
+ }
1445
+ isValueKey(key) {
1446
+ return ['value', 'values'].includes(key.toLowerCase());
1447
+ }
1448
+ static ɵfac = function StructuredLoggerService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || StructuredLoggerService)(); };
1449
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: StructuredLoggerService, factory: StructuredLoggerService.ɵfac, providedIn: 'root' });
1450
+ }
1451
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StructuredLoggerService, [{
1452
+ type: Injectable,
1453
+ args: [{
1454
+ providedIn: 'root'
1455
+ }]
1456
+ }], null, null); })();
1457
+
1324
1458
  class HttpError {
1325
1459
  constructor() {
1326
1460
  this.timestamp = new Date().toISOString();
@@ -1461,6 +1595,7 @@ class LoadingModule {
1461
1595
  class HttpErrorService {
1462
1596
  authService;
1463
1597
  loadingService;
1598
+ static logger = new StructuredLoggerService();
1464
1599
  constructor(authService, loadingService) {
1465
1600
  this.authService = authService;
1466
1601
  this.loadingService = loadingService;
@@ -1479,7 +1614,7 @@ class HttpErrorService {
1479
1614
  httpError = HttpError.from(error);
1480
1615
  }
1481
1616
  catch (e) {
1482
- console.error(e, e.message);
1617
+ HttpErrorService.logger.error('Unable to convert HTTP error response.', { error: e });
1483
1618
  }
1484
1619
  }
1485
1620
  if (!httpError.status) {
@@ -1505,8 +1640,6 @@ class HttpErrorService {
1505
1640
  return error;
1506
1641
  }
1507
1642
  handle(error, redirectIfNotAuthorised = true) {
1508
- console.error('Handling error in http error service.');
1509
- console.error(error);
1510
1643
  if (this.loadingService.hasSharedSpinner()) {
1511
1644
  this.loadingService.unregisterSharedSpinner();
1512
1645
  }
@@ -1646,6 +1779,7 @@ class SessionStorageService {
1646
1779
  }]
1647
1780
  }], null, null); })();
1648
1781
 
1782
+ const logger = new StructuredLoggerService();
1649
1783
  function safeJsonParse(value, fallback = null) {
1650
1784
  if (!value) {
1651
1785
  return fallback;
@@ -1655,8 +1789,7 @@ function safeJsonParse(value, fallback = null) {
1655
1789
  }
1656
1790
  catch (error) {
1657
1791
  // Log for diagnostics, then return fallback to avoid UI crashes.
1658
- // eslint-disable-next-line no-console
1659
- console.error('safeJsonParse failed to parse JSON', error);
1792
+ logger.error('safeJsonParse failed to parse JSON.', { error });
1660
1793
  return fallback;
1661
1794
  }
1662
1795
  }
@@ -1668,6 +1801,7 @@ class SessionStorageGuard {
1668
1801
  router;
1669
1802
  errorRoute;
1670
1803
  errorLogger;
1804
+ logger = new StructuredLoggerService();
1671
1805
  constructor(sessionStorageService, router, errorRoute, errorLogger) {
1672
1806
  this.sessionStorageService = sessionStorageService;
1673
1807
  this.router = router;
@@ -1688,8 +1822,7 @@ class SessionStorageGuard {
1688
1822
  this.errorLogger(error);
1689
1823
  }
1690
1824
  else {
1691
- // eslint-disable-next-line no-console
1692
- console.error('Invalid userDetails in session storage', error);
1825
+ this.logger.error('Invalid userDetails in session storage.', { error });
1693
1826
  }
1694
1827
  this.router.navigate([this.errorRoute || '/session-error']);
1695
1828
  return false;
@@ -1740,6 +1873,7 @@ class ActivityService {
1740
1873
  sessionStorageService;
1741
1874
  static get ACTIVITY_VIEW() { return 'view'; }
1742
1875
  static get ACTIVITY_EDIT() { return 'edit'; }
1876
+ logger = new StructuredLoggerService();
1743
1877
  constructor(http, appConfig, sessionStorageService) {
1744
1878
  this.http = http;
1745
1879
  this.appConfig = appConfig;
@@ -1778,7 +1912,7 @@ class ActivityService {
1778
1912
  .pipe(map(response => response));
1779
1913
  }
1780
1914
  catch (error) {
1781
- console.log(`user may not be authenticated.${error}`);
1915
+ this.logUserMayNotBeAuthenticated(error);
1782
1916
  }
1783
1917
  }
1784
1918
  postActivity(caseId, activity) {
@@ -1791,7 +1925,7 @@ class ActivityService {
1791
1925
  .pipe(map(response => response));
1792
1926
  }
1793
1927
  catch (error) {
1794
- console.log(`user may not be authenticated.${error}`);
1928
+ this.logUserMayNotBeAuthenticated(error);
1795
1929
  }
1796
1930
  }
1797
1931
  verifyUserIsAuthorized() {
@@ -1804,6 +1938,9 @@ class ActivityService {
1804
1938
  activityUrl() {
1805
1939
  return this.appConfig.getActivityUrl();
1806
1940
  }
1941
+ logUserMayNotBeAuthenticated(error) {
1942
+ this.logger.error('User may not be authenticated. Activity request was not sent.', { error });
1943
+ }
1807
1944
  static ɵfac = function ActivityService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActivityService)(i0.ɵɵinject(HttpService), i0.ɵɵinject(AbstractAppConfig), i0.ɵɵinject(SessionStorageService)); };
1808
1945
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ActivityService, factory: ActivityService.ɵfac });
1809
1946
  }
@@ -1816,6 +1953,7 @@ class ActivityPollingService {
1816
1953
  activityService;
1817
1954
  ngZone;
1818
1955
  config;
1956
+ logger = new StructuredLoggerService();
1819
1957
  pendingRequests = new Map();
1820
1958
  currentTimeoutHandle;
1821
1959
  pollActivitiesSubscription;
@@ -1859,7 +1997,6 @@ class ActivityPollingService {
1859
1997
  }
1860
1998
  }
1861
1999
  if (this.pendingRequests.size >= this.maxRequestsPerBatch) {
1862
- // console.log('max pending hit: flushing requests');
1863
2000
  this.flushRequests();
1864
2001
  }
1865
2002
  return subject;
@@ -1895,7 +2032,6 @@ class ActivityPollingService {
1895
2032
  }
1896
2033
  performBatchRequest(requests) {
1897
2034
  const caseIds = Array.from(requests.keys()).join();
1898
- // console.log('issuing batch request for cases: ' + caseIds);
1899
2035
  this.ngZone.runOutsideAngular(() => {
1900
2036
  // run polling outside angular zone so it does not trigger change detection
1901
2037
  this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe({
@@ -1907,7 +2043,7 @@ class ActivityPollingService {
1907
2043
  });
1908
2044
  }),
1909
2045
  error: (err) => this.ngZone.run(() => {
1910
- console.log(`error: ${err}`);
2046
+ this.logger.error('Error while polling activities.', { error: err });
1911
2047
  Array.from(requests.values()).forEach((subject) => subject.error(err));
1912
2048
  })
1913
2049
  });
@@ -3408,6 +3544,7 @@ __decorate([
3408
3544
 
3409
3545
  // @dynamic
3410
3546
  class CaseField {
3547
+ static logger = new StructuredLoggerService();
3411
3548
  id;
3412
3549
  hidden;
3413
3550
  hiddenCannotChange;
@@ -3550,7 +3687,7 @@ class CaseField {
3550
3687
  }
3551
3688
  }
3552
3689
  else {
3553
- console.log("Path too long, possible circular reference in case field hierarchy");
3690
+ CaseField.logger.error('Path too long, possible circular reference in case field hierarchy.');
3554
3691
  return this.id;
3555
3692
  }
3556
3693
  }
@@ -4033,6 +4170,7 @@ class WorkbasketInput {
4033
4170
 
4034
4171
  // @dynamic
4035
4172
  class FieldsUtils {
4173
+ static logger = new StructuredLoggerService();
4036
4174
  static caseLevelCaseFlagsFieldId = 'caseFlags';
4037
4175
  static currencyPipe = new CurrencyPipe('en-GB');
4038
4176
  static datePipe = new DatePipe(new FormatTranslatorService());
@@ -4320,7 +4458,7 @@ class FieldsUtils {
4320
4458
  }
4321
4459
  }
4322
4460
  catch (error) {
4323
- console.log(error);
4461
+ FieldsUtils.logger.error('Error setting dynamic list definition.', { error });
4324
4462
  }
4325
4463
  });
4326
4464
  }
@@ -4763,6 +4901,7 @@ const conditionSource = `{
4763
4901
  var peg = generate(conditionSource);
4764
4902
 
4765
4903
  class ConditionParser {
4904
+ static logger = new StructuredLoggerService();
4766
4905
  /**
4767
4906
  * Parse the raw formula and output structured condition data
4768
4907
  * that can be used in evaluating show/hide logic
@@ -4939,14 +5078,14 @@ class ConditionParser {
4939
5078
  return (fields[head][arrayIndex] !== undefined) ? this.findValueForComplexCondition(fields[head][arrayIndex]['value'], tail[0], tail.slice(1), dropNumberPath.join('_')) : null;
4940
5079
  }
4941
5080
  catch (e) {
4942
- console.error('Error while parsing number', pathTail[0], e);
5081
+ this.logger.error('Error while parsing form array path index.', { error: e, pathIndex: pathTail[0] });
4943
5082
  }
4944
5083
  }
4945
5084
  }
4946
5085
  else {
4947
5086
  // EXUI-2460 - if path present then show error, otherwise log message to stop unnecessary console errors
4948
- path ? console.error('Path in formArray should start with ', head, ', full path: ', path) :
4949
- console.log('Path not present in formArray');
5087
+ path ? this.logger.error('Path in formArray should start with the expected field.', { expectedHead: head, path }) :
5088
+ this.logger.info('Path not present in formArray.');
4950
5089
  }
4951
5090
  }
4952
5091
  static removeStarChar(str) {
@@ -8163,13 +8302,17 @@ class ArtificialDelayContext {
8163
8302
  }
8164
8303
  }
8165
8304
  class RetryUtil {
8305
+ logger = new StructuredLoggerService();
8166
8306
  pipeTimeoutMechanismOn(in$, preferredArtificialDelay, timeoutPeriods) {
8167
8307
  const artificialDelayContext = new ArtificialDelayContext(preferredArtificialDelay);
8168
- console.info(`Piping a retry mechanism with timeouts {${timeoutPeriods}}.`);
8169
- console.info(`Artificial delay will be applied: ${artificialDelayContext.shouldApplyArtificialDelay()}.`);
8308
+ this.logger.info('Piping a retry mechanism with timeouts.', { timeoutPeriods });
8309
+ this.logger.info('Artificial delay setting resolved.', { artificialDelayApplied: artificialDelayContext.shouldApplyArtificialDelay() });
8170
8310
  let out$ = in$;
8171
8311
  if (artificialDelayContext.shouldApplyArtificialDelay()) {
8172
- console.info(`Preferred artificial delay: ${preferredArtificialDelay} seconds. Actual delay selected: ${artificialDelayContext.getActualDelay()}`);
8312
+ this.logger.info('Preferred artificial delay selected.', {
8313
+ actualDelaySeconds: artificialDelayContext.getActualDelay(),
8314
+ preferredDelaySeconds: preferredArtificialDelay
8315
+ });
8173
8316
  out$ = this.pipeArtificialDelayOn(out$, artificialDelayContext);
8174
8317
  }
8175
8318
  out$ = this.pipeTimeOutControlOn(out$, timeoutPeriods);
@@ -8178,36 +8321,35 @@ class RetryUtil {
8178
8321
  }
8179
8322
  pipeTimeOutControlOn(in$, timeoutPeriods) {
8180
8323
  const timeOutAfterSeconds = timeoutPeriods[0];
8181
- console.info(`Piping timeout control with ${timeOutAfterSeconds} seconds.`);
8324
+ this.logger.info('Piping timeout control.', { timeoutSeconds: timeOutAfterSeconds });
8182
8325
  const out$ = in$.pipe(timeout(timeOutAfterSeconds * 1000));
8183
8326
  return out$;
8184
8327
  }
8185
8328
  pipeRetryMechanismOn(in$, artificialDelayContext) {
8186
8329
  const retryStrategy = (errors) => {
8187
8330
  return errors.pipe(mergeMap((error, i) => {
8188
- console.error(`Mapping error ${error?.name}, ${i}`);
8189
- console.error(error);
8331
+ this.logger.error('Mapping retry error.', { error, errorName: error?.name, attempt: i });
8190
8332
  if (error?.name === 'TimeoutError' && i === 0) {
8191
8333
  artificialDelayContext.turnOffArtificialDelays();
8192
- console.info('Will retry, after a timeout error.');
8334
+ this.logger.info('Will retry after a timeout error.');
8193
8335
  }
8194
8336
  else {
8195
- console.error('Will NOT retry.');
8337
+ this.logger.error('Will not retry request after error.', { error, errorName: error?.name, attempt: i });
8196
8338
  throw error;
8197
8339
  }
8198
8340
  return timer(0);
8199
- }), finalize(() => console.log('We are done!')));
8341
+ }), finalize(() => undefined));
8200
8342
  };
8201
8343
  const out$ = in$.pipe(retryWhen(retryStrategy));
8202
8344
  return out$;
8203
8345
  }
8204
8346
  pipeArtificialDelayOn(in$, artificialDelayContext) {
8205
8347
  let out$ = in$.pipe(tap(() => {
8206
- console.log(`Artificially delaying for ${artificialDelayContext.getActualDelay()} seconds..`);
8348
+ this.logger.info('Artificial delay started.', { delaySeconds: artificialDelayContext.getActualDelay() });
8207
8349
  }));
8208
8350
  out$ = out$.pipe(delayWhen(() => timer(artificialDelayContext.getActualDelay() * 1000)));
8209
8351
  out$ = out$.pipe(tap(() => {
8210
- console.log(`Artificially delayed for ${artificialDelayContext.getActualDelay()} seconds..`);
8352
+ this.logger.info('Artificial delay completed.', { delaySeconds: artificialDelayContext.getActualDelay() });
8211
8353
  }));
8212
8354
  return out$;
8213
8355
  }
@@ -8259,6 +8401,26 @@ class WindowService {
8259
8401
  type: Injectable
8260
8402
  }], null, null); })();
8261
8403
 
8404
+ class FocusService {
8405
+ /** unique ID of DOM element this service will focus on */
8406
+ elementIdToFocus = 'focusService-elementIdToFocus';
8407
+ /**
8408
+ * Focus on a specific element with the elementIdToFocus.
8409
+ * If there is no element in the DOM, no action is taken.
8410
+ */
8411
+ focus() {
8412
+ const elementToFocus = document.getElementById(this.elementIdToFocus);
8413
+ if (elementToFocus) {
8414
+ elementToFocus.focus();
8415
+ }
8416
+ }
8417
+ static ɵfac = function FocusService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FocusService)(); };
8418
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FocusService, factory: FocusService.ɵfac });
8419
+ }
8420
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FocusService, [{
8421
+ type: Injectable
8422
+ }], null, null); })();
8423
+
8262
8424
  class WorkbasketInputFilterService {
8263
8425
  httpService;
8264
8426
  appConfig;
@@ -8420,6 +8582,7 @@ class SearchResultViewItemComparatorFactory {
8420
8582
  class OrganisationService {
8421
8583
  http;
8422
8584
  appconfig;
8585
+ logger = new StructuredLoggerService();
8423
8586
  constructor(http, appconfig) {
8424
8587
  this.http = http;
8425
8588
  this.appconfig = appconfig;
@@ -8452,7 +8615,7 @@ class OrganisationService {
8452
8615
  const cacheTimeOut = this.appconfig.getCacheTimeOut();
8453
8616
  this.organisations$ = this.http.get(url)
8454
8617
  .pipe(map((orgs) => OrganisationService.mapOrganisation(orgs)), publishReplay(1, cacheTimeOut), refCount(), take(1), catchError(e => {
8455
- console.log(e);
8618
+ this.logger.error('Error while retrieving active organisations.', { error: e });
8456
8619
  // Handle error and return blank Observable array
8457
8620
  return of([]);
8458
8621
  }));
@@ -8915,9 +9078,14 @@ class CaseEditWizardGuard {
8915
9078
  }
8916
9079
  goToFirst(wizard, canShowPredicate, route) {
8917
9080
  const firstPage = wizard.firstPage(canShowPredicate);
8918
- // If there’s no specific wizard page called, it makes another navigation to either the first page available or to the submit page
8919
- // TODO should find a way to navigate to target page without going through the whole loop (and make a second call to BE) again
8920
- return this.router.navigate([...this.parentUrlSegments(route), firstPage ? firstPage.id : 'submit'], { queryParams: route.queryParams });
9081
+ // This route transition is an internal wizard redirect used to append the first page id to the URL.
9082
+ // Mark it in navigation state so EventStartGuard can skip duplicate work allocation checks.
9083
+ return this.router.navigate([...this.parentUrlSegments(route), firstPage ? firstPage.id : 'submit'], {
9084
+ queryParams: route.queryParams,
9085
+ state: {
9086
+ [EVENT_START_FIRST_PAGE_REDIRECT]: true
9087
+ }
9088
+ });
8921
9089
  }
8922
9090
  goToSubmit(route) {
8923
9091
  return this.router.navigate([...this.parentUrlSegments(route), 'submit'], { queryParams: route.queryParams });
@@ -9187,7 +9355,6 @@ class EventCompletionStateMachineService {
9187
9355
  }
9188
9356
  entryActionForStateFinal(state, context) {
9189
9357
  // Final actions can be performed here, the state machine finished running
9190
- console.log('FINAL');
9191
9358
  }
9192
9359
  addTransitionsForStateCheckTasksCanBeCompleted() {
9193
9360
  // Complete event and task
@@ -9339,7 +9506,6 @@ class WorkAllocationService {
9339
9506
  // explicitly eat away 401 error and 400 error
9340
9507
  if (error && error.status && (error.status === 401 || error.status === 400)) {
9341
9508
  // do nothing
9342
- console.log('error status 401 or 400', error);
9343
9509
  }
9344
9510
  else {
9345
9511
  return throwError(error);
@@ -10017,7 +10183,7 @@ class CaseEditComponent {
10017
10183
  return of(true);
10018
10184
  }
10019
10185
  finishEventCompletionLogic(eventResponse) {
10020
- this.caseNotifier.cachedCaseView = null;
10186
+ this.caseNotifier.removeCachedCase();
10021
10187
  this.sessionStorageService.removeItem('eventUrl');
10022
10188
  const confirmation = this.buildConfirmation(eventResponse);
10023
10189
  if (confirmation && (confirmation.getHeader() || confirmation.getBody())) {
@@ -10140,6 +10306,7 @@ class CaseEditComponent {
10140
10306
  }] }); })();
10141
10307
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 39 }); })();
10142
10308
 
10309
+ const EVENT_START_FIRST_PAGE_REDIRECT = 'eventStartFirstPageRedirect';
10143
10310
  function convertNonASCIICharacter(character) {
10144
10311
  if (character === '£') {
10145
10312
  // pound sign will be frequently used and works for btoa despite being non-ASCII
@@ -10195,6 +10362,7 @@ class CasesService {
10195
10362
  loadingService;
10196
10363
  sessionStorageService;
10197
10364
  retryUtil;
10365
+ logger = new StructuredLoggerService();
10198
10366
  // Internal (UI) API
10199
10367
  static V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';
10200
10368
  static V2_MEDIATYPE_START_CASE_TRIGGER = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-case-trigger.v2+json;charset=UTF-8';
@@ -10249,12 +10417,11 @@ class CasesService {
10249
10417
  let http$ = this.http.get(url, { headers, observe: 'body' });
10250
10418
  const artificialDelay = this.appConfig.getTimeoutsCaseRetrievalArtificialDelay();
10251
10419
  const timeoutPeriods = this.appConfig.getTimeoutsForCaseRetrieval();
10252
- console.log(`Timeout periods: ${timeoutPeriods} seconds.`);
10253
10420
  if (timeoutPeriods && timeoutPeriods.length > 0 && timeoutPeriods[0] > 0) {
10254
10421
  http$ = this.retryUtil.pipeTimeoutMechanismOn(http$, artificialDelay, timeoutPeriods);
10255
10422
  }
10256
10423
  else {
10257
- console.warn('Skipping to pipe a retry mechanism!');
10424
+ this.logger.warn('Skipping retry mechanism for case view retrieval.');
10258
10425
  }
10259
10426
  http$ = this.pipeErrorProcessor(http$);
10260
10427
  http$ = http$.pipe(finalize(() => this.finalizeGetCaseViewWith(caseId, loadingToken)));
@@ -10262,8 +10429,11 @@ class CasesService {
10262
10429
  }
10263
10430
  pipeErrorProcessor(in$) {
10264
10431
  const out$ = in$.pipe(catchError(error => {
10265
- console.error(`Error while getting case view with getCaseViewV2! Error type: '${typeof error}, Error name: '${error?.name}'`);
10266
- console.error(error);
10432
+ this.logger.error('Error while getting case view with getCaseViewV2.', {
10433
+ error,
10434
+ errorName: error?.name,
10435
+ errorType: typeof error
10436
+ });
10267
10437
  this.errorService.setError(error);
10268
10438
  return throwError(error);
10269
10439
  }));
@@ -10771,6 +10941,7 @@ function CaseEditFormComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
10771
10941
  } }
10772
10942
  class CaseEditFormComponent {
10773
10943
  formValueService;
10944
+ conditionalShowFormDirectives;
10774
10945
  fields = [];
10775
10946
  formGroup;
10776
10947
  caseFields = [];
@@ -10818,8 +10989,17 @@ class CaseEditFormComponent {
10818
10989
  const current = JSON.stringify(this.formValueService.sanitise(changes));
10819
10990
  this.initial !== current ? this.valuesChanged.emit(true) : this.valuesChanged.emit(false);
10820
10991
  }
10992
+ // EXUI-4675 - needed for the race condition caused by the debounce in ConditionalShowFormDirective
10993
+ syncConditionalShowStates() {
10994
+ this.conditionalShowFormDirectives?.forEach(directive => directive.evalAllShowHideConditions());
10995
+ }
10821
10996
  static ɵfac = function CaseEditFormComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditFormComponent)(i0.ɵɵdirectiveInject(FormValueService)); };
10822
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditFormComponent, selectors: [["ccd-case-edit-form"]], inputs: { fields: "fields", formGroup: "formGroup", caseFields: "caseFields", pageChangeSubject: "pageChangeSubject" }, outputs: { valuesChanged: "valuesChanged" }, standalone: false, decls: 1, vars: 1, consts: [["CompoundRow", ""], ["ccdConditionalShowForm", "", 3, "formGroup", "caseFields", "contextFields", 4, "ngFor", "ngForOf"], ["ccdConditionalShowForm", "", 3, "formGroup", "caseFields", "contextFields"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], [3, "ngSwitch"], [3, "caseField", "caseFields", "withLabel", "formGroup", 4, "ngSwitchCase"], [4, "ngSwitchCase"], [3, "caseField", "caseFields", "withLabel", "formGroup"], [4, "ngIf", "ngIfElse"], [3, "caseField", "caseFields", "formGroup", "idPrefix", "hidden"]], template: function CaseEditFormComponent_Template(rf, ctx) { if (rf & 1) {
10997
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditFormComponent, selectors: [["ccd-case-edit-form"]], viewQuery: function CaseEditFormComponent_Query(rf, ctx) { if (rf & 1) {
10998
+ i0.ɵɵviewQuery(ConditionalShowFormDirective, 5);
10999
+ } if (rf & 2) {
11000
+ let _t;
11001
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.conditionalShowFormDirectives = _t);
11002
+ } }, inputs: { fields: "fields", formGroup: "formGroup", caseFields: "caseFields", pageChangeSubject: "pageChangeSubject" }, outputs: { valuesChanged: "valuesChanged" }, standalone: false, decls: 1, vars: 1, consts: [["CompoundRow", ""], ["ccdConditionalShowForm", "", 3, "formGroup", "caseFields", "contextFields", 4, "ngFor", "ngForOf"], ["ccdConditionalShowForm", "", 3, "formGroup", "caseFields", "contextFields"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], [3, "ngSwitch"], [3, "caseField", "caseFields", "withLabel", "formGroup", 4, "ngSwitchCase"], [4, "ngSwitchCase"], [3, "caseField", "caseFields", "withLabel", "formGroup"], [4, "ngIf", "ngIfElse"], [3, "caseField", "caseFields", "formGroup", "idPrefix", "hidden"]], template: function CaseEditFormComponent_Template(rf, ctx) { if (rf & 1) {
10823
11003
  i0.ɵɵtemplate(0, CaseEditFormComponent_ng_container_0_Template, 6, 11, "ng-container", 1);
10824
11004
  } if (rf & 2) {
10825
11005
  i0.ɵɵproperty("ngForOf", ctx.fields);
@@ -10828,7 +11008,10 @@ class CaseEditFormComponent {
10828
11008
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditFormComponent, [{
10829
11009
  type: Component,
10830
11010
  args: [{ selector: 'ccd-case-edit-form', standalone: false, template: "<ng-container ccdConditionalShowForm [formGroup]=\"formGroup\" [caseFields]=\"fields\" [contextFields]=\"caseFields\"\n *ngFor=\"let field of fields\">\n\n <div ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <ng-container [ngSwitch]=\"field | ccdIsReadOnlyAndNotCollection\">\n\n <ccd-field-read *ngSwitchCase=\"true\" [caseField]=\"field\" [caseFields]=\"caseFields\" [withLabel]=\"true\"\n [formGroup]=\"formGroup\" [attr.field_id]=\"field.id\"\n [attr.field_type]=\"field.field_type.type\"></ccd-field-read>\n <ng-container *ngSwitchCase=\"false\">\n\n <ng-container *ngIf=\"!(field | ccdIsCompound); else CompoundRow\">\n <ccd-field-write [caseField]=\"field\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [idPrefix]=\"\"\n [hidden]=\"field.hidden\"\n [attr.field_id]=\"field.id\"\n [attr.field_type]=\"field.field_type.type\">\n </ccd-field-write>\n </ng-container>\n\n <ng-template #CompoundRow>\n <ccd-field-write [caseField]=\"field\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [idPrefix]=\"field.id + '_'\"\n [hidden]=\"field.hidden\"\n [attr.field_id]=\"field.id\"\n [attr.field_type]=\"field.field_type.type\"></ccd-field-write>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n" }]
10831
- }], () => [{ type: FormValueService }], { fields: [{
11011
+ }], () => [{ type: FormValueService }], { conditionalShowFormDirectives: [{
11012
+ type: ViewChildren,
11013
+ args: [ConditionalShowFormDirective]
11014
+ }], fields: [{
10832
11015
  type: Input
10833
11016
  }], formGroup: [{
10834
11017
  type: Input
@@ -10839,7 +11022,7 @@ class CaseEditFormComponent {
10839
11022
  }], valuesChanged: [{
10840
11023
  type: Output
10841
11024
  }] }); })();
10842
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditFormComponent, { className: "CaseEditFormComponent", filePath: "lib/shared/components/case-editor/case-edit-form/case-edit-form.component.ts", lineNumber: 13 }); })();
11025
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditFormComponent, { className: "CaseEditFormComponent", filePath: "lib/shared/components/case-editor/case-edit-form/case-edit-form.component.ts", lineNumber: 14 }); })();
10843
11026
 
10844
11027
  class CaseEditDataService {
10845
11028
  details$ = new BehaviorSubject(null);
@@ -11344,6 +11527,7 @@ class CaseEditPageComponent {
11344
11527
  addressService;
11345
11528
  linkedCasesService;
11346
11529
  caseFlagStateService;
11530
+ focusService;
11347
11531
  static RESUMED_FORM_DISCARD = 'RESUMED_FORM_DISCARD';
11348
11532
  static NEW_FORM_DISCARD = 'NEW_FORM_DISCARD';
11349
11533
  static NEW_FORM_SAVE = 'NEW_FORM_CHANGED_SAVE';
@@ -11375,16 +11559,12 @@ class CaseEditPageComponent {
11375
11559
  dialogRefAfterClosedSub;
11376
11560
  saveDraftSub;
11377
11561
  caseFormValidationErrorsSub;
11562
+ logger = new StructuredLoggerService();
11563
+ caseEditFormComponents;
11378
11564
  static scrollToTop() {
11379
11565
  window.scrollTo(0, 0);
11380
11566
  }
11381
- static setFocusToTop() {
11382
- const topContainer = document.getElementById('top');
11383
- if (topContainer) {
11384
- topContainer.focus();
11385
- }
11386
- }
11387
- constructor(caseEdit, route, formValueService, formErrorService, cdRef, pageValidationService, dialog, caseFieldService, caseEditDataService, loadingService, validPageListCaseFieldsService, multipageComponentStateService, addressService, linkedCasesService, caseFlagStateService) {
11567
+ constructor(caseEdit, route, formValueService, formErrorService, cdRef, pageValidationService, dialog, caseFieldService, caseEditDataService, loadingService, validPageListCaseFieldsService, multipageComponentStateService, addressService, linkedCasesService, caseFlagStateService, focusService) {
11388
11568
  this.caseEdit = caseEdit;
11389
11569
  this.route = route;
11390
11570
  this.formValueService = formValueService;
@@ -11400,6 +11580,7 @@ class CaseEditPageComponent {
11400
11580
  this.addressService = addressService;
11401
11581
  this.linkedCasesService = linkedCasesService;
11402
11582
  this.caseFlagStateService = caseFlagStateService;
11583
+ this.focusService = focusService;
11403
11584
  this.multipageComponentStateService.setInstigator(this);
11404
11585
  }
11405
11586
  onFinalNext() {
@@ -11464,7 +11645,7 @@ class CaseEditPageComponent {
11464
11645
  }
11465
11646
  this.triggerText = this.getTriggerText();
11466
11647
  });
11467
- CaseEditPageComponent.setFocusToTop();
11648
+ this.focusService.focus();
11468
11649
  this.caseEditFormSub = this.caseEditDataService.caseEditForm$.subscribe({
11469
11650
  next: editForm => this.editForm = editForm
11470
11651
  });
@@ -11525,10 +11706,10 @@ class CaseEditPageComponent {
11525
11706
  if (this.getPageNumber() !== undefined) {
11526
11707
  this.previousStep();
11527
11708
  }
11528
- CaseEditPageComponent.setFocusToTop();
11709
+ this.focusService.focus();
11529
11710
  }
11530
11711
  // Adding validation message to show it as Error Summary
11531
- generateErrorMessage(fields, container, path) {
11712
+ generateErrorMessage(fields, container, path, sourceFromComplexField) {
11532
11713
  const group = container || this.editForm.controls['data'];
11533
11714
  let validErrorFieldFound = false;
11534
11715
  let validationErrorAmount = this.validationErrors.length;
@@ -11545,7 +11726,7 @@ class CaseEditPageComponent {
11545
11726
  if (fieldElement) {
11546
11727
  const label = casefield.label || 'Field';
11547
11728
  let id = casefield.id;
11548
- if (fieldElement['component'] && fieldElement['component'].parent) {
11729
+ if (fieldElement['component'] && (fieldElement['component'].parent || sourceFromComplexField)) {
11549
11730
  if (fieldElement['component'].idPrefix.indexOf(`_${id}_`) === -1) {
11550
11731
  id = `${fieldElement['component'].idPrefix}${id}`;
11551
11732
  }
@@ -11557,7 +11738,7 @@ class CaseEditPageComponent {
11557
11738
  if (casefield.id === 'AddressLine1') {
11558
11739
  // EUI-1067 - Display more relevant error message to user and correctly navigate to the field
11559
11740
  this.addressService.setMandatoryError(true);
11560
- this.caseEditDataService.addFormValidationError({ id: `${path}_${path}`, message: `An address is required` });
11741
+ this.caseEditDataService.addFormValidationError({ id, message: `An address is required` });
11561
11742
  }
11562
11743
  else {
11563
11744
  this.caseEditDataService.addFormValidationError({ id, message: `%FIELDLABEL% is required`, label });
@@ -11583,7 +11764,7 @@ class CaseEditPageComponent {
11583
11764
  }
11584
11765
  else if (fieldElement.invalid) {
11585
11766
  if (casefield.isComplex()) {
11586
- errorPresent = this.generateErrorMessage(casefield.field_type.complex_fields, fieldElement, id);
11767
+ errorPresent = this.generateErrorMessage(casefield.field_type.complex_fields, fieldElement, id, true);
11587
11768
  }
11588
11769
  else if (casefield.isCollection() && casefield.field_type.collection_field_type.type === 'Complex') {
11589
11770
  const fieldArray = fieldElement;
@@ -11692,6 +11873,7 @@ class CaseEditPageComponent {
11692
11873
  }
11693
11874
  this.clearValidationErrors();
11694
11875
  this.checkForStagesCompleted();
11876
+ this.caseEditFormComponents?.forEach(component => component.syncConditionalShowStates());
11695
11877
  if (this.currentPageIsNotValid()) {
11696
11878
  // The generateErrorMessage method filters out the hidden fields.
11697
11879
  // The error message for LinkedCases journey will never get displayed because the
@@ -11706,7 +11888,6 @@ class CaseEditPageComponent {
11706
11888
  }
11707
11889
  if (!this.caseEdit.isSubmitting && !this.currentPageIsNotValid()) {
11708
11890
  this.addressService.setMandatoryError(false);
11709
- console.log('Case Edit Error', this.caseEdit.error);
11710
11891
  if (this.caseEdit.validPageList.findIndex(page => page.id === this.currentPage.id) === -1) {
11711
11892
  this.caseEdit.validPageList.push(this.currentPage);
11712
11893
  }
@@ -11735,7 +11916,7 @@ class CaseEditPageComponent {
11735
11916
  // purposes)
11736
11917
  this.removeAllJudicialUserFormControls(this.currentPage, this.editForm);
11737
11918
  }
11738
- CaseEditPageComponent.setFocusToTop();
11919
+ this.focusService.focus();
11739
11920
  }
11740
11921
  updateFormData(jsonData) {
11741
11922
  for (const caseFieldId of Object.keys(jsonData.data)) {
@@ -11854,6 +12035,8 @@ class CaseEditPageComponent {
11854
12035
  else {
11855
12036
  this.caseEdit.cancelled.emit();
11856
12037
  }
12038
+ // clear CaseView cache to allow any incidental changes to get picked up once the edit has cancelled
12039
+ this.caseEdit.caseNotifier.removeCachedCase();
11857
12040
  this.clearValidationErrors();
11858
12041
  this.multipageComponentStateService.reset();
11859
12042
  }
@@ -11899,7 +12082,7 @@ class CaseEditPageComponent {
11899
12082
  : CaseEditPageComponent.TRIGGER_TEXT_START;
11900
12083
  return this.canNavigateToSummaryPage()
11901
12084
  ? textBasedOnCanSaveDraft
11902
- : 'Submit';
12085
+ : this.eventTrigger.end_button_label || 'Submit';
11903
12086
  }
11904
12087
  discard() {
11905
12088
  if (this.route.snapshot.queryParamMap.get(CaseEditComponent.ORIGIN_QUERY_PARAM) === 'viewDraft') {
@@ -11919,7 +12102,7 @@ class CaseEditPageComponent {
11919
12102
  this.formErrorService
11920
12103
  .mapFieldErrors(this.caseEdit.error.details.field_errors, this.editForm?.controls?.['data'], 'validation');
11921
12104
  }
11922
- console.log('handleError ', error);
12105
+ this.logger.error('Case edit page handled an error.', { error });
11923
12106
  }
11924
12107
  resetErrors() {
11925
12108
  this.clearValidationErrors();
@@ -12027,8 +12210,13 @@ class CaseEditPageComponent {
12027
12210
  }
12028
12211
  });
12029
12212
  }
12030
- static ɵfac = function CaseEditPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditPageComponent)(i0.ɵɵdirectiveInject(CaseEditComponent), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(FormValueService), i0.ɵɵdirectiveInject(FormErrorService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(PageValidationService), i0.ɵɵdirectiveInject(i1$3.MatLegacyDialog), i0.ɵɵdirectiveInject(CaseFieldService), i0.ɵɵdirectiveInject(CaseEditDataService), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(ValidPageListCaseFieldsService), i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(AddressesService), i0.ɵɵdirectiveInject(LinkedCasesService), i0.ɵɵdirectiveInject(CaseFlagStateService)); };
12031
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditPageComponent, selectors: [["ccd-case-edit-page"]], standalone: false, decls: 12, vars: 11, consts: [["titleBlock", ""], ["idBlock", ""], [4, "ngIf"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], [3, "error"], [3, "callbackErrorsContext", "triggerTextContinue", "triggerTextIgnore", "callbackErrorsSubject"], [1, "width-50"], ["class", "form", 3, "formGroup", "submit", 4, "ngIf"], [3, "eventCompletionParams", "eventCanBeCompleted", 4, "ngIf"], ["class", "govuk-heading-l", 4, "ngIf"], [1, "govuk-heading-l"], [1, "govuk-caption-l"], [3, "content"], ["class", "heading-h2", 4, "ngIf"], [1, "heading-h2"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], ["tabindex", "0", 1, "validation-error", 3, "click", "keyup.enter"], [1, "form", 3, "submit", "formGroup"], ["id", "fieldset-case-data"], [2, "display", "none"], ["id", "caseEditForm", 3, "fields", "formGroup", "caseFields", "pageChangeSubject", "valuesChanged", 4, "ngIf"], ["class", "grid-row", 4, "ngIf"], [1, "form-group", "form-group-related"], ["class", "button button-secondary", "type", "button", 3, "disabled", "click", 4, "ngIf"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["type", "button", 1, "govuk-js-link", 3, "click"], ["id", "caseEditForm", 3, "valuesChanged", "fields", "formGroup", "caseFields", "pageChangeSubject"], [1, "grid-row"], [1, "column-two-thirds", "rightBorderSeparator"], ["id", "caseEditForm1", 3, "fields", "formGroup", "caseFields"], [1, "column-one-third"], ["id", "caseEditForm2", 3, "fields", "formGroup", "caseFields"], ["type", "button", 1, "button", "button-secondary", 3, "click", "disabled"], [3, "eventCanBeCompleted", "eventCompletionParams"]], template: function CaseEditPageComponent_Template(rf, ctx) { if (rf & 1) {
12213
+ static ɵfac = function CaseEditPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditPageComponent)(i0.ɵɵdirectiveInject(CaseEditComponent), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(FormValueService), i0.ɵɵdirectiveInject(FormErrorService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(PageValidationService), i0.ɵɵdirectiveInject(i1$3.MatLegacyDialog), i0.ɵɵdirectiveInject(CaseFieldService), i0.ɵɵdirectiveInject(CaseEditDataService), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(ValidPageListCaseFieldsService), i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(AddressesService), i0.ɵɵdirectiveInject(LinkedCasesService), i0.ɵɵdirectiveInject(CaseFlagStateService), i0.ɵɵdirectiveInject(FocusService)); };
12214
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditPageComponent, selectors: [["ccd-case-edit-page"]], viewQuery: function CaseEditPageComponent_Query(rf, ctx) { if (rf & 1) {
12215
+ i0.ɵɵviewQuery(CaseEditFormComponent, 5);
12216
+ } if (rf & 2) {
12217
+ let _t;
12218
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.caseEditFormComponents = _t);
12219
+ } }, standalone: false, decls: 12, vars: 11, consts: [["titleBlock", ""], ["idBlock", ""], [4, "ngIf"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], [3, "error"], [3, "callbackErrorsContext", "triggerTextContinue", "triggerTextIgnore", "callbackErrorsSubject"], [1, "width-50"], ["class", "form", 3, "formGroup", "submit", 4, "ngIf"], [3, "eventCompletionParams", "eventCanBeCompleted", 4, "ngIf"], ["class", "govuk-heading-l", 4, "ngIf"], [1, "govuk-heading-l"], [1, "govuk-caption-l"], [3, "content"], ["class", "heading-h2", 4, "ngIf"], [1, "heading-h2"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], ["tabindex", "0", 1, "validation-error", 3, "click", "keyup.enter"], [1, "form", 3, "submit", "formGroup"], ["id", "fieldset-case-data"], [2, "display", "none"], ["id", "caseEditForm", 3, "fields", "formGroup", "caseFields", "pageChangeSubject", "valuesChanged", 4, "ngIf"], ["class", "grid-row", 4, "ngIf"], [1, "form-group", "form-group-related"], ["class", "button button-secondary", "type", "button", 3, "disabled", "click", 4, "ngIf"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["type", "button", 1, "govuk-js-link", 3, "click"], ["id", "caseEditForm", 3, "valuesChanged", "fields", "formGroup", "caseFields", "pageChangeSubject"], [1, "grid-row"], [1, "column-two-thirds", "rightBorderSeparator"], ["id", "caseEditForm1", 3, "fields", "formGroup", "caseFields"], [1, "column-one-third"], ["id", "caseEditForm2", 3, "fields", "formGroup", "caseFields"], ["type", "button", 1, "button", "button-secondary", 3, "click", "disabled"], [3, "eventCanBeCompleted", "eventCompletionParams"]], template: function CaseEditPageComponent_Template(rf, ctx) { if (rf & 1) {
12032
12220
  const _r1 = i0.ɵɵgetCurrentView();
12033
12221
  i0.ɵɵtemplate(0, CaseEditPageComponent_ng_container_0_Template, 3, 2, "ng-container", 2)(1, CaseEditPageComponent_div_1_Template, 1, 0, "div", 3)(2, CaseEditPageComponent_ng_template_2_Template, 3, 7, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(4, CaseEditPageComponent_ng_template_4_Template, 1, 1, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(6, CaseEditPageComponent_div_6_Template, 5, 4, "div", 4);
12034
12222
  i0.ɵɵelement(7, "ccd-case-edit-generic-errors", 5);
@@ -12060,8 +12248,11 @@ class CaseEditPageComponent {
12060
12248
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditPageComponent, [{
12061
12249
  type: Component,
12062
12250
  args: [{ selector: 'ccd-case-edit-page', standalone: false, template: "<ng-container *ngIf=\"currentPage\">\n <h1 *ngIf=\"!currentPage.label\" class=\"govuk-heading-l\">{{eventTrigger.name | rpxTranslate}}</h1>\n <ng-container *ngIf=\"currentPage.label\">\n <span class=\"govuk-caption-l\">{{ eventTrigger.name | rpxTranslate}}</span>\n <h1 class=\"govuk-heading-l\">{{currentPage.label | rpxTranslate}}</h1>\n </ng-container>\n</ng-container>\n\n<!--Case ID or Title -->\n<div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n<ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: caseFields : editForm.controls['data'] | rpxTranslate\"></ccd-markdown>\n</ng-template>\n<ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n</ng-template>\n\n<!-- Error message summary -->\n<div *ngIf=\"validationErrors.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{'There is a problem' | rpxTranslate}}\n </h2>\n <div *ngFor=\"let validationError of validationErrors\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(validationError.id)\" (keyup.enter)=\"navigateToErrorElement(validationError.id)\" tabindex=\"0\" class=\"validation-error\">\n {{ validationError.message | rpxTranslate: getRpxTranslatePipeArgs(validationError.label | rpxTranslate): null }}\n </a>\n </li>\n </ul>\n </div>\n</div>\n\n<ccd-case-edit-generic-errors [error]=\"caseEdit.error\"></ccd-case-edit-generic-errors>\n\n<ccd-callback-errors\n [triggerTextContinue]=\"triggerTextStart\"\n [triggerTextIgnore]=\"triggerTextIgnoreWarnings\"\n [callbackErrorsSubject]=\"caseEdit.callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\">\n</ccd-callback-errors>\n<div class=\"width-50\">\n <form *ngIf=\"currentPage\" class=\"form\" [formGroup]=\"editForm\" (submit)=\"nextStep()\">\n <fieldset id=\"fieldset-case-data\">\n <legend style=\"display: none;\"></legend>\n <!-- single column -->\n <ccd-case-edit-form id='caseEditForm' *ngIf=\"!currentPage.isMultiColumn()\" [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"\n [pageChangeSubject]=\"pageChangeSubject\"\n (valuesChanged)=\"applyValuesChanged($event)\"></ccd-case-edit-form>\n <!-- two columns -->\n <div *ngIf=\"currentPage.isMultiColumn()\" class=\"grid-row\">\n <div class=\"column-two-thirds rightBorderSeparator\">\n <ccd-case-edit-form id='caseEditForm1' [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n <div class=\"column-one-third\">\n <ccd-case-edit-form id='caseEditForm2' [fields]=\"currentPage.getCol2Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n </div>\n </fieldset>\n\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" (click)=\"toPreviousPage()\" *ngIf=\"!isAtStart()\" [disabled]=\"isDisabled()\">\n {{'Previous' | rpxTranslate}}\n </button>\n <button class=\"button\" type=\"submit\" [disabled]=\"submitting()\">{{triggerText | rpxTranslate}}</button>\n </div>\n\n <p class=\"cancel\"><button type=\"button\" (click)=\"cancel()\" class=\"govuk-js-link\">{{getCancelText() | rpxTranslate}}</button></p>\n </form>\n</div>\n\n<ccd-case-event-completion *ngIf=\"caseEdit.isEventCompletionChecksRequired\"\n [eventCompletionParams]=\"caseEdit.eventCompletionParams\"\n (eventCanBeCompleted)=\"onEventCanBeCompleted($event)\">\n</ccd-case-event-completion>\n", styles: [".rightBorderSeparator{border-right-width:4px;border-right-color:#ffcc02;border-right-style:solid}.validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
12063
- }], () => [{ type: CaseEditComponent }, { type: i1$1.ActivatedRoute }, { type: FormValueService }, { type: FormErrorService }, { type: i0.ChangeDetectorRef }, { type: PageValidationService }, { type: i1$3.MatLegacyDialog }, { type: CaseFieldService }, { type: CaseEditDataService }, { type: LoadingService }, { type: ValidPageListCaseFieldsService }, { type: MultipageComponentStateService }, { type: AddressesService }, { type: LinkedCasesService }, { type: CaseFlagStateService }], null); })();
12064
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditPageComponent, { className: "CaseEditPageComponent", filePath: "lib/shared/components/case-editor/case-edit-page/case-edit-page.component.ts", lineNumber: 35 }); })();
12251
+ }], () => [{ type: CaseEditComponent }, { type: i1$1.ActivatedRoute }, { type: FormValueService }, { type: FormErrorService }, { type: i0.ChangeDetectorRef }, { type: PageValidationService }, { type: i1$3.MatLegacyDialog }, { type: CaseFieldService }, { type: CaseEditDataService }, { type: LoadingService }, { type: ValidPageListCaseFieldsService }, { type: MultipageComponentStateService }, { type: AddressesService }, { type: LinkedCasesService }, { type: CaseFlagStateService }, { type: FocusService }], { caseEditFormComponents: [{
12252
+ type: ViewChildren,
12253
+ args: [CaseEditFormComponent]
12254
+ }] }); })();
12255
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditPageComponent, { className: "CaseEditPageComponent", filePath: "lib/shared/components/case-editor/case-edit-page/case-edit-page.component.ts", lineNumber: 37 }); })();
12065
12256
 
12066
12257
  class CallbackErrorsContext {
12067
12258
  triggerText;
@@ -13026,6 +13217,7 @@ function WriteAddressFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
13026
13217
  } }
13027
13218
  class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
13028
13219
  isCompoundPipe;
13220
+ logger = new StructuredLoggerService();
13029
13221
  writeComplexFieldComponent;
13030
13222
  focusElementDirectives;
13031
13223
  static REQUIRED_ERROR_MESSAGE = 'Enter a Postcode';
@@ -13078,7 +13270,7 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
13078
13270
  });
13079
13271
  }, (error) => {
13080
13272
  this.loadingAddresses = false;
13081
- console.log(`An error occurred retrieving addresses for postcode ${postcode}. ${error}`);
13273
+ this.logger.error('An error occurred retrieving addresses for postcode.', { error });
13082
13274
  });
13083
13275
  this.addressList.setValue(undefined);
13084
13276
  this.refocusElement();
@@ -13178,7 +13370,7 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
13178
13370
  type: ViewChildren,
13179
13371
  args: [FocusElementDirective]
13180
13372
  }] }); })();
13181
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteAddressFieldComponent, { className: "WriteAddressFieldComponent", filePath: "lib/shared/components/palette/address/write-address-field.component.ts", lineNumber: 18 }); })();
13373
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteAddressFieldComponent, { className: "WriteAddressFieldComponent", filePath: "lib/shared/components/palette/address/write-address-field.component.ts", lineNumber: 19 }); })();
13182
13374
 
13183
13375
  var PaletteContext;
13184
13376
  (function (PaletteContext) {
@@ -15169,6 +15361,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15169
15361
  scrollToService;
15170
15362
  profileNotifier;
15171
15363
  cdRef;
15364
+ logger = new StructuredLoggerService();
15172
15365
  caseFields = [];
15173
15366
  formArray;
15174
15367
  profile;
@@ -15316,7 +15509,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15316
15509
  duration: 1000,
15317
15510
  offset: -150,
15318
15511
  })
15319
- .subscribe(() => { }, console.error);
15512
+ .subscribe(() => { }, error => this.logger.error('Error while scrolling collection item into view.', { error }));
15320
15513
  }
15321
15514
  this.focusLastItem();
15322
15515
  }
@@ -15355,9 +15548,20 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15355
15548
  }
15356
15549
  }
15357
15550
  focusLastItem() {
15358
- const item = this.items.last.nativeElement.querySelector('.form-control');
15359
- if (item) {
15360
- item.focus();
15551
+ const root = this.items.last?.nativeElement;
15552
+ if (!root) {
15553
+ return;
15554
+ }
15555
+ const controls = Array.from(root.querySelectorAll('.form-control'));
15556
+ const focusTarget = controls.find(control => {
15557
+ if (!(control instanceof HTMLInputElement)) {
15558
+ return true;
15559
+ }
15560
+ const type = (control.type || '').toLowerCase();
15561
+ return type !== 'radio';
15562
+ });
15563
+ if (focusTarget) {
15564
+ focusTarget.focus();
15361
15565
  }
15362
15566
  }
15363
15567
  removeItem(index) {
@@ -15513,7 +15717,7 @@ class WriteCollectionFieldComponent extends AbstractFieldWriteComponent {
15513
15717
  type: ViewChildren,
15514
15718
  args: ['collectionItem']
15515
15719
  }] }); })();
15516
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCollectionFieldComponent, { className: "WriteCollectionFieldComponent", filePath: "lib/shared/components/palette/collection/write-collection-field.component.ts", lineNumber: 33 }); })();
15720
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCollectionFieldComponent, { className: "WriteCollectionFieldComponent", filePath: "lib/shared/components/palette/collection/write-collection-field.component.ts", lineNumber: 34 }); })();
15517
15721
 
15518
15722
  function ReadComplexFieldComponent_ccd_read_complex_field_raw_1_Template(rf, ctx) { if (rf & 1) {
15519
15723
  i0.ɵɵelement(0, "ccd-read-complex-field-raw", 4);
@@ -15885,8 +16089,6 @@ class WriteDocumentFieldComponent extends AbstractFieldWriteComponent {
15885
16089
  this.jurisdictionId = parts[parts.indexOf('case-create') + 1];
15886
16090
  this.caseTypeId = parts[parts.indexOf('case-create') + 2];
15887
16091
  this.caseId = null;
15888
- console.log(this.jurisdictionId);
15889
- console.log(this.caseTypeId);
15890
16092
  }
15891
16093
  // use the documentManagement service to check if the document upload should use CDAM
15892
16094
  if (this.documentManagement.isDocumentSecureModeEnabled()) {
@@ -19976,12 +20178,18 @@ class MoneyGbpInputComponent {
19976
20178
  writeValue(obj) {
19977
20179
  if (obj) {
19978
20180
  this.rawValue = obj;
19979
- const integerPart = obj.slice(0, -2) || '0';
19980
- let decimalPart = obj.slice(-2);
19981
- while (2 > decimalPart.length) {
19982
- decimalPart += '0';
20181
+ // If already contains decimal, use it directly
20182
+ if (obj.includes('.')) {
20183
+ this.displayValue = obj;
20184
+ }
20185
+ else {
20186
+ const integerPart = obj.slice(0, -2) || '0';
20187
+ let decimalPart = obj.slice(-2);
20188
+ while (2 > decimalPart.length) {
20189
+ decimalPart += '0';
20190
+ }
20191
+ this.displayValue = [integerPart, decimalPart].join('.');
19983
20192
  }
19984
- this.displayValue = [integerPart, decimalPart].join('.');
19985
20193
  }
19986
20194
  }
19987
20195
  registerOnChange(fn) {
@@ -21663,6 +21871,7 @@ const CIVIL_JURISDICTION = 'CIVIL';
21663
21871
  class QueryManagementService {
21664
21872
  router;
21665
21873
  sessionStorageService;
21874
+ logger = new StructuredLoggerService();
21666
21875
  caseQueriesCollections;
21667
21876
  fieldId;
21668
21877
  constructor(router, sessionStorageService) {
@@ -21682,7 +21891,7 @@ class QueryManagementService {
21682
21891
  currentUserDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), {});
21683
21892
  }
21684
21893
  catch (e) {
21685
- console.error('Could not parse USER_DETAILS from session storage:', e);
21894
+ this.logger.error('Could not parse USER_DETAILS from session storage.', { error: e });
21686
21895
  currentUserDetails = {};
21687
21896
  }
21688
21897
  const isHmctsStaff = (this.isJudiciaryUser() || this.isInternalUser()) ? 'Yes' : 'No';
@@ -21692,7 +21901,7 @@ class QueryManagementService {
21692
21901
  const isNewQuery = queryCreateContext === QueryCreateContext.NEW_QUERY; // Check if this is a new query
21693
21902
  // Check if the field ID has been set dynamically
21694
21903
  if (!this.fieldId) {
21695
- console.error('Error: Field ID for CaseQueriesCollection not found. Cannot proceed with data generation.');
21904
+ this.logger.error('Field ID for CaseQueriesCollection not found. Cannot proceed with data generation.');
21696
21905
  this.router.navigate(['/', 'service-down']);
21697
21906
  throw new Error('Field ID for CaseQueriesCollection not found. Aborting query data generation.');
21698
21907
  }
@@ -21752,7 +21961,7 @@ class QueryManagementService {
21752
21961
  setCaseQueriesCollectionData(eventData, queryCreateContext, caseDetails, messageId) {
21753
21962
  const resolvedFieldId = this.resolveFieldId(eventData, queryCreateContext, caseDetails, messageId);
21754
21963
  if (!resolvedFieldId) {
21755
- console.error('Failed to resolve fieldId for CaseQueriesCollection. Cannot proceed.');
21964
+ this.logger.error('Failed to resolve fieldId for CaseQueriesCollection. Cannot proceed.');
21756
21965
  return;
21757
21966
  }
21758
21967
  this.fieldId = resolvedFieldId;
@@ -21772,7 +21981,7 @@ class QueryManagementService {
21772
21981
  field.field_type.type === FIELD_TYPE_COMPLEX &&
21773
21982
  field.display_context !== DISPLAY_CONTEXT_READONLY);
21774
21983
  if (!candidateFields?.length) {
21775
- console.warn('No editable CaseQueriesCollection fields found.');
21984
+ this.logger.warn('No editable CaseQueriesCollection fields found.');
21776
21985
  return null;
21777
21986
  }
21778
21987
  const numberOfCollections = candidateFields.length;
@@ -21799,12 +22008,12 @@ class QueryManagementService {
21799
22008
  }
21800
22009
  }
21801
22010
  else {
21802
- console.error(`Error: Multiple CaseQueriesCollections are not supported yet for the ${jurisdictionId} jurisdiction`);
22011
+ this.logger.error('Multiple CaseQueriesCollections are not supported yet for this jurisdiction.', { jurisdictionId });
21803
22012
  return null;
21804
22013
  }
21805
22014
  }
21806
22015
  // Step 4: Fallback — if none of the above succeeded
21807
- console.warn('Could not determine fieldId for context:', queryCreateContext);
22016
+ this.logger.warn('Could not determine fieldId for context.', { queryCreateContext });
21808
22017
  return null;
21809
22018
  }
21810
22019
  getCaseQueriesCollectionFieldOrderFromWizardPages(eventData) {
@@ -22416,6 +22625,7 @@ class QueryCheckYourAnswersComponent {
22416
22625
  queryManagementService;
22417
22626
  errorNotifierService;
22418
22627
  alertService;
22628
+ logger = new StructuredLoggerService();
22419
22629
  RAISE_A_QUERY_EVENT_TRIGGER_ID = 'queryManagementRaiseQuery';
22420
22630
  RESPOND_TO_QUERY_EVENT_TRIGGER_ID = 'queryManagementRespondQuery';
22421
22631
  CASE_QUERIES_COLLECTION_ID = 'CaseQueriesCollection';
@@ -22503,7 +22713,7 @@ class QueryCheckYourAnswersComponent {
22503
22713
  if (error.status !== 401 && error.status !== 403) {
22504
22714
  this.errorNotifierService.announceError(error);
22505
22715
  this.alertService.error({ phrase: error.message });
22506
- console.error('Error occurred while fetching event data:', error);
22716
+ this.logger.error('Error occurred while fetching event data.', { error });
22507
22717
  this.callbackErrorsSubject.next(error);
22508
22718
  }
22509
22719
  else {
@@ -22556,7 +22766,7 @@ class QueryCheckYourAnswersComponent {
22556
22766
  });
22557
22767
  }
22558
22768
  else {
22559
- console.error('Error: No task to complete was found');
22769
+ this.logger.error('No task to complete was found.');
22560
22770
  this.errorMessages = [
22561
22771
  {
22562
22772
  title: 'Error',
@@ -22600,7 +22810,7 @@ class QueryCheckYourAnswersComponent {
22600
22810
  this.isSubmitting = false;
22601
22811
  }
22602
22812
  handleError(error) {
22603
- console.error('Error in API calls:', error);
22813
+ this.logger.error('Error in query management API calls.', { error });
22604
22814
  this.isSubmitting = false;
22605
22815
  if (this.isServiceErrorFound(error)) {
22606
22816
  this.error = null;
@@ -22628,7 +22838,7 @@ class QueryCheckYourAnswersComponent {
22628
22838
  }
22629
22839
  setCaseQueriesCollectionData() {
22630
22840
  if (!this.eventData) {
22631
- console.warn('Event data not available; skipping collection setup.');
22841
+ this.logger.warn('Event data not available; skipping collection setup.');
22632
22842
  }
22633
22843
  this.queryManagementService.setCaseQueriesCollectionData(this.eventData, this.queryCreateContext, this.caseDetails, this.messageId);
22634
22844
  }
@@ -22663,7 +22873,7 @@ class QueryCheckYourAnswersComponent {
22663
22873
  }], createEventResponse: [{
22664
22874
  type: Output
22665
22875
  }] }); })();
22666
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryCheckYourAnswersComponent, { className: "QueryCheckYourAnswersComponent", filePath: "lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.ts", lineNumber: 32 }); })();
22876
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryCheckYourAnswersComponent, { className: "QueryCheckYourAnswersComponent", filePath: "lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.ts", lineNumber: 33 }); })();
22667
22877
 
22668
22878
  function QueryDetailsComponent_ng_container_0_p_1_Template(rf, ctx) { if (rf & 1) {
22669
22879
  const _r1 = i0.ɵɵgetCurrentView();
@@ -23724,6 +23934,7 @@ function QueryWriteRaiseQueryComponent_div_11_Template(rf, ctx) { if (rf & 1) {
23724
23934
  class QueryWriteRaiseQueryComponent {
23725
23935
  queryManagementService;
23726
23936
  route;
23937
+ logger = new StructuredLoggerService();
23727
23938
  formGroup;
23728
23939
  submitted;
23729
23940
  caseDetails;
@@ -23771,7 +23982,7 @@ class QueryWriteRaiseQueryComponent {
23771
23982
  }
23772
23983
  setCaseQueriesCollectionData() {
23773
23984
  if (!this.eventData) {
23774
- console.warn('Event data not available; skipping collection setup.');
23985
+ this.logger.warn('Event data not available; skipping collection setup.');
23775
23986
  return false;
23776
23987
  }
23777
23988
  this.queryManagementService.setCaseQueriesCollectionData(this.eventData, this.queryCreateContext, this.caseDetails, this.messageId);
@@ -23833,7 +24044,7 @@ class QueryWriteRaiseQueryComponent {
23833
24044
  }], queryDataCreated: [{
23834
24045
  type: Output
23835
24046
  }] }); })();
23836
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryWriteRaiseQueryComponent, { className: "QueryWriteRaiseQueryComponent", filePath: "lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.ts", lineNumber: 20 }); })();
24047
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryWriteRaiseQueryComponent, { className: "QueryWriteRaiseQueryComponent", filePath: "lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.ts", lineNumber: 21 }); })();
23837
24048
 
23838
24049
  function QueryWriteRespondToQueryComponent_ccd_query_case_details_header_9_Template(rf, ctx) { if (rf & 1) {
23839
24050
  i0.ɵɵelement(0, "ccd-query-case-details-header", 8);
@@ -23916,6 +24127,7 @@ class QueryWriteRespondToQueryComponent {
23916
24127
  caseNotifier;
23917
24128
  route;
23918
24129
  queryManagementService;
24130
+ logger = new StructuredLoggerService();
23919
24131
  queryItem;
23920
24132
  formGroup;
23921
24133
  queryCreateContext;
@@ -23950,7 +24162,7 @@ class QueryWriteRespondToQueryComponent {
23950
24162
  this.caseDetails = caseDetails;
23951
24163
  },
23952
24164
  error: (err) => {
23953
- console.error('Error retrieving case details:', err);
24165
+ this.logger.error('Error retrieving case details.', { error: err });
23954
24166
  }
23955
24167
  });
23956
24168
  }
@@ -23960,19 +24172,19 @@ class QueryWriteRespondToQueryComponent {
23960
24172
  return;
23961
24173
  }
23962
24174
  if (!this.caseQueriesCollections[0]) {
23963
- console.error('caseQueriesCollections[0] is undefined!', this.caseQueriesCollections);
24175
+ this.logger.error('Case queries collection is undefined.');
23964
24176
  return;
23965
24177
  }
23966
24178
  this.messageId = this.route.snapshot.params?.dataid;
23967
24179
  if (!this.messageId) {
23968
- console.warn('No messageId found in route params:', this.route.snapshot.params);
24180
+ this.logger.warn('No messageId found in route params.', { routeParams: this.route.snapshot.params });
23969
24181
  return;
23970
24182
  }
23971
24183
  const allMessages = this.caseQueriesCollections
23972
24184
  .flatMap((caseData) => caseData?.caseMessages || []);
23973
24185
  const matchingMessage = allMessages.find((message) => message?.value?.id === this.messageId)?.value;
23974
24186
  if (!matchingMessage) {
23975
- console.warn('No matching message found for ID:', this.messageId);
24187
+ this.logger.warn('No matching message found for ID.', { messageId: this.messageId });
23976
24188
  return;
23977
24189
  }
23978
24190
  const caseQueriesCollections = this.caseQueriesCollections.find((collection) => collection?.caseMessages.find((c) => c.value.id === this.messageId));
@@ -23996,7 +24208,7 @@ class QueryWriteRespondToQueryComponent {
23996
24208
  }
23997
24209
  setCaseQueriesCollectionData() {
23998
24210
  if (!this.eventData) {
23999
- console.warn('Event data not available; skipping collection setup.');
24211
+ this.logger.warn('Event data not available; skipping collection setup.');
24000
24212
  return false;
24001
24213
  }
24002
24214
  this.queryManagementService.setCaseQueriesCollectionData(this.eventData, this.queryCreateContext, this.caseDetails, this.messageId);
@@ -24061,7 +24273,7 @@ class QueryWriteRespondToQueryComponent {
24061
24273
  }], hasRespondedToQueryTask: [{
24062
24274
  type: Output
24063
24275
  }] }); })();
24064
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryWriteRespondToQueryComponent, { className: "QueryWriteRespondToQueryComponent", filePath: "lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.ts", lineNumber: 19 }); })();
24276
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryWriteRespondToQueryComponent, { className: "QueryWriteRespondToQueryComponent", filePath: "lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.ts", lineNumber: 20 }); })();
24065
24277
 
24066
24278
  function QueryConfirmationComponent_main_0_ng_container_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
24067
24279
  i0.ɵɵelementStart(0, "h1", 8);
@@ -24211,6 +24423,7 @@ function QueryConfirmationComponent_main_0_Template(rf, ctx) { if (rf & 1) {
24211
24423
  class QueryConfirmationComponent {
24212
24424
  route;
24213
24425
  sessionStorageService;
24426
+ logger = new StructuredLoggerService();
24214
24427
  queryCreateContext;
24215
24428
  callbackConfirmationMessageText = {};
24216
24429
  eventResponseData;
@@ -24241,7 +24454,7 @@ class QueryConfirmationComponent {
24241
24454
  resolveHmctsStaffRaisedQuery() {
24242
24455
  const messageId = this.route.snapshot.params.dataid;
24243
24456
  if (!this.eventResponseData) {
24244
- console.warn('No event response data available.');
24457
+ this.logger.warn('No event response data available.');
24245
24458
  return;
24246
24459
  }
24247
24460
  this.queryListData = new QueryListData(this.eventResponseData);
@@ -24255,7 +24468,7 @@ class QueryConfirmationComponent {
24255
24468
  ?.flatMap((p) => p.children || [])
24256
24469
  .find((c) => c.parentId === messageId);
24257
24470
  if (!child) {
24258
- console.warn('No matching child found for messageId:', messageId);
24471
+ this.logger.warn('No matching child found for messageId.', { messageId });
24259
24472
  return;
24260
24473
  }
24261
24474
  const parentItem = this.queryListData?.queries
@@ -33374,7 +33587,8 @@ class CaseEditorModule {
33374
33587
  EventCompletionStateMachineService,
33375
33588
  CaseFlagStateService,
33376
33589
  ValidPageListCaseFieldsService,
33377
- MultipageComponentStateService
33590
+ MultipageComponentStateService,
33591
+ FocusService
33378
33592
  ], imports: [CommonModule,
33379
33593
  RouterModule,
33380
33594
  FormsModule,
@@ -33457,7 +33671,8 @@ class CaseEditorModule {
33457
33671
  EventCompletionStateMachineService,
33458
33672
  CaseFlagStateService,
33459
33673
  ValidPageListCaseFieldsService,
33460
- MultipageComponentStateService
33674
+ MultipageComponentStateService,
33675
+ FocusService
33461
33676
  ]
33462
33677
  }]
33463
33678
  }], null, null); })();
@@ -34379,6 +34594,7 @@ class WorkbasketFiltersComponent {
34379
34594
  static PARAM_JURISDICTION = 'jurisdiction';
34380
34595
  static PARAM_CASE_TYPE = 'case-type';
34381
34596
  static PARAM_CASE_STATE = 'case-state';
34597
+ logger = new StructuredLoggerService();
34382
34598
  caseFields;
34383
34599
  jurisdictions;
34384
34600
  defaults;
@@ -34507,6 +34723,7 @@ class WorkbasketFiltersComponent {
34507
34723
  }
34508
34724
  }
34509
34725
  onJurisdictionIdChange() {
34726
+ this.clearStoredWorkbasketFilterValues();
34510
34727
  if (this.selected.jurisdiction) {
34511
34728
  this.jurisdictionService.announceSelectedJurisdiction(this.selected.jurisdiction);
34512
34729
  this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes.length > 0
@@ -34521,7 +34738,7 @@ class WorkbasketFiltersComponent {
34521
34738
  this.selected.caseState = null;
34522
34739
  this.clearWorkbasketInputs();
34523
34740
  if (!this.isApplyButtonDisabled()) {
34524
- this.onCaseTypeIdChange();
34741
+ this.onCaseTypeIdChange(false);
34525
34742
  }
34526
34743
  }
34527
34744
  else {
@@ -34529,7 +34746,10 @@ class WorkbasketFiltersComponent {
34529
34746
  this.resetCaseState();
34530
34747
  }
34531
34748
  }
34532
- onCaseTypeIdChange() {
34749
+ onCaseTypeIdChange(clearStoredValues = true) {
34750
+ if (clearStoredValues) {
34751
+ this.clearStoredWorkbasketFilterValues();
34752
+ }
34533
34753
  if (this.selected.caseType) {
34534
34754
  this.selectedCaseTypeStates = this.sortStates(this.selected.caseType.states);
34535
34755
  this.selected.caseState = null;
@@ -34552,9 +34772,7 @@ class WorkbasketFiltersComponent {
34552
34772
  }
34553
34773
  });
34554
34774
  this.getCaseFields();
34555
- }, error => {
34556
- console.log('Workbasket input fields request will be discarded reason: ', error.message);
34557
- });
34775
+ }, error => this.logger.error('Workbasket input fields request will be discarded.', { error }));
34558
34776
  }
34559
34777
  }
34560
34778
  else {
@@ -34625,7 +34843,7 @@ class WorkbasketFiltersComponent {
34625
34843
  this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;
34626
34844
  this.selected.caseType = this.selectCaseType(this.selected, this.selectedJurisdictionCaseTypes, routeSnapshot);
34627
34845
  if (this.selected.caseType) {
34628
- this.onCaseTypeIdChange();
34846
+ this.onCaseTypeIdChange(false);
34629
34847
  this.selected.caseState = this.selectCaseState(this.selected.caseType, routeSnapshot);
34630
34848
  }
34631
34849
  this.workbasketDefaults = true;
@@ -34672,6 +34890,9 @@ class WorkbasketFiltersComponent {
34672
34890
  this.workbasketInputsReady = false;
34673
34891
  this.workbasketInputs = [];
34674
34892
  }
34893
+ clearStoredWorkbasketFilterValues() {
34894
+ this.windowService.removeLocalStorage(FORM_GROUP_VAL_LOC_STORAGE);
34895
+ }
34675
34896
  resetCaseState() {
34676
34897
  this.defaults.state_id = null;
34677
34898
  this.selected.caseState = null;
@@ -34814,7 +35035,7 @@ class WorkbasketFiltersComponent {
34814
35035
  }], onReset: [{
34815
35036
  type: Output
34816
35037
  }] }); })();
34817
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WorkbasketFiltersComponent, { className: "WorkbasketFiltersComponent", filePath: "lib/shared/components/workbasket-filters/workbasket-filters.component.ts", lineNumber: 27 }); })();
35038
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WorkbasketFiltersComponent, { className: "WorkbasketFiltersComponent", filePath: "lib/shared/components/workbasket-filters/workbasket-filters.component.ts", lineNumber: 28 }); })();
34818
35039
 
34819
35040
  class WorkbasketFiltersModule {
34820
35041
  static ɵfac = function WorkbasketFiltersModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WorkbasketFiltersModule)(); };
@@ -35204,6 +35425,7 @@ class CaseHistoryComponent {
35204
35425
  orderService;
35205
35426
  caseNotifier;
35206
35427
  caseHistoryService;
35428
+ logger = new StructuredLoggerService();
35207
35429
  static PARAM_EVENT_ID = 'eid';
35208
35430
  static ERROR_MESSAGE = 'No case history to show';
35209
35431
  event;
@@ -35236,7 +35458,7 @@ class CaseHistoryComponent {
35236
35458
  this.tabs = this.orderService.sort(this.caseHistory.tabs);
35237
35459
  this.tabs = this.sortTabFieldsAndFilterTabs(this.tabs);
35238
35460
  }), catchError(error => {
35239
- console.error(error);
35461
+ this.logger.error('Error while getting case history.', { error });
35240
35462
  if (error.status !== 401 && error.status !== 403) {
35241
35463
  this.alertService.error(error.message);
35242
35464
  }
@@ -35270,7 +35492,7 @@ class CaseHistoryComponent {
35270
35492
  }], () => [{ type: i1$1.ActivatedRoute }, { type: AlertService }, { type: OrderService }, { type: CaseNotifier }, { type: CaseHistoryService }], { event: [{
35271
35493
  type: Input
35272
35494
  }] }); })();
35273
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseHistoryComponent, { className: "CaseHistoryComponent", filePath: "lib/shared/components/case-history/case-history.component.ts", lineNumber: 21 }); })();
35495
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseHistoryComponent, { className: "CaseHistoryComponent", filePath: "lib/shared/components/case-history/case-history.component.ts", lineNumber: 22 }); })();
35274
35496
 
35275
35497
  class CaseHistoryModule {
35276
35498
  static ɵfac = function CaseHistoryModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseHistoryModule)(); };
@@ -35494,11 +35716,9 @@ class CaseResolver {
35494
35716
  const currentUrl = this.router.url ?? '';
35495
35717
  // Prevent resolving if eventId=queryManagementRespondQuery is in the URL
35496
35718
  if (currentUrl.includes(CaseResolver.EVENT_ID_QM_RESPOND_TO_QUERY)) {
35497
- console.info('Skipping resolve for event queryManagementRespondQuery.');
35498
35719
  this.goToDefaultPage();
35499
35720
  }
35500
35721
  if (!cid) {
35501
- console.info('No case ID available in the route. Will navigate to case list.');
35502
35722
  // when redirected to case view after a case created, and the user has no READ access,
35503
35723
  // the post returns no id
35504
35724
  this.navigateToCaseList();
@@ -35555,8 +35775,6 @@ class CaseResolver {
35555
35775
  }), catchError(error => this.processErrorInCaseFetch(error, cid))).toPromise();
35556
35776
  }
35557
35777
  processErrorInCaseFetch(error, caseReference) {
35558
- console.error('!!! processErrorInCaseFetch !!!');
35559
- console.error(error);
35560
35778
  // TODO Should be logged to remote logging infrastructure
35561
35779
  if (error.status === 400) {
35562
35780
  this.router.navigate(['/search/noresults']);
@@ -35584,7 +35802,6 @@ class CaseResolver {
35584
35802
  }
35585
35803
  // as discussed for EUI-5456, need functionality to go to default page
35586
35804
  goToDefaultPage() {
35587
- console.info('Going to default page!');
35588
35805
  const userDetails = safeJsonParse(this.sessionStorage.getItem(USER_DETAILS));
35589
35806
  userDetails && userDetails.roles
35590
35807
  && !userDetails.roles.includes(PUI_CASE_MANAGER)
@@ -35782,7 +35999,6 @@ class CaseEventTriggerComponent {
35782
35999
  if (this.activityPollingService.isEnabled) {
35783
36000
  this.ngZone.runOutsideAngular(() => {
35784
36001
  this.activitySubscription = this.postEditActivity().subscribe(() => {
35785
- // console.log('Posted EDIT activity and result is: ' + JSON.stringify(_resolved));
35786
36002
  });
35787
36003
  });
35788
36004
  }
@@ -35953,8 +36169,6 @@ class CaseViewComponent {
35953
36169
  }
35954
36170
  checkErrorGettingCaseView(error) {
35955
36171
  // TODO Should be logged to remote logging infrastructure
35956
- console.error('Called checkErrorGettingCaseView.');
35957
- console.error(error);
35958
36172
  if (error.status !== 401 && error.status !== 403) {
35959
36173
  this.alertService.error(error.message);
35960
36174
  }
@@ -37306,7 +37520,6 @@ class CaseViewerComponent {
37306
37520
  }
37307
37521
  else {
37308
37522
  this.caseSubscription = this.caseNotifier.caseView.subscribe((caseDetails) => {
37309
- console.info('Setting the case into case viewer component as retrieved from XHR request.');
37310
37523
  this.caseDetails = caseDetails;
37311
37524
  this.setUserAccessType(this.caseDetails);
37312
37525
  });
@@ -37918,6 +38131,10 @@ class EventStartGuard {
37918
38131
  }
37919
38132
  }
37920
38133
  return caseDataObservable.pipe(switchMap(() => {
38134
+ if (this.shouldSkipDuplicateWorkAllocationCall()) {
38135
+ this.abstractConfig.logMessage(`EventStartGuard: skipping duplicate work allocation call for caseId ${caseId} and eventId ${eventId}`);
38136
+ return of(true);
38137
+ }
37921
38138
  if (this.jurisdiction && this.caseType) {
37922
38139
  if (this.caseId === caseId) {
37923
38140
  return this.workAllocationService.getTasksByCaseIdAndEventId(eventId, caseId, this.caseType, this.jurisdiction)
@@ -37931,6 +38148,9 @@ class EventStartGuard {
37931
38148
  return of(false);
37932
38149
  }));
37933
38150
  }
38151
+ shouldSkipDuplicateWorkAllocationCall() {
38152
+ return this.router.getCurrentNavigation()?.extras?.state?.[EVENT_START_FIRST_PAGE_REDIRECT] === true;
38153
+ }
37934
38154
  checkTaskInEventNotRequired(payload, caseId, taskId, eventId, userId) {
37935
38155
  if (!payload || !payload.tasks) {
37936
38156
  return true;
@@ -38167,9 +38387,7 @@ class EventStartStateMachineService {
38167
38387
  if (!task) {
38168
38388
  task = context.tasks[0];
38169
38389
  }
38170
- const taskStr = JSON.stringify(task);
38171
38390
  this.abstractConfig?.logMessage?.(`entryActionForStateOneTaskAssignedToUser: task_state ${task?.task_state} for task id ${task?.id}`);
38172
- console.log('entryActionForStateOneTaskAssignedToUser: setting client context task_data to ' + taskStr);
38173
38391
  // Store task to session
38174
38392
  const currentLanguage = context.cookieService.getCookie('exui-preferred-language');
38175
38393
  const clientContext = {
@@ -38210,7 +38428,6 @@ class EventStartStateMachineService {
38210
38428
  }
38211
38429
  finalAction(state) {
38212
38430
  // Final actions can be performed here, the state machine finished running
38213
- // console.log('FINAL', state);
38214
38431
  return;
38215
38432
  }
38216
38433
  addTransitionsForStateCheckForMatchingTasks() {
@@ -39845,9 +40062,6 @@ class CreateCaseFiltersComponent {
39845
40062
  this.jurisdictions = jurisdictions;
39846
40063
  this.selectJurisdiction(this.jurisdictions, this.filterJurisdictionControl);
39847
40064
  });
39848
- if (document.getElementById('cc-jurisdiction')) {
39849
- document.getElementById('cc-jurisdiction').focus();
39850
- }
39851
40065
  }
39852
40066
  onJurisdictionIdChange() {
39853
40067
  this.resetCaseType();
@@ -40170,6 +40384,7 @@ class SearchFiltersComponent {
40170
40384
  orderService;
40171
40385
  jurisdictionService;
40172
40386
  windowService;
40387
+ logger = new StructuredLoggerService();
40173
40388
  PARAM_JURISDICTION = 'jurisdiction';
40174
40389
  PARAM_CASE_TYPE = 'case-type';
40175
40390
  PARAM_CASE_STATE = 'case-state';
@@ -40265,7 +40480,7 @@ class SearchFiltersComponent {
40265
40480
  }
40266
40481
  }
40267
40482
  catch (e) {
40268
- console.log("Failed to retrieve jurisdiction from local storage");
40483
+ this.logger.error('Failed to retrieve jurisdiction from local storage.', { error: e });
40269
40484
  this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, null);
40270
40485
  }
40271
40486
  }
@@ -40319,9 +40534,7 @@ class SearchFiltersComponent {
40319
40534
  }
40320
40535
  });
40321
40536
  this.getCaseFields();
40322
- }, error => {
40323
- console.log('Search input fields request will be discarded reason: ', error.message);
40324
- });
40537
+ }, error => this.logger.error('Search input fields request will be discarded.', { error }));
40325
40538
  }
40326
40539
  isJurisdictionSelected() {
40327
40540
  return this.selected.jurisdiction === null ||
@@ -40458,7 +40671,7 @@ class SearchFiltersComponent {
40458
40671
  }], onJurisdiction: [{
40459
40672
  type: Output
40460
40673
  }] }); })();
40461
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchFiltersComponent, { className: "SearchFiltersComponent", filePath: "lib/shared/components/search-filters/search-filters.component.ts", lineNumber: 27 }); })();
40674
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchFiltersComponent, { className: "SearchFiltersComponent", filePath: "lib/shared/components/search-filters/search-filters.component.ts", lineNumber: 28 }); })();
40462
40675
 
40463
40676
  function SearchFiltersWrapperComponent_ccd_search_filters_0_Template(rf, ctx) { if (rf & 1) {
40464
40677
  const _r1 = i0.ɵɵgetCurrentView();
@@ -41674,5 +41887,5 @@ class TestRouteSnapshotBuilder {
41674
41887
  * Generated bundle index. Do not edit.
41675
41888
  */
41676
41889
 
41677
- 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 };
41890
+ 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, FocusService, 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, StructuredLoggerService, 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 };
41678
41891
  //# sourceMappingURL=hmcts-ccd-case-ui-toolkit.mjs.map