@hmcts/ccd-case-ui-toolkit 7.0.13 → 7.0.14-address-field-check
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/shared/commons/address-validation-constants.mjs +13 -0
- package/esm2020/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +15 -6
- package/esm2020/lib/shared/components/palette/address/write-address-field.component.mjs +55 -18
- package/esm2020/lib/shared/components/palette/base-field/abstract-form-field.component.mjs +5 -1
- package/esm2020/lib/shared/domain/http/http-error.model.mjs +8 -2
- package/esm2020/lib/shared/services/addresses/addresses.service.mjs +9 -1
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs +101 -22
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +95 -22
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/commons/address-validation-constants.d.ts +7 -0
- package/lib/shared/commons/address-validation-constants.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +3 -2
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
- package/lib/shared/components/palette/address/write-address-field.component.d.ts +5 -0
- package/lib/shared/components/palette/address/write-address-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/base-field/abstract-form-field.component.d.ts.map +1 -1
- package/lib/shared/domain/http/http-error.model.d.ts +1 -0
- package/lib/shared/domain/http/http-error.model.d.ts.map +1 -1
- package/lib/shared/services/addresses/addresses.service.d.ts +3 -0
- package/lib/shared/services/addresses/addresses.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ import * as i1$1 from '@angular/router';
|
|
|
8
8
|
import { RouterModule, NavigationStart, NavigationEnd } from '@angular/router';
|
|
9
9
|
import * as i3 from '@angular/forms';
|
|
10
10
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormArray, FormGroup, FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
11
|
-
import { throwError, Subject, EMPTY, Observable,
|
|
11
|
+
import { throwError, Subject, EMPTY, Observable, BehaviorSubject, of, timer, fromEvent, forkJoin, Subscription, combineLatest } from 'rxjs';
|
|
12
12
|
import * as i1$2 from '@angular/common/http';
|
|
13
13
|
import { HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';
|
|
14
14
|
import { catchError, map, publish, refCount, switchMap, debounceTime, delay, distinctUntilChanged, finalize, timeout, mergeMap, retryWhen, tap, delayWhen, publishReplay, take, first, takeUntil, filter } from 'rxjs/operators';
|
|
@@ -1241,9 +1241,14 @@ class HttpError {
|
|
|
1241
1241
|
}
|
|
1242
1242
|
static from(response) {
|
|
1243
1243
|
const error = new HttpError();
|
|
1244
|
+
if (response?.status === 429) {
|
|
1245
|
+
error.error = HttpError.MESSAGE_ERROR_429;
|
|
1246
|
+
error.status = response.status;
|
|
1247
|
+
error.message = response.message;
|
|
1248
|
+
}
|
|
1244
1249
|
// Check that the HttpErrorResponse contains an "error" object before mapping the error properties
|
|
1245
1250
|
if (!!(response && response.error)) {
|
|
1246
|
-
Object.keys(error).forEach(key => {
|
|
1251
|
+
Object.keys(error).forEach((key) => {
|
|
1247
1252
|
error[key] = response.error.hasOwnProperty(key) && response.error[key] ? response.error[key] : error[key];
|
|
1248
1253
|
});
|
|
1249
1254
|
}
|
|
@@ -1260,6 +1265,7 @@ class HttpError {
|
|
|
1260
1265
|
HttpError.DEFAULT_ERROR = 'Unknown error';
|
|
1261
1266
|
HttpError.DEFAULT_MESSAGE = 'Something unexpected happened, our technical staff have been automatically notified';
|
|
1262
1267
|
HttpError.DEFAULT_STATUS = 500;
|
|
1268
|
+
HttpError.MESSAGE_ERROR_429 = 'Your request was rate limited. Please wait a few seconds before retrying your document upload';
|
|
1263
1269
|
|
|
1264
1270
|
/**
|
|
1265
1271
|
* `Oauth2Service` and `AuthService` cannot be merged as it creates a cyclic dependency on `AuthService` through `HttpErrorService`.
|
|
@@ -4606,7 +4612,11 @@ class AbstractFormFieldComponent {
|
|
|
4606
4612
|
return control;
|
|
4607
4613
|
}
|
|
4608
4614
|
const existing = container.controls[this.caseField.id];
|
|
4615
|
+
// update the field value which has been set in mid-event call back
|
|
4609
4616
|
if (existing) {
|
|
4617
|
+
if (existing.value === null && this.caseField?.value) {
|
|
4618
|
+
existing.value = this.caseField.value;
|
|
4619
|
+
}
|
|
4610
4620
|
if (replace) {
|
|
4611
4621
|
// Set the validators on the replacement with what already exists.
|
|
4612
4622
|
control.setValidators(existing.validator);
|
|
@@ -6253,6 +6263,7 @@ class AddressesService {
|
|
|
6253
6263
|
constructor(http, appConfig) {
|
|
6254
6264
|
this.http = http;
|
|
6255
6265
|
this.appConfig = appConfig;
|
|
6266
|
+
this.mandatoryError = new BehaviorSubject(false);
|
|
6256
6267
|
}
|
|
6257
6268
|
getAddressesForPostcode(postcode) {
|
|
6258
6269
|
return this.http
|
|
@@ -6261,6 +6272,12 @@ class AddressesService {
|
|
|
6261
6272
|
.pipe(map(res => res.results))
|
|
6262
6273
|
.pipe(map(output => output.map(addresses => this.format(new AddressParser().parse(addresses[AddressType.DPA])))));
|
|
6263
6274
|
}
|
|
6275
|
+
getMandatoryError() {
|
|
6276
|
+
return this.mandatoryError.asObservable();
|
|
6277
|
+
}
|
|
6278
|
+
setMandatoryError(value) {
|
|
6279
|
+
this.mandatoryError.next(value);
|
|
6280
|
+
}
|
|
6264
6281
|
format(addressModel) {
|
|
6265
6282
|
return this.formatAddressLines(this.shiftAddressLinesUp(addressModel));
|
|
6266
6283
|
}
|
|
@@ -9616,7 +9633,7 @@ function CaseEditPageComponent_ccd_case_event_completion_11_Template(rf, ctx) {
|
|
|
9616
9633
|
i0.ɵɵproperty("eventCompletionParams", ctx_r8.caseEdit.eventCompletionParams);
|
|
9617
9634
|
} }
|
|
9618
9635
|
class CaseEditPageComponent {
|
|
9619
|
-
constructor(caseEdit, route, formValueService, formErrorService, cdRef, pageValidationService, dialog, caseFieldService, caseEditDataService, loadingService, validPageListCaseFieldsService) {
|
|
9636
|
+
constructor(caseEdit, route, formValueService, formErrorService, cdRef, pageValidationService, dialog, caseFieldService, caseEditDataService, loadingService, validPageListCaseFieldsService, addressService) {
|
|
9620
9637
|
this.caseEdit = caseEdit;
|
|
9621
9638
|
this.route = route;
|
|
9622
9639
|
this.formValueService = formValueService;
|
|
@@ -9628,6 +9645,7 @@ class CaseEditPageComponent {
|
|
|
9628
9645
|
this.caseEditDataService = caseEditDataService;
|
|
9629
9646
|
this.loadingService = loadingService;
|
|
9630
9647
|
this.validPageListCaseFieldsService = validPageListCaseFieldsService;
|
|
9648
|
+
this.addressService = addressService;
|
|
9631
9649
|
this.triggerTextStart = CaseEditPageComponent.TRIGGER_TEXT_START;
|
|
9632
9650
|
this.triggerTextIgnoreWarnings = CaseEditPageComponent.TRIGGER_TEXT_CONTINUE;
|
|
9633
9651
|
this.formValuesChanged = false;
|
|
@@ -9750,7 +9768,14 @@ class CaseEditPageComponent {
|
|
|
9750
9768
|
}
|
|
9751
9769
|
}
|
|
9752
9770
|
if (fieldElement.hasError('required')) {
|
|
9753
|
-
|
|
9771
|
+
if (casefield.id === 'AddressLine1') {
|
|
9772
|
+
// EUI-1067 - Display more relevant error message to user and correctly navigate to the field
|
|
9773
|
+
this.addressService.setMandatoryError(true);
|
|
9774
|
+
this.caseEditDataService.addFormValidationError({ id: `${path}_${path}`, message: `An address is required` });
|
|
9775
|
+
}
|
|
9776
|
+
else {
|
|
9777
|
+
this.caseEditDataService.addFormValidationError({ id, message: `%FIELDLABEL% is required`, label });
|
|
9778
|
+
}
|
|
9754
9779
|
fieldElement.markAsDirty();
|
|
9755
9780
|
// For the JudicialUser field type, an error needs to be set on the component so that an error message
|
|
9756
9781
|
// can be displayed at field level
|
|
@@ -9825,6 +9850,7 @@ class CaseEditPageComponent {
|
|
|
9825
9850
|
}
|
|
9826
9851
|
}
|
|
9827
9852
|
if (!this.caseEdit.isSubmitting && !this.currentPageIsNotValid()) {
|
|
9853
|
+
this.addressService.setMandatoryError(false);
|
|
9828
9854
|
console.log('Case Edit Error', this.caseEdit.error);
|
|
9829
9855
|
if (this.caseEdit.validPageList.findIndex(page => page.id === this.currentPage.id) === -1) {
|
|
9830
9856
|
this.caseEdit.validPageList.push(this.currentPage);
|
|
@@ -10124,7 +10150,7 @@ CaseEditPageComponent.RESUMED_FORM_SAVE = 'RESUMED_FORM_SAVE';
|
|
|
10124
10150
|
CaseEditPageComponent.TRIGGER_TEXT_START = 'Continue';
|
|
10125
10151
|
CaseEditPageComponent.TRIGGER_TEXT_SAVE = 'Save and continue';
|
|
10126
10152
|
CaseEditPageComponent.TRIGGER_TEXT_CONTINUE = 'Ignore Warning and Continue';
|
|
10127
|
-
CaseEditPageComponent.ɵfac = function CaseEditPageComponent_Factory(t) { return new (t || 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)); };
|
|
10153
|
+
CaseEditPageComponent.ɵfac = function CaseEditPageComponent_Factory(t) { return new (t || 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(AddressesService)); };
|
|
10128
10154
|
CaseEditPageComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditPageComponent, selectors: [["ccd-case-edit-page"]], decls: 12, vars: 11, consts: [[4, "ngIf"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["titleBlock", ""], ["idBlock", ""], ["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], [3, "error"], [3, "triggerTextContinue", "triggerTextIgnore", "callbackErrorsSubject", "callbackErrorsContext"], [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"], [1, "validation-error", 3, "click"], [1, "form", 3, "formGroup", "submit"], ["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"], ["type", "button", 1, "button", "button-secondary", 3, "disabled", "click"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["href", "javascript:void(0)", 3, "click"], ["id", "caseEditForm", 3, "fields", "formGroup", "caseFields", "pageChangeSubject", "valuesChanged"], [1, "grid-row"], [1, "column-two-thirds", "rightBorderSeparator"], ["id", "caseEditForm1", 3, "fields", "formGroup", "caseFields"], [1, "column-one-third"], ["id", "caseEditForm2", 3, "fields", "formGroup", "caseFields"], [3, "eventCompletionParams", "eventCanBeCompleted"]], template: function CaseEditPageComponent_Template(rf, ctx) { if (rf & 1) {
|
|
10129
10155
|
i0.ɵɵtemplate(0, CaseEditPageComponent_ng_container_0_Template, 3, 2, "ng-container", 0);
|
|
10130
10156
|
i0.ɵɵtemplate(1, CaseEditPageComponent_div_1_Template, 1, 0, "div", 1);
|
|
@@ -10159,7 +10185,7 @@ CaseEditPageComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseE
|
|
|
10159
10185
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditPageComponent, [{
|
|
10160
10186
|
type: Component,
|
|
10161
10187
|
args: [{ selector: 'ccd-case-edit-page', 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']\"></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)\" 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)=\"submit()\">\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\" [disabled]=\"!(hasPreviousPage$ | async)\" (click)=\"toPreviousPage()\">\n {{'Previous' | rpxTranslate}}\n </button>\n <button class=\"button\" type=\"submit\" [disabled]=\"submitting()\">{{triggerText | rpxTranslate}}</button>\n </div>\n\n <p class=\"cancel\"><a (click)=\"cancel()\" href=\"javascript:void(0)\">{{getCancelText() | rpxTranslate}}</a></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"] }]
|
|
10162
|
-
}], function () { return [{ 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 }]; }, null); })();
|
|
10188
|
+
}], function () { return [{ 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: AddressesService }]; }, null); })();
|
|
10163
10189
|
|
|
10164
10190
|
class CallbackErrorsContext {
|
|
10165
10191
|
}
|
|
@@ -10606,6 +10632,17 @@ class AddressOption {
|
|
|
10606
10632
|
}
|
|
10607
10633
|
}
|
|
10608
10634
|
|
|
10635
|
+
class AddressValidationConstants {
|
|
10636
|
+
}
|
|
10637
|
+
// allow alpha-numeric characters and spaces possibly between a connecting - character
|
|
10638
|
+
// this applies validation while allowing partial postcodes
|
|
10639
|
+
AddressValidationConstants.REGEX_POSTCODE = /^([A-Za-z0-9]-*| )+$/;
|
|
10640
|
+
AddressValidationConstants.ɵfac = function AddressValidationConstants_Factory(t) { return new (t || AddressValidationConstants)(); };
|
|
10641
|
+
AddressValidationConstants.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AddressValidationConstants, factory: AddressValidationConstants.ɵfac });
|
|
10642
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AddressValidationConstants, [{
|
|
10643
|
+
type: Injectable
|
|
10644
|
+
}], null, null); })();
|
|
10645
|
+
|
|
10609
10646
|
class FieldsFilterPipe {
|
|
10610
10647
|
/**
|
|
10611
10648
|
* Complex type should have at least on simple field descendant with a value.
|
|
@@ -10872,8 +10909,9 @@ function WriteAddressFieldComponent_div_1_div_4_span_5_Template(rf, ctx) { if (r
|
|
|
10872
10909
|
i0.ɵɵpipe(2, "rpxTranslate");
|
|
10873
10910
|
i0.ɵɵelementEnd();
|
|
10874
10911
|
} if (rf & 2) {
|
|
10912
|
+
const ctx_r5 = i0.ɵɵnextContext(3);
|
|
10875
10913
|
i0.ɵɵadvance(1);
|
|
10876
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1,
|
|
10914
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r5.errorMessage));
|
|
10877
10915
|
} }
|
|
10878
10916
|
const _c1$n = function (a0) { return { "form-group-error": a0 }; };
|
|
10879
10917
|
const _c2$2 = function (a0) { return { "govuk-input--error": a0 }; };
|
|
@@ -10904,42 +10942,56 @@ function WriteAddressFieldComponent_div_1_div_4_Template(rf, ctx) { if (rf & 1)
|
|
|
10904
10942
|
i0.ɵɵadvance(2);
|
|
10905
10943
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 11, "Find address"));
|
|
10906
10944
|
} }
|
|
10907
|
-
function
|
|
10945
|
+
function WriteAddressFieldComponent_div_1_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
|
|
10946
|
+
i0.ɵɵelementStart(0, "span", 14);
|
|
10947
|
+
i0.ɵɵtext(1);
|
|
10948
|
+
i0.ɵɵpipe(2, "rpxTranslate");
|
|
10949
|
+
i0.ɵɵelementEnd();
|
|
10950
|
+
} if (rf & 2) {
|
|
10951
|
+
const ctx_r8 = i0.ɵɵnextContext(3);
|
|
10952
|
+
i0.ɵɵadvance(1);
|
|
10953
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r8.errorMessage));
|
|
10954
|
+
} }
|
|
10955
|
+
function WriteAddressFieldComponent_div_1_div_5_option_7_Template(rf, ctx) { if (rf & 1) {
|
|
10908
10956
|
i0.ɵɵelementStart(0, "option", 18);
|
|
10909
10957
|
i0.ɵɵtext(1);
|
|
10910
10958
|
i0.ɵɵpipe(2, "rpxTranslate");
|
|
10911
10959
|
i0.ɵɵelementEnd();
|
|
10912
10960
|
} if (rf & 2) {
|
|
10913
|
-
const
|
|
10914
|
-
i0.ɵɵproperty("ngValue",
|
|
10961
|
+
const addressOption_r10 = ctx.$implicit;
|
|
10962
|
+
i0.ɵɵproperty("ngValue", addressOption_r10.value);
|
|
10915
10963
|
i0.ɵɵadvance(1);
|
|
10916
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2,
|
|
10964
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, addressOption_r10.description), " ");
|
|
10917
10965
|
} }
|
|
10918
10966
|
function WriteAddressFieldComponent_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
10919
|
-
const
|
|
10967
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
10920
10968
|
i0.ɵɵelementStart(0, "div", 15)(1, "label", 9)(2, "span", 10);
|
|
10921
10969
|
i0.ɵɵtext(3);
|
|
10922
10970
|
i0.ɵɵpipe(4, "rpxTranslate");
|
|
10923
10971
|
i0.ɵɵelementEnd()();
|
|
10924
|
-
i0.ɵɵ
|
|
10925
|
-
i0.ɵɵ
|
|
10926
|
-
i0.ɵɵ
|
|
10972
|
+
i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_5_span_5_Template, 3, 3, "span", 11);
|
|
10973
|
+
i0.ɵɵelementStart(6, "select", 16);
|
|
10974
|
+
i0.ɵɵlistener("change", function WriteAddressFieldComponent_div_1_div_5_Template_select_change_6_listener() { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r11.addressSelected()); });
|
|
10975
|
+
i0.ɵɵtemplate(7, WriteAddressFieldComponent_div_1_div_5_option_7_Template, 3, 4, "option", 17);
|
|
10927
10976
|
i0.ɵɵelementEnd()();
|
|
10928
10977
|
} if (rf & 2) {
|
|
10929
10978
|
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
10979
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c1$n, ctx_r3.noAddressSelected));
|
|
10930
10980
|
i0.ɵɵadvance(1);
|
|
10931
10981
|
i0.ɵɵproperty("for", ctx_r3.createElementId("addressList"));
|
|
10932
10982
|
i0.ɵɵadvance(2);
|
|
10933
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4,
|
|
10983
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 7, "Select an address"));
|
|
10934
10984
|
i0.ɵɵadvance(2);
|
|
10985
|
+
i0.ɵɵproperty("ngIf", ctx_r3.noAddressSelected);
|
|
10986
|
+
i0.ɵɵadvance(1);
|
|
10935
10987
|
i0.ɵɵproperty("id", ctx_r3.createElementId("addressList"))("formControl", ctx_r3.addressList);
|
|
10936
10988
|
i0.ɵɵadvance(1);
|
|
10937
10989
|
i0.ɵɵproperty("ngForOf", ctx_r3.addressOptions);
|
|
10938
10990
|
} }
|
|
10939
10991
|
function WriteAddressFieldComponent_div_1_a_6_Template(rf, ctx) { if (rf & 1) {
|
|
10940
|
-
const
|
|
10992
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
10941
10993
|
i0.ɵɵelementStart(0, "a", 19);
|
|
10942
|
-
i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_1_a_6_Template_a_click_0_listener() { i0.ɵɵrestoreView(
|
|
10994
|
+
i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_1_a_6_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r13.blankAddress()); });
|
|
10943
10995
|
i0.ɵɵtext(1);
|
|
10944
10996
|
i0.ɵɵpipe(2, "rpxTranslate");
|
|
10945
10997
|
i0.ɵɵelementEnd();
|
|
@@ -10953,7 +11005,7 @@ function WriteAddressFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
10953
11005
|
i0.ɵɵpipe(3, "ccdFieldLabel");
|
|
10954
11006
|
i0.ɵɵelementEnd();
|
|
10955
11007
|
i0.ɵɵtemplate(4, WriteAddressFieldComponent_div_1_div_4_Template, 10, 17, "div", 5);
|
|
10956
|
-
i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_5_Template,
|
|
11008
|
+
i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_5_Template, 8, 11, "div", 6);
|
|
10957
11009
|
i0.ɵɵtemplate(6, WriteAddressFieldComponent_div_1_a_6_Template, 3, 3, "a", 7);
|
|
10958
11010
|
i0.ɵɵelementEnd();
|
|
10959
11011
|
} if (rf & 2) {
|
|
@@ -10972,19 +11024,30 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
|
|
|
10972
11024
|
super();
|
|
10973
11025
|
this.isCompoundPipe = isCompoundPipe;
|
|
10974
11026
|
this.addressFormGroup = new FormGroup({});
|
|
11027
|
+
this.errorMessage = WriteAddressFieldComponent.REQUIRED_ERROR_MESSAGE;
|
|
10975
11028
|
this.missingPostcode = false;
|
|
11029
|
+
this.noAddressSelected = false;
|
|
10976
11030
|
this.addressesService = addressesService;
|
|
10977
11031
|
}
|
|
10978
11032
|
ngOnInit() {
|
|
10979
11033
|
if (!this.isComplexWithHiddenFields()) {
|
|
10980
|
-
this.postcode = new FormControl('');
|
|
11034
|
+
this.postcode = new FormControl('', [Validators.required]);
|
|
10981
11035
|
this.addressFormGroup.addControl('postcode', this.postcode);
|
|
10982
11036
|
this.addressList = new FormControl('');
|
|
10983
11037
|
this.addressFormGroup.addControl('address', this.addressList);
|
|
10984
11038
|
}
|
|
11039
|
+
this.addressesService.getMandatoryError().subscribe((value) => {
|
|
11040
|
+
this.updateErrorsOnContinue(value);
|
|
11041
|
+
});
|
|
10985
11042
|
}
|
|
10986
11043
|
findAddress() {
|
|
11044
|
+
this.noAddressSelected = false;
|
|
10987
11045
|
if (!this.postcode.value) {
|
|
11046
|
+
this.errorMessage = WriteAddressFieldComponent.REQUIRED_ERROR_MESSAGE;
|
|
11047
|
+
this.missingPostcode = true;
|
|
11048
|
+
}
|
|
11049
|
+
else if (!this.postcode.value.trim().match(AddressValidationConstants.REGEX_POSTCODE)) {
|
|
11050
|
+
this.errorMessage = WriteAddressFieldComponent.INVALID_ERROR_MESSAGE;
|
|
10988
11051
|
this.missingPostcode = true;
|
|
10989
11052
|
}
|
|
10990
11053
|
else {
|
|
@@ -11013,6 +11076,8 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
|
|
|
11013
11076
|
blankAddress() {
|
|
11014
11077
|
this.caseField.value = new AddressModel();
|
|
11015
11078
|
this.setFormValue();
|
|
11079
|
+
this.missingPostcode = false;
|
|
11080
|
+
this.noAddressSelected = false;
|
|
11016
11081
|
}
|
|
11017
11082
|
isComplexWithHiddenFields() {
|
|
11018
11083
|
if (this.caseField.isComplex() && this.caseField.field_type.complex_fields
|
|
@@ -11044,6 +11109,7 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
|
|
|
11044
11109
|
addressSelected() {
|
|
11045
11110
|
this.caseField.value = this.addressList.value;
|
|
11046
11111
|
this.setFormValue();
|
|
11112
|
+
this.noAddressSelected = false;
|
|
11047
11113
|
}
|
|
11048
11114
|
ngOnChanges(changes) {
|
|
11049
11115
|
super.ngOnChanges(changes);
|
|
@@ -11064,7 +11130,14 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
|
|
|
11064
11130
|
this.writeComplexFieldComponent.complexGroup.setValue(this.caseField.value);
|
|
11065
11131
|
}
|
|
11066
11132
|
}
|
|
11133
|
+
updateErrorsOnContinue(value) {
|
|
11134
|
+
this.missingPostcode = value && !this.shouldShowDetailFields() && !this.addressOptions;
|
|
11135
|
+
this.noAddressSelected = value && !this.shouldShowDetailFields() && !!this.addressOptions;
|
|
11136
|
+
this.errorMessage = this.noAddressSelected ? 'Select an address' : this.errorMessage;
|
|
11137
|
+
}
|
|
11067
11138
|
}
|
|
11139
|
+
WriteAddressFieldComponent.REQUIRED_ERROR_MESSAGE = 'Enter a Postcode';
|
|
11140
|
+
WriteAddressFieldComponent.INVALID_ERROR_MESSAGE = 'Enter a valid Postcode';
|
|
11068
11141
|
WriteAddressFieldComponent.ɵfac = function WriteAddressFieldComponent_Factory(t) { return new (t || WriteAddressFieldComponent)(i0.ɵɵdirectiveInject(AddressesService), i0.ɵɵdirectiveInject(IsCompoundPipe)); };
|
|
11069
11142
|
WriteAddressFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WriteAddressFieldComponent, selectors: [["ccd-write-address-field"]], viewQuery: function WriteAddressFieldComponent_Query(rf, ctx) { if (rf & 1) {
|
|
11070
11143
|
i0.ɵɵviewQuery(_c0$U, 5);
|
|
@@ -11073,7 +11146,7 @@ WriteAddressFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
11073
11146
|
let _t;
|
|
11074
11147
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.writeComplexFieldComponent = _t.first);
|
|
11075
11148
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.focusElementDirectives = _t);
|
|
11076
|
-
} }, inputs: { formGroup: "formGroup" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [[1, "form-group", 3, "id"], [4, "ngIf"], [3, "hidden", "caseField", "renderLabel", "parent", "formGroup", "ignoreMandatory", "idPrefix"], ["writeComplexFieldComponent", ""], [1, "heading-h2"], ["class", "form-group bottom-30 postcodeLookup", 3, "id", "ngClass", 4, "ngIf"], ["class", "form-group", "id", "selectAddress", 4, "ngIf"], ["class", "manual-link bottom-30", "href", "javascript:void(0)", 3, "click", 4, "ngIf"], [1, "form-group", "bottom-30", "postcodeLookup", 3, "id", "ngClass"], [3, "for"], [1, "form-label"], ["class", "error-message", 4, "ngIf"], ["type", "text", "name", "postcode", 1, "form-control", "postcodeinput", "inline-block", 3, "ngClass", "id", "formControl"], ["type", "button", 1, "button", "button-30", 3, "click"], [1, "error-message"], ["id", "selectAddress", 1, "form-group"], ["name", "address", "focusElement", "", 1, "form-control", "ccd-dropdown", "addressList", 3, "id", "formControl", "change"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "javascript:void(0)", 1, "manual-link", "bottom-30", 3, "click"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
11149
|
+
} }, inputs: { formGroup: "formGroup" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [[1, "form-group", 3, "id"], [4, "ngIf"], [3, "hidden", "caseField", "renderLabel", "parent", "formGroup", "ignoreMandatory", "idPrefix"], ["writeComplexFieldComponent", ""], [1, "heading-h2"], ["class", "form-group bottom-30 postcodeLookup", 3, "id", "ngClass", 4, "ngIf"], ["class", "form-group", "id", "selectAddress", 3, "ngClass", 4, "ngIf"], ["class", "manual-link bottom-30", "href", "javascript:void(0)", 3, "click", 4, "ngIf"], [1, "form-group", "bottom-30", "postcodeLookup", 3, "id", "ngClass"], [3, "for"], [1, "form-label"], ["class", "error-message", 4, "ngIf"], ["type", "text", "name", "postcode", 1, "form-control", "postcodeinput", "inline-block", 3, "ngClass", "id", "formControl"], ["type", "button", 1, "button", "button-30", 3, "click"], [1, "error-message"], ["id", "selectAddress", 1, "form-group", 3, "ngClass"], ["name", "address", "focusElement", "", 1, "form-control", "ccd-dropdown", "addressList", 3, "id", "formControl", "change"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "javascript:void(0)", 1, "manual-link", "bottom-30", 3, "click"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
11077
11150
|
i0.ɵɵelementStart(0, "div", 0);
|
|
11078
11151
|
i0.ɵɵtemplate(1, WriteAddressFieldComponent_div_1_Template, 7, 6, "div", 1);
|
|
11079
11152
|
i0.ɵɵelement(2, "ccd-write-complex-type-field", 2, 3);
|
|
@@ -11087,7 +11160,7 @@ WriteAddressFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
11087
11160
|
} }, styles: [".manual-link[_ngcontent-%COMP%]{cursor:pointer;display:block;text-decoration:underline}"] });
|
|
11088
11161
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WriteAddressFieldComponent, [{
|
|
11089
11162
|
type: Component,
|
|
11090
|
-
args: [{ selector: 'ccd-write-address-field', template: "<div class=\"form-group\" [id]=\"id()\">\n <div *ngIf=\"!isComplexWithHiddenFields()\">\n <h2 class=\"heading-h2\">{{caseField | ccdFieldLabel}}</h2>\n\n <div class=\"form-group bottom-30 postcodeLookup\" [id]=\"createElementId('postcodeLookup')\" [ngClass]=\"{'form-group-error': missingPostcode}\" *ngIf=\"!isExpanded\">\n <label [for]=\"createElementId('postcodeInput')\">\n <span class=\"form-label\">{{'Enter a UK postcode' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">{{
|
|
11163
|
+
args: [{ selector: 'ccd-write-address-field', template: "<div class=\"form-group\" [id]=\"id()\">\n <div *ngIf=\"!isComplexWithHiddenFields()\">\n <h2 class=\"heading-h2\">{{caseField | ccdFieldLabel}}</h2>\n\n <div class=\"form-group bottom-30 postcodeLookup\" [id]=\"createElementId('postcodeLookup')\" [ngClass]=\"{'form-group-error': missingPostcode}\" *ngIf=\"!isExpanded\">\n <label [for]=\"createElementId('postcodeInput')\">\n <span class=\"form-label\">{{'Enter a UK postcode' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">{{errorMessage | rpxTranslate}}</span>\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\"\n [id]=\"createElementId('postcodeInput')\" name=\"postcode\" class=\"form-control postcodeinput inline-block\" [formControl]=\"postcode\">\n <button type=\"button\" class=\"button button-30\" (click)=\"findAddress()\">{{'Find address' | rpxTranslate}}</button>\n </div>\n\n <div class=\"form-group\" *ngIf=\"addressOptions\" id=\"selectAddress\" [ngClass]=\"{'form-group-error': noAddressSelected}\">\n <label [for]=\"createElementId('addressList')\">\n <span class=\"form-label\">{{'Select an address' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"noAddressSelected\">{{errorMessage | rpxTranslate}}</span>\n <select class=\"form-control ccd-dropdown addressList\" [id]=\"createElementId('addressList')\" name=\"address\" [formControl]=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description | rpxTranslate}}\n </option>\n </select>\n </div>\n\n <a class=\"manual-link bottom-30\" *ngIf=\"!shouldShowDetailFields()\" (click)=\"blankAddress()\" href=\"javascript:void(0)\">\n {{\"I can't enter a UK postcode\" | rpxTranslate}}\n </a>\n </div>\n\n <ccd-write-complex-type-field\n [hidden]=\"!shouldShowDetailFields()\"\n [caseField]=\"caseField\"\n [renderLabel]=\"false\"\n [parent]=\"parent\"\n [formGroup]=\"formGroup\"\n [ignoreMandatory]=\"true\"\n [idPrefix]=\"buildIdPrefix('detail')\"\n #writeComplexFieldComponent>\n </ccd-write-complex-type-field>\n</div>\n", styles: [".manual-link{cursor:pointer;display:block;text-decoration:underline}\n"] }]
|
|
11091
11164
|
}], function () { return [{ type: AddressesService }, { type: IsCompoundPipe }]; }, { writeComplexFieldComponent: [{
|
|
11092
11165
|
type: ViewChild,
|
|
11093
11166
|
args: ['writeComplexFieldComponent', { static: false }]
|