@hmcts/rpx-xui-common-lib 2.1.3-angular-upgrade-11 → 2.1.6-angular-upgrade-11

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 (48) hide show
  1. package/bundles/hmcts-rpx-xui-common-lib.umd.js +607 -392
  2. package/bundles/hmcts-rpx-xui-common-lib.umd.js.map +1 -1
  3. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js +1 -1
  4. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-rpx-xui-common-lib.js +27 -26
  6. package/esm2015/lib/components/accessibility/accessibility.component.js +2 -2
  7. package/esm2015/lib/components/find-location/find-location.component.js +6 -2
  8. package/esm2015/lib/components/find-person/find-person.component.js +3 -3
  9. package/esm2015/lib/components/find-service/find-service.component.js +31 -0
  10. package/esm2015/lib/components/generic-filter/generic-filter.component.js +16 -10
  11. package/esm2015/lib/components/search-judicials/search-judicials.component.js +3 -3
  12. package/esm2015/lib/components/search-location/search-location.component.js +22 -3
  13. package/esm2015/lib/components/search-service/search-service.component.js +31 -0
  14. package/esm2015/lib/components/selected-case/selected-case.component.js +5 -7
  15. package/esm2015/lib/components/selected-case-confirm/selected-case-confirm.component.js +1 -1
  16. package/esm2015/lib/components/selected-case-list/selected-case-list.component.js +7 -3
  17. package/esm2015/lib/components/share-case/share-case.component.js +127 -13
  18. package/esm2015/lib/exui-common-lib.module.js +5 -17
  19. package/esm2015/lib/models/case-share.model.js +7 -2
  20. package/esm2015/lib/models/filter.model.js +1 -1
  21. package/esm2015/lib/models/index.js +2 -1
  22. package/esm2015/lib/models/location.model.js +7 -2
  23. package/esm2015/lib/models/person.model.js +3 -1
  24. package/esm2015/lib/services/case-sharing-state/case-sharing-state.service.js +28 -14
  25. package/esm2015/lib/services/find-person/find-person.service.js +3 -3
  26. package/esm2015/lib/services/locations/location.service.js +3 -3
  27. package/esm2015/lib/services/public-api.js +1 -5
  28. package/fesm2015/hmcts-rpx-xui-common-lib.js +525 -310
  29. package/fesm2015/hmcts-rpx-xui-common-lib.js.map +1 -1
  30. package/hmcts-rpx-xui-common-lib.d.ts +26 -25
  31. package/hmcts-rpx-xui-common-lib.metadata.json +1 -1
  32. package/lib/components/find-location/find-location.component.d.ts +3 -2
  33. package/lib/components/find-service/find-service.component.d.ts +14 -0
  34. package/lib/components/search-location/search-location.component.d.ts +5 -2
  35. package/lib/components/search-service/search-service.component.d.ts +13 -0
  36. package/lib/components/selected-case/selected-case.component.d.ts +1 -1
  37. package/lib/components/selected-case-list/selected-case-list.component.d.ts +1 -0
  38. package/lib/components/share-case/share-case.component.d.ts +37 -2
  39. package/lib/exui-common-lib.module.d.ts +0 -2
  40. package/lib/models/case-share.model.d.ts +5 -0
  41. package/lib/models/filter.model.d.ts +4 -1
  42. package/lib/models/index.d.ts +1 -0
  43. package/lib/models/location.model.d.ts +11 -0
  44. package/lib/models/person.model.d.ts +3 -0
  45. package/lib/services/case-sharing-state/case-sharing-state.service.d.ts +1 -1
  46. package/lib/services/locations/location.service.d.ts +2 -2
  47. package/lib/services/public-api.d.ts +0 -4
  48. package/package.json +4 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@angular/common/http'), require('@angular/material/autocomplete'), require('@angular/material/input'), require('@angular/material/tabs'), require('@angular/router'), require('ngx-pagination'), require('launchdarkly-js-client-sdk'), require('@angular/platform-browser'), require('@ng-idle/core'), require('@ng-idle/keepalive')) :
