@hmcts/rpx-xui-common-lib 1.8.7-fix-wrong-services → 1.8.8-angular-upgrade-r4

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 (118) hide show
  1. package/bundles/hmcts-rpx-xui-common-lib.umd.js +919 -201
  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 +32 -29
  6. package/esm2015/lib/components/find-location/find-location.component.js +8 -4
  7. package/esm2015/lib/components/find-service/find-service.component.js +2 -2
  8. package/esm2015/lib/components/find-task-name/find-task-name.component.js +228 -0
  9. package/esm2015/lib/components/generic-filter/generic-filter-utils.js +2 -2
  10. package/esm2015/lib/components/generic-filter/generic-filter.component.js +361 -15
  11. package/esm2015/lib/components/search-location/search-location.component.js +3 -3
  12. package/esm2015/lib/components/search-service/search-service.component.js +18 -6
  13. package/esm2015/lib/exui-common-lib.module.js +12 -3
  14. package/esm2015/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.js +80 -6
  15. package/esm2015/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +3 -3
  16. package/esm2015/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.js +3 -2
  17. package/esm2015/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.js +1 -1
  18. package/esm2015/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.js +2 -2
  19. package/esm2015/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.js +22 -0
  20. package/esm2015/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.js +19 -14
  21. package/esm2015/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.js +2 -2
  22. package/esm2015/lib/gov-ui/components/index.js +2 -2
  23. package/esm2015/lib/gov-ui/components/public_api.js +2 -1
  24. package/esm2015/lib/gov-ui/index.js +2 -2
  25. package/esm2015/lib/gov-ui/models/checkboxes-model.js +6 -8
  26. package/esm2015/lib/gov-ui/models/gov-ui-config-model.js +5 -1
  27. package/esm2015/lib/gov-ui/models/public_api.js +1 -2
  28. package/esm2015/lib/gov-ui/models/radio-buttons.model.js +22 -0
  29. package/esm2015/lib/gov-ui/public_api.js +2 -2
  30. package/esm2015/lib/models/filter.model.js +63 -3
  31. package/esm2015/lib/models/index.js +3 -2
  32. package/esm2015/lib/models/person.model.js +2 -2
  33. package/esm2015/lib/models/task-name.model.js +16 -0
  34. package/esm2015/lib/pipes/capitalize.pipe.js +21 -0
  35. package/esm2015/lib/services/filter/filter.service.js +17 -3
  36. package/esm2015/lib/services/find-person/find-person.service.js +3 -3
  37. package/esm2015/lib/services/role-guard/role.guard.js +22 -15
  38. package/esm2015/lib/services/role-guard/role.service.js +13 -13
  39. package/esm2015/lib/services/storage/session-storage/session-storage.service.js +55 -0
  40. package/esm2015/lib/services/task-name/task-name.service.js +65 -0
  41. package/esm2015/public-api.js +3 -3
  42. package/esm5/hmcts-rpx-xui-common-lib.js +32 -29
  43. package/esm5/lib/components/find-location/find-location.component.js +8 -4
  44. package/esm5/lib/components/find-service/find-service.component.js +2 -2
  45. package/esm5/lib/components/find-task-name/find-task-name.component.js +243 -0
  46. package/esm5/lib/components/generic-filter/generic-filter-utils.js +2 -2
  47. package/esm5/lib/components/generic-filter/generic-filter.component.js +397 -14
  48. package/esm5/lib/components/search-location/search-location.component.js +3 -3
  49. package/esm5/lib/components/search-service/search-service.component.js +20 -7
  50. package/esm5/lib/exui-common-lib.module.js +10 -3
  51. package/esm5/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.js +100 -6
  52. package/esm5/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +3 -3
  53. package/esm5/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.js +3 -2
  54. package/esm5/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.js +1 -1
  55. package/esm5/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.js +2 -2
  56. package/esm5/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.js +22 -0
  57. package/esm5/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.js +17 -13
  58. package/esm5/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.js +2 -2
  59. package/esm5/lib/gov-ui/components/index.js +2 -2
  60. package/esm5/lib/gov-ui/components/public_api.js +2 -1
  61. package/esm5/lib/gov-ui/index.js +2 -2
  62. package/esm5/lib/gov-ui/models/checkboxes-model.js +6 -8
  63. package/esm5/lib/gov-ui/models/gov-ui-config-model.js +5 -1
  64. package/esm5/lib/gov-ui/models/public_api.js +1 -2
  65. package/esm5/lib/gov-ui/models/radio-buttons.model.js +22 -0
  66. package/esm5/lib/gov-ui/public_api.js +2 -2
  67. package/esm5/lib/models/filter.model.js +63 -3
  68. package/esm5/lib/models/index.js +3 -2
  69. package/esm5/lib/models/person.model.js +2 -2
  70. package/esm5/lib/models/task-name.model.js +16 -0
  71. package/esm5/lib/pipes/capitalize.pipe.js +29 -0
  72. package/esm5/lib/services/filter/filter.service.js +21 -3
  73. package/esm5/lib/services/find-person/find-person.service.js +3 -3
  74. package/esm5/lib/services/role-guard/role.guard.js +22 -15
  75. package/esm5/lib/services/role-guard/role.service.js +13 -13
  76. package/esm5/lib/services/{session-storage → storage/session-storage}/session-storage.service.js +2 -2
  77. package/esm5/lib/services/task-name/task-name.service.js +70 -0
  78. package/esm5/public-api.js +3 -3
  79. package/fesm2015/hmcts-rpx-xui-common-lib.js +782 -115
  80. package/fesm2015/hmcts-rpx-xui-common-lib.js.map +1 -1
  81. package/fesm5/hmcts-rpx-xui-common-lib.js +908 -158
  82. package/fesm5/hmcts-rpx-xui-common-lib.js.map +1 -1
  83. package/hmcts-rpx-xui-common-lib.d.ts +30 -27
  84. package/hmcts-rpx-xui-common-lib.metadata.json +1 -1
  85. package/lib/components/find-task-name/find-task-name.component.d.ts +41 -0
  86. package/lib/components/generic-filter/generic-filter-utils.d.ts +2 -5
  87. package/lib/components/generic-filter/generic-filter.component.d.ts +12 -2
  88. package/lib/components/search-location/search-location.component.d.ts +1 -1
  89. package/lib/components/search-service/search-service.component.d.ts +5 -2
  90. package/lib/exui-common-lib.module.d.ts +4 -3
  91. package/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.d.ts +14 -5
  92. package/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.d.ts +1 -2
  93. package/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.d.ts +1 -0
  94. package/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.d.ts +2 -2
  95. package/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.d.ts +7 -0
  96. package/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.d.ts +4 -2
  97. package/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.d.ts +3 -3
  98. package/lib/gov-ui/components/public_api.d.ts +1 -0
  99. package/lib/gov-ui/models/checkboxes-model.d.ts +4 -7
  100. package/lib/gov-ui/models/gov-ui-config-model.d.ts +2 -0
  101. package/lib/gov-ui/models/public_api.d.ts +0 -1
  102. package/lib/gov-ui/models/radio-buttons.model.d.ts +9 -0
  103. package/lib/models/filter.model.d.ts +29 -7
  104. package/lib/models/index.d.ts +1 -0
  105. package/lib/models/person.model.d.ts +1 -1
  106. package/lib/models/task-name.model.d.ts +4 -0
  107. package/lib/pipes/capitalize.pipe.d.ts +4 -0
  108. package/lib/services/filter/filter.service.d.ts +1 -0
  109. package/lib/services/find-person/find-person.service.d.ts +1 -1
  110. package/lib/services/role-guard/role.guard.d.ts +2 -1
  111. package/lib/services/role-guard/role.service.d.ts +3 -1
  112. package/lib/services/{session-storage → storage/session-storage}/session-storage.service.d.ts +0 -0
  113. package/lib/services/task-name/task-name.service.d.ts +14 -0
  114. package/package.json +1 -1
  115. package/esm2015/lib/gov-ui/models/banner-data-model.js +0 -16
  116. package/esm2015/lib/services/session-storage/session-storage.service.js +0 -55
  117. package/esm5/lib/gov-ui/models/banner-data-model.js +0 -16
  118. package/lib/gov-ui/models/banner-data-model.d.ts +0 -4
@@ -10,9 +10,9 @@ import { Title } from '@angular/platform-browser';
10
10
  import { DocumentInterruptSource, Idle } from '@ng-idle/core';
11
11
  import { Keepalive } from '@ng-idle/keepalive';
12
12
  import { Router, RouterModule, NavigationEnd } from '@angular/router';
13
- import { Component, EventEmitter, Input, Output, ViewEncapsulation, Injectable, Directive, TemplateRef, ViewContainerRef, ElementRef, Inject, ViewChild, ChangeDetectorRef, InjectionToken, ChangeDetectionStrategy, defineInjectable, inject, NgModule } from '@angular/core';
13
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, Injectable, Pipe, Directive, TemplateRef, ViewContainerRef, ElementRef, Inject, ViewChild, ChangeDetectorRef, InjectionToken, ChangeDetectionStrategy, defineInjectable, inject, NgModule } from '@angular/core';
14
14
  import { BehaviorSubject, of, zip, Subject, combineLatest } from 'rxjs';
15
- import { distinctUntilChanged, map, tap, debounceTime, filter, mergeMap, catchError, switchMap, delay } from 'rxjs/operators';
15
+ import { distinctUntilChanged, map, tap, debounceTime, filter, mergeMap, catchError, switchMap, delay, skipWhile } from 'rxjs/operators';
16
16
 
17
17
  /**
18
18
  * @fileoverview added by tsickle
@@ -494,7 +494,7 @@ class FilterService {
494
494
  return this.filterSettings[id];
495
495
  }
496
496
  if (sessionStorage.getItem(id)) {
497
- return JSON.parse(window.sessionStorage.getItem(id));
497
+ return JSON.parse(sessionStorage.getItem(id));
498
498
  }
499
499
  if (localStorage.getItem(id)) {
500
500
  if (this.isSameUser(id)) {
@@ -525,6 +525,20 @@ class FilterService {
525
525
  }
526
526
  return this.streams[id].asObservable();
527
527
  }
528
+ /**
529
+ * @param {?} id
530
+ * @return {?}
531
+ */
532
+ clearSessionAndLocalPersistance(id) {
533
+ sessionStorage.removeItem(id);
534
+ localStorage.removeItem(id);
535
+ if (this.filterSettings[id] !== undefined) {
536
+ this.filterSettings[id] = null;
537
+ }
538
+ if (this.streams[id] !== undefined) {
539
+ this.streams[id].next(null);
540
+ }
541
+ }
528
542
  /**
529
543
  * @private
530
544
  * @param {?} setting
@@ -540,7 +554,7 @@ class FilterService {
540
554
  * @return {?}
541
555
  */
542
556
  persistSession(setting) {
543
- window.sessionStorage.setItem(setting.id, JSON.stringify(setting));
557
+ sessionStorage.setItem(setting.id, JSON.stringify(setting));
544
558
  }
545
559
  /**
546
560
  * @private
@@ -605,7 +619,7 @@ function minSelectedValidator(min) {
605
619
  * @param {?} value
606
620
  * @return {?}
607
621
  */
608
- value => value)).length >= min ? null : { minLength: true };
622
+ value => value)).length >= min ? null : { minlength: true };
609
623
  });
610
624
  }
611
625
  /**
@@ -662,6 +676,7 @@ class GenericFilterComponent {
662
676
  this.filterService = filterService;
663
677
  this.fb = fb;
664
678
  this.submitted = false;
679
+ this.previousSelectedNestedCheckbox = [];
665
680
  }
666
681
  /**
667
682
  * @return {?}
@@ -708,10 +723,10 @@ class GenericFilterComponent {
708
723
  static addFormValidators(field) {
709
724
  /** @type {?} */
710
725
  const validators = [];
