@hmcts/ccd-case-ui-toolkit 7.3.60 → 7.3.61-message-interpolation-01

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.
@@ -8,11 +8,10 @@ import * as i1$1 from '@angular/router';
8
8
  import { RouterModule, NavigationStart, NavigationEnd } from '@angular/router';
9
9
  import * as i4 from '@angular/forms';
10
10
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormArray, FormGroup, FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
11
- import { BehaviorSubject, throwError, Subject, EMPTY, Observable, skip, of, timer, forkJoin, fromEvent, Subscription, combineLatest } from 'rxjs';
11
+ import { BehaviorSubject, throwError, Subject, EMPTY, concat, defer, timer, Observable, skip, of, forkJoin, fromEvent, Subscription, combineLatest } from 'rxjs';
12
+ import { distinctUntilChanged, catchError, map, switchMap, repeat, retry, publish, refCount, debounceTime, delay, finalize, timeout, mergeMap, retryWhen, tap, delayWhen, publishReplay, take, first, takeUntil, filter } from 'rxjs/operators';
12
13
  import * as i1$2 from '@angular/common/http';
13
14
  import { HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';
14
- import { distinctUntilChanged, catchError, map, publish, refCount, switchMap, debounceTime, delay, finalize, timeout, mergeMap, retryWhen, tap, delayWhen, publishReplay, take, first, takeUntil, filter } from 'rxjs/operators';
15
- import { polling } from 'rx-polling-hmcts';
16
15
  import { Type, Exclude, Expose, plainToClassFromExist, plainToClass } from 'class-transformer';
17
16
  import moment from 'moment';
18
17
  import { __decorate, __metadata } from 'tslib';
@@ -1829,8 +1828,7 @@ class ActivityPollingService {
1829
1828
  this.config = config;
1830
1829
  this.pollConfig = {
1831
1830
  interval: config.getActivityNexPollRequestMs(),
1832
- attempts: config.getActivityRetry(),
1833
- backgroundPolling: true
1831
+ attempts: config.getActivityRetry()
1834
1832
  };
1835
1833
  this.batchCollectionDelayMs = config.getActivityBatchCollectionDelayMs();
1836
1834
  this.maxRequestsPerBatch = config.getActivityMaxRequestPerBatch();
@@ -1847,17 +1845,18 @@ class ActivityPollingService {
1847
1845
  subject.subscribe(done);
1848
1846
  }
1849
1847
  else {
1848
+ // Only the first pending request should start the batch collection timer.
1849
+ const wasEmpty = this.pendingRequests.size === 0;
1850
1850
  subject = new Subject();
1851
1851
  subject.subscribe(done);
1852
- this.pendingRequests.set(caseId, subject);
1853
- }
1854
- if (this.pendingRequests.size === 1) {
1855
- this.ngZone.runOutsideAngular(() => {
1856
- this.currentTimeoutHandle = setTimeout(() => this.ngZone.run(() => {
1857
- // console.log('timeout: flushing requests')
1858
- this.flushRequests();
1859
- }), this.batchCollectionDelayMs);
1860
- });
1852
+ this.addPendingRequest(caseId, subject);
1853
+ if (wasEmpty) {
1854
+ this.ngZone.runOutsideAngular(() => {
1855
+ this.currentTimeoutHandle = setTimeout(() => this.ngZone.run(() => {
1856
+ this.flushRequests();
1857
+ }), this.batchCollectionDelayMs);
1858
+ });
1859
+ }
1861
1860
  }
1862
1861
  if (this.pendingRequests.size >= this.maxRequestsPerBatch) {
1863
1862
  // console.log('max pending hit: flushing requests');
@@ -1875,6 +1874,9 @@ class ActivityPollingService {
1875
1874
  clearTimeout(this.currentTimeoutHandle);
1876
1875
  this.currentTimeoutHandle = undefined;
1877
1876
  }
1877
+ if (!this.pendingRequests.size) {
1878
+ return;
1879
+ }
1878
1880
  const requests = new Map(this.pendingRequests);
1879
1881
  this.pendingRequests.clear();
1880
1882
  this.performBatchRequest(requests);
@@ -1883,7 +1885,7 @@ class ActivityPollingService {
1883
1885
  if (!this.isEnabled) {
1884
1886
  return EMPTY;
1885
1887
  }
1886
- return polling(this.activityService.getActivities(...caseIds), this.pollConfig);
1888
+ return this.polling(this.activityService.getActivities(...caseIds), this.pollConfig);
1887
1889
  }
1888
1890
  postViewActivity(caseId) {
1889
1891
  return this.postActivity(caseId, ActivityService.ACTIVITY_VIEW);
@@ -1896,17 +1898,19 @@ class ActivityPollingService {
1896
1898
  // console.log('issuing batch request for cases: ' + caseIds);
1897
1899
  this.ngZone.runOutsideAngular(() => {
1898
1900
  // run polling outside angular zone so it does not trigger change detection
1899
- this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe(
1900
- // process activity inside zone so it triggers change detection for activity.component.ts
1901
- (activities) => this.ngZone.run(() => {
1902
- activities.forEach((activity) => {
1903
- // console.log('pushing activity: ' + activity.caseId);
1904
- requests.get(activity.caseId).next(activity);
1905
- });
1906
- }, (err) => {
1907
- console.log(`error: ${err}`);
1908
- Array.from(requests.values()).forEach((subject) => subject.error(err));
1909
- }));
1901
+ this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe({
1902
+ // process activity inside zone so it triggers change detection for activity.component.ts
1903
+ next: (activities) => this.ngZone.run(() => {
1904
+ activities.forEach((activity) => {
1905
+ // Ignore activities returned for cases outside this local batch.
1906
+ requests.get(activity.caseId)?.next(activity);
1907
+ });
1908
+ }),
1909
+ error: (err) => this.ngZone.run(() => {
1910
+ console.log(`error: ${err}`);
1911
+ Array.from(requests.values()).forEach((subject) => subject.error(err));
1912
+ })
1913
+ });
1910
1914
  });
1911
1915
  }
1912
1916
  postActivity(caseId, activityType) {
@@ -1917,7 +1921,42 @@ class ActivityPollingService {
1917
1921
  ...this.pollConfig,
1918
1922
  interval: 5000 // inline with CCD Backend
1919
1923
  };
1920
- return polling(this.activityService.postActivity(caseId, activityType), pollingConfig);
1924
+ return this.polling(this.activityService.postActivity(caseId, activityType), pollingConfig);
1925
+ }
1926
+ addPendingRequest(caseId, subject) {
1927
+ this.pendingRequests.set(caseId, subject);
1928
+ // Components complete their returned Subject on destroy; remove it so a later same-case subscription gets a fresh Subject.
1929
+ subject.subscribe({
1930
+ complete: () => this.removePendingRequest(caseId, subject),
1931
+ error: () => this.removePendingRequest(caseId, subject)
1932
+ });
1933
+ }
1934
+ removePendingRequest(caseId, subject) {
1935
+ if (this.pendingRequests.get(caseId) !== subject) {
1936
+ return;
1937
+ }
1938
+ this.pendingRequests.delete(caseId);
1939
+ if (!this.pendingRequests.size && this.currentTimeoutHandle) {
1940
+ clearTimeout(this.currentTimeoutHandle);
1941
+ this.currentTimeoutHandle = undefined;
1942
+ }
1943
+ }
1944
+ polling(request$, options) {
1945
+ const pollingOptions = {
1946
+ interval: options.interval,
1947
+ attempts: options.attempts ?? 9,
1948
+ exponentialUnit: options.exponentialUnit ?? 1000
1949
+ };
1950
+ return concat(request$, defer(() => timer(pollingOptions.interval).pipe(switchMap(() => request$))).pipe(repeat())).pipe(
1951
+ // Preserve consecutive-failure retry behaviour using the current RxJS retry config.
1952
+ retry({
1953
+ count: pollingOptions.attempts,
1954
+ delay: (_error, retryCount) => timer(this.getExponentialRetryDelay(retryCount, pollingOptions.exponentialUnit)),
1955
+ resetOnSuccess: true
1956
+ }));
1957
+ }
1958
+ getExponentialRetryDelay(consecutiveErrorsCount, exponentialUnit) {
1959
+ return Math.pow(2, consecutiveErrorsCount - 1) * exponentialUnit;
1921
1960
  }
1922
1961
  static ɵfac = function ActivityPollingService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActivityPollingService)(i0.ɵɵinject(ActivityService), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(AbstractAppConfig)); };
1923
1962
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ActivityPollingService, factory: ActivityPollingService.ɵfac });
@@ -6883,6 +6922,7 @@ class LabelSubstitutorModule {
6883
6922
  static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
6884
6923
  FieldsUtils,
6885
6924
  CurrencyPipe,
6925
+ PlaceholderService
6886
6926
  ] });