3
- typeof define === 'function' && define.amd ? define('@hmcts/rpx-xui-common-lib', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'rxjs', 'rxjs/operators', '@angular/common/http', '@angular/material/autocomplete', '@angular/material/input', '@angular/material/tabs', '@angular/router', 'ngx-pagination', 'launchdarkly-js-client-sdk', '@angular/platform-browser', '@ng-idle/core', '@ng-idle/keepalive'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.hmcts = global.hmcts || {}, global.hmcts["rpx-xui-common-lib"] = {}), global.ng.core, global.ng.common, global.ng.forms, global.rxjs, global.rxjs.operators, global.ng.common.http, global.ng.material.autocomplete, global.ng.material.input, global.ng.material.tabs, global.ng.router, global.ngxPagination, global.LDClient, global.ng.platformBrowser, global.i1$2, global.i2$1));
5
- })(this, (function (exports, i0, i4, forms, rxjs, operators, i1, autocomplete, input, tabs, i1$1, ngxPagination, LDClient, i2, i1$2, i2$1) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@angular/router'), require('@angular/common/http'), require('@angular/material/autocomplete'), require('@angular/material/input'), require('@angular/material/tabs'), require('ngx-pagination'), require('launchdarkly-js-client-sdk'), require('@angular/platform-browser'), require('@ng-idle/core'), require('@ng-idle/keepalive')) :
3
+ typeof define === 'function' && define.amd ? define('@hmcts/rpx-xui-common-lib', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'rxjs', 'rxjs/operators', '@angular/router', '@angular/common/http', '@angular/material/autocomplete', '@angular/material/input', '@angular/material/tabs', 'ngx-pagination', 'launchdarkly-js-client-sdk', '@angular/platform-browser', '@ng-idle/core', '@ng-idle/keepalive'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.hmcts = global.hmcts || {}, global.hmcts["rpx-xui-common-lib"] = {}), global.ng.core, global.ng.common, global.ng.forms, global.rxjs, global.rxjs.operators, global.ng.router, global.ng.common.http, global.ng.material.autocomplete, global.ng.material.input, global.ng.material.tabs, global.ngxPagination, global.LDClient, global.ng.platformBrowser, global.i1$2, global.i2$1));
5
+ })(this, (function (exports, i0, i4, forms, rxjs, operators, i1, i1$1, autocomplete, input, tabs, ngxPagination, LDClient, i2, i1$2, i2$1) { 'use strict';
6
6
 
7
7
  function _interopNamespace(e) {
8
8
  if (e && e.__esModule) return e;
@@ -24,8 +24,8 @@
24
24
 
25
25
  var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
26
26
  var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
27
- var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
28
- var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$1);
27
+ var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1);
28
+ var i1__namespace = /*#__PURE__*/_interopNamespace(i1$1);
29
29
  var LDClient__namespace = /*#__PURE__*/_interopNamespace(LDClient);
30
30
  var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
31
31
  var i1__namespace$2 = /*#__PURE__*/_interopNamespace(i1$2);
@@ -39,7 +39,7 @@
39
39
  AccessibilityComponent.decorators = [
40
40
  { type: i0.Component, args: [{
41
41
  selector: 'xuilib-accessibility',
42
- template: "<h1 class=\"govuk-heading-xl\" id=\"Accessibility-statement-for-Expert-UI\">Accessibility statement for Expert UI</h1>\n\n<ul class=\"govuk-list\">\n <li><a href=\"accessibility#immigration\">Immigration and Asylum</a></li>\n <li><a href=\"accessibility#family\">Family Public Law </a></li>\n</ul>\n\n<p class=\"govuk-body\">This website is run by HM Courts & Tribunals Service. We want as many people as possible to be\n able to use this website. For example, you should be able to:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>change colours, contrast levels and fonts</li>\n <li>zoom in up to 300% without the text spilling off the screen</li>\n <li>navigate most of the website using just a keyboard</li>\n <li>navigate most of the website using speech recognition software</li>\n <li>listen to most of the website using a screen reader (including the most recent versions of JAWS, NVDA and\n VoiceOver)\n </li>\n</ul>\n\n<p class=\"govuk-body\">We\u2019ve also made the website text as simple as possible to understand.</p>\n\n<p class=\"govuk-body\"><a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://mcmw.abilitynet.org.uk/\">AbilityNet</a>\n has advice on making your device easier to use if you have a disability.</p>\n\n<h2 class=\"govuk-heading-l\" id=\"How-accessible-this-website-is\">How accessible this website is</h2>\n\n<p class=\"govuk-body\">We know some parts of the website are not fully accessible:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>some pages are difficult to navigate using just a keyboard</li>\n <li>some pages can\u2019t be listened to in full using a screen reader</li>\n <li>some pages have problems with colour contrasts between text and background</li>\n <li>some PDFs may not be fully accessible to a screen reader</li>\n</ul>\n\n<h2 class=\"govuk-heading-l\" id=\"What-to-do-if-you-cannot-access-parts-of-this-website\">Feedback and contact\n information</h2>\n\n<p class=\"govuk-body\">If you need information on this website in a different format like accessible PDF, large print,\n easy read, audio recording or braille, you can:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>email: <a href=\"mailto:HMCTSforms@justice.gov.uk\"> HMCTSforms@justice.gov.uk</a></li>\n <li>call: +44 (0) 300 123 1711</li>\n <li>contact your service representative</li>\n</ul>\n\n<p class=\"govuk-body\">We\u2019ll consider your request and get back to you in 10 working days.</p>\n\n<h2 class=\"govuk-heading-l\" id=\"Reporting-accessibility-problems-with-this-website\">Reporting accessibility problems\n with this website</h2>\n\n<p class=\"govuk-body\">We\u2019re always looking to improve the accessibility of this website. If you find any problems not\n listed on this page or think we\u2019re not meeting accessibility requirements, contact:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>email: <a href=\"mailto:customer.service@justice.gov.uk\"> customer.service@justice.gov.uk</a></li>\n <li>telephone: +44 (0) 300 123 1711</li>\n</ul>\n\n<h2 class=\"govuk-heading-l\" id=\"Enforcement-procedure \">Enforcement procedure</h2>\n\n<p class=\"govuk-body\">The Equality and Human Rights Commission (EHRC) is responsible for enforcing the Public Sector\n Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018 (the \u2018accessibility\n regulations\u2019). </p>\n\n<p class=\"govuk-body\">If you\u2019re not happy with how we respond to your complaint, <a rel=\"noopener noreferrer\"\n target=\"_blank\"\n href=\"https://www.equalityadvisoryservice.com/\">contact\n the Equality Advisory and Support Service (EASS).</a></p>\n\n<h1 class=\"govuk-heading-l\" id=\"Contacting-us-by-phone-or-visiting-us-in-person\">Contacting us by phone or visiting us\n in person</h1>\n\n<p class=\"govuk-body\">We provide a text relay service for people who are D/deaf, hearing impaired or have a speech\n impediment.</p>\n\n<p class=\"govuk-body\">Our offices and tribunal venues have audio induction loops, or if you contact us before your visit\n we can arrange a British Sign Language (BSL) interpreter. You can also request step-free access or a foreign language\n interpreter.</p>\n\n<p class=\"govuk-body\">If you have a question about accessibility in our Tribunal venues, you can contact the First-tier\n Tribunal enquiry line: +44 (0) 300 123 1711. You can <a target=\"_blank\"\n href=\"https://courttribunalfinder.service.gov.uk/search/\">find\n the contact details for court and tribunal venues</a>. </p>\n\n<p class=\"govuk-body\">You can also contact your service representative for more information.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"Technical-information-about-this-website\u2019s-accessibility\">Technical information about\n this website\u2019s accessibility</h1>\n\n<p class=\"govuk-body\">HMCTS is committed to making its website accessible, in accordance with the Public Sector Bodies\n (Websites and Mobile Applications) (No.2) Accessibility Regulations 2018.</p>\n\n<p class=\"govuk-body\">This website is partially compliant with the <a rel=\"noopener noreferrer\" target=\"_blank\"\n href=\"https://www.w3.org/TR/WCAG21/\">Web Content\n Accessibility Guidelines version 2.1</a>, due to the non-compliances listed below.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"Non-accessible-content\">Non-accessible content </h1>\n\n<p class=\"govuk-body\">The content listed below is non-compliant for the following reasons.</p>\n\n<h2 class=\"govuk-heading-l\" id=\"Non-compliance-with-the-accessibility-regulations\">Non-compliance with the accessibility\n regulations</h2>\n\n<p class=\"govuk-body\">Some pages cannot be navigated completely using just a keyboard, so some people won\u2019t be able to\n tab through the pages. This fails WCAG 2.1 success criterion 2.1 (keyboard accessible).</p>\n\n<p class=\"govuk-body\">Some pages can\u2019t be listened to in full using a screen reader, so some people won\u2019t be able to\n access the information. This fails WCAG 2.1 success criterion 1.2.5 (audio description \u2013 prerecorded).</p>\n\n<p class=\"govuk-body\">Some of the contrast ratios don\u2019t meet the current accessibility requirements. This fails WCAG 2.1\n success criterion 1.4.3 (contrast \u2013 minimum).</p>\n\n<h3 class=\"govuk-heading-m\" id=\"immigration\">Immigration and Asylum</h3>\n\n<p class=\"govuk-body\">Some of the images on the service include text and are not accessible for some low vision users.\n We have identified a solution for this issue that we will implement as soon as possible.</p>\n\n<h3 class=\"govuk-heading-m\" id=\"family\">Family Public Law </h3>\n\n<ol class=\"govuk-list govuk-list--alpha\">\n <li>The navigation system used in family public law cannot be rendered well by screen readers, so features can\u2019t be\n listened to in full\n </li>\n <li>Some essential functions within the family public law digital service cannot be accessed properly using screen\n readers\n </li>\n <li>Some complex forms within the service will not be rendered correctly or cannot be listened to by screen readers\n </li>\n</ol>\n\n<h2 class=\"govuk-heading-m\" id=\"Disproportionate burden \">Disproportionate burden </h2>\n\n<p class=\"govuk-body\">For Manage organisation, Register organisation, Approve organisations and Manage cases, we found\n the following issues that are currently being triaged to find out if there is a disproportionate burden:</p>\n\n<ol class=\"govuk-list govuk-list--alpha\">\n <li>Screen readers can\u2019t switch between headers, read content in tabs and buttons</li>\n <li>Screen readers can\u2019t tab between radio buttons, read links or content</li>\n <li>Colour contrast ratios uneven between page background and content</li>\n <li>Some labels, fields, error messages and other content can\u2019t be clearly identified by screen readers and voice\n activation software\n </li>\n <li>Some page headings and titles don\u2019t follow a logical structure for screen readers</li>\n <li>The navigation of some pages isn\u2019t clear</li>\n <li>Some headings, links and button labels aren\u2019t clearly descriptive</li>\n</ol>\n\n<h2 class=\"govuk-heading-m\" id=\"Content-that\u2019s-not-within-the-scope-of-the-accessibility-regulations\">Content that\u2019s not\n within the scope of the accessibility regulations </h2>\n\n<p class=\"govuk-body\">PDFs, documents and attachments to email notifications published before 23 September 2018 may not\n meet accessibility standards. For example, they may not be structured so they\u2019re accessible to a screen reader.</p>\n\n<p class=\"govuk-body\">Any new PDFs or Word documents we publish will meet accessibility standards.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"what-to-improve-accessibility\">What we\u2019re doing to improve accessibility</h1>\n\n<p class=\"govuk-body\">We\u2019re committed to ensuring our services are accessible to all our users and that they comply with\n level AA of the Web Content Accessibility Guidelines \u2013 WCAG 2.1.</p>\n\n<p class=\"govuk-body\">We\u2019re actively working to improve the identified issues and make them AA-compliant by 23 September\n 2020. We\u2019re also continuing to improve all other AAA-level accessibility issues as we iterate the service.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"preparation-of-this-accessibility-statement\">Preparation of this accessibility\n statement</h1>\n\n<p class=\"govuk-body\">This statement was prepared on 16 September 2019. It was last reviewed on 16 September 2020.</p>\n\n<p class=\"govuk-body\">This website was last tested on 19 May 2020. The test was carried out by the <a target=\"_blank\"\n href=\"https://digitalaccessibilitycentre.org/\">Digital\n Accessibility Centre (DAC)</a>.</p>\n",
42
+ template: "<h1 class=\"govuk-heading-xl\" id=\"Accessibility-statement-for-Expert-UI\">Accessibility statement for Expert UI</h1>\n\n<ul class=\"govuk-list\">\n <li><a href=\"accessibility#immigration\">Immigration and Asylum</a></li>\n <li><a href=\"accessibility#family\">Family Public Law </a></li>\n</ul>\n\n<p class=\"govuk-body\">This website is run by HM Courts & Tribunals Service. We want as many people as possible to be\n able to use this website. For example, you should be able to:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>change colours, contrast levels and fonts</li>\n <li>zoom in up to 300% without the text spilling off the screen</li>\n <li>navigate most of the website using just a keyboard</li>\n <li>navigate most of the website using speech recognition software</li>\n <li>listen to most of the website using a screen reader (including the most recent versions of JAWS, NVDA and\n VoiceOver)\n </li>\n</ul>\n\n<p class=\"govuk-body\">We\u2019ve also made the website text as simple as possible to understand.</p>\n\n<p class=\"govuk-body\"><a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://mcmw.abilitynet.org.uk/\">AbilityNet</a>\n has advice on making your device easier to use if you have a disability.</p>\n\n<h2 class=\"govuk-heading-l\" id=\"How-accessible-this-website-is\">How accessible this website is</h2>\n\n<p class=\"govuk-body\">We know some parts of the website are not fully accessible:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>some pages are difficult to navigate using just a keyboard</li>\n <li>some pages can\u2019t be listened to in full using a screen reader</li>\n <li>some pages have problems with colour contrasts between text and background</li>\n <li>some PDFs may not be fully accessible to a screen reader</li>\n</ul>\n\n<h2 class=\"govuk-heading-l\" id=\"What-to-do-if-you-cannot-access-parts-of-this-website\">Feedback and contact\n information</h2>\n\n<p class=\"govuk-body\">If you need information on this website in a different format like accessible PDF, large print,\n easy read, audio recording or braille, you can:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>email: <a href=\"mailto:HMCTSforms@justice.gov.uk\"> HMCTSforms@justice.gov.uk</a></li>\n <li>call: +44 (0) 300 123 1711</li>\n <li>contact your service representative</li>\n</ul>\n\n<p class=\"govuk-body\">We\u2019ll consider your request and get back to you in 10 working days.</p>\n\n<h2 class=\"govuk-heading-l\" id=\"Reporting-accessibility-problems-with-this-website\">Reporting accessibility problems\n with this website</h2>\n\n<p class=\"govuk-body\">We\u2019re always looking to improve the accessibility of this website. If you find any problems not\n listed on this page or think we\u2019re not meeting accessibility requirements, contact:</p>\n\n<ul class=\"govuk-list govuk-list--bullet\">\n <li>email: <a href=\"mailto:customer.service@justice.gov.uk\"> customer.service@justice.gov.uk</a></li>\n <li>telephone: +44 (0) 300 123 1711</li>\n</ul>\n\n<h2 class=\"govuk-heading-l\" id=\"Enforcement-procedure \">Enforcement procedure</h2>\n\n<p class=\"govuk-body\">The Equality and Human Rights Commission (EHRC) is responsible for enforcing the Public Sector\n Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018 (the \u2018accessibility\n regulations\u2019). </p>\n\n<p class=\"govuk-body\">If you\u2019re not happy with how we respond to your complaint, <a rel=\"noopener noreferrer\"\n target=\"_blank\"\n href=\"https://www.equalityadvisoryservice.com/\">contact\n the Equality Advisory and Support Service (EASS).</a></p>\n\n<h1 class=\"govuk-heading-l\" id=\"Contacting-us-by-phone-or-visiting-us-in-person\">Contacting us by phone or visiting us\n in person</h1>\n\n<p class=\"govuk-body\">We provide a text relay service for people who are D/deaf, hearing impaired or have a speech\n impediment.</p>\n\n<p class=\"govuk-body\">Our offices and tribunal venues have audio induction loops, or if you contact us before your visit\n we can arrange a British Sign Language (BSL) interpreter. You can also request step-free access or a foreign language\n interpreter.</p>\n\n<p class=\"govuk-body\">If you have a question about accessibility in our Tribunal venues, you can contact the First-tier\n Tribunal enquiry line: +44 (0) 300 123 1711. You can <a target=\"_blank\"\n href=\"https://courttribunalfinder.service.gov.uk/search/\">find\n the contact details for court and tribunal venues</a>. </p>\n\n<p class=\"govuk-body\">You can also contact your service representative for more information.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"Technical-information-about-this-website\u2019s-accessibility\">Technical information about\n this website\u2019s accessibility</h1>\n\n<p class=\"govuk-body\">HMCTS is committed to making its website accessible, in accordance with the Public Sector Bodies\n (Websites and Mobile Applications) (No.2) Accessibility Regulations 2018.</p>\n\n<p class=\"govuk-body\">This website is partially compliant with the <a rel=\"noopener noreferrer\" target=\"_blank\"\n href=\"https://www.w3.org/TR/WCAG21/\">Web Content\n Accessibility Guidelines version 2.1</a>, due to the non-compliances listed below.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"Non-accessible-content\">Non-accessible content </h1>\n\n<p class=\"govuk-body\">The content listed below is non-compliant for the following reasons.</p>\n\n<h2 class=\"govuk-heading-l\" id=\"Non-compliance-with-the-accessibility-regulations\">Non-compliance with the accessibility\n regulations</h2>\n\n<p class=\"govuk-body\">Some pages cannot be navigated completely using just a keyboard, so some people won\u2019t be able to\n tab through the pages. This fails WCAG 2.1 success criterion 2.1 (keyboard accessible).</p>\n\n<p class=\"govuk-body\">Some pages can\u2019t be listened to in full using a screen reader, so some people won\u2019t be able to\n access the information. This fails WCAG 2.1 success criterion 1.2.5 (audio description \u2013 prerecorded).</p>\n\n<p class=\"govuk-body\">Some of the contrast ratios don\u2019t meet the current accessibility requirements. This fails WCAG 2.1\n success criterion 1.4.3 (contrast \u2013 minimum).</p>\n\n<h3 class=\"govuk-heading-m\" id=\"immigration\">Immigration and Asylum</h3>\n\n<p class=\"govuk-body\">Some of the images on the service include text and are not accessible for some low vision users.\n We have identified a solution for this issue that we will implement as soon as possible.</p>\n\n<h3 class=\"govuk-heading-m\" id=\"family\">Family Public Law </h3>\n\n<ol class=\"govuk-list govuk-list--alpha\">\n <li>The navigation system used in family public law cannot be rendered well by screen readers, so features can\u2019t be\n listened to in full\n </li>\n <li>Some essential functions within the family public law digital service cannot be accessed properly using screen\n readers\n </li>\n <li>Some complex forms within the service will not be rendered correctly or cannot be listened to by screen readers\n </li>\n</ol>\n\n<h2 class=\"govuk-heading-m\" id=\"Disproportionate burden \">Disproportionate burden </h2>\n\n<p class=\"govuk-body\">For Manage organisation, Register organisation, Approve organisations and Manage cases, we found\n the following issues that are currently being triaged to find out if there is a disproportionate burden:</p>\n\n<ol class=\"govuk-list govuk-list--alpha\">\n <li>Screen readers can\u2019t switch between headers, read content in tabs and buttons</li>\n <li>Screen readers can\u2019t tab between radio buttons, read links or content</li>\n <li>Colour contrast ratios uneven between page background and content</li>\n <li>Some labels, fields, error messages and other content can\u2019t be clearly identified by screen readers and voice\n activation software\n </li>\n <li>Some page headings and titles don\u2019t follow a logical structure for screen readers</li>\n <li>The navigation of some pages isn\u2019t clear</li>\n <li>Some headings, links and button labels aren\u2019t clearly descriptive</li>\n</ol>\n\n<h2 class=\"govuk-heading-m\" id=\"Content-that\u2019s-not-within-the-scope-of-the-accessibility-regulations\">Content that\u2019s not\n within the scope of the accessibility regulations </h2>\n\n<p class=\"govuk-body\">PDFs, documents and attachments to email notifications published before 23 September 2018 may not\n meet accessibility standards. For example, they may not be structured so they\u2019re accessible to a screen reader.</p>\n\n<p class=\"govuk-body\">Any new PDFs or Word documents we publish will meet accessibility standards.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"what-to-improve-accessibility\">What we\u2019re doing to improve accessibility</h1>\n\n<p class=\"govuk-body\">We\u2019re committed to ensuring our services are accessible to all our users and that they comply with\n level AA of the Web Content Accessibility Guidelines \u2013 WCAG 2.1.</p>\n\n<p class=\"govuk-body\">We\u2019re actively working to improve the identified issues and make them AA-compliant by 23 September\n 2020. We\u2019re also continuing to improve all other AAA-level accessibility issues as we iterate the service.</p>\n\n<h1 class=\"govuk-heading-l\" id=\"preparation-of-this-accessibility-statement\">Preparation of this accessibility\n statement</h1>\n\n<p class=\"govuk-body\">This statement was prepared on 16 September 2019. It was last reviewed on 16 September 2020.</p>\n\n<p class=\"govuk-body\">This website was last tested on 19 May 2020. The test was carried out by the <a target=\"_blank\"\n href=\"https://digitalaccessibilitycentre.org/\">Digital\n Accessibility Centre (DAC)</a>.</p>\n\n<h3 class=\"govuk-heading-m\">Family Private Law:</h3>\n\n<p class=\"govuk-body\">This service has not yet been tested for accessibility issues. In the future, we will conduct an\n accessibility audit in order to find out if there are any accessibility issues. The accessibility statement will be\n updated with any relevant changes that we find.</p>\n\n<p class=\"govuk-body\">If there are any issues with accessing information or using this website please contact:</p>\n\n<ol class=\"govuk-list govuk-list--bullet\">\n <li>Nicola Whitcher - 02380 384324</li>\n <li>Hannah Townley - 02380 384313</li>\n</ol>",
43
43
  styles: [".govuk-list--alpha{padding-left:20px;list-style-type:lower-alpha}"]
44
44
  },] }
45
45
  ];
@@ -1013,6 +1013,7 @@
1013
1013
  }
1014
1014
  };
1015
1015
  GenericFilterComponent.prototype.toggleSelectAll = function (event, form, item, field) {
1016
+ var e_3, _a;
1016
1017
  var isChecked = event.target.checked;
1017
1018
  var formArray = form.get(field.name);
1018
1019
  if (!item.selectAll) {
@@ -1039,19 +1040,35 @@
1039
1040
  else if (hasSelectAllOption && !allChecked && isChecked && isAllCheckedExcludingTheSelectAllOption) {
1040
1041
  formArray.controls[index_1].patchValue(true);
1041
1042
  }
1042
- return;
1043
1043
  }
1044
- formArray.controls.forEach(function (control) {
1045
- if (isChecked) {
1046
- control.patchValue(true);
1044
+ else {
1045
+ formArray.controls.forEach(function (control) {
1046
+ if (isChecked) {
1047
+ control.patchValue(true);
1048
+ }
1049
+ else {
1050
+ control.patchValue(false);
1051
+ }
1052
+ });
1053
+ }
1054
+ if (field.changeResetFields && field.changeResetFields.length) {
1055
+ try {
1056
+ for (var _b = __values(field.changeResetFields), _c = _b.next(); !_c.done; _c = _b.next()) {
1057
+ var resetField = _c.value;
1058
+ this.resetField(resetField, form);
1059
+ }
1047
1060
  }
1048
- else {
1049
- control.patchValue(false);
1061
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
1062
+ finally {
1063
+ try {
1064
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1065
+ }
1066
+ finally { if (e_3) throw e_3.error; }
1050
1067
  }
1051
- });
1068
+ }
1052
1069
  };
1053
1070
  GenericFilterComponent.prototype.resetField = function (resetField, form) {
1054
- var e_3, _a;
1071
+ var e_4, _a;
1055
1072
  var control = form.get(resetField);
1056
1073
  var defaultValue = this.config.cancelSetting.fields.find(function (f) { return f.name === resetField; });
1057
1074
  if (control instanceof forms.FormArray) {
@@ -1067,12 +1084,12 @@
1067
1084
  this.resetField(key, control);
1068
1085
  }
1069
1086
  }
1070
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
1087
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
1071
1088
  finally {
1072
1089
  try {
1073
1090
  if (keys_2_1 && !keys_2_1.done && (_a = keys_2.return)) _a.call(keys_2);
1074
1091
  }
1075
- finally { if (e_3) throw e_3.error; }
1092
+ finally { if (e_4) throw e_4.error; }
1076
1093
  }
1077
1094
  }
1078
1095
  else if (control instanceof forms.FormControl) {
@@ -1095,7 +1112,7 @@
1095
1112
  this._settings = this.filterService.get(this.config.id);
1096
1113
  };
1097
1114
  GenericFilterComponent.prototype.buildForm = function (config, settings, reset) {
1098
- var e_4, _a;
1115
+ var e_5, _a;
1099
1116
  var findPersonControl = this.form ? this.form.get('findPersonControl') : null;
1100
1117
  this.form = this.fb.group({});
1101
1118
  if (findPersonControl) {
@@ -1153,16 +1170,16 @@
1153
1170
  _loop_1(field);
1154
1171
  }
1155
1172
  }
1156
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
1173
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
1157
1174
  finally {
1158
1175
  try {
1159
1176
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1160
1177
  }
1161
- finally { if (e_4) throw e_4.error; }
1178
+ finally { if (e_5) throw e_5.error; }
1162
1179
  }
1163
1180
  };