711
- if (field && field.minSelected) {
726
+ if (field && field.minSelected > 0) {
712
727
  validators.push(minSelectedValidator(field.minSelected));
713
728
  }
714
- if (field && field.maxSelected) {
729
+ if (field && field.maxSelected > 0) {
715
730
  validators.push(maxSelectedValidator(field.maxSelected));
716
731
  }
717
732
  return validators;
@@ -729,6 +744,17 @@ class GenericFilterComponent {
729
744
  * @return {?}
730
745
  */
731
746
  () => this.submitted = false));
747
+ this.filterSkillsByServices(null, this.config);
748
+ /** @type {?} */
749
+ const services = this.config.fields.find((/**
750
+ * @param {?} field
751
+ * @return {?}
752
+ */
753
+ field => field.name === 'user-services'));
754
+ if (services) {
755
+ this.startFilterSkillsByServices(this.form, services);
756
+ this.initValuesFromCacheForSkillsByServices();
757
+ }
732
758
  }
733
759
  /**
734
760
  * @return {?}
@@ -860,6 +886,11 @@ class GenericFilterComponent {
860
886
  * @return {?}
861
887
  */
862
888
  inputChanged(field) {
889
+ if (field.name === 'user-services') {
890
+ /** @type {?} */
891
+ const selectedServices = this.getSelectedValuesForFields(this.form.controls, field);
892
+ this.filterSkillsByServices(selectedServices, this.config);
893
+ }
863
894
  if (field.radioSelectionChange && typeof field.radioSelectionChange === 'string') {
864
895
  const [name, value] = field.enableCondition.split('=');
865
896
  this.form.get(name).patchValue(value);
@@ -878,6 +909,9 @@ class GenericFilterComponent {
878
909
  this.filterService.persist(settings, this.config.persistence);
879
910
  this.filterService.givenErrors.next(null);
880
911
  this.submitted = false;
912
+ if (this.config.cancelButtonCallback) {
913
+ this.config.cancelButtonCallback();
914
+ }
881
915
  }
882
916
  /**
883
917
  * @param {?} values
@@ -901,6 +935,22 @@ class GenericFilterComponent {
901
935
  }
902
936
  }
903
937
  }
938
+ /**
939
+ * @param {?} field
940
+ * @param {?} i
941
+ * @return {?}
942
+ */
943
+ checkBoxChecked(field, i) {
944
+ return ((/** @type {?} */ (this.form.get(field.name))))['controls'][i]['value'];
945
+ }
946
+ /**
947
+ * @param {?} values
948
+ * @param {?} field
949
+ * @return {?}
950
+ */
951
+ updateTaskNameControls(values, field) {
952
+ this.form.get(field.name).patchValue(values);
953
+ }
904
954
  /**
905
955
  * @param {?} event
906
956
  * @param {?} form
@@ -984,6 +1034,52 @@ class GenericFilterComponent {
984
1034
  this.resetField(resetField, form);
985
1035
  }
986
1036
  }
1037
+ if (field.name === 'user-services') {
1038
+ this.startFilterSkillsByServices(form, field);
1039
+ }
1040
+ else if (field.name === 'user-skills') {
1041
+ if (isChecked) {
1042
+ /** @type {?} */
1043
+ const selectedIndex = field.options.findIndex((/**
1044
+ * @param {?} option
1045
+ * @return {?}
1046
+ */
1047
+ option => Number(option.key) === Number(event.target.value)));
1048
+ /** @type {?} */
1049
+ const selectedCheckbox = this.form.get('user-skills').value;
1050
+ selectedCheckbox[selectedIndex] = true;
1051
+ this.form.get('user-skills').setValue(selectedCheckbox);
1052
+ this.previousSelectedNestedCheckbox.push(event.target.value);
1053
+ }
1054
+ else {
1055
+ /** @type {?} */
1056
+ const index = this.previousSelectedNestedCheckbox.indexOf(event.target.value);
1057
+ if (index !== -1) {
1058
+ this.previousSelectedNestedCheckbox.splice(index, 1);
1059
+ }
1060
+ }
1061
+ }
1062
+ }
1063
+ /**
1064
+ * @private
1065
+ * @param {?} form
1066
+ * @param {?} field
1067
+ * @return {?}
1068
+ */
1069
+ startFilterSkillsByServices(form, field) {
1070
+ /** @type {?} */
1071
+ const servicesArray = [];
1072
+ form.value[field.name].map((/**
1073
+ * @param {?} service
1074
+ * @param {?} index
1075
+ * @return {?}
1076
+ */
1077
+ (service, index) => {
1078
+ if (service) {
1079
+ servicesArray.push(field.options[index].key);
1080
+ }
1081
+ }));
1082
+ this.filterSkillsByServices(servicesArray, this.config);
987
1083
  }
988
1084
  /**
989
1085
  * @private
@@ -1057,14 +1153,14 @@ class GenericFilterComponent {
1057
1153
  this.form.addControl('findPersonControl', findPersonControl);
1058
1154
  }
1059
1155
  for (const field of config.fields) {
1060
- if (field.type === 'checkbox' || field.type === 'checkbox-large') {
1156
+ if (field.type === 'checkbox' || field.type === 'checkbox-large' || field.type === 'nested-checkbox') {
1061
1157
  /** @type {?} */
1062
1158
  const formArray = this.buildCheckBoxFormArray(field, settings);
1063
1159
  this.form.addControl(field.name, formArray);
1064
1160
  }