6887
6927
  }
6888
6928
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LabelSubstitutorModule, [{
@@ -6897,6 +6937,7 @@ class LabelSubstitutorModule {
6897
6937
  providers: [
6898
6938
  FieldsUtils,
6899
6939
  CurrencyPipe,
6940
+ PlaceholderService
6900
6941
  ]
6901
6942
  }]
6902
6943
  }], null, null); })();
@@ -11336,6 +11377,8 @@ class CaseEditPageComponent {
11336
11377
  dialogRefAfterClosedSub;
11337
11378
  saveDraftSub;
11338
11379
  caseFormValidationErrorsSub;
11380
+ fieldsUtils = new FieldsUtils();
11381
+ placeholderService = new PlaceholderService();
11339
11382
  static scrollToTop() {
11340
11383
  window.scrollTo(0, 0);
11341
11384
  }
@@ -11504,7 +11547,7 @@ class CaseEditPageComponent {
11504
11547
  ? group.get(`${casefield.id}_judicialUserControl`)
11505
11548
  : group.get(casefield.id);
11506
11549
  if (fieldElement) {
11507
- const label = casefield.label || 'Field';
11550
+ const label = this.getInterpolatedFieldLabel(casefield);
11508
11551
  let id = casefield.id;
11509
11552
  if (fieldElement['component'] && fieldElement['component'].parent) {
11510
11553
  if (fieldElement['component'].idPrefix.indexOf(`_${id}_`) === -1) {
@@ -11564,7 +11607,7 @@ class CaseEditPageComponent {
11564
11607
  });
11565
11608
  }
11566
11609
  else {
11567
- this.validationErrors.push({ id, message: `Select or fill the required ${casefield.label} field` });
11610
+ this.validationErrors.push({ id, message: `Select or fill the required ${label} field` });
11568
11611
  fieldElement.markAsDirty();
11569
11612
  }
11570
11613
  }
@@ -11970,7 +12013,20 @@ class CaseEditPageComponent {
11970
12013
  });
11971
12014
  }