1164
1181
  GenericFilterComponent.prototype.buildCheckBoxFormArray = function (field, settings) {
1165
- var e_5, _a;
1182
+ var e_6, _a;
1166
1183
  var validators = GenericFilterComponent.addFormValidators(field);
1167
1184
  var formArray = this.fb.array([], validators);
1168
1185
  var defaultValues;
@@ -1182,17 +1199,17 @@
1182
1199
  _loop_2(option);
1183
1200
  }
1184
1201
  }
1185
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
1202
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
1186
1203
  finally {
1187
1204
  try {
1188
1205
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1189
1206
  }
1190
- finally { if (e_5) throw e_5.error; }
1207
+ finally { if (e_6) throw e_6.error; }
1191
1208
  }
1192
1209
  return formArray;
1193
1210
  };
1194
1211
  GenericFilterComponent.prototype.buildFindLocationFormArray = function (field, settings) {
1195
- var e_6, _a;
1212
+ var e_7, _a;
1196
1213
  var validators = GenericFilterComponent.addFormValidators(field);
1197
1214
  var formArray = this.fb.array([], validators);
1198
1215
  var defaultValues;
@@ -1205,12 +1222,12 @@
1205
1222
  formArray.push(new forms.FormControl(defaultValue));
1206
1223
  }
1207
1224
  }
1208
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
1225
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
1209
1226
  finally {
1210
1227
  try {
1211
1228
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1212
1229
  }
1213
- finally { if (e_6) throw e_6.error; }
1230
+ finally { if (e_7) throw e_7.error; }
1214
1231
  }
1215
1232
  }
1216
1233
  }
@@ -1234,7 +1251,7 @@
1234
1251
  });
1235
1252
  };
