@hmcts/rpx-xui-common-lib 1.9.0-consume-jrd-e-links-api-new-version-v3 → 1.9.0-postcode-validation

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.
Files changed (42) hide show
  1. package/bundles/hmcts-rpx-xui-common-lib.umd.js +456 -103
  2. package/bundles/hmcts-rpx-xui-common-lib.umd.js.map +1 -1
  3. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js +1 -1
  4. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-rpx-xui-common-lib.js +27 -24
  6. package/esm2015/lib/components/cookie-banner/cookie-banner.component.js +2 -2
  7. package/esm2015/lib/components/find-service/find-service.component.js +2 -2
  8. package/esm2015/lib/components/generic-filter/generic-filter.component.js +2 -2
  9. package/esm2015/lib/components/public_api.js +3 -1
  10. package/esm2015/lib/components/selected-case-confirm/selected-case-confirm.component.js +2 -2
  11. package/esm2015/lib/components/share-case/share-case.component.js +2 -2
  12. package/esm2015/lib/components/write-address/write-address.component.js +147 -0
  13. package/esm2015/lib/components/write-address-inputs/write-address-inputs.component.js +30 -0
  14. package/esm2015/lib/exui-common-lib.module.js +6 -2
  15. package/esm2015/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.js +2 -2
  16. package/esm2015/lib/models/address-message.enum.js +10 -0
  17. package/esm2015/lib/models/address-option.model.js +21 -0
  18. package/esm2015/lib/models/address.model.js +4 -0
  19. package/esm2015/lib/models/index.js +4 -1
  20. package/esm2015/lib/models/person.model.js +1 -1
  21. package/esm2015/lib/services/address/address-parser.js +76 -0
  22. package/esm2015/lib/services/address/address-type.enum.js +7 -0
  23. package/esm2015/lib/services/address/address.service.js +50 -0
  24. package/esm2015/lib/services/public-api.js +2 -1
  25. package/fesm2015/hmcts-rpx-xui-common-lib.js +390 -58
  26. package/fesm2015/hmcts-rpx-xui-common-lib.js.map +1 -1
  27. package/hmcts-rpx-xui-common-lib.d.ts +26 -23
  28. package/hmcts-rpx-xui-common-lib.metadata.json +1 -1
  29. package/lib/components/public_api.d.ts +2 -0
  30. package/lib/components/write-address/write-address.component.d.ts +34 -0
  31. package/lib/components/write-address-inputs/write-address-inputs.component.d.ts +13 -0
  32. package/lib/exui-common-lib.module.d.ts +2 -1
  33. package/lib/models/address-message.enum.d.ts +8 -0
  34. package/lib/models/address-option.model.d.ts +9 -0
  35. package/lib/models/address.model.d.ts +9 -0
  36. package/lib/models/index.d.ts +3 -0
  37. package/lib/models/person.model.d.ts +8 -7
  38. package/lib/services/address/address-parser.d.ts +17 -0
  39. package/lib/services/address/address-type.enum.d.ts +5 -0
  40. package/lib/services/address/address.service.d.ts +12 -0
  41. package/lib/services/public-api.d.ts +1 -0
  42. package/package.json +1 -1
@@ -8,14 +8,14 @@ import * as i1 from '@angular/router';
8
8
  import { Router, NavigationEnd, RouterModule } from '@angular/router';
9
9
  import { map, filter, distinctUntilChanged, delay, skipWhile, shareReplay, catchError, take, tap, switchMap, debounceTime, mergeMap } from 'rxjs/operators';
10
10
  import * as LDClient from 'launchdarkly-js-client-sdk';
11
+ import * as i1$2 from '@angular/common/http';
12
+ import { HttpClient, HttpParams } from '@angular/common/http';
11
13
  import * as i2 from '@angular/platform-browser';
12
14
  import { Title } from '@angular/platform-browser';
13
15
  import * as i1$1 from '@ng-idle/core';
14
16
  import { DocumentInterruptSource, Idle, WindowInterruptSource } from '@ng-idle/core';
15
17
  import * as i2$1 from '@ng-idle/keepalive';
16
18
  import { Keepalive } from '@ng-idle/keepalive';
17
- import * as i1$2 from '@angular/common/http';
18
- import { HttpParams, HttpClient } from '@angular/common/http';
19
19
  import { of as of$1 } from 'rxjs/internal/observable/of';
20
20
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
21
21
  import { MatInputModule } from '@angular/material/input';
@@ -470,6 +470,215 @@ LaunchDarklyService.decorators = [
470
470
  },] }
471
471
  ];
472
472
 