1065
- else if (field.type === 'find-location') {
1161
+ else if (field.type === 'find-location' || field.type === 'find-service') {
1066
1162
  /** @type {?} */
1067
- const formArray = this.buildFindLocationFormArray(field, settings);
1163
+ const formArray = this.buildFormArray(field, settings);
1068
1164
  this.form.addControl(field.name, formArray);
1069
1165
  }
1070
1166
  else {
@@ -1072,6 +1168,12 @@ class GenericFilterComponent {
1072
1168
  const validators = [];
1073
1169
  if (field.minSelected && field.minSelected > 0) {
1074
1170
  validators.push(Validators.required);
1171
+ if (field.type === 'text-input') {
1172
+ validators.push(Validators.minLength(field.minSelected));
1173
+ }
1174
+ if (field.type === 'email-input') {
1175
+ validators.push(Validators.email);
1176
+ }
1075
1177
  }
1076
1178
  /** @type {?} */
1077
1179
  let defaultValue = null;
@@ -1105,7 +1207,7 @@ class GenericFilterComponent {
1105
1207
  });
1106
1208
  this.form.addControl(field.name, formGroup);
1107
1209
  }
1108
- else {
1210
+ else if (field.type !== 'group-title') {
1109
1211
  /** @type {?} */
1110
1212
  const control = new FormControl(defaultValue, validators);
1111
1213
  this.form.addControl(field.name, control);
@@ -1157,7 +1259,7 @@ class GenericFilterComponent {
1157
1259
  * @param {?} settings
1158
1260
  * @return {?}
1159
1261
  */
1160
- buildFindLocationFormArray(field, settings) {
1262
+ buildFormArray(field, settings) {
1161
1263
  /** @type {?} */
1162
1264
  const validators = GenericFilterComponent.addFormValidators(field);
1163
1265
  /** @type {?} */
@@ -1199,7 +1301,7 @@ class GenericFilterComponent {
1199
1301
  * @return {?}
1200
1302
  */
1201
1303
  f => f.name === name));
1202
- if (field.type === 'find-location') {
1304
+ if (field.type === 'find-location' || field.type === 'find-service') {
1203
1305
  return { value: values, name };
1204
1306
  }
1205
1307
  else {
@@ -1218,29 +1320,281 @@ class GenericFilterComponent {
1218
1320
  */
1219
1321
  emitFormErrors(form) {
1220
1322
  /** @type {?} */
1221
- const errors = [];
1323
+ let errors = [];
1222
1324
  for (const field of this.config.fields) {
1223
1325
  /** @type {?} */
1224
1326
  const formGroup = form.get(field.name);
1225
- if (formGroup && formGroup.errors && formGroup.errors.minLength) {
1327
+ if (formGroup && formGroup.errors && (formGroup.errors.minlength || formGroup.errors.required)) {
1226
1328
  errors.push({ name: field.name, error: field.minSelectedError });
1227
1329
  }
1228
- if (formGroup && formGroup.errors && formGroup.errors.maxLength) {
1229
- errors.push({ name: field.name, error: field.minSelectedError });
1330
+ if (formGroup && formGroup.errors && formGroup.errors.maxlength) {
1331
+ errors.push({ name: field.name, error: field.maxSelectedError });
1230
1332
  }
1231
1333
  }
1334
+ // remove duplicates
1335
+ errors = errors.filter((/**
1336
+ * @param {?} filterError
1337
+ * @param {?} i
1338
+ * @param {?} arr
1339
+ * @return {?}
1340
+ */
1341
+ (filterError, i, arr) => {
1342
+ return errors.indexOf(arr.find((/**
1343
+ * @param {?} item
1344
+ * @return {?}
1345
+ */
1346
+ item => item.name === filterError.name))) === i;
1347
+ }));
1232
1348
  if (errors.length) {
1233
1349
  this.filterService.givenErrors.next(errors);
1234
1350
  }
1235
1351
  }
1352
+ /**
1353
+ * @return {?}
1354
+ */
1355
+ initValuesFromCacheForSkillsByServices() {
1356
+ /** @type {?} */
1357
+ const cachedValues = this.filteredSkillsByServicesCheckbox.map((/**
1358
+ * @param {?} skill
1359
+ * @return {?}
1360
+ */
1361
+ skill => {
1362
+ /** @type {?} */
1363
+ let selected = false;
1364
+ if (this.settings && this.settings.fields) {
1365
+ /** @type {?} */
1366
+ let isSelectedUserSkill;
1367
+ /** @type {?} */
1368
+ const selectedUserSkills = this.settings.fields.find((/**
1369
+ * @param {?} setting
1370
+ * @return {?}
1371
+ */
1372
+ setting => setting.name === 'user-skills'));
1373
+ if (selectedUserSkills && selectedUserSkills.value && selectedUserSkills.value.length > 0) {
1374
+ isSelectedUserSkill = selectedUserSkills.value.findIndex((/**
1375
+ * @param {?} val
1376
+ * @return {?}
1377
+ */
1378
+ val => {
1379
+ return String(val) === String(skill.key);
1380
+ }));
1381
+ selected = isSelectedUserSkill !== -1;
1382
+ }
1383
+ }
1384
+ return selected;
1385
+ }));
1386
+ this.form.get('user-skills').setValue(cachedValues);
1387
+ }
1388
+ /**
1389
+ * @param {?} services
1390
+ * @param {?} config
1391
+ * @return {?}
1392
+ */
1393
+ filterSkillsByServices(services, config) {
1394
+ this.filteredSkillsByServices = [];
1395
+ this.filteredSkillsByServicesCheckbox = [];
1396
+ /** @type {?} */
1397
+ const userSkillsSelectField = config.fields.find((/**
1398
+ * @param {?} f
1399
+ * @return {?}
1400
+ */
1401
+ f => f.name === 'user-skills' && f.type === 'group-select'));
1402
+ /** @type {?} */
1403
+ const userSkillsCheckboxField = config.fields.find((/**
1404
+ * @param {?} f
1405
+ * @return {?}
1406
+ */
1407
+ f => f.name === 'user-skills' && f.type === 'nested-checkbox'));
1408
+ if (userSkillsSelectField) {
1409
+ /** @type {?} */
1410
+ const userSkills = userSkillsSelectField.groupOptions;
1411
+ if (!services || services.length === 0) {
1412
+ this.filteredSkillsByServices = userSkills;
1413
+ }
1414
+ else {
1415
+ services.forEach((/**
1416
+ * @param {?} s
1417
+ * @return {?}
1418
+ */
1419
+ s => {
1420
+ /** @type {?} */
1421
+ const groupOption = userSkills.find((/**
1422
+ * @param {?} u
1423
+ * @return {?}
1424
+ */
1425
+ u => u.group.toLowerCase() === s.toLowerCase()));
1426
+ if (groupOption) {
1427
+ this.filteredSkillsByServices.push(groupOption);
1428
+ }
1429
+ }));
1430
+ }
1431
+ }
1432
+ else if (userSkillsCheckboxField) {
1433
+ /** @type {?} */
1434
+ const userSkills = userSkillsCheckboxField.groupOptions;
1435
+ if (!services || services.length === 0) {
1436
+ this.filteredSkillsByServices = userSkills;
1437
+ }
1438
+ else {
1439
+ services.forEach((/**
1440
+ * @param {?} s
1441
+ * @return {?}
1442
+ */
1443
+ s => {
1444
+ /** @type {?} */
1445
+ const groupOption = userSkills.find((/**
1446
+ * @param {?} u
1447
+ * @return {?}
1448
+ */
1449
+ u => u.group.toLowerCase() === s.toLowerCase()));
1450
+ if (groupOption) {
1451
+ this.filteredSkillsByServices.push(groupOption);
1452
+ }
1453
+ }));
1454
+ this.filteredSkillsByServicesCheckbox = this.filteredSkillsByServices.map((/**
1455
+ * @param {?} skill
1456
+ * @return {?}
1457
+ */
1458
+ skill => {
1459
+ return skill.options;
1460
+ })).reduce((/**
1461
+ * @param {?} a
1462
+ * @param {?} b
1463
+ * @return {?}
1464
+ */
1465
+ (a, b) => {
1466
+ return a.concat(b);
1467
+ }), []);
1468
+ userSkillsCheckboxField.options = [];
1469
+ userSkillsCheckboxField.options = this.filteredSkillsByServicesCheckbox;
1470
+ this.form.setControl('user-skills', new FormArray([]));
1471
+ this.filteredSkillsByServicesCheckbox.forEach((/**
1472
+ * @return {?}
1473
+ */
1474
+ () => {
1475
+ ((/** @type {?} */ (this.form.get('user-skills')))).push(new FormControl(false));
1476
+ }));
1477
+ /** @type {?} */
1478
+ const prevValues = this.filteredSkillsByServicesCheckbox.map((/**
1479
+ * @param {?} skill
1480
+ * @return {?}
1481
+ */
1482
+ skill => {
1483
+ /** @type {?} */
1484
+ let selected = false;
1485
+ if (this.settings && this.settings.fields) {
1486
+ if (this.previousSelectedNestedCheckbox.length > 0) {
1487
+ selected = this.previousSelectedNestedCheckbox.includes(skill.key);
1488
+ }
1489
+ /** @type {?} */
1490
+ let isSelectedUserSkill;
1491
+ /** @type {?} */
1492
+ const selectedUserSkills = this.settings.fields.find((/**
1493
+ * @param {?} setting
1494
+ * @return {?}
1495
+ */
1496
+ setting => setting.name === 'user-skills'));
1497
+ if (selectedUserSkills && selectedUserSkills.value && selectedUserSkills.value.length > 0) {
1498
+ isSelectedUserSkill = selectedUserSkills.value.findIndex((/**
1499
+ * @param {?} val
1500
+ * @return {?}
1501
+ */
1502
+ val => Number(val) === Number(skill.key)));
1503
+ selected = isSelectedUserSkill !== -1;
1504
+ }
1505
+ if (this.previousSelectedNestedCheckbox.length > 0) {
1506
+ // Pick up from previous selected
1507
+ selected = this.previousSelectedNestedCheckbox.includes(String(skill.key));
1508
+ }
1509
+ }
1510
+ return selected;
1511
+ }));
1512
+ this.form.get('user-skills').setValue(prevValues);
1513
+ return this.filteredSkillsByServicesCheckbox;
1514
+ }
1515
+ }
1516
+ this.filteredSkillsByServices = this.sortGroupOptions(this.filteredSkillsByServices);
1517
+ return this.filteredSkillsByServices;
1518
+ }
1519
+ /**
1520
+ * @private
1521
+ * @param {?} formValues
1522
+ * @param {?} field
1523
+ * @return {?}
1524
+ */
1525
+ getSelectedValuesForFields(formValues, field) {
1526
+ /** @type {?} */
1527
+ const selectedValues = [];
1528
+ Object.keys(formValues).map((/**
1529
+ * @param {?} name
1530
+ * @return {?}
1531
+ */
1532
+ (name) => {
1533
+ /** @type {?} */
1534
+ const values = formValues[name].value;
1535
+ if (name === field.name) {
1536
+ values.forEach((/**
1537
+ * @param {?} v
1538
+ * @return {?}
1539
+ */
1540
+ (v) => {
1541
+ selectedValues.push(v.key);
1542
+ }));
1543
+ }
1544
+ }));
1545
+ return selectedValues;
1546
+ }
1547
+ /**
1548
+ * @private
1549
+ * @param {?} groupOptions
1550
+ * @return {?}
1551
+ */
1552
+ sortGroupOptions(groupOptions) {
1553
+ /** @type {?} */
1554
+ const sortedResults = [];
1555
+ /** @type {?} */
1556
+ const groups = groupOptions.map((/**
1557
+ * @param {?} go
1558
+ * @return {?}
1559
+ */
1560
+ go => go.group));
1561
+ groups.sort().forEach((/**
1562
+ * @param {?} g
1563
+ * @return {?}
1564
+ */
1565
+ g => {
1566
+ /** @type {?} */
1567
+ const options = groupOptions.find((/**
1568
+ * @param {?} go
1569
+ * @return {?}
1570
+ */
1571
+ (go) => go.group === g)).options;
1572
+ /** @type {?} */
1573
+ const sortedOptions = options.sort((/**
1574
+ * @param {?} a
1575
+ * @param {?} b
1576
+ * @return {?}
1577
+ */
1578
+ (a, b) => {
1579
+ return a.label.toLowerCase() > b.label.toLowerCase() ? 1 : (b.label.toLowerCase() > a.label.toLowerCase() ? -1 : 0);
1580
+ }));
1581
+ /** @type {?} */
1582
+ const result = {
1583
+ group: g,
1584
+ options: sortedOptions
1585
+ };
1586
+ sortedResults.push(result);
1587
+ }));
1588
+ return sortedResults;
1589
+ }
1236
1590
  }
1237
1591
  GenericFilterComponent.decorators = [
1238
1592
  { type: Component, args: [{
1239
1593
  selector: 'xuilib-generic-filter',
1240
- 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 <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?.minLength || form.get(field.name).errors?.maxLength)}\">\n <h3 *ngIf=\"field.title\" class=\"govuk-heading-s\">{{field.title}}</h3>\n <p class=\"govuk-body\" *ngIf=\"field.subTitle\">{{field.subTitle}}</p>\n <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMinSelectedError && submitted && form.get(field.name).errors?.minLength\">\n <span class=\"govuk-visually-hidden\">Error:</span> {{field.minSelectedError}}\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:</span> {{field.maxSelectedError}}\n </span>\n <div class=\"govuk-body\" [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 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=\"'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_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + 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=\"'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_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + 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=\"'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}}</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 ></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 [selectedLocations]=\"form.get(field.name)?.value\"\n [submitted]=\"submitted\"\n [field]=\"field\"\n [services]=\"form.get(field.findLocationField)?.value\"\n ></xuilib-find-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-service'\">\n <xuilib-find-service (serviceFieldChanged)=\"inputChanged(field)\"\n [form]=\"form\"\n [fields]=\"config.fields\"\n [title]=\"field.title\"\n [enableAddServiceButton]=\"field.enableAddButton\"\n [disabled]=\"disabled(field, form)\"\n [disableInputField]=\"field.disable\"\n [field]=\"field\"\n [selectedServices]=\"form.get(field.name)?.value\" \n ></xuilib-find-service>\n </ng-container>\n </div>\n </div>\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'}}</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'}}</button>\n </div>\n </div>\n</form>\n",
1594
+ 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?.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 <span [id]=\"field.name + '-error'\" class=\"govuk-error-message\" *ngIf=\"field.displayMinSelectedError && submitted && form.get(field.name).errors?.minLength\">\n <span class=\"govuk-visually-hidden\">Error:</span> {{field.minSelectedError}}\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:</span> {{field.maxSelectedError}}\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:</span> {{field.emailError}}\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_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + 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_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + 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=\"'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_' + item.key\"\n [name]=\"'checkbox_' + item.key\"\n />\n <label\n [for]=\"'checkbox_' + 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=\"'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}}</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 ></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 [selectedLocations]=\"form.get(field.name)?.value\"\n [submitted]=\"submitted\"\n [services]=\"form.get(field.findLocationField)?.value\"\n [field]=\"field\"\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.taskName\"\n [userIncluded]=\"false\"\n ></xuilib-find-task-name>\n </ng-container>\n <ng-container *ngSwitchCase=\"'find-service'\">\n <xuilib-find-service (serviceFieldChanged)=\"inputChanged(field)\"\n [form]=\"form\"\n [fields]=\"config.fields\"\n [title]=\"field.title\"\n [enableAddServiceButton]=\"field.enableAddButton\"\n [disabled]=\"disabled(field, form)\"\n [disableInputField]=\"field.disable\"\n [selectedServices]=\"form.get(field.name)?.value\"\n [services]=\"field.options\"\n [field]=\"field\"\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 />\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 />\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'}}</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'}}</button>\n </div>\n </div>\n</form>\n",
1241
1595
  changeDetection: ChangeDetectionStrategy.OnPush,
1242
1596
  encapsulation: ViewEncapsulation.None,
1243
- styles: [".contain-classes .elevated-break{position:relative;top:-10px}.contain-classes .xui-generic-filter .select-all{margin-bottom:10px}.contain-classes .xui-generic-filter .govuk-checkboxes{display:flex;flex-wrap:wrap}.contain-classes .xui-generic-filter .govuk-checkboxes>div{flex-grow:1;flex-shrink:0}"]
1597
+ 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%}"]
1244
1598
  }] }
1245
1599
  ];
1246
1600
  /** @nocollapse */
@@ -3074,6 +3428,14 @@ class AnonymousFeatureUser {
3074
3428
  class LoggedInFeatureUser {
3075
3429
  }
3076
3430
 
3431
+ /**
3432
+ * @fileoverview added by tsickle
3433
+ * Generated from: lib/models/filter.model.ts
3434
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3435
+ */
3436
+ class RadioFilterFieldConfig {
3437
+ }
3438
+
3077
3439
  /**
3078
3440
  * @fileoverview added by tsickle
3079
3441
  * Generated from: lib/models/idle-config.model.ts
@@ -3108,7 +3470,7 @@ const PersonRole = {
3108
3470
  JUDICIAL: "Judicial",
3109
3471
  CASEWORKER: "Legal Ops",
3110
3472
  ADMIN: "Admin",
3111
- CTSC: "CTSC",
3473
+ CTSC: "CTSC User",
3112
3474
  ALL: "All",
3113
3475
  };
3114
3476
  /** @enum {string} */
@@ -3132,14 +3494,6 @@ const RoleCategory = {
3132
3494
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3133
3495
  */
3134
3496
 
3135
- /**
3136
- * @fileoverview added by tsickle
3137
- * Generated from: lib/models/filter.model.ts
3138
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3139
- */
3140
- class RadioFilterFieldConfig {
3141
- }
3142
-
3143
3497
  /**
3144
3498
  * @fileoverview added by tsickle
3145
3499
  * Generated from: lib/models/public_api.ts
@@ -3218,7 +3572,7 @@ LocationService.ctorParameters = () => [
3218
3572
 
3219
3573
  /**
3220
3574
  * @fileoverview added by tsickle
3221
- * Generated from: lib/services/session-storage/session-storage.service.ts
3575
+ * Generated from: lib/services/storage/session-storage/session-storage.service.ts
3222
3576
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3223
3577
  */
3224
3578
  class SessionStorageService {
@@ -3463,7 +3817,7 @@ SearchLocationComponent.decorators = [
3463
3817
  { type: Component, args: [{
3464
3818
  selector: 'exui-search-location',
3465
3819
  template: "<div class=\"auto-complete-container\">\n <input\n id=\"inputLocationSearch\"\n (input)=\"onInput()\"\n [formControl]=\"form.controls.searchTerm\"\n [matAutocomplete]=\"autoSearchLocation\"\n class=\"govuk-input\"\n [attr.disabled]=\"disabled\">\n <mat-autocomplete class=\"mat-autocomplete-panel-extend\" autoActiveFirstOption #autoSearchLocation=\"matAutocomplete\">\n <mat-option *ngFor=\"let location of locations\"\n (onSelectionChange)=\"onSelectionChange(location)\">\n {{ location.site_name }}\n </mat-option>\n <mat-option *ngIf=\"!locations.length && showAutocomplete && term && term.length >= this.minSearchCharacters\">No results found</mat-option>\n </mat-autocomplete>\n</div>\n",
3466
- styles: [".autocomplete__input--show-all-values{padding:5px 34px 5px 5px;cursor:pointer}.autocomplete__dropdown-arrow-down{z-index:-1;display:inline-block;position:absolute;right:8px;width:24px;height:24px;top:10px}.autocomplete__menu{background-color:#fff;border:2px solid #0b0c0c;border-top:0;color:#0b0c0c;margin:0;max-height:342px;overflow-x:hidden;padding:0;width:100%;width:calc(100% - 4px)}.autocomplete__menu--visible{display:block}.autocomplete__menu--hidden{display:none}.autocomplete__menu--overlay{box-shadow:rgba(0,0,0,.256863) 0 2px 6px;left:0;position:absolute;top:100%;z-index:100}.autocomplete__menu--inline{position:relative}.autocomplete__option{border-bottom:solid #b1b4b6;border-width:1px 0;cursor:pointer;display:block;position:relative}.autocomplete__option>*{pointer-events:none}.autocomplete__option:first-of-type{border-top-width:0}.autocomplete__option:last-of-type{border-bottom-width:0}.autocomplete__option--odd{background-color:#fafafa}.autocomplete__option--focused,.autocomplete__option:hover{background-color:#1d70b8;border-color:#1d70b8;color:#fff;outline:0}.autocomplete__option--no-results{background-color:#fafafa;color:#646b6f;cursor:not-allowed}.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.25}.autocomplete__hint,.autocomplete__option{padding:5px}@media (min-width:641px){.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.31579}}.div-action{display:inline-block}.add-location{display:inline}.remove-location-button{margin:5px}.hide-autocomplete{display:none}.auto-complete-container{min-width:550px;display:inline-block;margin-right:4px}.autocomplete__input{line-height:24px;font-size:19px}"]
3820
+ styles: [".autocomplete__input--show-all-values{padding:5px 34px 5px 5px;cursor:pointer}.autocomplete__dropdown-arrow-down{z-index:-1;display:inline-block;position:absolute;right:8px;width:24px;height:24px;top:10px}.autocomplete__menu{background-color:#fff;border:2px solid #0b0c0c;border-top:0;color:#0b0c0c;margin:0;max-height:342px;overflow-x:hidden;padding:0;width:calc(100% - 4px)}.autocomplete__menu--visible{display:block}.autocomplete__menu--hidden{display:none}.autocomplete__menu--overlay{box-shadow:rgba(0,0,0,.256863) 0 2px 6px;left:0;position:absolute;top:100%;z-index:100}.autocomplete__menu--inline{position:relative}.autocomplete__option{border-bottom:solid #b1b4b6;border-width:1px 0;cursor:pointer;display:block;position:relative}.autocomplete__option>*{pointer-events:none}.autocomplete__option:first-of-type{border-top-width:0}.autocomplete__option:last-of-type{border-bottom-width:0}.autocomplete__option--odd{background-color:#fafafa}.autocomplete__option--focused,.autocomplete__option:hover{background-color:#1d70b8;border-color:#1d70b8;color:#fff;outline:0}.autocomplete__option--no-results{background-color:#fafafa;color:#646b6f;cursor:not-allowed}.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.25}.autocomplete__hint,.autocomplete__option{padding:5px}@media (min-width:641px){.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.31579}}.div-action{display:inline-block}.add-location{display:inline}.remove-location-button{margin:5px}.hide-autocomplete{display:none}.auto-complete-container{display:inline-block;margin-right:4px;width:calc(100% - 4px)}.autocomplete__input{line-height:24px;font-size:19px}"]
3467
3821
  }] }
3468
3822
  ];
3469
3823
  /** @nocollapse */
@@ -3545,7 +3899,11 @@ class FindLocationComponent {
3545
3899
  * @param {?} f
3546
3900
  * @return {?}
3547
3901
  */
3548
- f => f.name === this.field.findLocationField));
3902
+ f => {
3903
+ if (this.field) {
3904
+ return f.name === this.field.findLocationField;
3905
+ }
3906
+ }));
3549
3907
  if (field) {
3550
3908
  if (typeof value === 'string') {
3551
3909
  this.serviceIds = value;
@@ -3671,8 +4029,8 @@ class FindLocationComponent {
3671
4029
  FindLocationComponent.decorators = [
3672
4030
  { type: Component, args: [{
3673
4031
  selector: 'xuilib-find-location',
3674
- template: "<div class=\"location-picker-custom\">\n <div class=\"search-location\">\n <div>\n <label id=\"input-selected-location-label\" *ngIf=\"locationTitle\">{{locationTitle}}</label>\n </div>\n <exui-search-location class=\"search-location\"\n [locations]=\"locations\"\n [selectedLocations]=\"selectedLocations\"\n [singleMode]=\"field.maxSelected === 1\"\n [bookingCheck]=\"field.bookingCheckType\"\n [delay]=\"300\"\n [disabled]=\"disabled\"\n [serviceIds]=\"serviceIds\"\n (locationInputChanged)=\"onInputChanged($event)\"\n (locationSelected)=\"onLocationSelected($event)\"\n (searchLocationChanged)=\"onSearchInputChanged()\"\n [locationType]=\"'case-management'\"></exui-search-location>\n <a href=\"javascript:void(0)\" (click)=\"addLocation()\" class=\"govuk-button\" data-module=\"govuk-button\" *ngIf=\"enableAddLocationButton\">\n Add location\n </a>\n </div>\n <ul class=\"hmcts-filter-tags selection-container\" *ngIf=\"field.maxSelected != 1\">\n <li class=\"location-selection\" *ngFor=\"let selection of selectedLocations\">\n <a class=\"hmcts-filter__tag\" (click)=\"removeLocation(selection)\" href=\"javascript:void(0)\">\n {{ selection.site_name }}\n </a>\n </li>\n </ul>\n</div>\n",
3675
- styles: [""]
4032
+ template: "<div class=\"location-picker-custom\">\n <div class=\"search-location\">\n <div>\n <label id=\"input-selected-location-label\" *ngIf=\"locationTitle\">{{locationTitle}}</label>\n </div>\n\n <div class=\"search-location__input-container\">\n <exui-search-location class=\"search-location__input\"\n [locations]=\"locations\"\n [selectedLocations]=\"selectedLocations\"\n [singleMode]=\"field.maxSelected === 1\"\n [bookingCheck]=\"field.bookingCheckType\"\n [delay]=\"300\"\n [disabled]=\"disabled\"\n [serviceIds]=\"serviceIds\"\n (locationInputChanged)=\"onInputChanged($event)\"\n (locationSelected)=\"onLocationSelected($event)\"\n (searchLocationChanged)=\"onSearchInputChanged()\"\n [locationType]=\"'case-management'\"></exui-search-location>\n <a href=\"javascript:void(0)\" (click)=\"addLocation()\"\n class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\" data-module=\"govuk-button\"\n *ngIf=\"enableAddLocationButton\">\n Add\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 selectedLocations\">\n <a class=\"hmcts-filter__tag\" (click)=\"removeLocation(selection)\" href=\"javascript:void(0)\">\n {{ selection.site_name }}\n </a>\n </li>\n </ul>\n</div>\n",
4033
+ styles: [".search-location__input-container{display:flex}.search-location .auto-complete-container{min-width:unset;width:calc(100% - 4px)}.search-location__input{flex:1 0 auto}.search-location .govuk-button--secondary{background-color:#ddd}"]
3676
4034
  }] }
3677
4035
  ];
3678
4036
  FindLocationComponent.propDecorators = {
@@ -4350,7 +4708,7 @@ class FindServiceComponent {
4350
4708
  FindServiceComponent.decorators = [
4351
4709
  { type: Component, args: [{
4352
4710
  selector: 'xuilib-find-service',
4353
- template: "<div class=\"service-picker-custom\">\n <div class=\"search-service\">\n <div>\n <label id=\"input-selected-service-label\" *ngIf=\"serviceTitle\">{{serviceTitle}}</label>\n </div>\n <exui-search-service class=\"search-service\"\n [services]=\"services\"\n [selectedServices]=\"selectedServices\"\n [delay]=\"300\"\n [disabled]=\"disabled\"></exui-search-service>\n <a href=\"javascript:void(0)\" (click)=\"addService()\" class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\" \n data-module=\"govuk-button\" *ngIf=\"enableAddServiceButton\" id=\"add-service\">\n Add\n </a>\n </div>\n <ul class=\"hmcts-filter-tags selection-container\" *ngIf=\"field.maxSelected != 1\">\n <li class=\"service-selection\" *ngFor=\"let selection of selectedServices\">\n <a class=\"hmcts-filter__tag\" href=\"javascript:void(0)\">\n {{ selection.name }}\n </a>\n </li>\n </ul>\n </div>",
4711
+ template: "<div class=\"service-picker-custom\">\n <div class=\"search-service\">\n <div>\n <label id=\"input-selected-service-label\" *ngIf=\"serviceTitle\">{{serviceTitle}}</label>\n </div>\n <exui-search-service class=\"search-service\"\n [services]=\"services\"\n [selectedServices]=\"selectedServices\"\n [delay]=\"300\"\n [disabled]=\"disabled\"></exui-search-service>\n <a href=\"javascript:void(0)\" (click)=\"addService()\" class=\"govuk-button govuk-button--secondary govuk-!-margin-bottom-0\"\n data-module=\"govuk-button\" *ngIf=\"enableAddServiceButton\" id=\"add-service\">\n Add\n </a>\n </div>\n <ul class=\"hmcts-filter-tags selection-container\" *ngIf=\"field.maxSelected != 1\">\n <li class=\"service-selection\" *ngFor=\"let selection of selectedServices\">\n <a class=\"hmcts-filter__tag\" href=\"javascript:void(0)\">\n {{ selection.name }}\n </a>\n </li>\n </ul>\n </div>\n",
4354
4712
  styles: ["#add-service{background-color:#ddd}"]
4355
4713
  }] }
4356
4714
  ];
@@ -4366,6 +4724,207 @@ FindServiceComponent.propDecorators = {
4366
4724
  disableInputField: [{ type: Input }]
4367
4725
  };
4368
4726
 
4727
+ /**
4728
+ * @fileoverview added by tsickle
4729
+ * Generated from: lib/services/task-name/task-name.service.ts
4730
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4731
+ */
4732
+ class TaskNameService {
4733
+ /**
4734
+ * @param {?} http
4735
+ * @param {?} sessionStorageService
4736
+ */
4737
+ constructor(http, sessionStorageService) {
4738
+ this.http = http;
4739
+ this.sessionStorageService = sessionStorageService;
4740
+ }
4741
+ /**
4742
+ * @return {?} Observable<any[]>: Array of taskName in Observable
4743
+ */
4744
+ getTaskName() {
4745
+ if (this.sessionStorageService.getItem(TaskNameService.taskNamesKey)) {
4746
+ /** @type {?} */
4747
+ const taskNames = JSON.parse(this.sessionStorageService.getItem(TaskNameService.taskNamesKey));
4748
+ return of((/** @type {?} */ (taskNames)));
4749
+ }
4750
+ return this.http.get(`/workallocation/taskNames`).pipe(tap((/**
4751
+ * @param {?} taskNames
4752
+ * @return {?}
4753
+ */
4754
+ taskNames => this.sessionStorageService.setItem(TaskNameService.taskNamesKey, JSON.stringify(taskNames)))));
4755
+ }
4756
+ }
4757
+ TaskNameService.taskNamesKey = 'taskNames';
4758
+ TaskNameService.decorators = [
4759
+ { type: Injectable, args: [{
4760
+ providedIn: 'root'
4761
+ },] }
4762
+ ];
4763
+ /** @nocollapse */
4764
+ TaskNameService.ctorParameters = () => [
4765
+ { type: HttpClient },
4766
+ { type: SessionStorageService }
4767
+ ];
4768
+ /** @nocollapse */ TaskNameService.ngInjectableDef = defineInjectable({ factory: function TaskNameService_Factory() { return new TaskNameService(inject(HttpClient), inject(SessionStorageService)); }, token: TaskNameService, providedIn: "root" });
4769
+
4770
+ /**
4771
+ * @fileoverview added by tsickle
4772
+ * Generated from: lib/components/find-task-name/find-task-name.component.ts
4773
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4774
+ */
4775
+ class FindTaskNameComponent {
4776
+ /**
4777
+ * @param {?} cd
4778
+ * @param {?} taskService
4779
+ */
4780
+ constructor(cd, taskService) {
4781
+ this.cd = cd;
4782
+ this.taskService = taskService;
4783
+ this.taskNameSelected = new EventEmitter();
4784
+ this.taskNameFieldChanged = new EventEmitter();
4785
+ this.boldTitle = 'Find the task name';
4786
+ this.subTitle = 'Type the name of the task name and select them.';
4787
+ this.domain = PersonRole.ALL;
4788
+ this.findTaskNameGroup = new FormGroup({});
4789
+ this.submitted = true;
4790
+ this.userIncluded = false;
4791
+ this.placeholderContent = '';
4792
+ this.isNoResultsShown = true;
4793
+ this.showUpdatedColor = false;
4794
+ this.selectedTaskNames = [];
4795
+ this.errorMessage = 'You must select a name';
4796
+ this.idValue = '';
4797
+ this.services = ['IA'];
4798
+ this.disabled = null;
4799
+ this.showAutocomplete = false;
4800
+ this.filteredOptions = [];
4801
+ this.minSearchCharacters = 1;
4802
+ this.searchTerm = '';
4803
+ }
4804
+ /**
4805
+ * @return {?}
4806
+ */
4807
+ ngOnDestroy() {
4808
+ if (this.sub) {
4809
+ this.sub.unsubscribe();
4810
+ }
4811
+ }
4812
+ /**
4813
+ * @return {?}
4814
+ */
4815
+ ngOnChanges() {
4816
+ this.findTaskNameControl = new FormControl(this.selectedTaskName);
4817
+ this.findTaskNameGroup.addControl('findTaskNameControl', this.findTaskNameControl);
4818
+ this.sub = this.findTaskNameControl.valueChanges
4819
+ .pipe(tap((/**
4820
+ * @return {?}
4821
+ */
4822
+ () => this.showAutocomplete = false)), tap((/**
4823
+ * @return {?}
4824
+ */
4825
+ () => this.filteredOptions = [])), tap((/**
4826
+ * @param {?} term
4827
+ * @return {?}
4828
+ */
4829
+ (term) => this.searchTerm = term)), debounceTime(300), tap((/**
4830
+ * @param {?} searchTerm
4831
+ * @return {?}
4832
+ */
4833
+ (searchTerm) => {
4834
+ if (!searchTerm) {
4835
+ this.taskNameSelected.emit('');
4836
+ }
4837
+ return searchTerm;
4838
+ })),
4839
+ // tap((searchTerm) => typeof searchTerm === 'string' ? this.taskNameSelected.emit('null') : void 0),
4840
+ filter((/**
4841
+ * @param {?} searchTerm
4842
+ * @return {?}
4843
+ */
4844
+ (searchTerm) => searchTerm && searchTerm.length >= this.minSearchCharacters)), mergeMap((/**
4845
+ * @return {?}
4846
+ */
4847
+ () => this.getTaskName()))).subscribe((/**
4848
+ * @param {?} taskNameModel
4849
+ * @return {?}
4850
+ */
4851
+ (taskNameModel) => {
4852
+ this.filteredOptions = taskNameModel.map((/**
4853
+ * @param {?} task
4854
+ * @return {?}
4855
+ */
4856
+ task => task.taskName));
4857
+ if (this.searchTerm) {
4858
+ this.filteredOptions = this.filteredOptions.filter((/**
4859
+ * @param {?} taskName
4860
+ * @return {?}
4861
+ */
4862
+ (taskName) => taskName.toLocaleLowerCase().includes(this.searchTerm.toLocaleLowerCase()))).map((/**
4863
+ * @param {?} taskName
4864
+ * @return {?}
4865
+ */
4866
+ taskName => taskName));
4867
+ }
4868
+ this.cd.detectChanges();
4869
+ }));
4870
+ }
4871
+ /**
4872
+ * @return {?}
4873
+ */
4874
+ getTaskName() {
4875
+ return this.taskService.getTaskName();
4876
+ }
4877
+ /**
4878
+ * @param {?} selectedTaskName
4879
+ * @return {?}
4880
+ */
4881
+ onSelectionChange(selectedTaskName) {
4882
+ if (selectedTaskName) {
4883
+ this.taskNameSelected.emit(selectedTaskName);
4884
+ this.findTaskNameControl.setValue(selectedTaskName);
4885
+ }
4886
+ }
4887
+ /**
4888
+ * @return {?}
4889
+ */
4890
+ onInput() {
4891
+ this.taskNameFieldChanged.emit();
4892
+ }
4893
+ }
4894
+ FindTaskNameComponent.decorators = [
4895
+ { type: Component, args: [{
4896
+ selector: 'xuilib-find-task-name',
4897
+ template: "<h1 class=\"govuk-heading-l\" *ngIf=\"title && title.length\">\n <span class=\"govuk-caption-l\">{{title}}</span>\n {{boldTitle}}\n</h1>\n<div class=\"govuk-form-group\" [formGroup]=\"findTaskNameGroup\"\n [ngClass]=\"{'form-group-error': findTaskNameGroup.get('findTaskNameControl')?.invalid && submitted}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"sub-title-hint\">\n <div id=\"sub-title-hint\" class=\"govuk-hint\" *ngIf=\"subTitle && subTitle.length\">\n {{subTitle}}\n </div>\n <span id=\"validation-error\" class=\"govuk-error-message\" *ngIf=\"findTaskNameGroup && findTaskNameGroup.errors\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{findTaskNameGroup.errors.error ? findTaskNameGroup.errors.error : errorMessage}}\n </span>\n <input id=\"inputSelectTaskName{{idValue}}\" type=\"text\" aria-label=\"select a task name\"\n formControlName=\"findTaskNameControl\"\n [matAutocomplete]=\"auto\"\n class=\"govuk-input govuk-!-width-one-third\"\n [placeholder]=\"placeholderContent\"\n [attr.disabled]=\"disabled\"\n (input)=\"onInput()\">\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"onSelectionChange($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\"\n [value]=\"option\"\n [ngClass]=\"{'hide-autocomplete': !showAutocomplete, 'select-option': showUpdatedColor}\">\n {{ option }}\n </mat-option>\n <mat-option [ngClass]=\"{'select-option': showUpdatedColor}\" *ngIf=\"isNoResultsShown && !filteredOptions.length && showAutocomplete\">No results found</mat-option>\n </mat-autocomplete>\n </fieldset>\n</div>\n",
4898
+ styles: [""]
4899
+ }] }
4900
+ ];
4901
+ /** @nocollapse */
4902
+ FindTaskNameComponent.ctorParameters = () => [
4903
+ { type: ChangeDetectorRef },
4904
+ { type: TaskNameService }
4905
+ ];
4906
+ FindTaskNameComponent.propDecorators = {
4907
+ taskNameSelected: [{ type: Output }],
4908
+ taskNameFieldChanged: [{ type: Output }],
4909
+ title: [{ type: Input }],
4910
+ boldTitle: [{ type: Input }],
4911
+ subTitle: [{ type: Input }],
4912
+ domain: [{ type: Input }],
4913
+ findTaskNameGroup: [{ type: Input }],
4914
+ selectedTaskName: [{ type: Input }],
4915
+ submitted: [{ type: Input }],
4916
+ userIncluded: [{ type: Input }],
4917
+ assignedUser: [{ type: Input }],
4918
+ placeholderContent: [{ type: Input }],
4919
+ isNoResultsShown: [{ type: Input }],
4920
+ showUpdatedColor: [{ type: Input }],
4921
+ selectedTaskNames: [{ type: Input }],
4922
+ errorMessage: [{ type: Input }],
4923
+ idValue: [{ type: Input }],
4924
+ services: [{ type: Input }],
4925
+ disabled: [{ type: Input }]
4926
+ };
4927
+
4369
4928
  /**
4370
4929
  * @fileoverview added by tsickle
4371
4930
  * Generated from: lib/components/search-judicials/search-judicials.component.ts
@@ -4573,7 +5132,9 @@ SearchJudicialsComponent.propDecorators = {
4573
5132
  */
4574
5133
  class SearchServiceComponent {
4575
5134
  constructor() {
5135
+ this.services = [];
4576
5136
  this.showAutocomplete = false;
5137
+ this.serviceChanged = new EventEmitter();
4577
5138
  this.minSearchCharacters = 3;
4578
5139
  this.term = '';
4579
5140
  }
@@ -4584,16 +5145,23 @@ class SearchServiceComponent {
4584
5145
  // Todo
4585
5146
  }
4586
5147
  /**
5148
+ * @param {?} key
4587
5149
  * @return {?}
4588
5150
  */
4589
- onSelectionChange() {
4590
- // Todo
5151
+ onSelectionChanged(key) {
5152
+ /** @type {?} */
5153
+ const selectedService = this.services.find((/**
5154
+ * @param {?} s
5155
+ * @return {?}
5156
+ */
5157
+ s => s.key === key));
5158
+ this.serviceChanged.emit(selectedService);
4591
5159
  }
4592
5160
  }
4593
5161
  SearchServiceComponent.decorators = [
4594
5162
  { type: Component, args: [{
4595
5163
  selector: 'exui-search-service',
4596
- template: "<div class=\"auto-complete-container\">\n <input\n id=\"inputServiceSearch\"\n (input)=\"onInput()\"\n [formControl]=\"form?.controls.searchTerm\"\n [matAutocomplete]=\"autoSearchService\"\n class=\"govuk-input\"\n [attr.disabled]=\"disabled\">\n <mat-autocomplete class=\"mat-autocomplete-panel-extend\" autoActiveFirstOption #autoSearchService=\"matAutocomplete\">\n <mat-option *ngFor=\"let service of services\" (onSelectionChange)=\"onSelectionChange()\">\n {{ service.name }}\n </mat-option>\n <mat-option *ngIf=\"!services?.length && showAutocomplete && term && term.length >= this.minSearchCharacters\">No results found</mat-option>\n </mat-autocomplete>\n</div>\n",
5164
+ template: "<div class=\"auto-complete-container\">\n <input\n id=\"inputServiceSearch\"\n (input)=\"onInput()\"\n [formControl]=\"form?.controls.searchTerm\"\n [matAutocomplete]=\"autoSearchService\"\n class=\"govuk-input\"\n [attr.disabled]=\"disabled\"\n (change)=\"onSelectionChanged($event.target.value)\">\n <mat-autocomplete class=\"mat-autocomplete-panel-extend\" autoActiveFirstOption #autoSearchService=\"matAutocomplete\">\n <mat-option *ngFor=\"let service of services\" (onSelectionChange)=\"onSelectionChanged($event.target.value)\">\n {{ service.name }}\n </mat-option>\n <mat-option *ngIf=\"!services?.length && showAutocomplete && term && term.length >= this.minSearchCharacters\">No results found</mat-option>\n </mat-autocomplete>\n</div>\n",
4597
5165
  styles: [".autocomplete__input--show-all-values{padding:5px 34px 5px 5px;cursor:pointer}.autocomplete__dropdown-arrow-down{z-index:-1;display:inline-block;position:absolute;right:8px;width:24px;height:24px;top:10px}.autocomplete__menu{background-color:#fff;border:2px solid #0b0c0c;border-top:0;color:#0b0c0c;margin:0;max-height:342px;overflow-x:hidden;padding:0;width:100%;width:calc(100% - 4px)}.autocomplete__menu--visible{display:block}.autocomplete__menu--hidden{display:none}.autocomplete__menu--overlay{box-shadow:rgba(0,0,0,.256863) 0 2px 6px;left:0;position:absolute;top:100%;z-index:100}.autocomplete__menu--inline{position:relative}.autocomplete__option{border-bottom:solid #b1b4b6;border-width:1px 0;cursor:pointer;display:block;position:relative}.autocomplete__option>*{pointer-events:none}.autocomplete__option:first-of-type{border-top-width:0}.autocomplete__option:last-of-type{border-bottom-width:0}.autocomplete__option--odd{background-color:#fafafa}.autocomplete__option--focused,.autocomplete__option:hover{background-color:#1d70b8;border-color:#1d70b8;color:#fff;outline:0}.autocomplete__option--no-results{background-color:#fafafa;color:#646b6f;cursor:not-allowed}.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.25}.autocomplete__hint,.autocomplete__option{padding:5px}@media (min-width:641px){.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.31579}}.div-action{display:inline-block}.add-location{display:inline}.remove-location-button{margin:5px}.hide-autocomplete{display:none}.auto-complete-container{min-width:250px;display:inline-block;margin-right:4px}.autocomplete__input{line-height:24px;font-size:19px}"]
4598
5166
  }] }
4599
5167
  ];
@@ -4603,7 +5171,8 @@ SearchServiceComponent.propDecorators = {
4603
5171
  disabled: [{ type: Input }],
4604
5172
  delay: [{ type: Input }],
4605
5173
  form: [{ type: Input }],
4606
- showAutocomplete: [{ type: Input }]
5174
+ showAutocomplete: [{ type: Input }],
5175
+ serviceChanged: [{ type: Output }]
4607
5176
  };
4608
5177
 
4609
5178
  /**
@@ -4844,6 +5413,38 @@ GovUkCheckboxComponent.propDecorators = {
4844
5413
  isChecked: [{ type: Input }]
4845
5414
  };
4846
5415
 
5416
+ /**
5417
+ * @fileoverview added by tsickle
5418
+ * Generated from: lib/gov-ui/util/helpers/html-templates.helper.ts
5419
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5420
+ */
5421
+ /*
5422
+ * Helper Class
5423
+ * Used for dynamic templates manipulation
5424
+ * */
5425
+ class HtmlTemplatesHelper {
5426
+ /*
5427
+ * Sets described by string depending if
5428
+ * there is an error, error and hit or nothing
5429
+ * */
5430
+ /**
5431
+ * @param {?} errorMessage
5432
+ * @param {?} config
5433
+ * @return {?}
5434
+ */
5435
+ static setDescribedBy(errorMessage, config) {
5436
+ if (!errorMessage) {
5437
+ return config.hint ? `${config.id}-hint` : null;
5438
+ }
5439
+ else if (errorMessage && errorMessage.isInvalid) {
5440
+ return config.hint ? `${config.id}-hint ${config.id}-error` : `${config.id}-error`;
5441
+ }
5442
+ else {
5443
+ return config.hint ? `${config.id}-hint` : null;
5444
+ }
5445
+ }
5446
+ }
5447
+
4847
5448
  /**
4848
5449
  * @fileoverview added by tsickle
4849
5450
  * Generated from: lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.ts
@@ -4857,16 +5458,82 @@ GovUkCheckboxComponent.propDecorators = {
4857
5458
  * @param: errors - array of error stings
4858
5459
  * */
4859
5460
  class GovUkCheckboxesComponent {
5461
+ /**
5462
+ * @return {?}
5463
+ */
5464
+ ngOnInit() {
5465
+ this.columns = this.setColumns();
5466
+ }
5467
+ /**
5468
+ * @return {?}
5469
+ */
5470
+ setDescribedBy() {
5471
+ return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);
5472
+ }
5473
+ /**
5474
+ * @param {?} checked
5475
+ * @param {?} value
5476
+ * @return {?}
5477
+ */
5478
+ onChecked(checked, value) {
5479
+ /** @type {?} */
5480
+ const formControl = this.group.get(this.config.name);
5481
+ /** @type {?} */
5482
+ const array = formControl.value ? formControl.value : [];
5483
+ if (!checked) {
5484
+ /** @type {?} */
5485
+ const modifiedArray = array.filter((/**
5486
+ * @param {?} item
5487
+ * @return {?}
5488
+ */
5489
+ (item) => item !== value));
5490
+ formControl.setValue(modifiedArray);
5491
+ }
5492
+ else {
5493
+ formControl.setValue([...array, value]);
5494
+ }
5495
+ }
5496
+ /**
5497
+ * @param {?} value
5498
+ * @return {?}
5499
+ */
5500
+ isChecked(value) {
5501
+ /** @type {?} */
5502
+ const formControl = this.group.get(this.config.name);
5503
+ return formControl.value && formControl.value.includes(value);
5504
+ }
5505
+ /**
5506
+ * @private
5507
+ * @return {?}
5508
+ */
5509
+ setColumns() {
5510
+ if (this.config.rows && this.config.rows > 1) {
5511
+ /** @type {?} */
5512
+ const array = [];
5513
+ for (let i = 0; i < this.items.length; i += this.config.rows) {
5514
+ /** @type {?} */
5515
+ const arrayChunk = this.items.slice(i, i + this.config.rows);
5516
+ array.push(arrayChunk);
5517
+ }
5518
+ return array;
5519
+ }
5520
+ else {
5521
+ return [this.items];
5522
+ }
5523
+ }
4860
5524
  }
4861
5525
  GovUkCheckboxesComponent.decorators = [
4862
5526
  { type: Component, args: [{
4863
5527
  selector: 'xuilib-gov-uk-checkboxes',
4864
- template: "<xuilib-gov-uk-form-group-wrapper\n[error]=\"errors\"\n[config]=\"options.config\"\n[group]=\"options.key\">\n<div class=\"govuk-checkboxes\">\n <xuilib-gov-checkbox *ngFor=\"let item of options.items\"\n [group]=\"item.group\"\n [config]=\"item.config\">\n </xuilib-gov-checkbox>\n</div>\n</xuilib-gov-uk-form-group-wrapper>"
5528
+ template: "<div class=\"govuk-form-group gov-uk-input\" [formGroup]=\"group\"\n [ngClass]=\"{'govuk-form-group--error': errorMessage?.isInvalid}\">\n\n <xuilib-gov-label [config]=\"config\"></xuilib-gov-label>\n\n <span *ngIf=\"config.hint\" [id]=\"config.id +'-hint'\" class=\"govuk-hint\">\n {{config.hint}}\n </span>\n\n <xuilib-gov-uk-error-message [config]=\"config\" [errorMessage]=\"errorMessage\"></xuilib-gov-uk-error-message>\n\n <div class=\"govuk-checkboxes govuk-checkboxes--small govuk-checkboxes-multi-column\" data-module=\"govuk-checkboxes\">\n <div class=\"govuk-checkboxes-multi-column__single\" *ngFor=\"let columnItems of columns\">\n <div class=\"govuk-checkboxes__item\" *ngFor=\"let item of columnItems\">\n <input type=\"checkbox\" class=\"govuk-checkboxes__input\"\n [id]=\"item.id\" [name]=\"item.id\" [checked]=\"isChecked(item.value)\" [value]=\"item.value\"\n [attr.aria-describedby]=\"setDescribedBy()\"\n (change)=\"onChecked($event.target.checked, item.value)\"\n >\n <label class=\"govuk-label govuk-checkboxes__label\" [for]=\"item.id\">\n {{ item.label }}\n </label>\n <div *ngIf=\"item.hint\" class=\"govuk-hint govuk-checkboxes__hint\">\n {{ item.hint }}\n </div>\n </div>\n </div>\n </div>\n</div>\n",
5529
+ styles: [".govuk-checkboxes-multi-column{display:flex;flex-wrap:wrap;margin-left:-20px;margin-right:-20px}.govuk-checkboxes-multi-column__single{padding-left:20px;padding-right:20px}"]
4865
5530
  }] }
4866
5531
  ];
4867
5532
  GovUkCheckboxesComponent.propDecorators = {
4868
- options: [{ type: Input }],
4869
- errors: [{ type: Input }]
5533
+ group: [{ type: Input }],
5534
+ config: [{ type: Input }],
5535
+ items: [{ type: Input }],
5536
+ errorMessage: [{ type: Input }]
4870
5537
  };
4871
5538
 
4872
5539
  /**
@@ -4993,38 +5660,6 @@ GovUkErrorMessageComponent.propDecorators = {
4993
5660
  errorMessage: [{ type: Input }]
4994
5661
  };
4995
5662
 
4996
- /**
4997
- * @fileoverview added by tsickle
4998
- * Generated from: lib/gov-ui/util/helpers/html-templates.helper.ts
4999
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5000
- */
5001
- /*
5002
- * Helper Class
5003
- * Used for dynamic templates manipulation
5004
- * */
5005
- class HtmlTemplatesHelper {
5006
- /*
5007
- * Sets described by string depending if
5008
- * there is an error, error and hit or nothing
5009
- * */
5010
- /**
5011
- * @param {?} errorMessage
5012
- * @param {?} config
5013
- * @return {?}
5014
- */
5015
- static setDescribedBy(errorMessage, config) {
5016
- if (!errorMessage) {
5017
- return config.hint ? `${config.id}-hint` : null;
5018
- }
5019
- else if (errorMessage && errorMessage.isInvalid) {
5020
- return config.hint ? `${config.id}-hint ${config.id}-error` : `${config.id}-error`;
5021
- }
5022
- else {
5023
- return config.hint ? `${config.id}-hint` : null;
5024
- }
5025
- }
5026
- }
5027
-
5028
5663
  /**
5029
5664
  * @fileoverview added by tsickle
5030
5665
  * Generated from: lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.ts
@@ -5151,7 +5786,7 @@ class GovUkInputComponent {
5151
5786
  * @return {?}
5152
5787
  */
5153
5788
  ngOnInit() {
5154
- this.config.classes = 'govuk-label--m';
5789
+ this.config.classes = typeof (this.config.classes) === 'string' ? this.config.classes : 'govuk-label govuk-label--m';
5155
5790
  }
5156
5791
  /**
5157
5792
  * @return {?}
@@ -5163,7 +5798,7 @@ class GovUkInputComponent {
5163
5798
  GovUkInputComponent.decorators = [
5164
5799
  { type: Component, args: [{
5165
5800
  selector: 'xuilib-gov-uk-input',
5166
- template: "<div class=\"govuk-form-group gov-uk-input\" [formGroup]=\"group\"\n[ngClass]=\"{'govuk-form-group--error': errorMessage?.isInvalid}\">\n\n<xuilib-gov-label [config]=\"config\"></xuilib-gov-label>\n\n<span *ngIf=\"config.hint\" [id]=\"config.id +'-hint'\" class=\"govuk-hint\">\n {{config.hint}}\n</span>\n\n<xuilib-gov-uk-error-message [config]=\"config\" [errorMessage]=\"errorMessage\"></xuilib-gov-uk-error-message>\n\n<input class=\"govuk-input\"\n [ngClass]=\"{'govuk-input--error': errorMessage?.isInvalid}\"\n [id]=\"config.id\"\n [name]=\"config.name\"\n [type]=\"config.type\"\n [attr.aria-invalid]=\"errorMessage?.isInvalid\"\n [formControlName]=\"config.name\"\n [attr.aria-describedby]='setDescribedBy()'>\n</div>\n",
5801
+ template: "<div class=\"govuk-form-group gov-uk-input\" [formGroup]=\"group\"\n[ngClass]=\"{'govuk-form-group--error': errorMessage?.isInvalid}\">\n\n<xuilib-gov-label [config]=\"config\"></xuilib-gov-label>\n\n<span *ngIf=\"config.hint\" [id]=\"config.id +'-hint'\" class=\"govuk-hint\">\n {{config.hint}}\n</span>\n\n<xuilib-gov-uk-error-message [config]=\"config\" [errorMessage]=\"errorMessage\"></xuilib-gov-uk-error-message>\n\n<input class=\"govuk-input\"\n [class.govuk-!-width-full]=\"config.fullWidth\"\n [ngClass]=\"{'govuk-input--error': errorMessage?.isInvalid}\"\n [id]=\"config.id\"\n [name]=\"config.name\"\n [type]=\"config.type\"\n [attr.aria-invalid]=\"errorMessage?.isInvalid\"\n [formControlName]=\"config.name\"\n [attr.aria-describedby]='setDescribedBy()'>\n</div>\n",
5167
5802
  styles: [".gov-uk-input input:disabled{background:#b1b4b6}"]
5168
5803
  }] }
5169
5804
  ];
@@ -5192,7 +5827,8 @@ class GovUkLabelComponent {
5192
5827
  GovUkLabelComponent.decorators = [
5193
5828
  { type: Component, args: [{
5194
5829
  selector: 'xuilib-gov-label',
5195
- template: "<h1 *ngIf=\"config.isPageHeading else noHeading\">\n <label *ngIf=\"config.label\" [class]=\"config.classes + ' govuk-label'\"\n [for]=\"config.id\" [innerHTML]=\"config.label\">\n </label>\n</h1>\n<ng-template #noHeading>\n <label *ngIf=\"config.label\" [class]=\"config.classes + ' govuk-label'\"\n [for]=\"config.id\" [innerHTML]=\"config.label\">\n </label>\n</ng-template>"
5830
+ template: "<h1 *ngIf=\"config.isPageHeading else noHeading\">\n <label *ngIf=\"config.label\" [for]=\"config.id\" [class]=\"config.classes + ' govuk-label'\">\n <span>{{ config.label }}</span>\n <span class=\"govuk-label__optional\" *ngIf=\"config.optional\">(optional)</span>\n </label>\n</h1>\n<ng-template #noHeading>\n <label *ngIf=\"config.label\" [for]=\"config.id\" [class]=\"config.classes + ' govuk-label'\">\n <span>{{ config.label }}</span>\n <span class=\"govuk-label__optional\" *ngIf=\"config.optional\">(optional)</span>\n </label>\n</ng-template>\n",
5831
+ styles: [".govuk-label{display:flex;align-items:center;flex-wrap:wrap}.govuk-label__optional{font-weight:400;font-size:16px;display:inline-block;margin-left:.75rem}"]
5196
5832
  }] }
5197
5833
  ];
5198
5834
  /** @nocollapse */
@@ -5288,7 +5924,7 @@ class GovUkSelectComponent {
5288
5924
  GovUkSelectComponent.decorators = [
5289
5925
  { type: Component, args: [{
5290
5926
  selector: 'xuilib-gov-select',
5291
- template: "<div class=\"govuk-form-group\" [formGroup]=\"group\"\n[ngClass]=\"{'govuk-form-group--error': errorMessage?.isInvalid}\">\n<xuilib-gov-label [config]=\"config\"></xuilib-gov-label>\n<span *ngIf=\"config.hint\" [id]=\"config.id +'-hint'\" class=\"govuk-hint\">\n {{config.hint}}\n</span>\n<xuilib-gov-uk-error-message [config]=\"config\" [errorMessage]=\"errorMessage\"></xuilib-gov-uk-error-message>\n\n<select class=\"govuk-select\" [id]=\"config.id\" [name]=\"config.id\" [formControlName]=\"config.id\" [attr.aria-describedby]='setDescribedBy()'>\n<option value=\"{{item.value}}\" *ngFor=\"let item of items\">{{item.label}}</option>\n</select>\n</div>"
5927
+ template: "<div class=\"govuk-form-group\" [formGroup]=\"group\"\n[ngClass]=\"{'govuk-form-group--error': errorMessage?.isInvalid}\">\n<xuilib-gov-label [config]=\"config\"></xuilib-gov-label>\n<span *ngIf=\"config.hint\" [id]=\"config.id +'-hint'\" class=\"govuk-hint\">\n {{config.hint}}\n</span>\n<xuilib-gov-uk-error-message [config]=\"config\" [errorMessage]=\"errorMessage\"></xuilib-gov-uk-error-message>\n\n<select class=\"govuk-select\"\n [class.govuk-!-width-full]=\"config.fullWidth\"\n [id]=\"config.id\" [name]=\"config.id\" [formControlName]=\"config.id\" [attr.aria-describedby]='setDescribedBy()'>\n <option value=\"{{item.value}}\" *ngFor=\"let item of items\">{{item.label}}</option>\n</select>\n</div>\n"
5292
5928
  }] }
5293
5929
  ];
5294
5930
  /** @nocollapse */
@@ -5377,27 +6013,26 @@ GovUkTextareaComponent.propDecorators = {
5377
6013
  * Generated from: lib/gov-ui/components/hmcts-banner/hmcts-banner.component.ts
5378
6014
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5379
6015
  */
5380
- /*
5381
- * Hmcts Banner
5382
- * Responsible for displaying prominent message and related actions
5383
- * @prop message to display
5384
- * @prop type
5385
- * */
5386
6016
  class HmctsBannerComponent {
5387
- constructor() { }
6017
+ constructor() {
6018
+ this.title = '';
6019
+ this.showMessageIcon = false;
6020
+ this.messageBoldText = false;
6021
+ }
5388
6022
  }
5389
6023
  HmctsBannerComponent.decorators = [
5390
6024
  { type: Component, args: [{
5391
6025
  selector: 'xuilib-hmcts-banner',
5392
- template: "<div class=\"hmcts-banner hmcts-banner--{{type}}\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\" /></svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">{{type}}</span>\n {{message}}\n </div>\n</div>",
5393
- styles: [":host{display:block;width:100%}"]
6026
+ template: "<ng-container *ngIf=\"message && type\">\n <div *ngIf=\"title\"\n class=\"hmcts-banner-title hmcts-banner-title--{{ type }}\">\n {{ title }}\n </div>\n <div class=\"hmcts-banner hmcts-banner--{{ type }}\">\n <ng-container *ngIf=\"showMessageIcon\">\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'warning'\">\n <svg class=\"hmcts-banner__icon hmcts-banner__icon--warning\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'success'\">\n <svg class=\"hmcts-banner__icon hmcts-banner__icon--success\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'information'\">\n <svg class=\"hmcts-banner__icon hmcts-banner__icon--information\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"hmcts-banner__message\" [class.hmcts-banner__message--bold]=\"messageBoldText\">\n <span class=\"hmcts-banner__assistive\">{{ type }}</span>\n <span class=\"hmcts-banner__message-text govuk-!-font-weight-bold\">{{ message }}</span>\n </div>\n </div>\n</ng-container>\n",
6027
+ styles: [".hmcts-banner-title{color:#fff;background-color:#1d70b8;font-weight:700;padding:10px 15px 5px}.hmcts-banner-title--success{background-color:#00703c}.hmcts-banner-title--warning{background-color:#d4351c}.hmcts-banner__message--bold{font-weight:700}"]
5394
6028
  }] }
5395
6029
  ];
5396
- /** @nocollapse */
5397
- HmctsBannerComponent.ctorParameters = () => [];
5398
6030
  HmctsBannerComponent.propDecorators = {
6031
+ message: [{ type: Input }],
5399
6032
  type: [{ type: Input }],
5400
- message: [{ type: Input }]
6033
+ title: [{ type: Input }],
6034
+ showMessageIcon: [{ type: Input }],
6035
+ messageBoldText: [{ type: Input }]
5401
6036
  };
5402
6037
 
5403
6038
  /**
@@ -5544,7 +6179,7 @@ class HmctsMainWrapperComponent {
5544
6179
  HmctsMainWrapperComponent.decorators = [
5545
6180
  { type: Component, args: [{
5546
6181
  selector: 'xuilib-hmcts-main-wrapper',
5547
- template: "<a *ngIf=\"hasBackLink\" [routerLink]=\"backLink\" (click)=\"onGoBack()\" class=\"govuk-back-link\">Back</a>\n<main id=\"content\" role=\"main\" class=\"govuk-main-wrapper\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <xuilib-hmcts-error-summary\n *ngIf=\"summaryErrors && !summaryErrors.isFromValid\"\n [errorMessages]=\"summaryErrors.items\"\n [header]=\"summaryErrors.header\"\n [showWarningMessage]=\"showWarningMessage\">\n </xuilib-hmcts-error-summary>\n <xuilib-hmcts-banner *ngIf=\"bannerData\" [message]=\"bannerData.message\" [type]=\"bannerData.type\"></xuilib-hmcts-banner>\n <h1 *ngIf=\"title\" class=\"govuk-heading-xl\">{{title}}</h1>\n <ng-content></ng-content>\n </div>\n <div class=\"govuk-grid-column-one-third\" *ngIf=\"actionButtons?.length > 0\">\n <div class=\"hmcts-page-heading__actions-wrapper\">\n <a\n *ngFor=\"let actionButton of actionButtons\"\n (click)=\"actionButton.action()\"\n role=\"button\"\n draggable=\"false\"\n class=\"govuk-button {{ actionButton.class }}\"\n >{{ actionButton.name }}</a>\n </div>\n </div>\n </div>\n</main>\n"
6182
+ template: "<a *ngIf=\"hasBackLink\" [routerLink]=\"backLink\" (click)=\"onGoBack()\" class=\"govuk-back-link\">Back</a>\n<main id=\"content\" role=\"main\" class=\"govuk-main-wrapper\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <xuilib-hmcts-error-summary\n *ngIf=\"summaryErrors && !summaryErrors.isFromValid\"\n [errorMessages]=\"summaryErrors.items\"\n [header]=\"summaryErrors.header\"\n [showWarningMessage]=\"showWarningMessage\">\n </xuilib-hmcts-error-summary>\n <xuilib-hmcts-banner *ngIf=\"bannerData\"\n [type]=\"bannerData.type\"\n [message]=\"bannerData.message\"\n ></xuilib-hmcts-banner>\n <h1 *ngIf=\"title\" class=\"govuk-heading-xl\">{{title}}</h1>\n <ng-content></ng-content>\n </div>\n <div class=\"govuk-grid-column-one-third\" *ngIf=\"actionButtons?.length > 0\">\n <div class=\"hmcts-page-heading__actions-wrapper\">\n <a\n *ngFor=\"let actionButton of actionButtons\"\n (click)=\"actionButton.action()\"\n role=\"button\"\n draggable=\"false\"\n class=\"govuk-button {{ actionButton.class }}\"\n >{{ actionButton.name }}</a>\n </div>\n </div>\n </div>\n</main>\n"
5548
6183
  }] }
5549
6184
  ];
5550
6185
  /** @nocollapse */
@@ -5684,6 +6319,26 @@ RemoveHostDirective.ctorParameters = () => [
5684
6319
  { type: ElementRef }
5685
6320
  ];
5686
6321
 
6322
+ /**
6323
+ * @fileoverview added by tsickle
6324
+ * Generated from: lib/pipes/capitalize.pipe.ts
6325
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6326
+ */
6327
+ class CapitalizePipe {
6328
+ /**
6329
+ * @param {?} value
6330
+ * @return {?}
6331
+ */
6332
+ transform(value) {
6333
+ /** @type {?} */
6334
+ const lowerCaseString = value.toLowerCase();
6335
+ return lowerCaseString.charAt(0).toUpperCase() + lowerCaseString.slice(1);
6336
+ }
6337
+ }
6338
+ CapitalizePipe.decorators = [
6339
+ { type: Pipe, args: [{ name: 'capitalize' },] }
6340
+ ];
6341
+
5687
6342
  /**
5688
6343
  * @fileoverview added by tsickle
5689
6344
  * Generated from: lib/exui-common-lib.module.ts
@@ -5722,6 +6377,7 @@ const COMMON_COMPONENTS = [
5722
6377
  FindPersonComponent,
5723
6378
  SearchJudicialsComponent,
5724
6379
  FindLocationComponent,
6380
+ FindTaskNameComponent,
5725
6381
  SearchLocationComponent,
5726
6382
  FindServiceComponent,
5727
6383
  SearchServiceComponent,
@@ -5753,6 +6409,10 @@ const GOV_UI_COMPONENTS = [
5753
6409
  GovUkFileUploadComponent,
5754
6410
  RemoveHostDirective
5755
6411
  ];
6412
+ /** @type {?} */
6413
+ const pipes = [
6414
+ CapitalizePipe
6415
+ ];
5756
6416
  const ɵ0 = windowProvider;
5757
6417
  class ExuiCommonLibModule {
5758
6418
  }
@@ -5760,7 +6420,8 @@ ExuiCommonLibModule.decorators = [
5760
6420
  { type: NgModule, args: [{
5761
6421
  declarations: [
5762
6422
  ...COMMON_COMPONENTS,
5763
- ...GOV_UI_COMPONENTS
6423
+ ...GOV_UI_COMPONENTS,
6424
+ ...pipes
5764
6425
  ],
5765
6426
  imports: [
5766
6427
  CommonModule,
@@ -5778,7 +6439,8 @@ ExuiCommonLibModule.decorators = [
5778
6439
  exports: [
5779
6440
  ...COMMON_COMPONENTS,
5780
6441
  ...GOV_UI_COMPONENTS,
5781
- PaginatePipe
6442
+ PaginatePipe,
6443
+ ...pipes
5782
6444
  ]
5783
6445
  },] }
5784
6446
  ];
@@ -6487,20 +7149,19 @@ TimeoutNotificationsService.ctorParameters = () => [
6487
7149
  */
6488
7150
  class RoleService {
6489
7151
  constructor() {
6490
- this.pRoles = [];
6491
- }
6492
- /**
6493
- * @return {?}
6494
- */
6495
- get roles() {
6496
- return this.pRoles;
7152
+ this.pRoles = new BehaviorSubject(null);
7153
+ this.roles$ = this.pRoles.asObservable().pipe(skipWhile((/**
7154
+ * @param {?} item
7155
+ * @return {?}
7156
+ */
7157
+ item => item === null)));
6497
7158
  }
6498
7159
  /**
6499
7160
  * @param {?} roles
6500
7161
  * @return {?}
6501
7162
  */
6502
7163
  set roles(roles) {
6503
- this.pRoles = roles;
7164
+ this.pRoles.next(roles);
6504
7165
  }
6505
7166
  }
6506
7167
  RoleService.decorators = [
@@ -6536,25 +7197,31 @@ class RoleGuard {
6536
7197
  * @return {?}
6537
7198
  */
6538
7199
  canActivate(route) {
6539
- /** @type {?} */
6540
- const roles = ((/** @type {?} */ (route.data.needsRole)));
6541
- /** @type {?} */
6542
- const check = (/**
6543
- * @param {?} roleRegEx
7200
+ return this.roleService.roles$.pipe(map((/**
7201
+ * @param {?} roles
6544
7202
  * @return {?}
6545
7203
  */
6546
- (roleRegEx) => {
7204
+ roles => {
6547
7205
  /** @type {?} */
6548
- const regex = new RegExp(roleRegEx);
6549
- return this.roleService.roles.some((/**
6550
- * @param {?} role
7206
+ const canActivateRoles = ((/** @type {?} */ (route.data.needsRole)));
7207
+ /** @type {?} */
7208
+ const check = (/**
7209
+ * @param {?} roleRegEx
6551
7210
  * @return {?}
6552
7211
  */
6553
- role => regex.test(role)));
6554
- });
6555
- /** @type {?} */
6556
- const match = route.data.roleMatching === RoleMatching.ALL ? roles.every(check) : roles.some(check);
6557
- return match || this.router.parseUrl((/** @type {?} */ (route.data.noRoleMatchRedirect)));
7212
+ (roleRegEx) => {
7213
+ /** @type {?} */
7214
+ const regex = new RegExp(roleRegEx);
7215
+ return roles.some((/**
7216
+ * @param {?} role
7217
+ * @return {?}
7218
+ */
7219
+ role => regex.test(role)));
7220
+ });
7221
+ /** @type {?} */
7222
+ const match = route.data.roleMatching === RoleMatching.ALL ? canActivateRoles.every(check) : canActivateRoles.some(check);
7223
+ return match || this.router.parseUrl((/** @type {?} */ (route.data.noRoleMatchRedirect)));
7224
+ })));
6558
7225
  }
6559
7226
  }
6560
7227
  RoleGuard.decorators = [
@@ -6655,6 +7322,6 @@ LoadingService.decorators = [
6655
7322
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6656
7323
  */
6657
7324
 
6658
- export { AccessibilityComponent, CheckboxListComponent, ContactDetailsComponent, DueDateComponent, GenericFilterComponent, HmctsSessionDialogComponent, InviteUserFormComponent, InviteUserPermissionComponent, LoadingSpinnerComponent, SelectedCaseConfirmComponent, SelectedCaseListComponent, SelectedCaseComponent, ServiceMessageComponent, ServiceMessagesComponent, ShareCaseConfirmComponent, ShareCaseComponent, TabComponent, TcConfirmComponent, TcDisplayHtmlComponent, TcDisplayPlainComponent, TermsAndConditionsComponent, UserDetailsComponent, UserListComponent, CookieBannerComponent, FindLocationComponent, SearchLocationComponent, PaginationComponent, FeatureToggleDirective, LetContext, LetDirective, COMMON_COMPONENTS, GOV_UI_COMPONENTS, ExuiCommonLibModule, GovUiService, checkboxesBeCheckedValidator, dateValidator, radioGroupValidator, HmctsSubNavigationComponent, SharedCaseErrorMessages, BadgeColour, DateBadgeColour, SECONDS_IN_A_DAY, AnonymousFeatureUser, LoggedInFeatureUser, BookingCheckType, PersonRole, RoleCategory, RadioFilterFieldConfig, FeatureToggleGuard, FeatureToggleService, LaunchDarklyService, GoogleAnalyticsService, GoogleTagManagerService, ManageSessionServices, TimeoutNotificationsService, RoleMatching, RoleGuard, RoleService, CookieService, HasLoadingState, LoadingService, FilterService, windowProvider, windowToken, AccessibilityComponent as ɵx, CheckboxListComponent as ɵz, ContactDetailsComponent as ɵf, CookieBannerComponent as ɵbf, DueDateComponent as ɵy, ExuiPageWrapperComponent as ɵa, FindLocationComponent as ɵbl, FindPersonComponent as ɵbh, FindServiceComponent as ɵbo, GenericFilterComponent as ɵbd, HmctsSessionDialogComponent as ɵk, InviteUserFormComponent as ɵo, InviteUserPermissionComponent as ɵn, LoadingSpinnerComponent as ɵbc, PaginationComponent as ɵbr, SearchJudicialsComponent as ɵbk, SearchLocationComponent as ɵbm, SearchServiceComponent as ɵbp, SearchVenueComponent as ɵbq, SelectedCaseConfirmComponent as ɵv, SelectedCaseListComponent as ɵt, SelectedCaseComponent as ɵu, ServiceMessageComponent as ɵba, ServiceMessagesComponent as ɵbb, ShareCaseConfirmComponent as ɵs, ShareCaseComponent as ɵp, TabComponent as ɵw, TcConfirmComponent as ɵe, TcDisplayHtmlComponent as ɵc, TcDisplayPlainComponent as ɵd, TermsAndConditionsComponent as ɵb, UserDetailsComponent as ɵm, UserListComponent as ɵl, UserSelectComponent as ɵq, FeatureToggleDirective as ɵg, LetContext as ɵi, LetDirective as ɵj, GovUkCheckboxComponent as ɵcb, GovUkCheckboxesComponent as ɵch, GovUkDateComponent as ɵcg, GovUkErrorMessageComponent as ɵce, GovUkFieldsetComponent as ɵcf, GovUkFileUploadComponent as ɵcm, GovUkFormGroupWrapperComponent as ɵcc, GovUkInputComponent as ɵca, GovUkLabelComponent as ɵcd, GovUkRadioComponent as ɵci, GovUkRadiosComponent as ɵcj, GovUkSelectComponent as ɵck, GovukTableComponent as ɵbz, GovUkTextareaComponent as ɵcl, HmctsBannerComponent as ɵby, HmctsErrorSummaryComponent as ɵbw, HmctsIdentityBarComponent as ɵbs, HmctsMainWrapperComponent as ɵbx, HmctsPaginationComponent as ɵbt, HmctsPrimaryNavigationComponent as ɵbv, HmctsSubNavigationComponent as ɵbu, RemoveHostDirective as ɵcn, CaseSharingStateService as ɵr, CookieService as ɵbg, FeatureToggleService as ɵh, FilterService as ɵbe, FindAPersonService as ɵbi, LocationService as ɵbn, SessionStorageService as ɵbj };
7325
+ export { AccessibilityComponent, CheckboxListComponent, ContactDetailsComponent, DueDateComponent, GenericFilterComponent, HmctsSessionDialogComponent, InviteUserFormComponent, InviteUserPermissionComponent, LoadingSpinnerComponent, SelectedCaseConfirmComponent, SelectedCaseListComponent, SelectedCaseComponent, ServiceMessageComponent, ServiceMessagesComponent, ShareCaseConfirmComponent, ShareCaseComponent, TabComponent, TcConfirmComponent, TcDisplayHtmlComponent, TcDisplayPlainComponent, TermsAndConditionsComponent, UserDetailsComponent, UserListComponent, CookieBannerComponent, FindLocationComponent, SearchLocationComponent, PaginationComponent, FeatureToggleDirective, LetContext, LetDirective, COMMON_COMPONENTS, GOV_UI_COMPONENTS, ExuiCommonLibModule, GovUiService, checkboxesBeCheckedValidator, dateValidator, radioGroupValidator, HmctsSubNavigationComponent, HmctsBannerComponent, SharedCaseErrorMessages, BadgeColour, DateBadgeColour, SECONDS_IN_A_DAY, AnonymousFeatureUser, LoggedInFeatureUser, RadioFilterFieldConfig, BookingCheckType, PersonRole, RoleCategory, FeatureToggleGuard, FeatureToggleService, LaunchDarklyService, GoogleAnalyticsService, GoogleTagManagerService, ManageSessionServices, TimeoutNotificationsService, RoleMatching, RoleGuard, RoleService, CookieService, HasLoadingState, LoadingService, FilterService, windowProvider, windowToken, AccessibilityComponent as ɵx, CheckboxListComponent as ɵz, ContactDetailsComponent as ɵf, CookieBannerComponent as ɵbf, DueDateComponent as ɵy, ExuiPageWrapperComponent as ɵa, FindLocationComponent as ɵbl, FindPersonComponent as ɵbh, FindServiceComponent as ɵbq, FindTaskNameComponent as ɵbo, GenericFilterComponent as ɵbd, HmctsSessionDialogComponent as ɵk, InviteUserFormComponent as ɵo, InviteUserPermissionComponent as ɵn, LoadingSpinnerComponent as ɵbc, PaginationComponent as ɵbt, SearchJudicialsComponent as ɵbk, SearchLocationComponent as ɵbm, SearchServiceComponent as ɵbr, SearchVenueComponent as ɵbs, SelectedCaseConfirmComponent as ɵv, SelectedCaseListComponent as ɵt, SelectedCaseComponent as ɵu, ServiceMessageComponent as ɵba, ServiceMessagesComponent as ɵbb, ShareCaseConfirmComponent as ɵs, ShareCaseComponent as ɵp, TabComponent as ɵw, TcConfirmComponent as ɵe, TcDisplayHtmlComponent as ɵc, TcDisplayPlainComponent as ɵd, TermsAndConditionsComponent as ɵb, UserDetailsComponent as ɵm, UserListComponent as ɵl, UserSelectComponent as ɵq, FeatureToggleDirective as ɵg, LetContext as ɵi, LetDirective as ɵj, GovUkCheckboxComponent as ɵcd, GovUkCheckboxesComponent as ɵcj, GovUkDateComponent as ɵci, GovUkErrorMessageComponent as ɵcg, GovUkFieldsetComponent as ɵch, GovUkFileUploadComponent as ɵco, GovUkFormGroupWrapperComponent as ɵce, GovUkInputComponent as ɵcc, GovUkLabelComponent as ɵcf, GovUkRadioComponent as ɵck, GovUkRadiosComponent as ɵcl, GovUkSelectComponent as ɵcm, GovukTableComponent as ɵcb, GovUkTextareaComponent as ɵcn, HmctsBannerComponent as ɵca, HmctsErrorSummaryComponent as ɵby, HmctsIdentityBarComponent as ɵbu, HmctsMainWrapperComponent as ɵbz, HmctsPaginationComponent as ɵbv, HmctsPrimaryNavigationComponent as ɵbx, HmctsSubNavigationComponent as ɵbw, RemoveHostDirective as ɵcp, CapitalizePipe as ɵcq, CaseSharingStateService as ɵr, CookieService as ɵbg, FeatureToggleService as ɵh, FilterService as ɵbe, FindAPersonService as ɵbi, LocationService as ɵbn, SessionStorageService as ɵbj, TaskNameService as ɵbp };
6659
7326
 
6660
7327
  //# sourceMappingURL=hmcts-rpx-xui-common-lib.js.map