1236
1253
  GenericFilterComponent.prototype.emitFormErrors = function (form) {
1237
- var e_7, _a;
1254
+ var e_8, _a;
1238
1255
  var errors = [];
1239
1256
  try {
1240
1257
  for (var _b = __values(this.config.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -1248,12 +1265,12 @@
1248
1265
  }
1249
1266
  }
1250
1267
  }
1251
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
1268
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
1252
1269
  finally {
1253
1270
  try {
1254
1271
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1255
1272
  }
1256
- finally { if (e_7) throw e_7.error; }
1273
+ finally { if (e_8) throw e_8.error; }
1257
1274
  }
1258
1275
  if (errors.length) {
1259
1276
  this.filterService.givenErrors.next(errors);
@@ -1264,7 +1281,7 @@
1264
1281
  GenericFilterComponent.decorators = [
1265
1282
  { type: i0.Component, args: [{
1266
1283
  selector: 'xuilib-generic-filter',
1267
- 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 ></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.enableAddLocationButton\"\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 </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",
1284
+ 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 ></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-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 [field]=\"field\"\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",
1268
1285
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
1269
1286
  encapsulation: i0.ViewEncapsulation.None,
1270
1287
  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}"]
@@ -1442,26 +1459,38 @@
1442
1459
  this.subject.next(newSharedCases);
1443
1460
  return newSharedCases;
1444
1461
  };
1445
- CaseSharingStateService.prototype.requestUnshare = function (caseId, user) {
1462
+ CaseSharingStateService.prototype.requestUnshare = function (user, caseId) {
1446
1463
  var e_2, _a;
1447
1464
  var newSharedCases = [];
1448
1465
  try {
1449
1466
  for (var _b = __values(this.caseState), _c = _b.next(); !_c.done; _c = _b.next()) {
1450
1467
  var sharedCase = _c.value;
1451
- if (sharedCase.caseId === caseId) {
1468
+ // If no caseId, then request unshare from all shared cases
1469
+ if (caseId === undefined || sharedCase.caseId === caseId) {
1452
1470
  if (!sharedCase.pendingUnshares) {
1453
1471
  sharedCase.pendingUnshares = [];
1454
1472
  }
1455
1473
  var newPendingUnshares = sharedCase.pendingUnshares.slice();
1456
- if (newPendingUnshares) {
1474
+ // If the user is pending shared access, just remove them from pendingShares
1475
+ var newPendingShares = void 0;
1476
+ var indexOfPreviouslyAddedUser = -1;
1477
+ if (sharedCase.pendingShares) {
1478
+ indexOfPreviouslyAddedUser = sharedCase.pendingShares.findIndex(function (u) { return u.idamId === user.idamId; });
1479
+ if (indexOfPreviouslyAddedUser > -1) {
1480
+ newPendingShares = sharedCase.pendingShares.slice();
1481
+ newPendingShares.splice(indexOfPreviouslyAddedUser, 1);
1482
+ }
1483
+ }
1484
+ // If the user does not exist in pendingShares, and already has shared access (i.e. exists in sharedWith),
1485
+ // request removal of shared access
1486
+ if (indexOfPreviouslyAddedUser === -1 && sharedCase.sharedWith && sharedCase.sharedWith.findIndex(function (u) { return u.idamId === user.idamId; }) > -1) {
1457
1487
  if (!newPendingUnshares.some(function (u) { return u.email === user.email; })) {
1458
1488
  newPendingUnshares.push(user);
1459
1489
  }
1460
1490
  }
1461
- else {
1462
- newPendingUnshares.push(user);
1463
- }
1464
- var newSharedCase = Object.assign(Object.assign({}, sharedCase), { pendingUnshares: newPendingUnshares });
1491
+ var newSharedCase = Object.assign(Object.assign(Object.assign({}, sharedCase), { pendingUnshares: newPendingUnshares }), (newPendingShares && {
1492
+ pendingShares: newPendingShares
1493
+ }));
1465
1494
  newSharedCases.push(newSharedCase);
1466
1495
  }
1467
1496
  else {
@@ -1477,7 +1506,7 @@
1477
1506
  finally { if (e_2) throw e_2.error; }
1478
1507
  }
1479
1508
  this.subject.next(newSharedCases);
1480
- return;
1509
+ return newSharedCases;
1481
1510
  };
1482
1511
  CaseSharingStateService.prototype.requestCancel = function (caseId, user) {
1483
1512
  var e_3, _a;
@@ -1525,11 +1554,13 @@
1525
1554
  return;
1526
1555
  };
1527
1556
  CaseSharingStateService.prototype.removeCase = function (caseId) {
1528
- for (var i = 0, l = this.caseState.length; i < l; i++) {
1529
- if (this.caseState[i].caseId === caseId) {
1530
- this.caseState.splice(i, 1);
1531
- this.subject.next(this.caseState);
1532
- return;
1557
+ if (this.caseState.length > 1) {
1558
+ for (var i = 0, l = this.caseState.length; i < l; i++) {
1559
+ if (this.caseState[i].caseId === caseId) {
1560
+ this.caseState.splice(i, 1);
1561
+ this.subject.next(this.caseState);
1562
+ return;
1563
+ }
1533
1564
  }
1534
1565
  }
1535
1566
  };
@@ -1578,7 +1609,7 @@
1578
1609
  SelectedCaseConfirmComponent.decorators = [
1579
1610
  { type: i0.Component, args: [{
1580
1611
  selector: 'xuilib-selected-case-confirm',
1581
- template: "<div id=\"user-access-block-{{ sharedCase.caseId }}\" *ngIf=\"showUserAccessBlock()\">\n <h2 class=\"govuk-heading-m case-share-confirm__title\">{{ sharedCase.caseTitle }}</h2>\n <div class=\"case-share-confirm__caption-area\">\n <div class=\"govuk-caption-m case-share-confirm__caption\">\n {{ sharedCase.caseId }}\n </div>\n <a [routerLink]=\"changeLink\" class=\"case-share-confirm__change-link govuk-link govuk-!-font-size-19\">Change</a>\n </div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Name</th>\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Email address</th>\n <th class=\"govuk-table__header govuk-table-column-actions\" scope=\"col\">Actions</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingShares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge\">To be added</span>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingUnshares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge hmcts-badge--red\">to be removed</span>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n",
1612
+ template: "<div id=\"user-access-block-{{ sharedCase.caseId }}\" *ngIf=\"showUserAccessBlock()\">\n <h2 class=\"govuk-heading-m case-share-confirm__title\">{{ sharedCase.caseTitle }}</h2>\n <div class=\"case-share-confirm__caption-area\">\n <div class=\"govuk-caption-m case-share-confirm__caption\">\n {{ sharedCase.caseId }}\n </div>\n <a [routerLink]=\"changeLink\" class=\"case-share-confirm__change-link govuk-link govuk-!-font-size-19\">Change</a>\n </div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Name</th>\n <th class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Email address</th>\n <th class=\"govuk-table__header govuk-table-column-actions\" scope=\"col\">Actions</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingShares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge\">To be added</span>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngFor=\"let user of sharedCase.pendingUnshares; trackBy: trackByUserId\">\n <td class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <span class=\"hmcts-badge hmcts-badge--red\">To be removed</span>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n",
1582
1613
  styles: [".case-share-confirm__title{margin-bottom:0}.case-share-confirm__caption-area{border-bottom:1px solid #b1b4b6;padding-bottom:10px;display:inline-block;width:100%;clear:both}.case-share-confirm__caption{float:left}.case-share-confirm__change-link{float:right}.govuk-table-column-header{width:45%}.govuk-table-column-actions{width:10%}"]
1583
1614
  },] }
1584
1615
  ];
@@ -1602,10 +1633,14 @@
1602
1633
  SelectedCaseListComponent.prototype.ngOnInit = function () {
1603
1634
  var _this = this;
1604
1635
  this.shareCases$ = this.stateService.state;
1605
- this.shareCases$.subscribe(function (shareCases) { return _this.shareCases = shareCases; });
1636
+ this.shareCases$.subscribe(function (shareCases) {
1637
+ _this.shareCases = shareCases;
1638
+ _this.caseCount = _this.shareCases.length;
1639
+ });
1606
1640
  };
1607
1641
  SelectedCaseListComponent.prototype.onUnselect = function (sharedCase) {
1608
1642
  this.unselect.emit(sharedCase);
1643
+ this.caseCount = this.shareCases.length;
1609
1644
  };
1610
1645
  SelectedCaseListComponent.prototype.onSynchronizeStore = function (event) {
1611
1646
  this.synchronizeStore.emit(event);
@@ -1618,7 +1653,7 @@
1618
1653
  SelectedCaseListComponent.decorators = [
1619
1654
  { type: i0.Component, args: [{
1620
1655
  selector: 'xuilib-selected-case-list',
1621
- template: "<ng-container *ngIf=\"!toConfirm\">\n <xuilib-selected-case\n *ngFor=\"let sharedCase of (shareCases$ | async); trackBy: trackByCaseId\"\n [sharedCase]=\"sharedCase\"\n [removeUserFromCaseToggleOn]=\"removeUserFromCaseToggleOn\"\n (unselect)=\"onUnselect($event)\"\n (synchronizeStore)=\"onSynchronizeStore($event)\"\n >\n </xuilib-selected-case>\n</ng-container>\n\n<ng-container *ngIf=\"toConfirm\">\n <xuilib-selected-case-confirm\n *ngFor=\"let sharedCase of (shareCases$ | async); trackBy: trackByCaseId\"\n [sharedCase]=\"sharedCase\"\n [changeLink]=\"changeLink\">\n </xuilib-selected-case-confirm>\n</ng-container>\n",
1656
+ template: "<ng-container *ngIf=\"!toConfirm\">\n <xuilib-selected-case\n *ngFor=\"let sharedCase of (shareCases$ | async); trackBy: trackByCaseId\"\n [sharedCase]=\"sharedCase\"\n [caseCount]=\"caseCount\"\n [removeUserFromCaseToggleOn]=\"removeUserFromCaseToggleOn\"\n (unselect)=\"onUnselect($event)\"\n (synchronizeStore)=\"onSynchronizeStore($event)\"\n >\n </xuilib-selected-case>\n</ng-container>\n\n<ng-container *ngIf=\"toConfirm\">\n <xuilib-selected-case-confirm\n *ngFor=\"let sharedCase of (shareCases$ | async); trackBy: trackByCaseId\"\n [sharedCase]=\"sharedCase\"\n [changeLink]=\"changeLink\">\n </xuilib-selected-case-confirm>\n</ng-container>\n",
1622
1657
  styles: [""]
1623
1658
  },] }
1624
1659
  ];
@@ -1653,9 +1688,6 @@
1653
1688
  this.combinedSortedShares = this.combineAndSortShares(sharedWith, pendingShares);
1654
1689
  }
1655
1690
  };
1656
- SelectedCaseComponent.prototype.onUnselect = function () {
1657
- this.unselect.emit(this.sharedCase);
1658
- };
1659
1691
  SelectedCaseComponent.prototype.onDeselect = function (c) {
1660
1692
  this.unselect.emit(c);
1661
1693
  };
@@ -1758,7 +1790,7 @@
1758
1790
  }));
1759
1791
  };
1760
1792
  SelectedCaseComponent.prototype.onRemove = function (user, sharedCase) {
1761
- this.stateService.requestUnshare(sharedCase.caseId, user);
1793
+ this.stateService.requestUnshare(user, sharedCase.caseId);
1762
1794
  this.synchronizeStore.emit(this.shareCases);
1763
1795
  };
1764
1796
  SelectedCaseComponent.prototype.onCancel = function (user, sharedCase) {
@@ -1819,8 +1851,8 @@
1819
1851
  SelectedCaseComponent.decorators = [
1820
1852
  { type: i0.Component, args: [{
1821
1853
  selector: 'xuilib-selected-case',
1822
- template: "<div id=\"{{buildElementId('govuk-accordion__section')}}\" class=\"govuk-accordion__section\">\n <div class=\"govuk-grid-row govuk-case-header\">\n <div class=\"govuk-grid-column-three-quarters\">\n <h3 id=\"{{buildElementId('case-title')}}\" class=\"govuk-case-title\">{{ sharedCase.caseTitle }}</h3>\n <h1 id=\"{{buildElementId('case-id')}}\" class=\"govuk-case-sub-title\">{{ sharedCase.caseId }}</h1>\n </div>\n <div class=\"govuk-grid-column-twenty-percent\">\n <button id=\"{{buildElementId('btn-deselect-case')}}\" class=\"govuk-button hmcts-button--secondary\" (click)=\"onDeselect(sharedCase)\" title=\"Deselect case\">Deselect case</button>\n </div>\n <div class=\"govuk-accordion__section-header govuk-grid-column-five-percent\">\n <div class=\"govuk-accordion__section-heading\">\n <button type=\"button\" id=\"{{buildElementId('accordion-with-summary-sections-heading')}}\"\n aria-controls=\"accordion-with-summary-sections-content-1\" class=\"govuk-accordion__section-button\"\n aria-describedby=\"accordion-with-summary-sections-summary-1\" aria-expanded=\"false\" title=\"Expand or Collapse\">\n <span class=\"govuk-accordion__icon\" aria-hidden=\"true\"></span></button>\n </div>\n </div>\n </div>\n <div id=\"{{buildElementId('accordion-with-summary-sections-content')}}\" class=\"govuk-accordion__section-content\"\n aria-labelledby=\"buildElementId('accordion-with-summary-sections-heading')\" >\n <div class=\"govuk-grid-row\" *ngIf=\"showNoUsersAccessInfo()\">\n <span id=\"{{buildElementId('access-info-no-user')}}\" class=\"govuk-div-align-left\">No users from your organisation currently have access to this case.</span>\n </div>\n <div class=\"govuk-grid-row\" *ngIf=\"showUserHasAccessInfo()\">\n <span id=\"{{buildElementId('access-info-has-users')}}\" class=\"govuk-div-align-left\">Users from your organisation with access to this case.</span>\n </div>\n <table class=\"govuk-table\" *ngIf=\"showUserAccessTable()\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th id=\"{{buildElementId('name-heading')}}\" class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Name</th>\n <th id=\"{{buildElementId('email-heading')}}\" class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Email address</th>\n <th id=\"{{buildElementId('action-heading')}}\" class=\"govuk-table__header govuk-table-column-actions\" scope=\"col\">Actions</th>\n <th id=\"{{buildElementId('label-heading')}}\" class=\"govuk-table__header govuk-table-column-label\" scope=\"col\">&nbsp;&nbsp;</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let user of combinedSortedShares; index as idx; trackBy: trackByUserId\">\n <td id=\"user-full-name-{{ userIdSetter(canCancel(sharedCase.caseId, user) | async, idx) }}\" class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td id=\"user-email-{{ userIdSetter(canCancel(sharedCase.caseId, user) | async, idx) }}\" class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <a *ngIf=\"canRemove(sharedCase.caseId, user) | async\" (click)=\"onRemove(user, sharedCase)\" href=\"javascript:void(0);\">Remove <span class=\"govuk-visually-hidden\">{{ user.firstName + ' ' + user.lastName }} from case</span></a>\n <a *ngIf=\"canCancel(sharedCase.caseId, user) | async\" (click)=\"onCancel(user, sharedCase)\" href=\"javascript:void(0);\">Cancel <span class=\"govuk-visually-hidden\">adding {{ user.firstName + ' ' + user.lastName }} to case</span></a>\n </td>\n <td class=\"govuk-table__cell\">\n <span *ngIf=\"isToBeRemoved(sharedCase.caseId, user) | async\" class=\"hmcts-badge hmcts-badge--red\">To be removed</span>\n <span *ngIf=\"isToBeAdded(sharedCase.caseId, user) | async\" class=\"hmcts-badge\">To be added</span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n",
1823
- styles: [".govuk-case-header{border-top:1px solid #bfc1c3}.govuk-case-title{font-size:24px;color:#005ea5;font-weight:700}.govuk-case-sub-title,.govuk-case-title{font-family:nta,Arial,sans-serif;padding-left:0}.govuk-case-sub-title{font-size:1rem!important;color:#6f777b;font-weight:400}.govuk-grid-row{margin-left:0;margin-right:0}.govuk-grid-column-three-quarters{padding-top:5px;padding-left:0}.govuk-grid-column-twenty-percent{box-sizing:border-box;padding-top:10px;width:20%;float:left}.govuk-grid-column-five-percent{box-sizing:border-box;padding-top:15px;width:5%;float:left}.govuk-table-column-header{width:40%}.govuk-table-column-actions,.govuk-table-column-label{width:10%}.govuk-div-align-left{font-family:nta,Arial,sans-serif;font-size:1.1875rem!important;line-height:1.31579!important;text-align:left;margin-bottom:20px;padding-left:0;color:#0b0c0c}.govuk-accordion__section-header{border-top:0}.govuk-accordion__section-content{padding-top:0}"]
1854
+ template: "<div id=\"{{buildElementId('govuk-accordion__section')}}\" class=\"govuk-accordion__section\">\n <div class=\"govuk-grid-row govuk-case-header\">\n <div class=\"govuk-grid-column-three-quarters\">\n <h3 id=\"{{buildElementId('case-title')}}\" class=\"govuk-case-title\">{{ sharedCase.caseTitle }}</h3>\n <h1 id=\"{{buildElementId('case-id')}}\" class=\"govuk-case-sub-title\">{{ sharedCase.caseId }}</h1>\n </div>\n <div class=\"govuk-grid-column-twenty-percent\">\n <button *ngIf=\"caseCount > 1\"\n id=\"{{buildElementId('btn-deselect-case')}}\" \n class=\"govuk-button hmcts-button--secondary\" \n (click)=\"onDeselect(sharedCase)\" \n title=\"Deselect case\">Deselect case\n </button>\n </div>\n <div class=\"govuk-accordion__section-header govuk-grid-column-five-percent\">\n <div class=\"govuk-accordion__section-heading\">\n <button type=\"button\" id=\"{{buildElementId('accordion-with-summary-sections-heading')}}\"\n aria-controls=\"accordion-with-summary-sections-content-1\" class=\"govuk-accordion__section-button\"\n aria-describedby=\"accordion-with-summary-sections-summary-1\" aria-expanded=\"false\" title=\"Expand or Collapse\">\n <span class=\"govuk-accordion__icon\" aria-hidden=\"true\"></span></button>\n </div>\n </div>\n </div>\n <div id=\"{{buildElementId('accordion-with-summary-sections-content')}}\" class=\"govuk-accordion__section-content\"\n aria-labelledby=\"buildElementId('accordion-with-summary-sections-heading')\" >\n <div class=\"govuk-grid-row\" *ngIf=\"showNoUsersAccessInfo()\">\n <span id=\"{{buildElementId('access-info-no-user')}}\" class=\"govuk-div-align-left\">No users from your organisation currently have access to this case.</span>\n </div>\n <div class=\"govuk-grid-row\" *ngIf=\"showUserHasAccessInfo()\">\n <span id=\"{{buildElementId('access-info-has-users')}}\" class=\"govuk-div-align-left\">Users from your organisation with access to this case.</span>\n </div>\n <table class=\"govuk-table\" *ngIf=\"showUserAccessTable()\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th id=\"{{buildElementId('name-heading')}}\" class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Name</th>\n <th id=\"{{buildElementId('email-heading')}}\" class=\"govuk-table__header govuk-table-column-header\" scope=\"col\">Email address</th>\n <th id=\"{{buildElementId('action-heading')}}\" class=\"govuk-table__header govuk-table-column-actions\" scope=\"col\">Actions</th>\n <th id=\"{{buildElementId('label-heading')}}\" class=\"govuk-table__header govuk-table-column-label\" scope=\"col\">Status</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let user of combinedSortedShares; index as idx; trackBy: trackByUserId\">\n <td id=\"user-full-name-{{ userIdSetter(canCancel(sharedCase.caseId, user) | async, idx) }}\" class=\"govuk-table__cell\">{{ user.firstName + ' ' + user.lastName }}</td>\n <td id=\"user-email-{{ userIdSetter(canCancel(sharedCase.caseId, user) | async, idx) }}\" class=\"govuk-table__cell\">{{ user.email }}</td>\n <td class=\"govuk-table__cell\">\n <a *ngIf=\"canRemove(sharedCase.caseId, user) | async\" (click)=\"onRemove(user, sharedCase)\" href=\"javascript:void(0);\">Remove <span class=\"govuk-visually-hidden\">{{ user.firstName + ' ' + user.lastName }} from case</span></a>\n <a *ngIf=\"canCancel(sharedCase.caseId, user) | async\" (click)=\"onCancel(user, sharedCase)\" href=\"javascript:void(0);\">Cancel <span class=\"govuk-visually-hidden\">adding {{ user.firstName + ' ' + user.lastName }} to case</span></a>\n </td>\n <td class=\"govuk-table__cell\">\n <span *ngIf=\"isToBeRemoved(sharedCase.caseId, user) | async\" class=\"hmcts-badge hmcts-badge--red\">To be removed</span>\n <span *ngIf=\"isToBeAdded(sharedCase.caseId, user) | async\" class=\"hmcts-badge\">To be added</span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n",
1855
+ styles: [".govuk-case-header{border-top:1px solid #bfc1c3}.govuk-case-title{font-size:24px;color:#005ea5;font-weight:700}.govuk-case-sub-title,.govuk-case-title{font-family:nta,Arial,sans-serif;padding-left:0}.govuk-case-sub-title{font-size:1rem!important;color:#6f777b;font-weight:400}.govuk-grid-row{margin-left:0;margin-right:0}.govuk-grid-column-three-quarters{padding-top:5px;padding-left:0}.govuk-grid-column-twenty-percent{box-sizing:border-box;padding-top:10px;width:20%;float:left}.govuk-grid-column-five-percent{box-sizing:border-box;padding-top:15px;width:5%;float:left}.govuk-table-column-header{width:38%}.govuk-table-column-actions,.govuk-table-column-label{width:12%}.govuk-div-align-left{font-family:nta,Arial,sans-serif;font-size:1.1875rem!important;line-height:1.31579!important;text-align:left;margin-bottom:20px;padding-left:0;color:#0b0c0c}.govuk-accordion__section-header{border-top:0}.govuk-accordion__section-content{padding-top:0}"]
1824
1856
  },] }
1825
1857
  ];
1826
1858
  SelectedCaseComponent.ctorParameters = function () { return [
@@ -1831,6 +1863,7 @@
1831
1863
  selectedUser: [{ type: i0.Input }],
1832
1864
  opened: [{ type: i0.Input }],
1833
1865
  removeUserFromCaseToggleOn: [{ type: i0.Input }],
1866
+ caseCount: [{ type: i0.Input }],
1834
1867
  unselect: [{ type: i0.Output }],
1835
1868
  synchronizeStore: [{ type: i0.Output }]
1836
1869
  };
@@ -1967,6 +2000,13 @@
1967
2000
  completeLink: [{ type: i0.Input }]
1968
2001
  };
1969
2002
 
2003
+ exports.SharedCaseErrorMessages = void 0;
2004
+ (function (SharedCaseErrorMessages) {
2005
+ SharedCaseErrorMessages["OneCaseMustBeSelected"] = "At least one case must be selected";
2006
+ SharedCaseErrorMessages["NoChangesRequested"] = "You have not requested any changes to case sharing";
2007
+ SharedCaseErrorMessages["OnePersonMustBeAssigned"] = "At least one person must be assigned to each case";
2008
+ })(exports.SharedCaseErrorMessages || (exports.SharedCaseErrorMessages = {}));
2009
+
1970
2010
  var UserSelectComponent = /** @class */ (function () {
1971
2011
  function UserSelectComponent() {
1972
2012
  this.selected = new i0.EventEmitter();
@@ -2025,26 +2065,55 @@
2025
2065
  };
2026
2066
 
2027
2067
  var ShareCaseComponent = /** @class */ (function () {
2028
- function ShareCaseComponent(stateService) {
2068
+ function ShareCaseComponent(stateService, router) {
2029
2069
  this.stateService = stateService;
2070
+ this.router = router;
2030
2071
  this.shareCases = []; // cases selected for sharing
2072
+ this.continueAllowed = false;
2073
+ this.selectedUserToRemove = null;
2031
2074
  this.removeUserFromCaseToggleOn = false;
2032
2075
  this.users = []; // users of this organisation the cases can be shared with
2033
2076
  this.confirmLink = '';
2077
+ this.cancelLink = '';
2078
+ this.showRemoveUsers = false;
2079
+ this.fnTitle = '';
2080
+ this.title = '';
2034
2081
  this.unselect = new i0.EventEmitter();
2035
2082
  this.synchronizeStore = new i0.EventEmitter();
2083
+ this.validationErrors = [];
2036
2084
  }
2037
2085
  ShareCaseComponent.prototype.ngOnInit = function () {
2038
2086
  var _this = this;
2039
- this.shareCases$.subscribe(function (shareCases) {
2087
+ this.shareCases$
2088
+ .pipe(operators.tap(function (sharedCases) {
2089
+ // Update the list of users assigned to at least one case
2090
+ _this.getAssignedUsers(sharedCases.filter(function (sharedCase) { return sharedCase.sharedWith && sharedCase.sharedWith.length > 0; }));
2091
+ }))
2092
+ .subscribe(function (shareCases) {
2040
2093
  _this.shareCases = shareCases;
2041
2094
  _this.stateService.setCases(shareCases);
2095
+ // Set the config to be used by the xuilib-gov-uk-error-message component, in particular the element ID to
2096
+ // which the error message is associated
2097
+ if (shareCases) {
2098
+ _this.selectedCasesErrorMessageConfig = {
2099
+ id: shareCases.length > 0 ? 'cases' : 'noCaseDisplay'
2100
+ };
2101
+ }
2042
2102
  });
2043
2103
  this.shareCases$ = this.stateService.state;
2104
+ this.shareCaseErrorMessage = { isInvalid: false, messages: [] };
2044
2105
  };
2045
2106
  ShareCaseComponent.prototype.onUnselect = function (c) {
2046
- this.unselect.emit(c);
2047
- this.stateService.removeCase(c.caseId);
2107
+ this.validationErrors = [];
2108
+ if (this.stateService.getCases().length === 1) {
2109
+ this.validationErrors.push({ id: 'cases', message: exports.SharedCaseErrorMessages.OneCaseMustBeSelected });
2110
+ this.shareCaseErrorMessage = { isInvalid: true, messages: [exports.SharedCaseErrorMessages.OneCaseMustBeSelected] };
2111
+ window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
2112
+ }
2113
+ else {
2114
+ this.unselect.emit(c);
2115
+ this.stateService.removeCase(c.caseId);
2116
+ }
2048
2117
  };
2049
2118
  ShareCaseComponent.prototype.onSynchronizeStore = function (event) {
2050
2119
  this.synchronizeStore.emit(event);
@@ -2059,23 +2128,39 @@
2059
2128
  this.userSelect.clear();
2060
2129
  }
2061
2130
  this.synchronizeStore.emit(newSharedCases);
2131
+ // Update the list of assigned users (which includes pending users)
2132
+ this.getAssignedUsers(newSharedCases);
2133
+ };
2134
+ ShareCaseComponent.prototype.removeUser = function () {
2135
+ if (this.selectedUserToRemove) {
2136
+ var newSharedCases = this.stateService.requestUnshare(this.selectedUserToRemove);
2137
+ this.synchronizeStore.emit(newSharedCases);
2138
+ }
2062
2139
  };
2063
2140
  ShareCaseComponent.prototype.isDisabledAdd = function () {
2064
2141
  return this.selectedUser === null || this.shareCases.length === 0;
2065
2142
  };
2066
- ShareCaseComponent.prototype.isDisabledContinue = function () {
2067
- var isDisabled = true;
2143
+ /**
2144
+ * Function originally used to set disabled state of "Continue" button, now called by the button click handler to
2145
+ * control whether navigation to the confirmation page is allowed. It is prevented if no changes have been made
2146
+ */
2147
+ ShareCaseComponent.prototype.setContinueAllowed = function () {
2148
+ var _this = this;
2149
+ // Always start with continueAllowed = false. This covers the scenario where a user might add someone for sharing
2150
+ // a case (so, continueAllowed = true), then removes the same user before trying to continue. This would
2151
+ // erroneously leave continueAllowed as true
2152
+ this.continueAllowed = false;
2068
2153
  this.shareCases$.subscribe(function (shareCases) {
2069
2154
  var e_1, _a;
2070
2155
  try {
2071
2156
  for (var shareCases_1 = __values(shareCases), shareCases_1_1 = shareCases_1.next(); !shareCases_1_1.done; shareCases_1_1 = shareCases_1.next()) {
2072
2157
  var caseState = shareCases_1_1.value;
2073
2158
  if (caseState.pendingShares && caseState.pendingShares.length > 0) {
2074
- isDisabled = false;
2159
+ _this.continueAllowed = true;
2075
2160
  break;
2076
2161
  }
2077
2162
  if (caseState.pendingUnshares && caseState.pendingUnshares.length > 0) {
2078
- isDisabled = false;
2163
+ _this.continueAllowed = true;
2079
2164
  break;
2080
2165
  }
2081
2166
  }
@@ -2088,7 +2173,6 @@
2088
2173
  finally { if (e_1) throw e_1.error; }
2089
2174
  }
2090
2175
  });
2091
- return isDisabled;
2092
2176
  };
2093
2177
  ShareCaseComponent.prototype.onDeselect = function (sharedCase) {
2094
2178
  var e_2, _a;
@@ -2113,23 +2197,91 @@
2113
2197
  }
2114
2198
  this.stateService.setCases(this.shareCases);
2115
2199
  };
2200
+ ShareCaseComponent.prototype.onContinue = function () {
2201
+ this.setContinueAllowed();
2202
+ // If continuation is not allowed, set an error message
2203
+ if (!this.continueAllowed) {
2204
+ this.validationErrors = [];
2205
+ this.validationErrors.push({ id: 'cases', message: exports.SharedCaseErrorMessages.NoChangesRequested });
2206
+ this.shareCaseErrorMessage = { isInvalid: true, messages: [exports.SharedCaseErrorMessages.NoChangesRequested] };
2207
+ window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
2208
+ }
2209
+ // Navigate to confirmation page only if allowed to continue
2210
+ if (this.continueAllowed) {
2211
+ // Check that no case is left unassigned; a user can be removed only if there is another current user, or if at
2212
+ // least one user is to be added. Prevent navigation to confirmation page if there is at least one case left in
2213
+ // an unassigned state
2214
+ if (this.hasCasesLeftUnassigned(this.shareCases)) {
2215
+ this.validationErrors = [];
2216
+ this.validationErrors.push({ id: 'cases', message: exports.SharedCaseErrorMessages.OnePersonMustBeAssigned });
2217
+ this.shareCaseErrorMessage = { isInvalid: true, messages: [exports.SharedCaseErrorMessages.OnePersonMustBeAssigned] };
2218
+ window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
2219
+ }
2220
+ else {
2221
+ this.router.navigate([this.confirmLink]);
2222
+ }
2223
+ }
2224
+ };
2225
+ /**
2226
+ * Gets a unique list of all users that have been assigned, or are pending assigment to, at least one case
2227
+ * @param sharedCases The list of shared cases from which to get users these are shared with, or are to be shared with
2228
+ */
2229
+ ShareCaseComponent.prototype.getAssignedUsers = function (sharedCases) {
2230
+ var users = [];
2231
+ sharedCases.forEach(function (sharedCase) {
2232
+ if (sharedCase.sharedWith) {
2233
+ sharedCase.sharedWith.forEach(function (user) {
2234
+ if (!users.some(function (existingUser) { return user.idamId === existingUser.idamId; })) {
2235
+ users.push(user);
2236
+ }
2237
+ });
2238
+ }
2239
+ if (sharedCase.pendingShares) {
2240
+ sharedCase.pendingShares.forEach(function (user) {
2241
+ if (!users.some(function (existingUser) { return user.idamId === existingUser.idamId; })) {
2242
+ users.push(user);
2243
+ }
2244
+ });
2245
+ }
2246
+ });
2247
+ this.assignedUsers = users;
2248
+ };
2249
+ /**
2250
+ * Checks if any shared cases have been left unassigned. This occurs if a shared case has a number of pending
2251
+ * unshares equal to the number of current shares, and there are no pending shares.
2252
+ * @param sharedCases The array of shared cases to check
2253
+ * @returns `true` if at least one case has the condition described above; `false` otherwise
2254
+ */
2255
+ ShareCaseComponent.prototype.hasCasesLeftUnassigned = function (sharedCases) {
2256
+ return sharedCases.some(function (sharedCase) {
2257
+ return sharedCase.pendingUnshares && sharedCase.sharedWith &&
2258
+ sharedCase.pendingUnshares.length === sharedCase.sharedWith.length &&
2259
+ (!sharedCase.pendingShares || sharedCase.pendingShares.length === 0);
2260
+ });
2261
+ };
2116
2262
  return ShareCaseComponent;
2117
2263
  }());
2118
2264
  ShareCaseComponent.decorators = [
2119
2265
  { type: i0.Component, args: [{
2120
2266
  selector: 'xuilib-share-case',
2121
- template: "<div id=\"add-user\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"add-user-input\">Enter email address</label>\n <span id=\"add-user-hint\" class=\"govuk-hint\">\n Search by name or email address. You can only add people from your organisation individually - but you can add as many as you like.\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <xuilib-user-select\n id=\"add-user-input\"\n aria-describedby=\"add-user-hint\"\n [users]=\"users\"\n (selected)=\"onSelectedUser($event)\">\n </xuilib-user-select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-add-user\" (click)=\"addUser()\" class=\"govuk-button\" [disabled]=\"isDisabledAdd()\" title=\"Add user to the case\">Add</button>\n </div>\n </div>\n <details id=\"add-user-help\" class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span id=\"content-why-can-not-find-email\" class=\"govuk-details__summary-text\">\n Can\u2019t find an email address?\n </span>\n </summary>\n <div id=\"content-reason-can-not-find-email\" class=\"govuk-details__text\">\n If you can\u2019t find your colleague\u2019s email address, they will need to complete their registration. Contact your\n administrator for help.\n </div>\n </details>\n</div>\n\n<div id=\"cases\">\n <h3 id=\"title-selected-cases\" class=\"govuk-heading-m\">Selected cases</h3>\n <div *ngIf=\"shareCases && shareCases.length > 0\" class=\"govuk-accordion\" data-module=\"govuk-accordion\" id=\"accordion-with-summary-sections\">\n <xuilib-selected-case-list\n [shareCases$]=\"shareCases$\"\n [removeUserFromCaseToggleOn]=\"removeUserFromCaseToggleOn\"\n (unselect)=\"onUnselect($event)\"\n (synchronizeStore)=\"onSynchronizeStore($event)\"\n >\n </xuilib-selected-case-list>\n </div>\n\n <div id=\"noCaseDisplay\" *ngIf=\"shareCases && shareCases.length === 0\" class=\"govuk-hint\">\n No cases to display.\n </div>\n\n</div>\n\n<div id=\"share-case-nav\">\n <button class=\"govuk-button\" [disabled]=\"isDisabledContinue()\" title=\"Continue\" [routerLink]=\"confirmLink\">Continue</button>\n</div>\n",
2122
- styles: [""]
2267
+ template: "<xuilib-hmcts-error-summary\n [errorMessages]=\"validationErrors\"\n [header]=\"'There is a problem'\"\n></xuilib-hmcts-error-summary>\n<h1 *ngIf=\"title\" class=\"govuk-heading-xl govuk-!-margin-top-2\">\n <span *ngIf=\"fnTitle\" class=\"govuk-caption-xl\">{{fnTitle}}</span>\n {{title}}\n</h1>\n<div id=\"add-user\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"add-user-input\">{{addUserLabel}}</label>\n <span id=\"add-user-hint\" class=\"govuk-hint\">\n Search by name or email address. You can share access with as many people as you need.\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <xuilib-user-select\n id=\"add-user-input\"\n aria-describedby=\"add-user-hint\"\n [users]=\"users\"\n (selected)=\"onSelectedUser($event)\">\n </xuilib-user-select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-add-user\" (click)=\"addUser()\" class=\"govuk-button govuk-button--secondary\" [disabled]=\"isDisabledAdd()\" title=\"Add user to selected cases\">Add</button>\n </div>\n </div>\n <details id=\"add-user-help\" class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span id=\"content-why-can-not-find-email\" class=\"govuk-details__summary-text\">\n Can't find an email address?\n </span>\n </summary>\n <div id=\"content-reason-can-not-find-email\" class=\"govuk-details__text\">\n If you can't find your colleague's email address, they will need to complete their registration. Contact your\n administrator for help.\n </div>\n </details>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"showRemoveUsers\">\n <label class=\"govuk-label govuk-!-font-weight-bold\" for=\"remove-user-input\">Remove a person from all cases</label>\n <span id=\"remove-user-hint\" class=\"govuk-hint\">\n Select a person to remove them from all selected cases.\n </span>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <select [(ngModel)]=\"selectedUserToRemove\" class=\"govuk-select\" id=\"remove-user-input\" aria-describedby=\"remove-user-hint\">\n <option [ngValue]=\"null\" selected>Select a person</option>\n <option *ngFor=\"let user of assignedUsers\" [ngValue]=\"user\">{{user.firstName}} {{user.lastName}} - {{user.email}}</option>\n </select>\n </div>\n <div class=\"govuk-grid-column-one-thirds\">\n <button id=\"btn-remove-user\" (click)=\"removeUser()\" class=\"govuk-button govuk-button--secondary\" title=\"Remove user from selected cases\">Remove</button>\n </div>\n </div>\n </div>\n</div>\n\n<div id=\"cases\" [ngClass]=\"{'govuk-form-group--error': shareCaseErrorMessage.messages && shareCaseErrorMessage.messages.length > 0}\">\n <h3 id=\"title-selected-cases\" class=\"govuk-heading-m\">Selected cases</h3>\n <xuilib-gov-uk-error-message [config]=\"selectedCasesErrorMessageConfig\" [errorMessage]=\"shareCaseErrorMessage\"></xuilib-gov-uk-error-message>\n <div *ngIf=\"shareCases && shareCases.length > 0\" class=\"govuk-accordion\" data-module=\"govuk-accordion\" id=\"accordion-with-summary-sections\">\n <xuilib-selected-case-list\n [shareCases$]=\"shareCases$\"\n [removeUserFromCaseToggleOn]=\"removeUserFromCaseToggleOn\"\n (unselect)=\"onUnselect($event)\"\n (synchronizeStore)=\"onSynchronizeStore($event)\"\n >\n </xuilib-selected-case-list>\n </div>\n\n <div id=\"noCaseDisplay\" *ngIf=\"shareCases && shareCases.length === 0\" class=\"govuk-hint\"\n [ngClass]=\"{'govuk-form-group--error': shareCaseErrorMessage.messages && shareCaseErrorMessage.messages.length > 0}\">\n No cases to display.\n </div>\n\n</div>\n\n<div id=\"share-case-nav\" class=\"govuk-button-group\">\n <button id=\"btn-continue\" class=\"govuk-button\" data-module=\"govuk-button\" (click)=\"onContinue()\" title=\"Continue\">Continue</button>\n <button id=\"btn-cancel\" class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\" title=\"Cancel\" [routerLink]=\"cancelLink\">Cancel</button>\n</div>\n",
2268
+ styles: ["select{width:100%}"]
2123
2269
  },] }
2124
2270
  ];
2125
2271
  ShareCaseComponent.ctorParameters = function () { return [
2126
- { type: CaseSharingStateService }
2272
+ { type: CaseSharingStateService },
2273
+ { type: i1.Router }
2127
2274
  ]; };
2128
2275
  ShareCaseComponent.propDecorators = {
2129
2276
  removeUserFromCaseToggleOn: [{ type: i0.Input }],
2130
2277
  shareCases$: [{ type: i0.Input }],
2131
2278
  users: [{ type: i0.Input }],
2132
2279
  confirmLink: [{ type: i0.Input }],
2280
+ cancelLink: [{ type: i0.Input }],
2281
+ addUserLabel: [{ type: i0.Input }],
2282
+ showRemoveUsers: [{ type: i0.Input }],
2283
+ fnTitle: [{ type: i0.Input }],
2284
+ title: [{ type: i0.Input }],
2133
2285
  unselect: [{ type: i0.Output }],
2134
2286
  synchronizeStore: [{ type: i0.Output }],
2135
2287
  userSelect: [{ type: i0.ViewChild, args: [UserSelectComponent, { static: true },] }]
@@ -2412,6 +2564,56 @@
2412
2564
  acceptanceNotifier: [{ type: i0.Output }]
2413
2565
  };
2414
2566
 
2567
+ exports.BadgeColour = void 0;
2568
+ (function (BadgeColour) {
2569
+ BadgeColour["BADGE_RED"] = "hmcts-badge--red";
2570
+ BadgeColour["BADGE_BLUE"] = "hmcts-badge--blue";
2571
+ BadgeColour["BADGE_GREEN"] = "hmcts-badge--green";
2572
+ })(exports.BadgeColour || (exports.BadgeColour = {}));
2573
+
2574
+ var AnonymousFeatureUser = /** @class */ (function () {
2575
+ function AnonymousFeatureUser() {
2576
+ }
2577
+ return AnonymousFeatureUser;
2578
+ }());
2579
+ var LoggedInFeatureUser = /** @class */ (function () {
2580
+ function LoggedInFeatureUser() {
2581
+ }
2582
+ return LoggedInFeatureUser;
2583
+ }());
2584
+
2585
+ exports.BookingCheckType = void 0;
2586
+ (function (BookingCheckType) {
2587
+ BookingCheckType["NO_CHECK"] = "NO_CHECK";
2588
+ BookingCheckType["BOOKINGS_AND_BASE"] = "BOOKINGS_AND_BASE";
2589
+ BookingCheckType["POSSIBLE_BOOKINGS"] = "POSSIBLE_BOOKINGS";
2590
+ })(exports.BookingCheckType || (exports.BookingCheckType = {}));
2591
+
2592
+ exports.PersonRole = void 0;
2593
+ (function (PersonRole) {
2594
+ PersonRole["JUDICIAL"] = "Judicial";
2595
+ PersonRole["CASEWORKER"] = "Legal Ops";
2596
+ PersonRole["ADMIN"] = "Admin";
2597
+ PersonRole["CTSC"] = "CTSC User";
2598
+ PersonRole["ALL"] = "All";
2599
+ })(exports.PersonRole || (exports.PersonRole = {}));
2600
+ // Note: RoleCategory could replace PersonRole possibly
2601
+ // However a lot of webapp logic is based on current PersonRole understanding
2602
+ exports.RoleCategory = void 0;
2603
+ (function (RoleCategory) {
2604
+ RoleCategory["JUDICIAL"] = "JUDICIAL";
2605
+ RoleCategory["CASEWORKER"] = "LEGAL_OPERATIONS";
2606
+ RoleCategory["ADMIN"] = "ADMIN";
2607
+ RoleCategory["CTSC"] = "CTSC";
2608
+ RoleCategory["ALL"] = "ALL";
2609
+ })(exports.RoleCategory || (exports.RoleCategory = {}));
2610
+
2611
+ var RadioFilterFieldConfig = /** @class */ (function () {
2612
+ function RadioFilterFieldConfig() {
2613
+ }
2614
+ return RadioFilterFieldConfig;
2615
+ }());
2616
+
2415
2617
  var LocationService = /** @class */ (function () {
2416
2618
  function LocationService(http) {
2417
2619
  this.http = http;
@@ -2423,8 +2625,8 @@
2423
2625
  * @param searchTerm: any search term for postcode | site name | venue name |court name | court address etc.
2424
2626
  * @return Observable<LocationByEPIMMSModel[]>: Array of locationModel in Observable
2425
2627
  */
2426
- LocationService.prototype.getAllLocations = function (serviceIds, locationType, searchTerm) {
2427
- return this.http.get("api/locations/getLocations?serviceIds=" + serviceIds + "&locationType=" + locationType + "&searchTerm=" + searchTerm);
2628
+ LocationService.prototype.getAllLocations = function (serviceIds, locationType, searchTerm, userLocations, bookingLocations) {
2629
+ return this.http.post("api/locations/getLocations", { serviceIds: serviceIds, locationType: locationType, searchTerm: searchTerm, userLocations: userLocations, bookingLocations: bookingLocations });
2428
2630
  };
2429
2631
  /**
2430
2632
  * @description searchLocations from service Ids/location type/search term
@@ -2445,12 +2647,56 @@
2445
2647
  },] }
2446
2648
  ];
2447
2649
  LocationService.ctorParameters = function () { return [
2448
- { type: i1.HttpClient }
2650
+ { type: i1$1.HttpClient }
2449
2651
  ]; };
2450
2652
 
2653
+ var SessionStorageService = /** @class */ (function () {
2654
+ function SessionStorageService() {
2655
+ }
2656
+ /**
2657
+ * Get an item from the session storage.
2658
+ * If remove is true, the item will be removed once read
2659
+ * @param removeAfterRead removed the key once it has been read
2660
+ */
2661
+ SessionStorageService.prototype.getItem = function (key, removeAfterRead) {
2662
+ if (removeAfterRead === void 0) { removeAfterRead = false; }
2663
+ var item = sessionStorage.getItem(key);
2664
+ if (removeAfterRead) {
2665
+ this.removeItem(key);
2666
+ }
2667
+ return item;
2668
+ };
2669
+ /**
2670
+ * Set an item in the session storage.
2671
+ */
2672
+ SessionStorageService.prototype.setItem = function (key, value) {
2673
+ sessionStorage.setItem(key, value);
2674
+ };
2675
+ /**
2676
+ * Remove an item in the session storage.
2677
+ */
2678
+ SessionStorageService.prototype.removeItem = function (key) {
2679
+ sessionStorage.removeItem(key);
2680
+ };
2681
+ /**
2682
+ * Clear all the items held in session storage.
2683
+ */
2684
+ SessionStorageService.prototype.clear = function () {
2685
+ sessionStorage.clear();
2686
+ };
2687
+ return SessionStorageService;
2688
+ }());
2689
+ SessionStorageService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function SessionStorageService_Factory() { return new SessionStorageService(); }, token: SessionStorageService, providedIn: "root" });
2690
+ SessionStorageService.decorators = [
2691
+ { type: i0.Injectable, args: [{
2692
+ providedIn: 'root'
2693
+ },] }
2694
+ ];
2695
+
2451
2696
  var SearchLocationComponent = /** @class */ (function () {
2452
- function SearchLocationComponent(locationService, fb, cd) {
2697
+ function SearchLocationComponent(locationService, sessionStorageService, fb, cd) {
2453
2698
  this.locationService = locationService;
2699
+ this.sessionStorageService = sessionStorageService;
2454
2700
  this.fb = fb;
2455
2701
  this.cd = cd;
2456
2702
  this.disabled = null;
@@ -2526,7 +2772,21 @@
2526
2772
  this.searchLocationChanged.emit();
2527
2773
  };
2528
2774
  SearchLocationComponent.prototype.getLocations = function (term) {
2529
- return this.locationService.getAllLocations(this.serviceIds, this.locationType, term);
2775
+ var userLocations;
2776
+ var bookingLocations;
2777
+ // Booking type info - can create more
2778
+ // NO_CHECK - All work - Do not filter out locations - Default assumption
2779
+ // ONLY_BOOKINGS - My work - Try to only show base locations/booking locations
2780
+ // POSSIBLE_BOOKINGS - Create booking screen - Show only potential bookings
2781
+ if (this.bookingCheck === exports.BookingCheckType.BOOKINGS_AND_BASE) {
2782
+ userLocations = JSON.parse(this.sessionStorageService.getItem('userLocations'));
2783
+ bookingLocations = JSON.parse(this.sessionStorageService.getItem('bookingLocations'));
2784
+ }
2785
+ else if (this.bookingCheck === exports.BookingCheckType.POSSIBLE_BOOKINGS) {
2786
+ userLocations = JSON.parse(this.sessionStorageService.getItem('userLocations'));
2787
+ this.serviceIds = JSON.parse(this.sessionStorageService.getItem('bookableServices'));
2788
+ }
2789
+ return this.locationService.getAllLocations(this.serviceIds, this.locationType, term, userLocations, bookingLocations);
2530
2790
  };
2531
2791
  SearchLocationComponent.prototype.resetSearchTerm = function () {
2532
2792
  this.form.controls.searchTerm.patchValue('', { emitEvent: false, onlySelf: true });
@@ -2549,6 +2809,7 @@
2549
2809
  ];
2550
2810
  SearchLocationComponent.ctorParameters = function () { return [
2551
2811
  { type: LocationService },
2812
+ { type: SessionStorageService },
2552
2813
  { type: forms.FormBuilder },
2553
2814
  { type: i0.ChangeDetectorRef }
2554
2815
  ]; };
@@ -2563,6 +2824,7 @@
2563
2824
  form: [{ type: i0.Input }],
2564
2825
  showAutocomplete: [{ type: i0.Input }],
2565
2826
  locations: [{ type: i0.Input }],
2827
+ bookingCheck: [{ type: i0.Input }],
2566
2828
  locationSelected: [{ type: i0.Output }],
2567
2829
  locationInputChanged: [{ type: i0.Output }],
2568
2830
  searchLocationChanged: [{ type: i0.Output }],
@@ -2618,6 +2880,10 @@
2618
2880
  enumerable: false,
2619
2881
  configurable: true
2620
2882
  });
2883
+ FindLocationComponent.prototype.ngOnInit = function () {
2884
+ // implemented to get rid of undefined values
2885
+ this.selectedLocations = this.selectedLocations.filter(function (location) { return location.epimms_id; });
2886
+ };
2621
2887
  FindLocationComponent.prototype.addLocation = function () {
2622
2888
  if (this.tempSelectedLocation) {
2623
2889
  this.selectedLocations = __spread(this.selectedLocations, [this.tempSelectedLocation]);
@@ -2688,7 +2954,7 @@
2688
2954
  FindLocationComponent.decorators = [
2689
2955
  { type: i0.Component, args: [{
2690
2956
  selector: 'xuilib-find-location',
2691
- 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 [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",
2957
+ 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",
2692
2958
  styles: [""]
2693
2959
  },] }
2694
2960
  ];
@@ -2883,105 +3149,21 @@
2883
3149
  sessionStorageService.setItem(sessionKey, JSON.stringify(caseworkers));
2884
3150
  };
2885
3151
 
2886
- exports.BadgeColour = void 0;
2887
- (function (BadgeColour) {
2888
- BadgeColour["BADGE_RED"] = "hmcts-badge--red";
2889
- BadgeColour["BADGE_BLUE"] = "hmcts-badge--blue";
2890
- BadgeColour["BADGE_GREEN"] = "hmcts-badge--green";
2891
- })(exports.BadgeColour || (exports.BadgeColour = {}));
2892
-
2893
- var AnonymousFeatureUser = /** @class */ (function () {
2894
- function AnonymousFeatureUser() {
2895
- }
2896
- return AnonymousFeatureUser;
2897
- }());
2898
- var LoggedInFeatureUser = /** @class */ (function () {
2899
- function LoggedInFeatureUser() {
2900
- }
2901
- return LoggedInFeatureUser;
2902
- }());
2903
-
2904
- exports.PersonRole = void 0;
2905
- (function (PersonRole) {
2906
- PersonRole["JUDICIAL"] = "Judicial";
2907
- PersonRole["CASEWORKER"] = "Legal Ops";
2908
- PersonRole["ADMIN"] = "Admin";
2909
- PersonRole["ALL"] = "All";
2910
- })(exports.PersonRole || (exports.PersonRole = {}));
2911
- // Note: RoleCategory could replace PersonRole possibly
2912
- // However a lot of webapp logic is based on current PersonRole understanding
2913
- exports.RoleCategory = void 0;
2914
- (function (RoleCategory) {
2915
- RoleCategory["JUDICIAL"] = "JUDICIAL";
2916
- RoleCategory["CASEWORKER"] = "LEGAL_OPERATIONS";
2917
- RoleCategory["ADMIN"] = "ADMIN";
2918
- RoleCategory["ALL"] = "ALL";
2919
- })(exports.RoleCategory || (exports.RoleCategory = {}));
2920
-
2921
- var RadioFilterFieldConfig = /** @class */ (function () {
2922
- function RadioFilterFieldConfig() {
2923
- }
2924
- return RadioFilterFieldConfig;
2925
- }());
2926
-
2927
- var SessionStorageService = /** @class */ (function () {
2928
- function SessionStorageService() {
3152
+ var FindAPersonService = /** @class */ (function () {
3153
+ function FindAPersonService(http, sessionStorageService) {
3154
+ this.http = http;
3155
+ this.sessionStorageService = sessionStorageService;
2929
3156
  }
2930
- /**
2931
- * Get an item from the session storage.
2932
- * If remove is true, the item will be removed once read
2933
- * @param removeAfterRead removed the key once it has been read
2934
- */
2935
- SessionStorageService.prototype.getItem = function (key, removeAfterRead) {
2936
- if (removeAfterRead === void 0) { removeAfterRead = false; }
2937
- var item = sessionStorage.getItem(key);
2938
- if (removeAfterRead) {
2939
- this.removeItem(key);
3157
+ FindAPersonService.prototype.find = function (searchOptions) {
3158
+ var _this = this;
3159
+ var userInfoStr = this.sessionStorageService.getItem('userDetails');
3160
+ if (userInfoStr && !searchOptions.userIncluded) {
3161
+ var userInfo = JSON.parse(userInfoStr);
3162
+ this.userId = userInfo.id ? userInfo.id : userInfo.uid;
2940
3163
  }
2941
- return item;
2942
- };
2943
- /**
2944
- * Set an item in the session storage.
2945
- */
2946
- SessionStorageService.prototype.setItem = function (key, value) {
2947
- sessionStorage.setItem(key, value);
2948
- };
2949
- /**
2950
- * Remove an item in the session storage.
2951
- */
2952
- SessionStorageService.prototype.removeItem = function (key) {
2953
- sessionStorage.removeItem(key);
2954
- };
2955
- /**
2956
- * Clear all the items held in session storage.
2957
- */
2958
- SessionStorageService.prototype.clear = function () {
2959
- sessionStorage.clear();
2960
- };
2961
- return SessionStorageService;
2962
- }());
2963
- SessionStorageService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function SessionStorageService_Factory() { return new SessionStorageService(); }, token: SessionStorageService, providedIn: "root" });
2964
- SessionStorageService.decorators = [
2965
- { type: i0.Injectable, args: [{
2966
- providedIn: 'root'
2967
- },] }
2968
- ];
2969
-
2970
- var FindAPersonService = /** @class */ (function () {
2971
- function FindAPersonService(http, sessionStorageService) {
2972
- this.http = http;
2973
- this.sessionStorageService = sessionStorageService;
2974
- }
2975
- FindAPersonService.prototype.find = function (searchOptions) {
2976
- var _this = this;
2977
- var userInfoStr = this.sessionStorageService.getItem('userDetails');
2978
- if (userInfoStr && !searchOptions.userIncluded) {
2979
- var userInfo = JSON.parse(userInfoStr);
2980
- this.userId = userInfo.id ? userInfo.id : userInfo.uid;
2981
- }
2982
- this.assignedUser = searchOptions.assignedUser ? searchOptions.assignedUser : null;
2983
- return this.http.post('/workallocation2/findPerson', { searchOptions: searchOptions })
2984
- .pipe(operators.map(function (judiciary) { return judiciary.filter(function (judge) { return !([_this.assignedUser, _this.userId].includes(judge.id)); }); }));
3164
+ this.assignedUser = searchOptions.assignedUser ? searchOptions.assignedUser : null;
3165
+ return this.http.post('/workallocation/findPerson', { searchOptions: searchOptions })
3166
+ .pipe(operators.map(function (judiciary) { return judiciary.filter(function (judge) { return !([_this.assignedUser, _this.userId].includes(judge.id)); }); }));
2985
3167
  };
2986
3168
  FindAPersonService.prototype.findCaseworkers = function (searchOptions) {
2987
3169
  var _this = this;
@@ -3011,7 +3193,7 @@
3011
3193
  return rxjs.of(this.searchInCaseworkers(storedCaseworkers, searchOptions));
3012
3194
  }
3013
3195
  // all serviceIds passed in as node layer getting used anyway and caseworkers also stored there
3014
- return this.http.post('/workallocation2/retrieveCaseWorkersForServices', { fullServices: fullServices }).pipe(operators.tap(function (caseworkersByService) {
3196
+ return this.http.post('/workallocation/retrieveCaseWorkersForServices', { fullServices: fullServices }).pipe(operators.tap(function (caseworkersByService) {
3015
3197
  caseworkersByService.forEach(function (caseworkerListByService) {
3016
3198
  // for any new service, ensure that they are then stored in the session
3017
3199
  if (newServices.includes(caseworkerListByService.service)) {
@@ -3063,7 +3245,7 @@
3063
3245
  },] }
3064
3246
  ];
3065
3247
  FindAPersonService.ctorParameters = function () { return [
3066
- { type: i1.HttpClient },
3248
+ { type: i1$1.HttpClient },
3067
3249
  { type: SessionStorageService }
3068
3250
  ]; };
3069
3251
 
@@ -3124,7 +3306,7 @@
3124
3306
  _this.searchInProgress = false;
3125
3307
  return apiFilter;
3126
3308
  })).subscribe(function (judicial) {
3127
- if (term === judicial.knownAs) {
3309
+ if (term === judicial.fullName) {
3128
3310
  _this.formGroup.controls.selectedFormControl.setValue(judicial);
3129
3311
  _this.displayedJudicials = [];
3130
3312
  _this.judicialChanged.emit(judicial);
@@ -3159,7 +3341,7 @@
3159
3341
  }
3160
3342
  };
3161
3343
  SearchJudicialsComponent.prototype.getDisplayName = function (selectedJudicial) {
3162
- return selectedJudicial.knownAs + " (" + selectedJudicial.emailId + ")";
3344
+ return selectedJudicial.fullName + " (" + selectedJudicial.emailId + ")";
3163
3345
  };
3164
3346
  SearchJudicialsComponent.prototype.searchJudicials = function (term, serviceId) {
3165
3347
  return this.judicialService.searchJudicial(term, serviceId);
@@ -3274,8 +3456,8 @@
3274
3456
  if (!selectedPerson) {
3275
3457
  return '';
3276
3458
  }
3277
- if (selectedPerson.domain === exports.PersonRole.JUDICIAL && selectedPerson.knownAs) {
3278
- return selectedPerson.knownAs + " (" + selectedPerson.email + ")";
3459
+ if (selectedPerson.domain === exports.PersonRole.JUDICIAL && selectedPerson.fullName) {
3460
+ return selectedPerson.fullName + " (" + selectedPerson.email + ")";
3279
3461
  }
3280
3462
  return selectedPerson.email ? selectedPerson.name + " (" + selectedPerson.email + ")" : selectedPerson.name;
3281
3463
  };
@@ -3427,6 +3609,66 @@
3427
3609
  xuilibLet: [{ type: i0.Input }]
3428
3610
  };
3429
3611
 
3612
+ var FindServiceComponent = /** @class */ (function () {
3613
+ function FindServiceComponent() {
3614
+ this.serviceTitle = 'Search for a service by name';
3615
+ this.enableAddServiceButton = true;
3616
+ this.disableInputField = false;
3617
+ }
3618
+ FindServiceComponent.prototype.addService = function () {
3619
+ // Todo
3620
+ };
3621
+ return FindServiceComponent;
3622
+ }());
3623
+ FindServiceComponent.decorators = [
3624
+ { type: i0.Component, args: [{
3625
+ selector: 'xuilib-find-service',
3626
+ 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",
3627
+ styles: ["#add-service{background-color:#ddd}"]
3628
+ },] }
3629
+ ];
3630
+ FindServiceComponent.propDecorators = {
3631
+ field: [{ type: i0.Input }],
3632
+ fields: [{ type: i0.Input }],
3633
+ serviceTitle: [{ type: i0.Input }],
3634
+ form: [{ type: i0.Input }],
3635
+ services: [{ type: i0.Input }],
3636
+ selectedServices: [{ type: i0.Input }],
3637
+ disabled: [{ type: i0.Input }],
3638
+ enableAddServiceButton: [{ type: i0.Input }],
3639
+ disableInputField: [{ type: i0.Input }]
3640
+ };
3641
+
3642
+ var SearchServiceComponent = /** @class */ (function () {
3643
+ function SearchServiceComponent() {
3644
+ this.showAutocomplete = false;
3645
+ this.minSearchCharacters = 3;
3646
+ this.term = '';
3647
+ }
3648
+ SearchServiceComponent.prototype.onInput = function () {
3649
+ // Todo
3650
+ };
3651
+ SearchServiceComponent.prototype.onSelectionChange = function () {
3652
+ // Todo
3653
+ };
3654
+ return SearchServiceComponent;
3655
+ }());
3656
+ SearchServiceComponent.decorators = [
3657
+ { type: i0.Component, args: [{
3658
+ selector: 'exui-search-service',
3659
+ 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",
3660
+ 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:0 2px 6px rgba(0,0,0,.256863);left:0;position:absolute;top:100%;z-index:100}.autocomplete__menu--inline{position:relative}.autocomplete__option{border-left-width:0;border-bottom:1px solid #b1b4b6;border-right-width:0;border-top-width:1px;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}"]
3661
+ },] }
3662
+ ];
3663
+ SearchServiceComponent.propDecorators = {
3664
+ services: [{ type: i0.Input }],
3665
+ selectedServices: [{ type: i0.Input }],
3666
+ disabled: [{ type: i0.Input }],
3667
+ delay: [{ type: i0.Input }],
3668
+ form: [{ type: i0.Input }],
3669
+ showAutocomplete: [{ type: i0.Input }]
3670
+ };
3671
+
3430
3672
  /*
3431
3673
  * Gov Uk Checkbox Dumb Component responsible for
3432
3674
  * displaying checkbox input and hint
@@ -4126,6 +4368,166 @@
4126
4368
  { type: i0.ElementRef }
4127
4369
  ]; };
4128
4370
 
4371
+ var COMMON_COMPONENTS = [
4372
+ ExuiPageWrapperComponent,
4373
+ TermsAndConditionsComponent,
4374
+ TcDisplayHtmlComponent,
4375
+ TcDisplayPlainComponent,
4376
+ TcConfirmComponent,
4377
+ ContactDetailsComponent,
4378
+ FeatureToggleDirective,
4379
+ LetDirective,
4380
+ HmctsSessionDialogComponent,
4381
+ UserListComponent,
4382
+ UserDetailsComponent,
4383
+ InviteUserPermissionComponent,
4384
+ InviteUserFormComponent,
4385
+ ShareCaseComponent,
4386
+ ShareCaseConfirmComponent,
4387
+ SelectedCaseListComponent,
4388
+ SelectedCaseComponent,
4389
+ SelectedCaseConfirmComponent,
4390
+ UserSelectComponent,
4391
+ TabComponent,
4392
+ AccessibilityComponent,
4393
+ DueDateComponent,
4394
+ CheckboxListComponent,
4395
+ ServiceMessageComponent,
4396
+ ServiceMessagesComponent,
4397
+ LoadingSpinnerComponent,
4398
+ GenericFilterComponent,
4399
+ CookieBannerComponent,
4400
+ FindPersonComponent,
4401
+ SearchJudicialsComponent,
4402
+ FindLocationComponent,
4403
+ SearchLocationComponent,
4404
+ FindServiceComponent,
4405
+ SearchServiceComponent,
4406
+ SearchVenueComponent,
4407
+ PaginationComponent
4408
+ ];
4409
+ var GOV_UI_COMPONENTS = [
4410
+ HmctsIdentityBarComponent,
4411
+ HmctsPaginationComponent,
4412
+ HmctsSubNavigationComponent,
4413
+ HmctsPrimaryNavigationComponent,
4414
+ HmctsErrorSummaryComponent,
4415
+ HmctsMainWrapperComponent,
4416
+ HmctsBannerComponent,
4417
+ GovukTableComponent,
4418
+ GovUkInputComponent,
4419
+ GovUkCheckboxComponent,
4420
+ GovUkFormGroupWrapperComponent,
4421
+ GovUkLabelComponent,
4422
+ GovUkErrorMessageComponent,
4423
+ GovUkFieldsetComponent,
4424
+ GovUkDateComponent,
4425
+ GovUkCheckboxesComponent,
4426
+ GovUkRadioComponent,
4427
+ GovUkRadiosComponent,
4428
+ GovUkSelectComponent,
4429
+ GovUkTextareaComponent,
4430
+ GovUkFileUploadComponent,
4431
+ RemoveHostDirective
4432
+ ];
4433
+ var ɵ0 = windowProvider;
4434
+ var ExuiCommonLibModule = /** @class */ (function () {
4435
+ function ExuiCommonLibModule() {
4436
+ }
4437
+ return ExuiCommonLibModule;
4438
+ }());
4439
+ ExuiCommonLibModule.decorators = [
4440
+ { type: i0.NgModule, args: [{
4441
+ declarations: __spread(COMMON_COMPONENTS, GOV_UI_COMPONENTS),
4442
+ imports: [
4443
+ i4.CommonModule,
4444
+ forms.FormsModule,
4445
+ forms.ReactiveFormsModule,
4446
+ i1.RouterModule.forChild([]),
4447
+ autocomplete.MatAutocompleteModule,
4448
+ tabs.MatTabsModule,
4449
+ input.MatInputModule,
4450
+ ngxPagination.NgxPaginationModule
4451
+ ],
4452
+ providers: [
4453
+ { provide: windowToken, useFactory: ɵ0 }
4454
+ ],
4455
+ exports: __spread(COMMON_COMPONENTS, GOV_UI_COMPONENTS, [
4456
+ ngxPagination.PaginatePipe
4457
+ ])
4458
+ },] }
4459
+ ];
4460
+
4461
+ var GovUiService = /** @class */ (function () {
4462
+ function GovUiService() {
4463
+ }
4464
+ return GovUiService;
4465
+ }());
4466
+ GovUiService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function GovUiService_Factory() { return new GovUiService(); }, token: GovUiService, providedIn: "root" });
4467
+ GovUiService.decorators = [
4468
+ { type: i0.Injectable, args: [{
4469
+ providedIn: 'root'
4470
+ },] }
4471
+ ];
4472
+ GovUiService.ctorParameters = function () { return []; };
4473
+
4474
+ function checkboxesBeCheckedValidator(minRequired) {
4475
+ if (minRequired === void 0) { minRequired = 1; }
4476
+ return function validate(formGroup) {
4477
+ var checked = 0;
4478
+ Object.keys(formGroup.controls).forEach(function (key) {
4479
+ var control = formGroup.controls[key];
4480
+ if (control.value === true) {
4481
+ checked++;
4482
+ }
4483
+ });
4484
+ if (checked < minRequired) {
4485
+ return {
4486
+ requireOneCheckboxToBeChecked: true,
4487
+ };
4488
+ }
4489
+ return null;
4490
+ };
4491
+ }
4492
+
4493
+ function dateValidator() {
4494
+ return function validate(formGroup) {
4495
+ var d = new Date(parseInt(formGroup.controls.day.value, 10), parseInt(formGroup.controls.month.value, 10) - 1, parseInt(formGroup.controls.year.value, 10) - 1);
4496
+ function isValidDate(val) {
4497
+ return val instanceof Date && !isNaN(+d);
4498
+ }
4499
+ if (!isValidDate(d)) {
4500
+ return {
4501
+ dateIsInvalid: true,
4502
+ };
4503
+ }
4504
+ return null;
4505
+ };
4506
+ }
4507
+
4508
+ function radioGroupValidator() {
4509
+ return function validate(formGroup) {
4510
+ if (formGroup.controls) {
4511
+ for (var control in formGroup.controls) {
4512
+ if (!formGroup.controls[control].valid) {
4513
+ return {
4514
+ isRadioGroupInvalid: true,
4515
+ };
4516
+ }
4517
+ }
4518
+ }
4519
+ return null;
4520
+ };
4521
+ }
4522
+
4523
+ /*
4524
+ * Public API Surface of gov-ui
4525
+ */
4526
+
4527
+ /*
4528
+ * Public API Surface of gov-ui
4529
+ */
4530
+
4129
4531
  var FeatureToggleGuard = /** @class */ (function () {
4130
4532
  function FeatureToggleGuard(featureToggleService, router) {
4131
4533
  this.featureToggleService = featureToggleService;
@@ -4152,7 +4554,7 @@
4152
4554
  ];
4153
4555
  FeatureToggleGuard.ctorParameters = function () { return [
4154
4556
  { type: FeatureToggleService },
4155
- { type: i1$1.Router }
4557
+ { type: i1.Router }
4156
4558
  ]; };
4157
4559
 
4158
4560
  var LaunchDarklyService = /** @class */ (function () {
@@ -4242,7 +4644,7 @@
4242
4644
  var _this = this;
4243
4645
  if (this.googleAnalyticsKey) {
4244
4646
  this.router.events.subscribe(function (event) {
4245
- if (event instanceof i1$1.NavigationEnd) {
4647
+ if (event instanceof i1.NavigationEnd) {
4246
4648
  _this.window.gtag('config', _this.googleAnalyticsKey, {
4247
4649
  page_path: event.urlAfterRedirects,
4248
4650
  page_title: _this.title.getTitle(),
@@ -4263,7 +4665,7 @@
4263
4665
  },] }
4264
4666
  ];
4265
4667
  GoogleAnalyticsService.ctorParameters = function () { return [
4266
- { type: i1$1.Router },
4668
+ { type: i1.Router },
4267
4669
  { type: i2.Title },
4268
4670
  { type: undefined, decorators: [{ type: i0.Inject, args: [windowToken,] }] },
4269
4671
  { type: undefined, decorators: [{ type: i0.Inject, args: [i4.DOCUMENT,] }] }
@@ -4299,7 +4701,7 @@
4299
4701
  var _this = this;
4300
4702
  if (this.googleTagManagerKey) {
4301
4703
  this.router.events.subscribe(function (event) {
4302
- if (event instanceof i1$1.NavigationEnd) {
4704
+ if (event instanceof i1.NavigationEnd) {
4303
4705
  _this.window.dataLayer.push({
4304
4706
  event: 'pageview',
4305
4707
  page: {
@@ -4326,7 +4728,7 @@
4326
4728
  },] }
4327
4729
  ];
4328
4730
  GoogleTagManagerService.ctorParameters = function () { return [
4329
- { type: i1$1.Router },
4731
+ { type: i1.Router },
4330
4732
  { type: i2.Title },
4331
4733
  { type: undefined, decorators: [{ type: i0.Inject, args: [windowToken,] }] },
4332
4734
  { type: undefined, decorators: [{ type: i0.Inject, args: [i4.DOCUMENT,] }] }
@@ -4517,7 +4919,7 @@
4517
4919
  ];
4518
4920
  RoleGuard.ctorParameters = function () { return [
4519
4921
  { type: RoleService },
4520
- { type: i1$1.Router }
4922
+ { type: i1.Router }
4521
4923
  ]; };
4522
4924
 
4523
4925
  var HasLoadingState = /** @class */ (function () {
@@ -4571,178 +4973,6 @@
4571
4973
  * Public API Surface of exui-common-lib
4572
4974
  */
4573
4975
 
4574
- var COMMON_COMPONENTS = [
4575
- ExuiPageWrapperComponent,
4576
- TermsAndConditionsComponent,
4577
- TcDisplayHtmlComponent,
4578
- TcDisplayPlainComponent,
4579
- TcConfirmComponent,
4580
- ContactDetailsComponent,
4581
- FeatureToggleDirective,
4582
- LetDirective,
4583
- HmctsSessionDialogComponent,
4584
- UserListComponent,
4585
- UserDetailsComponent,
4586
- InviteUserPermissionComponent,
4587
- InviteUserFormComponent,
4588
- ShareCaseComponent,
4589
- ShareCaseConfirmComponent,
4590
- SelectedCaseListComponent,
4591
- SelectedCaseComponent,
4592
- SelectedCaseConfirmComponent,
4593
- UserSelectComponent,
4594
- TabComponent,
4595
- AccessibilityComponent,
4596
- DueDateComponent,
4597
- CheckboxListComponent,
4598
- ServiceMessageComponent,
4599
- ServiceMessagesComponent,
4600
- LoadingSpinnerComponent,
4601
- GenericFilterComponent,
4602
- CookieBannerComponent,
4603
- FindPersonComponent,
4604
- SearchJudicialsComponent,
4605
- FindLocationComponent,
4606
- SearchLocationComponent,
4607
- SearchVenueComponent,
4608
- PaginationComponent
4609
- ];
4610
- var GOV_UI_COMPONENTS = [
4611
- HmctsIdentityBarComponent,
4612
- HmctsPaginationComponent,
4613
- HmctsSubNavigationComponent,
4614
- HmctsPrimaryNavigationComponent,
4615
- HmctsErrorSummaryComponent,
4616
- HmctsMainWrapperComponent,
4617
- HmctsBannerComponent,
4618
- GovukTableComponent,
4619
- GovUkInputComponent,
4620
- GovUkCheckboxComponent,
4621
- GovUkFormGroupWrapperComponent,
4622
- GovUkLabelComponent,
4623
- GovUkErrorMessageComponent,
4624
- GovUkFieldsetComponent,
4625
- GovUkDateComponent,
4626
- GovUkCheckboxesComponent,
4627
- GovUkRadioComponent,
4628
- GovUkRadiosComponent,
4629
- GovUkSelectComponent,
4630
- GovUkTextareaComponent,
4631
- GovUkFileUploadComponent,
4632
- RemoveHostDirective
4633
- ];
4634
- var COMMON_SERVICES = [
4635
- CaseSharingStateService,
4636
- CookieService,
4637
- LaunchDarklyService,
4638
- FilterService,
4639
- FindAPersonService,
4640
- GoogleAnalyticsService,
4641
- GoogleTagManagerService,
4642
- LoadingService,
4643
- LocationService,
4644
- ManageSessionServices,
4645
- SessionStorageService,
4646
- TimeoutNotificationsService
4647
- ];
4648
- var ɵ0 = windowProvider;
4649
- var ExuiCommonLibModule = /** @class */ (function () {
4650
- function ExuiCommonLibModule() {
4651
- }
4652
- return ExuiCommonLibModule;
4653
- }());
4654
- ExuiCommonLibModule.decorators = [
4655
- { type: i0.NgModule, args: [{
4656
- declarations: __spread(COMMON_COMPONENTS, GOV_UI_COMPONENTS),
4657
- imports: [
4658
- i4.CommonModule,
4659
- forms.FormsModule,
4660
- forms.ReactiveFormsModule,
4661
- i1$1.RouterModule.forChild([]),
4662
- autocomplete.MatAutocompleteModule,
4663
- tabs.MatTabsModule,
4664
- input.MatInputModule,
4665
- ngxPagination.NgxPaginationModule
4666
- ],
4667
- providers: __spread(COMMON_SERVICES, [
4668
- { provide: windowToken, useFactory: ɵ0 }
4669
- ]),
4670
- exports: __spread(COMMON_COMPONENTS, GOV_UI_COMPONENTS, [
4671
- ngxPagination.PaginatePipe
4672
- ])
4673
- },] }
4674
- ];
4675
-
4676
- var GovUiService = /** @class */ (function () {
4677
- function GovUiService() {
4678
- }
4679
- return GovUiService;
4680
- }());
4681
- GovUiService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function GovUiService_Factory() { return new GovUiService(); }, token: GovUiService, providedIn: "root" });
4682
- GovUiService.decorators = [
4683
- { type: i0.Injectable, args: [{
4684
- providedIn: 'root'
4685
- },] }
4686
- ];
4687
- GovUiService.ctorParameters = function () { return []; };
4688
-
4689
- function checkboxesBeCheckedValidator(minRequired) {
4690
- if (minRequired === void 0) { minRequired = 1; }
4691
- return function validate(formGroup) {
4692
- var checked = 0;
4693
- Object.keys(formGroup.controls).forEach(function (key) {
4694
- var control = formGroup.controls[key];
4695
- if (control.value === true) {
4696
- checked++;
4697
- }
4698
- });
4699
- if (checked < minRequired) {
4700
- return {
4701
- requireOneCheckboxToBeChecked: true,
4702
- };
4703
- }
4704
- return null;
4705
- };
4706
- }
4707
-
4708
- function dateValidator() {
4709
- return function validate(formGroup) {
4710
- var d = new Date(parseInt(formGroup.controls.day.value, 10), parseInt(formGroup.controls.month.value, 10) - 1, parseInt(formGroup.controls.year.value, 10) - 1);
4711
- function isValidDate(val) {
4712
- return val instanceof Date && !isNaN(+d);
4713
- }
4714
- if (!isValidDate(d)) {
4715
- return {
4716
- dateIsInvalid: true,
4717
- };
4718
- }
4719
- return null;
4720
- };
4721
- }
4722
-
4723
- function radioGroupValidator() {
4724
- return function validate(formGroup) {
4725
- if (formGroup.controls) {
4726
- for (var control in formGroup.controls) {
4727
- if (!formGroup.controls[control].valid) {
4728
- return {
4729
- isRadioGroupInvalid: true,
4730
- };
4731
- }
4732
- }
4733
- }
4734
- return null;
4735
- };
4736
- }
4737
-
4738
- /*
4739
- * Public API Surface of gov-ui
4740
- */
4741
-
4742
- /*
4743
- * Public API Surface of gov-ui
4744
- */
4745
-
4746
4976
  /*
4747
4977
  * Public API Surface of exui-common-lib
4748
4978
  */
@@ -4754,8 +4984,6 @@
4754
4984
  exports.AccessibilityComponent = AccessibilityComponent;
4755
4985
  exports.AnonymousFeatureUser = AnonymousFeatureUser;
4756
4986
  exports.COMMON_COMPONENTS = COMMON_COMPONENTS;
4757
- exports.COMMON_SERVICES = COMMON_SERVICES;
4758
- exports.CaseSharingStateService = CaseSharingStateService;
4759
4987
  exports.CheckboxListComponent = CheckboxListComponent;
4760
4988
  exports.ContactDetailsComponent = ContactDetailsComponent;
4761
4989
  exports.CookieBannerComponent = CookieBannerComponent;
@@ -4767,7 +4995,6 @@
4767
4995
  exports.FeatureToggleGuard = FeatureToggleGuard;
4768
4996
  exports.FeatureToggleService = FeatureToggleService;
4769
4997
  exports.FilterService = FilterService;
4770
- exports.FindAPersonService = FindAPersonService;
4771
4998
  exports.FindLocationComponent = FindLocationComponent;
4772
4999
  exports.FindPersonComponent = FindPersonComponent;
4773
5000
  exports.GOV_UI_COMPONENTS = GOV_UI_COMPONENTS;
@@ -4806,7 +5033,6 @@
4806
5033
  exports.LetDirective = LetDirective;
4807
5034
  exports.LoadingService = LoadingService;
4808
5035
  exports.LoadingSpinnerComponent = LoadingSpinnerComponent;
4809
- exports.LocationService = LocationService;
4810
5036
  exports.LoggedInFeatureUser = LoggedInFeatureUser;
4811
5037
  exports.ManageSessionServices = ManageSessionServices;
4812
5038
  exports.PaginationComponent = PaginationComponent;
@@ -4823,7 +5049,6 @@
4823
5049
  exports.SelectedCaseListComponent = SelectedCaseListComponent;
4824
5050
  exports.ServiceMessageComponent = ServiceMessageComponent;
4825
5051
  exports.ServiceMessagesComponent = ServiceMessagesComponent;
4826
- exports.SessionStorageService = SessionStorageService;
4827
5052
  exports.ShareCaseComponent = ShareCaseComponent;
4828
5053
  exports.ShareCaseConfirmComponent = ShareCaseConfirmComponent;
4829
5054
  exports.TabComponent = TabComponent;
@@ -4857,43 +5082,33 @@
4857
5082
  exports["ɵbl"] = FindLocationComponent;
4858
5083
  exports["ɵbm"] = SearchLocationComponent;
4859
5084
  exports["ɵbn"] = LocationService;
4860
- exports["ɵbo"] = SearchVenueComponent;
4861
- exports["ɵbp"] = PaginationComponent;
4862
- exports["ɵbq"] = HmctsIdentityBarComponent;
4863
- exports["ɵbr"] = HmctsPaginationComponent;
4864
- exports["ɵbs"] = HmctsSubNavigationComponent;
4865
- exports["ɵbt"] = HmctsPrimaryNavigationComponent;
4866
- exports["ɵbu"] = HmctsErrorSummaryComponent;
4867
- exports["ɵbv"] = HmctsMainWrapperComponent;
4868
- exports["ɵbw"] = HmctsBannerComponent;
4869
- exports["ɵbx"] = GovukTableComponent;
4870
- exports["ɵby"] = GovUkInputComponent;
4871
- exports["ɵbz"] = GovUkCheckboxComponent;
5085
+ exports["ɵbo"] = FindServiceComponent;
5086
+ exports["ɵbp"] = SearchServiceComponent;
5087
+ exports["ɵbq"] = SearchVenueComponent;
5088
+ exports["ɵbr"] = PaginationComponent;
5089
+ exports["ɵbs"] = HmctsIdentityBarComponent;
5090
+ exports["ɵbt"] = HmctsPaginationComponent;
5091
+ exports["ɵbu"] = HmctsSubNavigationComponent;
5092
+ exports["ɵbv"] = HmctsPrimaryNavigationComponent;
5093
+ exports["ɵbw"] = HmctsErrorSummaryComponent;
5094
+ exports["ɵbx"] = HmctsMainWrapperComponent;
5095
+ exports["ɵby"] = HmctsBannerComponent;
5096
+ exports["ɵbz"] = GovukTableComponent;
4872
5097
  exports["ɵc"] = TcDisplayHtmlComponent;
4873
- exports["ɵca"] = GovUkFormGroupWrapperComponent;
4874
- exports["ɵcb"] = GovUkLabelComponent;
4875
- exports["ɵcc"] = GovUkErrorMessageComponent;
4876
- exports["ɵcd"] = GovUkFieldsetComponent;
4877
- exports["ɵce"] = GovUkDateComponent;
4878
- exports["ɵcf"] = GovUkCheckboxesComponent;
4879
- exports["ɵcg"] = GovUkRadioComponent;
4880
- exports["ɵch"] = GovUkRadiosComponent;
4881
- exports["ɵci"] = GovUkSelectComponent;
4882
- exports["ɵcj"] = GovUkTextareaComponent;
4883
- exports["ɵck"] = GovUkFileUploadComponent;
4884
- exports["ɵcl"] = RemoveHostDirective;
4885
- exports["ɵcm"] = CaseSharingStateService;
4886
- exports["ɵcn"] = CookieService;
4887
- exports["ɵco"] = LaunchDarklyService;
4888
- exports["ɵcp"] = FilterService;
4889
- exports["ɵcq"] = FindAPersonService;
4890
- exports["ɵcr"] = GoogleAnalyticsService;
4891
- exports["ɵcs"] = GoogleTagManagerService;
4892
- exports["ɵct"] = LoadingService;
4893
- exports["ɵcu"] = LocationService;
4894
- exports["ɵcv"] = ManageSessionServices;
4895
- exports["ɵcw"] = SessionStorageService;
4896
- exports["ɵcx"] = TimeoutNotificationsService;
5098
+ exports["ɵca"] = GovUkInputComponent;
5099
+ exports["ɵcb"] = GovUkCheckboxComponent;
5100
+ exports["ɵcc"] = GovUkFormGroupWrapperComponent;
5101
+ exports["ɵcd"] = GovUkLabelComponent;
5102
+ exports["ɵce"] = GovUkErrorMessageComponent;
5103
+ exports["ɵcf"] = GovUkFieldsetComponent;
5104
+ exports["ɵcg"] = GovUkDateComponent;
5105
+ exports["ɵch"] = GovUkCheckboxesComponent;
5106
+ exports["ɵci"] = GovUkRadioComponent;
5107
+ exports["ɵcj"] = GovUkRadiosComponent;
5108
+ exports["ɵck"] = GovUkSelectComponent;
5109
+ exports["ɵcl"] = GovUkTextareaComponent;
5110
+ exports["ɵcm"] = GovUkFileUploadComponent;
5111
+ exports["ɵcn"] = RemoveHostDirective;
4897
5112
  exports["ɵd"] = TcDisplayPlainComponent;
4898
5113
  exports["ɵe"] = TcConfirmComponent;
4899
5114
  exports["ɵf"] = ContactDetailsComponent;