11972
12015
  getRpxTranslatePipeArgs(fieldLabel) {
11973
- return fieldLabel ? ({ FIELDLABEL: fieldLabel }) : null;
12016
+ return fieldLabel ? ({ FIELDLABEL: this.resolveLabelPlaceholders(fieldLabel) }) : null;
12017
+ }
12018
+ getInterpolatedFieldLabel(caseField) {
12019
+ const label = caseField.label || 'Field';
12020
+ return this.resolveLabelPlaceholders(label);
12021
+ }
12022
+ resolveLabelPlaceholders(label) {
12023
+ const dataControl = this.editForm?.controls?.['data'];
12024
+ const formFields = dataControl && typeof dataControl.getRawValue === 'function'
12025
+ ? dataControl.getRawValue()
12026
+ : {};
12027
+ const contextFields = this.caseFields?.length ? this.caseFields : this.eventTrigger?.case_fields || [];
12028
+ const fields = this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(contextFields, formFields);
12029
+ return this.placeholderService.resolvePlaceholders(fields, label);
11974
12030
  }
11975
12031
  onEventCanBeCompleted(eventCanBeCompleted) {
11976
12032
  this.caseEdit.onEventCanBeCompleted({
@@ -12022,7 +12078,7 @@ class CaseEditPageComponent {
12022
12078
  type: Component,
12023
12079
  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"] }]
12024
12080
  }], () => [{ 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); })();
12025
- (() => { (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 }); })();
12081
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditPageComponent, { className: "CaseEditPageComponent", filePath: "lib/shared/components/case-editor/case-edit-page/case-edit-page.component.ts", lineNumber: 36 }); })();
12026
12082
 