473
+ var AddressMessageEnum;
474
+ (function (AddressMessageEnum) {
475
+ AddressMessageEnum["NO_OPTION_SELECTED"] = "Please select an answer";
476
+ AddressMessageEnum["NO_STREET_SELECTED"] = "Enter building and street";
477
+ AddressMessageEnum["NO_CITY_SELECTED"] = "Enter town or city";
478
+ AddressMessageEnum["NO_COUNTRY_SELECTED"] = "Enter country";
479
+ AddressMessageEnum["NO_POSTCODE_SELECTED"] = "Enter postcode";
480
+ AddressMessageEnum["INVALID_POSTCODE"] = "Enter valid postcode";
481
+ })(AddressMessageEnum || (AddressMessageEnum = {}));
482
+
483
+ class AddressOption {
484
+ constructor(addressModel, description) {
485
+ if (description === null) {
486
+ this.value = addressModel;
487
+ this.description = this.getDescription();
488
+ }
489
+ else {
490
+ this.description = description;
491
+ }
492
+ }
493
+ getDescription() {
494
+ return this.removeInitialCommaIfPresent(`${this.value.addressLine1 === undefined ? '' : this.value.addressLine1}${this.prefixWithCommaIfPresent(this.value.addressLine2)}${this.prefixWithCommaIfPresent(this.value.addressLine3)}, ${this.value.postTown}`);
495
+ }
496
+ prefixWithCommaIfPresent(value) {
497
+ return value ? `, ${value}` : value;
498
+ }
499
+ removeInitialCommaIfPresent(value) {
500
+ return value.replace(new RegExp('^,', 'gi'), '');
501
+ }
502
+ }
503
+
504
+ // tslint:disable:variable-name
505
+ class AddressModel {
506
+ }
507
+
508
+ var SharedCaseErrorMessages;
509
+ (function (SharedCaseErrorMessages) {
510
+ SharedCaseErrorMessages["OneCaseMustBeSelected"] = "At least one case must be selected";
511
+ SharedCaseErrorMessages["NoChangesRequested"] = "You have not requested any changes to case sharing";
512
+ SharedCaseErrorMessages["OnePersonMustBeAssigned"] = "At least one person must be assigned to each case";
513
+ })(SharedCaseErrorMessages || (SharedCaseErrorMessages = {}));
514
+
515
+ var BadgeColour;
516
+ (function (BadgeColour) {
517
+ BadgeColour["BADGE_RED"] = "hmcts-badge--red";
518
+ BadgeColour["BADGE_BLUE"] = "hmcts-badge--blue";
519
+ BadgeColour["BADGE_GREEN"] = "hmcts-badge--green";
520
+ })(BadgeColour || (BadgeColour = {}));
521
+
522
+ class AnonymousFeatureUser {
523
+ }
524
+ class LoggedInFeatureUser {
525
+ }
526
+
527
+ class RadioFilterFieldConfig {
528
+ }
529
+
530
+ var BookingCheckType;
531
+ (function (BookingCheckType) {
532
+ BookingCheckType["NO_CHECK"] = "NO_CHECK";
533
+ BookingCheckType["BOOKINGS_AND_BASE"] = "BOOKINGS_AND_BASE";
534
+ BookingCheckType["POSSIBLE_BOOKINGS"] = "POSSIBLE_BOOKINGS";
535
+ })(BookingCheckType || (BookingCheckType = {}));
536
+
537
+ var PersonRole;
538
+ (function (PersonRole) {
539
+ PersonRole["JUDICIAL"] = "Judicial";
540
+ PersonRole["CASEWORKER"] = "Legal Ops";
541
+ PersonRole["ADMIN"] = "Admin";
542
+ PersonRole["CTSC"] = "CTSC";
543
+ PersonRole["ALL"] = "All";
544
+ })(PersonRole || (PersonRole = {}));
545
+ // Note: RoleCategory could replace PersonRole possibly
546
+ // However a lot of webapp logic is based on current PersonRole understanding
547
+ var RoleCategory;
548
+ (function (RoleCategory) {
549
+ RoleCategory["JUDICIAL"] = "JUDICIAL";
550
+ RoleCategory["CASEWORKER"] = "LEGAL_OPERATIONS";
551
+ RoleCategory["ADMIN"] = "ADMIN";
552
+ RoleCategory["CTSC"] = "CTSC";
553
+ RoleCategory["ALL"] = "ALL";
554
+ })(RoleCategory || (RoleCategory = {}));
555
+
556
+ var AddressType;
557
+ (function (AddressType) {
558
+ AddressType["DPA"] = "DPA";
559
+ AddressType["UK"] = "United Kingdom";
560
+ AddressType["RD06"] = "RD06";
561
+ })(AddressType || (AddressType = {}));
562
+
563
+ /**
564
+ * Moving all this logic here into Address Parser class, so that it
565
+ * will be easier for us when we move this parsing logic to into
566
+ * `Shim` java service.
567
+ */
568
+ class AddressParser {
569
+ parse(address) {
570
+ const classification = `${address.CLASSIFICATION_CODE}`;
571
+ const addressModel = new AddressModel();
572
+ addressModel.addressLine1 = this.parseAddressLine1(classification, address);
573
+ addressModel.addressLine2 = this.parseAddressLine2(classification, address);
574
+ addressModel.addressLine3 = this.parseAddressLine3(classification, address);
575
+ addressModel.postCode = address.POSTCODE;
576
+ addressModel.postTown = address.POST_TOWN;
577
+ addressModel.country = AddressType.UK;
578
+ return addressModel;
579
+ }
580
+ parseAddressLine1(classification, address) {
581
+ let addressLine;
582
+ if (classification === AddressType.RD06) {
583
+ addressLine =
584
+ `${address.SUB_BUILDING_NAME} ${address.ORGANISATION_NAME} ${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;
585
+ }
586
+ else {
587
+ addressLine =
588
+ `${address.ORGANISATION_NAME}${this.prefixWithCommaIfPresent(address.BUILDING_NAME)}` +
589
+ `${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;
590
+ }
591
+ return this.removeNonAddressValues(addressLine);
592
+ }
593
+ parseAddressLine2(classification, address) {
594
+ let addressLine;
595
+ if (classification === AddressType.RD06) {
596
+ addressLine = `${address.BUILDING_NAME} `;
597
+ }
598
+ else {
599
+ addressLine =
600
+ `${address.SUB_BUILDING_NAME} ${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;
601
+ }
602
+ return this.removeNonAddressValues(addressLine);
603
+ }
604
+ parseAddressLine3(classification, address) {
605
+ let addressLine;
606
+ if (classification === AddressType.RD06) {
607
+ addressLine =
608
+ `${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;
609
+ }
610
+ else {
611
+ addressLine =
612
+ `${address.DEPENDENT_LOCALITY} ${address.DOUBLE_DEPENDENT_LOCALITY} ${address.DEPENDENT_THOROUGHFARE_NAME}`;
613
+ }
614
+ return this.removeNonAddressValues(addressLine);
615
+ }
616
+ removeNonAddressValues(line) {
617
+ line = line.replace(' null', ' ').replace('null ', ' ');
618
+ line = this.removeUndefinedString(line);
619
+ line = this.removeInitialComma(line);
620
+ line = this.removeEmptySpaces(line);
621
+ return line;
622
+ }
623
+ removeUndefinedString(value) {
624
+ return value.replace(new RegExp('undefined', 'gi'), '');
625
+ }
626
+ removeEmptySpaces(value) {
627
+ return value.replace(new RegExp(' +', 'gi'), ' ').trim();
628
+ }
629
+ removeInitialComma(value) {
630
+ return value.replace(new RegExp('^,', 'gi'), '');
631
+ }
632
+ prefixWithCommaIfPresent(value) {
633
+ return value ? `, ${value}` : value;
634
+ }
635
+ }
636
+
637
+ class AddressService {
638
+ constructor(http) {
639
+ this.http = http;
640
+ }
641
+ getAddressesForPostcode(postcode) {
642
+ return this.http
643
+ .get('/external/addresses?postcode=${postcode}'.replace('${postcode}', postcode), undefined)
644
+ .pipe(map((res) => res.results))
645
+ .pipe(map(output => output.map((addresses) => this.format(new AddressParser().parse(addresses[AddressType.DPA])))));
646
+ }
647
+ format(addressModel) {
648
+ return this.formatAddressLines(this.shiftAddressLinesUp(addressModel));
649
+ }
650
+ formatAddressLines(addressModel) {
651
+ ['addressLine1', 'addressLine2', 'addressLine3', 'postTown'].forEach((value) => {
652
+ addressModel[value] = this.toCapitalCase(addressModel[value]);
653
+ });
654
+ return addressModel;
655
+ }
656
+ shiftAddressLinesUp(addressModel) {
657
+ if (addressModel.addressLine2 === '') {
658
+ addressModel.addressLine2 = addressModel.addressLine3;
659
+ addressModel.addressLine3 = '';
660
+ }
661
+ if (addressModel.addressLine1 === '') {
662
+ addressModel.addressLine1 = addressModel.addressLine2;
663
+ addressModel.addressLine2 = '';
664
+ }
665
+ return addressModel;
666
+ }
667
+ toCapitalCase(sentence) {
668
+ sentence = sentence.toLowerCase();
669
+ sentence.split(' ').forEach((value) => {
670
+ sentence = sentence.replace(value, value.charAt(0).toUpperCase() + value.substr(1));
671
+ });
672
+ return sentence;
673
+ }
674
+ }
675
+ AddressService.decorators = [
676
+ { type: Injectable }
677
+ ];
678
+ AddressService.ctorParameters = () => [
679
+ { type: HttpClient }
680
+ ];
681
+
473
682
  const windowToken = new InjectionToken('Window');
474
683
  function windowProvider() { return window; }
475
684
 
@@ -1643,7 +1852,7 @@ class GenericFilterComponent {
1643
1852
  GenericFilterComponent.decorators = [
1644
1853
  { type: Component, args: [{
1645
1854
  selector: 'xuilib-generic-filter',
1646
- template: "<form [formGroup]=\"form\" (ngSubmit)=\"applyFilter(form)\">\n <div class=\"contain-classes\" *ngFor=\"let field of config.fields\">\n <hr *ngIf=\"field.lineBreakBefore\" class=\"govuk-section-break govuk-section-break--visible elevated-break\">\n <ng-container [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'group-title'\">\n <div [class]=\"field.titleClasses ? field.titleClasses: 'govuk-label govuk-label--m govuk-!-margin-bottom-4'\">\n {{ field.name | capitalize }}\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"govuk-form-group xui-generic-filter\"\n [hidden]=\"hidden(field, form)\"\n [id]=\"field.name\"\n [ngClass]=\"{'form-group-error': submitted && (form.get(field.name).errors?.required || form.get(field.name).errors?.minlength || form.get(field.name).errors?.maxLength)}\">\n <div *ngIf=\"field.title\" class=\"xui-generic-filter__field-title\">\n <h3 [class]=\"field.titleClasses ? field.titleClasses : 'govuk-heading-s'\" style=\"margin-bottom: 0!important\">\n {{field.title | capitalize}}\n </h3>\n <div *ngIf=\"field?.titleHint\" class=\"govuk-!-margin-left-2\">\n {{ field.titleHint }}\n </div>\n </div>\n <p class=\"govuk-body\" *ngIf=\"field.subTitle\">{{field.subTitle}}</p>\n <div *ngIf=\"field.hintText\"\n [id]=\"field.hintText + '-hint'\" class=\"govuk-hint\">\n {{ field.hintText | rpxTranslate }}\n </div>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMinSelectedError && submitted && (form.get(field.name).errors?.required || form.get(field.name).errors?.minlength)\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate}}</span> {{field.minSelectedError | rpxTranslate }}\n </span>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMaxSelectedError && submitted && form.get(field.name).errors?.maxLength\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate}}</span> {{field.maxSelectedError | rpxTranslate }}\n </span>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\"\n *ngIf=\"field.emailError && submitted && form.get(field.name).errors?.email\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate }}</span> {{field.emailError | rpxTranslate }}\n </span>\n <div class=\"govuk-body\" [class.govuk-body--maxWidth480px]=\"field.maxWidth480px\" [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'select'\">\n <select class=\"govuk-select\" (change)=\"fieldChanged(field, form)\" [attr.disabled]=\"disabled(field, form)\" [name]=\"'select_' + field.name\" [id]=\"'select_' + field.name\" [formControlName]=\"field.name\">\n <option disabled selected hidden value=\"\">{{field.disabledText}}</option>\n <option *ngIf=\"field.defaultOption\" [attr.selected]=\"true\" [value]=\"field.defaultOption.key\">{{field.defaultOption.label}}</option>\n <option class=\"govuk-radios__item\" *ngFor=\"let item of field.options\" [value]=\"item.key\">{{item.label}}</option>\n </select>\n </ng-container>\n <ng-container *ngSwitchCase=\"'group-select'\">\n <select class=\"govuk-select\" (change)=\"fieldChanged(field, form)\" [attr.disabled]=\"disabled(field, form)\" [name]=\"'select_' + field.name\" [id]=\"'select_' + field.name\" [formControlName]=\"field.name\">\n <option disabled selected hidden value=\"\">{{field.disabledText}}</option>\n <option *ngIf=\"field.defaultOption\" selected [value]=\"field.defaultOption.key\">{{field.defaultOption.label}}</option>\n <optgroup *ngFor = 'let grp of filteredSkillsByServices' label=\"{{grp.group | titlecase}}\">\n <option *ngFor = 'let item of grp.options' [value]=\"item.key\">{{item.label}}</option>\n </optgroup>\n </select>\n </ng-container>\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div class=\"govuk-checkboxes govuk-checkboxes--small\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of field.options; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'nested-checkbox'\">\n <div class=\"govuk-checkboxes govuk-checkboxes--small\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of filteredSkillsByServicesCheckbox; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'nested-checkbox'\">\n <div class=\"govuk-checkboxes govuk-checkboxes--small\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of filteredSkillsByServicesCheckbox; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label | rpxTranslate}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'checkbox-large'\">\n <div class=\"govuk-checkboxes\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of field.options; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label | rpxTranslate}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'radio'\">\n <div class=\"govuk-radios\">\n <div *ngFor=\"let item of field.options\" class=\"govuk-radios__item\">\n <input type=\"radio\"\n [formControlName]=\"field.name\"\n [id]=\"'radio_' + item.key\"\n [attr.disabled]=\"disabled(field, form)\"\n [checked]=\"item.key === form.get(field.name).value\"\n class=\"govuk-radios__input\"\n [value]=\"item.key\"\n (change)=\"fieldChanged(field, form)\"\n />\n <label [for]=\"'radio_' + item.key\" class=\"govuk-label govuk-radios__label\">{{item.label | rpxTranslate}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-person'\">\n <xuilib-find-person subTitle=\"\" (personSelected)=\"updatePersonControls($event, field)\"\n (personFieldChanged)=\"inputChanged(field)\"\n [submitted]=\"submitted\"\n [disabled]=\"disabled(field, form)\"\n [domain]=\"form.get(field.domainField)?.value\"\n [findPersonGroup]=\"form\"\n [selectedPerson]=\"form.get(field.name)?.value?.email\"\n [userIncluded]=\"false\"\n [placeholderContent]=\"field.placeholderContent ? field.placeholderContent : ''\"\n [services]=\"form.get(field.servicesField)?.value\"\n ></xuilib-find-person>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-location'\">\n <xuilib-find-location (locationFieldChanged)=\"inputChanged(field)\"\n [form]=\"form\"\n [fields]=\"config.fields\"\n [locationTitle]=\"field.locationTitle\"\n [enableAddLocationButton]=\"field.enableAddButton\"\n [disabled]=\"disabled(field, form)\"\n [disableInputField]=\"field.disable\"\n [submitted]=\"submitted\"\n [field]=\"field\"\n [services]=\"form.get(field.findLocationField)?.value\"\n [formSubmissionEvent$]=\"formSubmissionEvent$\"\n ></xuilib-find-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-task-name'\">\n <xuilib-find-task-name subTitle=\"\" (taskNameSelected)=\"updateTaskNameControls($event, field)\"\n (taskNameFieldChanged)=\"inputChanged(field)\"\n [submitted]=\"submitted\"\n [disabled]=\"disabled(field, form)\"\n [domain]=\"form.get(field.domainField)?.value\"\n [findTaskNameGroup]=\"form\"\n [selectedTaskName]=\"form.get(field.name)?.value?.task_type_name\"\n [placeholderContent]=\"field.placeholderContent ? field.placeholderContent : ''\"\n [services]=\"form.get(field.servicesField)?.value\"\n ></xuilib-find-task-name>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-service'\">\n <xuilib-find-service (serviceFieldChanged)=\"inputServiceChanged(field)\"\n [field]=\"field\"\n [form]=\"form\"\n [formSubmissionEvent$]=\"formSubmissionEvent$\"\n [disabled]=\"disabled(field, form)\">\n </xuilib-find-service>\n </ng-container>\n <ng-container *ngSwitchCase=\"'text-input'\">\n <input class=\"govuk-input\" type=\"text\"\n [formControlName]=\"field.name\"\n [id]=\"field.name\"\n [attr.disabled]=\"disabled(field, form)\"\n (change)=\"fieldChanged(field, form)\"\n [attr.maxlength]=\"field.maxlength ? field.maxlength : null\"\n [readonly]=\"field.readonly\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"'email-input'\">\n <input class=\"govuk-input\" type=\"email\"\n [formControlName]=\"field.name\"\n [id]=\"field.name\"\n [attr.disabled]=\"disabled(field, form)\"\n (change)=\"fieldChanged(field, form)\"\n [readonly]=\"field.readonly\"\n />\n </ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n </div>\n <hr class=\"govuk-section-break govuk-section-break--m govuk-section-break--visible\"/>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <button\n class=\"govuk-button govuk-!-margin-right-1 govuk-!-margin-bottom-0\"\n type=\"submit\"\n id=\"applyFilter\"\n [disabled]=\"config.enableDisabledButton && form.invalid\"\n >{{(config.applyButtonText || 'Apply') | rpxTranslate}}</button>\n <button *ngIf=\"config.showCancelFilterButton\"\n class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\"\n type=\"button\"\n id=\"cancelFilter\"\n (click)=\"cancelFilter()\">{{ (config.cancelButtonText || 'Cancel') | rpxTranslate}}</button>\n </div>\n </div>\n</form>\n",
1855
+ template: "<form [formGroup]=\"form\" (ngSubmit)=\"applyFilter(form)\">\n <div class=\"contain-classes\" *ngFor=\"let field of config.fields\">\n <hr *ngIf=\"field.lineBreakBefore\" class=\"govuk-section-break govuk-section-break--visible elevated-break\">\n <ng-container [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'group-title'\">\n <div [class]=\"field.titleClasses ? field.titleClasses: 'govuk-label govuk-label--m govuk-!-margin-bottom-4'\">\n {{ field.name | capitalize }}\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"govuk-form-group xui-generic-filter\"\n [hidden]=\"hidden(field, form)\"\n [id]=\"field.name\"\n [ngClass]=\"{'form-group-error': submitted && (form.get(field.name).errors?.required || form.get(field.name).errors?.minlength || form.get(field.name).errors?.maxLength)}\">\n <div *ngIf=\"field.title\" class=\"xui-generic-filter__field-title\">\n <h3 [class]=\"field.titleClasses ? field.titleClasses : 'govuk-heading-s'\" style=\"margin-bottom: 0!important\">\n {{field.title | capitalize}}\n </h3>\n <div *ngIf=\"field?.titleHint\" class=\"govuk-!-margin-left-2\">\n {{ field.titleHint }}\n </div>\n </div>\n <p class=\"govuk-body\" *ngIf=\"field.subTitle\">{{field.subTitle}}</p>\n <div *ngIf=\"field.hintText\"\n [id]=\"field.hintText + '-hint'\" class=\"govuk-hint\">\n {{ field.hintText | rpxTranslate }}\n </div>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMinSelectedError && submitted && (form.get(field.name).errors?.required || form.get(field.name).errors?.minlength)\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate}}</span> {{field.minSelectedError | rpxTranslate }}\n </span>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMaxSelectedError && submitted && form.get(field.name).errors?.maxLength\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate}}</span> {{field.maxSelectedError | rpxTranslate }}\n </span>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\"\n *ngIf=\"field.emailError && submitted && form.get(field.name).errors?.email\">\n <span class=\"govuk-visually-hidden\">{{ 'Error:' | rpxTranslate }}</span> {{field.emailError | rpxTranslate }}\n </span>\n <div class=\"govuk-body\" [class.govuk-body--maxWidth480px]=\"field.maxWidth480px\" [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'select'\">\n <select class=\"govuk-select\" (change)=\"fieldChanged(field, form)\" [attr.disabled]=\"disabled(field, form)\" [name]=\"'select_' + field.name\" [id]=\"'select_' + field.name\" [formControlName]=\"field.name\">\n <option disabled selected hidden value=\"\">{{field.disabledText}}</option>\n <option *ngIf=\"field.defaultOption\" [attr.selected]=\"true\" [value]=\"field.defaultOption.key\">{{field.defaultOption.label}}</option>\n <option class=\"govuk-radios__item\" *ngFor=\"let item of field.options\" [value]=\"item.key\">{{item.label}}</option>\n </select>\n </ng-container>\n <ng-container *ngSwitchCase=\"'group-select'\">\n <select class=\"govuk-select\" (change)=\"fieldChanged(field, form)\" [attr.disabled]=\"disabled(field, form)\" [name]=\"'select_' + field.name\" [id]=\"'select_' + field.name\" [formControlName]=\"field.name\">\n <option disabled selected hidden value=\"\">{{field.disabledText}}</option>\n <option *ngIf=\"field.defaultOption\" selected [value]=\"field.defaultOption.key\">{{field.defaultOption.label}}</option>\n <optgroup *ngFor = 'let grp of filteredSkillsByServices' label=\"{{grp.group | titlecase}}\">\n <option *ngFor = 'let item of grp.options' [value]=\"item.key\">{{item.label}}</option>\n </optgroup>\n </select>\n </ng-container>\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div class=\"govuk-checkboxes govuk-checkboxes--small\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of field.options; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'nested-checkbox'\">\n <div class=\"govuk-checkboxes govuk-checkboxes--small\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of filteredSkillsByServicesCheckbox; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label | rpxTranslate}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'checkbox-large'\">\n <div class=\"govuk-checkboxes\" [formGroupName]=\"field.name\" [attr.field]=\"field.name\" [id]=\"'checkbox_' + field.name\">\n <div *ngFor=\"let item of field.options; let i = index\" class=\"govuk-checkboxes__item\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [attr.disabled]=\"disabled(field, form)\"\n [formControlName]=\"i\"\n (change)=\"toggleSelectAll($event, form, item, field)\"\n [value]=\"item.key\" [id]=\"'checkbox_' + field.name + item.key\"\n [name]=\"'checkbox_' + field.name + item.key\"\n />\n <label\n [for]=\"'checkbox_' + field.name + item.key\"\n class=\"govuk-label govuk-checkboxes__label\"\n [ngClass]=\"{'govuk-!-font-weight-bold': item.selectAll}\"\n >{{item.label | rpxTranslate}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'radio'\">\n <div class=\"govuk-radios\">\n <div *ngFor=\"let item of field.options\" class=\"govuk-radios__item\">\n <input type=\"radio\"\n [formControlName]=\"field.name\"\n [id]=\"'radio_' + item.key\"\n [attr.disabled]=\"disabled(field, form)\"\n [checked]=\"item.key === form.get(field.name).value\"\n class=\"govuk-radios__input\"\n [value]=\"item.key\"\n (change)=\"fieldChanged(field, form)\"\n />\n <label [for]=\"'radio_' + item.key\" class=\"govuk-label govuk-radios__label\">{{item.label | rpxTranslate}}</label>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-person'\">\n <xuilib-find-person subTitle=\"\" (personSelected)=\"updatePersonControls($event, field)\"\n (personFieldChanged)=\"inputChanged(field)\"\n [submitted]=\"submitted\"\n [disabled]=\"disabled(field, form)\"\n [domain]=\"form.get(field.domainField)?.value\"\n [findPersonGroup]=\"form\"\n [selectedPerson]=\"form.get(field.name)?.value?.email\"\n [userIncluded]=\"false\"\n [placeholderContent]=\"field.placeholderContent ? field.placeholderContent : ''\"\n [services]=\"form.get(field.servicesField)?.value\"\n ></xuilib-find-person>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-location'\">\n <xuilib-find-location (locationFieldChanged)=\"inputChanged(field)\"\n [form]=\"form\"\n [fields]=\"config.fields\"\n [locationTitle]=\"field.locationTitle\"\n [enableAddLocationButton]=\"field.enableAddButton\"\n [disabled]=\"disabled(field, form)\"\n [disableInputField]=\"field.disable\"\n [submitted]=\"submitted\"\n [field]=\"field\"\n [services]=\"form.get(field.findLocationField)?.value\"\n [formSubmissionEvent$]=\"formSubmissionEvent$\"\n ></xuilib-find-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-task-name'\">\n <xuilib-find-task-name subTitle=\"\" (taskNameSelected)=\"updateTaskNameControls($event, field)\"\n (taskNameFieldChanged)=\"inputChanged(field)\"\n [submitted]=\"submitted\"\n [disabled]=\"disabled(field, form)\"\n [domain]=\"form.get(field.domainField)?.value\"\n [findTaskNameGroup]=\"form\"\n [selectedTaskName]=\"form.get(field.name)?.value?.task_type_name\"\n [placeholderContent]=\"field.placeholderContent ? field.placeholderContent : ''\"\n [services]=\"form.get(field.servicesField)?.value\"\n ></xuilib-find-task-name>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-service'\">\n <xuilib-find-service (serviceFieldChanged)=\"inputServiceChanged(field)\"\n [field]=\"field\"\n [form]=\"form\"\n [formSubmissionEvent$]=\"formSubmissionEvent$\"\n [disabled]=\"disabled(field, form)\">\n </xuilib-find-service>\n </ng-container>\n <ng-container *ngSwitchCase=\"'text-input'\">\n <input class=\"govuk-input\" type=\"text\"\n [formControlName]=\"field.name\"\n [id]=\"field.name\"\n [attr.disabled]=\"disabled(field, form)\"\n (change)=\"fieldChanged(field, form)\"\n [attr.maxlength]=\"field.maxlength ? field.maxlength : null\"\n [readonly]=\"field.readonly\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"'email-input'\">\n <input class=\"govuk-input\" type=\"email\"\n [formControlName]=\"field.name\"\n [id]=\"field.name\"\n [attr.disabled]=\"disabled(field, form)\"\n (change)=\"fieldChanged(field, form)\"\n [readonly]=\"field.readonly\"\n />\n </ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n </div>\n <hr class=\"govuk-section-break govuk-section-break--m govuk-section-break--visible\"/>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <button\n class=\"govuk-button govuk-!-margin-right-1 govuk-!-margin-bottom-0\"\n type=\"submit\"\n id=\"applyFilter\"\n [disabled]=\"config.enableDisabledButton && form.invalid\"\n >{{(config.applyButtonText || 'Apply') | rpxTranslate}}</button>\n <button *ngIf=\"config.showCancelFilterButton\"\n class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\"\n type=\"button\"\n id=\"cancelFilter\"\n (click)=\"cancelFilter()\">{{ (config.cancelButtonText || 'Cancel') | rpxTranslate}}</button>\n </div>\n </div>\n</form>\n",
1647
1856
  changeDetection: ChangeDetectionStrategy.OnPush,
1648
1857
  encapsulation: ViewEncapsulation.None,
1649
1858
  styles: [".contain-classes .elevated-break{margin-bottom:20px}@media (min-width:40.0625em){.contain-classes .elevated-break{margin-bottom:30px}}.contain-classes .govuk-body--maxWidth480px{max-width:480px}.contain-classes .xui-generic-filter .select-all{margin-bottom:10px}.contain-classes .xui-generic-filter .govuk-checkboxes{display:flex;flex-direction:column;flex-wrap:wrap}.contain-classes .xui-generic-filter .govuk-checkboxes>div{flex-grow:1;flex-shrink:0}.contain-classes .xui-generic-filter__field-title{display:flex;align-items:center;margin-bottom:10px}.contain-classes .govuk-select{width:100%}"]
@@ -1930,7 +2139,7 @@ class SelectedCaseConfirmComponent {
1930
2139
  SelectedCaseConfirmComponent.decorators = [
1931
2140
  { type: Component, args: [{
1932
2141
  selector: 'xuilib-selected-case-confirm',
1933
- template: "<div id=\"user-access-block-{{ sharedCase.caseId }}\" *ngIf=\"showUserAccessBlock()\">\n <h2 class=\"govuk-heading-m case-share-confirm__title\">{{ sharedCase.caseTitle }}</h2>\n <div class=\"case-share-confirm__caption-area\">\n <div class=\"govuk-caption-m case-share-confirm__caption\">\n {{ sharedCase.caseId }}\n </div>\n <a [routerLink]=\"changeLink\" class=\"case-share-confirm__change-link govuk-link govuk-!-font-size-19\">\n {{'Change' | rpxTranslate}}\n <span class=\"govuk-visually-hidden\">{{'selected case' | rpxTranslate}}</span>\n </a>\n </div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">{{'Name' | rpxTranslate}}</th>\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">{{'Email address' | rpxTranslate}}</th>\n <th class=\"govuk-table__header govuk-table-column-actions\" scope=\"col\">{{'Actions' | rpxTranslate}}</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingShares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge\">{{'To be added' | rpxTranslate}}</span>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingUnshares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge hmcts-badge--red\">\n {{'To be removed' | rpxTranslate}}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n",
2142
+ template: "<div id=\"user-access-block-{{ sharedCase.caseId }}\" *ngIf=\"showUserAccessBlock()\">\n <h2 class=\"govuk-heading-m case-share-confirm__title\">{{ sharedCase.caseTitle }}</h2>\n <div class=\"case-share-confirm__caption-area\">\n <div class=\"govuk-caption-m case-share-confirm__caption\">\n {{ sharedCase.caseId }}\n </div>\n <a [routerLink]=\"changeLink\" class=\"case-share-confirm__change-link govuk-link govuk-!-font-size-19\">{{'Change' | rpxTranslate}}</a>\n </div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">{{'Name' | rpxTranslate}}</th>\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">{{'Email address' | rpxTranslate}}</th>\n <th class=\"govuk-table__header govuk-table-column-actions\" scope=\"col\">{{'Actions' | rpxTranslate}}</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingShares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge\">{{'To be added' | rpxTranslate}}</span>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingUnshares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge hmcts-badge--red\">\n {{'To be removed' | rpxTranslate}}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n",
1934
2143
  styles: [".case-share-confirm__title{margin-bottom:0}.case-share-confirm__caption-area{border-bottom:1px solid #b1b4b6;padding-bottom:10px;display:inline-block;width:100%;clear:both}.case-share-confirm__caption{float:left}.case-share-confirm__change-link{float:right}.govuk-table-column-header{width:45%}.govuk-table-column-actions{width:10%}"]
1935
2144
  },] }
1936
2145
  ];
@@ -2241,13 +2450,6 @@ ShareCaseConfirmComponent.propDecorators = {
2241
2450
  completeLink: [{ type: Input }]
2242
2451
  };
2243
2452
 
2244
- var SharedCaseErrorMessages;
2245
- (function (SharedCaseErrorMessages) {
2246
- SharedCaseErrorMessages["OneCaseMustBeSelected"] = "At least one case must be selected";
2247
- SharedCaseErrorMessages["NoChangesRequested"] = "You have not requested any changes to case sharing";
2248
- SharedCaseErrorMessages["OnePersonMustBeAssigned"] = "At least one person must be assigned to each case";
2249
- })(SharedCaseErrorMessages || (SharedCaseErrorMessages = {}));
2250
-
2251
2453
  class UserSelectComponent {
2252
2454
  constructor() {
2253
2455
  this.selected = new EventEmitter();
@@ -2478,7 +2680,7 @@ class ShareCaseComponent {
2478
2680
  ShareCaseComponent.decorators = [
2479
2681
  { type: Component, args: [{
2480
2682
  selector: 'xuilib-share-case',
2481
- template: "<xuilib-hmcts-error-summary\n [errorMessages]=\"validationErrors\"\n [header]=\"'There is a problem'\"\n></xuilib-hmcts-error-summary>\n<h1 *ngIf=\"title\" class=\"govuk-heading-xl govuk-!-margin-top-2\">\n <span *ngIf=\"fnTitle\" class=\"govuk-caption-xl\">{{fnTitle | rpxTranslate}}</span>\n {{title | rpxTranslate}}\n</h1>\n<div id=\"add-user\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"add-user-input\">{{addUserLabel | rpxTranslate}}</label>\n <span id=\"add-user-hint\" class=\"govuk-hint\">\n {{'Search by name or email address. You can share access with as many people as you need.' | rpxTranslate}}\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <xuilib-user-select\n id=\"add-user-input\"\n aria-describedby=\"add-user-hint\"\n [users]=\"users\"\n (selected)=\"onSelectedUser($event)\">\n </xuilib-user-select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-add-user\" (click)=\"addUser()\"\n class=\"govuk-button govuk-button--secondary\" [disabled]=\"isDisabledAdd()\"\n title=\"{{'Add user to selected cases' | rpxTranslate}}\">\n {{'Add' | rpxTranslate}}\n <span class=\"govuk-visually-hidden\">{{'user' | rpxTranslate}}</span>\n </button>\n </div>\n </div>\n <details id=\"add-user-help\" class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span id=\"content-why-can-not-find-email\" class=\"govuk-details__summary-text\">\n {{\"Can't find an email address?\" | rpxTranslate}}\n </span>\n </summary>\n <div id=\"content-reason-can-not-find-email\" class=\"govuk-details__text\">\n {{\"If you can't find your colleague's email address, they will need to complete their registration. Contact your administrator for help.\" | rpxTranslate}}\n </div>\n </details>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"showRemoveUsers\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"remove-user-input\">\n {{'Remove a person from all cases' | rpxTranslate}}\n </label>\n <span id=\"remove-user-hint\" class=\"govuk-hint\">\n {{'Select a person to remove them from all selected cases.' | rpxTranslate}}\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <select [(ngModel)]=\"selectedUserToRemove\" class=\"govuk-select\" id=\"remove-user-input\" aria-describedby=\"remove-user-hint\">\n <option [ngValue]=\"null\" selected>Select a person</option>\n <option *ngFor=\"let user of assignedUsers\" [ngValue]=\"user\">{{user.firstName}} {{user.lastName}} - {{user.email}}</option>\n </select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-remove-user\" (click)=\"removeUser()\" class=\"govuk-button govuk-button--secondary\" title=\"{{'Remove user from selected cases' | rpxTranslate}}\">\n {{'Remove' | rpxTranslate}}\n <span class=\"govuk-visually-hidden\"> {{'user' | rpxTranslate}}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div id=\"cases\" [ngClass]=\"{'govuk-form-group--error': shareCaseErrorMessage.messages && shareCaseErrorMessage.messages.length > 0}\">\n <h3 id=\"title-selected-cases\" class=\"govuk-heading-m\">\n {{'Selected cases' | rpxTranslate}}\n </h3>\n <xuilib-gov-uk-error-message [config]=\"selectedCasesErrorMessageConfig\" [errorMessage]=\"shareCaseErrorMessage\"></xuilib-gov-uk-error-message>\n <div *ngIf=\"shareCases && shareCases.length > 0\" class=\"govuk-accordion\" data-module=\"govuk-accordion\" id=\"accordion-with-summary-sections\">\n <xuilib-selected-case-list\n [shareCases$]=\"shareCases$\"\n [removeUserFromCaseToggleOn]=\"removeUserFromCaseToggleOn\"\n (unselect)=\"onUnselect($event)\"\n (synchronizeStore)=\"onSynchronizeStore($event)\"\n >\n </xuilib-selected-case-list>\n </div>\n\n <div id=\"noCaseDisplay\" *ngIf=\"shareCases && shareCases.length === 0\" class=\"govuk-hint\"\n [ngClass]=\"{'govuk-form-group--error': shareCaseErrorMessage.messages && shareCaseErrorMessage.messages.length > 0}\">\n {{'No cases to display.' | rpxTranslate}}\n </div>\n\n</div>\n\n<div id=\"share-case-nav\" class=\"govuk-button-group\">\n <button id=\"btn-continue\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"onContinue()\" title=\"{{'Continue' | rpxTranslate}}\">\n {{'Continue' | rpxTranslate}}\n </button>\n <button id=\"btn-cancel\" class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\" title=\"{{'Cancel' | rpxTranslate}}\" [routerLink]=\"cancelLink\">\n {{'Cancel' | rpxTranslate}}\n </button>\n</div>\n",
2683
+ template: "<xuilib-hmcts-error-summary\n [errorMessages]=\"validationErrors\"\n [header]=\"'There is a problem'\"\n></xuilib-hmcts-error-summary>\n<h1 *ngIf=\"title\" class=\"govuk-heading-xl govuk-!-margin-top-2\">\n <span *ngIf=\"fnTitle\" class=\"govuk-caption-xl\">{{fnTitle | rpxTranslate}}</span>\n {{title | rpxTranslate}}\n</h1>\n<div id=\"add-user\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"add-user-input\">{{addUserLabel | rpxTranslate}}</label>\n <span id=\"add-user-hint\" class=\"govuk-hint\">\n {{'Search by name or email address. You can share access with as many people as you need.' | rpxTranslate}}\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <xuilib-user-select\n id=\"add-user-input\"\n aria-describedby=\"add-user-hint\"\n [users]=\"users\"\n (selected)=\"onSelectedUser($event)\">\n </xuilib-user-select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-add-user\" (click)=\"addUser()\"\n class=\"govuk-button govuk-button--secondary\" [disabled]=\"isDisabledAdd()\"\n title=\"{{'Add user to selected cases' | rpxTranslate}}\">\n {{'Add' | rpxTranslate}}\n </button>\n </div>\n </div>\n <details id=\"add-user-help\" class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span id=\"content-why-can-not-find-email\" class=\"govuk-details__summary-text\">\n {{\"Can't find an email address?\" | rpxTranslate}}\n </span>\n </summary>\n <div id=\"content-reason-can-not-find-email\" class=\"govuk-details__text\">\n {{\"If you can't find your colleague's email address, they will need to complete their registration. Contact your administrator for help.\" | rpxTranslate}}\n </div>\n </details>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"showRemoveUsers\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"remove-user-input\">\n {{'Remove a person from all cases' | rpxTranslate}}\n </label>\n <span id=\"remove-user-hint\" class=\"govuk-hint\">\n {{'Select a person to remove them from all selected cases.' | rpxTranslate}}\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <select [(ngModel)]=\"selectedUserToRemove\" class=\"govuk-select\" id=\"remove-user-input\" aria-describedby=\"remove-user-hint\">\n <option [ngValue]=\"null\" selected>Select a person</option>\n <option *ngFor=\"let user of assignedUsers\" [ngValue]=\"user\">{{user.firstName}} {{user.lastName}} - {{user.email}}</option>\n </select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-remove-user\" (click)=\"removeUser()\" class=\"govuk-button govuk-button--secondary\" title=\"{{'Remove user from selected cases' | rpxTranslate}}\">\n {{'Remove' | rpxTranslate}}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div id=\"cases\" [ngClass]=\"{'govuk-form-group--error': shareCaseErrorMessage.messages && shareCaseErrorMessage.messages.length > 0}\">\n <h3 id=\"title-selected-cases\" class=\"govuk-heading-m\">\n {{'Selected cases' | rpxTranslate}}\n </h3>\n <xuilib-gov-uk-error-message [config]=\"selectedCasesErrorMessageConfig\" [errorMessage]=\"shareCaseErrorMessage\"></xuilib-gov-uk-error-message>\n <div *ngIf=\"shareCases && shareCases.length > 0\" class=\"govuk-accordion\" data-module=\"govuk-accordion\" id=\"accordion-with-summary-sections\">\n <xuilib-selected-case-list\n [shareCases$]=\"shareCases$\"\n [removeUserFromCaseToggleOn]=\"removeUserFromCaseToggleOn\"\n (unselect)=\"onUnselect($event)\"\n (synchronizeStore)=\"onSynchronizeStore($event)\"\n >\n </xuilib-selected-case-list>\n </div>\n\n <div id=\"noCaseDisplay\" *ngIf=\"shareCases && shareCases.length === 0\" class=\"govuk-hint\"\n [ngClass]=\"{'govuk-form-group--error': shareCaseErrorMessage.messages && shareCaseErrorMessage.messages.length > 0}\">\n {{'No cases to display.' | rpxTranslate}}\n </div>\n\n</div>\n\n<div id=\"share-case-nav\" class=\"govuk-button-group\">\n <button id=\"btn-continue\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"onContinue()\" title=\"{{'Continue' | rpxTranslate}}\">\n {{'Continue' | rpxTranslate}}\n </button>\n <button id=\"btn-cancel\" class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\" title=\"{{'Cancel' | rpxTranslate}}\" [routerLink]=\"cancelLink\">\n {{'Cancel' | rpxTranslate}}\n </button>\n</div>\n",
2482
2684
  styles: ["select{width:100%}"]
2483
2685
  },] }
2484
2686
  ];
@@ -2704,7 +2906,7 @@ class CookieBannerComponent {
2704
2906
  CookieBannerComponent.decorators = [
2705
2907
  { type: Component, args: [{
2706
2908
  selector: 'xuilib-cookie-banner',
2707
- template: "<div class=\"govuk-cookie-banner \" role=\"region\" attr.aria-label=\"'Cookies on {{appName}}'\" *ngIf=\"isCookieBannerVisible\">\n <div class=\"govuk-cookie-banner__message govuk-width-container\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h2 class=\"govuk-cookie-banner__heading govuk-heading-m\">{{'Cookies on' | rpxTranslate}} {{appName | rpxTranslate}}</h2>\n\n <div class=\"govuk-cookie-banner__content\">\n <p>{{'We use some essential cookies to make this service work.' | rpxTranslate}}</p>\n <p>{{'We\\'d also like to use analytics cookies so we can understand how you use the service and make improvements.' | rpxTranslate}}</p>\n </div>\n </div>\n </div>\n\n <div class=\"govuk-button-group\">\n <button value=\"accept\" type=\"button\" name=\"cookies\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"acceptCookie()\">\n {{'Accept analytics cookies' | rpxTranslate}}\n </button>\n <button value=\"reject\" type=\"button\" name=\"cookies\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"rejectCookie()\">\n {{'Reject analytics cookies' | rpxTranslate}}\n </button>\n <a class=\"govuk-link\" routerLink=\"/cookies\">{{'View cookies' | rpxTranslate}}</a>\n </div>\n </div>\n</div>\n"
2909
+ template: "<div class=\"govuk-cookie-banner \" role=\"region\" attr.aria-label=\"'Cookies on {{appName}}'\" *ngIf=\"isCookieBannerVisible\">\n <div class=\"govuk-cookie-banner__message govuk-width-container\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h2 class=\"govuk-cookie-banner__heading govuk-heading-m\">{{'Cookies on' | rpxTranslate}} {{appName | rpxTranslate}}</h2>\n\n <div class=\"govuk-cookie-banner__content\">\n <p>{{'We use some essential cookies to make this service work.' | rpxTranslate}}</p>\n <p>{{'We\\\u2019d also like to use analytics cookies so we can understand how you use the service and make improvements.' | rpxTranslate}}</p>\n </div>\n </div>\n </div>\n\n <div class=\"govuk-button-group\">\n <button value=\"accept\" type=\"button\" name=\"cookies\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"acceptCookie()\">\n {{'Accept analytics cookies' | rpxTranslate}}\n </button>\n <button value=\"reject\" type=\"button\" name=\"cookies\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"rejectCookie()\">\n {{'Reject analytics cookies' | rpxTranslate}}\n </button>\n <a class=\"govuk-link\" routerLink=\"/cookies\">{{'View cookies' | rpxTranslate}}</a>\n </div>\n </div>\n</div>\n"
2708
2910
  },] }
2709
2911
  ];
2710
2912
  CookieBannerComponent.ctorParameters = () => [
@@ -2854,7 +3056,7 @@ class FindServiceComponent {
2854
3056
  FindServiceComponent.decorators = [
2855
3057
  { type: Component, args: [{
2856
3058
  selector: 'xuilib-find-service',
2857
- template: "<div class=\"service-picker-custom\">\n <div class=\"search-service\">\n <div class=\"govuk-body\">\n <label id=\"selectServiceSearch-label\" for=\"serviceSearch__select\" *ngIf=\"serviceTitle\">\n {{ serviceTitle | rpxTranslate}}\n </label>\n </div>\n <div class=\"search-service__input-container\">\n <exui-search-service class=\"search-service__input\"\n [options]=\"field.options\"\n [selectedOptions]=\"selectedServices\"\n [disabled]=\"disabled\"\n (optionChanged)=\"onOptionSelected($event)\">\n </exui-search-service>\n <a href=\"javascript:void(0)\" (click)=\"addOption(tempSelectedService)\"\n class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\" data-module=\"govuk-button\"\n *ngIf=\"field?.enableAddButton\" id=\"add-service\">\n {{ 'Add' | rpxTranslate}}\n <span class=\"govuk-visually-hidden\">{{'service' | rpxTranslate}}</span>\n </a>\n </div>\n </div>\n <ul class=\"hmcts-filter-tags selection-container\" *ngIf=\"field.maxSelected != 1\">\n <li class=\"location-selection\" *ngFor=\"let selection of selectedServices\">\n <a class=\"hmcts-filter__tag\" (click)=\"removeOption(selection)\" href=\"javascript:void(0)\">\n {{ selection.label | rpxTranslate }}\n </a>\n </li>\n </ul>\n</div>\n",
3059
+ template: "<div class=\"service-picker-custom\">\n <div class=\"search-service\">\n <div class=\"govuk-body\">\n <label id=\"selectServiceSearch-label\" for=\"serviceSearch__select\" *ngIf=\"serviceTitle\">\n {{ serviceTitle | rpxTranslate}}\n </label>\n </div>\n <div class=\"search-service__input-container\">\n <exui-search-service class=\"search-service__input\"\n [options]=\"field.options\"\n [selectedOptions]=\"selectedServices\"\n [disabled]=\"disabled\"\n (optionChanged)=\"onOptionSelected($event)\">\n </exui-search-service>\n <a href=\"javascript:void(0)\" (click)=\"addOption(tempSelectedService)\"\n class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\" data-module=\"govuk-button\"\n *ngIf=\"field?.enableAddButton\" id=\"add-service\">\n {{ 'Add' | rpxTranslate}}\n </a>\n </div>\n </div>\n <ul class=\"hmcts-filter-tags selection-container\" *ngIf=\"field.maxSelected != 1\">\n <li class=\"location-selection\" *ngFor=\"let selection of selectedServices\">\n <a class=\"hmcts-filter__tag\" (click)=\"removeOption(selection)\" href=\"javascript:void(0)\">\n {{ selection.label | rpxTranslate }}\n </a>\n </li>\n </ul>\n</div>\n",
2858
3060
  styles: ["#add-service{background-color:#ddd}"]
2859
3061
  },] }
2860
3062
  ];
@@ -2868,47 +3070,6 @@ FindServiceComponent.propDecorators = {
2868
3070
  serviceFieldChanged: [{ type: Output }]
2869
3071
  };
2870
3072
 
2871
- var BadgeColour;
2872
- (function (BadgeColour) {
2873
- BadgeColour["BADGE_RED"] = "hmcts-badge--red";
2874
- BadgeColour["BADGE_BLUE"] = "hmcts-badge--blue";
2875
- BadgeColour["BADGE_GREEN"] = "hmcts-badge--green";
2876
- })(BadgeColour || (BadgeColour = {}));
2877
-
2878
- class AnonymousFeatureUser {
2879
- }
2880
- class LoggedInFeatureUser {
2881
- }
2882
-
2883
- class RadioFilterFieldConfig {
2884
- }
2885
-
2886
- var BookingCheckType;
2887
- (function (BookingCheckType) {
2888
- BookingCheckType["NO_CHECK"] = "NO_CHECK";
2889
- BookingCheckType["BOOKINGS_AND_BASE"] = "BOOKINGS_AND_BASE";
2890
- BookingCheckType["POSSIBLE_BOOKINGS"] = "POSSIBLE_BOOKINGS";
2891
- })(BookingCheckType || (BookingCheckType = {}));
2892
-
2893
- var PersonRole;
2894
- (function (PersonRole) {
2895
- PersonRole["JUDICIAL"] = "Judicial";
2896
- PersonRole["CASEWORKER"] = "Legal Ops";
2897
- PersonRole["ADMIN"] = "Admin";
2898
- PersonRole["CTSC"] = "CTSC";
2899
- PersonRole["ALL"] = "All";
2900
- })(PersonRole || (PersonRole = {}));
2901
- // Note: RoleCategory could replace PersonRole possibly
2902
- // However a lot of webapp logic is based on current PersonRole understanding
2903
- var RoleCategory;
2904
- (function (RoleCategory) {
2905
- RoleCategory["JUDICIAL"] = "JUDICIAL";
2906
- RoleCategory["CASEWORKER"] = "LEGAL_OPERATIONS";
2907
- RoleCategory["ADMIN"] = "ADMIN";
2908
- RoleCategory["CTSC"] = "CTSC";
2909
- RoleCategory["ALL"] = "ALL";
2910
- })(RoleCategory || (RoleCategory = {}));
2911
-
2912
3073
  class LocationService {
2913
3074
  constructor(http) {
2914
3075
  this.http = http;
@@ -3905,6 +4066,175 @@ ExuiPageWrapperComponent.propDecorators = {
3905
4066
  fnTitle: [{ type: Input }]
3906
4067
  };
3907
4068
 
4069
+ class WriteAddressFieldComponent {
4070
+ constructor(addressesService) {
4071
+ this.addressesService = addressesService;
4072
+ this.internationalMode = false;
4073
+ this.submissionAttempted = false;
4074
+ this.postcodeOptionSelected = new EventEmitter();
4075
+ this.internationalModeStart = new EventEmitter();
4076
+ this.ukAddressOptionSelected = new EventEmitter();
4077
+ this.addressField = {
4078
+ addressLine1: '',
4079
+ addressLine2: '',
4080
+ addressLine3: '',
4081
+ postCode: '',
4082
+ postTown: '',
4083
+ country: '',
4084
+ county: ''
4085
+ };
4086
+ this.optionErrorsPresent = false;
4087
+ this.addressChosen = false;
4088
+ this.missingPostcode = false;
4089
+ this.optionErrorMessage = AddressMessageEnum.NO_OPTION_SELECTED;
4090
+ }
4091
+ ngOnInit() {
4092
+ if (!this.formGroup.get('address')) {
4093
+ this.formGroup.addControl('address', new FormControl({}));
4094
+ }
4095
+ // set the form group relevant to only the external parent component
4096
+ this.addressFormGroup = new FormGroup({
4097
+ // relevant to international mode
4098
+ ukAddress: new FormControl(this.isInternational !== undefined ? (this.isInternational ? 'no' : 'yes') : null),
4099
+ // relevant to postocode lookup
4100
+ postcode: new FormControl(''),
4101
+ addressList: new FormControl('')
4102
+ });
4103
+ }
4104
+ findAddress() {
4105
+ if (!this.addressFormGroup.get('postcode').value) {
4106
+ this.missingPostcode = true;
4107
+ }
4108
+ else {
4109
+ this.missingPostcode = false;
4110
+ this.addressField = null;
4111
+ const postcode = this.addressFormGroup.get('postcode').value;
4112
+ this.addressOptions = [];
4113
+ this.addressesService.getAddressesForPostcode(postcode.replace(' ', '').toUpperCase()).subscribe(result => {
4114
+ result.forEach(address => {
4115
+ this.addressOptions.push(new AddressOption(address, null));
4116
+ });
4117
+ this.addressOptions.unshift(new AddressOption(undefined, this.defaultLabel(this.addressOptions.length)));
4118
+ }, (error) => {
4119
+ console.log(`An error occurred retrieving addresses for postcode ${postcode}. ${error}`);
4120
+ this.addressOptions.unshift(new AddressOption(undefined, this.defaultLabel(this.addressOptions.length)));
4121
+ });
4122
+ this.addressFormGroup.get('addressList').setValue(undefined);
4123
+ }
4124
+ }
4125
+ blankAddress() {
4126
+ this.setFormValue();
4127
+ if (this.internationalMode) {
4128
+ this.internationalModeStart.emit();
4129
+ }
4130
+ }
4131
+ shouldShowDetailFields() {
4132
+ if (!this.formGroup.get('address')) {
4133
+ return false;
4134
+ }
4135
+ const address = this.formGroup.get('address').value;
4136
+ let hasAddress = false;
4137
+ if (address) {
4138
+ Object.keys(address).forEach((key) => {
4139
+ if (address[key] !== null) {
4140
+ hasAddress = true;
4141
+ }
4142
+ });
4143
+ }
4144
+ return hasAddress;
4145
+ }
4146
+ addressSelected() {
4147
+ this.addressField = this.addressFormGroup.get('addressList').value;
4148
+ this.addressChosen = true;
4149
+ this.setFormValue();
4150
+ this.postcodeOptionSelected.emit();
4151
+ }
4152
+ ngOnChanges(changes) {
4153
+ const addressChange = changes['addressField'];
4154
+ const internationalChange = changes['isInternational'];
4155
+ if (addressChange) {
4156
+ this.setFormValue();
4157
+ }
4158
+ if (internationalChange && this.addressFormGroup && this.addressFormGroup.get('ukAddress')) {
4159
+ this.addressFormGroup.get('ukAddress').patchValue(this.isInternational ? 'no' : 'yes');
4160
+ }
4161
+ this.checkIfErrorsNeeded();
4162
+ }
4163
+ checkIfErrorsNeeded() {
4164
+ if (this.submissionAttempted && this.shouldShowDetailFields() && this.internationalMode && !this.addressChosen) {
4165
+ // ensure errors present when submission attmempted on international radio buttons
4166
+ this.optionErrorsPresent = true;
4167
+ }
4168
+ else {
4169
+ this.optionErrorsPresent = false;
4170
+ }
4171
+ if (this.optionErrorsPresent && (this.addressChosen || this.isInternational !== undefined)) {
4172
+ // ensure parent errors not present when the child form group is present
4173
+ this.optionErrorsPresent = false;
4174
+ }
4175
+ }
4176
+ setInternationalAddress(isInternational) {
4177
+ this.isInternational = isInternational;
4178
+ this.ukAddressOptionSelected.emit(this.isInternational);
4179
+ }
4180
+ defaultLabel(numberOfAddresses) {
4181
+ return numberOfAddresses === 0 ? 'No address found'
4182
+ : `${numberOfAddresses}${numberOfAddresses === 1 ? ' address ' : ' addresses '}found`;
4183
+ }
4184
+ setFormValue() {
4185
+ if (this.formGroup) {
4186
+ this.formGroup.get('address').patchValue(this.addressField);
4187
+ }
4188
+ }
4189
+ }
4190
+ WriteAddressFieldComponent.decorators = [
4191
+ { type: Component, args: [{
4192
+ selector: 'xuilib-write-address-field',
4193
+ template: "<div class=\"govuk-form-group\" [formGroup]=\"addressFormGroup\" [ngClass]=\"{'govuk-form-group--error': optionErrorsPresent}\">\n <p class=\"govuk-error-message\" *ngIf=\"optionErrorsPresent\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{optionErrorMessage}}\n </p>\n <div *ngIf=\"!shouldShowDetailFields() || (!startedInternational && !addressChosen)\">\n <div class=\"govuk-form-group postcodeLookup\" id=\"addressLookup\"\n [ngClass]=\"{'form-group-error': missingPostcode}\">\n <label for=\"postcodeInput\">\n <span class=\"govuk-label\"><b>Provide address details</b></span>\n <span class=\"govuk-label\">Enter a UK postcode</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">Enter the Postcode</span>\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\" id=\"postcodeInput\" name=\"postcode\"\n class=\"govuk-input govuk-!-width-two-thirds postcodeinput inline-block\" formControlName=\"postcode\">\n <button type=\"button\" class=\"govuk-button\" (click)=\"findAddress()\">Find address</button>\n </div>\n\n <div class=\"govuk-form-group\" *ngIf=\"addressOptions\" id=\"selectAddress\">\n <label class=\"govuk-label\" for=\"addressList\">\n <span class=\"form-label\">Select an address</span>\n </label>\n\n <select class=\"form-control govuk-select ccd-dropdown addressList\" id=\"addressList\" name=\"address\"\n formControlName=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n\n <a class=\"manual-link govuk-link\" *ngIf=\"!shouldShowDetailFields() || (!startedInternational && !addressChosen)\" (click)=\"blankAddress()\"\n href=\"javascript:void(0)\">I can't enter a UK postcode</a>\n </div>\n\n <div class=\"govuk-radios\" data-module=\"govuk-radios\"\n *ngIf=\"shouldShowDetailFields() && internationalMode && startedInternational && !addressChosen\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"yes\" value=\"yes\" name=\"ukAddress\" type=\"radio\" data-aria-controls=\"address-fields\"\n (click)=\"setInternationalAddress(false)\" formControlName=\"ukAddress\">\n <label class=\"govuk-label govuk-radios__label\" for=\"yes\">\n Yes\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"no\" value=\"no\" name=\"ukAddress\" type=\"radio\" data-aria-controls=\"address-fields\"\n (click)=\"setInternationalAddress(true)\" formControlName=\"ukAddress\">\n <label class=\"govuk-label govuk-radios__label\" for=\"no\">\n No\n </label>\n </div>\n <div class=\"govuk-radios__conditional\" id=\"address-fields\">\n <xuilib-write-address-inputs *ngIf=\"isInternational !== undefined\" [formGroup]=\"formGroup\" [isInternational]=\"isInternational\"\n [submissionAttempted]=\"submissionAttempted\">\n </xuilib-write-address-inputs>\n </div>\n </div>\n\n <xuilib-write-address-inputs *ngIf=\"shouldShowDetailFields() && (addressChosen || !internationalMode)\"\n [formGroup]=\"formGroup\" [isInternational]=\"false\" [submissionAttempted]=\"submissionAttempted\"></xuilib-write-address-inputs>\n\n</div>",
4194
+ styles: [".manual-link{cursor:pointer;text-decoration:underline}.manual-link,:host{display:block}"]
4195
+ },] }
4196
+ ];
4197
+ WriteAddressFieldComponent.ctorParameters = () => [
4198
+ { type: AddressService }
4199
+ ];
4200
+ WriteAddressFieldComponent.propDecorators = {
4201
+ formGroup: [{ type: Input }],
4202
+ internationalMode: [{ type: Input }],
4203
+ isInternational: [{ type: Input }],
4204
+ submissionAttempted: [{ type: Input }],
4205
+ startedInternational: [{ type: Input }],
4206
+ postcodeOptionSelected: [{ type: Output }],
4207
+ internationalModeStart: [{ type: Output }],
4208
+ ukAddressOptionSelected: [{ type: Output }]
4209
+ };
4210
+
4211
+ class WriteAddressInputsComponent {
4212
+ constructor() {
4213
+ this.MESSAGE_ENUM = AddressMessageEnum;
4214
+ this.isInternational = false;
4215
+ this.submissionAttempted = false;
4216
+ this.missingPostcode = false;
4217
+ this.errorsPresent = false;
4218
+ }
4219
+ ngOnChanges() {
4220
+ const addressGroup = this.formGroup.get('address');
4221
+ // if there is an issue with the formgroup, ensure error styling is displayed
4222
+ this.errorsPresent = !addressGroup.valid;
4223
+ }
4224
+ }
4225
+ WriteAddressInputsComponent.decorators = [
4226
+ { type: Component, args: [{
4227
+ selector: 'xuilib-write-address-inputs',
4228
+ template: "<ng-container>\n <form [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" formGroupName=\"address\" [ngClass]=\"{'govuk-form-group--error': submissionAttempted && errorsPresent}\">\n <label class=\"govuk-label govuk-!-font-weight-bold\">\n Enter address details\n </label>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"addressLine1\">\n Building and Street\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"submissionAttempted && !formGroup.get('address').get('addressLine1').valid\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{MESSAGE_ENUM.NO_STREET_SELECTED}}\n </p>\n <input class=\"govuk-input govuk-!-width-full\" id=\"addressLine1\" name=\"addressLine1\" type=\"text\"\n formControlName=\"addressLine1\">\n </div>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"addressLine2\">\n Address line 2 (Optional)\n </label>\n <input class=\"govuk-input govuk-!-width-full\" id=\"addressLine2\" name=\"addressLine2\" type=\"text\"\n formControlName=\"addressLine2\">\n </div>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"addressLine3\">\n Address line 3 (Optional)\n </label>\n <input class=\"govuk-input govuk-!-width-full\" id=\"addressLine3\" name=\"addressLine3\" type=\"text\"\n formControlName=\"addressLine3\">\n </div>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"postTown\">\n Town or City\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"submissionAttempted && !formGroup.get('address').get('postTown').valid\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{MESSAGE_ENUM.NO_CITY_SELECTED}}\n </p>\n <input class=\"govuk-input govuk-!-width-two-thirds\" id=\"postTown\" name=\"postTown\" type=\"text\"\n formControlName=\"postTown\">\n </div>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"county\">\n County{{this.isInternational ? '/ State/ Province' : ''}} (Optional)\n </label>\n <input class=\"govuk-input govuk-!-width-two-thirds\" id=\"county\" name=\"county\" type=\"text\"\n formControlName=\"county\">\n </div>\n\n <div *ngIf=\"isInternational\" class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"country\">\n Country\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"submissionAttempted && !formGroup.get('address').get('country').valid\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{MESSAGE_ENUM.NO_COUNTRY_SELECTED}}\n </p>\n <input class=\"govuk-input govuk-!-width-two-thirds\" id=\"country\" name=\"country\" type=\"text\"\n formControlName=\"country\">\n </div>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"postCode\">\n Postcode{{this.isInternational ? ' (Optional)' : ''}}\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"submissionAttempted && !isInternational && this.formGroup.get('address').get('postCode').hasError('required')\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{MESSAGE_ENUM.NO_POSTCODE_SELECTED}}\n </p>\n <p class=\"govuk-error-message\" *ngIf=\"submissionAttempted && !isInternational && this.formGroup.get('address').get('postCode').hasError('invalidPostcode')\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{MESSAGE_ENUM.INVALID_POSTCODE}}\n </p>\n <input class=\"govuk-input govuk-!-width-one-third\" id=\"postCode\" name=\"postCode\" type=\"text\"\n formControlName=\"postCode\">\n </div>\n </div>\n</form>\n</ng-container>"
4229
+ },] }
4230
+ ];
4231
+ WriteAddressInputsComponent.ctorParameters = () => [];
4232
+ WriteAddressInputsComponent.propDecorators = {
4233
+ formGroup: [{ type: Input }],
4234
+ isInternational: [{ type: Input }],
4235
+ submissionAttempted: [{ type: Input }]
4236
+ };
4237
+
3908
4238
  class FeatureToggleDirective {
3909
4239
  constructor(service, viewContainer, templateRef) {
3910
4240
  this.service = service;
@@ -4511,7 +4841,7 @@ class HmctsIdentityBarComponent {
4511
4841
  HmctsIdentityBarComponent.decorators = [
4512
4842
  { type: Component, args: [{
4513
4843
  selector: 'xuilib-hmcts-identity-bar',
4514
- template: "<div class=\"hmcts-identity-bar\" *ngIf=\"value\">\n <div class=\"hmcts-identity-bar__container\">\n <div class=\"hmcts-identity-bar__details\">\n <span class=\"hmcts-identity-bar__title\">{{value | rpxTranslate}}</span>\n </div>\n </div>\n</div>\n",
4844
+ template: "<div class=\"hmcts-identity-bar\" *ngIf=\"value\">\n\n <div class=\"hmcts-identity-bar__container\">\n\n <div class=\"hmcts-identity-bar__details\">\n\n <span class=\"hmcts-identity-bar__title\">{{value | rpxTranslate}}</span>\n\n </div>\n\n </div>\n\n</div>\n",
4515
4845
  styles: [""]
4516
4846
  },] }
4517
4847
  ];
@@ -4698,7 +5028,9 @@ const COMMON_COMPONENTS = [
4698
5028
  FindServiceComponent,
4699
5029
  SearchServiceComponent,
4700
5030
  SearchVenueComponent,
4701
- PaginationComponent
5031
+ PaginationComponent,
5032
+ WriteAddressFieldComponent,
5033
+ WriteAddressInputsComponent
4702
5034
  ];
4703
5035
  const GOV_UI_COMPONENTS = [
4704
5036
  HmctsIdentityBarComponent,
@@ -4835,5 +5167,5 @@ function radioGroupValidator() {
4835
5167
  * Generated bundle index. Do not edit.
4836
5168
  */
4837
5169
 
4838
- export { AccessibilityComponent, AnonymousFeatureUser, BadgeColour, BookingCheckType, COMMON_COMPONENTS, CapitalizePipe, CheckboxListComponent, ContactDetailsComponent, CookieBannerComponent, CookieService, DateBadgeColour, DueDateComponent, ExuiCommonLibModule, ExuiPageWrapperComponent, FeatureToggleDirective, FeatureToggleGuard, FeatureToggleService, FilterService, FindLocationComponent, FindPersonComponent, FindServiceComponent, FindTaskNameComponent, GOV_UI_COMPONENTS, GenericFilterComponent, GoogleAnalyticsService, GoogleTagManagerService, GovUiService, GovUkCheckboxComponent, GovUkCheckboxesComponent, GovUkDateComponent, GovUkErrorMessageComponent, GovUkFieldsetComponent, GovUkFileUploadComponent, GovUkFormGroupWrapperComponent, GovUkInputComponent, GovUkLabelComponent, GovUkRadioComponent, GovUkRadiosComponent, GovUkSelectComponent, GovUkTextareaComponent, GovukTableColumnConfig, GovukTableComponent, HasLoadingState, HmctsBannerComponent, HmctsErrorSummaryComponent, HmctsIdentityBarComponent, HmctsMainWrapperComponent, HmctsPaginationComponent, HmctsPrimaryNavigationComponent, HmctsSessionDialogComponent, HmctsSubNavigationComponent, InviteUserFormComponent, InviteUserPermissionComponent, LaunchDarklyService, LetContext, LetDirective, LoadingService, LoadingSpinnerComponent, LoggedInFeatureUser, ManageSessionServices, PaginationComponent, PersonRole, RadioFilterFieldConfig, RefDataService, RemoveHostDirective, RoleCategory, RoleGuard, RoleMatching, RoleService, SECONDS_IN_A_DAY, SearchJudicialsComponent, SearchLocationComponent, SearchServiceComponent, SearchVenueComponent, SelectedCaseComponent, SelectedCaseConfirmComponent, SelectedCaseListComponent, ServiceMessageComponent, ServiceMessagesComponent, ShareCaseComponent, ShareCaseConfirmComponent, SharedCaseErrorMessages, TabComponent, TcConfirmComponent, TcDisplayHtmlComponent, TcDisplayPlainComponent, TermsAndConditionsComponent, TimeoutNotificationsService, UserDetailsComponent, UserListComponent, UserSelectComponent, checkboxesBeCheckedValidator, dateValidator, radioGroupValidator, windowProvider, windowToken, ɵ0, ExuiPageWrapperComponent as ɵa, TermsAndConditionsComponent as ɵb, ServiceMessageComponent as ɵba, ServiceMessagesComponent as ɵbb, LoadingSpinnerComponent as ɵbc, GenericFilterComponent as ɵbd, FilterService as ɵbe, CookieBannerComponent as ɵbf, CookieService as ɵbg, FindPersonComponent as ɵbh, FindAPersonService as ɵbi, SessionStorageService as ɵbj, SearchJudicialsComponent as ɵbk, FindLocationComponent as ɵbl, SearchLocationComponent as ɵbm, LocationService as ɵbn, RefDataService as ɵbo, FindTaskNameComponent as ɵbp, TaskNameService as ɵbq, FindServiceComponent as ɵbr, SearchServiceComponent as ɵbs, SearchVenueComponent as ɵbt, PaginationComponent as ɵbu, HmctsIdentityBarComponent as ɵbv, HmctsPaginationComponent as ɵbw, HmctsSubNavigationComponent as ɵbx, HmctsPrimaryNavigationComponent as ɵby, HmctsErrorSummaryComponent as ɵbz, TcDisplayHtmlComponent as ɵc, HmctsMainWrapperComponent as ɵca, HmctsBannerComponent as ɵcb, GovukTableComponent as ɵcc, GovUkInputComponent as ɵcd, GovUkCheckboxComponent as ɵce, GovUkFormGroupWrapperComponent as ɵcf, GovUkLabelComponent as ɵcg, GovUkErrorMessageComponent as ɵch, GovUkFieldsetComponent as ɵci, GovUkDateComponent as ɵcj, GovUkCheckboxesComponent as ɵck, GovUkRadioComponent as ɵcl, GovUkRadiosComponent as ɵcm, GovUkSelectComponent as ɵcn, GovUkTextareaComponent as ɵco, GovUkFileUploadComponent as ɵcp, RemoveHostDirective as ɵcq, CapitalizePipe as ɵcr, TcDisplayPlainComponent as ɵd, TcConfirmComponent as ɵe, ContactDetailsComponent as ɵf, FeatureToggleDirective as ɵg, FeatureToggleService as ɵh, LetContext as ɵi, LetDirective as ɵj, HmctsSessionDialogComponent as ɵk, UserListComponent as ɵl, UserDetailsComponent as ɵm, InviteUserPermissionComponent as ɵn, InviteUserFormComponent as ɵo, ShareCaseComponent as ɵp, UserSelectComponent as ɵq, CaseSharingStateService as ɵr, ShareCaseConfirmComponent as ɵs, SelectedCaseListComponent as ɵt, SelectedCaseComponent as ɵu, SelectedCaseConfirmComponent as ɵv, TabComponent as ɵw, AccessibilityComponent as ɵx, DueDateComponent as ɵy, CheckboxListComponent as ɵz };
5170
+ export { AccessibilityComponent, AddressMessageEnum, AddressModel, AddressOption, AddressService, AnonymousFeatureUser, BadgeColour, BookingCheckType, COMMON_COMPONENTS, CapitalizePipe, CheckboxListComponent, ContactDetailsComponent, CookieBannerComponent, CookieService, DateBadgeColour, DueDateComponent, ExuiCommonLibModule, ExuiPageWrapperComponent, FeatureToggleDirective, FeatureToggleGuard, FeatureToggleService, FilterService, FindLocationComponent, FindPersonComponent, FindServiceComponent, FindTaskNameComponent, GOV_UI_COMPONENTS, GenericFilterComponent, GoogleAnalyticsService, GoogleTagManagerService, GovUiService, GovUkCheckboxComponent, GovUkCheckboxesComponent, GovUkDateComponent, GovUkErrorMessageComponent, GovUkFieldsetComponent, GovUkFileUploadComponent, GovUkFormGroupWrapperComponent, GovUkInputComponent, GovUkLabelComponent, GovUkRadioComponent, GovUkRadiosComponent, GovUkSelectComponent, GovUkTextareaComponent, GovukTableColumnConfig, GovukTableComponent, HasLoadingState, HmctsBannerComponent, HmctsErrorSummaryComponent, HmctsIdentityBarComponent, HmctsMainWrapperComponent, HmctsPaginationComponent, HmctsPrimaryNavigationComponent, HmctsSessionDialogComponent, HmctsSubNavigationComponent, InviteUserFormComponent, InviteUserPermissionComponent, LaunchDarklyService, LetContext, LetDirective, LoadingService, LoadingSpinnerComponent, LoggedInFeatureUser, ManageSessionServices, PaginationComponent, PersonRole, RadioFilterFieldConfig, RefDataService, RemoveHostDirective, RoleCategory, RoleGuard, RoleMatching, RoleService, SECONDS_IN_A_DAY, SearchJudicialsComponent, SearchLocationComponent, SearchServiceComponent, SearchVenueComponent, SelectedCaseComponent, SelectedCaseConfirmComponent, SelectedCaseListComponent, ServiceMessageComponent, ServiceMessagesComponent, ShareCaseComponent, ShareCaseConfirmComponent, SharedCaseErrorMessages, TabComponent, TcConfirmComponent, TcDisplayHtmlComponent, TcDisplayPlainComponent, TermsAndConditionsComponent, TimeoutNotificationsService, UserDetailsComponent, UserListComponent, UserSelectComponent, WriteAddressFieldComponent, WriteAddressInputsComponent, checkboxesBeCheckedValidator, dateValidator, radioGroupValidator, windowProvider, windowToken, ɵ0, ExuiPageWrapperComponent as ɵa, TermsAndConditionsComponent as ɵb, ServiceMessageComponent as ɵba, ServiceMessagesComponent as ɵbb, LoadingSpinnerComponent as ɵbc, GenericFilterComponent as ɵbd, FilterService as ɵbe, CookieBannerComponent as ɵbf, CookieService as ɵbg, FindPersonComponent as ɵbh, FindAPersonService as ɵbi, SessionStorageService as ɵbj, SearchJudicialsComponent as ɵbk, FindLocationComponent as ɵbl, SearchLocationComponent as ɵbm, LocationService as ɵbn, RefDataService as ɵbo, FindTaskNameComponent as ɵbp, TaskNameService as ɵbq, FindServiceComponent as ɵbr, SearchServiceComponent as ɵbs, SearchVenueComponent as ɵbt, PaginationComponent as ɵbu, WriteAddressFieldComponent as ɵbv, AddressService as ɵbw, WriteAddressInputsComponent as ɵbx, HmctsIdentityBarComponent as ɵby, HmctsPaginationComponent as ɵbz, TcDisplayHtmlComponent as ɵc, HmctsSubNavigationComponent as ɵca, HmctsPrimaryNavigationComponent as ɵcb, HmctsErrorSummaryComponent as ɵcc, HmctsMainWrapperComponent as ɵcd, HmctsBannerComponent as ɵce, GovukTableComponent as ɵcf, GovUkInputComponent as ɵcg, GovUkCheckboxComponent as ɵch, GovUkFormGroupWrapperComponent as ɵci, GovUkLabelComponent as ɵcj, GovUkErrorMessageComponent as ɵck, GovUkFieldsetComponent as ɵcl, GovUkDateComponent as ɵcm, GovUkCheckboxesComponent as ɵcn, GovUkRadioComponent as ɵco, GovUkRadiosComponent as ɵcp, GovUkSelectComponent as ɵcq, GovUkTextareaComponent as ɵcr, GovUkFileUploadComponent as ɵcs, RemoveHostDirective as ɵct, CapitalizePipe as ɵcu, TcDisplayPlainComponent as ɵd, TcConfirmComponent as ɵe, ContactDetailsComponent as ɵf, FeatureToggleDirective as ɵg, FeatureToggleService as ɵh, LetContext as ɵi, LetDirective as ɵj, HmctsSessionDialogComponent as ɵk, UserListComponent as ɵl, UserDetailsComponent as ɵm, InviteUserPermissionComponent as ɵn, InviteUserFormComponent as ɵo, ShareCaseComponent as ɵp, UserSelectComponent as ɵq, CaseSharingStateService as ɵr, ShareCaseConfirmComponent as ɵs, SelectedCaseListComponent as ɵt, SelectedCaseComponent as ɵu, SelectedCaseConfirmComponent as ɵv, TabComponent as ɵw, AccessibilityComponent as ɵx, DueDateComponent as ɵy, CheckboxListComponent as ɵz };
4839
5171
  //# sourceMappingURL=hmcts-rpx-xui-common-lib.js.map