@hmcts/rpx-xui-common-lib 2.1.7-angular-upgrade-11 → 2.1.7-javascript-void
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/esm2022/hmcts-rpx-xui-common-lib.mjs +5 -0
- package/esm2022/lib/components/accessibility/accessibility.component.mjs +833 -0
- package/esm2022/lib/components/checkbox-list/checkbox-list.component.mjs +232 -0
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +123 -0
- package/esm2022/lib/components/cookie-banner/cookie-banner.component.mjs +151 -0
- package/esm2022/lib/components/due-date/due-date.component.mjs +141 -0
- package/esm2022/lib/components/exui-main-wrapper/exui-page-wrapper.component.mjs +80 -0
- package/esm2022/lib/components/find-location/find-location.component.mjs +220 -0
- package/esm2022/lib/components/find-person/find-person.component.mjs +234 -0
- package/esm2022/lib/components/find-service/find-service.component.mjs +193 -0
- package/esm2022/lib/components/find-task-name/find-task-name.component.mjs +200 -0
- package/esm2022/lib/components/generic-filter/generic-filter-utils.mjs +21 -0
- package/esm2022/lib/components/generic-filter/generic-filter.component.mjs +1224 -0
- package/esm2022/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.mjs +56 -0
- package/esm2022/lib/components/invite-user-form/invite-user-form.component.mjs +51 -0
- package/esm2022/lib/components/invite-user-permissions/invite-user-permission.component.mjs +54 -0
- package/esm2022/lib/components/loading-spinner/loading-spinner.component.mjs +33 -0
- package/esm2022/lib/components/pagination/pagination.component.mjs +92 -0
- package/esm2022/lib/components/public_api.mjs +39 -0
- package/esm2022/lib/components/search-judicials/search-judicials.component.mjs +185 -0
- package/esm2022/lib/components/search-location/search-location.component.mjs +240 -0
- package/esm2022/lib/components/search-service/search-service.component.mjs +94 -0
- package/esm2022/lib/components/search-venue/search-venue.component.mjs +188 -0
- package/esm2022/lib/components/selected-case/selected-case.component.mjs +381 -0
- package/esm2022/lib/components/selected-case-confirm/selected-case-confirm.component.mjs +135 -0
- package/esm2022/lib/components/selected-case-list/selected-case-list.component.mjs +98 -0
- package/esm2022/lib/components/service-message/service-message.component.mjs +62 -0
- package/esm2022/lib/components/service-messages/service-messages.component.mjs +167 -0
- package/esm2022/lib/components/share-case/share-case.component.mjs +427 -0
- package/esm2022/lib/components/share-case-confirm/share-case-confirm.component.mjs +85 -0
- package/esm2022/lib/components/tab/tab.component.mjs +40 -0
- package/esm2022/lib/components/tc-confirm/tc-confirm.component.mjs +66 -0
- package/esm2022/lib/components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component.mjs +17 -0
- package/esm2022/lib/components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component.mjs +17 -0
- package/esm2022/lib/components/terms-and-conditions/terms-and-conditions.component.mjs +58 -0
- package/esm2022/lib/components/user-details/user-details.component.mjs +276 -0
- package/esm2022/lib/components/user-list/user-list.component.mjs +100 -0
- package/esm2022/lib/components/user-select/user-select.component.mjs +94 -0
- package/esm2022/lib/components/write-address/write-address.component.mjs +342 -0
- package/esm2022/lib/components/write-address-inputs/write-address-inputs.component.mjs +165 -0
- package/esm2022/lib/directives/feature-toggle/feature-toggle.directive.mjs +41 -0
- package/esm2022/lib/directives/let/let.directive.mjs +29 -0
- package/esm2022/lib/exui-common-lib.module.mjs +313 -0
- package/esm2022/lib/gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component.mjs +55 -0
- package/esm2022/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.mjs +137 -0
- package/esm2022/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.mjs +127 -0
- package/esm2022/lib/gov-ui/components/gov-uk-error-message/gov-uk-error-message.component.mjs +46 -0
- package/esm2022/lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.mjs +79 -0
- package/esm2022/lib/gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component.mjs +79 -0
- package/esm2022/lib/gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component.mjs +45 -0
- package/esm2022/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.mjs +71 -0
- package/esm2022/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.mjs +84 -0
- package/esm2022/lib/gov-ui/components/gov-uk-radio/gov-uk-radio.component.mjs +48 -0
- package/esm2022/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.mjs +42 -0
- package/esm2022/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.mjs +80 -0
- package/esm2022/lib/gov-ui/components/gov-uk-table/gov-uk-table.component.mjs +185 -0
- package/esm2022/lib/gov-ui/components/gov-uk-textarea/gov-uk-textarea.component.mjs +57 -0
- package/esm2022/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.mjs +2 -0
- package/esm2022/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.mjs +111 -0
- package/esm2022/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.mjs +140 -0
- package/esm2022/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.mjs +34 -0
- package/esm2022/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.mjs +129 -0
- package/esm2022/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.mjs +204 -0
- package/esm2022/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.mjs +60 -0
- package/esm2022/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.mjs +58 -0
- package/esm2022/lib/gov-ui/directives/remove-host.directive.mjs +30 -0
- package/esm2022/lib/gov-ui/gov-ui.service.mjs +14 -0
- package/esm2022/lib/gov-ui/models/checkboxes-model.mjs +2 -0
- package/{esm2015/lib/gov-ui/models/gov-ui-config-model.js → esm2022/lib/gov-ui/models/gov-ui-config-model.mjs} +1 -1
- package/{esm2015/lib/gov-ui/models/public_api.js → esm2022/lib/gov-ui/models/public_api.mjs} +1 -2
- package/esm2022/lib/gov-ui/models/radio-buttons.model.mjs +2 -0
- package/esm2022/lib/gov-ui/util/helpers/html-templates.helper.mjs +22 -0
- package/{esm2015/lib/gov-ui/validators/checkboxes-be-checked.validator.js → esm2022/lib/gov-ui/validators/checkboxes-be-checked.validator.mjs} +1 -1
- package/{esm2015/lib/gov-ui/validators/date.validator.js → esm2022/lib/gov-ui/validators/date.validator.mjs} +1 -1
- package/esm2022/lib/gov-ui/validators/radio-group.validator.mjs +15 -0
- package/esm2022/lib/models/address-message.enum.mjs +11 -0
- package/esm2022/lib/models/address-option.model.mjs +21 -0
- package/esm2022/lib/models/address.model.mjs +4 -0
- package/{esm2015/lib/models/contact-details.model.js → esm2022/lib/models/contact-details.model.mjs} +1 -1
- package/esm2022/lib/models/feature-user.mjs +5 -0
- package/esm2022/lib/models/filter.model.mjs +3 -0
- package/esm2022/lib/models/index.mjs +19 -0
- package/esm2022/lib/models/location.model.mjs +7 -0
- package/esm2022/lib/models/person.model.mjs +21 -0
- package/{esm2015/lib/models/public_api.js → esm2022/lib/models/public_api.mjs} +2 -1
- package/{esm2015/lib/models/search-options.model.js → esm2022/lib/models/search-options.model.mjs} +1 -1
- package/esm2022/lib/models/service-message.model.mjs +2 -0
- package/esm2022/lib/models/task-name.model.mjs +2 -0
- package/esm2022/lib/models/user-access-type.model.mjs +2 -0
- package/esm2022/lib/models/user-details.model.mjs +2 -0
- package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +15 -0
- package/esm2022/lib/pipes/index.mjs +2 -0
- package/esm2022/lib/services/address/address-parser.mjs +76 -0
- package/esm2022/lib/services/address/address-type.enum.mjs +7 -0
- package/esm2022/lib/services/address/address.service.mjs +55 -0
- package/esm2022/lib/services/case-sharing-state/case-sharing-state.service.mjs +170 -0
- package/esm2022/lib/services/cookie/cookie.service.mjs +48 -0
- package/esm2022/lib/services/feature-toggle/feature-toggle.guard.mjs +37 -0
- package/esm2022/lib/services/feature-toggle/feature-toggle.service.mjs +33 -0
- package/esm2022/lib/services/feature-toggle/launch-darkly.service.mjs +70 -0
- package/esm2022/lib/services/filter/filter.service.mjs +95 -0
- package/esm2022/lib/services/find-person/find-person.service.mjs +92 -0
- package/esm2022/lib/services/google-analytics/google-analytics.service.mjs +73 -0
- package/esm2022/lib/services/google-tag-manager/google-tag-manager.service.mjs +85 -0
- package/{esm2015/lib/services/loading/loading.service.js → esm2022/lib/services/loading/loading.service.mjs} +8 -6
- package/esm2022/lib/services/locations/location.service.mjs +38 -0
- package/{esm2015/lib/services/manage-session/manage-session.services.js → esm2022/lib/services/manage-session/manage-session.services.mjs} +8 -10
- package/esm2022/lib/services/public-api.mjs +18 -0
- package/esm2022/lib/services/ref-data/index.mjs +4 -0
- package/esm2022/lib/services/ref-data/models/ref-data-htmcs-service.model.mjs +2 -0
- package/esm2022/lib/services/ref-data/models/ref-data-region.model.mjs +2 -0
- package/esm2022/lib/services/ref-data/ref-data-data-access/models/ref-data-locations-by-service-code-response.model.mjs +2 -0
- package/esm2022/lib/services/ref-data/ref-data-data-access/ref-data-data-access.service.mjs +33 -0
- package/esm2022/lib/services/ref-data/ref-data.service.mjs +34 -0
- package/esm2022/lib/services/role-guard/role.guard.mjs +43 -0
- package/esm2022/lib/services/role-guard/role.service.mjs +22 -0
- package/esm2022/lib/services/storage/session-storage/session-storage.service.mjs +43 -0
- package/esm2022/lib/services/task-name/task-name.service.mjs +35 -0
- package/esm2022/lib/services/timeout-notifications/timeout-notifications.service.mjs +103 -0
- package/{esm2015/public-api.js → esm2022/public-api.mjs} +2 -1
- package/fesm2022/hmcts-rpx-xui-common-lib.mjs +10386 -0
- package/fesm2022/hmcts-rpx-xui-common-lib.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/accessibility/accessibility.component.d.ts +7 -1
- package/lib/components/checkbox-list/checkbox-list.component.d.ts +8 -2
- package/lib/components/contact-details/contact-details.component.d.ts +3 -0
- package/lib/components/cookie-banner/cookie-banner.component.d.ts +5 -1
- package/lib/components/due-date/due-date.component.d.ts +8 -2
- package/lib/components/exui-main-wrapper/exui-page-wrapper.component.d.ts +3 -0
- package/lib/components/find-location/find-location.component.d.ts +12 -6
- package/lib/components/find-person/find-person.component.d.ts +5 -2
- package/lib/components/find-service/find-service.component.d.ts +24 -9
- package/lib/components/find-task-name/find-task-name.component.d.ts +44 -0
- package/lib/components/generic-filter/generic-filter-utils.d.ts +2 -5
- package/lib/components/generic-filter/generic-filter.component.d.ts +25 -6
- package/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.d.ts +3 -0
- package/lib/components/invite-user-form/invite-user-form.component.d.ts +3 -0
- package/lib/components/invite-user-permissions/invite-user-permission.component.d.ts +3 -0
- package/lib/components/loading-spinner/loading-spinner.component.d.ts +8 -1
- package/lib/components/pagination/pagination.component.d.ts +3 -0
- package/lib/components/public_api.d.ts +6 -0
- package/lib/components/search-judicials/search-judicials.component.d.ts +3 -0
- package/lib/components/search-location/search-location.component.d.ts +25 -20
- package/lib/components/search-service/search-service.component.d.ts +16 -9
- package/lib/components/search-venue/search-venue.component.d.ts +3 -1
- package/lib/components/selected-case/selected-case.component.d.ts +3 -0
- package/lib/components/selected-case-confirm/selected-case-confirm.component.d.ts +3 -0
- package/lib/components/selected-case-list/selected-case-list.component.d.ts +3 -0
- package/lib/components/service-message/service-message.component.d.ts +9 -4
- package/lib/components/service-messages/service-messages.component.d.ts +15 -5
- package/lib/components/share-case/share-case.component.d.ts +4 -0
- package/lib/components/share-case-confirm/share-case-confirm.component.d.ts +3 -0
- package/lib/components/tab/tab.component.d.ts +3 -0
- package/lib/components/tc-confirm/tc-confirm.component.d.ts +3 -0
- package/lib/components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component.d.ts +3 -0
- package/lib/components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component.d.ts +3 -0
- package/lib/components/terms-and-conditions/terms-and-conditions.component.d.ts +3 -0
- package/lib/components/user-details/user-details.component.d.ts +4 -0
- package/lib/components/user-list/user-list.component.d.ts +3 -0
- package/lib/components/user-select/user-select.component.d.ts +5 -3
- package/lib/components/write-address/write-address.component.d.ts +45 -0
- package/lib/components/write-address-inputs/write-address-inputs.component.d.ts +16 -0
- package/lib/directives/feature-toggle/feature-toggle.directive.d.ts +3 -0
- package/lib/directives/let/let.directive.d.ts +3 -0
- package/lib/exui-common-lib.module.d.ts +83 -4
- package/lib/gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.d.ts +17 -5
- package/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-error-message/gov-uk-error-message.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.d.ts +4 -2
- package/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.d.ts +4 -0
- package/lib/gov-ui/components/gov-uk-radio/gov-uk-radio.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.d.ts +5 -2
- package/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-table/gov-uk-table.component.d.ts +3 -0
- package/lib/gov-ui/components/gov-uk-textarea/gov-uk-textarea.component.d.ts +3 -0
- package/lib/gov-ui/components/hmcts-banner/hmcts-banner-info.interface.d.ts +7 -0
- package/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.d.ts +7 -2
- package/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.d.ts +3 -0
- package/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.d.ts +3 -0
- package/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.d.ts +6 -3
- package/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.d.ts +3 -0
- package/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.d.ts +3 -0
- package/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.d.ts +3 -0
- package/lib/gov-ui/directives/remove-host.directive.d.ts +3 -0
- package/lib/gov-ui/gov-ui.service.d.ts +3 -0
- package/lib/gov-ui/models/checkboxes-model.d.ts +4 -7
- package/lib/gov-ui/models/gov-ui-config-model.d.ts +2 -0
- package/lib/gov-ui/models/public_api.d.ts +0 -1
- package/lib/gov-ui/models/radio-buttons.model.d.ts +9 -0
- package/lib/models/address-message.enum.d.ts +9 -0
- package/lib/models/address-option.model.d.ts +9 -0
- package/lib/models/address.model.d.ts +9 -0
- package/lib/models/contact-details.model.d.ts +4 -0
- package/lib/models/feature-user.d.ts +4 -6
- package/lib/models/filter.model.d.ts +42 -9
- package/lib/models/index.d.ts +4 -0
- package/lib/models/location.model.d.ts +12 -12
- package/lib/models/person.model.d.ts +5 -3
- package/lib/models/public_api.d.ts +1 -0
- package/lib/models/search-options.model.d.ts +1 -1
- package/lib/models/service-message.model.d.ts +8 -0
- package/lib/models/task-name.model.d.ts +4 -0
- package/lib/models/user-access-type.model.d.ts +6 -0
- package/lib/models/user-details.model.d.ts +2 -0
- package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/services/address/address-parser.d.ts +17 -0
- package/lib/services/address/address-type.enum.d.ts +5 -0
- package/lib/services/address/address.service.d.ts +15 -0
- package/lib/services/case-sharing-state/case-sharing-state.service.d.ts +3 -0
- package/lib/services/cookie/cookie.service.d.ts +3 -0
- package/lib/services/feature-toggle/feature-toggle.guard.d.ts +8 -2
- package/lib/services/feature-toggle/feature-toggle.service.d.ts +4 -0
- package/lib/services/feature-toggle/launch-darkly.service.d.ts +14 -10
- package/lib/services/filter/filter.service.d.ts +6 -0
- package/lib/services/find-person/find-person.service.d.ts +5 -2
- package/lib/services/google-analytics/google-analytics.service.d.ts +4 -1
- package/lib/services/google-tag-manager/google-tag-manager.service.d.ts +5 -1
- package/lib/services/loading/loading.service.d.ts +3 -0
- package/lib/services/locations/location.service.d.ts +4 -1
- package/lib/services/manage-session/manage-session.services.d.ts +3 -0
- package/lib/services/public-api.d.ts +2 -0
- package/lib/services/ref-data/index.d.ts +3 -0
- package/lib/services/ref-data/models/ref-data-htmcs-service.model.d.ts +13 -0
- package/lib/services/ref-data/models/ref-data-region.model.d.ts +4 -0
- package/lib/services/ref-data/ref-data-data-access/models/ref-data-locations-by-service-code-response.model.d.ts +8 -0
- package/lib/services/ref-data/ref-data-data-access/ref-data-data-access.service.d.ts +18 -0
- package/lib/services/ref-data/ref-data.service.d.ts +17 -0
- package/lib/services/role-guard/role.guard.d.ts +7 -3
- package/lib/services/role-guard/role.service.d.ts +8 -4
- package/lib/services/{session-storage → storage/session-storage}/session-storage.service.d.ts +3 -0
- package/lib/services/task-name/task-name.service.d.ts +17 -0
- package/lib/services/timeout-notifications/timeout-notifications.service.d.ts +8 -2
- package/package.json +21 -11
- package/public-api.d.ts +1 -0
- package/bundles/hmcts-rpx-xui-common-lib.umd.js +0 -5141
- package/bundles/hmcts-rpx-xui-common-lib.umd.js.map +0 -1
- package/bundles/hmcts-rpx-xui-common-lib.umd.min.js +0 -2
- package/bundles/hmcts-rpx-xui-common-lib.umd.min.js.map +0 -1
- package/esm2015/hmcts-rpx-xui-common-lib.js +0 -70
- package/esm2015/lib/components/accessibility/accessibility.component.js +0 -14
- package/esm2015/lib/components/checkbox-list/checkbox-list.component.js +0 -177
- package/esm2015/lib/components/contact-details/contact-details.component.js +0 -17
- package/esm2015/lib/components/cookie-banner/cookie-banner.component.js +0 -68
- package/esm2015/lib/components/due-date/due-date.component.js +0 -115
- package/esm2015/lib/components/exui-main-wrapper/exui-page-wrapper.component.js +0 -28
- package/esm2015/lib/components/find-location/find-location.component.js +0 -124
- package/esm2015/lib/components/find-person/find-person.component.js +0 -118
- package/esm2015/lib/components/find-service/find-service.component.js +0 -31
- package/esm2015/lib/components/generic-filter/generic-filter-utils.js +0 -21
- package/esm2015/lib/components/generic-filter/generic-filter.component.js +0 -387
- package/esm2015/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.js +0 -27
- package/esm2015/lib/components/invite-user-form/invite-user-form.component.js +0 -25
- package/esm2015/lib/components/invite-user-permissions/invite-user-permission.component.js +0 -25
- package/esm2015/lib/components/loading-spinner/loading-spinner.component.js +0 -18
- package/esm2015/lib/components/pagination/pagination.component.js +0 -28
- package/esm2015/lib/components/public_api.js +0 -33
- package/esm2015/lib/components/search-judicials/search-judicials.component.js +0 -126
- package/esm2015/lib/components/search-location/search-location.component.js +0 -133
- package/esm2015/lib/components/search-service/search-service.component.js +0 -31
- package/esm2015/lib/components/search-venue/search-venue.component.js +0 -123
- package/esm2015/lib/components/selected-case/selected-case.component.js +0 -158
- package/esm2015/lib/components/selected-case-confirm/selected-case-confirm.component.js +0 -36
- package/esm2015/lib/components/selected-case-list/selected-case-list.component.js +0 -49
- package/esm2015/lib/components/service-message/service-message.component.js +0 -22
- package/esm2015/lib/components/service-messages/service-messages.component.js +0 -48
- package/esm2015/lib/components/share-case/share-case.component.js +0 -205
- package/esm2015/lib/components/share-case-confirm/share-case-confirm.component.js +0 -34
- package/esm2015/lib/components/tab/tab.component.js +0 -21
- package/esm2015/lib/components/tc-confirm/tc-confirm.component.js +0 -22
- package/esm2015/lib/components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component.js +0 -13
- package/esm2015/lib/components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component.js +0 -13
- package/esm2015/lib/components/terms-and-conditions/terms-and-conditions.component.js +0 -16
- package/esm2015/lib/components/user-details/user-details.component.js +0 -41
- package/esm2015/lib/components/user-list/user-list.component.js +0 -33
- package/esm2015/lib/components/user-select/user-select.component.js +0 -58
- package/esm2015/lib/directives/feature-toggle/feature-toggle.directive.js +0 -42
- package/esm2015/lib/directives/let/let.directive.js +0 -30
- package/esm2015/lib/exui-common-lib.module.js +0 -160
- package/esm2015/lib/gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component.js +0 -31
- package/esm2015/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.js +0 -21
- package/esm2015/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.js +0 -64
- package/esm2015/lib/gov-ui/components/gov-uk-error-message/gov-uk-error-message.component.js +0 -22
- package/esm2015/lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.js +0 -28
- package/esm2015/lib/gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component.js +0 -35
- package/esm2015/lib/gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component.js +0 -23
- package/esm2015/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +0 -34
- package/esm2015/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.js +0 -21
- package/esm2015/lib/gov-ui/components/gov-uk-radio/gov-uk-radio.component.js +0 -33
- package/esm2015/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.js +0 -21
- package/esm2015/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.js +0 -27
- package/esm2015/lib/gov-ui/components/gov-uk-table/gov-uk-table.component.js +0 -39
- package/esm2015/lib/gov-ui/components/gov-uk-textarea/gov-uk-textarea.component.js +0 -27
- package/esm2015/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.js +0 -23
- package/esm2015/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.js +0 -48
- package/esm2015/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.js +0 -19
- package/esm2015/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.js +0 -41
- package/esm2015/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.js +0 -28
- package/esm2015/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.js +0 -23
- package/esm2015/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.js +0 -15
- package/esm2015/lib/gov-ui/directives/remove-host.directive.js +0 -29
- package/esm2015/lib/gov-ui/gov-ui.service.js +0 -13
- package/esm2015/lib/gov-ui/models/banner-data-model.js +0 -2
- package/esm2015/lib/gov-ui/models/checkboxes-model.js +0 -2
- package/esm2015/lib/gov-ui/models/isession-storage.interface.js +0 -2
- package/esm2015/lib/gov-ui/util/helpers/html-templates.helper.js +0 -22
- package/esm2015/lib/gov-ui/util/session-storage/session-storage-utils.js +0 -22
- package/esm2015/lib/gov-ui/validators/radio-group.validator.js +0 -15
- package/esm2015/lib/models/feature-user.js +0 -5
- package/esm2015/lib/models/filter.model.js +0 -3
- package/esm2015/lib/models/index.js +0 -15
- package/esm2015/lib/models/location.model.js +0 -7
- package/esm2015/lib/models/person.model.js +0 -19
- package/esm2015/lib/models/user-details.model.js +0 -2
- package/esm2015/lib/services/case-sharing-state/case-sharing-state.service.js +0 -157
- package/esm2015/lib/services/cookie/cookie.service.js +0 -47
- package/esm2015/lib/services/feature-toggle/feature-toggle.guard.js +0 -35
- package/esm2015/lib/services/feature-toggle/feature-toggle.service.js +0 -27
- package/esm2015/lib/services/feature-toggle/launch-darkly.service.js +0 -59
- package/esm2015/lib/services/filter/filter.service.js +0 -64
- package/esm2015/lib/services/find-person/find-person.service.js +0 -106
- package/esm2015/lib/services/google-analytics/google-analytics.service.js +0 -68
- package/esm2015/lib/services/google-tag-manager/google-tag-manager.service.js +0 -71
- package/esm2015/lib/services/locations/location.service.js +0 -39
- package/esm2015/lib/services/public-api.js +0 -16
- package/esm2015/lib/services/role-guard/role.guard.js +0 -37
- package/esm2015/lib/services/role-guard/role.service.js +0 -20
- package/esm2015/lib/services/session-storage/session-storage.service.js +0 -41
- package/esm2015/lib/services/timeout-notifications/timeout-notifications.service.js +0 -94
- package/fesm2015/hmcts-rpx-xui-common-lib.js +0 -4174
- package/fesm2015/hmcts-rpx-xui-common-lib.js.map +0 -1
- package/hmcts-rpx-xui-common-lib.d.ts +0 -69
- package/hmcts-rpx-xui-common-lib.metadata.json +0 -1
- package/lib/gov-ui/models/banner-data-model.d.ts +0 -4
- package/lib/gov-ui/models/isession-storage.interface.d.ts +0 -4
- package/lib/gov-ui/util/session-storage/session-storage-utils.d.ts +0 -6
- /package/{esm2015/lib/components/index.js → esm2022/lib/components/index.mjs} +0 -0
- /package/{esm2015/lib/directives/index.js → esm2022/lib/directives/index.mjs} +0 -0
- /package/{esm2015/lib/directives/public-api.js → esm2022/lib/directives/public-api.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/components/index.js → esm2022/lib/gov-ui/components/index.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/components/public_api.js → esm2022/lib/gov-ui/components/public_api.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/index.js → esm2022/lib/gov-ui/index.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/models/error-messages-model.js → esm2022/lib/gov-ui/models/error-messages-model.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/models/index.js → esm2022/lib/gov-ui/models/index.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/public_api.js → esm2022/lib/gov-ui/public_api.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/validators/index.js → esm2022/lib/gov-ui/validators/index.mjs} +0 -0
- /package/{esm2015/lib/gov-ui/validators/public_api.js → esm2022/lib/gov-ui/validators/public_api.mjs} +0 -0
- /package/{esm2015/lib/models/case-share.model.js → esm2022/lib/models/case-share.model.mjs} +0 -0
- /package/{esm2015/lib/models/due-date.model.js → esm2022/lib/models/due-date.model.mjs} +0 -0
- /package/{esm2015/lib/models/idle-config.model.js → esm2022/lib/models/idle-config.model.mjs} +0 -0
- /package/{esm2015/lib/models/pagination.model.js → esm2022/lib/models/pagination.model.mjs} +0 -0
- /package/{esm2015/lib/models/tcDocument.model.js → esm2022/lib/models/tcDocument.model.mjs} +0 -0
- /package/{esm2015/lib/models/timeout-notification.model.js → esm2022/lib/models/timeout-notification.model.mjs} +0 -0
- /package/{esm2015/lib/models/user.model.js → esm2022/lib/models/user.model.mjs} +0 -0
- /package/{esm2015/lib/services/index.js → esm2022/lib/services/index.mjs} +0 -0
- /package/{esm2015/lib/window.js → esm2022/lib/window.mjs} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["AccessibilityComponent","type","Component","args","selector","template","Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","__spread","arguments","concat","CheckboxListComponent","this","options","selectionChange","EventEmitter","defineProperty","prototype","get","pSelection","set","getSelection","selection","ngOnChanges","setupPreselection","checkSelection","labelFunction","hasOptions","isSelected","item","includes","toggleItemSelection","undefined","splice","indexOf","pSelectionMade","emit","toggleSelectAll","allSelected","containsItem","items","_this","isFunctional","itemLabel_1","some","opt","preselection","hasPreselection","changed","filter","allowedSelection","encapsulation","ViewEncapsulation","None","Input","Output","DateBadgeColour","ContactDetailsComponent","DueDateComponent","highUrgencyCutoff","mediumUrgencyCutoff","pBadge","pLabel","pAccessibleLabel","pDaysDiff","handleInputChanges","dueDate","getDaysDifference","Date","daysDiff","RED","daysLabel","formatDate","ORANGE","GREEN","fromDate","toDate","fromEpoch","getTime","toEpoch","diffSecs","Math","floor","FilterService","givenErrors","BehaviorSubject","isInitialSetting","filterSettings","streams","persist","setting","persistence","persistLocal","persistSession","persistMemory","updateStreams","id","sessionStorage","getItem","JSON","parse","window","localStorage","getStream","asObservable","setItem","stringify","getValues","values","reduce","acc","option","index","key","Injectable","providedIn","GenericFilterComponent","filterService","fb","submitted","_config","assign","fields","map","field","displayMinSelectedError","displayMaxSelectedError","_settings","getSettings","mergeDefaultFields","addFormValidators","min","max","validators","minSelected","control","minLength","maxSelected","maxLength","ngOnInit","settings","buildForm","config","formSub","form","valueChanges","subscribe","ngOnDestroy","unsubscribe","hidden","showCondition","name","_a","split","setValidators","Validators","required","updateValueAndValidity","clearValidators","disabled","enableCondition","disable","applyFilter","markAsTouched","valid","getSelectedValues","reset","emitFormErrors","fieldChanged","changeResetFields","_b","_c","resetField","inputChanged","radioSelectionChange","patchValue","cancelFilter","cancelSetting","updatePersonControls","keys","keys_1","keys_1_1","event","isChecked","target","checked","formArray","selectAll","controls","forEach","allChecked","every","index_1","hasSelectAllOption","find","hasOwnProperty","isAllCheckedExcludingTheSelectAllOption","_control","defaultValue","f","FormArray","removeAt","FormGroup","keys_2","keys_2_1","FormControl","setValue","findPersonControl","group","addControl","this_1","buildCheckBoxFormArray","buildFindLocationFormArray","cancelField","lastSavedValue","formGroup","domain","email","knownAs","findPersonField","defaultValues","array","Array","isArray","formValues","errors","minSelectedError","changeDetection","ChangeDetectionStrategy","OnPush","FormBuilder","HmctsSessionDialogComponent","close","onClose","InviteUserFormComponent","submitForm","isInvalid","onSubmit","InviteUserPermissionComponent","isPuiCaseManager","isPuiUserManager","isPuiOrganisationManager","isPuiFinanceManager","LoadingSpinnerComponent","loadingText","CaseSharingStateService","caseState","subject","pipe","distinctUntilChanged","setCases","cases","aCase","caseId","caseTitle","caseTypeId","roles","sharedWith","pendingShares","pendingUnshares","getCases","requestShare","user","oldSharedCases","slice","newSharedCases","oldSharedCases_1","oldSharedCases_1_1","sharedCase","newPendingShares","newPendingUnshares","userHasAccess","u","ul","newSharedCase","requestUnshare","indexOfPreviouslyAddedUser","findIndex","idamId","requestCancel","iPendingUnshares","iPendingShares","removeCase","l","c","SelectedCaseConfirmComponent","stateService","changeLink","shareCases$","state","shareCases","trackByUserId","showUserAccessBlock","SelectedCaseListComponent","toConfirm","unselect","synchronizeStore","caseCount","onUnselect","onSynchronizeStore","trackByCaseId","SelectedCaseComponent","opened","changes","combinedSortedShares","combineAndSortShares","onDeselect","canRemove","removeUserFromCaseToggleOn","cases_1","cases_1_1","canCancel","cases_2","cases_2_1","isToBeRemoved","cases_3","cases_3_1","isToBeAdded","cases_4","cases_4_1","onRemove","onCancel","showNoUsersAccessInfo","showUserHasAccessInfo","showUserAccessTable","sort","user1","user2","firstName","toLowerCase","userIdSetter","isPending","buildElementId","elementName","ServiceMessageComponent","hideMessage","onHideMessageEvent","FeatureToggleService","initialize","_user","_clientId","Error","isEnabled","_feature","getValue","_key","_defaultValue","getValueOnce","ServiceMessagesComponent","featureToggleService","filteredMessages","Map","getServiceMessages","featureToggleKey","messages","createFilteredMessages","hiddenBanners","serviceMessageCookie","regEx","RegExp","userRoles","test","delete","SharedCaseErrorMessages","ShareCaseConfirmComponent","completeLink","UserSelectComponent","selected","filteredUsers","filterUsers","users","displayValue","lastName","onSelected","clear","onUserChange","newUserValue","ShareCaseComponent","router","continueAllowed","selectedUserToRemove","confirmLink","cancelLink","showRemoveUsers","fnTitle","title","validationErrors","tap","sharedCases","getAssignedUsers","selectedCasesErrorMessageConfig","shareCaseErrorMessage","message","OneCaseMustBeSelected","scrollTo","top","left","behavior","onSelectedUser","selectedUser","addUser","userSelect","removeUser","isDisabledAdd","setContinueAllowed","shareCases_1","shareCases_1_1","updated","element","onContinue","NoChangesRequested","hasCasesLeftUnassigned","OnePersonMustBeAssigned","navigate","existingUser","assignedUsers","Router","ViewChild","static","TabComponent","tabChange","tabChanged","TcConfirmComponent","confirm","onClick","TcDisplayHtmlComponent","TcDisplayPlainComponent","TermsAndConditionsComponent","UserDetailsComponent","showEditLink","showHelpLink","suspendUserEvent","showSuspendUserButton","reinvite","reinviteClick","suspendUser","userHasRole","theRole","UserListComponent","userClick","pageChange","pagination","itemsPerPage","currentPage","currentPageNumber","totalItems","pageTotalSize","onUserClick","emitPageClickEvent","pageNumber","CookieService","doc","document","setCookie","expiryDate","cookie","getCookie","row","startsWith","deleteCookie","path","pathValue","domainValue","deleteCookieByPartialMatch","checkCookie","trim","decorators","Inject","DOCUMENT","windowToken","InjectionToken","windowProvider","BadgeColour","CookieBannerComponent","cookieService","rejectionNotifier","acceptanceNotifier","isCookieBannerVisible","setState","acceptCookie","identifier","getExpiryDate","rejectCookie","reload","areCookiesAccepted","notifyAcceptance","notifyRejection","location","now","expireTime","setTime","toUTCString","BookingCheckType","PersonRole","RoleCategory","AnonymousFeatureUser","LoggedInFeatureUser","RadioFilterFieldConfig","LocationService","http","getAllLocations","serviceIds","locationType","searchTerm","userLocations","bookingLocations","post","searchLocations","HttpClient","SessionStorageService","removeAfterRead","removeItem","SearchLocationComponent","locationService","sessionStorageService","cd","singleMode","delay","showAutocomplete","locations","locationSelected","locationInputChanged","searchLocationChanged","minSearchCharacters","term","pSelectedLocations","pReset","resetSearchTerm","selectedLocations","site_name","emitEvent","onlySelf","search","getLocations","removeSelectedLocations","onSelectionChange","debounceTime","mergeMap","markForCheck","onInput","bookingCheck","BOOKINGS_AND_BASE","POSSIBLE_BOOKINGS","selectedLocation","epimms_id","ChangeDetectorRef","FindLocationComponent","locationFieldChanged","enableAddLocationButton","locationTitle","disableInputField","tempSelectedLocation","pServices","pDisabled","searchLocationComponent","removeSelectedValues","findLocationField","x","join","addLocation","addSelectedLocationsToForm","removeLocation","onInputChanged","onSearchInputChanged","onLocationSelected","locations_1","locations_1_1","PaginationComponent","previousPage","nextPage","onPrevious","onNext","SearchVenueComponent","locationChanged","keyUpSubject$","Subject","readyAfterContent","searchInProgress","findLocationFormGroup","findLocationFormControl","locationSelectedFormControl","ngAfterContentInit","displayedLocations","searchValue","onKeyDown","onKeyUp","onFocus","court_name","apiData","apiFilter","apiLocation","currentValue","markAsPristine","getDisplayName","getControlCourtNameValue","autoCompleteInputBox","read","ElementRef","getAllCaseworkersFromServices","caseworkersByService","allCaseworkers","caseworkerListByService","caseworkers","getSessionStorageKeyForServiceId","serviceId","FindAPersonService","searchOptions","userInfoStr","userIncluded","userInfo","userId","uid","assignedUser","judiciary","judge","findCaseworkers","fullServices","services","storedServices","newServices","storedCaseworkersByService","serviceKey","service","storedCaseworkers","of","searchInCaseworkers","sessionKey","givenCaseworkers","mapCaseworkers","roleCategory","people","caseworker","thisPerson","CASEWORKER","ADMIN","ALL","userRole","finalPeopleList","person","searchJudicial","searchString","serviceCode","caseworkersKey","SearchJudicialsComponent","judicialService","selectedJudicials","placeholderContent","judicialChanged","idValue","errorMessage","formControl","selectedFormControl","displayedJudicials","getControlValueDisplayText","judicial","selectedJudicial","searchJudicials","apiJudicial","fullName","markAsDirty","emailId","FindPersonComponent","findPersonService","personSelected","personFieldChanged","boldTitle","subTitle","findPersonGroup","isNoResultsShown","showUpdatedColor","selectedPersons","filteredOptions","sub","selectedPerson","switchMap","catchError","detectChanges","findJudicialPeople","findCaseworkersOrAdmins","JUDICIAL","persons","ids","zip","separatePeople","ExuiPageWrapperComponent","FeatureToggleDirective","viewContainer","templateRef","feature","updateSubscription","subscription","enabled","createEmbeddedView","Directive","ViewContainerRef","TemplateRef","LetContext","$implicit","xuilibLet","LetDirective","context","condition","FindServiceComponent","serviceTitle","enableAddServiceButton","addService","SearchServiceComponent","GovUkCheckboxComponent","focusOn","classes","GovUkCheckboxesComponent","GovUkDateComponent","isOptional","day","month","year","dateValidator","DateValidator","isValidDate","d","dateCheck","isNaN","monthMatch","getMonth","yearMatch","getFullYear","isEmpty","dateComponent","GovUkErrorMessageComponent","HtmlTemplatesHelper","setDescribedBy","hint","GovUkFieldsetComponent","GovUkFileUploadComponent","reloadInput","GovUkFormGroupWrapperComponent","GovUkInputComponent","GovUkLabelComponent","GovUkRadioComponent","GovUkRadiosComponent","GovUkSelectComponent","GovukTableComponent","caption","firstCellIsHeader","columnConfig","header","date","GovukTableColumnConfig","GovUkTextareaComponent","HmctsBannerComponent","HmctsErrorSummaryComponent","ngAfterViewInit","errorMessages","querySelector","focus","hasElement","HmctsIdentityBarComponent","HmctsMainWrapperComponent","backEvent","bannerData","hasBackLink","backLink","observers","onGoBack","HmctsPaginationComponent","maxSize","pageSize","showPageNumbers","showResultCount","pageBoundsCorrection","HmctsPrimaryNavigationComponent","isUserLoggedIn","HmctsSubNavigationComponent","RemoveHostDirective","el","nativeElement","parentElement","firstChild","insertBefore","removeChild","COMMON_COMPONENTS","GOV_UI_COMPONENTS","ExuiCommonLibModule","NgModule","declarations","imports","CommonModule","FormsModule","ReactiveFormsModule","RouterModule","forChild","MatAutocompleteModule","MatTabsModule","MatInputModule","NgxPaginationModule","providers","provide","useFactory","exports","PaginatePipe","GovUiService","FeatureToggleGuard","canActivate","route","combineLatest","apply","data","needsFeaturesEnabled","featureStatuses","status","parseUrl","featureDisabledRedirect","LaunchDarklyService","ready","features","anonymous","clientId","client","LDClient","on","identify","then","getArray","variation","val","GoogleAnalyticsService","init","googleAnalyticsKey","script1","createElement","async","src","head","appendChild","script2","innerHTML","ex","console","listenForRouteChanges","events","NavigationEnd","gtag","page_path","urlAfterRedirects","page_title","getTitle","eventName","params","Title","GoogleTagManagerService","googleTagManagerKey","dataLayer","script","page","ManageSessionServices","idle","keepalive","appStateEmitter","idleConfig","setIdleName","idleServiceName","setTimeout","timeout","interrupt","DocumentInterruptSource","setInterrupts","onIdleEnd","countdown","isVisible","onTimeout","onTimeoutWarning","sec","ceil","interval","keepAliveInSeconds","onPing","idleInSeconds","idleMilliseconds","setIdle","watch","appStateChanges","Idle","Keepalive","TimeoutNotificationsService","millisecondsToSeconds","milliseconds","eventEmitter","initialise","INTERRUPTS","idleModalDisplayTime","totalIdleTime","idleModalDisplayTimeInSeconds","totalIdleTimeInSeconds","docInterrupts","windowInterrupts","WindowInterruptSource","eventType","readableCountdown","notificationOnChange","RoleMatching","RoleService","pRoles","RoleGuard","roleService","needsRole","check","roleRegEx","regex","role","roleMatching","noRoleMatchRedirect","HasLoadingState","LoadingService","registered","loading","register","token","generateToken","unregister","size","performance","minRequired","requireOneCheckboxToBeChecked","parseInt","dateIsInvalid","isRadioGroupInvalid"],"sources":["../../../projects/exui-common-lib/src/lib/components/accessibility/accessibility.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/exui-common-lib/src/lib/components/checkbox-list/checkbox-list.component.ts","../../../projects/exui-common-lib/src/lib/components/contact-details/contact-details.component.ts","../../../projects/exui-common-lib/src/lib/models/due-date.model.ts","../../../projects/exui-common-lib/src/lib/components/due-date/due-date.component.ts","../../../projects/exui-common-lib/src/lib/services/filter/filter.service.ts","../../../projects/exui-common-lib/src/lib/components/generic-filter/generic-filter-utils.ts","../../../projects/exui-common-lib/src/lib/components/generic-filter/generic-filter.component.ts","../../../projects/exui-common-lib/src/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.ts","../../../projects/exui-common-lib/src/lib/components/invite-user-form/invite-user-form.component.ts","../../../projects/exui-common-lib/src/lib/components/invite-user-permissions/invite-user-permission.component.ts","../../../projects/exui-common-lib/src/lib/components/loading-spinner/loading-spinner.component.ts","../../../projects/exui-common-lib/src/lib/services/case-sharing-state/case-sharing-state.service.ts","../../../projects/exui-common-lib/src/lib/components/selected-case-confirm/selected-case-confirm.component.ts","../../../projects/exui-common-lib/src/lib/components/selected-case-list/selected-case-list.component.ts","../../../projects/exui-common-lib/src/lib/components/selected-case/selected-case.component.ts","../../../projects/exui-common-lib/src/lib/components/service-message/service-message.component.ts","../../../projects/exui-common-lib/src/lib/services/feature-toggle/feature-toggle.service.ts","../../../projects/exui-common-lib/src/lib/components/service-messages/service-messages.component.ts","../../../projects/exui-common-lib/src/lib/components/share-case-confirm/share-case-confirm.component.ts","../../../projects/exui-common-lib/src/lib/models/case-share.model.ts","../../../projects/exui-common-lib/src/lib/components/user-select/user-select.component.ts","../../../projects/exui-common-lib/src/lib/components/share-case/share-case.component.ts","../../../projects/exui-common-lib/src/lib/components/tab/tab.component.ts","../../../projects/exui-common-lib/src/lib/components/tc-confirm/tc-confirm.component.ts","../../../projects/exui-common-lib/src/lib/components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component.ts","../../../projects/exui-common-lib/src/lib/components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component.ts","../../../projects/exui-common-lib/src/lib/components/terms-and-conditions/terms-and-conditions.component.ts","../../../projects/exui-common-lib/src/lib/components/user-details/user-details.component.ts","../../../projects/exui-common-lib/src/lib/components/user-list/user-list.component.ts","../../../projects/exui-common-lib/src/lib/services/cookie/cookie.service.ts","../../../projects/exui-common-lib/src/lib/window.ts","../../../projects/exui-common-lib/src/lib/components/cookie-banner/cookie-banner.component.ts","../../../projects/exui-common-lib/src/lib/models/contact-details.model.ts","../../../projects/exui-common-lib/src/lib/models/feature-user.ts","../../../projects/exui-common-lib/src/lib/models/location.model.ts","../../../projects/exui-common-lib/src/lib/models/person.model.ts","../../../projects/exui-common-lib/src/lib/models/filter.model.ts","../../../projects/exui-common-lib/src/lib/services/locations/location.service.ts","../../../projects/exui-common-lib/src/lib/services/session-storage/session-storage.service.ts","../../../projects/exui-common-lib/src/lib/components/search-location/search-location.component.ts","../../../projects/exui-common-lib/src/lib/components/find-location/find-location.component.ts","../../../projects/exui-common-lib/src/lib/components/pagination/pagination.component.ts","../../../projects/exui-common-lib/src/lib/components/search-venue/search-venue.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/util/session-storage/session-storage-utils.ts","../../../projects/exui-common-lib/src/lib/services/find-person/find-person.service.ts","../../../projects/exui-common-lib/src/lib/components/search-judicials/search-judicials.component.ts","../../../projects/exui-common-lib/src/lib/components/find-person/find-person.component.ts","../../../projects/exui-common-lib/src/lib/components/exui-main-wrapper/exui-page-wrapper.component.ts","../../../projects/exui-common-lib/src/lib/directives/feature-toggle/feature-toggle.directive.ts","../../../projects/exui-common-lib/src/lib/directives/let/let.directive.ts","../../../projects/exui-common-lib/src/lib/components/find-service/find-service.component.ts","../../../projects/exui-common-lib/src/lib/components/search-service/search-service.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-error-message/gov-uk-error-message.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/util/helpers/html-templates.helper.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-label/gov-uk-label.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-radio/gov-uk-radio.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-radios/gov-uk-radios.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-select/gov-uk-select.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-table/gov-uk-table.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/gov-uk-textarea/gov-uk-textarea.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-banner/hmcts-banner.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-error-summary/hmcts-error-summary.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.ts","../../../projects/exui-common-lib/src/lib/gov-ui/directives/remove-host.directive.ts","../../../projects/exui-common-lib/src/lib/exui-common-lib.module.ts","../../../projects/exui-common-lib/src/lib/gov-ui/gov-ui.service.ts","../../../projects/exui-common-lib/src/lib/services/feature-toggle/feature-toggle.guard.ts","../../../projects/exui-common-lib/src/lib/services/feature-toggle/launch-darkly.service.ts","../../../projects/exui-common-lib/src/lib/services/google-analytics/google-analytics.service.ts","../../../projects/exui-common-lib/src/lib/services/google-tag-manager/google-tag-manager.service.ts","../../../projects/exui-common-lib/src/lib/services/manage-session/manage-session.services.ts","../../../projects/exui-common-lib/src/lib/services/timeout-notifications/timeout-notifications.service.ts","../../../projects/exui-common-lib/src/lib/services/role-guard/role.service.ts","../../../projects/exui-common-lib/src/lib/services/role-guard/role.guard.ts","../../../projects/exui-common-lib/src/lib/services/loading/loading.service.ts","../../../projects/exui-common-lib/src/lib/gov-ui/validators/checkboxes-be-checked.validator.ts","../../../projects/exui-common-lib/src/lib/gov-ui/validators/date.validator.ts","../../../projects/exui-common-lib/src/lib/gov-ui/validators/radio-group.validator.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'xuilib-accessibility',\n templateUrl: './accessibility.component.html',\n styleUrls: ['./accessibility.component.scss']\n})\n\nexport class AccessibilityComponent {\n constructor() {\n }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'xuilib-checkbox-list',\n templateUrl: 'checkbox-list.component.html',\n styleUrls: ['checkbox-list.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class CheckboxListComponent<T> implements OnChanges {\n\n /**\n * The options to show checkboxes for. Note that the type\n * within the array corresponds to the one for the component.\n */\n @Input() public options: T[] = [];\n\n /**\n * The initially-selected values to use. When the component renders,\n * the checkboxes that correspond to these values will be checked.\n */\n @Input() public preselection: T[];\n\n /**\n * This function is invoked for each item to display the appropriate\n * label beside the checkbox.\n */\n @Input() public labelFunction: (item: T) => string;\n\n /**\n * Whenever the selection changes, this event fires. What is dispatched\n * is the current selection, also retrievable from .selection.\n */\n @Output() public selectionChange: EventEmitter<T[]> = new EventEmitter<T[]>();\n\n /**\n * The currently selected values.\n * Note: This array is immutable, which means pushing and popping will\n * have no effect on which checkboxes are selected.\n */\n @Input()\n public get selection(): T[] {\n return this.pSelection ? [ ...this.pSelection ] : [];\n }\n public set selection(value: T[]) {\n this.pSelection = this.getSelection(value);\n }\n private pSelection: T[];\n private pSelectionMade: boolean;\n\n /**\n * Indicates whether or not all of the items are selected.\n */\n public get allSelected(): boolean {\n return this.selection.length === this.options.length;\n }\n\n // Catch any changes to any of the Input() properties.\n public ngOnChanges(): void {\n // Set up the pre-selected values.\n this.setupPreselection();\n // Now check the current selection to make sure it's valid.\n this.checkSelection();\n }\n\n /**\n * Indicates whether or not there are any options to render.\n */\n public get hasOptions(): boolean {\n return this.options && this.options.length > 0;\n }\n\n public get isFunctional(): boolean {\n return this.labelFunction && this.hasOptions;\n }\n\n /**\n * Indicates whether or not an item is part of the current selection.\n * @param item The item in question.\n */\n public isSelected(item: T): boolean {\n return this.selection.includes(item);\n }\n\n /**\n * If an item is already selected, it will be removed from the selection.\n * Otherwise, it will be added to the selection..\n */\n public toggleItemSelection(item: T): void {\n if (this.pSelection === undefined) {\n // If we don't have any selection at all yet, make it just this item.\n this.pSelection = [ item ];\n } else if (this.isSelected(item)) {\n // If this item is already selected, remove it.\n this.pSelection.splice(this.pSelection.indexOf(item), 1);\n } else {\n // If it's not selected, add it.\n this.pSelection.push(item);\n }\n\n // Indicate that the user has now made an active selection.\n this.pSelectionMade = true;\n\n // Now emit an event so any containers know about the change to selection.\n this.selectionChange.emit(this.selection);\n }\n\n /**\n * If all of the items are selected, deselect them all.\n * Otherwise, select them all.\n */\n public toggleSelectAll(): void {\n // Do we already have them all selected?\n if (this.allSelected) {\n // If so, clear out the selection.\n this.pSelection = [];\n } else {\n // If not, select all of them.\n this.pSelection = [ ...this.options ];\n }\n\n // Indicate that the user has now made an active selection.\n this.pSelectionMade = true;\n\n // Now emit an event so any containers know about the change to selection.\n this.selectionChange.emit(this.pSelection);\n }\n\n /**\n * Use the labelFunction to determine whether the options include the item.\n * This is to handle partial objects being set in the pre-selection where\n * they may not be available by the same mechanism as the options.\n *\n * @param items The array of items in which to look for the item.\n * @param item The item to check in the options.\n */\n public containsItem(items: T[], item: T): boolean {\n if (this.isFunctional) {\n const itemLabel: string = this.labelFunction(item);\n return items.some(opt => {\n return this.labelFunction(opt) === itemLabel;\n });\n }\n return false;\n }\n\n // Simple utility function to indicate whether there is an active preselection.\n private get hasPreselection(): boolean {\n return this.preselection && this.preselection.length > 0;\n }\n\n // Set up the initially selected values.\n // NOTE: If the preselection changes and the user has NOT made an active selection,\n // the current selection will also be changed. As soon as the user has made an\n // active selection, however, the preselection is no longer relevant.\n private setupPreselection(): void {\n if (this.isFunctional && !this.pSelectionMade && this.hasPreselection) {\n let changed = true; // Assume this is a change.\n if (this.pSelection) {\n // If there is no difference between the arrays, this is not a change.\n changed = this.pSelection.filter((item: T) => {\n return !this.containsItem(this.preselection, item);\n }).length > 0;\n }\n\n // If this is a change, update the selection and then emit an\n // event so any containers know about the change to selection.\n if (changed) {\n this.pSelection = this.getSelection(this.preselection);\n this.selectionChange.emit(this.selection);\n }\n }\n }\n\n private getSelection(items: T[]): T[] {\n return [\n ...this.options.filter(opt => {\n return this.containsItem(items, opt);\n })\n ];\n }\n\n // The options have changed. Let's make sure the selection\n // doesn't contain anything that's not currently an option.\n private checkSelection(): void {\n if (this.isFunctional) {\n // Check which of the currently selected items are actually options.\n const allowedSelection: T[] = this.selection.filter((item: T) => {\n return this.containsItem(this.options, item);\n });\n\n // If any have dropped out, change the selection.\n if (allowedSelection.length !== this.selection.length) {\n this.pSelection = [ ...allowedSelection ];\n\n // And emit an event so any containers know about the change to selection.\n this.selectionChange.emit(this.selection);\n }\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { ContactDetailsDataModel } from '../../models';\n\n@Component({\n selector: 'xuilib-contact-details',\n templateUrl: './contact-details.component.html',\n styleUrls: ['contact-details.component.scss']\n})\nexport class ContactDetailsComponent {\n\n @Input() public data: ContactDetailsDataModel;\n\n constructor() {\n }\n}\n","export enum DateBadgeColour {\n RED = 'hmcts-badge--red',\n ORANGE = 'hmcts-badge--orange',\n GREEN = 'hmcts-badge--green',\n}\n\nexport const SECONDS_IN_A_DAY: number = 60 * 60 * 24;\n","import { formatDate } from '@angular/common';\nimport { Component, Input, OnChanges, ViewEncapsulation } from '@angular/core';\n\nimport { DateBadgeColour, SECONDS_IN_A_DAY } from '../../models/due-date.model';\n\n@Component({\n selector: 'xuilib-due-date',\n templateUrl: 'due-date.component.html',\n styleUrls: ['due-date.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class DueDateComponent implements OnChanges {\n\n /**\n * The due date to use as the basis for rendering this component. It is\n * compared to the current date and displayed accordingly.\n */\n @Input() public dueDate: Date;\n\n /**\n * This should be considered HIGH urgency if there are fewer than this\n * many days until the due date.\n * * Set to 0 if you want it to show HIGH if it was due yesterday.\n * * Set to 1 if you want it to show HIGH if it's due today.\n * * Set to 2 if you want it to show HIGH if it's due tomorrow.\n *\n * Defaults to 0 (ZERO), which means it won't show as HIGH urgency until the\n * due date is in the past.\n *\n * NOTE: If this is higher than the mediumUrgencyCutoff value, MEDIUM urgency\n * will never be shown.\n *\n * ALSO NOTE: Anything overdue is automatically considered HIGH urgency.\n */\n @Input() public highUrgencyCutoff: number = 0; // Default\n\n /**\n * This should be considered MEDIUM urgency if there are fewer than this\n * many days until the due date.\n * * Set to 1 if you want it to show MEDIUM if it's due today.\n * * Set to 2 if you want it to show MEDIUM if it's due tomorrow.\n * * Set to 3 if you want it to show MEDIUM if it's due the day after tomorrow.\n *\n * Defaults to 2, which means it won't show as MEDIUM urgency unless the\n * due date is today or tomorrow.\n *\n * NOTE: If this is lower than the highUrgencyCutoff value, MEDIUM urgency\n * will never be shown.\n */\n @Input() public mediumUrgencyCutoff: number = 2;\n\n // The HMCTS badge class, used for colouration.\n private pBadge: string;\n public get badge(): string {\n return this.pBadge;\n }\n\n // The textual label to display in the component.\n private pLabel: string;\n public get label(): string {\n return this.pLabel;\n }\n\n // The accessible label, which is also used for the tooltip.\n private pAccessibleLabel: string;\n public get accessibleLabel(): string {\n return this.pAccessibleLabel;\n }\n\n // How many days the dueDate varies from today.\n private pDaysDiff: number;\n public get daysDiff(): number {\n return this.pDaysDiff;\n }\n\n // Catch any changes to any of the Input() properties.\n public ngOnChanges(): void {\n this.handleInputChanges();\n }\n\n // Set up the label, urgency class, and accessibility fields.\n private handleInputChanges() {\n // If we don't have a dueDate, skip out of here.\n if (!this.dueDate) {\n return;\n }\n\n // How many days from today is the due date?\n // Already happened means daysDiff > 0;\n // Today means daysDiff = 0;\n // Yet to come means daysDiff < 0;\n this.pDaysDiff = this.getDaysDifference(this.dueDate, new Date());\n\n // Is it overdue?\n if (this.daysDiff > 0) {\n this.pBadge = DateBadgeColour.RED;\n const daysLabel = this.daysDiff === 1 ? 'day' : 'days';\n this.pLabel = `+${this.daysDiff} ${daysLabel}`;\n this.pAccessibleLabel = `This task is ${this.daysDiff} ${daysLabel} past its due date`;\n } else {\n // Special label for \"Today\".\n if (this.daysDiff === 0) {\n this.pLabel = 'TODAY';\n this.pAccessibleLabel = 'This task is due to be completed today';\n } else {\n this.pLabel = `${formatDate(this.dueDate, 'd MMM', 'en-GB')}`;\n this.pAccessibleLabel = `This task is due to be completed by ${formatDate(this.dueDate, 'd MMMM y', 'en-GB')}`;\n }\n if (this.daysDiff + this.highUrgencyCutoff > 0) {\n this.pBadge = DateBadgeColour.RED;\n } else if (this.daysDiff + this.mediumUrgencyCutoff > 0) {\n this.pBadge = DateBadgeColour.ORANGE;\n } else {\n this.pBadge = DateBadgeColour.GREEN;\n }\n }\n }\n\n // This will return the difference between two dates.\n // If fromDate is BEFORE toDate, it will be a positive number.\n // If fromDate is AFTER toDate, it will be a negative number.\n private getDaysDifference(fromDate: Date, toDate: Date): number {\n const fromEpoch = fromDate.getTime();\n const toEpoch = toDate.getTime();\n const diffSecs = Math.floor((toEpoch - fromEpoch) / 1000);\n return Math.floor(diffSecs / SECONDS_IN_A_DAY);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {FilterError, FilterPersistence, FilterSetting} from '../../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterService {\n\n public givenErrors: BehaviorSubject<FilterError[]> = new BehaviorSubject(null);\n public isInitialSetting: boolean = false;\n private readonly filterSettings: { [id: string]: FilterSetting } = {};\n private readonly streams: { [id: string]: BehaviorSubject<FilterSetting> } = {};\n\n public persist(setting: FilterSetting, persistence: FilterPersistence): void {\n switch (persistence) {\n case 'local':\n this.persistLocal(setting);\n break;\n case 'session':\n this.persistSession(setting);\n break;\n default:\n break;\n }\n this.persistMemory(setting);\n this.updateStreams(setting);\n }\n\n public get(id: string): FilterSetting | null {\n if (this.filterSettings[id]) {\n return this.filterSettings[id];\n }\n if (sessionStorage.getItem(id)) {\n return JSON.parse(window.sessionStorage.getItem(id));\n }\n if (localStorage.getItem(id)) {\n return JSON.parse(window.localStorage.getItem(id));\n }\n return null;\n }\n\n public getStream(id: string): Observable<FilterSetting> {\n if (!this.streams[id]) {\n this.streams[id] = new BehaviorSubject<FilterSetting>(this.get(id));\n }\n return this.streams[id].asObservable();\n }\n\n private persistLocal(setting: FilterSetting): void {\n window.localStorage.setItem(setting.id, JSON.stringify(setting));\n }\n\n private persistSession(setting: FilterSetting): void {\n window.sessionStorage.setItem(setting.id, JSON.stringify(setting));\n }\n\n private persistMemory(setting: FilterSetting): void {\n this.filterSettings[setting.id] = setting;\n }\n\n private updateStreams(setting: FilterSetting): void {\n if (this.streams[setting.id]) {\n this.streams[setting.id].next(setting);\n }\n }\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nexport function minSelectedValidator<T>(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const values = control.value as T[];\n return values.length && values.filter(value => value).length >= min ? null : {minLength: true};\n };\n}\n\nexport function maxSelectedValidator<T>(max: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const values = control.value as T[];\n return values.length && values.filter(value => value).length <= max ? null : {maxLength: true};\n };\n}\n\nexport function getValues(options: { key: string, label: string, selectAll?: true }[], values: any[]): any[] {\n return options.reduce((acc: string[], option: { key: string, label: string }, index: number) => {\n if (values[index]) {\n return [...acc, option.key];\n }\n return acc;\n }, []);\n}\n\n","import {ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn, Validators} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {FilterConfig, FilterError, FilterFieldConfig, FilterSetting} from '../../models';\nimport {FilterService} from './../../services/filter/filter.service';\nimport {getValues, maxSelectedValidator, minSelectedValidator} from './generic-filter-utils';\n\n@Component({\n selector: 'xuilib-generic-filter',\n templateUrl: 'generic-filter.component.html',\n styleUrls: ['generic-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class GenericFilterComponent implements OnInit, OnDestroy {\n public form: FormGroup;\n public submitted = false;\n public formSub: Subscription;\n\n constructor(private readonly filterService: FilterService, private readonly fb: FormBuilder) {\n }\n\n // tslint:disable-next-line:variable-name\n private _config: FilterConfig;\n\n public get config(): FilterConfig {\n return this._config;\n }\n\n @Input()\n public set config(value: FilterConfig) {\n this._config = {\n ...value,\n fields: value.fields.map(field => ({\n ...field,\n displayMinSelectedError: false,\n displayMaxSelectedError: false,\n }))\n };\n this._config = value;\n }\n\n // tslint:disable-next-line:variable-name\n private _settings?: FilterSetting;\n\n public get settings(): FilterSetting {\n return this._settings;\n }\n\n @Input()\n public set settings(value: FilterSetting) {\n if (!value) {\n this.getSettings();\n }\n if (value && value.fields) {\n this.mergeDefaultFields(value);\n }\n this._settings = value;\n }\n\n private static addFormValidators(field: FilterFieldConfig): Validators {\n const validators = [];\n if (field && field.minSelected) {\n validators.push(minSelectedValidator(field.minSelected));\n }\n\n if (field && field.maxSelected) {\n validators.push(maxSelectedValidator(field.maxSelected));\n }\n return validators;\n }\n\n public ngOnInit(): void {\n if (!this.settings) {\n this.getSettings();\n }\n this.mergeDefaultFields(this.settings);\n this.buildForm(this.config, this.settings);\n this.formSub = this.form.valueChanges.subscribe(() => this.submitted = false);\n }\n\n public ngOnDestroy(): void {\n if (this.formSub) {\n this.formSub.unsubscribe();\n }\n }\n\n public hidden(field: FilterFieldConfig, form: FormGroup): boolean {\n if (!field.showCondition) {\n return false;\n }\n if (typeof field.showCondition === 'string') {\n const control = form.get(field.name) as FormControl;\n const [name, value] = field.showCondition.split('=');\n if (form.value && form.value[name] === value) {\n if (field.type === 'find-person') {\n control.get('email').setValidators(Validators.required);\n control.get('email').updateValueAndValidity();\n } else {\n control.setValidators(Validators.required);\n control.updateValueAndValidity();\n }\n return false;\n } else {\n if (field.type === 'find-person') {\n control.get('email').clearValidators();\n control.get('email').updateValueAndValidity();\n } else {\n control.clearValidators();\n control.updateValueAndValidity();\n }\n }\n }\n return true;\n }\n\n public disabled(field: FilterFieldConfig, form: FormGroup): boolean {\n if (!field.enableCondition) {\n return null;\n }\n if (typeof field.enableCondition === 'string') {\n const control = form.get(field.name) as FormControl;\n const [name, value] = field.enableCondition.split('=');\n if (form.value && form.value[name] === value) {\n if (field.type === 'find-person') {\n control.get('email').setValidators(Validators.required);\n control.get('email').updateValueAndValidity();\n } else {\n control.setValidators(Validators.required);\n control.updateValueAndValidity();\n }\n return null;\n } else {\n if (field.type === 'find-person') {\n control.get('email').clearValidators();\n control.get('email').updateValueAndValidity();\n } else {\n control.clearValidators();\n control.updateValueAndValidity();\n }\n }\n }\n // find-location is special case where need to reset textbox (by existing disabling functionality)\n // field.disable referred to component itself\n if (field.type === 'find-location') {\n return true;\n }\n // Note: field.disable decides whether to actually disable or not\n return field.disable ? field.disable : null;\n }\n\n public applyFilter(form: FormGroup): void {\n this.submitted = true;\n form.markAsTouched();\n if (form.valid) {\n this._settings = {\n id: this.config.id,\n fields: this.getSelectedValues(form.value, this.config)\n };\n this.filterService.givenErrors.next(null);\n const settings = {...this.settings, reset: false};\n this.filterService.persist(settings, this.config.persistence);\n } else {\n this.emitFormErrors(form);\n }\n }\n\n // when domain changes ensure that person field is reset\n public fieldChanged(field: FilterFieldConfig, form: FormGroup): void {\n // TODO - Do similar with jurisdiction/service for caseworkers by services\n if (field.changeResetFields && field.changeResetFields.length) {\n for (const resetField of field.changeResetFields) {\n this.resetField(resetField, form);\n }\n }\n }\n\n // when user enters input change radio button\n public inputChanged(field: FilterFieldConfig): void {\n if (field.radioSelectionChange && typeof field.radioSelectionChange === 'string') {\n const [name, value] = field.enableCondition.split('=');\n this.form.get(name).patchValue(value);\n }\n }\n\n public cancelFilter(): void {\n this.buildForm(this.config, this.settings, true);\n if (this.config && this.config.cancelSetting) {\n this._settings.fields = JSON.parse(JSON.stringify(this.config.cancelSetting.fields));\n }\n const settings = {...this.settings, reset: true};\n this.filterService.persist(settings, this.config.persistence);\n this.filterService.givenErrors.next(null);\n this.submitted = false;\n }\n\n public updatePersonControls(values: any, field: FilterFieldConfig): void {\n let keys;\n if (!values) {\n keys = Object.keys(this.form.get(field.name).value);\n } else {\n keys = Object.keys(values);\n }\n for (const key of keys) {\n if (this.form.get(field.name) && this.form.get(field.name).get(key)) {\n const value = values && values[key] ? values[key] : null;\n this.form.get(field.name).get(key).patchValue(value);\n }\n }\n }\n\n public toggleSelectAll(event: any, form: FormGroup, item: { key: string; label: string; selectAll?: true }, field: FilterFieldConfig): void {\n const isChecked = event.target.checked;\n const formArray: FormArray = form.get(field.name) as FormArray;\n if (!item.selectAll) {\n const allChecked = formArray.controls.every((control: AbstractControl) => control.value);\n let index: number = null;\n const hasSelectAllOption = field.options.find((option, i) => {\n if (option.hasOwnProperty('selectAll')) {\n index = i;\n return true;\n }\n return false;\n });\n // tslint:disable-next-line:variable-name\n const isAllCheckedExcludingTheSelectAllOption = formArray.controls.filter((_control: AbstractControl, i: number) => i !== index)\n .every((control: AbstractControl) => control.value);\n\n if (!allChecked && hasSelectAllOption && !isChecked) {\n formArray.controls.forEach((control: AbstractControl, i: number) => {\n if (index === i) {\n control.patchValue(false);\n return;\n }\n });\n } else if (hasSelectAllOption && !allChecked && isChecked && isAllCheckedExcludingTheSelectAllOption) {\n formArray.controls[index].patchValue(true);\n }\n } else {\n formArray.controls.forEach((control: AbstractControl) => {\n if (isChecked) {\n control.patchValue(true);\n } else {\n control.patchValue(false);\n }\n });\n }\n if (field.changeResetFields && field.changeResetFields.length) {\n for (const resetField of field.changeResetFields) {\n this.resetField(resetField, form);\n }\n }\n }\n\n private resetField(resetField: string, form: FormGroup): void {\n const control = form.get(resetField);\n const defaultValue: { name: string, value: any[] } = this.config.cancelSetting.fields.find((f) => f.name === resetField);\n if (control instanceof FormArray) {\n for (let i = 0; i < control.length; i++) {\n control.removeAt(i);\n }\n } else if (control instanceof FormGroup) {\n const keys = Object.keys(control.value);\n for (const key of keys) {\n this.resetField(key, control);\n }\n } else if (control instanceof FormControl) {\n const value = defaultValue && defaultValue.value && defaultValue.value.length ? defaultValue.value[0] : null;\n control.setValue(value);\n }\n }\n\n private mergeDefaultFields(filter: FilterSetting): void {\n if (filter) {\n filter.fields = this.filterService.get(this.config.id) ? this.filterService.get(this.config.id).fields : filter.fields;\n } else if (this.config && this.config.cancelSetting) {\n this._settings = {\n id: this.config.id,\n fields: JSON.parse(JSON.stringify(this.config.cancelSetting.fields))\n };\n }\n }\n\n private getSettings(): void {\n this._settings = this.filterService.get(this.config.id);\n }\n\n private buildForm(config: FilterConfig, settings: FilterSetting, reset?: boolean): void {\n const findPersonControl = this.form ? this.form.get('findPersonControl') : null;\n this.form = this.fb.group({});\n if (findPersonControl) {\n // in order to maintain find person component, control needs to be kept\n this.form.addControl('findPersonControl', findPersonControl);\n }\n for (const field of config.fields) {\n if (field.type === 'checkbox' || field.type === 'checkbox-large') {\n const formArray = this.buildCheckBoxFormArray(field, settings);\n this.form.addControl(field.name, formArray);\n } else if (field.type === 'find-location') {\n const formArray = this.buildFindLocationFormArray(field, settings);\n this.form.addControl(field.name, formArray);\n } else {\n const validators: ValidatorFn[] = [];\n if (field.minSelected && field.minSelected > 0) {\n validators.push(Validators.required);\n }\n let defaultValue: any = null;\n if (reset && config.cancelSetting) {\n const cancelField = config.cancelSetting.fields.find((f) => f.name === field.name);\n defaultValue = cancelField && cancelField.value ? cancelField.value[0] : '';\n } else if (settings && settings.fields) {\n const lastSavedValue = settings.fields.find((f) => f.name === field.name);\n defaultValue = lastSavedValue && lastSavedValue ? lastSavedValue.value[0] : '';\n }\n // if field is find-person build a form group;\n if (field.type === 'find-person') {\n const formGroup = new FormGroup({\n domain: new FormControl(''),\n email: new FormControl(defaultValue && defaultValue.hasOwnProperty('email') ? defaultValue.email : '', validators),\n id: new FormControl(''),\n name: new FormControl(''),\n knownAs: new FormControl(''),\n });\n this.form.addControl(field.name, formGroup);\n } else {\n const control = new FormControl(defaultValue, validators);\n this.form.addControl(field.name, control);\n }\n\n // if field updates find person component set the initial domain\n if (field.findPersonField) {\n this.fieldChanged(field, this.form);\n }\n }\n }\n }\n\n private buildCheckBoxFormArray(field: FilterFieldConfig, settings: FilterSetting): FormArray {\n const validators = GenericFilterComponent.addFormValidators(field);\n const formArray = this.fb.array([], validators);\n let defaultValues;\n if (settings && settings.fields) {\n defaultValues = settings.fields.find((f) => f.name === field.name);\n }\n for (const option of field.options) {\n let checked = false;\n if (defaultValues && Array.isArray(defaultValues.value)) {\n checked = !!defaultValues.value.find((value) => value === option.key);\n }\n formArray.push(new FormControl(checked));\n }\n return formArray;\n }\n\n private buildFindLocationFormArray(field: FilterFieldConfig, settings: FilterSetting): FormArray {\n const validators = GenericFilterComponent.addFormValidators(field);\n const formArray = this.fb.array([], validators);\n let defaultValues: { name: string; value: any[] };\n if (settings && settings.fields) {\n defaultValues = settings.fields.find((f) => f.name === field.name);\n if (defaultValues && defaultValues.value && defaultValues.value.length > 0) {\n for (const defaultValue of defaultValues.value) {\n formArray.push(new FormControl(defaultValue));\n }\n }\n }\n return formArray;\n }\n\n private getSelectedValues(formValues: any, config: FilterConfig): any {\n return Object.keys(formValues).map((name: string) => {\n const values = formValues[name];\n if (Array.isArray(values)) {\n const field = config.fields.find(f => f.name === name);\n if (field.type === 'find-location') {\n return {value: values, name};\n } else {\n return {value: getValues(field.options, values), name};\n }\n } else {\n return {value: [values], name};\n }\n });\n }\n\n private emitFormErrors(form: FormGroup): void {\n const errors: FilterError[] = [];\n for (const field of this.config.fields) {\n const formGroup = form.get(field.name);\n if (formGroup && formGroup.errors && formGroup.errors.minLength) {\n errors.push({name: field.name, error: field.minSelectedError});\n }\n if (formGroup && formGroup.errors && formGroup.errors.maxLength) {\n errors.push({name: field.name, error: field.minSelectedError});\n }\n }\n if (errors.length) {\n this.filterService.givenErrors.next(errors);\n }\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n/*\n* Gov UK Dialog Component\n* Responsible for displaying dialog layout\n* using ng-content to display content from parent\n* */\n@Component({\n selector: 'xuilib-session-dialog',\n templateUrl: './hmcts-session-dialog.component.html',\n styleUrls: ['./hmcts-session-dialog.component.scss']\n})\nexport class HmctsSessionDialogComponent {\n\n @Input() public positionTop: string;\n @Output() public close = new EventEmitter();\n constructor() {}\n\n public onClose(): void {\n this.close.emit();\n }\n\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\n\n@Component({\n selector: 'xuilib-invite-user-form',\n templateUrl: './invite-user-form.component.html',\n})\n\nexport class InviteUserFormComponent {\n\n public isInvalid: any;\n\n @Output() public submitForm = new EventEmitter();\n @Input() public inviteUserForm: FormGroup;\n @Input() public set errorMessages(value: any) {\n this.isInvalid = value || {} ;\n }\n\n public onSubmit() {\n this.submitForm.emit();\n }\n}\n","import {Component, Input} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ErrorMessagesModel } from '../../gov-ui/models';\n\n@Component({\n selector: 'xuilib-invite-permission-form',\n templateUrl: './invite-user-permission.component.html',\n })\n\n export class InviteUserPermissionComponent {\n @Input() public inviteUserForm: FormGroup;\n @Input() public isPuiCaseManager: boolean = false;\n @Input() public isPuiUserManager: boolean = false;\n @Input() public isPuiOrganisationManager: boolean = false;\n @Input() public isPuiFinanceManager: boolean = false;\n @Input() public errorMessages: ErrorMessagesModel;\n }\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'xuilib-loading-spinner',\n templateUrl: './loading-spinner.component.html',\n styleUrls: ['./loading-spinner.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\n\nexport class LoadingSpinnerComponent {\n @Input() public loadingText: string = 'Loading';\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { SharedCase } from '../../models/case-share.model';\nimport { UserDetails } from '../../models/user-details.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CaseSharingStateService {\n\n private caseState: SharedCase[] = [];\n private readonly subject = new BehaviorSubject<SharedCase[]>(this.caseState);\n\n public get state() {\n return this.subject.asObservable().pipe(\n distinctUntilChanged()\n );\n }\n\n constructor() { }\n\n public setCases(cases: SharedCase[]): void {\n this.caseState = [];\n cases.forEach(aCase => {\n this.caseState.push({ caseId: aCase.caseId, caseTitle: aCase.caseTitle, caseTypeId: aCase.caseTypeId, roles: aCase.roles,\n sharedWith: aCase.sharedWith, pendingShares: aCase.pendingShares, pendingUnshares: aCase.pendingUnshares });\n });\n this.subject.next(this.caseState);\n }\n\n public getCases(): SharedCase[] {\n return this.caseState;\n }\n\n public requestShare(user: UserDetails): SharedCase[] {\n const oldSharedCases: SharedCase[] = this.caseState.slice();\n const newSharedCases: SharedCase[] = [];\n for (const sharedCase of oldSharedCases) {\n if (!sharedCase.pendingShares) {\n sharedCase.pendingShares = [];\n }\n const newPendingShares = sharedCase.pendingShares.slice();\n if (!sharedCase.pendingUnshares) {\n sharedCase.pendingUnshares = [];\n }\n const newPendingUnshares = sharedCase.pendingUnshares.slice();\n if (!this.userHasAccess(sharedCase, user)) {\n if (!newPendingShares.some(u => u.email === user.email)) {\n newPendingShares.push(user);\n }\n } else {\n for (let u = 0, ul = newPendingUnshares.length; u < ul; u++) {\n if (newPendingUnshares[u].email === user.email) {\n newPendingUnshares.splice(u, 1);\n break;\n }\n }\n }\n const newSharedCase = {\n ...sharedCase,\n pendingUnshares: newPendingUnshares,\n pendingShares: newPendingShares\n };\n newSharedCases.push(newSharedCase);\n }\n this.subject.next(newSharedCases);\n return newSharedCases;\n }\n\n public requestUnshare(user: UserDetails, caseId?: string): SharedCase[] {\n const newSharedCases: SharedCase[] = [];\n for (const sharedCase of this.caseState) {\n // If no caseId, then request unshare from all shared cases\n if (caseId === undefined || sharedCase.caseId === caseId) {\n if (!sharedCase.pendingUnshares) {\n sharedCase.pendingUnshares = [];\n }\n const newPendingUnshares = sharedCase.pendingUnshares.slice();\n // If the user is pending shared access, just remove them from pendingShares\n let newPendingShares;\n let indexOfPreviouslyAddedUser = -1;\n if (sharedCase.pendingShares) {\n indexOfPreviouslyAddedUser = sharedCase.pendingShares.findIndex(u => u.idamId === user.idamId);\n if (indexOfPreviouslyAddedUser > -1) {\n newPendingShares = sharedCase.pendingShares.slice();\n newPendingShares.splice(indexOfPreviouslyAddedUser, 1);\n }\n }\n // If the user does not exist in pendingShares, and already has shared access (i.e. exists in sharedWith),\n // request removal of shared access\n if (indexOfPreviouslyAddedUser === -1 && sharedCase.sharedWith && sharedCase.sharedWith.findIndex(\n u => u.idamId === user.idamId) > -1) {\n if (!newPendingUnshares.some(u => u.email === user.email)) {\n newPendingUnshares.push(user);\n }\n }\n const newSharedCase = {\n ...sharedCase,\n pendingUnshares: newPendingUnshares,\n ...(newPendingShares && {\n pendingShares: newPendingShares\n })\n };\n newSharedCases.push(newSharedCase);\n } else {\n newSharedCases.push(sharedCase);\n }\n }\n this.subject.next(newSharedCases);\n return newSharedCases;\n }\n\n public requestCancel(caseId: string, user: UserDetails): void {\n const newSharedCases: SharedCase[] = [];\n for (const sharedCase of this.caseState) {\n if (sharedCase.caseId === caseId) {\n if (!sharedCase.pendingUnshares) {\n sharedCase.pendingUnshares = [];\n }\n const newPendingUnshares = sharedCase.pendingUnshares.slice();\n for (let iPendingUnshares = 0; iPendingUnshares < newPendingUnshares.length; iPendingUnshares++) {\n if (newPendingUnshares[iPendingUnshares].email === user.email) {\n newPendingUnshares.splice(iPendingUnshares, 1);\n break;\n }\n }\n if (!sharedCase.pendingShares) {\n sharedCase.pendingShares = [];\n }\n const newPendingShares = sharedCase.pendingShares.slice();\n for (let iPendingShares = 0; iPendingShares < newPendingShares.length; iPendingShares++) {\n if (newPendingShares[iPendingShares].email === user.email) {\n newPendingShares.splice(iPendingShares, 1);\n break;\n }\n }\n const newSharedCase = {\n ...sharedCase,\n pendingUnshares: newPendingUnshares,\n pendingShares: newPendingShares\n };\n newSharedCases.push(newSharedCase);\n } else {\n newSharedCases.push(sharedCase);\n }\n }\n this.subject.next(newSharedCases);\n return;\n }\n\n public removeCase(caseId: string): void {\n if (this.caseState.length > 1) {\n for (let i = 0, l = this.caseState.length; i < l; i++) {\n if (this.caseState[i].caseId === caseId) {\n this.caseState.splice(i, 1);\n this.subject.next(this.caseState);\n return;\n }\n }\n }\n }\n\n public userHasAccess(c: SharedCase, user: UserDetails): boolean {\n if (!c.sharedWith) {\n return false;\n }\n for (let i = 0, l = c.sharedWith.length; i < l; i++) {\n if (c.sharedWith[i].email === user.email) {\n return true;\n }\n }\n return false;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SharedCase } from '../../models/case-share.model';\nimport { UserDetails } from '../../models/user-details.model';\nimport { CaseSharingStateService } from '../../services/case-sharing-state/case-sharing-state.service';\n\n@Component({\n selector: 'xuilib-selected-case-confirm',\n templateUrl: './selected-case-confirm.component.html',\n styleUrls: ['./selected-case-confirm.component.scss']\n})\nexport class SelectedCaseConfirmComponent implements OnInit {\n\n @Input() public sharedCase: SharedCase;\n @Input() public changeLink: string = '';\n\n public shareCases: SharedCase[];\n public shareCases$: Observable<SharedCase[]>;\n\n constructor(private readonly stateService: CaseSharingStateService) { }\n\n public ngOnInit() {\n this.shareCases$ = this.stateService.state;\n this.shareCases$.subscribe(shareCases => this.shareCases = shareCases);\n }\n\n public trackByUserId(user: UserDetails): string {\n return user.idamId;\n }\n\n public showUserAccessBlock(): boolean {\n if (this.sharedCase.pendingShares && this.sharedCase.pendingShares.length > 0) {\n return true;\n }\n return this.sharedCase.pendingUnshares && this.sharedCase.pendingUnshares.length > 0;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SharedCase } from '../../models/case-share.model';\nimport { CaseSharingStateService } from '../../services/case-sharing-state/case-sharing-state.service';\n\n@Component({\n selector: 'xuilib-selected-case-list',\n templateUrl: './selected-case-list.component.html',\n styleUrls: ['./selected-case-list.component.scss']\n})\nexport class SelectedCaseListComponent implements OnInit {\n\n public shareCases: SharedCase[] = [];\n public caseCount: number;\n\n @Input() public shareCases$: Observable<SharedCase[]>;\n\n @Input() public removeUserFromCaseToggleOn: boolean;\n\n @Input() public toConfirm: boolean = false;\n\n @Input() public changeLink: string = '';\n\n @Output() public unselect = new EventEmitter<SharedCase>();\n @Output() public synchronizeStore = new EventEmitter<SharedCase>();\n\n constructor(private readonly stateService: CaseSharingStateService) { }\n\n public ngOnInit() {\n this.shareCases$ = this.stateService.state;\n this.shareCases$.subscribe((shareCases) => {\n this.shareCases = shareCases;\n this.caseCount = this.shareCases.length;\n });\n }\n\n public onUnselect(sharedCase: SharedCase): void {\n this.unselect.emit(sharedCase);\n this.caseCount = this.shareCases.length;\n }\n\n public onSynchronizeStore(event: any): void {\n this.synchronizeStore.emit(event);\n }\n\n public trackByCaseId(sharedCase: SharedCase): string {\n return sharedCase.caseId;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { SharedCase } from '../../models/case-share.model';\nimport { UserDetails } from '../../models/user-details.model';\nimport { CaseSharingStateService } from '../../services/case-sharing-state/case-sharing-state.service';\n\n@Component({\n selector: 'xuilib-selected-case',\n templateUrl: './selected-case.component.html',\n styleUrls: ['./selected-case.component.scss']\n})\nexport class SelectedCaseComponent implements OnInit, OnChanges {\n\n @Input() public sharedCase: SharedCase;\n @Input() public selectedUser: UserDetails;\n @Input() public opened = false;\n @Input() public removeUserFromCaseToggleOn: boolean;\n @Input() public caseCount: number;\n\n @Output() public unselect = new EventEmitter<SharedCase>();\n @Output() public synchronizeStore = new EventEmitter<any>();\n\n public shareCases: SharedCase[];\n public shareCases$: Observable<SharedCase[]>;\n\n public combinedSortedShares: UserDetails[];\n\n constructor(private readonly stateService: CaseSharingStateService) { }\n\n public ngOnInit() {\n this.shareCases$ = this.stateService.state;\n this.shareCases$.subscribe(shareCases => this.shareCases = shareCases);\n\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.sharedCase) {\n const sharedWith = this.sharedCase.sharedWith ? this.sharedCase.sharedWith : [];\n const pendingShares = this.sharedCase.pendingShares ? this.sharedCase.pendingShares : [];\n this.combinedSortedShares = this.combineAndSortShares(sharedWith, pendingShares);\n }\n }\n\n public onDeselect(c: SharedCase): void {\n this.unselect.emit(c);\n }\n\n public trackByUserId(user: UserDetails): string {\n return user.idamId;\n }\n\n public canRemove(caseId: string, user: UserDetails): Observable<boolean> {\n return this.shareCases$.pipe(map(cases => {\n if (this.removeUserFromCaseToggleOn) {\n for (const aCase of cases) {\n if (aCase.caseId === caseId) {\n if (aCase.pendingUnshares && aCase.pendingUnshares.some(u => u.idamId === user.idamId)) {\n return false;\n }\n if (aCase.sharedWith && aCase.sharedWith.some(u => u.idamId === user.idamId)) {\n return true;\n }\n }\n }\n }\n return false;\n }));\n }\n\n public canCancel(caseId: string, user: UserDetails): Observable<boolean> {\n return this.shareCases$.pipe(map(cases => {\n for (const aCase of cases) {\n if (aCase.caseId === caseId) {\n if (aCase.pendingShares && aCase.pendingShares.some(u => u.idamId === user.idamId)) {\n return true;\n }\n if (aCase.pendingUnshares && aCase.pendingUnshares.some(u => u.idamId === user.idamId)) {\n return true;\n }\n return false;\n }\n }\n }));\n }\n\n public isToBeRemoved(caseId: string, user: UserDetails): Observable<boolean> {\n return this.shareCases$.pipe(map(cases => {\n for (const aCase of cases) {\n if (aCase.caseId === caseId) {\n return aCase.pendingUnshares && aCase.pendingUnshares.some(u => u.idamId === user.idamId);\n }\n }\n }));\n }\n\n public isToBeAdded(caseId: string, user: UserDetails): Observable<boolean> {\n return this.shareCases$.pipe(map(cases => {\n for (const aCase of cases) {\n if (aCase.caseId === caseId) {\n return aCase.pendingShares && aCase.pendingShares.some(u => u.idamId === user.idamId);\n }\n }\n }));\n }\n\n public onRemove(user: UserDetails, sharedCase: SharedCase): void {\n this.stateService.requestUnshare(user, sharedCase.caseId);\n this.synchronizeStore.emit(this.shareCases);\n }\n\n public onCancel(user: UserDetails, sharedCase: SharedCase): void {\n this.stateService.requestCancel(sharedCase.caseId, user);\n this.synchronizeStore.emit(this.shareCases);\n }\n\n public showNoUsersAccessInfo(): boolean {\n // A user is added to a case\n if (this.sharedCase.pendingShares) {\n if (this.sharedCase.pendingShares.length > 0) {\n return false;\n }\n }\n // A case has 0 users with access to it\n if (this.sharedCase.sharedWith) {\n if (this.sharedCase.sharedWith.length === 0) {\n return true;\n }\n }\n // Access to the last user is removed\n if (this.sharedCase.sharedWith && this.sharedCase.pendingUnshares) {\n if (this.sharedCase.pendingUnshares.length > 0\n && this.sharedCase.sharedWith.length === this.sharedCase.pendingUnshares.length) {\n return true;\n }\n }\n return false;\n }\n\n public showUserHasAccessInfo(): boolean {\n return !this.showNoUsersAccessInfo();\n }\n\n public showUserAccessTable(): boolean {\n if (this.sharedCase.pendingShares) {\n if (this.sharedCase.pendingShares.length > 0) {\n return true;\n }\n }\n if (this.sharedCase.sharedWith) {\n if (this.sharedCase.sharedWith.length > 0) {\n return true;\n }\n }\n return false;\n }\n\n public combineAndSortShares(sharedWith: UserDetails[], pendingShares: UserDetails[]): UserDetails[] {\n return [\n ...sharedWith,\n ...pendingShares\n ].sort((user1, user2) => {\n return user1.firstName.toLowerCase() > user2.firstName.toLowerCase() ? 1 : (user2.firstName.toLowerCase() > user1.firstName.toLowerCase() ? -1 : 0);\n });\n }\n\n public userIdSetter(isPending: boolean, id: number): string {\n return isPending ? `pendingShares-${id}` : `${id}`;\n }\n\n public buildElementId(elementName: string): string {\n return `${elementName}-${this.sharedCase.caseId}`;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'xuilib-service-message',\n templateUrl: './service-message.component.html'\n})\nexport class ServiceMessageComponent {\n @Input() public message: string;\n @Input() public key: string;\n @Output() public hideMessage = new EventEmitter<string>();\n constructor() { }\n\n public onHideMessageEvent(key: string) {\n this.hideMessage.emit(key);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FeatureUser } from '../../models/feature-user';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FeatureToggleService {\n // tslint:disable-next-line: variable-name\n public initialize(_user: FeatureUser, _clientId: string): void {\n throw new Error('Not implemented');\n }\n // tslint:disable-next-line: variable-name\n public isEnabled(_feature: string): Observable<boolean> {\n throw new Error('Not implemented');\n }\n // tslint:disable-next-line: variable-name\n public getValue<R>(_key: string, _defaultValue: R): Observable<R> {\n throw new Error('Not implemented');\n }\n\n // tslint:disable-next-line: variable-name\n public getValueOnce<R>(_key: string, _defaultValue: R): Observable<R> {\n throw new Error('Not implemented');\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FeatureToggleService } from '../../services/feature-toggle/feature-toggle.service';\n\nexport interface ServiceMessages {\n [key: string]: string;\n}\n\n@Component({\n selector: 'xuilib-service-messages',\n templateUrl: './service-messages.component.html'\n})\nexport class ServiceMessagesComponent implements OnInit {\n public hiddenBanners: string[];\n public filteredMessages = new Map<string, string>();\n\n @Input() public userRoles: string[];\n @Input() public featureToggleKey: string;\n @Input() public serviceMessageCookie: string;\n\n constructor(private readonly featureToggleService: FeatureToggleService) { }\n\n public ngOnInit() {\n this.getServiceMessages();\n }\n\n public getServiceMessages(): void {\n this.featureToggleService.getValue<ServiceMessages>(this.featureToggleKey, null)\n .subscribe(messages => {\n if (!!messages) {\n this.createFilteredMessages(messages);\n }\n });\n }\n\n private createFilteredMessages(messages: ServiceMessages): void {\n this.hiddenBanners = JSON.parse(window.sessionStorage.getItem(this.serviceMessageCookie)) || [];\n Object.keys(messages).forEach(key => {\n const regEx = new RegExp(key);\n if (this.userRoles.some(e => regEx.test(e)) && this.hiddenBanners.indexOf(key) === -1) {\n this.filteredMessages.set(key, messages[key]);\n }\n });\n }\n\n public hideMessage(key: string): void {\n this.filteredMessages.delete(key);\n this.hiddenBanners.push(key);\n window.sessionStorage.setItem(this.serviceMessageCookie, JSON.stringify(this.hiddenBanners));\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SharedCase } from '../../models/case-share.model';\nimport { CaseSharingStateService } from '../../services/case-sharing-state/case-sharing-state.service';\n\n@Component({\n selector: 'xuilib-share-case-confirm',\n templateUrl: './share-case-confirm.component.html',\n styleUrls: ['./share-case-confirm.component.scss']\n})\nexport class ShareCaseConfirmComponent implements OnInit {\n\n public shareCases: SharedCase[] = []; // cases selected for sharing\n\n @Input() public shareCases$: Observable<SharedCase[]>;\n @Input() public changeLink: string = '';\n @Input() public completeLink: string = '';\n\n public state$: Observable<SharedCase[]>;\n\n constructor(private readonly stateService: CaseSharingStateService) { }\n\n public ngOnInit() {\n this.shareCases$.subscribe(shareCases => {\n this.shareCases = shareCases;\n this.stateService.setCases(shareCases);\n });\n this.shareCases$ = this.stateService.state;\n }\n\n}\n","import { UserDetails } from './user-details.model';\n\nexport interface SharedCase {\n caseId: string;\n caseTitle: string;\n caseTypeId?: string;\n roles?: string[];\n sharedWith?: UserDetails[];\n pendingShares?: UserDetails[];\n pendingUnshares?: UserDetails[];\n}\n\nexport enum SharedCaseErrorMessages {\n OneCaseMustBeSelected = 'At least one case must be selected',\n NoChangesRequested = 'You have not requested any changes to case sharing',\n OnePersonMustBeAssigned = 'At least one person must be assigned to each case'\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { UserDetails } from '../../models/user-details.model';\n\n@Component({\n selector: 'xuilib-user-select',\n templateUrl: './user-select.component.html',\n styleUrls: ['./user-select.component.scss']\n})\nexport class UserSelectComponent implements OnInit {\n\n @Input() public users: UserDetails[];\n\n @Output() public selected = new EventEmitter<UserDetails>();\n\n public filteredUsers: Observable<UserDetails[]>;\n\n public control = new FormControl();\n\n constructor() { }\n\n public ngOnInit() {\n this.filteredUsers = this.control.valueChanges.pipe(\n map(value => typeof value === typeof 'string' ? this.filterUsers(value) : this.users)\n );\n this.selected.emit(null);\n }\n\n public displayValue(user: UserDetails): string {\n return user ? `${user.firstName} ${user.lastName} - ${user.email}` : '';\n }\n\n public onSelected(e: MatAutocompleteSelectedEvent) {\n this.selected.emit(e.option.value);\n }\n\n public clear() {\n this.control.setValue(null);\n }\n\n public onUserChange(newUserValue: UserDetails) {\n if (!newUserValue || !newUserValue.email) {\n this.selected.emit(null);\n }\n }\n\n private filterUsers(value: string): UserDetails[] {\n if (value) {\n value = value.toLowerCase();\n return this.users.filter(user => {\n if (user.firstName.toLowerCase().includes(value)) {\n return true;\n }\n if (user.lastName.toLowerCase().includes(value)) {\n return true;\n }\n if (user.email.toLowerCase().includes(value)) {\n return true;\n }\n return false;\n });\n }\n return [];\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { ErrorMessagesModel, GovUiConfigModel } from '../../gov-ui/models';\nimport { SharedCase, SharedCaseErrorMessages } from '../../models/case-share.model';\nimport { UserDetails } from '../../models/user-details.model';\nimport { CaseSharingStateService } from '../../services/case-sharing-state/case-sharing-state.service';\nimport { UserSelectComponent } from '../user-select/user-select.component';\n\n@Component({\n selector: 'xuilib-share-case',\n templateUrl: './share-case.component.html',\n styleUrls: ['./share-case.component.scss']\n})\nexport class ShareCaseComponent implements OnInit {\n\n public shareCases: SharedCase[] = []; // cases selected for sharing\n public selectedCasesErrorMessageConfig: GovUiConfigModel;\n public continueAllowed = false;\n public assignedUsers: UserDetails[];\n public selectedUserToRemove: UserDetails = null;\n\n @Input() public removeUserFromCaseToggleOn: boolean = false;\n\n @Input() public shareCases$: Observable<SharedCase[]>;\n @Input() public users: UserDetails[] = []; // users of this organisation the cases can be shared with\n\n @Input() public confirmLink: string = '';\n @Input() public cancelLink: string = '';\n @Input() public addUserLabel: string;\n @Input() public showRemoveUsers: boolean = false;\n @Input() public fnTitle: string = '';\n @Input() public title: string = '';\n\n @Output() public unselect = new EventEmitter<SharedCase>();\n @Output() public synchronizeStore = new EventEmitter<any>();\n\n private selectedUser: UserDetails;\n\n @ViewChild(UserSelectComponent, { static: true })\n private readonly userSelect: UserSelectComponent;\n\n public validationErrors: { id: string, message: string }[] = [];\n public shareCaseErrorMessage: ErrorMessagesModel;\n\n constructor(private readonly stateService: CaseSharingStateService,\n private readonly router: Router) { }\n\n public ngOnInit() {\n this.shareCases$\n .pipe(tap(sharedCases => {\n // Update the list of users assigned to at least one case\n this.getAssignedUsers(sharedCases.filter(sharedCase => sharedCase.sharedWith && sharedCase.sharedWith.length > 0));\n }))\n .subscribe(shareCases => {\n this.shareCases = shareCases;\n this.stateService.setCases(shareCases);\n // Set the config to be used by the xuilib-gov-uk-error-message component, in particular the element ID to\n // which the error message is associated\n if (shareCases) {\n this.selectedCasesErrorMessageConfig = {\n id: shareCases.length > 0 ? 'cases' : 'noCaseDisplay'\n };\n }\n });\n this.shareCases$ = this.stateService.state;\n this.shareCaseErrorMessage = { isInvalid: false, messages: [] };\n }\n\n public onUnselect(c: SharedCase): void {\n this.validationErrors = [];\n if (this.stateService.getCases().length === 1) {\n this.validationErrors.push({ id: 'cases', message: SharedCaseErrorMessages.OneCaseMustBeSelected });\n this.shareCaseErrorMessage = { isInvalid: true, messages: [SharedCaseErrorMessages.OneCaseMustBeSelected] };\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n } else {\n this.unselect.emit(c);\n this.stateService.removeCase(c.caseId);\n }\n }\n\n public onSynchronizeStore(event: any): void {\n this.synchronizeStore.emit(event);\n }\n\n public onSelectedUser(user: UserDetails) {\n this.selectedUser = user;\n }\n\n public addUser() {\n const newSharedCases = this.stateService.requestShare(this.selectedUser);\n this.selectedUser = null;\n if (this.userSelect) { this.userSelect.clear(); }\n this.synchronizeStore.emit(newSharedCases);\n // Update the list of assigned users (which includes pending users)\n this.getAssignedUsers(newSharedCases);\n }\n\n public removeUser() {\n if (this.selectedUserToRemove) {\n const newSharedCases = this.stateService.requestUnshare(this.selectedUserToRemove);\n this.synchronizeStore.emit(newSharedCases);\n }\n }\n\n public isDisabledAdd() {\n return this.selectedUser === null || this.shareCases.length === 0;\n }\n\n /**\n * Function originally used to set disabled state of \"Continue\" button, now called by the button click handler to\n * control whether navigation to the confirmation page is allowed. It is prevented if no changes have been made\n */\n public setContinueAllowed(): void {\n // Always start with continueAllowed = false. This covers the scenario where a user might add someone for sharing\n // a case (so, continueAllowed = true), then removes the same user before trying to continue. This would\n // erroneously leave continueAllowed as true\n this.continueAllowed = false;\n this.shareCases$.subscribe(shareCases => {\n for (const caseState of shareCases) {\n if (caseState.pendingShares && caseState.pendingShares.length > 0) {\n this.continueAllowed = true;\n break;\n }\n if (caseState.pendingUnshares && caseState.pendingUnshares.length > 0) {\n this.continueAllowed = true;\n break;\n }\n }\n });\n }\n\n public onDeselect(sharedCase: SharedCase): void {\n if (sharedCase !== null) {\n const updated = [];\n for (const element of this.shareCases) {\n if (element.caseId !== sharedCase.caseId) {\n updated.push(element);\n }\n }\n this.shareCases = updated;\n }\n this.stateService.setCases(this.shareCases);\n }\n\n public onContinue(): void {\n this.setContinueAllowed();\n // If continuation is not allowed, set an error message\n if (!this.continueAllowed) {\n this.validationErrors = [];\n this.validationErrors.push({ id: 'cases', message: SharedCaseErrorMessages.NoChangesRequested });\n this.shareCaseErrorMessage = { isInvalid: true, messages: [SharedCaseErrorMessages.NoChangesRequested] };\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n }\n // Navigate to confirmation page only if allowed to continue\n if (this.continueAllowed) {\n // Check that no case is left unassigned; a user can be removed only if there is another current user, or if at\n // least one user is to be added. Prevent navigation to confirmation page if there is at least one case left in\n // an unassigned state\n if (this.hasCasesLeftUnassigned(this.shareCases)) {\n this.validationErrors = [];\n this.validationErrors.push({ id: 'cases', message: SharedCaseErrorMessages.OnePersonMustBeAssigned });\n this.shareCaseErrorMessage = { isInvalid: true, messages: [SharedCaseErrorMessages.OnePersonMustBeAssigned] };\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n } else {\n this.router.navigate([this.confirmLink]);\n }\n }\n }\n\n /**\n * Gets a unique list of all users that have been assigned, or are pending assigment to, at least one case\n * @param sharedCases The list of shared cases from which to get users these are shared with, or are to be shared with\n */\n public getAssignedUsers(sharedCases: SharedCase[]): void {\n const users: UserDetails[] = [];\n sharedCases.forEach(sharedCase => {\n if (sharedCase.sharedWith) {\n sharedCase.sharedWith.forEach(user => {\n if (!users.some(existingUser => user.idamId === existingUser.idamId)) {\n users.push(user);\n }\n });\n }\n if (sharedCase.pendingShares) {\n sharedCase.pendingShares.forEach(user => {\n if (!users.some(existingUser => user.idamId === existingUser.idamId)) {\n users.push(user);\n }\n });\n }\n });\n this.assignedUsers = users;\n }\n\n /**\n * Checks if any shared cases have been left unassigned. This occurs if a shared case has a number of pending\n * unshares equal to the number of current shares, and there are no pending shares.\n * @param sharedCases The array of shared cases to check\n * @returns `true` if at least one case has the condition described above; `false` otherwise\n */\n public hasCasesLeftUnassigned(sharedCases: SharedCase[]): boolean {\n return sharedCases.some(sharedCase => {\n return sharedCase.pendingUnshares && sharedCase.sharedWith &&\n sharedCase.pendingUnshares.length === sharedCase.sharedWith.length &&\n (!sharedCase.pendingShares || sharedCase.pendingShares.length === 0);\n });\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface TabItem {\n text: string;\n}\n\n@Component({\n selector: 'xuilib-tab',\n templateUrl: './tab.component.html'\n })\n\nexport class TabComponent {\n @Input() public tabItems: any [];\n @Output() public tabChange = new EventEmitter<void>();\n constructor() {}\n\n public tabChanged(event: any): void {\n this.tabChange.emit(event);\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'xuilib-tc-confirm',\n templateUrl: './tc-confirm.component.html',\n styleUrls: ['./tc-confirm.component.scss']\n})\nexport class TcConfirmComponent {\n\n @Input() public buttonText: string;\n @Output() public confirm = new EventEmitter<void>();\n\n constructor() {}\n\n public onClick(): void {\n this.confirm.emit();\n }\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'xuilib-tc-display-html',\n templateUrl: './tc-display-html.component.html',\n styleUrls: ['./tc-display-html.component.scss']\n})\nexport class TcDisplayHtmlComponent {\n\n constructor() { }\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'xuilib-tc-display-plain',\n templateUrl: './tc-display-plain.component.html',\n styleUrls: ['./tc-display-plain.component.scss']\n})\nexport class TcDisplayPlainComponent {\n\n constructor() { }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { TCDocument } from '../../models';\n\n@Component({\n selector: 'xuilib-terms-and-conditions',\n templateUrl: './terms-and-conditions.component.html',\n styleUrls: ['./terms-and-conditions.component.scss']\n})\nexport class TermsAndConditionsComponent {\n\n @Input() public document: TCDocument;\n\n constructor() { }\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { User } from '../../models';\n\n@Component({\n selector: 'xuilib-user-details',\n styleUrls: ['./user-details.component.scss'],\n templateUrl: './user-details.component.html'\n})\nexport class UserDetailsComponent {\n @Input() public user: User;\n @Input() public editPermissionRouterLink: string;\n @Input() public warningTitle: string;\n @Input() public showEditLink: boolean = false;\n @Input() public showHelpLink: boolean = false;\n @Input() public suspendHelpLink: string;\n @Output() public suspendUserEvent = new EventEmitter<User>();\n @Input() public showSuspendUserButton = false;\n @Output() public reinvite = new EventEmitter<User>();\n\n public reinviteClick(user: User): void {\n this.reinvite.emit(user);\n }\n\n public suspendUser(suspendUser: User): void {\n this.suspendUserEvent.emit(suspendUser);\n }\n\n public userHasRole(theRole: string): boolean {\n if (this.user && this.user.roles) {\n return this.user.roles.includes(theRole);\n }\n return false;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Pagination } from '../../models';\nimport { User } from '../../models/user.model';\n\n@Component({\n selector: 'xuilib-user-list',\n styleUrls: ['./user-list.component.scss'],\n templateUrl: './user-list.component.html'\n})\nexport class UserListComponent implements OnInit {\n @Input() public users: User[] = [];\n @Input() public currentPageNumber?: number;\n @Input() public pageTotalSize?: any;\n @Output() public userClick = new EventEmitter<User>();\n @Output() public pageChange = new EventEmitter();\n\n public pagination: Pagination;\n\n public ngOnInit() {\n this.pagination = { itemsPerPage: 50, currentPage: this.currentPageNumber, totalItems: this.pageTotalSize};\n }\n\n public onUserClick(user: User) {\n this.userClick.emit(user);\n }\n\n public emitPageClickEvent(pageNumber: any) {\n this.currentPageNumber = pageNumber;\n this.pageChange.emit(pageNumber);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CookieService {\n private readonly document?: Document;\n\n constructor(@Inject(DOCUMENT) doc?: any) {\n this.document = doc as Document;\n }\n\n public setCookie(key: string, value: string, expiryDate?: string): void {\n const expiry = expiryDate ? ` expires=${expiryDate}` : '';\n const cookie = `${key}=${value};${expiry}`;\n this.document.cookie = cookie;\n }\n\n public getCookie(key: string): string {\n const cookieValue = this.document.cookie\n .split('; ')\n .find(row => row.startsWith(`${key}=`))\n .split('=')[1];\n return cookieValue;\n }\n\n public deleteCookie(key: string, path?: string, domain?: string): void {\n const pathValue = path ? `; path=${path}` : '';\n const domainValue = domain ? `; domain=${domain}` : '';\n this.document.cookie = `${key}=${pathValue}${domainValue}; expires=Thu, 01 Jan 1970 00:00:01 GMT; max-age=0`;\n }\n\n public deleteCookieByPartialMatch(key: string, path?: string, domain?: string): void {\n this.document.cookie\n .split('; ')\n .filter(row => row.startsWith(`${key}`))\n .forEach(element => {\n this.deleteCookie(element.split('=')[0], path, domain);\n });\n }\n\n public checkCookie(key: string): boolean {\n return this.document.cookie.split('; ').some(item => item.trim().startsWith(`${key}=`));\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const windowToken = new InjectionToken('Window');\nexport function windowProvider() { return window; }\n","import { Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\nimport { CookieService } from '../../services/cookie/cookie.service';\nimport { windowToken } from '../../window';\n\n@Component({\n selector: 'xuilib-cookie-banner',\n templateUrl: './cookie-banner.component.html'\n})\n\nexport class CookieBannerComponent implements OnInit {\n @Input() public identifier: string;\n @Input() public appName: string;\n @Output() public rejectionNotifier = new EventEmitter<any>();\n @Output() public acceptanceNotifier = new EventEmitter<any>();\n\n public isCookieBannerVisible: boolean = false;\n private readonly window: Window;\n\n constructor(\n private readonly cookieService: CookieService,\n @Inject(windowToken) window: any,\n ) {\n this.window = window as Window;\n }\n\n public ngOnInit(): void {\n this.setState();\n }\n\n public acceptCookie(): void {\n this.cookieService.setCookie(this.identifier, 'true', this.getExpiryDate());\n this.setState(true);\n }\n\n public rejectCookie(): void {\n this.cookieService.setCookie(this.identifier, 'false', this.getExpiryDate());\n this.setState(true);\n }\n\n public setState(reload: boolean = false): void {\n this.isCookieBannerVisible = !this.cookieService.checkCookie(this.identifier);\n\n if (this.areCookiesAccepted()) {\n this.notifyAcceptance();\n } else {\n this.notifyRejection();\n }\n\n if (reload) { // reload if any of the buttons are pressed\n this.window.location.reload();\n }\n }\n\n public areCookiesAccepted(): boolean {\n return this.cookieService.checkCookie(this.identifier) && this.cookieService.getCookie(this.identifier) === 'true';\n }\n\n public notifyRejection(): void {\n this.rejectionNotifier.emit();\n }\n\n public notifyAcceptance(): void {\n this.acceptanceNotifier.emit();\n }\n\n private getExpiryDate(): string {\n const now = new Date();\n const time = now.getTime();\n const expireTime = time + 31536000000; // in 365 days = 3600 * 1000 * 24 * 365\n now.setTime(expireTime);\n return now.toUTCString();\n }\n\n}\n","export enum BadgeColour {\n BADGE_RED = 'hmcts-badge--red',\n BADGE_BLUE = 'hmcts-badge--blue',\n BADGE_GREEN = 'hmcts-badge--green',\n}\n\nexport interface ContactDetailsDataModel {\n title?: string;\n badgeColour?: BadgeColour;\n badgeText?: string;\n email?: string;\n phone?: string;\n openingTimes?: string;\n}\n","export class AnonymousFeatureUser {\n public anonymous: true;\n}\n\nexport class LoggedInFeatureUser {\n public key: string;\n public custom: {\n [key: string]: any,\n roles: string[],\n orgId: string\n };\n}\n\nexport type FeatureUser = AnonymousFeatureUser | LoggedInFeatureUser;\n","export interface LocationModel {\n court_venue_id: string;\n site_name: string;\n court_name?: string;\n epimms_id: string;\n open_for_public?: string;\n court_type_id: string;\n court_type: string;\n region_id: string;\n region: string;\n cluster_id?: string;\n cluster_name?: string;\n court_status?: string;\n court_open_date?: string;\n closed_date?: string;\n postcode: string;\n court_address: string;\n phone_number?: string;\n court_location_code?: string;\n dx_address?: string;\n welsh_site_name?: string;\n welsh_court_address?: string;\n venue_name?: string;\n is_case_management_location: string;\n is_hearing_location: string;\n }\n\nexport interface LocationByEPIMMSModel {\n epimms_id: string;\n site_name: string;\n court_name?: string;\n open_for_public?: string;\n region_id: string;\n region: string;\n cluster_id?: string;\n cluster_name?: string;\n court_status?: string;\n court_open_date?: string;\n closed_date?: string;\n postcode: string;\n court_address: string;\n phone_number?: string;\n court_location_code?: string;\n dx_address?: string;\n welsh_site_name?: string;\n welsh_court_address?: string;\n venue_name?: string;\n is_case_management_location: string;\n is_hearing_location: string;\n}\n\nexport interface LocationsByService {\n service?: string;\n serviceCode?: string;\n bookable?: boolean;\n locations: Location[];\n}\n\nexport enum BookingCheckType {\n NO_CHECK = 'NO_CHECK',\n BOOKINGS_AND_BASE = 'BOOKINGS_AND_BASE',\n POSSIBLE_BOOKINGS = 'POSSIBLE_BOOKINGS',\n}\n","export interface Person {\n id: string;\n name: string;\n email?: string;\n domain: string;\n knownAs?: string;\n fullName?: string;\n}\n\nexport interface JudicialUserModel {\n emailId: string;\n fullName: string;\n idamId: string;\n isJudge: string;\n isMagistrate: string;\n isPanelMember: string;\n knownAs: string;\n personalCode: string;\n surname: string;\n title: string;\n}\n\nexport interface CaseworkersByService {\n service: string;\n caseworkers: Caseworker[];\n}\n\nexport interface Caseworker {\n idamId: string;\n firstName: string;\n lastName: string;\n email: string;\n knownAs?: string;\n roleCategory: string;\n}\n\nexport enum PersonRole {\n JUDICIAL = 'Judicial',\n CASEWORKER = 'Legal Ops',\n ADMIN = 'Admin',\n CTSC = 'CTSC User',\n ALL = 'All',\n}\n\n// Note: RoleCategory could replace PersonRole possibly\n// However a lot of webapp logic is based on current PersonRole understanding\nexport enum RoleCategory {\n JUDICIAL = 'JUDICIAL',\n CASEWORKER = 'LEGAL_OPERATIONS',\n ADMIN = 'ADMIN',\n CTSC = 'CTSC',\n ALL = 'ALL'\n}\n","import { BookingCheckType } from './location.model';\nimport { PersonRole } from './person.model';\n\nexport type FilterFieldType = 'checkbox' | 'radio' | 'select' | 'find-person' | 'find-location' | 'checkbox-large' | 'find-service';\n\nexport type FilterPersistence = 'local' | 'session' | 'memory';\n\nexport interface FilterConfig {\n id: string;\n fields: FilterFieldConfig[];\n persistence: FilterPersistence;\n applyButtonText: string;\n cancelButtonText: string;\n cancelSetting?: FilterSetting;\n enableDisabledButton?: boolean;\n showCancelFilterButton?: boolean;\n}\n\nexport interface FilterFieldConfig {\n name: string;\n options: { key: string, label: string, selectAll?: true }[];\n minSelected: number;\n maxSelected: number;\n minSelectedError?: string;\n maxSelectedError?: string;\n displayMaxSelectedError?: boolean;\n displayMinSelectedError?: boolean;\n lineBreakBefore?: boolean;\n showCondition?: string;\n enableCondition?: string;\n enableAddButton?: boolean;\n enableAddLocationButton?: boolean;\n changeResetFields?: string[];\n findPersonField?: string;\n findLocationField?: string;\n domainField?: string;\n disable?: boolean;\n disabledText?: string;\n type: FilterFieldType;\n domain?: PersonRole;\n title?: string;\n subTitle?: string;\n locationTitle?: string;\n radioSelectionChange?: string;\n bookingCheckType?: BookingCheckType;\n}\n\nexport interface FilterSetting {\n id: string;\n reset?: boolean;\n fields: { name: string, value: any[] }[];\n}\n\nexport class RadioFilterFieldConfig implements FilterFieldConfig {\n public name: string;\n public options: { key: string, label: string}[];\n public minSelected: 1;\n public maxSelected: 1;\n public type: 'radio';\n}\n\nexport interface FilterError {\n name: string;\n error: string;\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {LocationByEPIMMSModel, LocationsByService} from '../../models/location.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationService {\n\n constructor(private readonly http: HttpClient) {\n }\n\n /**\n * @description getAllLocations from service Ids/location type/search term\n * @param serviceIds: SSCS | SSCS,IA split with ','\n * @param locationType: optional | hearing | case_management\n * @param searchTerm: any search term for postcode | site name | venue name |court name | court address etc.\n * @return Observable<LocationByEPIMMSModel[]>: Array of locationModel in Observable\n */\n public getAllLocations(serviceIds: string, locationType: string, searchTerm: string, userLocations: LocationsByService[], bookingLocations: string[]): Observable<LocationByEPIMMSModel[]> {\n return this.http.post<LocationByEPIMMSModel[]>(`api/locations/getLocations`, {serviceIds, locationType, searchTerm, userLocations, bookingLocations});\n }\n\n /**\n * @description searchLocations from service Ids/location type/search term\n * @param serviceIds: BBA3 | BBA3,BFA1 split with ','\n * @param locationType: optional | hearing | case_management\n * @param searchTerm: any search term for postcode | site name | venue name |court name | court address etc.\n * @return Observable<LocationByEPIMMSModel[]>: Array of locationModel in Observable\n */\n public searchLocations(serviceIds: string, locationType: string, searchTerm: string): Observable<LocationByEPIMMSModel[]> {\n return this.http.get<LocationByEPIMMSModel[]>(`api/prd/location/getLocations?serviceIds=${serviceIds}&locationType=${locationType}&searchTerm=${searchTerm}`);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SessionStorageService {\n\n /**\n * Get an item from the session storage.\n * If remove is true, the item will be removed once read\n * @param removeAfterRead removed the key once it has been read\n */\n public getItem(key: string, removeAfterRead: boolean = false): string {\n const item = sessionStorage.getItem(key);\n\n if (removeAfterRead) { this.removeItem(key); }\n\n return item;\n }\n\n /**\n * Set an item in the session storage.\n */\n public setItem(key: string, value: string): void {\n sessionStorage.setItem(key, value);\n }\n\n /**\n * Remove an item in the session storage.\n */\n public removeItem(key: string): void {\n sessionStorage.removeItem(key);\n }\n\n /**\n * Clear all the items held in session storage.\n */\n public clear(): void {\n sessionStorage.clear();\n }\n}\n","import {ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {debounceTime, filter, map, mergeMap, tap} from 'rxjs/operators';\n\nimport {BookingCheckType, LocationByEPIMMSModel} from '../../models';\nimport {LocationService} from '../../services/locations/location.service';\nimport { SessionStorageService } from '../../services/session-storage/session-storage.service';\n\n@Component({\n selector: 'exui-search-location',\n templateUrl: './search-location.component.html',\n styleUrls: ['./search-location.component.scss']\n})\nexport class SearchLocationComponent implements OnInit {\n @Input() public control: AbstractControl;\n @Input() public disabled: boolean = null;\n @Input() public singleMode: boolean = false;\n @Input() public locationType: string = '';\n @Input() public serviceIds: string = '';\n @Input() public submitted?: boolean = true;\n @Input() public delay?: number = 500;\n @Input() public form: FormGroup;\n @Input() public showAutocomplete: boolean = false;\n @Input() public locations: LocationByEPIMMSModel[] = [];\n @Input() public bookingCheck: BookingCheckType;\n @Output() public locationSelected = new EventEmitter<LocationByEPIMMSModel>();\n @Output() public locationInputChanged: EventEmitter<string> = new EventEmitter<string>();\n @Output() public searchLocationChanged: EventEmitter<void> = new EventEmitter<void>();\n public readonly minSearchCharacters = 3;\n public term: string = '';\n private pSelectedLocations: any[] = [];\n private pReset: boolean = true;\n\n constructor(private readonly locationService: LocationService, private readonly sessionStorageService: SessionStorageService, private readonly fb: FormBuilder, private readonly cd: ChangeDetectorRef) {\n this.form = this.fb.group({\n searchTerm: ['']\n });\n }\n\n public get reset(): boolean {\n return this.pReset;\n }\n\n @Input()\n public set reset(value: boolean) {\n this.pReset = value;\n this.resetSearchTerm();\n }\n\n public get selectedLocations(): any[] {\n return this.pSelectedLocations;\n }\n\n @Input()\n public set selectedLocations(value: any[]) {\n this.pSelectedLocations = value;\n\n }\n\n public ngOnInit(): void {\n if (this.singleMode && this.selectedLocations.length > 0) {\n const location = this.selectedLocations[0];\n this.form.controls.searchTerm.patchValue(location.site_name, {emitEvent: false, onlySelf: true});\n }\n this.search();\n }\n\n public filter(term: string): void {\n this.getLocations(term).pipe(\n map((locations) => this.removeSelectedLocations(locations)\n )\n );\n }\n\n public onSelectionChange(location: LocationByEPIMMSModel): void {\n this.form.controls.searchTerm.patchValue(location.site_name, {emitEvent: false, onlySelf: true});\n this.locationSelected.emit(location);\n }\n\n public search(): void {\n this.form.controls.searchTerm.valueChanges\n .pipe(\n tap((term) => this.locationInputChanged.next(term)),\n tap(() => this.locations = []),\n tap((term) => this.term = term),\n filter(term => !!term && term.length >= this.minSearchCharacters),\n debounceTime(this.delay),\n mergeMap(value => this.getLocations(value)),\n map((locations) => this.removeSelectedLocations(locations))\n ).subscribe(locations => {\n this.locations = locations;\n this.cd.markForCheck();\n if (locations.length === 1 && this.term === locations[0].site_name && !this.singleMode) {\n this.locationSelected.emit(locations[0]);\n this.showAutocomplete = false;\n return;\n }\n this.showAutocomplete = true;\n });\n }\n\n public onInput(): void {\n this.searchLocationChanged.emit();\n }\n\n public getLocations(term: string): Observable<LocationByEPIMMSModel[]> {\n let userLocations;\n let bookingLocations;\n // Booking type info - can create more\n // NO_CHECK - All work - Do not filter out locations - Default assumption\n // ONLY_BOOKINGS - My work - Try to only show base locations/booking locations\n // POSSIBLE_BOOKINGS - Create booking screen - Show only potential bookings\n if (this.bookingCheck === BookingCheckType.BOOKINGS_AND_BASE) {\n userLocations = JSON.parse(this.sessionStorageService.getItem('userLocations'));\n bookingLocations = JSON.parse(this.sessionStorageService.getItem('bookingLocations'));\n } else if (this.bookingCheck === BookingCheckType.POSSIBLE_BOOKINGS) {\n userLocations = JSON.parse(this.sessionStorageService.getItem('userLocations'));\n this.serviceIds = JSON.parse(this.sessionStorageService.getItem('bookableServices'));\n }\n return this.locationService.getAllLocations(this.serviceIds, this.locationType, term, userLocations, bookingLocations);\n }\n\n public resetSearchTerm(): void {\n this.form.controls.searchTerm.patchValue('', {emitEvent: false, onlySelf: true});\n }\n\n private removeSelectedLocations(locations: LocationByEPIMMSModel[]): LocationByEPIMMSModel[] {\n if (this.singleMode) {\n return locations;\n }\n return locations.filter(\n location => !this.selectedLocations.map(selectedLocation => selectedLocation.epimms_id).includes(location.epimms_id) && location.site_name\n );\n }\n}\n","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {FormArray, FormControl, FormGroup} from '@angular/forms';\nimport {FilterFieldConfig} from '../../models';\nimport {LocationByEPIMMSModel} from '../../models/location.model';\nimport {getValues} from '../generic-filter/generic-filter-utils';\nimport {SearchLocationComponent} from '../search-location/search-location.component';\n\n@Component({\n selector: 'xuilib-find-location',\n templateUrl: './find-location.component.html',\n styleUrls: ['./find-location.component.scss']\n})\nexport class FindLocationComponent implements OnInit {\n @Output() public locationFieldChanged = new EventEmitter<void>();\n @Input() public selectedLocations: LocationByEPIMMSModel[] = [];\n @Input() public submitted: boolean = true;\n @Input() public enableAddLocationButton: boolean = true;\n @Input() public form: FormGroup;\n @Input() public field: FilterFieldConfig;\n @Input() public fields: FilterFieldConfig[];\n @Input() public locationTitle = 'Search for a location by name';\n @Input() public disableInputField = false;\n public locations: LocationByEPIMMSModel[] = [];\n public tempSelectedLocation: LocationByEPIMMSModel = null;\n public serviceIds: string = 'SSCS,IA';\n @ViewChild(SearchLocationComponent, { static: true }) public searchLocationComponent: SearchLocationComponent;\n private pServices: string[] = [];\n private pDisabled: boolean = false;\n\n public get disabled(): boolean {\n return this.pDisabled;\n }\n\n @Input()\n public set disabled(value: boolean) {\n if (value) {\n this.searchLocationComponent.resetSearchTerm();\n this.removeSelectedValues();\n }\n this.pDisabled = this.disableInputField === true ? true : null;\n }\n\n public get services(): string[] {\n return this.pServices;\n }\n\n @Input()\n public set services(value: string[]) {\n this.pServices = value;\n const field = this.fields.find(f => f.name === this.field.findLocationField);\n if (field) {\n if (typeof value === 'string') {\n this.serviceIds = value;\n } else {\n this.serviceIds = getValues(field.options, value).filter(x => x !== 'services_all').join(',');\n }\n }\n }\n\n public ngOnInit(): void {\n // implemented to get rid of undefined values\n this.selectedLocations = this.selectedLocations.filter(location => location.epimms_id);\n }\n\n public addLocation(): void {\n if (this.tempSelectedLocation) {\n this.selectedLocations = [...this.selectedLocations, this.tempSelectedLocation];\n this.addSelectedLocationsToForm([this.tempSelectedLocation]);\n this.tempSelectedLocation = null;\n this.locations = [];\n this.searchLocationComponent.resetSearchTerm();\n }\n }\n\n public removeLocation(location: LocationByEPIMMSModel): void {\n if (location.epimms_id) {\n this.selectedLocations = this.selectedLocations.filter(selectedLocation => selectedLocation.epimms_id !== location.epimms_id);\n const formArray = this.form.get(this.field.name) as FormArray;\n const index = (formArray.value as LocationByEPIMMSModel[]).findIndex(selectedLocation => selectedLocation.epimms_id === location.epimms_id);\n if (index > -1) {\n formArray.removeAt(index);\n }\n }\n }\n\n public onInputChanged(term: string): void {\n // if the filter is in single mode clear the selected locations\n if (typeof term === 'string' && this.field.maxSelected === 1) {\n this.removeSelectedValues();\n }\n }\n\n public onSearchInputChanged(): void {\n this.locationFieldChanged.emit();\n }\n\n public onLocationSelected(location: LocationByEPIMMSModel): void {\n if (this.field.maxSelected === 1) {\n this.removeSelectedValues();\n this.addSelectedLocationsToForm([location]);\n } else {\n if (!this.selectedLocations.find(x => x.epimms_id === location.epimms_id)) {\n if (location.epimms_id) {\n this.tempSelectedLocation = location;\n }\n }\n }\n }\n\n private removeSelectedValues(): void {\n const formArray = this.form.get(this.field.name) as FormArray;\n for (let i = 0; i < formArray.length; i++) {\n formArray.removeAt(i);\n }\n this.selectedLocations = [];\n }\n\n private addSelectedLocationsToForm(locations: LocationByEPIMMSModel[]): void {\n const formArray = this.form.get(this.field.name) as FormArray;\n for (const location of locations) {\n formArray.push(new FormControl(location));\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'xuilib-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss']\n})\nexport class PaginationComponent {\n\n @Input() public moreItems: boolean;\n @Input() public firstRecord: number;\n @Output() public previousPage: EventEmitter<any> = new EventEmitter();\n @Output() public nextPage: EventEmitter<any> = new EventEmitter();\n\n constructor() { }\n\n public onPrevious(): void {\n this.previousPage.emit(null);\n }\n\n public onNext(): void {\n this.nextPage.emit(null);\n }\n}\n","import {AfterContentInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {AbstractControl, FormArray, FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {Observable, Subject} from 'rxjs';\nimport {debounceTime, mergeMap} from 'rxjs/operators';\nimport {LocationByEPIMMSModel} from '../../models/location.model';\nimport {LocationService} from '../../services/locations/location.service';\n\n@Component({\n selector: 'xuilib-search-venue',\n templateUrl: './search-venue.component.html',\n styleUrls: ['./search-venue.component.scss']\n})\nexport class SearchVenueComponent implements OnInit, AfterContentInit {\n @Input() public control: AbstractControl;\n @Input() public disabled: boolean = null;\n @Input() public locationType: string = '';\n @Input() public selectedLocations: LocationByEPIMMSModel[];\n @Input() public serviceIds: string = '';\n @Input() public submitted?: boolean = true;\n @ViewChild('inputSelectedLocation', { read: ElementRef }) public autoCompleteInputBox: ElementRef<HTMLInputElement>;\n public findLocationFormGroup: FormGroup;\n @Input() public showAutocomplete: boolean = false;\n @Input() public displayedLocations: LocationByEPIMMSModel[];\n @Output() public locationChanged = new EventEmitter<LocationByEPIMMSModel>();\n public selectedLocation: LocationByEPIMMSModel;\n private readonly minSearchCharacters = 3;\n public keyUpSubject$: Subject<string> = new Subject();\n public readyAfterContent: boolean = false;\n public searchInProgress: boolean = false;\n\n constructor(private readonly locationService: LocationService, fb: FormBuilder) {\n this.findLocationFormGroup = fb.group({\n findLocationFormControl: [null],\n locationSelectedFormControl: [null]\n });\n this.selectedLocations = [];\n }\n\n public ngAfterContentInit(): void {\n this.readyAfterContent = true;\n }\n\n public ngOnInit(): void {\n this.displayedLocations = [];\n if (this.control) {\n if (this.findLocationFormGroup && this.findLocationFormGroup.controls) {\n this.findLocationFormGroup.controls.locationSelectedFormControl = this.control;\n }\n }\n this.keyUpSubject$.pipe(debounceTime(500)).subscribe(searchValue => this.search(searchValue as string));\n }\n\n public onKeyDown(): void {\n this.locationChanged.emit();\n }\n\n public onKeyUp(event: any): void {\n this.showAutocomplete = false;\n this.keyUpSubject$.next(event.target.value);\n }\n\n public onFocus() {\n this.showAutocomplete = false;\n }\n\n public get displayedLocationsDuplicationFiltered(): LocationByEPIMMSModel[] {\n return this.displayedLocations.filter(\n location => !this.selectedLocations.map(selectedLocation => selectedLocation.epimms_id).includes(location.epimms_id) && location.court_name\n );\n }\n\n public filter(term: string): void {\n this.searchLocations(term).pipe(\n mergeMap((apiData: LocationByEPIMMSModel[]) => {\n const apiFilter = apiData.filter(\n apiLocation => !this.selectedLocations.map(selectedLocation => selectedLocation.epimms_id).includes(apiLocation.epimms_id)\n );\n this.displayedLocations = apiFilter;\n this.searchInProgress = false;\n return apiFilter;\n })\n ).subscribe(location => {\n if (term === location.court_name) {\n this.findLocationFormGroup.controls.locationSelectedFormControl.setValue(location);\n this.displayedLocations = [];\n this.locationChanged.emit(location);\n this.showAutocomplete = false;\n }\n this.searchInProgress = false;\n });\n }\n\n public onSelectionChange(selection?: LocationByEPIMMSModel): void {\n if (this.findLocationFormGroup.controls.findLocationFormControl instanceof FormArray) {\n (this.findLocationFormGroup.controls.locationSelectedFormControl as FormArray).push(new FormControl(selection.epimms_id));\n } else {\n this.findLocationFormGroup.controls.locationSelectedFormControl.setValue(selection);\n }\n this.locationChanged.emit(selection);\n }\n\n public search(currentValue: string): void {\n this.searchInProgress = true;\n this.showAutocomplete = !!currentValue && (currentValue.length >= this.minSearchCharacters);\n if (!currentValue || !currentValue.length) {\n this.findLocationFormGroup.controls.locationSelectedFormControl.markAsPristine();\n this.findLocationFormGroup.controls.locationSelectedFormControl.reset();\n }\n if (this.showAutocomplete) {\n this.filter(currentValue);\n } else {\n this.searchInProgress = false;\n }\n }\n\n public getDisplayName(selectedLocation: LocationByEPIMMSModel): string {\n return selectedLocation.court_name;\n }\n\n public searchLocations(term: string): Observable<LocationByEPIMMSModel[]> {\n return this.locationService.searchLocations(this.serviceIds, this.locationType, term);\n }\n\n public getControlCourtNameValue(): string {\n return this.findLocationFormGroup && this.findLocationFormGroup.controls && this.findLocationFormGroup.controls.locationSelectedFormControl.value ?\n (this.findLocationFormGroup.controls.locationSelectedFormControl.value as LocationByEPIMMSModel).court_name : '';\n }\n}\n","import { Caseworker, CaseworkersByService } from '../../../models';\nimport { ISessionStorageService } from '../../models/isession-storage.interface';\n\nexport const getAllCaseworkersFromServices = (caseworkersByService: CaseworkersByService[]): Caseworker[] => {\n let allCaseworkers: Caseworker[] = [];\n caseworkersByService.forEach(caseworkerListByService => {\n allCaseworkers = allCaseworkers.concat(caseworkerListByService.caseworkers);\n });\n return allCaseworkers;\n};\n\nexport const getSessionStorageKeyForServiceId = (serviceId: string): string => {\n return `${serviceId}-caseworkers`;\n};\n\nexport const getCaseworkers = (serviceId: string, sessionStorageService: ISessionStorageService): Caseworker[] => {\n const sessionKey = getSessionStorageKeyForServiceId(serviceId);\n const value = sessionStorageService.getItem(sessionKey);\n if (value) {\n return JSON.parse(value) as Caseworker[];\n }\n};\n\nexport const setCaseworkers = (serviceId: string, caseworkers: Caseworker[], sessionStorageService: ISessionStorageService): void => {\n const sessionKey = getSessionStorageKeyForServiceId(serviceId);\n sessionStorageService.setItem(sessionKey, JSON.stringify(caseworkers));\n};\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {Observable, of} from 'rxjs';\nimport {map, tap} from 'rxjs/operators';\nimport {\n getAllCaseworkersFromServices,\n getSessionStorageKeyForServiceId,\n setCaseworkers\n} from '../../gov-ui/util/session-storage/session-storage-utils';\nimport {\n Caseworker,\n CaseworkersByService,\n JudicialUserModel,\n Person,\n PersonRole,\n RoleCategory,\n SearchOptions\n} from '../../models';\nimport {SessionStorageService} from '../session-storage/session-storage.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FindAPersonService {\n\n public static caseworkersKey: string = 'caseworkers';\n public userId: string;\n public assignedUser: string;\n\n constructor(private readonly http: HttpClient, private readonly sessionStorageService: SessionStorageService) {\n }\n\n public find(searchOptions: SearchOptions): Observable<Person[]> {\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n if (userInfoStr && !searchOptions.userIncluded) {\n const userInfo = JSON.parse(userInfoStr);\n this.userId = userInfo.id ? userInfo.id : userInfo.uid;\n }\n this.assignedUser = searchOptions.assignedUser ? searchOptions.assignedUser : null;\n return this.http.post<Person[]>('/workallocation/findPerson', { searchOptions })\n .pipe(map(judiciary => judiciary.filter(judge => !([this.assignedUser, this.userId].includes(judge.id)))));\n }\n\n public findCaseworkers(searchOptions: SearchOptions): Observable<Person[]> {\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n if (userInfoStr) {\n const userInfo = JSON.parse(userInfoStr);\n this.userId = userInfo.id ? userInfo.id : userInfo.uid;\n }\n this.assignedUser = searchOptions.assignedUser ? searchOptions.assignedUser : null;\n const fullServices = searchOptions.services;\n const storedServices = [];\n const newServices: string[] = [];\n const storedCaseworkersByService: CaseworkersByService[] = [];\n fullServices.forEach(serviceId => {\n const serviceKey = getSessionStorageKeyForServiceId(serviceId);\n if (this.sessionStorageService.getItem(serviceKey)) {\n storedServices.push(serviceId);\n storedCaseworkersByService.push({ service: serviceId, caseworkers: JSON.parse(this.sessionStorageService.getItem(serviceKey)) });\n } else {\n newServices.push(serviceId);\n }\n });\n // if all services are stored then return the stored caseworkers by service\n if (storedServices.length === fullServices.length) {\n const storedCaseworkers = getAllCaseworkersFromServices(storedCaseworkersByService);\n return of(this.searchInCaseworkers(storedCaseworkers, searchOptions));\n }\n // all serviceIds passed in as node layer getting used anyway and caseworkers also stored there\n return this.http.post<CaseworkersByService[]>('/workallocation/retrieveCaseWorkersForServices', { fullServices }).pipe(\n tap(caseworkersByService => {\n caseworkersByService.forEach(caseworkerListByService => {\n // for any new service, ensure that they are then stored in the session\n if (newServices.includes(caseworkerListByService.service)) {\n setCaseworkers(caseworkerListByService.service, caseworkerListByService.caseworkers, this.sessionStorageService);\n }\n });\n }),\n map(caseworkersByService => {\n const givenCaseworkers = getAllCaseworkersFromServices(caseworkersByService);\n return this.searchInCaseworkers(givenCaseworkers, searchOptions);\n })\n );\n }\n\n public mapCaseworkers(caseworkers: Caseworker[], roleCategory: string): Person[] {\n const people: Person[] = [];\n caseworkers.forEach((caseworker) => {\n const thisPerson: Person = {\n email: caseworker.email,\n name: `${caseworker.firstName} ${caseworker.lastName}`,\n id: caseworker.idamId,\n domain: caseworker.roleCategory === RoleCategory.CASEWORKER ? PersonRole.CASEWORKER : PersonRole.ADMIN,\n // knownAs can be added if required\n };\n if (caseworker.roleCategory === roleCategory || roleCategory === RoleCategory.ALL) {\n people.push(thisPerson);\n }\n });\n return people;\n }\n\n public searchInCaseworkers(caseworkers: Caseworker[], searchOptions: SearchOptions): Person[] {\n let roleCategory = RoleCategory.ALL;\n if (!(searchOptions.userRole === PersonRole.ALL)) {\n roleCategory = searchOptions.userRole === PersonRole.CASEWORKER ? RoleCategory.CASEWORKER : RoleCategory.ADMIN;\n }\n const searchTerm = searchOptions && searchOptions.searchTerm ? searchOptions.searchTerm.toLowerCase() : '';\n const people = caseworkers ? this.mapCaseworkers(caseworkers, roleCategory) : [];\n const finalPeopleList = people.filter(person => person && person.name && person.name.toLowerCase().includes(searchTerm));\n return searchOptions.userIncluded ? finalPeopleList.filter(person => person && person.id !== this.assignedUser)\n : finalPeopleList.filter(person => person && person.id !== this.userId && person.id !== this.assignedUser);\n }\n\n public searchJudicial(value: string, serviceId: string): Observable<JudicialUserModel[]> {\n return this.http.post<JudicialUserModel[]>('api/prd/judicial/getJudicialUsersSearch',\n { searchString: value, serviceCode: serviceId });\n }\n}\n\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\nimport { debounceTime, mergeMap } from 'rxjs/operators';\nimport { JudicialUserModel } from '../../models';\nimport { FindAPersonService } from '../../services/find-person/find-person.service';\n\n@Component({\n selector: 'xuilib-search-judicials',\n templateUrl: './search-judicials.component.html',\n styleUrls: ['./search-judicials.component.scss']\n})\nexport class SearchJudicialsComponent implements OnInit {\n public formGroup: FormGroup;\n @Input() public control: AbstractControl;\n @Input() public disabled: boolean = null;\n @Input() public selectedJudicials: JudicialUserModel[] = [];\n @Input() public submitted?: boolean = true;\n @Input() public placeholderContent: string = '';\n @Input() public showAutocomplete: boolean = false;\n @Input() public displayedJudicials: JudicialUserModel[];\n @Output() public judicialChanged = new EventEmitter<JudicialUserModel>();\n @Input() public idValue: string = '';\n @Input() public errorMessage: string = 'You must select a name';\n @Input() public serviceId: string = '';\n @ViewChild('inputSelection', { read: ElementRef, static: true }) public autoCompleteInputBox: ElementRef<HTMLInputElement>;\n public selectedJudicial: JudicialUserModel;\n private readonly minSearchCharacters = 3;\n public keyUpSubject$: Subject<string> = new Subject();\n public searchInProgress: boolean = false;\n\n constructor(private readonly judicialService: FindAPersonService, fb: FormBuilder) {\n this.formGroup = fb.group({\n formControl: [null],\n selectedFormControl: [null]\n });\n }\n\n public ngOnInit(): void {\n this.displayedJudicials = [];\n if (this.control) {\n if (this.formGroup && this.formGroup.controls) {\n this.formGroup.controls.selectedFormControl = this.control;\n this.formGroup.controls.formControl.setValue(this.getControlValueDisplayText());\n }\n }\n this.keyUpSubject$.pipe(debounceTime(500)).subscribe(searchValue => this.search(searchValue as string));\n }\n\n public onKeyDown(): void {\n this.judicialChanged.emit();\n }\n\n public onKeyUp(event: any): void {\n this.showAutocomplete = false;\n this.keyUpSubject$.next(event.target.value);\n }\n\n public onFocus() {\n this.showAutocomplete = false;\n }\n\n public get displayedJudicialsDuplicationFiltered(): JudicialUserModel[] {\n return this.displayedJudicials.filter(\n judicial => !this.selectedJudicials.map(selectedJudicial => selectedJudicial.idamId).includes(judicial.idamId)\n );\n }\n\n public filter(term: string): void {\n this.searchJudicials(term, this.serviceId).pipe(\n mergeMap((apiData: JudicialUserModel[]) => {\n const apiFilter = apiData.filter(\n apiJudicial => !this.selectedJudicials.map(selectedJudicial => selectedJudicial.idamId).includes(apiJudicial.idamId)\n );\n this.displayedJudicials = apiFilter;\n this.searchInProgress = false;\n return apiFilter;\n })\n ).subscribe(judicial => {\n if (term === judicial.fullName) {\n this.formGroup.controls.selectedFormControl.setValue(judicial);\n this.displayedJudicials = [];\n this.judicialChanged.emit(judicial);\n this.showAutocomplete = false;\n }\n this.searchInProgress = false;\n });\n }\n\n public onSelectionChange(selection?: JudicialUserModel): void {\n if (this.formGroup.controls.formControl instanceof FormArray) {\n (this.formGroup.controls.selectedFormControl as FormArray).push(new FormControl(selection.idamId));\n } else {\n this.formGroup.controls.selectedFormControl.setValue(selection);\n }\n this.judicialChanged.emit(selection);\n }\n\n public search(currentValue: string): void {\n this.searchInProgress = true;\n this.showAutocomplete = !!currentValue && (currentValue.length >= this.minSearchCharacters);\n if (!!currentValue) {\n this.formGroup.controls.selectedFormControl.markAsDirty();\n } else {\n this.formGroup.controls.selectedFormControl.reset();\n }\n if (this.showAutocomplete) {\n this.filter(currentValue);\n } else {\n this.searchInProgress = false;\n }\n }\n\n public getDisplayName(selectedJudicial: JudicialUserModel): string {\n return `${selectedJudicial.fullName} (${selectedJudicial.emailId})`;\n }\n\n public searchJudicials(term: string, serviceId: string): Observable<JudicialUserModel[]> {\n return this.judicialService.searchJudicial(term, serviceId);\n }\n\n public getControlValueDisplayText(): string {\n return this.formGroup && this.formGroup.controls && this.formGroup.controls.selectedFormControl.value ?\n this.getDisplayName(this.formGroup.controls.selectedFormControl.value as JudicialUserModel) : '';\n }\n}\n","import {ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {Observable, of, Subscription, zip} from 'rxjs';\nimport {catchError, debounceTime, filter, map, switchMap, tap} from 'rxjs/operators';\nimport {Person, PersonRole} from '../../models';\nimport {FindAPersonService} from '../../services/find-person/find-person.service';\n\n@Component({\n selector: 'xuilib-find-person',\n templateUrl: './find-person.component.html',\n styleUrls: ['./find-person.component.scss'],\n})\n\nexport class FindPersonComponent implements OnInit, OnDestroy {\n @Output() public personSelected = new EventEmitter<Person>();\n @Output() public personFieldChanged = new EventEmitter<void>();\n @Input() public title: string;\n @Input() public boldTitle = 'Find the person';\n @Input() public subTitle = 'Type the name of the person and select them.';\n @Input() public domain = PersonRole.ALL;\n @Input() public findPersonGroup: FormGroup = new FormGroup({});\n @Input() public selectedPerson: string;\n @Input() public submitted: boolean = true;\n @Input() public userIncluded?: boolean = false;\n @Input() public assignedUser?: string;\n @Input() public placeholderContent: string = '';\n @Input() public isNoResultsShown: boolean = true;\n @Input() public showUpdatedColor: boolean = false;\n @Input() public selectedPersons: Person[] = [];\n @Input() public errorMessage: string = 'You must select a name';\n @Input() public idValue: string = '';\n @Input() public services: string[] = ['IA'];\n @Input() public disabled: boolean = null;\n public showAutocomplete: boolean = false;\n public findPersonControl: FormControl;\n public filteredOptions: Person[] = [];\n public readonly minSearchCharacters = 2;\n private sub: Subscription;\n\n constructor(private readonly findPersonService: FindAPersonService, private readonly cd: ChangeDetectorRef) {\n }\n\n public ngOnDestroy() {\n if (this.sub) {\n this.sub.unsubscribe();\n }\n }\n\n public ngOnInit(): void {\n this.findPersonControl = new FormControl(this.selectedPerson);\n this.findPersonGroup.addControl('findPersonControl', this.findPersonControl);\n this.sub = this.findPersonControl.valueChanges.pipe(\n tap(() => this.showAutocomplete = false),\n tap(() => this.filteredOptions = []),\n debounceTime(300),\n tap((searchTerm) => typeof searchTerm === 'string' ? this.personSelected.emit(null) : void 0),\n filter((searchTerm: string) => searchTerm && searchTerm.length > this.minSearchCharacters),\n switchMap((searchTerm: string) => this.filter(searchTerm).pipe(\n tap(() => this.showAutocomplete = true),\n catchError(() => this.filteredOptions = []),\n ))\n ).subscribe((people: Person[]) => {\n this.filteredOptions = people;\n this.cd.detectChanges();\n });\n }\n\n public filter(searchTerm: string): Observable<Person[]> {\n const findJudicialPeople = this.findPersonService.find({searchTerm, userRole: this.domain, services: this.services, userIncluded: this.userIncluded, assignedUser: this.assignedUser});\n const findCaseworkersOrAdmins = this.findPersonService.findCaseworkers({searchTerm, userRole: this.domain, services: this.services, userIncluded: this.userIncluded, assignedUser: this.assignedUser});\n if (searchTerm && searchTerm.length > this.minSearchCharacters) {\n switch (this.domain) {\n case PersonRole.JUDICIAL: {\n return findJudicialPeople.pipe(map(persons => {\n const ids: string[] = this.selectedPersons.map(({id}) => id);\n return persons.filter(({ id }) => !ids.includes(id));\n }));\n }\n case PersonRole.ALL: {\n return zip(findJudicialPeople, findCaseworkersOrAdmins).pipe(map(separatePeople => separatePeople[0].concat(separatePeople[1])));\n }\n case PersonRole.CASEWORKER:\n case PersonRole.ADMIN: {\n return findCaseworkersOrAdmins;\n }\n default: {\n return of([]);\n }\n }\n }\n return of([]);\n }\n\n public onSelectionChange(selectedPerson: Person): void {\n this.personSelected.emit(selectedPerson);\n this.findPersonControl.setValue(this.getDisplayName(selectedPerson), {emitEvent: false, onlySelf: true});\n }\n\n public getDisplayName(selectedPerson: Person): string {\n if (!selectedPerson) {\n return '';\n }\n if (selectedPerson.domain === PersonRole.JUDICIAL && selectedPerson.fullName) {\n return `${selectedPerson.fullName} (${selectedPerson.email})`;\n }\n return selectedPerson.email ? `${selectedPerson.name} (${selectedPerson.email})` : selectedPerson.name;\n }\n\n public onInput(): void {\n this.personFieldChanged.emit();\n }\n}\n","import {Component, Input} from '@angular/core';\n/**\n * Main Page Wrapper\n * Responsible for:\n * Wrapping content within the gov-uk html elements bellow\n * @prop showBackLink - switch for back link\n * @prop appHeaderTitle = appHeaderTitle\n * @prop appFunctionalTitle = appFunctionalTitle\n * @prop summaryErrors list of errors\n * @prop back link, appHeaderTitle (appHeaderTitle), summaryErrors (array of errors)\n */\n@Component({\n selector: 'exui-page-wrapper',\n templateUrl: 'exui-page-wrapper.component.html',\n styleUrls: ['exui-page-wrapper.component.scss']\n})\nexport class ExuiPageWrapperComponent {\n\n @Input() public backLink: string;\n @Input() public title: string;\n @Input() public fnTitle: string;\n\n constructor() { }\n\n}\n","import { Directive, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FeatureToggleService } from '../../services/feature-toggle/feature-toggle.service';\n\n@Directive({\n selector: '[xuilibFeatureToggle]'\n})\nexport class FeatureToggleDirective implements OnDestroy {\n private feature: string;\n private subscription: Subscription;\n\n @Input() public set xuilibFeatureToggle(feature: string) {\n this.feature = feature;\n this.updateSubscription();\n }\n\n constructor(\n private readonly service: FeatureToggleService,\n private readonly viewContainer: ViewContainerRef,\n private readonly templateRef: TemplateRef<any>\n ) {}\n\n public ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private updateSubscription() {\n this.subscription = this.service.isEnabled(this.feature).subscribe(enabled => {\n if (enabled) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n } else {\n this.viewContainer.clear();\n }\n });\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\nexport class LetContext<T = any> {\n public $implicit: T = null;\n public xuilibLet: T = null;\n}\n\n@Directive({\n selector: '[xuilibLet]'\n})\nexport class LetDirective<T = any> {\n private readonly context: LetContext<T> = new LetContext<T>();\n\n constructor(private readonly viewContainer: ViewContainerRef, templateRef: TemplateRef<LetContext<T>>) {\n this.viewContainer.createEmbeddedView(templateRef, this.context);\n }\n\n @Input() public set xuilibLet(condition: T) {\n this.context.$implicit = this.context.xuilibLet = condition;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FilterFieldConfig } from '../../models';\n\n@Component({\n selector: 'xuilib-find-service',\n templateUrl: './find-service.component.html',\n styleUrls: ['./find-service.component.scss']\n})\nexport class FindServiceComponent {\n @Input() public field: FilterFieldConfig;\n @Input() public fields: FilterFieldConfig[];\n @Input() public serviceTitle = 'Search for a service by name';\n @Input() public form: FormGroup;\n @Input() public services: any;\n @Input() public selectedServices: any;\n @Input() public disabled: any;\n @Input() public enableAddServiceButton: boolean = true;\n @Input() public disableInputField = false;\n\n public addService() {\n // Todo\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'exui-search-service',\n templateUrl: './search-service.component.html',\n styleUrls: ['./search-service.component.scss']\n})\nexport class SearchServiceComponent {\n @Input() public services: any;\n @Input() public selectedServices: any;\n @Input() public disabled: any;\n @Input() public delay: any;\n @Input() public form: FormGroup;\n @Input() public showAutocomplete: boolean = false;\n public readonly minSearchCharacters = 3;\n public term: string = '';\n\n public onInput(): void {\n // Todo\n }\n\n public onSelectionChange() {\n // Todo\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\n/*\n* Gov Uk Checkbox Dumb Component responsible for\n* displaying checkbox input and hint\n*\n* */\n@Component({\n selector: 'xuilib-gov-checkbox',\n templateUrl: './gov-uk-checkbox.component.html'\n})\n\nexport class GovUkCheckboxComponent implements OnInit {\n constructor() { }\n @Input() public group: FormGroup;\n @Input() public config: GovUiConfigModel;\n @Input() public isChecked: boolean = false;\n // {value: string, label: string, hint: string; name: string; focusOn: string; id: string; classes: string};\n\n public id: string;\n\n public ngOnInit(): void {\n const id = this.config.focusOn ? this.config.focusOn : this.config.value;\n this.config.id = id;\n this.config.classes = this.config.classes ?\n this.config.classes.concat(' govuk-checkboxes__label') : 'govuk-checkboxes__label';\n }\n}\n","import {Component, Input} from '@angular/core';\nimport { ErrorMessagesModel } from '../../models';\nimport {CheckboxesModel} from '../../models/checkboxes-model';\n/*\n* CheckBox component - state less\n* Responsible for displaying a list of gov-uk-checkboxes\n* @param: options - object with data for wrapper (fieldset) and\n* array of items for gov-uk-checkboxes\n* @param: errors - array of error stings\n* */\n@Component({\n selector: 'xuilib-gov-uk-checkboxes',\n templateUrl: './gov-uk-checkboxes.component.html'\n})\n\nexport class GovUkCheckboxesComponent {\n\n @Input() public options: CheckboxesModel;\n @Input() public errors: ErrorMessagesModel;\n\n}\n","import {\n Component,\n Input,\n OnInit\n} from '@angular/core';\nimport { ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { ErrorMessagesModel } from '../../models/error-messages-model';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\n/*\n * Gov UK Date Component\n * Responsible for displaying 3 input fields:\n * day / month / year\n * displaying errorMessage messages\n * */\n@Component({\n selector: 'xuilib-gov-uk-date',\n templateUrl: './gov-uk-date.component.html',\n styleUrls: ['./gov-uk-date.component.scss']\n})\nexport class GovUkDateComponent implements OnInit {\n constructor() {}\n @Input() public config: GovUiConfigModel;\n @Input() public errorMessage: ErrorMessagesModel;\n @Input() public formGroup: any;\n @Input() public isOptional: boolean = false;\n\n public month: any;\n public day: any;\n public year: any;\n\n public ngOnInit(): void {\n this.day = `${this.config.id}_day`;\n this.month = `${this.config.id}_month`;\n this.year = `${this.config.id}_year`;\n const dateValidator = this.DateValidator();\n this.formGroup.get(this.day).setValidators(dateValidator);\n }\n\n private isValidDate(d: Date, month: number, year: number): boolean {\n const dateCheck = !isNaN(d.getTime());\n // Month mismatch occurs if the provided day or month are invalid, or either is omitted. **Note:** This is insufficient for\n // checking date validity when the year is omitted because it defaults to 1900 - an extra check is required\n const monthMatch = d.getMonth() === month;\n const yearMatch = d.getFullYear() === year;\n return dateCheck && monthMatch && yearMatch;\n }\n\n private isEmpty(value: any) {\n // Note: Intentional use of == to check for null or undefined\n /* eslint-disable eqeqeq */\n /* tslint:disable:triple-equals */\n // NaN and < 0 checks required for month field\n return value == null || value === '' || isNaN(value) || value < 0;\n /* eslint-enable eqeqeq */\n /* tslint:enable:triple-equals */\n }\n\n public DateValidator(): ValidatorFn {\n return (): ValidationErrors | null => {\n const day = this.formGroup.get(this.day).value;\n const month = this.formGroup.get(this.month).value - 1;\n const year = this.formGroup.get(this.year).value;\n // Validation should pass if the date field is optional and day, month, and year are all empty\n if (this.isOptional && this.isEmpty(day) && this.isEmpty(month) && this.isEmpty(year)) {\n return null;\n }\n // + to coerce year to a number\n return !this.isValidDate(new Date(year, month, day), month, +year) ? { dateComponent: true } : null;\n };\n }\n}\n","import {Component, Input} from '@angular/core';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\n/*\n* Gov UK Error Message\n* Responsible for displaying in-line error messages\n* @prop config - obj with properties\n* @prop errorMessage - all error bject with messages property that is arry of strings.\n* */\n@Component({\n selector: ' xuilib-gov-uk-error-message',\n templateUrl: './gov-uk-error-message.component.html'\n})\nexport class GovUkErrorMessageComponent {\n constructor() { }\n @Input() public config: GovUiConfigModel;\n // { id: string };\n @Input() public errorMessage: ErrorMessagesModel;\n}\n","import { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\n\n/*\n * Helper Class\n * Used for dynamic templates manipulation\n * */\n\nexport class HtmlTemplatesHelper {\n /*\n * Sets described by string depending if\n * there is an error, error and hit or nothing\n * */\n public static setDescribedBy(errorMessage: ErrorMessagesModel, config: GovUiConfigModel) {\n if (!errorMessage) {\n return config.hint ? `${config.id}-hint` : null;\n } else if (errorMessage && errorMessage.isInvalid) {\n return config.hint ? `${config.id}-hint ${config.id}-error` : `${config.id}-error`;\n } else {\n return config.hint ? `${config.id}-hint` : null;\n }\n }\n}\n","import {Component, Input} from '@angular/core';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\nimport {HtmlTemplatesHelper} from '../../util/helpers/html-templates.helper';\n/*\n* Gov Uk Fieldset Component\n* Used to wrap group fieldset elements\n* it can conditionally display h1 tag\n* @param config\n* @param isHeading\n* @param errorMessage - used for aria tag\n* */\n@Component({\n selector: 'xuilib-gov-uk-fieldset',\n templateUrl: './gov-uk-fieldset.component.html'\n})\nexport class GovUkFieldsetComponent {\n constructor() { }\n @Input() public config: GovUiConfigModel;\n // {legend: string; classes: string, id: string, hint: string, key: string, isPageHeading: boolean};\n // @Input() public isPageHeading: boolean;\n @Input() public errorMessage: ErrorMessagesModel;\n\n public setDescribedBy(): string {\n return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\nimport {HtmlTemplatesHelper} from '../../util/helpers/html-templates.helper';\n/*\n* Gov UK Input component\n* Responsible for displaying input, hint and error messages\n* @prop errorMessages - array of messages\n* @prop focusOn - passing the FormGroup\n* @prop config - adding configuration\n* */\n@Component({\n selector: 'xuilib-gov-uk-file-upload',\n templateUrl: './gov-uk-file-upload.component.html'\n})\nexport class GovUkFileUploadComponent implements OnInit {\n constructor() { }\n @Input() public errorMessage: ErrorMessagesModel;\n @Input() public group: FormGroup;\n @Input() public config: GovUiConfigModel;\n // { label: string, hint: string; name: string; id: string, type: string; isPageHeading: boolean, classes: string };\n\n public reloadInput = true;\n\n public ngOnInit(): void {\n this.config.classes = 'govuk-label--m';\n }\n\n public setDescribedBy(): string {\n return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);\n }\n}\n","import {Component, Input} from '@angular/core';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\n/*\n* Gov Uk Form Group Wrapper\n* Used to wrap group form elements in html tags below such as\n* gov-uk-checkboxes and radio buttons\n* and errorMessage messages\n* */\n@Component({\n selector: 'xuilib-gov-uk-form-group-wrapper',\n templateUrl: './gov-uk-form-group-wrapper.component.html'\n})\nexport class GovUkFormGroupWrapperComponent {\n constructor() { }\n @Input() public error: ErrorMessagesModel;\n @Input() public group: string;\n @Input() public config: GovUiConfigModel;\n // {hint: string; legend: string, key: string, isPageHeading: boolean;}; // TODO create a global interface\n\n}\n\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\nimport {HtmlTemplatesHelper} from '../../util/helpers/html-templates.helper';\n/*\n* Gov UK Input component\n* Responsible for displaying input, hint and error messages\n* @prop errorMessages - array of messages\n* @prop focusOn - passing the FormGroup\n* @prop config - adding configuration\n* */\n@Component({\n selector: 'xuilib-gov-uk-input',\n templateUrl: './gov-uk-input.component.html',\n styleUrls: ['./gov-uk-input.component.scss']\n})\nexport class GovUkInputComponent implements OnInit {\n constructor() { }\n @Input() public errorMessage: ErrorMessagesModel;\n @Input() public group: FormGroup;\n @Input() public config: GovUiConfigModel;\n // { label: string, hint: string; name: string; id: string, type: string; isPageHeading: boolean, classes: string };\n\n public ngOnInit(): void {\n this.config.classes = 'govuk-label--m';\n }\n\n public setDescribedBy(): string {\n return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);\n }\n}\n","import {Component, Input} from '@angular/core';\n\n/*\n* Gov UK Label component\n* Responsible for displaying label tag\n* @prop isPageHading - boolean to display h1\n* @prop config - obj with properties\n* */\n@Component({\n selector: 'xuilib-gov-label',\n templateUrl: './gov-uk-label.component.html'\n})\nexport class GovUkLabelComponent {\n constructor() { }\n @Input() public config: { label: string, name: string; id: string, isPageHeading: boolean, classes: string };\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\n/*\n* Gov Uk Radio state-less Component responsible for\n* displaying radios input and hint\n*\n* */\n@Component({\n selector: 'xuilib-gov-radio',\n templateUrl: './gov-uk-radio.component.html'\n})\nexport class GovUkRadioComponent implements OnInit {\n constructor() { }\n @Input() public group: FormGroup;\n @Input() public config: GovUiConfigModel;\n // {value: string, label: string, hint: string; name: string; focusOn: string; id: string; classes: string}; // TODO create interface\n\n public id: string;\n /*\n * ngOnInIt\n * needed to manage the focus id if passed on in config\n * si it can focus on element when user clicks on error message in the header.\n **/\n public ngOnInit(): void {\n const id = this.config.focusOn ? this.config.focusOn : this.config.value;\n this.config.id = id;\n this.config.classes = this.config.classes ?\n this.config.classes.concat(' govuk-radios__label') : 'govuk-radios__label';\n }\n\n}\n","import {Component, Input} from '@angular/core';\nimport { ErrorMessagesModel } from '../../models';\nimport {CheckboxesModel} from '../../models/checkboxes-model';\n/*\n* Radios component - state less\n* Responsible for displaying a list of gov-uk-radio components\n* @param: options - object with data for wrapper (fieldset) and\n* array of items for gov-uk-checkboxes\n* @param: errors - array of error stings\n* */\n@Component({\n selector: 'xuilib-gov-uk-radios',\n templateUrl: './gov-uk-radios.component.html'\n})\n\nexport class GovUkRadiosComponent {\n\n @Input() public options: CheckboxesModel;\n @Input() public errors: ErrorMessagesModel;\n\n}\n","import {Component, Input} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\nimport {HtmlTemplatesHelper} from '../../util/helpers/html-templates.helper';\n/*\n* Gov Uk Select Dumb Component responsible for\n* dropdown input.\n* */\n@Component({\n selector: 'xuilib-gov-select',\n templateUrl: './gov-uk-select.component.html'\n})\nexport class GovUkSelectComponent {\n constructor() {}\n @Input() public errorMessage: ErrorMessagesModel;\n @Input() public group: FormGroup;\n @Input() public config: GovUiConfigModel;\n // {hint: string; name: string; id: string, isPageHeading: boolean, classes: string };\n @Input() public items: {label: string, value: string; id: string}[];\n\n public setDescribedBy(): string {\n return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);\n }\n\n}\n","import {formatDate} from '@angular/common';\nimport {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'xuilib-gov-uk-table',\n templateUrl: './gov-uk-table.component.html',\n styleUrls: ['./gov-uk-table.component.scss']\n})\nexport class GovukTableComponent {\n\n @Input() public classes = '';\n @Input() public caption = 'Dates and amounts';\n @Input() public firstCellIsHeader = true;\n @Input() public rows: any;\n @Input() public columnConfig: GovukTableColumnConfig[] = [\n { header: 'Date', key: 'date', type: 'text' },\n { header: 'Amount', key: 'amount' }\n ];\n\n constructor() { }\n\n public formatDate(date: Date): string {\n return formatDate(date, 'dd/MM/yyyy', 'en-UK');\n }\n\n}\n\nexport class GovukTableColumnConfig {\n public header: string;\n public key: string;\n public type?: string;\n constructor() {\n this.header = '';\n this.key = '';\n this.type = 'text';\n }\n }\n","import {Component, Input} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport { ErrorMessagesModel } from '../../models';\nimport { GovUiConfigModel } from '../../models/gov-ui-config-model';\nimport {HtmlTemplatesHelper} from '../../util/helpers/html-templates.helper';\n/*\n* CheckBox component - state less\n* Responsible for displaying a list of gov-uk-checkboxes\n* @param: options - object with data for wrapper (fieldset) and\n* array of items for gov-uk-checkboxes\n* @param: errors - array of errorMessage\n* */\n@Component({\n selector: 'xuilib-gov-uk-textarea',\n templateUrl: './gov-uk-textarea.component.html'\n})\nexport class GovUkTextareaComponent {\n @Input() public config: GovUiConfigModel;\n // {label: string; classes: string; hint: string; key: string; rows: number, id: string};\n @Input() public errorMessage: ErrorMessagesModel;\n @Input() public group: FormGroup;\n\n public setDescribedBy(): string {\n return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);\n }\n\n}\n","import {Component, Input} from '@angular/core';\n\n/*\n* Hmcts Banner\n* Responsible for displaying prominent message and related actions\n* @prop message to display\n* @prop type\n* */\n@Component({\n selector: 'xuilib-hmcts-banner',\n templateUrl: './hmcts-banner.component.html',\n styleUrls: ['./hmcts-banner.component.scss']\n})\nexport class HmctsBannerComponent {\n constructor() { }\n @Input() public type: string;\n @Input() public message: string;\n}\n","import {DOCUMENT} from '@angular/common';\nimport {AfterViewInit, Component, Inject, Input, OnChanges, SimpleChanges} from '@angular/core';\n/*\n Error Summary component\n State Less component\n @property errorMessages that is array of messages.\n Component is also responsible for scrolling. Up and Down the page when user click on links\n*/\n@Component({\n selector: 'xuilib-hmcts-error-summary',\n templateUrl: './hmcts-error-summary.component.html'\n})\nexport class HmctsErrorSummaryComponent implements AfterViewInit, OnChanges {\n\n @Input() public set errorMessages(value: any) {\n this.messages = value;\n }\n\n @Input() public header: string;\n @Input() public showWarningMessage: boolean;\n\n public messages: object[];\n\n constructor(@Inject(DOCUMENT) private readonly document: any) { }\n\n public ngAfterViewInit(): void {\n this.scrollTo('errorSummary');\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.errorMessages) {\n this.scrollTo('errorSummary');\n }\n }\n\n public scrollTo(selector: any) {\n if (this.document.querySelector(`#${selector}`)) {\n const el = this.document.querySelector(`#${selector}`);\n\n el.focus();\n }\n }\n\n public hasElement(selector: any) {\n return this.document.querySelector(`#${selector}`);\n }\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'xuilib-hmcts-identity-bar',\n templateUrl: './hmcts-identity-bar.component.html',\n styleUrls: ['./hmcts-identity-bar.component.scss']\n})\nexport class HmctsIdentityBarComponent {\n\n @Input() public set content(value: any) {\n this.value = value.name;\n }\n\n public value: string;\n\n constructor() { }\n}\n","import {Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BannerDataModel } from '../../models/banner-data-model';\n/*\n* Main Content wrapper\n* Responsible for:\n * Wrapping content within the gov-uk html elements bellow\n * @prop showBackLink - switch for back link\n * @prop title = title\n * @prop summaryErrors list of errors\n* @prop back link, title (title), summaryErrors (array of errors)\n* */\n@Component({\n selector: 'xuilib-hmcts-main-wrapper',\n templateUrl: './hmcts-main-wrapper.component.html'\n})\nexport class HmctsMainWrapperComponent implements OnInit {\n public bannerData: BannerDataModel;\n\n @Input() public backLink: string;\n @Input() public title: string;\n @Input() public summaryErrors: {header: string; isFromValid: boolean; items: { id: string; message: any; }[]};\n @Input() public set banner(value: BannerDataModel) {\n this.bannerData = value;\n }\n @Input() public actionButtons: {name: string, class: string, action(): {}}[];\n @Input() public showWarningMessage: boolean;\n\n @Output() public backEvent = new EventEmitter<void>();\n public hasBackLink: boolean;\n\n constructor() {\n }\n\n public ngOnInit() {\n this.hasBackLink = this.backLink !== undefined || this.backEvent.observers.length > 0;\n }\n\n public onGoBack() {\n this.backEvent.emit();\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'xuilib-hmcts-pagination',\n templateUrl: './hmcts-pagination.component.html',\n styleUrls: ['./hmcts-pagination.component.scss']\n})\nexport class HmctsPaginationComponent {\n\n @Input() public id: string;\n @Input() public maxSize: number = 7;\n @Input() public pageSize: number = 10;\n @Input() public showPageNumbers: boolean = true;\n @Input() public showResultCount: boolean = true;\n @Output() public pageChange: EventEmitter<number> = new EventEmitter<number>();\n @Output() public pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'xuilib-hmcts-primary-navigation',\n templateUrl: './hmcts-primary-navigation.component.html',\n styleUrls: ['./hmcts-primary-navigation.component.scss']\n})\nexport class HmctsPrimaryNavigationComponent {\n\n @Input() public set userLoggedIn(value: any) {\n this.isUserLoggedIn = value;\n }\n\n @Input() public label: string;\n @Input() public items: {active: boolean, href: string, text: string}[];\n @Input() public isBrandedHeader: boolean;\n\n public isUserLoggedIn: boolean;\n constructor() {\n\n }\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'xuilib-hmcts-sub-navigation',\n styleUrls: ['hmcts-sub-navigation.component.scss'],\n templateUrl: './hmcts-sub-navigation.component.html'\n})\nexport class HmctsSubNavigationComponent {\n @Input() public label: string;\n @Input() public items: SubNavigation[];\n}\n\nexport interface SubNavigation {\n text: string;\n href: string;\n active: boolean;\n total?: number;\n roundel?: number;\n}\n\n","\nimport {Directive, ElementRef, OnInit} from '@angular/core';\n/*\n* Remove Host Directive\n* Used to remove native angular host tags tags\n* sometimes needed because of CSS dependencies\n* */\n@Directive({\n selector: '[appRemoveHost]'\n})\nexport class RemoveHostDirective implements OnInit {\n\n constructor(private readonly el: ElementRef) {}\n\n public ngOnInit() {\n const nativeElement: HTMLElement = this.el.nativeElement;\n const parentElement: HTMLElement = nativeElement.parentElement;\n // move all children out of the element\n while (nativeElement.firstChild) {\n parentElement.insertBefore(nativeElement.firstChild, nativeElement);\n }\n parentElement.removeChild(nativeElement);\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {RouterModule} from '@angular/router';\nimport {NgxPaginationModule, PaginatePipe} from 'ngx-pagination';\nimport {AccessibilityComponent} from './components/accessibility/accessibility.component';\nimport {CheckboxListComponent} from './components/checkbox-list/checkbox-list.component';\nimport {ContactDetailsComponent} from './components/contact-details/contact-details.component';\nimport {CookieBannerComponent} from './components/cookie-banner/cookie-banner.component';\nimport {DueDateComponent} from './components/due-date/due-date.component';\nimport {ExuiPageWrapperComponent} from './components/exui-main-wrapper/exui-page-wrapper.component';\nimport {FindLocationComponent} from './components/find-location/find-location.component';\nimport {FindPersonComponent} from './components/find-person/find-person.component';\nimport { FindServiceComponent } from './components/find-service/find-service.component';\nimport {GenericFilterComponent} from './components/generic-filter/generic-filter.component';\nimport {HmctsSessionDialogComponent} from './components/hmcts-session-dialog/hmcts-session-dialog.component';\nimport {InviteUserFormComponent} from './components/invite-user-form/invite-user-form.component';\nimport {InviteUserPermissionComponent} from './components/invite-user-permissions/invite-user-permission.component';\nimport {LoadingSpinnerComponent} from './components/loading-spinner/loading-spinner.component';\nimport {PaginationComponent} from './components/pagination/pagination.component';\nimport {SearchJudicialsComponent} from './components/search-judicials/search-judicials.component';\nimport {SearchLocationComponent} from './components/search-location/search-location.component';\nimport { SearchServiceComponent } from './components/search-service/search-service.component';\nimport {SearchVenueComponent} from './components/search-venue/search-venue.component';\nimport {SelectedCaseConfirmComponent} from './components/selected-case-confirm/selected-case-confirm.component';\nimport {SelectedCaseListComponent} from './components/selected-case-list/selected-case-list.component';\nimport {SelectedCaseComponent} from './components/selected-case/selected-case.component';\nimport {ServiceMessageComponent} from './components/service-message/service-message.component';\nimport {ServiceMessagesComponent} from './components/service-messages/service-messages.component';\nimport {ShareCaseConfirmComponent} from './components/share-case-confirm/share-case-confirm.component';\nimport {ShareCaseComponent} from './components/share-case/share-case.component';\nimport {TabComponent} from './components/tab/tab.component';\nimport {TcConfirmComponent} from './components/tc-confirm/tc-confirm.component';\nimport {\n TcDisplayHtmlComponent\n} from './components/terms-and-conditions/tc-display/tc-display-html/tc-display-html.component';\nimport {\n TcDisplayPlainComponent\n} from './components/terms-and-conditions/tc-display/tc-display-plain/tc-display-plain.component';\nimport { TermsAndConditionsComponent } from './components/terms-and-conditions/terms-and-conditions.component';\nimport { UserDetailsComponent } from './components/user-details/user-details.component';\nimport { UserListComponent } from './components/user-list/user-list.component';\nimport { UserSelectComponent } from './components/user-select/user-select.component';\nimport { FeatureToggleDirective } from './directives/feature-toggle/feature-toggle.directive';\nimport { LetDirective } from './directives/let/let.directive';\nimport { GovUkCheckboxComponent } from './gov-ui/components/gov-uk-checkbox/gov-uk-checkbox.component';\nimport { GovUkCheckboxesComponent } from './gov-ui/components/gov-uk-checkboxes/gov-uk-checkboxes.component';\nimport { GovUkDateComponent } from './gov-ui/components/gov-uk-date/gov-uk-date.component';\nimport { GovUkErrorMessageComponent } from './gov-ui/components/gov-uk-error-message/gov-uk-error-message.component';\nimport { GovUkFieldsetComponent } from './gov-ui/components/gov-uk-fieldset/gov-uk-fieldset.component';\nimport { GovUkFileUploadComponent } from './gov-ui/components/gov-uk-file-upload/gov-uk-file-upload.component';\nimport {\n GovUkFormGroupWrapperComponent\n} from './gov-ui/components/gov-uk-form-group-wrapper/gov-uk-form-group-wrapper.component';\nimport { GovUkInputComponent } from './gov-ui/components/gov-uk-input/gov-uk-input.component';\nimport { GovUkLabelComponent } from './gov-ui/components/gov-uk-label/gov-uk-label.component';\nimport { GovUkRadioComponent } from './gov-ui/components/gov-uk-radio/gov-uk-radio.component';\nimport { GovUkRadiosComponent } from './gov-ui/components/gov-uk-radios/gov-uk-radios.component';\nimport { GovUkSelectComponent } from './gov-ui/components/gov-uk-select/gov-uk-select.component';\nimport { GovukTableComponent } from './gov-ui/components/gov-uk-table/gov-uk-table.component';\nimport { GovUkTextareaComponent } from './gov-ui/components/gov-uk-textarea/gov-uk-textarea.component';\nimport { HmctsBannerComponent } from './gov-ui/components/hmcts-banner/hmcts-banner.component';\nimport { HmctsErrorSummaryComponent } from './gov-ui/components/hmcts-error-summary/hmcts-error-summary.component';\nimport { HmctsIdentityBarComponent } from './gov-ui/components/hmcts-identity-bar/hmcts-identity-bar.component';\nimport { HmctsMainWrapperComponent } from './gov-ui/components/hmcts-main-wrapper/hmcts-main-wrapper.component';\nimport { HmctsPaginationComponent } from './gov-ui/components/hmcts-pagination/hmcts-pagination.component';\nimport {\n HmctsPrimaryNavigationComponent\n} from './gov-ui/components/hmcts-primary-navigation/hmcts-primary-navigation.component';\nimport { HmctsSubNavigationComponent } from './gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component';\nimport { RemoveHostDirective } from './gov-ui/directives/remove-host.directive';\nimport { windowProvider, windowToken } from './window';\n\nexport const COMMON_COMPONENTS = [\n ExuiPageWrapperComponent,\n TermsAndConditionsComponent,\n TcDisplayHtmlComponent,\n TcDisplayPlainComponent,\n TcConfirmComponent,\n ContactDetailsComponent,\n FeatureToggleDirective,\n LetDirective,\n HmctsSessionDialogComponent,\n UserListComponent,\n UserDetailsComponent,\n InviteUserPermissionComponent,\n InviteUserFormComponent,\n ShareCaseComponent,\n ShareCaseConfirmComponent,\n SelectedCaseListComponent,\n SelectedCaseComponent,\n SelectedCaseConfirmComponent,\n UserSelectComponent,\n TabComponent,\n AccessibilityComponent,\n DueDateComponent,\n CheckboxListComponent,\n ServiceMessageComponent,\n ServiceMessagesComponent,\n LoadingSpinnerComponent,\n GenericFilterComponent,\n CookieBannerComponent,\n FindPersonComponent,\n SearchJudicialsComponent,\n FindLocationComponent,\n SearchLocationComponent,\n FindServiceComponent,\n SearchServiceComponent,\n SearchVenueComponent,\n PaginationComponent\n];\n\nexport const GOV_UI_COMPONENTS = [\n HmctsIdentityBarComponent,\n HmctsPaginationComponent,\n HmctsSubNavigationComponent,\n HmctsPrimaryNavigationComponent,\n HmctsErrorSummaryComponent,\n HmctsMainWrapperComponent,\n HmctsBannerComponent,\n GovukTableComponent,\n GovUkInputComponent,\n GovUkCheckboxComponent,\n GovUkFormGroupWrapperComponent,\n GovUkLabelComponent,\n GovUkErrorMessageComponent,\n GovUkFieldsetComponent,\n GovUkDateComponent,\n GovUkCheckboxesComponent,\n GovUkRadioComponent,\n GovUkRadiosComponent,\n GovUkSelectComponent,\n GovUkTextareaComponent,\n GovUkFileUploadComponent,\n RemoveHostDirective\n];\n\n@NgModule({\n declarations: [\n ...COMMON_COMPONENTS,\n ...GOV_UI_COMPONENTS\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterModule.forChild([]),\n MatAutocompleteModule,\n MatTabsModule,\n MatInputModule,\n NgxPaginationModule\n ],\n providers: [\n {provide: windowToken, useFactory: windowProvider}\n ],\n exports: [\n ...COMMON_COMPONENTS,\n ...GOV_UI_COMPONENTS,\n PaginatePipe\n ]\n})\nexport class ExuiCommonLibModule {\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GovUiService {\n\n constructor() { }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from '@angular/router';\nimport { combineLatest, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FeatureToggleService } from './feature-toggle.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FeatureToggleGuard implements CanActivate {\n\n public constructor(\n private readonly featureToggleService: FeatureToggleService,\n private readonly router: Router\n ) {}\n\n /**\n * Usage: Add the FeatureToggleGuard as the Guard for a route, and provide the following\n * in the data array for the route:\n * - needsFeaturesEnabled: An array of feature keys that need to be enabled for this route\n * - featureDisabledRedirect: the URL to redirect to when the this route is not accessible due to disabled features\n * @param route Automatically provided by Angular\n */\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {\n return combineLatest(...(route.data.needsFeaturesEnabled as string[]).map(\n feature => this.featureToggleService.getValueOnce<boolean>(feature, false)\n )).pipe(\n map(featureStatuses => featureStatuses.every(status => status)),\n map(status => status || this.router.parseUrl(route.data.featureDisabledRedirect as string))\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as LDClient from 'launchdarkly-js-client-sdk';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { FeatureUser } from '../../models/feature-user';\nimport { FeatureToggleService } from './feature-toggle.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LaunchDarklyService implements FeatureToggleService {\n\n private client: LDClient.LDClient;\n private readonly ready: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n private readonly features: Record<string, BehaviorSubject<any>> = {};\n private user: FeatureUser = { anonymous: true };\n private clientId: string = '';\n\n public initialize(user: FeatureUser = { anonymous: true }, clientId: string): void {\n this.ready.next(false);\n this.user = user;\n this.clientId = clientId;\n this.client = LDClient.initialize(this.clientId, this.user, {});\n this.client.on('ready', () => {\n this.client.identify(this.user).then(() => this.ready.next(true));\n });\n }\n\n public isEnabled(feature: string): Observable<boolean> {\n return this.getValue<boolean>(feature, false);\n }\n\n public getArray<R = any>(feature: string): Observable<R[]> {\n return this.getValue<R[]>(feature, []);\n }\n\n public getValue<R>(feature: string, defaultValue: R): Observable<R> {\n if (!this.features.hasOwnProperty(feature)) {\n this.features[feature] = new BehaviorSubject<R>(defaultValue);\n this.ready.pipe(\n filter(ready => ready),\n map(() => this.client.variation(feature, defaultValue))\n ).subscribe(value => {\n this.features[feature].next(value);\n this.client.on(`change:${feature}`, (val: R) => {\n this.features[feature].next(val);\n });\n });\n }\n return this.features[feature].pipe(\n distinctUntilChanged()\n );\n }\n\n /**\n * This method returns an observable that will only get the state of the feature toggle\n * once. It calls the LD SDK directly, and should only be used in circumstances where\n * only one value should be emitted, that value coming directly from LD. This will likely\n * only apply for Guards, and should be used only when absolutely necessary.\n * @see getValue for regular usage.\n * @param feature string\n * @param defaultValue R\n */\n public getValueOnce<R>(feature: string, defaultValue: R): Observable<R> {\n return this.ready.pipe(\n filter(ready => ready),\n map(() => this.client.variation(feature, defaultValue))\n );\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { windowToken } from '../../window';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class GoogleAnalyticsService {\n\n private readonly document: Document;\n private readonly window: Window;\n\n public googleAnalyticsKey: string;\n constructor(\n private readonly router: Router,\n private readonly title: Title,\n @Inject(windowToken) window: any,\n @Inject(DOCUMENT) document: any,\n ) {\n this.window = window as Window;\n this.document = document as Document;\n\n }\n\n public init(googleAnalyticsKey: string) {\n this.googleAnalyticsKey = googleAnalyticsKey;\n try {\n const script1 = this.document.createElement('script');\n script1.async = true;\n script1.src = `https://www.googletagmanager.com/gtag/js?id=${this.googleAnalyticsKey}`;\n this.document.head.appendChild(script1);\n\n const script2 = this.document.createElement('script');\n script2.innerHTML = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${this.googleAnalyticsKey}', {'send_page_view': false});\n `;\n this.document.head.appendChild(script2);\n } catch (ex) {\n console.error('Error appending google analytics');\n console.error(ex);\n }\n this.listenForRouteChanges();\n }\n\n private listenForRouteChanges() {\n if (this.googleAnalyticsKey) {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n (this.window as any).gtag('config', this.googleAnalyticsKey, {\n page_path: event.urlAfterRedirects,\n page_title: this.title.getTitle(),\n });\n }\n });\n }\n }\n\n public event(eventName: string, params: {}) {\n (this.window as any).gtag('event', eventName, params);\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { windowToken } from '../../window';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleTagManagerService {\n private readonly document: Document;\n private readonly window: Window;\n\n public googleTagManagerKey: string;\n constructor(\n private readonly router: Router,\n private readonly title: Title,\n @Inject(windowToken) window: any,\n @Inject(DOCUMENT) document: any\n ) {\n this.window = window as Window;\n this.document = document as Document;\n }\n\n public init(googleTagManagerKey: string) {\n this.googleTagManagerKey = googleTagManagerKey;\n try {\n\n (this.window as any).dataLayer = (this.window as any).dataLayer || [];\n (this.window as any).dataLayer.push({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js'\n });\n\n const script = this.document.createElement('script');\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtm.js?id=${this.googleTagManagerKey}`;\n this.document.head.appendChild(script);\n\n } catch (ex) {\n console.error('Error appending google tag manager');\n console.error(ex);\n }\n this.listenForRouteChanges();\n }\n\n private listenForRouteChanges() {\n if (this.googleTagManagerKey) {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n (this.window as any).dataLayer.push({\n event: 'pageview',\n page: {\n path: event.urlAfterRedirects,\n title: this.title.getTitle()\n }\n });\n }\n });\n }\n }\n\n public event(eventName: string, params: {}) {\n (this.window as any).dataLayer.push({\n event: eventName,\n params\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {DocumentInterruptSource, Idle, } from '@ng-idle/core';\nimport {Keepalive} from '@ng-idle/keepalive';\nimport {Observable, Subject} from 'rxjs';\nimport {\n delay,\n distinctUntilChanged,\n map\n} from 'rxjs/operators';\nimport {IdleConfigModel} from '../../models/idle-config.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManageSessionServices {\n private readonly appStateEmitter: Subject<{type: string, countdown?: string; isVisible?: boolean}>;\n\n constructor(\n private readonly idle: Idle,\n private readonly keepalive: Keepalive,\n ) {\n this.appStateEmitter = new Subject();\n }\n\n public init(idleConfig: IdleConfigModel): void {\n\n this.idle.setIdleName(idleConfig.idleServiceName);\n this.idle.setTimeout(idleConfig.timeout);\n\n const interrupt =\n new DocumentInterruptSource('mousedown keydown DOMMouseScroll mousewheel touchstart touchmove scroll');\n this.idle.setInterrupts([interrupt]);\n\n // adding delay so that user can click on sign out before the modal shuts\n this.idle.onIdleEnd.pipe(delay(250)).subscribe(() => {\n this.appStateEmitter.next({type: 'modal', countdown: undefined, isVisible: false});\n });\n\n this.idle.onTimeout.subscribe(() => {\n this.appStateEmitter.next({type: 'signout'});\n });\n\n this.idle.onTimeoutWarning.pipe(\n map(sec => (sec > 60) ? `${Math.ceil(sec / 60)} minutes` : `${sec} seconds`),\n distinctUntilChanged()\n ).subscribe((countdown) => {\n this.appStateEmitter.next({type: 'modal', countdown, isVisible: true});\n });\n\n this.keepalive.interval(idleConfig.keepAliveInSeconds);\n this.keepalive.onPing.subscribe(() => {\n this.appStateEmitter.next({type: 'keepalive'});\n });\n const idleInSeconds = Math.floor((idleConfig.idleMilliseconds / 1000)) - idleConfig.timeout;\n this.idle.setIdle(idleInSeconds);\n this.idle.watch();\n }\n\n public appStateChanges(): Observable<any> {\n return this.appStateEmitter.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport {DocumentInterruptSource, Idle, WindowInterruptSource} from '@ng-idle/core';\nimport {Keepalive} from '@ng-idle/keepalive';\nimport {Observable, Subject} from 'rxjs';\nimport {\n distinctUntilChanged,\n map\n} from 'rxjs/operators';\nimport {TimeoutNotificationConfig} from '../../models/timeout-notification.model';\n\n/**\n * TimeoutNotificationsService\n *\n * The Timeout Notification Service allows your application to receive notifications\n * when a User is approaching the the total time that a User has been idle for.\n *\n * This can be set by your application using the Timeout Notification Config object.\n *\n * Your application will then have to listen to events coming from the Timeout Notification Service,\n * and handle these events within your application.\n *\n * @see README.md for implementation details and code, on how to implement the Timeout Notification\n * Service within your application.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TimeoutNotificationsService {\n\n private readonly eventEmitter: Subject<{eventType: string, readableCountdown?: string; }>;\n\n constructor(\n private readonly idle: Idle,\n private readonly keepalive: Keepalive,\n ) {\n this.eventEmitter = new Subject();\n }\n\n /**\n * Convert milliseconds to seconds.\n *\n * @param milliseconds - 1000\n * @return seconds - 1\n */\n public millisecondsToSeconds = (milliseconds: number): number => milliseconds / 1000;\n\n /**\n * Initialise\n *\n * Initialise the Timeout Notification Events.\n *\n * I made the decision not to make ' minutes' and ' seconds' configurable via input parameters -\n * As I made an assumption that any Reform team would not need to change these to 'secs, mins' or 's, m'.\n *\n * idleModalDisplayTime and totalIdleTime need to be passed in, in milliseconds.\n *\n * @see README.md for more information on TimeoutNotificationService.\n */\n public initialise(config: TimeoutNotificationConfig): void {\n\n const INTERRUPTS = 'mousedown keydown DOMMouseScroll mousewheel touchstart touchmove scroll';\n\n const MINUTES = ' minutes';\n const SECONDS = ' seconds';\n\n const SIGNOUT_EVENT = 'sign-out';\n const COUNTDOWN_EVENT = 'countdown';\n const KEEP_ALIVE_EVENT = 'keep-alive';\n\n const {idleServiceName, idleModalDisplayTime, totalIdleTime} = config;\n\n this.idle.setIdleName(idleServiceName);\n\n const idleModalDisplayTimeInSeconds = this.millisecondsToSeconds(idleModalDisplayTime);\n const totalIdleTimeInSeconds = this.millisecondsToSeconds(totalIdleTime);\n\n this.idle.setTimeout(idleModalDisplayTimeInSeconds);\n\n const docInterrupts = new DocumentInterruptSource(INTERRUPTS);\n const windowInterrupts = new WindowInterruptSource(INTERRUPTS);\n this.idle.setInterrupts([docInterrupts, windowInterrupts]);\n\n this.idle.onTimeout.subscribe(() => {\n this.eventEmitter.next({eventType: SIGNOUT_EVENT});\n });\n\n this.idle.onTimeoutWarning.pipe(\n map(sec => (sec > 60) ? Math.ceil(sec / 60) + MINUTES : sec + SECONDS),\n distinctUntilChanged()\n ).subscribe((countdown) => {\n this.eventEmitter.next({eventType: COUNTDOWN_EVENT, readableCountdown: countdown});\n });\n\n this.keepalive.interval(15);\n this.keepalive.onPing.subscribe(() => {\n this.eventEmitter.next({eventType: KEEP_ALIVE_EVENT});\n });\n\n const idleInSeconds = Math.floor(totalIdleTimeInSeconds) - idleModalDisplayTimeInSeconds;\n this.idle.setIdle(idleInSeconds);\n this.idle.watch();\n }\n\n /**\n * Expose the notification events, so that a 3rd party service can listen to the notifications.\n */\n public notificationOnChange(): Observable<any> {\n\n return this.eventEmitter.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\n\n// use types so we can move to stricted typing later on\nexport type Role = string;\nexport type Roles = Role[];\n\n@Injectable({\n providedIn: 'root'\n })\nexport class RoleService {\n private pRoles: Roles = [];\n\n public get roles(): Roles {\n return this.pRoles;\n }\n\n public set roles(roles: Roles) {\n this.pRoles = roles;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from '@angular/router';\nimport { RoleService } from './role.service';\n\nexport enum RoleMatching {\n ALL,\n ANY\n}\n\n@Injectable({\n providedIn: 'root'\n })\nexport class RoleGuard implements CanActivate {\n\n public constructor(\n private readonly roleService: RoleService,\n private readonly router: Router\n ) {}\n\n public canActivate(route: ActivatedRouteSnapshot): boolean | UrlTree {\n const roles = (route.data.needsRole as string[]);\n const check = (roleRegEx: string) => {\n const regex = new RegExp(roleRegEx);\n return this.roleService.roles.some(role => regex.test(role));\n };\n const match = route.data.roleMatching === RoleMatching.ALL ? roles.every(check) : roles.some(check);\n\n return match || this.router.parseUrl(route.data.noRoleMatchRedirect as string);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {distinctUntilChanged} from 'rxjs/operators';\n\nexport abstract class HasLoadingState {\n public get isLoading(): Observable<boolean> {\n return;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoadingService implements HasLoadingState {\n private readonly registered = new Map<string, string>();\n private readonly loading = new BehaviorSubject<boolean>(false);\n\n public get isLoading(): Observable<boolean> {\n return this.loading.asObservable().pipe(distinctUntilChanged());\n }\n\n public register(): string {\n const token = this.generateToken();\n this.registered.set(token, token);\n this.loading.next(true);\n return token;\n }\n\n public unregister(token: string): void {\n this.registered.delete(token);\n this.loading.next(this.registered.size > 0);\n }\n\n private generateToken(): string {\n const timestamp = window.performance.now();\n return `common-lib-loading-${timestamp}`; // format: [source-library]-[unique incrementing number]\n }\n}\n\n","import { FormGroup, ValidatorFn } from '@angular/forms';\n\nexport function checkboxesBeCheckedValidator(minRequired = 1): ValidatorFn {\n return function validate(formGroup: FormGroup) {\n let checked = 0;\n\n Object.keys(formGroup.controls).forEach(key => {\n const control = formGroup.controls[key];\n\n if (control.value === true) {\n checked ++;\n }\n });\n\n if (checked < minRequired) {\n return {\n requireOneCheckboxToBeChecked: true,\n };\n }\n\n return null;\n };\n}\n","import { FormGroup, ValidatorFn } from '@angular/forms';\n\nexport function dateValidator(): ValidatorFn {\n return function validate(formGroup: FormGroup) {\n\n const d = new Date(\n parseInt(formGroup.controls.day.value, 10),\n parseInt(formGroup.controls.month.value, 10) - 1,\n parseInt(formGroup.controls.year.value, 10) - 1\n );\n\n function isValidDate(val: any) {\n return val instanceof Date && !isNaN( +d );\n }\n\n if (!isValidDate(d)) {\n return {\n dateIsInvalid: true,\n };\n }\n\n return null;\n };\n}\n","import { FormGroup, ValidatorFn } from '@angular/forms';\n\nexport function radioGroupValidator(): ValidatorFn {\n return function validate(formGroup: FormGroup) {\n if (formGroup.controls) {\n for (const control in formGroup.controls) {\n if (!formGroup.controls[control].valid) {\n return {\n isRadioGroupInvalid: true,\n };\n }\n }\n }\n\n\n return null;\n };\n}\n"],"mappings":"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"}
|