12027
12083
  class CallbackErrorsContext {
12028
12084
  triggerText;
@@ -29451,22 +29507,24 @@ class UpdateFlagTitleDisplayPipe extends AsyncPipe {
29451
29507
 
29452
29508
  const _c0$l = (a0, a1, a2) => [a0, false, undefined, true, a1, a2];
29453
29509
  function ReadComplexFieldRawComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
29454
- i0.ɵɵelementContainerStart(0);
29455
- i0.ɵɵelementStart(1, "dt", 2)(2, "span", 3);
29456
- i0.ɵɵtext(3);
29457
- i0.ɵɵpipe(4, "rpxTranslate");
29510
+ i0.ɵɵelementContainerStart(0)(1, 2);
29511
+ i0.ɵɵelementStart(2, "dt", 3)(3, "span", 4);
29512
+ i0.ɵɵtext(4);
29513
+ i0.ɵɵpipe(5, "rpxTranslate");
29458
29514
  i0.ɵɵelementEnd()();
29459
- i0.ɵɵelementStart(5, "dd", 2);
29460
- i0.ɵɵelement(6, "ccd-field-read", 4);
29515
+ i0.ɵɵelementStart(6, "dd", 3);
29516
+ i0.ɵɵelement(7, "ccd-field-read", 5);
29461
29517
  i0.ɵɵelementEnd();
29462
- i0.ɵɵelementContainerEnd();
29518
+ i0.ɵɵelementContainerEnd()();
29463
29519
  } if (rf & 2) {
29464
29520
  const field_r1 = ctx.$implicit;
29465
29521
  const ctx_r1 = i0.ɵɵnextContext();
29466
29522
  i0.ɵɵadvance();
29523
+ i0.ɵɵproperty("caseField", field_r1)("formGroup", ctx_r1.topLevelFormGroup)("contextFields", ctx_r1.caseFields);
29524
+ i0.ɵɵadvance();
29467
29525
  i0.ɵɵproperty("hidden", field_r1.hidden || field_r1.field_type.type === "Label");
29468
29526
  i0.ɵɵadvance(2);
29469
- i0.ɵɵtextInterpolate(ctx_r1.isTranslatable(field_r1) ? i0.ɵɵpipeBind1(4, 8, field_r1.label) : field_r1.label);
29527
+ i0.ɵɵtextInterpolate(ctx_r1.isTranslatable(field_r1) ? i0.ɵɵpipeBind1(5, 11, field_r1.label) : field_r1.label);
29470
29528
  i0.ɵɵadvance(2);
29471
29529
  i0.ɵɵproperty("hidden", field_r1.hidden);
29472
29530
  i0.ɵɵadvance();
@@ -29479,9 +29537,9 @@ function ReadComplexFieldRawComponent_ng_container_1_Template(rf, ctx) { if (rf
29479
29537
  class ReadComplexFieldRawComponent extends AbstractFieldReadComponent {
29480
29538
  caseFields = [];
29481
29539
  static ɵfac = /*@__PURE__*/ (() => { let ɵReadComplexFieldRawComponent_BaseFactory; return function ReadComplexFieldRawComponent_Factory(__ngFactoryType__) { return (ɵReadComplexFieldRawComponent_BaseFactory || (ɵReadComplexFieldRawComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadComplexFieldRawComponent)))(__ngFactoryType__ || ReadComplexFieldRawComponent); }; })();
29482
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldRawComponent, selectors: [["ccd-read-complex-field-raw"]], inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 12, consts: [[1, "complex-raw"], [4, "ngFor", "ngForOf"], [3, "hidden"], [1, "text-16"], [3, "caseField", "context", "caseFields", "topLevelFormGroup", "idPrefix"]], template: function ReadComplexFieldRawComponent_Template(rf, ctx) { if (rf & 1) {
29540
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldRawComponent, selectors: [["ccd-read-complex-field-raw"]], inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 12, consts: [[1, "complex-raw"], [4, "ngFor", "ngForOf"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], [3, "hidden"], [1, "text-16"], [3, "caseField", "context", "caseFields", "topLevelFormGroup", "idPrefix"]], template: function ReadComplexFieldRawComponent_Template(rf, ctx) { if (rf & 1) {
29483
29541
  i0.ɵɵelementStart(0, "dl", 0);
29484
- i0.ɵɵtemplate(1, ReadComplexFieldRawComponent_ng_container_1_Template, 7, 10, "ng-container", 1);
29542
+ i0.ɵɵtemplate(1, ReadComplexFieldRawComponent_ng_container_1_Template, 8, 13, "ng-container", 1);
29485
29543
  i0.ɵɵpipe(2, "ccdReadFieldsFilter");
29486
29544
  i0.ɵɵelementEnd();
29487
29545
  } if (rf & 2) {
@@ -29491,17 +29549,17 @@ class ReadComplexFieldRawComponent extends AbstractFieldReadComponent {
29491
29549
  }
29492
29550
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadComplexFieldRawComponent, [{
29493
29551
  type: Component,
29494
- args: [{ selector: 'ccd-read-complex-field-raw', standalone: false, template: "<dl class=\"complex-raw\">\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true :topLevelFormGroup :id()\">\n <dt [hidden]=\"field.hidden || field.field_type.type === 'Label'\"><span class=\"text-16\">{{isTranslatable(field) ? (field.label | rpxTranslate) : field.label}}</span></dt>\n <dd [hidden]=\"field.hidden\">\n <ccd-field-read [caseField]=\"field\" [context]=\"context\" [caseFields]=\"caseFields\" [topLevelFormGroup]=\"topLevelFormGroup\" [idPrefix]=\"idPrefix\"></ccd-field-read>\n </dd>\n </ng-container>\n</dl>\n", styles: ["dl.complex-raw{list-style-type:none;margin:5px 0 10px}dl.complex-raw dl.complex-raw{padding-left:2ch}dl.complex-raw dt{font-weight:700}\n"] }]
29552
+ args: [{ selector: 'ccd-read-complex-field-raw', standalone: false, template: "<dl class=\"complex-raw\">\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true :topLevelFormGroup :id()\">\n <ng-container ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"topLevelFormGroup\" [contextFields]=\"caseFields\">\n <dt [hidden]=\"field.hidden || field.field_type.type === 'Label'\"><span class=\"text-16\">{{isTranslatable(field) ? (field.label | rpxTranslate) : field.label}}</span></dt>\n <dd [hidden]=\"field.hidden\">\n <ccd-field-read [caseField]=\"field\" [context]=\"context\" [caseFields]=\"caseFields\" [topLevelFormGroup]=\"topLevelFormGroup\" [idPrefix]=\"idPrefix\"></ccd-field-read>\n </dd>\n </ng-container>\n </ng-container>\n</dl>\n", styles: ["dl.complex-raw{list-style-type:none;margin:5px 0 10px}dl.complex-raw dl.complex-raw{padding-left:2ch}dl.complex-raw dt{font-weight:700}\n"] }]
29495
29553
  }], null, { caseFields: [{
29496
29554
  type: Input
29497
29555
  }] }); })();
29498
29556
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadComplexFieldRawComponent, { className: "ReadComplexFieldRawComponent", filePath: "lib/shared/components/palette/complex/read-complex-field-raw.component.ts", lineNumber: 17 }); })();
29499
29557
 
29500
29558
  const _c0$k = (a0, a1, a2, a3) => [a0, false, undefined, true, a1, a2, a3];
29501
- function ReadComplexFieldTableComponent_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
29559
+ function ReadComplexFieldTableComponent_ng_container_9_ng_container_2_Template(rf, ctx) { if (rf & 1) {
29502
29560
  i0.ɵɵelementContainerStart(0);
29503
- i0.ɵɵelementStart(1, "tr", 7)(2, "td", 8)(3, "span", 3);
29504
- i0.ɵɵelement(4, "ccd-field-read", 9);
29561
+ i0.ɵɵelementStart(1, "tr", 8)(2, "td", 9)(3, "span", 3);
29562
+ i0.ɵɵelement(4, "ccd-field-read", 10);
29505
29563
  i0.ɵɵelementEnd()()();
29506
29564
  i0.ɵɵelementContainerEnd();
29507
29565
  } if (rf & 2) {
@@ -29512,13 +29570,13 @@ function ReadComplexFieldTableComponent_ng_container_9_ng_container_1_Template(r
29512
29570
  i0.ɵɵadvance(3);
29513
29571
  i0.ɵɵproperty("topLevelFormGroup", ctx_r1.topLevelFormGroup)("caseFields", ctx_r1.caseFields)("caseField", field_r1)("context", ctx_r1.context);
29514
29572
  } }
29515
- function ReadComplexFieldTableComponent_ng_container_9_ng_template_3_Template(rf, ctx) { if (rf & 1) {
29516
- i0.ɵɵelementStart(0, "tr", 10)(1, "th", 11)(2, "span", 3);
29573
+ function ReadComplexFieldTableComponent_ng_container_9_ng_template_4_Template(rf, ctx) { if (rf & 1) {
29574
+ i0.ɵɵelementStart(0, "tr", 11)(1, "th", 12)(2, "span", 3);
29517
29575
  i0.ɵɵtext(3);
29518
29576
  i0.ɵɵpipe(4, "rpxTranslate");
29519
29577
  i0.ɵɵelementEnd()();
29520
29578
  i0.ɵɵelementStart(5, "td")(6, "span", 3);
29521
- i0.ɵɵelement(7, "ccd-field-read", 9);
29579
+ i0.ɵɵelement(7, "ccd-field-read", 10);
29522
29580
  i0.ɵɵelementEnd()()();
29523
29581
  } if (rf & 2) {
29524
29582
  const field_r1 = i0.ɵɵnextContext().$implicit;
@@ -29530,16 +29588,19 @@ function ReadComplexFieldTableComponent_ng_container_9_ng_template_3_Template(rf
29530
29588
  i0.ɵɵproperty("topLevelFormGroup", ctx_r1.topLevelFormGroup)("caseFields", ctx_r1.caseFields)("caseField", field_r1)("context", ctx_r1.context);
29531
29589
  } }
29532
29590
  function ReadComplexFieldTableComponent_ng_container_9_Template(rf, ctx) { if (rf & 1) {
29533
- i0.ɵɵelementContainerStart(0);
29534
- i0.ɵɵtemplate(1, ReadComplexFieldTableComponent_ng_container_9_ng_container_1_Template, 5, 5, "ng-container", 6);
29535
- i0.ɵɵpipe(2, "ccdIsCompound");
29536
- i0.ɵɵtemplate(3, ReadComplexFieldTableComponent_ng_container_9_ng_template_3_Template, 8, 8, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
29537
- i0.ɵɵelementContainerEnd();
29591
+ i0.ɵɵelementContainerStart(0)(1, 6);
29592
+ i0.ɵɵtemplate(2, ReadComplexFieldTableComponent_ng_container_9_ng_container_2_Template, 5, 5, "ng-container", 7);
29593
+ i0.ɵɵpipe(3, "ccdIsCompound");
29594
+ i0.ɵɵtemplate(4, ReadComplexFieldTableComponent_ng_container_9_ng_template_4_Template, 8, 8, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
29595
+ i0.ɵɵelementContainerEnd()();
29538
29596
  } if (rf & 2) {
29539
29597
  const field_r1 = ctx.$implicit;
29540
- const SimpleRow_r3 = i0.ɵɵreference(4);
29598
+ const SimpleRow_r3 = i0.ɵɵreference(5);
29599
+ const ctx_r1 = i0.ɵɵnextContext();
29600
+ i0.ɵɵadvance();
29601
+ i0.ɵɵproperty("caseField", field_r1)("formGroup", ctx_r1.topLevelFormGroup)("contextFields", ctx_r1.caseFields);
29541
29602
  i0.ɵɵadvance();
29542
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 2, field_r1))("ngIfElse", SimpleRow_r3);
29603
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(3, 5, field_r1))("ngIfElse", SimpleRow_r3);
29543
29604
  } }
29544
29605
  class ReadComplexFieldTableComponent extends AbstractFieldReadComponent {
29545
29606
  // parent_ can be replaced with any ***_ - underscore is only important character
@@ -29560,7 +29621,7 @@ class ReadComplexFieldTableComponent extends AbstractFieldReadComponent {
29560
29621
  this.path = ReadComplexFieldTableComponent.DUMMY_STRING_PRE + this.idPrefix + ReadComplexFieldTableComponent.DUMMY_STRING_POST;
29561
29622
  }
29562
29623
  static ɵfac = /*@__PURE__*/ (() => { let ɵReadComplexFieldTableComponent_BaseFactory; return function ReadComplexFieldTableComponent_Factory(__ngFactoryType__) { return (ɵReadComplexFieldTableComponent_BaseFactory || (ɵReadComplexFieldTableComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadComplexFieldTableComponent)))(__ngFactoryType__ || ReadComplexFieldTableComponent); }; })();
29563
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldTableComponent, selectors: [["ccd-read-complex-field-table"]], inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 11, vars: 17, consts: [["SimpleRow", ""], [1, "complex-panel"], [1, "complex-panel-title"], [1, "text-16"], ["aria-describedby", "complex field table", 1, "complex-panel-table"], [4, "ngFor", "ngForOf"], [4, "ngIf", "ngIfElse"], [1, "complex-panel-compound-field", 3, "hidden"], ["colspan", "2"], [3, "topLevelFormGroup", "caseFields", "caseField", "context"], [1, "complex-panel-simple-field", 3, "hidden"], ["id", "complex-panel-simple-field-label"]], template: function ReadComplexFieldTableComponent_Template(rf, ctx) { if (rf & 1) {
29624
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldTableComponent, selectors: [["ccd-read-complex-field-table"]], inputs: { caseFields: "caseFields" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 11, vars: 17, consts: [["SimpleRow", ""], [1, "complex-panel"], [1, "complex-panel-title"], [1, "text-16"], ["aria-describedby", "complex field table", 1, "complex-panel-table"], [4, "ngFor", "ngForOf"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], [4, "ngIf", "ngIfElse"], [1, "complex-panel-compound-field", 3, "hidden"], ["colspan", "2"], [3, "topLevelFormGroup", "caseFields", "caseField", "context"], [1, "complex-panel-simple-field", 3, "hidden"], ["id", "complex-panel-simple-field-label"]], template: function ReadComplexFieldTableComponent_Template(rf, ctx) { if (rf & 1) {
29564
29625
  i0.ɵɵelementStart(0, "div", 1)(1, "dl", 2)(2, "dt")(3, "span", 3);
29565
29626
  i0.ɵɵtext(4);
29566
29627
  i0.ɵɵpipe(5, "rpxTranslate");
@@ -29568,7 +29629,7 @@ class ReadComplexFieldTableComponent extends AbstractFieldReadComponent {
29568
29629
  i0.ɵɵelement(6, "dd");
29569
29630
  i0.ɵɵelementEnd();
29570
29631
  i0.ɵɵelementStart(7, "table", 4)(8, "tbody");
29571
- i0.ɵɵtemplate(9, ReadComplexFieldTableComponent_ng_container_9_Template, 5, 4, "ng-container", 5);
29632
+ i0.ɵɵtemplate(9, ReadComplexFieldTableComponent_ng_container_9_Template, 6, 7, "ng-container", 5);
29572
29633
  i0.ɵɵpipe(10, "ccdReadFieldsFilter");
29573
29634
  i0.ɵɵelementEnd()()();
29574
29635
  } if (rf & 2) {
@@ -29580,7 +29641,7 @@ class ReadComplexFieldTableComponent extends AbstractFieldReadComponent {
29580
29641
  }
29581
29642
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadComplexFieldTableComponent, [{
29582
29643
  type: Component,
29583
- args: [{ selector: 'ccd-read-complex-field-table', standalone: false, template: "<div class=\"complex-panel\">\n <dl class=\"complex-panel-title\"><dt><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></dt><dd></dd></dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex field table\">\n <tbody>\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true :topLevelFormGroup :path :idPrefix\">\n <ng-container *ngIf=\"(field | ccdIsCompound); else SimpleRow\">\n <tr class=\"complex-panel-compound-field\" [hidden]=\"field.hidden\">\n <td colspan=\"2\">\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\" [caseFields]=\"caseFields\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-container>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-simple-field\" [hidden]=\"field.hidden\">\n <th id=\"complex-panel-simple-field-label\"><span class=\"text-16\">{{field.label | rpxTranslate}}</span></th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\" [caseFields]=\"caseFields\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n</div>\n", styles: [".complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th,.complex-panel .complex-panel-table>tbody>tr:last-child>td{border-bottom:none}.complex-panel .complex-panel-simple-field th{padding-left:5px;width:295px}.complex-panel .complex-panel-compound-field td{padding:5px}\n"] }]
29644
+ args: [{ selector: 'ccd-read-complex-field-table', standalone: false, template: "<div class=\"complex-panel\">\n <dl class=\"complex-panel-title\"><dt><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></dt><dd></dd></dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex field table\">\n <tbody>\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true :topLevelFormGroup :path :idPrefix\">\n <ng-container ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"topLevelFormGroup\" [contextFields]=\"caseFields\">\n <ng-container *ngIf=\"(field | ccdIsCompound); else SimpleRow\">\n <tr class=\"complex-panel-compound-field\" [hidden]=\"field.hidden\">\n <td colspan=\"2\">\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\" [caseFields]=\"caseFields\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-container>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-simple-field\" [hidden]=\"field.hidden\">\n <th id=\"complex-panel-simple-field-label\"><span class=\"text-16\">{{field.label | rpxTranslate}}</span></th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\" [caseFields]=\"caseFields\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n</div>\n", styles: [".complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th,.complex-panel .complex-panel-table>tbody>tr:last-child>td{border-bottom:none}.complex-panel .complex-panel-simple-field th{padding-left:5px;width:295px}.complex-panel .complex-panel-compound-field td{padding:5px}\n"] }]
29584
29645
  }], null, { caseFields: [{
29585
29646
  type: Input
29586
29647
  }] }); })();
@@ -32362,8 +32423,8 @@ i0.ɵɵsetComponentScope(ReadOrderSummaryRowComponent, function () { return [Rea
32362
32423
  i0.ɵɵsetComponentScope(ReadComplexFieldComponent, function () { return [i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault, ReadComplexFieldRawComponent,
32363
32424
  ReadComplexFieldTableComponent,
32364
32425
  ReadComplexFieldCollectionTableComponent]; }, []);
32365
- i0.ɵɵsetComponentScope(ReadComplexFieldRawComponent, function () { return [i5.NgForOf, FieldReadComponent]; }, function () { return [ReadFieldsFilterPipe, i1.RpxTranslatePipe]; });
32366
- i0.ɵɵsetComponentScope(ReadComplexFieldTableComponent, function () { return [i5.NgForOf, i5.NgIf, FieldReadComponent]; }, function () { return [IsCompoundPipe, ReadFieldsFilterPipe, i1.RpxTranslatePipe]; });
32426
+ i0.ɵɵsetComponentScope(ReadComplexFieldRawComponent, function () { return [i5.NgForOf, i4.NgControlStatusGroup, i4.FormGroupDirective, LabelSubstitutorDirective, FieldReadComponent]; }, function () { return [ReadFieldsFilterPipe, i1.RpxTranslatePipe]; });
32427
+ i0.ɵɵsetComponentScope(ReadComplexFieldTableComponent, function () { return [i5.NgForOf, i5.NgIf, i4.NgControlStatusGroup, i4.FormGroupDirective, LabelSubstitutorDirective, FieldReadComponent]; }, function () { return [IsCompoundPipe, ReadFieldsFilterPipe, i1.RpxTranslatePipe]; });
32367
32428
  i0.ɵɵsetComponentScope(ReadComplexFieldCollectionTableComponent, function () { return [i5.NgForOf, i5.NgIf, FieldReadComponent,
32368
32429
  ReadCaseLinkFieldComponent]; }, function () { return [i5.KeyValuePipe, IsCompoundPipe, CcdCollectionTableCaseFieldsFilterPipe, ReadFieldsFilterPipe, i1.RpxTranslatePipe]; });
32369
32430
  i0.ɵɵsetComponentScope(ReadCaseFlagFieldComponent, function () { return [i5.NgForOf, i5.NgIf, i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault,