@hmcts/ccd-case-ui-toolkit 5.0.6-angular11-upgrade → 5.0.9-angular11-upgrade
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/bundles/hmcts-ccd-case-ui-toolkit.umd.js +25692 -5025
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -16
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
- package/esm2015/lib/shared/components/activity/activity-banner/activity-banner.component.js +42 -0
- package/esm2015/lib/shared/components/activity/activity-banner/index.js +2 -0
- package/esm2015/lib/shared/components/activity/activity-icon/activity-icon.component.js +35 -0
- package/esm2015/lib/shared/components/activity/activity-icon/index.js +2 -0
- package/esm2015/lib/shared/components/activity/activity.component.js +150 -0
- package/esm2015/lib/shared/components/activity/activity.module.js +53 -0
- package/esm2015/lib/shared/components/activity/index.js +5 -0
- package/esm2015/lib/shared/components/case-editor/case-create/case-create.component.js +94 -0
- package/esm2015/lib/shared/components/case-editor/case-create/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit/case-edit.component.js +113 -0
- package/esm2015/lib/shared/components/case-editor/case-edit/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.js +131 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-confirm/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.js +146 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-form/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.js +11 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +654 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-page/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +759 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-submit/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-editor.module.js +185 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.js +89 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.js +72 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.js +157 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/index.js +4 -0
- package/esm2015/lib/shared/components/case-editor/case-progress/case-progress.component.js +85 -0
- package/esm2015/lib/shared/components/case-editor/case-progress/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/domain/event-completion-params.model.js +2 -0
- package/esm2015/lib/shared/components/case-editor/domain/event-completion-portal-types.model.js +6 -0
- package/esm2015/lib/shared/components/case-editor/editor.routing.js +31 -0
- package/esm2015/lib/shared/components/case-editor/index.js +13 -0
- package/esm2015/lib/shared/components/case-editor/services/case-edit-wizard.guard.js +92 -0
- package/esm2015/lib/shared/components/case-editor/services/case-worker.service.js +32 -0
- package/esm2015/lib/shared/components/case-editor/services/convert-href-to-router.service.js +41 -0
- package/esm2015/lib/shared/components/case-editor/services/event-completion-state-machine.service.js +162 -0
- package/esm2015/lib/shared/components/case-editor/services/event-trigger.service.js +20 -0
- package/esm2015/lib/shared/components/case-editor/services/index.js +12 -0
- package/esm2015/lib/shared/components/case-editor/services/judicial-worker.service.js +32 -0
- package/esm2015/lib/shared/components/case-editor/services/page-validation.service.js +50 -0
- package/esm2015/lib/shared/components/case-editor/services/wizard-factory.service.js +7 -0
- package/esm2015/lib/shared/components/case-header/case-header.component.js +65 -0
- package/esm2015/lib/shared/components/case-header/case-header.module.js +35 -0
- package/esm2015/lib/shared/components/case-header/index.js +3 -0
- package/esm2015/lib/shared/components/case-history/case-history.component.js +264 -0
- package/esm2015/lib/shared/components/case-history/case-history.module.js +52 -0
- package/esm2015/lib/shared/components/case-history/domain/case-history.model.js +28 -0
- package/esm2015/lib/shared/components/case-history/index.js +3 -0
- package/esm2015/lib/shared/components/case-history/services/case-history.service.js +40 -0
- package/esm2015/lib/shared/components/case-list/case-list.component.js +370 -0
- package/esm2015/lib/shared/components/case-list/case-list.module.js +45 -0
- package/esm2015/lib/shared/components/case-list/index.js +3 -0
- package/esm2015/lib/shared/components/case-list-filters/case-list-filters.component.js +57 -0
- package/esm2015/lib/shared/components/case-list-filters/case-list-filters.module.js +59 -0
- package/esm2015/lib/shared/components/case-list-filters/index.js +3 -0
- package/esm2015/lib/shared/components/case-timeline/case-timeline.component.js +118 -0
- package/esm2015/lib/shared/components/case-timeline/case-timeline.module.js +46 -0
- package/esm2015/lib/shared/components/case-timeline/index.js +3 -0
- package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js +195 -0
- package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.js +307 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.js +20 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/models/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.js +64 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.js +120 -0
- package/esm2015/lib/shared/components/case-viewer/case-event-trigger/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +545 -0
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.js +63 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.js +258 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.js +18 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +195 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.js +11 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/models/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.js +60 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-view/case-view.component.js +100 -0
- package/esm2015/lib/shared/components/case-viewer/case-view/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-viewer.component.js +129 -0
- package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +155 -0
- package/esm2015/lib/shared/components/case-viewer/index.js +14 -0
- package/esm2015/lib/shared/components/case-viewer/printer/case-printer.component.js +111 -0
- package/esm2015/lib/shared/components/case-viewer/printer/index.js +4 -0
- package/esm2015/lib/shared/components/case-viewer/printer/pipes/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.js +60 -0
- package/esm2015/lib/shared/components/case-viewer/services/case.resolver.js +110 -0
- package/esm2015/lib/shared/components/case-viewer/services/event-trigger.resolver.js +64 -0
- package/esm2015/lib/shared/components/case-viewer/services/index.js +3 -0
- package/esm2015/lib/shared/components/case-viewer/viewer.routing.js +127 -0
- package/esm2015/lib/shared/components/create-case-filters/create-case-filters-selection.model.js +8 -0
- package/esm2015/lib/shared/components/create-case-filters/create-case-filters.component.js +257 -0
- package/esm2015/lib/shared/components/create-case-filters/create-case-filters.module.js +42 -0
- package/esm2015/lib/shared/components/create-case-filters/index.js +4 -0
- package/esm2015/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.js +57 -0
- package/esm2015/lib/shared/components/dialogs/delete-or-cancel-dialog/index.js +2 -0
- package/esm2015/lib/shared/components/dialogs/dialogs.module.js +49 -0
- package/esm2015/lib/shared/components/dialogs/document-dialog/index.js +2 -0
- package/esm2015/lib/shared/components/dialogs/index.js +6 -0
- package/esm2015/lib/shared/components/dialogs/remove-dialog/index.js +2 -0
- package/esm2015/lib/shared/components/dialogs/save-or-discard-dialog/index.js +2 -0
- package/esm2015/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.js +61 -0
- package/esm2015/lib/shared/components/error/callback-errors.component.js +145 -0
- package/esm2015/lib/shared/components/error/domain/error-context.js +3 -0
- package/esm2015/lib/shared/components/error/domain/index.js +2 -0
- package/esm2015/lib/shared/components/error/errors.module.js +31 -0
- package/esm2015/lib/shared/components/error/index.js +4 -0
- package/esm2015/lib/shared/components/error-message/error-message.component.js +51 -0
- package/esm2015/lib/shared/components/error-message/error-message.module.js +39 -0
- package/esm2015/lib/shared/components/error-message/index.js +3 -0
- package/esm2015/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.js +55 -0
- package/esm2015/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.js +52 -0
- package/esm2015/lib/shared/components/event-start/components/task-assigned/task-assigned.component.js +104 -0
- package/esm2015/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.js +60 -0
- package/esm2015/lib/shared/components/event-start/components/task-conflict/task-conflict.component.js +54 -0
- package/esm2015/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.js +52 -0
- package/esm2015/lib/shared/components/event-start/event-guard/event-start.guard.js +103 -0
- package/esm2015/lib/shared/components/event-start/event-start.component.js +52 -0
- package/esm2015/lib/shared/components/event-start/event-start.module.js +69 -0
- package/esm2015/lib/shared/components/event-start/index.js +10 -0
- package/esm2015/lib/shared/components/event-start/models/event-start-state-machine-context.model.js +2 -0
- package/esm2015/lib/shared/components/event-start/models/event-start-states-enum.model.js +16 -0
- package/esm2015/lib/shared/components/event-start/models/index.js +3 -0
- package/esm2015/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.js +29 -0
- package/esm2015/lib/shared/components/event-start/services/event-start-state-machine.service.js +168 -0
- package/esm2015/lib/shared/components/event-start/services/index.js +2 -0
- package/esm2015/lib/shared/components/event-trigger/event-trigger.component.js +108 -0
- package/esm2015/lib/shared/components/event-trigger/event-trigger.module.js +35 -0
- package/esm2015/lib/shared/components/event-trigger/index.js +3 -0
- package/esm2015/lib/shared/components/index.js +20 -0
- package/esm2015/lib/shared/components/loading-spinner/index.js +2 -0
- package/esm2015/lib/shared/components/loading-spinner/loading-spinner.component.js +33 -0
- package/esm2015/lib/shared/components/pagination/index.js +3 -0
- package/esm2015/lib/shared/components/pagination/pagination.component.js +255 -0
- package/esm2015/lib/shared/components/pagination/pagination.module.js +33 -0
- package/esm2015/lib/shared/components/palette/address/index.js +3 -0
- package/esm2015/lib/shared/components/palette/case-link/index.js +3 -0
- package/esm2015/lib/shared/components/palette/complex/index.js +1 -7
- package/esm2015/lib/shared/components/palette/complex/write-complex-field.component.js +2 -2
- package/esm2015/lib/shared/components/palette/index.js +32 -0
- package/esm2015/lib/shared/components/palette/palette.module.js +16 -27
- package/esm2015/lib/shared/components/search-result/index.js +3 -0
- package/esm2015/lib/shared/components/search-result/search-result.component.js +845 -0
- package/esm2015/lib/shared/components/search-result/search-result.module.js +67 -0
- package/esm2015/lib/shared/components/workbasket-filters/index.js +3 -0
- package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.component.js +448 -0
- package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.module.js +60 -0
- package/esm2015/lib/shared/domain/case-view/role-request.model.js +1 -1
- package/esm2015/lib/shared/domain/work-allocation/case-worker.model.js +2 -0
- package/esm2015/lib/shared/domain/work-allocation/judicial-worker.model.js +2 -0
- package/esm2015/lib/shared/index.js +2 -1
- package/esm2015/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.js +29 -0
- package/esm2015/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.js +29 -0
- package/esm2015/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.js +154 -0
- package/esm2015/lib/shared/pipes/complex/ccd-tab-fields.pipe.js +31 -0
- package/esm2015/lib/shared/pipes/complex/cdd-page-fields.pipe.js +39 -0
- package/esm2015/lib/shared/pipes/complex/fields-filter.pipe.js +103 -0
- package/esm2015/lib/shared/pipes/complex/index.js +7 -0
- package/esm2015/lib/shared/pipes/index.js +3 -2
- package/esm2015/lib/shared/pipes/pipes.module.js +26 -9
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js +22295 -4295
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
- package/lib/shared/components/activity/activity-banner/activity-banner.component.d.ts +12 -0
- package/lib/shared/components/activity/activity-banner/activity-banner.component.d.ts.map +1 -0
- package/lib/shared/components/activity/activity-banner/index.d.ts +2 -0
- package/lib/shared/components/activity/activity-banner/index.d.ts.map +1 -0
- package/lib/shared/components/activity/activity-icon/activity-icon.component.d.ts +11 -0
- package/lib/shared/components/activity/activity-icon/activity-icon.component.d.ts.map +1 -0
- package/lib/shared/components/activity/activity-icon/index.d.ts +2 -0
- package/lib/shared/components/activity/activity-icon/index.d.ts.map +1 -0
- package/lib/shared/components/activity/activity.component.d.ts +32 -0
- package/lib/shared/components/activity/activity.component.d.ts.map +1 -0
- package/lib/shared/components/activity/activity.module.d.ts +12 -0
- package/lib/shared/components/activity/activity.module.d.ts.map +1 -0
- package/lib/shared/components/activity/index.d.ts +5 -0
- package/lib/shared/components/activity/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-create/case-create.component.d.ts +33 -0
- package/lib/shared/components/case-editor/case-create/case-create.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-create/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-create/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts +50 -0
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts +26 -0
- package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-confirm/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-confirm/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts +26 -0
- package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-form/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-form/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.d.ts +10 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +100 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-page/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +123 -0
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-submit/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-submit/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-editor.module.d.ts +27 -0
- package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.d.ts +31 -0
- package/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts +11 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts +32 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/index.d.ts +4 -0
- package/lib/shared/components/case-editor/case-event-completion/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-progress/case-progress.component.d.ts +30 -0
- package/lib/shared/components/case-editor/case-progress/case-progress.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-progress/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-progress/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/domain/event-completion-params.model.d.ts +7 -0
- package/lib/shared/components/case-editor/domain/event-completion-params.model.d.ts.map +1 -0
- package/lib/shared/components/case-editor/domain/event-completion-portal-types.model.d.ts +5 -0
- package/lib/shared/components/case-editor/domain/event-completion-portal-types.model.d.ts.map +1 -0
- package/lib/shared/components/case-editor/editor.routing.d.ts +3 -0
- package/lib/shared/components/case-editor/editor.routing.d.ts.map +1 -0
- package/lib/shared/components/case-editor/index.d.ts +13 -0
- package/lib/shared/components/case-editor/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts +23 -0
- package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/case-worker.service.d.ts +16 -0
- package/lib/shared/components/case-editor/services/case-worker.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/convert-href-to-router.service.d.ts +14 -0
- package/lib/shared/components/case-editor/services/convert-href-to-router.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts +33 -0
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/event-trigger.service.d.ts +10 -0
- package/lib/shared/components/case-editor/services/event-trigger.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/index.d.ts +12 -0
- package/lib/shared/components/case-editor/services/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/judicial-worker.service.d.ts +16 -0
- package/lib/shared/components/case-editor/services/judicial-worker.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/page-validation.service.d.ts +17 -0
- package/lib/shared/components/case-editor/services/page-validation.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/wizard-factory.service.d.ts +6 -0
- package/lib/shared/components/case-editor/services/wizard-factory.service.d.ts.map +1 -0
- package/lib/shared/components/case-header/case-header.component.d.ts +15 -0
- package/lib/shared/components/case-header/case-header.component.d.ts.map +1 -0
- package/lib/shared/components/case-header/case-header.module.d.ts +11 -0
- package/lib/shared/components/case-header/case-header.module.d.ts.map +1 -0
- package/lib/shared/components/case-header/index.d.ts +3 -0
- package/lib/shared/components/case-header/index.d.ts.map +1 -0
- package/lib/shared/components/case-history/case-history.component.d.ts +33 -0
- package/lib/shared/components/case-history/case-history.component.d.ts.map +1 -0
- package/lib/shared/components/case-history/case-history.module.d.ts +14 -0
- package/lib/shared/components/case-history/case-history.module.d.ts.map +1 -0
- package/lib/shared/components/case-history/domain/case-history.model.d.ts +16 -0
- package/lib/shared/components/case-history/domain/case-history.model.d.ts.map +1 -0
- package/lib/shared/components/case-history/index.d.ts +3 -0
- package/lib/shared/components/case-history/index.d.ts.map +1 -0
- package/lib/shared/components/case-history/services/case-history.service.d.ts +17 -0
- package/lib/shared/components/case-history/services/case-history.service.d.ts.map +1 -0
- package/lib/shared/components/case-list/case-list.component.d.ts +47 -0
- package/lib/shared/components/case-list/case-list.component.d.ts.map +1 -0
- package/lib/shared/components/case-list/case-list.module.d.ts +13 -0
- package/lib/shared/components/case-list/case-list.module.d.ts.map +1 -0
- package/lib/shared/components/case-list/index.d.ts +3 -0
- package/lib/shared/components/case-list/index.d.ts.map +1 -0
- package/lib/shared/components/case-list-filters/case-list-filters.component.d.ts +19 -0
- package/lib/shared/components/case-list-filters/case-list-filters.component.d.ts.map +1 -0
- package/lib/shared/components/case-list-filters/case-list-filters.module.d.ts +13 -0
- package/lib/shared/components/case-list-filters/case-list-filters.module.d.ts.map +1 -0
- package/lib/shared/components/case-list-filters/index.d.ts +3 -0
- package/lib/shared/components/case-list-filters/index.d.ts.map +1 -0
- package/lib/shared/components/case-timeline/case-timeline.component.d.ts +27 -0
- package/lib/shared/components/case-timeline/case-timeline.component.d.ts.map +1 -0
- package/lib/shared/components/case-timeline/case-timeline.module.d.ts +13 -0
- package/lib/shared/components/case-timeline/case-timeline.module.d.ts.map +1 -0
- package/lib/shared/components/case-timeline/index.d.ts +3 -0
- package/lib/shared/components/case-timeline/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts +19 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts +40 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.d.ts +17 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts +12 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +41 -0
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-event-trigger/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-event-trigger/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +90 -0
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-full-access-view/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-full-access-view/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts +14 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts +49 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.d.ts +15 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +33 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts +9 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts +12 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-view/case-view.component.d.ts +32 -0
- package/lib/shared/components/case-viewer/case-view/case-view.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-view/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-view/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-viewer.component.d.ts +32 -0
- package/lib/shared/components/case-viewer/case-viewer.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts +36 -0
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/index.d.ts +14 -0
- package/lib/shared/components/case-viewer/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/case-printer.component.d.ts +24 -0
- package/lib/shared/components/case-viewer/printer/case-printer.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/index.d.ts +4 -0
- package/lib/shared/components/case-viewer/printer/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/pipes/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/printer/pipes/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.d.ts +24 -0
- package/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/services/case.resolver.d.ts +29 -0
- package/lib/shared/components/case-viewer/services/case.resolver.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts +26 -0
- package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/services/index.d.ts +3 -0
- package/lib/shared/components/case-viewer/services/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/viewer.routing.d.ts +3 -0
- package/lib/shared/components/case-viewer/viewer.routing.d.ts.map +1 -0
- package/lib/shared/components/create-case-filters/create-case-filters-selection.model.d.ts +7 -0
- package/lib/shared/components/create-case-filters/create-case-filters-selection.model.d.ts.map +1 -0
- package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts +57 -0
- package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts.map +1 -0
- package/lib/shared/components/create-case-filters/create-case-filters.module.d.ts +12 -0
- package/lib/shared/components/create-case-filters/create-case-filters.module.d.ts.map +1 -0
- package/lib/shared/components/create-case-filters/index.d.ts +4 -0
- package/lib/shared/components/create-case-filters/index.d.ts.map +1 -0
- package/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.d.ts +12 -0
- package/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.d.ts.map +1 -0
- package/lib/shared/components/dialogs/delete-or-cancel-dialog/index.d.ts +2 -0
- package/lib/shared/components/dialogs/delete-or-cancel-dialog/index.d.ts.map +1 -0
- package/lib/shared/components/dialogs/dialogs.module.d.ts +13 -0
- package/lib/shared/components/dialogs/dialogs.module.d.ts.map +1 -0
- package/lib/shared/components/dialogs/document-dialog/index.d.ts +2 -0
- package/lib/shared/components/dialogs/document-dialog/index.d.ts.map +1 -0
- package/lib/shared/components/dialogs/index.d.ts +6 -0
- package/lib/shared/components/dialogs/index.d.ts.map +1 -0
- package/lib/shared/components/dialogs/remove-dialog/index.d.ts +2 -0
- package/lib/shared/components/dialogs/remove-dialog/index.d.ts.map +1 -0
- package/lib/shared/components/dialogs/save-or-discard-dialog/index.d.ts +2 -0
- package/lib/shared/components/dialogs/save-or-discard-dialog/index.d.ts.map +1 -0
- package/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.d.ts +13 -0
- package/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.d.ts.map +1 -0
- package/lib/shared/components/error/callback-errors.component.d.ts +25 -0
- package/lib/shared/components/error/callback-errors.component.d.ts.map +1 -0
- package/lib/shared/components/error/domain/error-context.d.ts +5 -0
- package/lib/shared/components/error/domain/error-context.d.ts.map +1 -0
- package/lib/shared/components/error/domain/index.d.ts +2 -0
- package/lib/shared/components/error/domain/index.d.ts.map +1 -0
- package/lib/shared/components/error/errors.module.d.ts +10 -0
- package/lib/shared/components/error/errors.module.d.ts.map +1 -0
- package/lib/shared/components/error/index.d.ts +4 -0
- package/lib/shared/components/error/index.d.ts.map +1 -0
- package/lib/shared/components/error-message/error-message.component.d.ts +8 -0
- package/lib/shared/components/error-message/error-message.component.d.ts.map +1 -0
- package/lib/shared/components/error-message/error-message.module.d.ts +12 -0
- package/lib/shared/components/error-message/error-message.module.d.ts.map +1 -0
- package/lib/shared/components/error-message/index.d.ts +3 -0
- package/lib/shared/components/error-message/index.d.ts.map +1 -0
- package/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.d.ts +10 -0
- package/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.d.ts +10 -0
- package/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/components/task-assigned/task-assigned.component.d.ts +23 -0
- package/lib/shared/components/event-start/components/task-assigned/task-assigned.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.d.ts +7 -0
- package/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/components/task-conflict/task-conflict.component.d.ts +9 -0
- package/lib/shared/components/event-start/components/task-conflict/task-conflict.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.d.ts +10 -0
- package/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts +20 -0
- package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts.map +1 -0
- package/lib/shared/components/event-start/event-start.component.d.ts +20 -0
- package/lib/shared/components/event-start/event-start.component.d.ts.map +1 -0
- package/lib/shared/components/event-start/event-start.module.d.ts +17 -0
- package/lib/shared/components/event-start/event-start.module.d.ts.map +1 -0
- package/lib/shared/components/event-start/index.d.ts +10 -0
- package/lib/shared/components/event-start/index.d.ts.map +1 -0
- package/lib/shared/components/event-start/models/event-start-state-machine-context.model.d.ts +13 -0
- package/lib/shared/components/event-start/models/event-start-state-machine-context.model.d.ts.map +1 -0
- package/lib/shared/components/event-start/models/event-start-states-enum.model.d.ts +15 -0
- package/lib/shared/components/event-start/models/event-start-states-enum.model.d.ts.map +1 -0
- package/lib/shared/components/event-start/models/index.d.ts +3 -0
- package/lib/shared/components/event-start/models/index.d.ts.map +1 -0
- package/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.d.ts +15 -0
- package/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.d.ts.map +1 -0
- package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts +40 -0
- package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts.map +1 -0
- package/lib/shared/components/event-start/services/index.d.ts +2 -0
- package/lib/shared/components/event-start/services/index.d.ts.map +1 -0
- package/lib/shared/components/event-trigger/event-trigger.component.d.ts +24 -0
- package/lib/shared/components/event-trigger/event-trigger.component.d.ts.map +1 -0
- package/lib/shared/components/event-trigger/event-trigger.module.d.ts +11 -0
- package/lib/shared/components/event-trigger/event-trigger.module.d.ts.map +1 -0
- package/lib/shared/components/event-trigger/index.d.ts +3 -0
- package/lib/shared/components/event-trigger/index.d.ts.map +1 -0
- package/lib/shared/components/index.d.ts +20 -0
- package/lib/shared/components/index.d.ts.map +1 -0
- package/lib/shared/components/loading-spinner/index.d.ts +2 -0
- package/lib/shared/components/loading-spinner/index.d.ts.map +1 -0
- package/lib/shared/components/loading-spinner/loading-spinner.component.d.ts +7 -0
- package/lib/shared/components/loading-spinner/loading-spinner.component.d.ts.map +1 -0
- package/lib/shared/components/pagination/index.d.ts +3 -0
- package/lib/shared/components/pagination/index.d.ts.map +1 -0
- package/lib/shared/components/pagination/pagination.component.d.ts +26 -0
- package/lib/shared/components/pagination/pagination.component.d.ts.map +1 -0
- package/lib/shared/components/pagination/pagination.module.d.ts +10 -0
- package/lib/shared/components/pagination/pagination.module.d.ts.map +1 -0
- package/lib/shared/components/palette/address/index.d.ts +3 -0
- package/lib/shared/components/palette/address/index.d.ts.map +1 -0
- package/lib/shared/components/palette/case-link/index.d.ts +3 -0
- package/lib/shared/components/palette/case-link/index.d.ts.map +1 -0
- package/lib/shared/components/palette/complex/index.d.ts +0 -6
- package/lib/shared/components/palette/complex/index.d.ts.map +1 -1
- package/lib/shared/components/palette/complex/write-complex-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/index.d.ts +32 -0
- package/lib/shared/components/palette/index.d.ts.map +1 -0
- package/lib/shared/components/palette/palette.module.d.ts +87 -93
- package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
- package/lib/shared/components/search-result/index.d.ts +3 -0
- package/lib/shared/components/search-result/index.d.ts.map +1 -0
- package/lib/shared/components/search-result/search-result.component.d.ts +111 -0
- package/lib/shared/components/search-result/search-result.component.d.ts.map +1 -0
- package/lib/shared/components/search-result/search-result.module.d.ts +16 -0
- package/lib/shared/components/search-result/search-result.module.d.ts.map +1 -0
- package/lib/shared/components/workbasket-filters/index.d.ts +3 -0
- package/lib/shared/components/workbasket-filters/index.d.ts.map +1 -0
- package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts +85 -0
- package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts.map +1 -0
- package/lib/shared/components/workbasket-filters/workbasket-filters.module.d.ts +12 -0
- package/lib/shared/components/workbasket-filters/workbasket-filters.module.d.ts.map +1 -0
- package/lib/shared/domain/case-view/role-request.model.d.ts.map +1 -1
- package/lib/shared/domain/work-allocation/case-worker.model.d.ts +14 -0
- package/lib/shared/domain/work-allocation/case-worker.model.d.ts.map +1 -0
- package/lib/shared/domain/work-allocation/judicial-worker.model.d.ts +8 -0
- package/lib/shared/domain/work-allocation/judicial-worker.model.d.ts.map +1 -0
- package/lib/shared/index.d.ts +1 -0
- package/lib/shared/index.d.ts.map +1 -1
- package/lib/shared/{components/palette → pipes}/complex/ccd-collection-table-value-case-fields.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/ccd-cyapage-label-filter.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/ccd-read-fields-filter.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/ccd-tab-fields.pipe.d.ts +2 -2
- package/lib/shared/pipes/complex/ccd-tab-fields.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/cdd-page-fields.pipe.d.ts +2 -2
- package/lib/shared/pipes/complex/cdd-page-fields.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/fields-filter.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/fields-filter.pipe.d.ts.map +1 -0
- package/lib/shared/pipes/complex/index.d.ts +7 -0
- package/lib/shared/pipes/complex/index.d.ts.map +1 -0
- package/lib/shared/pipes/index.d.ts +2 -1
- package/lib/shared/pipes/index.d.ts.map +1 -1
- package/lib/shared/pipes/pipes.module.d.ts +7 -2
- package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/esm2015/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.js +0 -29
- package/esm2015/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.js +0 -29
- package/esm2015/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.js +0 -154
- package/esm2015/lib/shared/components/palette/complex/ccd-tab-fields.pipe.js +0 -31
- package/esm2015/lib/shared/components/palette/complex/cdd-page-fields.pipe.js +0 -39
- package/esm2015/lib/shared/components/palette/complex/fields-filter.pipe.js +0 -103
- package/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/ccd-tab-fields.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/cdd-page-fields.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/fields-filter.pipe.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["i0","ctx_r1","email","phone","workhours","FooterComponent","title","ctx_r2","selectors","inputs","isSolicitor","ngContentSelectors","decls","vars","consts","template","rf","ctx","FooterComponent_div_2_Template","FooterComponent_div_3_Template","Component","args","selector","templateUrl","styleUrls","Input","HeaderBarComponent","this","signOutRequest","EventEmitter","prototype","signOut","emit","username","outputs","HeaderBarComponent_div_3_Template","HeaderBarComponent_div_4_Template","HeaderBarComponent_div_9_Template","Output","NavigationComponent","ctx_r0","label","imageLink","NavigationItemComponent","link","NavigationItemComponent_input_3_Template","PhaseComponent","phaseLabel","phaseLink","HeadersModule","CommonModule","RouterModule","ngJitMode","declarations","imports","exports","NgModule","BodyComponent","encapsulation","ViewEncapsulation","None","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","s","Symbol","iterator","m","call","next","value","done","TypeError","__read","n","e","ar","push","error","__spread","concat","_r8_1","_r6","hourChange","i0__namespace","inputFocus","ctx_r3","hourId","displayHour","_c0","isInvalid","_r13_1","_r11","minuteChange","ctx_r4","minuteId","displayMinute","_r18_1","_r16","secondChange","ctx_r5","secondId","displaySecond","DateInputComponent","isTouched","displayDay","displayMonth","displayYear","DATE_FORMAT","rawValue","ngOnInit","mandatory","isDateTime","hour","minute","second","writeValue","obj","removeMilliseconds","_a","split","datePart","timePart","dateValues","year","month","day","timeParts","validate","control","viewValue","required","isDateFormat","getValueForValidation","pattern","registerOnChange","fn","propagateChange","registerOnTouched","ngOnDestroy","dayChange","monthChange","yearChange","touch","formControl","markAsTouched","markAsUntouched","dayId","id","monthId","yearId","date","pad","join","val","test","num","padNum","undefined","toString","replace","dateTime","type","features","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","NG_VALIDATORS","_r21_1","_r0","_r1","_r2","DateInputComponent_div_16_Template","DateInputComponent_div_17_Template","DateInputComponent_div_18_Template","providers","AlertMessageType","AlertComponent","showIcon","alertMessageType","TYPE_WARNING","TYPE_SUCCESS","TYPE_ERROR","TYPE_INFORMATION","AlertComponent_ng_container_2_Template","AlertComponent_ng_container_3_Template","AlertComponent_ng_container_4_Template","AlertComponent_ng_container_5_Template","WARNING","ERROR","SUCCESS","INFORMATION","AlertIconClassPipe","transform","CLASS_SUCCESS","CLASS_WARNING","pure","Pipe","name","AlertModule","TabComponent","selected","_r4_1","panel_r1","$implicit","show","_c1","_c2","TabsComponent","route","panelIds","ngAfterContentInit","_this","panels","forEach","panel","snapshot","fragment","toArray","indexOf","i1","ActivatedRoute","contentQueries","dirIndex","TabsComponent_li_2_Template","tabs","ViewChildren","ContentChildren","TabsModule","ConditionalShowRegistrarService","registeredDirectives","register","newDirective","reset","token","factory","Injectable","GreyBarService","rendererFactory","fieldsToggledToShow","renderer","createRenderer","showGreyBar","field","el","isCollection","addGreyBar","removeGreyBar","divSelector","nativeElement","querySelector","removeClass","addToggledToShow","fieldId","removeToggledToShow","filter","wasToggledToShow","find","addClass","RendererFactory2","FormatTranslatorService","translate","javaFormat","result","prev","inQuote","maybePush","flag","javaFormat_1","javaFormat_1_1","showOnlyDates","dateFormat","includes","removeTime","trim","hasDate","toLowerCase","is24Hour","hasNoDay","hasNoDayAndMonth","hasHours","hasMinutes","hasSeconds","DatePipe","formatTrans","zone","format","resultDate","match","DATE_FORMAT_REGEXP","offsetDate","getDate","getOffsetDate","translateDateFormat","moment","MONTHS","getMonth","getFullYear","getHour","getHours","getMinutes","getSeconds","toInt","parsedDate","Date","parse","isNaN","shortISO","toLocaleDateString","reverse","thisMoment","localOffset","getTimezoneOffset","getTime","minutes","seconds","hourStr","hourNum","str","parseInt","RegExp","i1.FormatTranslatorService","WizardPageField","FixedListItem","FieldType","Type","CaseField","_list_items","get","isDynamic","_value","code","set","list_items","field_type","fixed_list_items","items","isComplexDisplay","display_context_parameter","extractBracketValue","isComplexEntry","isComplex","isReadonly","isOptional","isMandatory","_","isEmpty","display_context","toUpperCase","some","t","isCaseLink","complex_fields","cf","fmt","paramName","leftBracket","rightBracket","a","startsWith","substr","Expose","FieldsUtils","convertToCaseField","plainToClassFromExist","toValuesMap","caseFields","valueMap","prepareValue","getType","elem","slice","isObject","isNonEmptyObject","keys","isArray","areCollectionValuesSimpleFields","fieldValue","isCollectionOfSimpleTypes","isMultiSelectValue","form","isNonEmptyArray","isCollectionWithValue","pageFormFields","cloneObject","assign","getCaseFields","caseView","caseDataFields","reduce","acc","tab","fields","metadataFields","caseField","findIndex","metadataField","addCaseFieldAndComponentReferences","comp","containsNonEmptyValues","object","values","map","objectRefs","hasNonNullPrimitive","x","constructor","y","handleNestedDynamicLists","jsonBody","case_fields","setDynamicListDefinition","valueMap_1","complexField","getMoneyGBP","currencyPipe","getLabel","datePipe","textForInvalidField","getFixedListLabelByCodeOrEmpty","relevantItem","item","invalidValue","caseFieldType","rootCaseField","SERVER_RESPONSE_FIELD_TYPE_COMPLEX","SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE","dynamicListValue","getDynamicListValue","complexValue","data","formatted_value","console","log","SERVER_RESPONSE_FIELD_TYPE_COLLECTION","collection_field_type","jsonBlock","getNestedFieldValues","jsonData","output","elementKey","buildCanShowPredicate","eventTrigger","currentState","getCurrentEventState","page","parsedShowCondition","mergeCaseFieldsAndFormFields","controls","cloneCaseField","formFields","mergeFields","DEFAULT_MERGE_FUNCTION","mergeLabelCaseFieldsAndFormFields","LABEL_MERGE_FUNCTION","controlIterator","aControl","formArrayFn","formGroupFn","controlFn","FormArray","FormGroup","FormControl","mergeFunction","LABEL_SUFFIX","CurrencyPipe","idx","f","elements","ShowCondition","condition","orConditions","andConditions","search","OR_CONDITION_REGEXP","AND_CONDITION_REGEXP","addPathPrefixToCondition","showCondition","pathPrefix","extractConditions","getInstance","instance","instanceCache","hiddenCannotChange","conditions","allUnchangeable","path","getField","head","shift","ft","conditions_1","conditions_1_1","conditionsArray","separator","CONTAINS","CONDITION_EQUALS","CONDITION_NOT_EQUALS","matchAndConditions","updatePathName","matchByContextFields","contextFields","pathName_1","pathTail","pathFinalIndex_1","pop","mappedPathTail","Number","orCondition","matchEqualityCondition","every","andCondition","conditionSeparator","_b","tail","currentValue","findValueForComplexCondition","expectedValue","unquoted","checkValueContains","checkValueEquals","conditionSeparaor","checkMultiSelectListEquals","endsWith","removeStarChar","checkValueNotEquals","okIfBothEmpty","formatCurrentValue","expectedValues","sort","values_1","getValue","findValueForComplexConditionInArray","findValueForComplexConditionForPathIfAny","arrayIndex","dropNumberPath","isDynamicList","dynamiclist","_score","has","substring","right","Map","Constants","MANDATORY","REGEX_WHITESPACES","FormValidatorsService","addValidators","CUSTOM_VALIDATED_TYPES","validators","Validators","regular_expression","emptyValidator","min","minLength","max","maxLength","validator","setValidators","AbstractFormFieldComponent","idPrefix","registerControl","container","parent","formGroup","existing","addControlToParent","addControlToFormArray","addControlToFormGroup","index","setControl","addControl","Directive","AbstractFieldWriteComponent","_super","isExpanded","isInSearchBlock","fixCaseField","__","create","__extends","ngOnChanges","changes","change","createElementId","elementId","ConditionalShowFormDirective","fieldsUtils","handleFormControl","evaluateControl","handleFormArray","formArray","handleFormGroup","groupControl","cKey","ngAfterViewInit","evalAllShowHideConditions","subscribeToFormChanges","unsubscribeFromFormChanges","formChangesSubscription","valueChanges","pipe","debounceTime","subscribe","component","evaluateCondition","hidden","show_condition","condResult","allFieldValues","buildPath","disabled","enable","emitEvent","disable","getCurrentPagesReadOnlyAndFormFieldValues","getFormFieldsValuesIncludingDisabled","getRawValue","unsubscribe","i1.FieldsUtils","ConditionalShowModule","FieldTypeSanitiser","sanitiseLists","FIELD_TYPE_DYNAMIC_RADIO_LIST","FIELD_TYPE_DYNAMIC_LIST","convertStringToDynamicListOutput","FIELD_TYPE_COMPLEX","FIELD_TYPE_COLLECTION","formElement","stringValue","listItems","getListItems","matches","PlaceholderService","PlaceholderSubstitutor","FormValueService","fieldTypeSanitiser","getFieldValue","fieldKey","colIndex","fieldIds","currentFieldId","currentForm","removeMultiSelectLabels","data_1","data_1_1","keys_1","keys_1_1","isReadOnly","isLabel","isEmptyData","allEmpty","_c","clearOptionalEmpty","clearEmpty","sanitise","sanitiseObject","sanitiseCaseReference","reference","filterCurrentPageFields","editForm","cloneForm","JSON","stringify","element","sanitiseDynamicLists","clearNonCaseFields","dataKey","removeNullLabels","caseFields_1","caseFields_1_1","collection","collection_1","e_5","collection_1_1","removeEmptyDocuments","caseFields_2","caseFields_2_1","collection_2","e_7","collection_2_1","removeUnnecessaryFields","clearNonCase","caseFields_3","caseFields_3_1","removeInvalidCollectionData","collection_3","e_9","collection_3_1","objCollection","removeEmptyCollectionsWithMinValidation","caseFields_4","caseFields_4_1","rawObject","sanitisedObject","documentFieldKeys","sanitiseValue","String","sanitiseArray","rawArray","i1.FieldTypeSanitiser","resolvePlaceholders","stringToResolve","resolvedFormValues","originalStringToResolve","wrapPlaceholder","PLACEHOLDER_START","PLACEHOLDER_END","hasUnresolvedPlaceholder","resetPlaceholderSubstitutor","doesPlaceholderContainCollectionItems","isScanningStringToResolve","isStartPlaceholderAndNotCollecting","setStartCollecting","isCollecting","isClosingPlaceholder","substitute","isOpeningPlaceholder","appendCharacter","scanIndex","appendOriginalStringIfCollectionItemAsPlaceholder","numberCollectionItemsAsPlaceholder","PLACEHOLDER_PATTERN","isStartingPlaceholder","charAt","OPENING_PLACEHOLDER","CLOSING_PLACEHOLDER","collectionItemIndex","fieldIdToSubstitute","startSubstitutionIndex","isMatchingPlaceholderPattern","isFieldIdInFormFields","updateNumberOfCollectionItemsAsPlaceholder","isFieldIdToSubstituteReferringItself","substituteWithEmptyString","substituteFromFormFields","NEW_LINE","PLACEHOLDER_CONTENT_PATTERN","getSubstitutionValueOrEmpty","getSubstitutionValueLengthOrZero","getNumberOfCollectionItemsIfAny","pageFormFieldsClone","STARTING_PLACEHOLDER","newNumber","Math","doSubstitution","resetScanIndexAfterSubstitution","placeholder","replacedString","LabelSubstitutorDirective","placeholderService","elementsToSubstitute","initialLabel","initialHintText","hint_text","getReadOnlyAndFormFields","shouldSubstitute","uniqueContextFields","removeDuplicates","original","unique","i2.PlaceholderService","LabelSubstitutorModule","FocusElementDirective","focus","focusElement","selectRootElement","ElementRef","Renderer2","FocusElementModule","DisplayMode","ActivityInfo","Activity","AddressModel","AddressLine1","AddressLine2","AddressLine3","PostTown","County","PostCode","Country","Alert","WizardPage","getCol1Fields","wizardProps","page_column_no","getCol2Fields","isMultiColumn","CaseEventTrigger","hasFields","hasPages","wizard_pages","CaseViewEvent","CaseViewTrigger","DELETE","CaseEvent","CaseState","CaseTypeLite","CaseType","EventCaseField","Jurisdiction","Banner","CaseTab","CaseView","CasePrintDocument","HRef","DocumentLinks","Document","Embedded","DocumentData","FormDocument","HttpError","timestamp","toISOString","DEFAULT_ERROR","message","DEFAULT_MESSAGE","status","DEFAULT_STATUS","exception","details","callbackErrors","callbackWarnings","from","response","OrganisationConverter","toSimpleAddress","organisationModel","simpleAddress","addressLine1","addressLine2","addressLine3","townCity","county","country","postCode","toSimpleOrganisationModel","organisationIdentifier","address","hasRoles","profile","user","idam","roles","Profile","isCourtAdmin","Field","elementPath","SearchResultViewColumn","SearchResultViewItem","DRAFT_PREFIX","Draft","stripDraftId","draftId","isDraft","SearchResultView","hasDrafts","results","case_id","CaseDetails","CaseEventData","WorkbasketInputModel","order","WorkbasketInput","PaginationMetadata","SortOrder","SortParameters","comparator","sortOrder","ComplexFieldOverride","CaseFieldBuilder","withACLs","acls","withId","withFieldType","withDisplayContext","withDisplayContextParameter","withHidden","withHintText","withLabel","withOrder","withSecurityLabel","security_label","withShowCondition","withShowSummaryContentOption","option","show_summary_content_option","withValue","withListValue","build","textFieldType","CaseReferencePipe","caseReference","g1","g2","g3","g4","CcdCaseTitlePipe","caseTitle","caseFieldValues","i1.PlaceholderService","i2.FieldsUtils","SortSearchResultPipe","searchResults","sortParameters","isUndefined","compare","DESCENDING","PipesModule","AbstractAppConfig","getDocumentManagementUrlV2","getDocumentSecureMode","getRemotePrintServiceUrl","getUserInfoApiUrl","getAccessManagementMode","getAccessManagementBasicViewMock","getAccessManagementRequestReviewMockModel","getLocationRefApiUrl","getCamRoleAssignmentsApiUrl","AuthService","appConfig","document","signIn","loginUrl","getLoginUrl","clientId","getOAuth2ClientId","redirectUri","encodeURIComponent","location","href","origin","PATH_OAUTH2_REDIRECT","DOCUMENT","Inject","HttpErrorService","authService","convertToHttpError","httpError","HttpErrorResponse","headers","CONTENT_TYPE","setError","removeError","handle","redirectIfNotAuthorised","throwError","i1.AuthService","HttpService","httpclient","httpErrorService","url","options","errorHandler","setDefaultValue","catchError","res","post","body","put","delete","observe","withCredentials","HttpHeaders","HEADER_ACCEPT","HEADER_CONTENT_TYPE","HttpClient","i2.HttpErrorService","SessionStorageService","getItem","sessionStorage","setItem","removeItem","clear","ActivityService","http","sessionStorageService","userAuthorised","activityUrl","handleHttpError","getOptions","userDetails","getActivities","caseId","_i","postActivity","activity","verifyUserIsAuthorized","DUMMY_CASE_REFERENCE","getActivityUrl","i1.HttpService","i2.AbstractAppConfig","i3.SessionStorageService","ActivityPollingService","activityService","ngZone","config","pendingRequests","pollConfig","interval","getActivityNexPollRequestMs","attempts","getActivityRetry","backgroundPolling","batchCollectionDelayMs","getActivityBatchCollectionDelayMs","maxRequestsPerBatch","getActivityMaxRequestPerBatch","isEnabled","subscribeToActivity","Subject","subject","size","runOutsideAngular","currentTimeoutHandle","setTimeout","run","flushRequests","stopPolling","pollActivitiesSubscription","clearTimeout","requests","performBatchRequest","pollActivities","caseIds","polling","apply","EMPTY","postViewActivity","ACTIVITY_VIEW","postEditActivity","ACTIVITY_EDIT","activities","err","activityType","pollingConfig","i1.ActivityService","NgZone","AddressParser","classification","CLASSIFICATION_CODE","addressModel","parseAddressLine1","parseAddressLine2","parseAddressLine3","POSTCODE","POST_TOWN","AddressesService","UK","addressLine","RD06","SUB_BUILDING_NAME","ORGANISATION_NAME","DEPARTMENT_NAME","PO_BOX_NUMBER","prefixWithCommaIfPresent","BUILDING_NAME","removeNonAddressValues","BUILDING_NUMBER","THOROUGHFARE_NAME","DEPENDENT_LOCALITY","DOUBLE_DEPENDENT_LOCALITY","DEPENDENT_THOROUGHFARE_NAME","line","removeUndefinedString","removeInitialComma","removeEmptySpaces","getAddressesForPostcode","postcode","getPostcodeLookupUrl","addresses","DPA","formatAddressLines","shiftAddressLinesUp","toCapitalCase","sentence","AlertService","router","preservedError","preservedWarning","preservedSuccess","preserveAlerts","successes","Observable","observer","successObserver","publish","refCount","errors","errorObserver","warnings","warningObserver","alerts","alertObserver","events","event","NavigationStart","preserveMessages","alert","level","warning","success","preserve","setPreserveAlerts","urlInfo","currentUrlIncludesInfo","urlInfo_1","urlInfo_1_1","urlSnip","isPreserveAlerts","msgObject","Router","CaseFieldService","DocumentManagementService","uploadFile","formData","getDocStoreUrl","delay","RESPONSE_DELAY","getMediaViewerInfo","documentFieldValue","mediaViewerInfo","document_binary_url","transformDocumentUrl","document_filename","content_type","getContentType","annotation_api_url","getAnnotationApiUrl","case_jurisdiction","jurisdiction","fileExtension","position","lastIndexOf","isImage","IMAGE","isWord","WORD","isExcel","EXCEL","isPowerpoint","POWERPOINT","TXT","RTF","PDF","imageType","imagesList","wordType","wordList","excelType","excelList","powerpointType","powerpointList","documentBinaryUrl","remoteHrsPattern","getRemoteHrsUrl","getHrsUrl","remoteDocumentManagementPattern","getRemoteDocumentManagementUrl","getDocumentManagementUrl","DraftService","errorService","createDraft","ctid","eventData","saveDraftEndpoint","getCreateOrUpdateDraftsUrl","V2_MEDIATYPE_DRAFT_CREATE","updateDraft","V2_MEDIATYPE_DRAFT_UPDATE","getDraft","getViewOrDeleteDraftsUrl","V2_MEDIATYPE_DRAFT_READ","deleteDraft","V2_MEDIATYPE_DRAFT_DELETE","createOrUpdateDraft","caseTypeId","caseEventData","i1.HttpErrorService","ErrorNotifierService","errorSource","asObservable","announceError","EventStatusService","isIncomplete","eventStatus","CALLBACK_STATUS_INCOMPLETE","DELETE_DRAFT_STATUS_INCOMPLETE","CALLBACK_STATUS_COMPLETE","DELETE_DRAFT_STATUS_COMPLETE","FieldsPurger","deleteFieldValue","parentField","fieldType","fieldControl","complexSubField","retain_hidden_value","collectionFieldType_1","complexFieldValues","subFieldId","subCaseField","parentFormGroup","at","documentFieldValues","setValue","clearHiddenFields","wizard","currentPageId","clearHiddenFieldForFieldShowCondition","clearHiddenFieldForPageShowCondition","currentEventState","pages","wp","hasShowConditionPage","isHidden","resetPage","currentPage","getPage","wizard_page_fields","wpf","case_field","findCaseFieldByWizardPageFieldId","hasShowConditionField","resetField","retainHiddenValueByFieldType","fieldGroup","caseRoleFormControl","wizardPageField","case_field_id","wizardPage","getShowConditionKey","fieldControls_1","FormErrorService","mapFieldErrors","errorKey","getFormControl","setErrors","group","inArray","JurisdictionService","selectedJurisdictionSource","selectedJurisdiction","announceSelectedJurisdiction","NavigationOrigin","BannersService","httpService","getBanners","jurisdictionReferences","getBannersUrl","V2_MEDIATYPE_BANNERS","params","HttpParams","append","banners","NavigationNotifierService","navigationSource","BehaviorSubject","navigation","announceNavigation","OrderService","sortAsc","DEFAULT_COMPARE_FUNCTION","array","sortingFunction","aOrdered","bOrdered","ProfileService","getCaseDataUrl","URL","V2_MEDIATYPE_USER_PROFILE","plainToClass","ProfileNotifier","profileSource","announceProfile","RequestOptionsBuilder","includeParam","buildOptions","metaCriteria","caseCriteria","view","_d","criterion","_e","_f","FIELD_PREFIX","HasLoadingState","LoadingService","registered","loading","distinctUntilChanged","generateToken","unregister","window","performance","now","SearchService","requestOptionsBuilder","loadingService","jurisdictionId","getApiUrl","loadingToken","finalize","searchCases","getPaginationPageSize","getSearchInputUrl","getSearchInputs","V2_MEDIATYPE_SEARCH_INPUTS","currentJurisdiction","currentCaseType","searchInputs","isDataValid","Error","VIEW_SEARCH","VIEW_WORKBASKET","i1.AbstractAppConfig","i2.HttpService","i3.RequestOptionsBuilder","i4.LoadingService","RouterHelperService","getUrlSegmentsFromRoot","pathFromRoot","WindowService","locationAssign","setLocalStorage","localStorage","getLocalStorage","clearLocalStorage","removeLocalStorage","setSessionStorage","getSessionStorage","openOnNewTab","open","confirm","WorkbasketInputFilterService","getWorkbasketInputUrl","getWorkbasketInputs","V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS","workbasketInputs","DefinitionsService","getCaseTypes","access","getJurisdictions","DefinitionsModule","SearchResultViewItemComparatorFactory","createSearchResultViewItemComparator","column","case_field_type","textArrayComparator","numberComparator","stringComparator","fieldA","fieldB","OrganisationService","appconfig","mapOrganisation","organisations","organisationsVm","org","contactInformation","getActiveOrganisations","organisations$","getPrdUrl","cacheTimeOut","getCacheTimeOut","orgs","publishReplay","take","of","timer","BrowserService","isFirefox","navigator","userAgent","isSafari","isSafariAgent","isIEOrEdge","LoadingModule","TestRouteSnapshotBuilder","withParent","withParams","withData","queryParams","outlet","routeConfig","root","firstChild","children","paramMap","queryParamMap","typeComplexFields","role","read","update","_delete","show_summary","can_save_draft","event_token","hint","ACLs","displayContext","complexFieldOverride","complex_field_element_id","typeId","fixedListItems","wizardPageFields","pageColumnNumber","complexFieldOverrides","complex_field_overrides"],"sources":["../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/headers.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.html","../../../node_modules/tslib/tslib.es6.js","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert-icon-class.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/conditional-show-registrar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/grey-bar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/format-translator.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/date.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/fixed-list-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/field-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.utils.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/domain/conditional-show.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/commons/constants.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-validators.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-form-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-field-write.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show-form.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/field-type-sanitiser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-value.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/services/placeholder.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/activity/activity.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/addresses/address.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/alert/alert.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-event-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-state.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type-lite.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/event-case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/jurisdiction.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/banner.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-tab.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-print-document.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/document/document-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/http/http-error.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/organisation/organisation-converter.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/profile/profile.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-column.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/draft.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-details.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-event-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/workbasket/workbasket-input.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/pagination-metadata.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-parameters.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field-complex-override.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/case-field-builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/shared.test.fixture.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-reference/case-reference.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-title/ccd-case-title.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/pipes.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/app.config.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/auth/auth.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/session/session-storage.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.polling.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/address-parser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/addresses.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/alert/alert.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/case-field.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/document-management/document-management.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/draft/draft.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/error/error-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/eventStatusService/event-status.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.purger.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/jurisdiction/jurisdiction.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/banners/banners.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-origin.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/order/order.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.notifier.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/request/request.options.builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search/search.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/router/router-helper.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/window/window.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/workbasket/workbasket-input-filter.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/organisation/organisation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/browser/browser.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/test/test-route-snapshot-builder.ts"],"sourcesContent":["<footer class=\"group js-footer\" id=\"footer\" role=\"footer\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"footer-wrapper\">\n\n <!-- Condition: Solicitor -->\n <div *ngIf=\"isSolicitor\" class=\"footer-meta\">\n <div class=\"footer-meta-inner\">\n <ng-content select=\"[footerSolsNavLinks]\"></ng-content>\n <div class=\"open-government-licence\">\n <p class=\"logo\"><a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence</a></p>\n <p>All content is available under the <a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence v3.0</a>, except where otherwise stated</p>\n </div>\n </div>\n\n <div class=\"copyright\">\n <a href=\"https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/copyright-and-re-use/crown-copyright/\">© Crown copyright</a>\n </div>\n </div>\n\n <!-- Condition: Case Worker -->\n <div *ngIf=\"!isSolicitor\" class=\"footer-meta\">\n <div class=\"title\">\n <span class=\"footer-text\">Help</span>\n </div>\n <div class=\"email\">\n <span class=\"footer-text\">Email: <a href=\"mailto:{{email}}\">{{email}}</a></span>\n </div>\n <div class=\"phone\">\n <span class=\"footer-text\">Phone: {{phone}}</span>\n </div>\n <div class=\"work-hours\">\n <span class=\"footer-text\">{{workhours}}</span>\n </div>\n <ng-content select=\"[footerCaseWorkerNavLinks]\"></ng-content>\n </div>\n\n </div>\n</footer>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-footer-bar',\n templateUrl: './footer.html',\n styleUrls: ['./footer.scss']\n})\nexport class FooterComponent {\n\n @Input()\n public email: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public phone: string;\n\n @Input()\n public workhours: string;\n\n}\n","<header role=\"banner\" id=\"global-header\" class=\"with-proposition\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"header-wrapper\">\n\n <div class=\"header-global\" [class.header-logo]=\"isSolicitor\">\n <div *ngIf=\"isSolicitor\">\n <a href=\"https://www.gov.uk\" title=\"Go to the GOV.UK homepage\" id=\"logo\" class=\"content\" style=\"margin-left: 0px;\">\n <img src=\"/img/gov.uk_logotype_crown_invert_trans.png?0.23.0\" width=\"36\" height=\"32\" alt=\"\"> GOV.UK\n </a>\n </div>\n <div class=\"global-header\" *ngIf=\"!isSolicitor\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"header-proposition\">\n <div class=\"content\">\n <a href=\"#proposition-links\" class=\"js-header-toggle menu\">Menu</a>\n <div *ngIf=\"isSolicitor\" id=\"proposition-menu\">\n <div class=\"title-solicitor\">\n <span id=\"proposition-name\">{{title}}</span>\n <ng-content select=\"[headerNavigation]\"></ng-content>\n </div>\n </div>\n\n <div class=\"proposition-right\">\n <span id=\"user-name\">{{username}}</span>\n <a (click)=\"signOut()\" id=\"sign-out\" href=\"javascript:void(0)\">Sign Out</a>\n </div>\n </div>\n </div>\n\n </div>\n</header>\n","import { Component, Input, Output } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'cut-header-bar',\n templateUrl: './header-bar.html',\n styleUrls: ['./header-bar.scss']\n})\nexport class HeaderBarComponent {\n\n @Input()\n public title: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public username: string;\n\n @Output()\n private readonly signOutRequest: EventEmitter<any> = new EventEmitter();\n\n public signOut() {\n this.signOutRequest.emit();\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-bar',\n templateUrl: './navigation.html',\n styleUrls: ['./navigation.scss']\n})\nexport class NavigationComponent {\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div>\n <a [routerLinkActive]=\"'item-bold'\" [routerLink]=\"link\">{{label}}</a>\n <input type=\"image\" alt=\"{{label}} button\" *ngIf=\"imageLink\" src=\"{{imageLink}}\"/>\n</div>\n","<div>\n <nav [class.full-screen]=\"!isSolicitor\" class=\"cut-nav-bar\">\n <ng-content select=\"[leftNavLinks]\"></ng-content>\n <ng-content select=\"[rightNavLinks]\"></ng-content>\n </nav>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-item',\n templateUrl: './navigation-item.html',\n styleUrls: ['./navigation-item.scss']\n})\nexport class NavigationItemComponent {\n\n @Input()\n public label: string;\n\n @Input()\n public link: string;\n\n @Input()\n public imageLink: string;\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-phase-bar',\n templateUrl: './phase.html',\n styleUrls: ['./phase.scss']\n})\nexport class PhaseComponent {\n\n @Input()\n public phaseLabel: string;\n\n @Input()\n public phaseLink: string;\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div [class.full-screen]=\"!isSolicitor\" class=\"phase-banner\">\n <p>\n <strong class=\"phase-tag\">{{phaseLabel}}</strong>\n <span class=\"text-16\">This is a new service – your <a href=\"{{phaseLink}}\" target=\"_blank\" rel=\"noopener\">feedback</a> will help us to improve it.</span>\n </p>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { HeaderBarComponent } from './header-bar/header-bar.component';\nimport { NavigationItemComponent } from './navigation/navigation-item.component';\nimport { NavigationComponent } from './navigation/navigation.component';\nimport { PhaseComponent } from './phase/phase.component';\n\n@NgModule({\n imports: [CommonModule, RouterModule],\n declarations: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent],\n exports: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent]\n})\nexport class HeadersModule {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'cut-body',\n templateUrl: './body.html',\n styleUrls: ['./fonts.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BodyComponent {\n\n}\n","<div class=\"global-display\">\n <ng-content select=\"[topBody]\"></ng-content>\n <ng-content select=\"[leftBody]\"></ng-content>\n <ng-content select=\"[rightBody]\"></ng-content>\n</div>\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 (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\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 function __createBinding(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, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = 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\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\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 __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\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 (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = 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, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","<div class=\"form-date\">\n\n <div class=\"form-group form-group-day\">\n <label class=\"form-label\" [for]=\"dayId()\">Day</label>\n <input #dayInput\n class=\"form-control\"\n [id]=\"dayId()\"\n [name]=\"dayId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayDay\"\n (change)=\"dayChange(dayInput.value)\"\n (keyup)=\"dayChange(dayInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-month\">\n <label class=\"form-label\" [for]=\"monthId()\">Month</label>\n <input #monthInput\n class=\"form-control\"\n [id]=\"monthId()\"\n [name]=\"monthId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayMonth\"\n (change)=\"monthChange(monthInput.value)\"\n (keyup)=\"monthChange(monthInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-year\">\n <label class=\"form-label\" [for]=\"yearId()\">Year</label>\n <input #yearInput\n class=\"form-control\"\n [id]=\"yearId()\"\n [name]=\"yearId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayYear\"\n (change)=\"yearChange(yearInput.value)\"\n (keyup)=\"yearChange(yearInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-hour\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"hourId()\">Hour</label>\n <input #hourInput\n class=\"form-control\"\n [id]=\"hourId()\"\n [name]=\"hourId()\"\n type=\"number\"\n [value]=\"displayHour\"\n (input)=\"hourChange(hourInput.value)\"\n (keyup)=\"hourChange(hourInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-minute\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"minuteId()\">Minute</label>\n <input #minuteInput\n class=\"form-control\"\n [id]=\"minuteId()\"\n [name]=\"minuteId()\"\n type=\"number\"\n [value]=\"displayMinute\"\n (input)=\"minuteChange(minuteInput.value)\"\n (keyup)=\"minuteChange(minuteInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-second\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"secondId()\">Second</label>\n <input #secondInput\n class=\"form-control\"\n [id]=\"secondId()\"\n [name]=\"secondId()\"\n type=\"number\"\n [value]=\"displaySecond\"\n (input)=\"secondChange(secondInput.value)\"\n (keyup)=\"secondChange(secondInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n</div>\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n@Component({\n selector: 'cut-date-input',\n templateUrl: './date-input.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n }\n ],\n})\nexport class DateInputComponent implements ControlValueAccessor, Validator, OnInit, OnDestroy {\n @Input()\n public id: string;\n\n @Input()\n public mandatory: boolean;\n\n @Input()\n public isDateTime: boolean;\n\n @Input()\n public formControl: FormControl;\n\n @Input()\n public isInvalid: boolean;\n\n public isTouched = false;\n public displayDay: string = null;\n public displayMonth: string = null;\n public displayYear: string = null;\n\n public displayHour: string = null;\n public displayMinute: string = null;\n public displaySecond: string = null;\n // Works with\n // 2018-04-09T08:02:27.542\n // 2018-04-09T08:02:27.542Z\n // 2018-04-09T08:02:27.542+01:00\n private readonly DATE_FORMAT =\n /^(19|20)\\d{2}-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?|Z)?$/;\n // year - month - day T HH : MM : SS .000 Z or + 01 : 00\n private propagateChange: (_: any) => {};\n private rawValue = '';\n private day: string;\n private month: string;\n private year: string;\n private hour: string;\n private minute: string;\n private second: string;\n\n public ngOnInit() {\n if (this.mandatory && this.isDateTime) {\n this.displayHour = '00';\n this.displayMinute = '00';\n this.displaySecond = '00';\n this.hour = '00';\n this.minute = '00';\n this.second = '00';\n }\n }\n\n public writeValue(obj: string): void { // 2018-04-09T08:02:27.542\n if (obj) {\n this.rawValue = this.removeMilliseconds(obj);\n // needs to handle also partial dates, e.g. -05-2016 (missing day)\n const [datePart, timePart] = this.rawValue.split('T');\n const dateValues = datePart.split('-');\n this.year = this.displayYear = dateValues[0] || '';\n this.month = this.displayMonth = dateValues[1] || '';\n this.day = this.displayDay = dateValues[2] || '';\n if (timePart) {\n const timeParts = timePart.split(':');\n this.hour = this.displayHour = timeParts[0] || '';\n this.minute = this.displayMinute = timeParts[1] || '';\n this.second = this.displaySecond = timeParts[2] || '';\n }\n }\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (this.mandatory && !this.viewValue()) {\n return {\n required: 'This field is required'\n };\n }\n if (control.value && !this.isDateFormat(this.getValueForValidation(control))) {\n return {\n pattern: 'Date is not valid'\n };\n }\n return undefined;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n // Do nothing.\n }\n\n public ngOnDestroy() {\n this.validate = (control: AbstractControl): ValidationErrors => {\n return undefined;\n };\n }\n\n public dayChange(value: string) {\n // get value from input\n this.day = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public monthChange(value: string) {\n // get value from input\n this.month = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public yearChange(value: string) {\n // get value from input\n this.year = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public hourChange(value: string) {\n // get value from input\n this.hour = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public minuteChange(value: string) {\n // get value from input\n this.minute = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public secondChange(value: string) {\n // get value from input\n this.second = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public inputFocus() {\n this.isTouched = false;\n this.touch();\n }\n\n public touch() {\n if (this.isTouched) {\n this.formControl.markAsTouched();\n this.propagateChange(this.rawValue);\n } else {\n this.formControl.markAsUntouched();\n }\n }\n\n public dayId() {\n return this.id + '-day';\n }\n\n public monthId() {\n return this.id + '-month';\n }\n\n public yearId() {\n return this.id + '-year';\n }\n\n public hourId() {\n return this.id + '-hour';\n }\n\n public minuteId() {\n return this.id + '-minute';\n }\n\n public secondId() {\n return this.id + '-second';\n }\n\n private viewValue(): string {\n if (this.day || this.month || this.year || this.hour || this.minute || this.second) {\n const date = [\n this.year ? this.year : '',\n this.month ? this.pad(this.month) : '',\n this.day ? this.pad(this.day) : ''\n ].join('-');\n if (this.isDateTime) {\n const time = [\n this.hour ? this.pad(this.hour) : '',\n this.minute ? this.pad(this.minute) : '',\n this.second ? this.pad(this.second) : ''\n ].join(':');\n return date + 'T' + time + '.000';\n } else {\n return date;\n }\n }\n return null;\n }\n\n private isDateFormat(val: any): boolean {\n return this.DATE_FORMAT.test(val);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n\n private getValueForValidation(control: any) {\n if (this.isDateTime) {\n return control.value;\n } else {\n return control.value.replace(/Z.*/, 'T00:00:00Z');\n }\n }\n\n private removeMilliseconds(dateTime: string): string {\n return dateTime.replace(/\\..*/, '');\n }\n}\n","<div\n class=\"hmcts-banner\"\n [class.hmcts-banner--warning]=\"type === alertMessageType.WARNING || type === alertMessageType.ERROR\"\n [class.hmcts-banner--success]=\"type === alertMessageType.SUCCESS\"\n>\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"alertMessageType.WARNING\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.ERROR\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.SUCCESS\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.INFORMATION\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">{{type}}</span>\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\nexport enum AlertMessageType {\n WARNING = 'warning',\n SUCCESS = 'success',\n ERROR = 'error',\n INFORMATION = 'information'\n}\n\n@Component({\n selector: 'cut-alert',\n templateUrl: './alert.component.html',\n styleUrls: [\n './alert.component.scss'\n ]\n})\nexport class AlertComponent {\n\n // confirmation type has been removed as per EUI-3232\n public static readonly TYPE_WARNING = 'warning';\n public static readonly TYPE_SUCCESS = 'success';\n public static readonly TYPE_ERROR = 'error';\n public static readonly TYPE_INFORMATION = 'information';\n\n @Input()\n public type: AlertMessageType;\n\n @Input()\n public showIcon = true;\n\n public alertMessageType = AlertMessageType;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AlertComponent } from './alert.component';\n\n@Pipe({\n name: 'cutAlertIconClass'\n})\nexport class AlertIconClassPipe implements PipeTransform {\n private static readonly CLASS_WARNING = 'icon-alert';\n private static readonly CLASS_SUCCESS = 'icon-tick';\n\n public transform(type: string): string {\n switch (type) {\n case AlertComponent.TYPE_SUCCESS:\n return AlertIconClassPipe.CLASS_SUCCESS;\n case AlertComponent.TYPE_WARNING:\n default:\n return AlertIconClassPipe.CLASS_WARNING;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AlertIconClassPipe } from './alert-icon-class.pipe';\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n AlertComponent,\n AlertIconClassPipe\n ],\n exports: [\n AlertComponent\n ]\n})\nexport class AlertModule {}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-tab',\n templateUrl: './tab.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabComponent {\n\n @Input()\n public id: string;\n\n @Input()\n public title: string;\n\n @Input()\n public selected: boolean;\n\n}\n","<div\n class=\"tabs-panel\"\n [id]=\"id\"\n role=\"tabpanel\"\n [ngClass]=\"{\n 'js-hidden': !selected\n }\"\n [attr.aria-hidden]=\"!selected\"\n>\n <ng-content></ng-content>\n</div>\n","<div class=\"tabs\">\n\n <ul class=\"tabs-list\" role=\"list\">\n <li class=\"tabs-list-item\" *ngFor=\"let panel of panels\">\n <a\n class=\"tabs-toggle\"\n [routerLink]=\"['.']\"\n [fragment]=\"panel.id\"\n role=\"tab\"\n (click)=\"show(panel.id)\"\n [attr.aria-controls]=\"panel.id\"\n [attr.aria-selected]=\"panel.selected\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'tabs-toggle-selected': panel.selected\n }\"\n #tab\n >{{panel.title}}</a>\n </li>\n </ul>\n\n <div class=\"tabs-content\">\n <ng-content></ng-content>\n </div>\n\n</div>\n","import { AfterContentInit, Component, ContentChildren, ElementRef, QueryList, ViewChildren } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TabComponent } from './tab.component';\n\n@Component({\n selector: 'cut-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabsComponent implements AfterContentInit {\n\n @ViewChildren('tab') public tabs!: QueryList<ElementRef>;\n\n @ContentChildren(TabComponent)\n public panels: QueryList<TabComponent>;\n\n private readonly panelIds: string[] = [];\n\n constructor(private readonly route: ActivatedRoute) {}\n\n public ngAfterContentInit(): void {\n this.panels.forEach((panel) => this.panelIds.push(panel.id));\n\n this.show(this.route.snapshot.fragment);\n }\n\n public show(id: string) {\n const panels: TabComponent[] = this.panels.toArray();\n\n id = id || panels[0].id;\n\n if (0 > this.panelIds.indexOf(id)) {\n id = panels[0].id;\n }\n\n panels.forEach((panel) => panel.selected = id === panel.id);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TabComponent } from './tab.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n TabsComponent,\n TabComponent,\n ],\n exports: [\n TabsComponent,\n TabComponent,\n ]\n})\nexport class TabsModule {}\n","import { Injectable } from '@angular/core';\nimport type { ConditionalShowFormDirective } from '../conditional-show-form.directive';\n\n@Injectable()\nexport class ConditionalShowRegistrarService {\n public registeredDirectives: ConditionalShowFormDirective[] = [];\n\n public register(newDirective: ConditionalShowFormDirective): void {\n this.registeredDirectives.push(newDirective);\n }\n\n public reset(): void {\n this.registeredDirectives = [];\n }\n}\n","import { ElementRef, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n/** Keeps track of initially hidden fields that toggle to show on the page (parent page).\n * Used to decide whether to redisplay the grey bar when returning to the page during\n * navigation between pages.\n */\n@Injectable()\nexport class GreyBarService {\n\n private fieldsToggledToShow: string[] = [];\n private readonly renderer: Renderer2;\n\n constructor(rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n public showGreyBar(field: CaseField, el: ElementRef) {\n if (!field.isCollection()) {\n this.addGreyBar(el);\n }\n }\n\n public removeGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.removeClass(divSelector, 'show-condition-grey-bar');\n }\n }\n\n public addToggledToShow(fieldId: string) {\n this.fieldsToggledToShow.push(fieldId);\n }\n\n public removeToggledToShow(fieldId: string) {\n this.fieldsToggledToShow = this.fieldsToggledToShow.filter(id => id !== fieldId);\n }\n\n public wasToggledToShow(fieldId: string): boolean {\n return this.fieldsToggledToShow.find(id => id === fieldId) !== undefined;\n }\n\n public reset() {\n this.fieldsToggledToShow = [];\n }\n\n private addGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.addClass(divSelector, 'show-condition-grey-bar');\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\n/*\nTranslate a date time format string from the Java format provided by CCD to the format supported by Angular formatDate()\nVery simple translator that maps unsupported chars to the nearest equivalent.\nIf there is no equivalent puts ***x*** into the output where x is the unsupported character\n\nJava format\nG era text AD; Anno Domini; A\n u year year 2004; 04\n y year-of-era year 2004; 04\n D day-of-year number 189\n M/L month-of-year number/text 7; 07; Jul; July; J\n d day-of-month number 10\n\n Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter\n Y week-based-year year 1996; 96\n w week-of-week-based-year number 27\n W week-of-month number 4\n E day-of-week text Tue; Tuesday; T\n e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T\n F week-of-month number 3\n\n a am-pm-of-day text PM\n h clock-hour-of-am-pm (1-12) number 12\n K hour-of-am-pm (0-11) number 0\n k clock-hour-of-am-pm (1-24) number 0\n\n H hour-of-day (0-23) number 0\n m minute-of-hour number 30\n s second-of-minute number 55\n S fraction-of-second fraction 978\n A milli-of-day number 1234\n n nano-of-second number 987654321\n N nano-of-day number 1234000000\n\n V time-zone ID zone-id America/Los_Angeles; Z; -08:30\n z time-zone name zone-name Pacific Standard Time; PST\n O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;\n X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;\n x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;\n Z zone-offset offset-Z +0000; -0800; -08:00;\n\n p pad next pad modifier 1\n\n ' escape for text delimiter\n '' single quote literal '\n [ optional section start\n ] optional section end\n # reserved for future use\n { reserved for future use\n } reserved for future use\n\n Angular dateFormat characters\n Era\tG, GG & GGG\tAbbreviated\tAD\nGGGG\tWide\tAnno Domini\nGGGGG\tNarrow\tA\nYear\ty\tNumeric: minimum digits\t2, 20, 201, 2017, 20173\nyy\tNumeric: 2 digits + zero padded\t02, 20, 01, 17, 73\nyyy\tNumeric: 3 digits + zero padded\t002, 020, 201, 2017, 20173\nyyyy\tNumeric: 4 digits or more + zero padded\t0002, 0020, 0201, 2017, 20173\nMonth\tM\tNumeric: 1 digit\t9, 12\nMM\tNumeric: 2 digits + zero padded\t09, 12\nMMM\tAbbreviated\tSep\nMMMM\tWide\tSeptember\nMMMMM\tNarrow\tS\nMonth standalone\tL\tNumeric: 1 digit\t9, 12\nLL\tNumeric: 2 digits + zero padded\t09, 12\nLLL\tAbbreviated\tSep\nLLLL\tWide\tSeptember\nLLLLL\tNarrow\tS\nWeek of year\tw\tNumeric: minimum digits\t1... 53\nww\tNumeric: 2 digits + zero padded\t01... 53\nWeek of month\tW\tNumeric: 1 digit\t1... 5\nDay of month\td\tNumeric: minimum digits\t1\ndd\tNumeric: 2 digits + zero padded\t01\nWeek day\tE, EE & EEE\tAbbreviated\tTue\nEEEE\tWide\tTuesday\nEEEEE\tNarrow\tT\nEEEEEE\tShort\tTu\nPeriod\ta, aa & aaa\tAbbreviated\tam/pm or AM/PM\naaaa\tWide (fallback to a when missing)\tante meridiem/post meridiem\naaaaa\tNarrow\ta/p\nPeriod*\tB, BB & BBB\tAbbreviated\tmid.\nBBBB\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nBBBBB\tNarrow\tmd\nPeriod standalone*\tb, bb & bbb\tAbbreviated\tmid.\nbbbb\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nbbbbb\tNarrow\tmd\nHour 1-12\th\tNumeric: minimum digits\t1, 12\nhh\tNumeric: 2 digits + zero padded\t01, 12\nHour 0-23\tH\tNumeric: minimum digits\t0, 23\nHH\tNumeric: 2 digits + zero padded\t00, 23\nMinute\tm\tNumeric: minimum digits\t8, 59\nmm\tNumeric: 2 digits + zero padded\t08, 59\nSecond\ts\tNumeric: minimum digits\t0... 59\nss\tNumeric: 2 digits + zero padded\t00... 59\nFractional seconds\tS\tNumeric: 1 digit\t0... 9\nSS\tNumeric: 2 digits + zero padded\t00... 99\nSSS\tNumeric: 3 digits + zero padded (= milliseconds)\t000... 999\nZone\tz, zz & zzz\tShort specific non location format (fallback to O)\tGMT-8\nzzzz\tLong specific non location format (fallback to OOOO)\tGMT-08:00\nZ, ZZ & ZZZ\tISO8601 basic format\t-0800\nZZZZ\tLong localized GMT format\tGMT-8:00\nZZZZZ\tISO8601 extended format + Z indicator for offset 0 (= XXXXX)\t-08:00\nO, OO & OOO\tShort localized GMT format\tGMT-8\nOOOO\tLong localized GMT format\tGMT-08:00\n */\n\n@Injectable()\nexport class FormatTranslatorService {\n public translate(javaFormat: string): string {\n const result = [];\n let prev = '\\0';\n let inQuote = false;\n\n const maybePush = <T>(target: T[], obj: T, flag: boolean) => {\n if (!flag) {\n target.push(obj);\n }\n };\n for (const c of javaFormat) {\n switch (c) {\n case '\\'':\n if (prev === '\\'') {\n // literal single quote - ignore\n inQuote = false;\n } else {\n inQuote = !inQuote;\n }\n break;\n // Due to formatting constraints on the webapp, all 'd' characters should be replaced with 'D' (for Moment library)\n // This is because we want the date, not the day (this format will need to be converted back)\n case 'd':\n maybePush(result, 'D', inQuote);\n break;\n // moment library defines year as capital y\n case 'y':\n maybePush(result, 'Y', inQuote);\n break;\n case 'e':\n case 'c':\n maybePush(result, 'E', inQuote); // no lower case E\n break;\n case 'F':\n maybePush(result, 'W', inQuote);\n break;\n case 'K':\n maybePush(result, 'H', inQuote);\n break;\n case 'k':\n maybePush(result, 'h', inQuote);\n break;\n // commented out A change to '***' due to use in moment library for AM/PM\n // added 'a' specification to stop discrepancy in am/AM pm/PM formatting\n case 'a':\n maybePush(result, 'A', inQuote);\n break;\n case 'n':\n case 'N':\n maybePush(result, '***' + c + '***', inQuote); // No way to support A - millisec of day, n - nano of second, N - nano of Day\n break;\n case 'V':\n case 'O':\n maybePush(result, 'z', inQuote);\n break;\n case 'x':\n case 'X':\n maybePush(result, 'Z', inQuote);\n break;\n default:\n maybePush(result, c, inQuote);\n }\n prev = c;\n }\n return result.join('');\n }\n\n public showOnlyDates(dateFormat: string): string {\n // replace 'd' character with 'D' for the moment library\n // This ensures only dates allowed\n while (dateFormat.includes('d')) {\n dateFormat = dateFormat.replace('d', 'D');\n }\n while (dateFormat.includes('y')) {\n dateFormat = dateFormat.replace('y', 'Y');\n }\n return dateFormat;\n }\n\n public removeTime(dateFormat: string): string {\n // remove hours irrelevant of whether 12 or 24 hour clock\n while (dateFormat.includes('H') || dateFormat.includes('h')) {\n dateFormat = dateFormat.replace('H', '');\n dateFormat = dateFormat.replace('h', '');\n }\n // remove minutes\n while (dateFormat.includes('m')) {\n dateFormat = dateFormat.replace('m', '');\n }\n // remove seconds (s) and micro seconds (S)\n while (dateFormat.includes('S') || dateFormat.includes('s')) {\n dateFormat = dateFormat.replace('S', '');\n dateFormat = dateFormat.replace('s', '');\n }\n // because there is time removal algorithm can make reasonable assumption to remove colons\n while (dateFormat.includes(':')) {\n dateFormat = dateFormat.replace(':', '');\n }\n return dateFormat.trim();\n }\n\n public hasDate(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') >= 0 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public is24Hour(value: string): boolean {\n return this.translate(value).length &&\n value.indexOf('H') >= 0;\n }\n\n public hasNoDay(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasNoDayAndMonth(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') === -1 &&\n value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasHours(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('h') >= 0 && value.indexOf('m') === -1;\n }\n\n public hasMinutes(value: string): boolean {\n return this.translate(value).length && value.indexOf('m') >= 0 && value.toLowerCase().indexOf('h') >= 0;\n }\n\n public hasSeconds(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('s') >= 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';\n\n@Pipe({\n name: 'ccdDate'\n})\nexport class DatePipe implements PipeTransform {\n\n private static readonly DATE_FORMAT_REGEXP =\n new RegExp('^(\\\\d{4})-?(\\\\d\\\\d)-?(\\\\d\\\\d)(?:T(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?:\\\\.(\\\\d+))?)?)?(Z|([+-])(\\\\d\\\\d):?(\\\\d\\\\d))?|Z)?$');\n // 1 2 3 4 5 6 7 8 9 10 11\n private static readonly MONTHS = [\n ['Jan'], ['Feb'], ['Mar'], ['Apr'], ['May'], ['Jun'], ['Jul'], ['Aug'], ['Sep'], ['Oct'], ['Nov'], ['Dec'],\n ];\n\n /**\n * constructor to allow format translator to be injected\n * @param formatTrans format translator\n */\n constructor(private readonly formatTrans: FormatTranslatorService) {\n }\n\n public transform(value: string, zone?: string, format?: string): string {\n let resultDate = null;\n const ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n if (value) {\n // included to avoid editing the hour twice on second pass through\n // this occurs on case details when datepipe is applied twice\n if (!value.includes('T')) {\n zone = 'utc';\n }\n const match: RegExpMatchArray = value.match(DatePipe.DATE_FORMAT_REGEXP);\n // Make sure we actually have a match.\n if (match) {\n let offsetDate = null;\n const date = this.getDate(match);\n if (zone === 'local') {\n offsetDate = this.getOffsetDate(date);\n } else {\n offsetDate = this.getDate(match);\n }\n // 'short' format is meaningful to formatDate, but not the same meaning as in the unit tests\n if (this.formatTrans && format && format !== 'short') {\n // support for java style formatting strings for dates\n format = this.translateDateFormat(format);\n resultDate = moment(date).format(format);\n } else {\n // RDM-1149 changed the pipe logic so that it doesn't add an hour to 'Summer Time' dates on DateTime field type\n resultDate = `${offsetDate.getDate()} ${DatePipe.MONTHS[offsetDate.getMonth()]} ${offsetDate.getFullYear()}`;\n if (match[4] && match[5] && match[6] && format !== 'short') {\n resultDate += ', ';\n resultDate += this.getHour(offsetDate.getHours().toString()) + ':';\n resultDate += this.pad(offsetDate.getMinutes()) + ':';\n resultDate += this.pad(offsetDate.getSeconds()) + ' ';\n resultDate += (this.toInt(offsetDate.getHours().toString()) >= 12) ? 'PM' : 'AM';\n }\n }\n } else {\n // EUI-2667. See if what we've been given is actually a formatted date that\n // we could attempt to do something with.\n const parsedDate: number = Date.parse(value);\n // We successfully parsed it so let's use it.\n if (!isNaN(parsedDate)) {\n const d: Date = new Date(parsedDate);\n // If what we received didn't include time, don't include it here either.\n if (value.indexOf(':') < 0) {\n const shortDate: string = d.toLocaleDateString('en-GB');\n const shortISO: string = shortDate.split('/').reverse().join('-');\n return this.transform(shortISO, zone, format);\n }\n // If it did include time, we want a full ISO string.\n const thisMoment = moment(d).format(ISO_FORMAT);\n return this.transform(thisMoment, zone, format);\n }\n }\n }\n return resultDate;\n }\n\n private translateDateFormat(format: string) {\n if (this.formatTrans) {\n return this.formatTrans.translate(format);\n } else {\n return format;\n }\n }\n\n private getOffsetDate(date: Date): Date {\n const localOffset = - date.getTimezoneOffset() / 60;\n return new Date(date.getTime() + localOffset * 3600 * 1000);\n }\n\n private getDate(match: RegExpMatchArray): Date {\n const year = this.toInt(match[1]);\n const month = this.toInt(match[2]) - 1;\n const day = this.toInt(match[3]);\n let resultDate;\n if (match[4] && match[5] && match[6]) {\n const hour = this.toInt(match[4]);\n const minutes = this.toInt(match[5]);\n const seconds = this.toInt(match[6]);\n resultDate = new Date(year, month, day, hour, minutes, seconds, 0);\n } else {\n resultDate = new Date(year, month, day);\n }\n return resultDate;\n }\n\n private getHour(hourStr: string): number {\n let hourNum = this.toInt(hourStr);\n if (hourNum > 12) {\n hourNum = hourNum - 12;\n } else if (hourNum === 0) {\n hourNum = 12;\n }\n return hourNum;\n }\n\n private toInt(str: string): number {\n return parseInt(str, 10);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n}\n","import { Orderable } from '../../../domain/order/orderable.model';\nimport { ComplexFieldOverride } from './wizard-page-field-complex-override.model';\n\nexport class WizardPageField implements Orderable {\n public case_field_id: string;\n public order?: number;\n public page_column_no?: number;\n public complex_field_overrides?: ComplexFieldOverride[];\n}\n","import { Orderable } from '../order';\n\nexport class FixedListItem implements Orderable {\n public code: string;\n public label: string;\n public order?: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from './case-field.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FixedListItem } from './fixed-list-item.model';\n\n// @dynamic\nexport class FieldType {\n public id: string;\n public type: FieldTypeEnum;\n public min?: number | Date;\n public max?: number | Date;\n public regular_expression?: string;\n\n @Type(() => FixedListItem)\n public fixed_list_items?: FixedListItem[];\n\n @Type(() => CaseField)\n public complex_fields?: CaseField[];\n\n @Type(() => FieldType)\n public collection_field_type?: FieldType;\n }\n","import { Expose, Type } from 'class-transformer';\nimport * as _ from 'underscore';\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FieldType } from './field-type.model';\n\n// @dynamic\nexport class CaseField implements Orderable {\n public id: string;\n public hidden: boolean;\n public hiddenCannotChange: boolean;\n public label: string;\n public order?: number;\n\n @Type(() => FieldType)\n public field_type: FieldType;\n\n public hint_text?: string;\n public security_label?: string;\n public display_context: string;\n public display_context_parameter?: string;\n public month_format?: string;\n public show_condition?: string;\n public show_summary_change_option?: boolean;\n public show_summary_content_option?: number;\n public acls?: AccessControlList[];\n public metadata?: boolean;\n public formatted_value?: any;\n public retain_hidden_value: boolean;\n\n @Type(() => WizardPageField)\n public wizardProps?: WizardPageField;\n\n public _value: any;\n public _list_items: any = [];\n\n @Expose()\n public get value(): any {\n if (this.isDynamic()) {\n return this._value && this._value.value ? this._value.value.code : this._value;\n } else {\n return this._value;\n }\n }\n\n public set value(value: any) {\n if (this.isDynamic()) {\n if (value && value instanceof Object && value.list_items) {\n this._list_items = value.list_items;\n } else if (!this._list_items || this._list_items.length === 0) {\n // Extract the list items from the current value if that's the only place they exist.\n this._list_items = this.list_items;\n if (!value || !value.value) {\n value = null;\n }\n }\n }\n this._value = value;\n }\n\n @Expose()\n public get list_items(): any {\n if (this.isDynamic()) {\n return this._value && this._value.list_items ? this._value.list_items : this._list_items;\n } else {\n return this.field_type.fixed_list_items;\n }\n }\n\n public set list_items(items: any) {\n this._list_items = items;\n }\n\n @Expose()\n public get dateTimeEntryFormat(): string {\n if (this.isComplexDisplay()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEENTRY');\n }\n return null;\n }\n\n @Expose()\n public get dateTimeDisplayFormat(): string {\n if (this.isComplexEntry()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEDISPLAY');\n }\n return null;\n }\n\n @Expose()\n public isComplexDisplay() {\n return (this.isComplex() || this.isCollection()) && this.isReadonly();\n }\n\n @Expose()\n public isComplexEntry() {\n return (this.isComplex() || this.isCollection()) && (this.isOptional() || this.isMandatory());\n }\n\n @Expose()\n public isReadonly() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'READONLY';\n }\n\n @Expose()\n public isOptional() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n @Expose()\n public isMandatory() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'MANDATORY';\n }\n\n @Expose()\n public isCollection(): boolean {\n return this.field_type && this.field_type.type === 'Collection';\n }\n\n @Expose()\n public isComplex(): boolean {\n return this.field_type && this.field_type.type === 'Complex';\n }\n\n @Expose()\n public isDynamic(): boolean {\n const dynamicFieldTypes: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n if (!this.field_type) {\n return false;\n }\n\n return dynamicFieldTypes.some(t => t === this.field_type.type);\n }\n\n @Expose()\n public isCaseLink(): boolean {\n return this.isComplex()\n && this.field_type.id === 'CaseLink'\n && this.field_type.complex_fields.some(cf => cf.id === 'CaseReference');\n }\n public extractBracketValue(fmt: string, paramName: string, leftBracket= '(', rightBracket= ')' ): string {\n fmt = fmt.split(',')\n .find(a => a.trim().startsWith(paramName));\n if (fmt) {\n const s = fmt.indexOf(leftBracket) + 1;\n const e = fmt.indexOf(rightBracket, s);\n if (e > s && s >= 0) {\n return fmt.substr(s, (e - s));\n }\n }\n return null;\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { DatePipe } from '../../components/palette/utils/date.pipe';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseTab } from '../../domain/case-view/case-tab.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldType } from '../../domain/definition/field-type.model';\nimport { FixedListItem } from '../../domain/definition/fixed-list-item.model';\nimport { Predicate } from '../../domain/predicate.model';\nimport { FormatTranslatorService } from '../case-fields/format-translator.service';\n\n// @dynamic\n@Injectable()\nexport class FieldsUtils {\n // EUI-4244. 3 dashes instead of 1 to make this less likely to clash with a real field.\n public static readonly LABEL_SUFFIX = '---LABEL';\n // Handling of Dynamic Lists in Complex Types\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COLLECTION = 'Collection';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COMPLEX = 'Complex';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n private static readonly currencyPipe: CurrencyPipe = new CurrencyPipe('en-GB');\n private static readonly datePipe: DatePipe = new DatePipe(new FormatTranslatorService());\n\n public static convertToCaseField(obj: any): CaseField {\n if (!(obj instanceof CaseField)) {\n return plainToClassFromExist(new CaseField(), obj);\n }\n return obj;\n }\n\n public static toValuesMap(caseFields: CaseField[]): any {\n const valueMap = {};\n caseFields.forEach(field => {\n valueMap[field.id] = FieldsUtils.prepareValue(field);\n });\n return valueMap;\n }\n\n public static getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n public static isObject(elem: any): boolean {\n return typeof elem === 'object' && elem !== null;\n }\n\n public static isNonEmptyObject(elem: any): boolean {\n return this.isObject(elem) && Object.keys(elem).length !== 0;\n }\n\n public static isArray(elem: any): boolean {\n return Array.isArray(elem);\n }\n\n public static areCollectionValuesSimpleFields(fieldValue: any[]): boolean {\n return !this.isObject(fieldValue[0]['value']) && !Array.isArray(fieldValue[0]['value']) && fieldValue[0]['value'] !== undefined;\n }\n\n public static isCollectionOfSimpleTypes(fieldValue: any): boolean {\n return this.isCollection(fieldValue) && this.areCollectionValuesSimpleFields(fieldValue);\n }\n\n public static isMultiSelectValue(form: any): boolean {\n return this.isNonEmptyArray(form) && !this.isCollectionWithValue(form);\n }\n\n public static isNonEmptyArray(pageFormFields: any): boolean {\n return Array.isArray(pageFormFields) && pageFormFields[0] !== undefined;\n }\n\n public static isCollection(pageFormFields: any): boolean {\n return this.isNonEmptyArray(pageFormFields) && this.isCollectionWithValue(pageFormFields);\n }\n\n public static isCollectionWithValue(pageFormFields: any[]): boolean {\n return pageFormFields[0]['value'] !== undefined;\n }\n\n public static cloneObject(obj: any): any {\n return Object.assign({}, obj);\n }\n\n // temporary function until this can be moved to CaseView class (RDM-2681)\n public static getCaseFields(caseView: CaseView): CaseField[] {\n const caseDataFields: CaseField[] = caseView.tabs.reduce((acc: CaseField[], tab: CaseTab) => {\n return acc.concat(tab.fields);\n }, []);\n\n const metadataFields: CaseField[] = caseView.metadataFields;\n return metadataFields.concat(caseDataFields.filter((caseField: CaseField) => {\n return metadataFields.findIndex(metadataField => metadataField.id === caseField.id) < 0;\n }));\n }\n\n public static addCaseFieldAndComponentReferences (c: AbstractControl, cf: CaseField, comp: AbstractFormFieldComponent): void {\n c['caseField'] = cf;\n c['component'] = comp;\n }\n\n /**\n * Recursive check of an array or object and its descendants for the presence of any non-empty values.\n *\n * @param object The array or object to check\n * @returns `true` if the array or object (or a descendant) contains at least one non-empty value; `false` otherwise\n */\n public static containsNonEmptyValues(object: object): boolean {\n if (!object) {\n return false;\n }\n const values = Object.keys(object).map(key => object[key]);\n const objectRefs = [];\n // Also test for numeric values, and length > 0 for non-numeric values because this covers both strings and arrays.\n // Note: Deliberate use of non-equality (!=) operator for null check, to handle both null and undefined values.\n const hasNonNullPrimitive = values.some(x => (x != null &&\n ((typeof x === 'object' && x.constructor === Object) || Array.isArray(x)\n ? !objectRefs.push(x)\n : typeof x === 'number' || x.length > 0)\n ));\n return !hasNonNullPrimitive ? objectRefs.some(y => this.containsNonEmptyValues(y)) : hasNonNullPrimitive;\n }\n\n /**\n * handleNestedDynamicLists()\n * Reassigns list_item and value data to DynamicList children\n * down the tree. Server response returns data only in\n * the `value` object of parent complex type\n *\n * EUI-2530 Dynamic Lists for Elements in a Complex Type\n *\n * @param jsonBody - { case_fields: [ CaseField, CaseField ] }\n */\n public static handleNestedDynamicLists(jsonBody: { case_fields: CaseField[] }): any {\n\n if (jsonBody.case_fields) {\n jsonBody.case_fields.forEach(caseField => {\n if (caseField.field_type) {\n this.setDynamicListDefinition(caseField, caseField.field_type, caseField);\n }\n });\n }\n\n return jsonBody;\n }\n\n private static prepareValue(field: CaseField): any {\n if (field.value) {\n return field.value;\n } else if (field.isComplex()) {\n const valueMap = {};\n field.field_type.complex_fields.forEach(complexField => {\n valueMap[complexField.id] = FieldsUtils.prepareValue(complexField);\n });\n return valueMap;\n }\n }\n\n private static readonly DEFAULT_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n };\n\n private static readonly LABEL_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n switch (field.field_type.type) {\n case 'FixedList':\n case 'FixedRadioList': {\n result[field.id] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, result[field.id] || field.value);\n break;\n }\n case 'MultiSelectList': {\n const fieldValue = result[field.id] || [];\n result[field.id + FieldsUtils.LABEL_SUFFIX] = [];\n fieldValue.forEach((code: any, idx: any) => {\n result[field.id + FieldsUtils.LABEL_SUFFIX][idx] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, code);\n });\n break;\n }\n case 'Label': {\n result[field.id] = FieldsUtils.getLabel(field);\n break;\n }\n case 'MoneyGBP': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getMoneyGBP(fieldValue);\n break;\n }\n case 'Date': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getDate(fieldValue);\n break;\n }\n case 'Complex': {\n if (result[field.id] && field.field_type.complex_fields) {\n field.field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, result[field.id]);\n }\n });\n }\n break;\n }\n case 'Collection': {\n const elements = (result[field.id] || field.value);\n if (elements) {\n elements.forEach((elem: any) => {\n switch (field.field_type.collection_field_type.type) {\n case 'MoneyGBP': {\n elem.value = FieldsUtils.getMoneyGBP(elem.value);\n break;\n }\n case 'Date': {\n elem.value = FieldsUtils.getDate(elem.value);\n break;\n }\n case 'Complex': {\n if (field.field_type.collection_field_type.complex_fields) {\n field.field_type.collection_field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, elem.value);\n }\n });\n }\n break;\n }\n }\n });\n }\n break;\n }\n }\n };\n\n /**\n * Formats a `MoneyGBP` value to include currency units.\n * @param fieldValue The CurrencyPipe expects an `any` parameter so this must also be `any`,\n * but it should be \"number-like\" (e.g., '1234')\n * @returns A formatted string (e.g., £12.34)\n */\n private static getMoneyGBP(fieldValue: any): string {\n return fieldValue ? FieldsUtils.currencyPipe.transform(fieldValue / 100, 'GBP', 'symbol') : fieldValue;\n }\n\n private static getLabel(fieldValue: CaseField): string {\n return fieldValue ? fieldValue.label : '';\n }\n\n private static getDate(fieldValue: string): string {\n try {\n // Format specified here wasn't previously working and lots of tests depend on it not working\n // Now that formats work correctly many test would break - and this could affect services which may depend on\n // the orginal behaviour of returning dates in \"d MMM yyyy\"\n // Note - replaced 'd' with 'D' as datepipe using moment to avoid timezone discrepancies\n return FieldsUtils.datePipe.transform(fieldValue, null, 'D MMM yyyy');\n } catch (e) {\n return this.textForInvalidField('Date', fieldValue);\n }\n }\n\n private static getFixedListLabelByCodeOrEmpty(field: CaseField, code: string): string {\n const relevantItem: FixedListItem = code ? field.field_type.fixed_list_items.find(item => item.code === code) : null;\n return relevantItem ? relevantItem.label : '';\n }\n\n private static textForInvalidField(type: string, invalidValue: string): string {\n return `{ Invalid ${type}: ${invalidValue} }`;\n }\n\n private static setDynamicListDefinition(caseField: CaseField, caseFieldType: FieldType, rootCaseField: CaseField) {\n if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COMPLEX) {\n\n caseFieldType.complex_fields.forEach(field => {\n try {\n const isDynamicField = FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE.indexOf(field.field_type.type) !== -1;\n\n if (isDynamicField) {\n const dynamicListValue = this.getDynamicListValue(rootCaseField.value, field.id);\n if (dynamicListValue) {\n const list_items = dynamicListValue[0].list_items;\n const complexValue = dynamicListValue.map(data => data.value);\n const value = {\n list_items,\n value: complexValue.length > 0 ? complexValue : undefined\n };\n field.value = {\n ...value\n };\n field.formatted_value = {\n ...field.formatted_value,\n ...value\n };\n }\n } else {\n this.setDynamicListDefinition(field, field.field_type, rootCaseField);\n }\n } catch (error) {\n console.log(error);\n }\n });\n } else if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COLLECTION) {\n if (caseFieldType.collection_field_type) {\n this.setDynamicListDefinition(caseField, caseFieldType.collection_field_type, rootCaseField);\n }\n }\n }\n\n private static getDynamicListValue(jsonBlock: any, key: string) {\n\n const data = jsonBlock ? this.getNestedFieldValues(jsonBlock, key, []) : [];\n\n return data.length > 0 ? data : null;\n }\n\n private static getNestedFieldValues(jsonData: any, key: string, output: any[] = []) {\n if (jsonData && jsonData[key]) {\n output.push(jsonData[key]);\n } else {\n for (const elementKey in jsonData) {\n if (typeof jsonData === 'object' && jsonData.hasOwnProperty(elementKey)) {\n this.getNestedFieldValues(jsonData[elementKey], key, output);\n }\n }\n }\n return output;\n }\n\n public buildCanShowPredicate(eventTrigger: CaseEventTrigger, form: any): Predicate<WizardPage> {\n const currentState = this.getCurrentEventState(eventTrigger, form);\n return (page: WizardPage): boolean => {\n return page.parsedShowCondition.match(currentState);\n };\n }\n\n public getCurrentEventState(eventTrigger: { case_fields: CaseField[] }, form: FormGroup): object {\n return this.mergeCaseFieldsAndFormFields(eventTrigger.case_fields, form.controls['data'].value);\n }\n\n public cloneCaseField(obj: any): CaseField {\n return Object.assign(new CaseField(), obj);\n }\n\n public mergeCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.DEFAULT_MERGE_FUNCTION);\n }\n\n public mergeLabelCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.LABEL_MERGE_FUNCTION);\n }\n\n public controlIterator(\n aControl: AbstractControl,\n formArrayFn: (array: FormArray) => void,\n formGroupFn: (group: FormGroup) => void,\n controlFn: (control: FormControl) => void\n ): void {\n if (aControl instanceof FormArray) { // We're in a collection\n formArrayFn(aControl);\n } else if (aControl instanceof FormGroup) { // We're in a complex type.\n formGroupFn(aControl);\n } else if (aControl instanceof FormControl) { // FormControl\n controlFn(aControl);\n }\n }\n\n private mergeFields(caseFields: CaseField[], formFields: object, mergeFunction: (field: CaseField, result: object) => void): object {\n const result: object = FieldsUtils.cloneObject(formFields);\n caseFields.forEach(field => {\n mergeFunction(field, result);\n if (field.field_type && field.field_type.complex_fields && field.field_type.complex_fields.length > 0) {\n result[field.id] = this.mergeFields(field.field_type.complex_fields, result[field.id], mergeFunction);\n }\n });\n return result;\n }\n}\n","import * as _score from 'underscore';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\nexport class ShowCondition {\n\n // Expects a show condition of the form: <fieldName>=\"string\"\n constructor(public condition: string) {\n if (!!condition) {\n if (condition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n this.orConditions = condition.split(ShowCondition.OR_CONDITION_REGEXP);\n } else {\n this.andConditions = condition.split(ShowCondition.AND_CONDITION_REGEXP);\n }\n }\n }\n\n private static readonly AND_CONDITION_REGEXP = new RegExp('\\\\sAND\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly OR_CONDITION_REGEXP = new RegExp('\\\\sOR\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly CONDITION_NOT_EQUALS = '!=';\n private static readonly CONDITION_EQUALS = '=';\n private static readonly CONTAINS = 'CONTAINS';\n private static readonly instanceCache = new Map<string, ShowCondition>();\n\n private readonly orConditions: string[] = null;\n private readonly andConditions: string[] = null;\n public static addPathPrefixToCondition(showCondition: string, pathPrefix: string): string {\n if (!pathPrefix || pathPrefix === '') {\n return showCondition;\n }\n if (showCondition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n let orConditions = showCondition.split(ShowCondition.OR_CONDITION_REGEXP);\n orConditions = this.extractConditions(orConditions, pathPrefix);\n return orConditions.join(' OR ');\n } else {\n let andConditions = showCondition.split(ShowCondition.AND_CONDITION_REGEXP);\n andConditions = this.extractConditions(andConditions, pathPrefix);\n return andConditions.join(' AND ');\n }\n }\n\n // Cache instances so that we can cache results more effectively\n public static getInstance(condition: string): ShowCondition {\n let instance = this.instanceCache.get(condition);\n if (!instance) {\n instance = new ShowCondition(condition);\n this.instanceCache.set(condition, instance);\n }\n return instance;\n }\n\n /**\n * Determine whether a ShowCondition model is affected by fields that have\n * a display_context of HIDDEN or READONLY, which means they aren't able to\n * be changed by the user's actions.\n *\n * @param showCondition The ShowCondition model to evaluate.\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public static hiddenCannotChange(showCondition: ShowCondition, caseFields: CaseField[]): boolean {\n if (showCondition && caseFields) {\n const conditions: string[] = showCondition.andConditions || showCondition.orConditions;\n if (conditions && conditions.length > 0) {\n let allUnchangeable = true;\n for (const condition of conditions) {\n const [field] = ShowCondition.getField(condition);\n const path: string[] = field.split('.');\n let head = path.shift();\n let caseField: CaseField = caseFields.find(cf => cf.id === head);\n while (path.length > 0) {\n head = path.shift();\n if (caseField) {\n // Jump out if this is HIDDEN or READONLY, regardless of whether or not it's\n // complex or a collection - nested fields will \"inherit\" the display_context.\n if (['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1) {\n break;\n }\n\n // Consider what type of field this is.\n const ft = caseField.field_type;\n switch (ft.type) {\n case 'Collection':\n if (ft.collection_field_type.type === 'Complex' && ft.collection_field_type.complex_fields) {\n caseField = ft.collection_field_type.complex_fields.find(cf => cf.id === head);\n }\n break;\n case 'Complex':\n if (ft.complex_fields) {\n caseField = ft.complex_fields.find(cf => cf.id === head);\n }\n break;\n }\n }\n }\n if (caseField) {\n allUnchangeable = allUnchangeable && ['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1;\n }\n }\n return allUnchangeable;\n }\n }\n return false;\n }\n\n private static extractConditions(conditionsArray: string[], pathPrefix: string): string[] {\n const extracted = conditionsArray.map(condition => {\n if (condition.startsWith(pathPrefix)) {\n return condition;\n }\n return `${pathPrefix}.${condition}`;\n });\n return extracted;\n }\n\n private static getField(condition: string): [string, string?] {\n let separator: string = ShowCondition.CONTAINS;\n if (condition.indexOf(ShowCondition.CONTAINS) < 0) {\n separator = ShowCondition.CONDITION_EQUALS;\n if (condition.indexOf(ShowCondition.CONDITION_NOT_EQUALS) > -1) {\n separator = ShowCondition.CONDITION_NOT_EQUALS;\n }\n }\n return [ condition.split(separator)[0], separator ];\n }\n\n public match(fields: object, path?: string): boolean {\n if (!this.condition) {\n return true;\n }\n return this.matchAndConditions(fields, this.updatePathName(path));\n }\n\n public matchByContextFields(contextFields: CaseField[]): boolean {\n return this.match(FieldsUtils.toValuesMap(contextFields));\n }\n\n /**\n * Determine whether this is affected by fields that have a display_context\n * of HIDDEN or READONLY, which means they aren't able to be changed by the\n * user's actions.\n *\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public hiddenCannotChange(caseFields: CaseField[]): boolean {\n return ShowCondition.hiddenCannotChange(this, caseFields);\n }\n\n /**\n * Path Name gets updated for complex sub fields\n * @param path Path name.\n */\n private updatePathName(path: string): string {\n if (path && path.split(/[_]+/g).length > 0) {\n const [pathName, ...pathTail] = path.split(/[_]+/g);\n const pathFinalIndex = pathTail.pop();\n const pathTailString = pathTail.toString();\n let mappedPathTail;\n\n mappedPathTail = pathTail.map((value) => {\n return Number(pathFinalIndex) === Number(value) ? pathName : value;\n });\n\n return pathTailString !== mappedPathTail.toString()\n ? `${pathName}_${mappedPathTail.join('_')}_${pathFinalIndex}`\n : path;\n } else {\n return path;\n }\n }\n\n private matchAndConditions(fields: object, path?: string): boolean {\n if (!!this.orConditions) {\n return this.orConditions.some(orCondition => this.matchEqualityCondition(fields, orCondition, path));\n } else if (!!this.andConditions) {\n return this.andConditions.every(andCondition => this.matchEqualityCondition(fields, andCondition, path));\n } else {\n return false;\n }\n }\n\n private matchEqualityCondition(fields: object, condition: string, path?: string): boolean {\n const [field, conditionSeparator] = ShowCondition.getField(condition);\n const [head, ...tail] = field.split('.');\n const currentValue = this.findValueForComplexCondition(fields, head, tail, path);\n const expectedValue = this.unquoted(condition.split(conditionSeparator)[1]);\n if (conditionSeparator === ShowCondition.CONTAINS) {\n return this.checkValueContains(expectedValue, currentValue);\n } else {\n return this.checkValueEquals(expectedValue, currentValue, conditionSeparator);\n }\n }\n\n private checkValueEquals(expectedValue: string, currentValue: any, conditionSeparaor: string): boolean {\n if (expectedValue.search('[,]') > -1) { // for multi-select list\n return this.checkMultiSelectListEquals(expectedValue, currentValue, conditionSeparaor);\n } else if (expectedValue.endsWith('*') && currentValue && conditionSeparaor !== ShowCondition.CONDITION_NOT_EQUALS) {\n if (typeof currentValue === 'string') {\n return currentValue.startsWith(this.removeStarChar(expectedValue));\n }\n return expectedValue === '*';\n } else {\n // changed from '===' to '==' to cover number field conditions\n if (conditionSeparaor === ShowCondition.CONDITION_NOT_EQUALS) {\n return this.checkValueNotEquals(expectedValue, currentValue);\n } else {\n return currentValue == expectedValue || this.okIfBothEmpty(expectedValue, currentValue); // tslint:disable-line\n }\n }\n }\n\n private checkValueNotEquals(expectedValue: string, currentValue: any): boolean {\n const formatCurrentValue = currentValue ? currentValue.toString().trim() : '';\n if ('*' === expectedValue && formatCurrentValue !== '') {\n return false;\n }\n const formatExpectedValue = expectedValue ? expectedValue.toString().trim() : '';\n return formatCurrentValue != formatExpectedValue; // tslint:disable-line\n }\n\n private checkMultiSelectListEquals(expectedValue: string, currentValue: any, conditionSeparator: string): boolean {\n const expectedValues = expectedValue.split(',').sort().toString();\n const values = currentValue ? currentValue.sort().toString() : '';\n if (conditionSeparator === ShowCondition.CONDITION_NOT_EQUALS) {\n return expectedValues !== values;\n } else {\n return expectedValues === values;\n }\n }\n\n private checkValueContains(expectedValue: string, currentValue: any): boolean {\n if (expectedValue.search(',') > -1) {\n const expectedValues = expectedValue.split(',').sort();\n const values = currentValue ? currentValue.sort().toString() : '';\n return expectedValues.every(item => values.search(item) >= 0);\n } else {\n const values = currentValue && Array.isArray(currentValue) ? currentValue.toString() : '';\n return values.search(expectedValue) >= 0;\n }\n }\n\n private findValueForComplexCondition(fields: object, head: string, tail: string[], path?: string): any {\n if (!fields) {\n return undefined;\n }\n if (tail.length === 0) {\n return this.getValue(fields, head);\n } else {\n if (FieldsUtils.isArray(fields[head])) {\n return this.findValueForComplexConditionInArray(fields, head, tail, path);\n } else {\n return this.findValueForComplexConditionForPathIfAny(fields, head, tail, path);\n }\n }\n }\n\n private findValueForComplexConditionForPathIfAny(fields: object, head: string, tail: string[], path?: string): any {\n if (path) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), pathTail.join('_'));\n } else {\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), path);\n }\n }\n\n private findValueForComplexConditionInArray(fields: object, head: string, tail: string[], path?: string): any {\n // use the path to resolve which array element we refer to\n if (path && path.startsWith(head)) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n if (pathTail.length > 0) {\n try {\n const arrayIndex = Number.parseInt(pathTail[0], 10);\n const [__, ...dropNumberPath] = pathTail;\n return (fields[head][arrayIndex] !== undefined) ? this.findValueForComplexCondition(\n fields[head][arrayIndex]['value'], tail[0], tail.slice(1), dropNumberPath.join('_')) : null;\n } catch (e) {\n console.log('Error while parsing number', pathTail[0], e);\n }\n }\n } else {\n console.log('Path in formArray should start with ', head, ', full path: ', path);\n }\n }\n\n private getValue(fields: object, head: string): any {\n if (this.isDynamicList(fields[head])) {\n return fields[head].value.code;\n } else {\n return fields[head];\n }\n }\n\n private isDynamicList(dynamiclist: object): boolean {\n return !_score.isEmpty(dynamiclist) &&\n (_score.has(dynamiclist, 'value') && _score.has(dynamiclist, 'list_items'));\n }\n\n private unquoted(str: string): string {\n return str.replace(/(?:^\")|(?:\"$)/g, '');\n }\n\n private removeStarChar(str: string): string {\n return str.substring(0, str.length - 1);\n }\n\n private okIfBothEmpty(right: string, value: any): boolean {\n return value === null && (right === '');\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Constants {\n public static readonly MANDATORY: string = 'MANDATORY';\n public static readonly REGEX_WHITESPACES: string = '^[^ ]+(?:\\\\s+[^ ]+)*$';\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\n\nimport { Constants } from '../../commons/constants';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FormValidatorsService {\n\n private static readonly CUSTOM_VALIDATED_TYPES: FieldTypeEnum[] = [\n 'Date', 'MoneyGBP', 'Label'\n ];\n public static addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n if (\n caseField.display_context === Constants.MANDATORY &&\n FormValidatorsService.CUSTOM_VALIDATED_TYPES.indexOf(caseField.field_type.type) === -1\n ) {\n const validators = [Validators.required];\n if (caseField.field_type.type === 'Text') {\n if (caseField.field_type.regular_expression) {\n validators.push(Validators.pattern(caseField.field_type.regular_expression));\n } else {\n validators.push(this.emptyValidator());\n }\n if (caseField.field_type.min && (typeof caseField.field_type.min === 'number')) {\n validators.push(Validators.minLength(caseField.field_type.min));\n }\n if (caseField.field_type.max && (typeof caseField.field_type.max === 'number')) {\n validators.push(Validators.maxLength(caseField.field_type.max));\n }\n }\n if (control.validator) {\n validators.push(control.validator);\n }\n control.setValidators(validators);\n }\n return control;\n }\n\n public static emptyValidator(): ValidatorFn {\n const validator = (control: AbstractControl):ValidationErrors | null => {\n if (control && control.value && control.value.toString().trim().length === 0) {\n return { required: {} };\n }\n return null;\n };\n return validator;\n }\n\n // TODO: Strip this out as it's only here for the moment because\n // the service is being injected all over the place but it doesn't\n // need to be as FormValidatorsService.addValidators is perfectly\n // happy being static.\n public addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n return FormValidatorsService.addValidators(caseField, control);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\n\ntype FormContainer = FormGroup | FormArray;\n\n@Directive()\nexport abstract class AbstractFormFieldComponent {\n @Input()\n public caseField: CaseField;\n\n @Input()\n public formGroup: FormGroup;\n\n @Input()\n public parent?: FormContainer;\n\n @Input()\n public idPrefix = '';\n\n public id() {\n return this.idPrefix + this.caseField.id;\n }\n\n protected registerControl<T extends AbstractControl>(control: T, replace = false): AbstractControl {\n const container: FormContainer = this.parent || this.formGroup;\n if (!container) {\n return control;\n }\n const existing = container.controls[this.caseField.id];\n if (existing) {\n if (replace) {\n // Set the validators on the replacement with what already exists.\n control.setValidators(existing.validator);\n } else {\n return existing;\n }\n }\n this.addValidators(this.caseField, control);\n FieldsUtils.addCaseFieldAndComponentReferences(control, this.caseField, this);\n return this.addControlToParent(control, container, replace);\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n // No validators by default, override this method to add validators to the form control\n }\n\n private addControlToParent(control: AbstractControl, parent: FormContainer, replace: boolean): AbstractControl {\n if (parent instanceof FormArray) {\n return this.addControlToFormArray(control, parent, replace);\n }\n return this.addControlToFormGroup(control, parent, replace);\n }\n\n private addControlToFormArray(control: AbstractControl, parent: FormArray, replace: boolean): AbstractControl {\n const index = parseInt(this.caseField.id, 10);\n if (replace && !isNaN(index)) {\n parent.setControl(index, control);\n } else {\n parent.push(control);\n }\n return control;\n }\n\n private addControlToFormGroup(control: AbstractControl, parent: FormGroup, replace: boolean): AbstractControl {\n if (replace) {\n if (this.caseField.field_type && this.caseField.field_type.id === 'CaseLink' && this.caseField.field_type.type === 'Complex' && /^-?\\d+$/.test(this.caseField.id)) {\n parent.setControl('CaseReference', control['controls']['CaseReference']);\n } else {\n parent.setControl(this.caseField.id, control);\n }\n } else {\n parent.addControl(this.caseField.id, control);\n }\n return control;\n }\n}\n","import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { AbstractFormFieldComponent } from './abstract-form-field.component';\n\n@Directive()\nexport abstract class AbstractFieldWriteComponent extends AbstractFormFieldComponent implements OnChanges {\n\n @Input()\n public isExpanded = false;\n\n @Input()\n public isInSearchBlock = false;\n\n public constructor() {\n super();\n this.fixCaseField();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const change = changes['caseField'];\n if (change) {\n const cfNew = change.currentValue;\n if (!(cfNew instanceof CaseField)) {\n this.fixCaseField();\n }\n }\n }\n\n public createElementId(elementId: string): string {\n return `${this.id()}_${elementId}`;\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n FormValidatorsService.addValidators(caseField, control);\n }\n\n private fixCaseField() {\n if (this.caseField && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n }\n}\n","import { AfterViewInit, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { AbstractFieldWriteComponent } from '../../components/palette/base-field/abstract-field-write.component';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ShowCondition } from './domain/conditional-show.model';\n\n@Directive({ selector: '[ccdConditionalShowForm]' })\n/** Hides and shows all fields in a form. Works on read only fields and form fields.\n * The show condition is evaluated on all the fields of the page. i.e. read only and form fields.\n * Evaluation of the show condition includes disabled fields, which can be on their initial value or empty. Executes on the\n * host field initialization and when any field of the form changes.\n * Collaborates with the GreyBarService to show a vertical grey bar when a field initially hidden on the page is shown. When returning\n * to the page after the page has been left, the grey bar has to be redisplayed. If instead on initial page load the field renders as\n * initially shown, the grey bar is not displayed.\n */\nexport class ConditionalShowFormDirective implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() public caseFields: CaseField[];\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n\n private allFieldValues: any;\n private formChangesSubscription: Subscription;\n\n constructor(private readonly fieldsUtils: FieldsUtils) {\n }\n\n public ngOnInit() {\n if (!this.formGroup) {\n this.formGroup = new FormGroup({});\n }\n }\n\n /**\n * Moved the evaluation of show/hide conditions and subscription\n * to form changes until after the form has been fully created.\n *\n * Prior to this change, I traced more than 5,100,000 firings of\n * the evaluateCondition INSIDE the show_condition check on page\n * load for an event with a lot of content. After this change,\n * that number dropped to fewer than 2,500 - that's a.\n */\n public ngAfterViewInit() {\n this.evalAllShowHideConditions();\n this.subscribeToFormChanges();\n }\n\n public ngOnDestroy() {\n this.unsubscribeFromFormChanges();\n }\n\n /*\n * Delay the execution of evalShowHideConditions for 100ms\n * Evaluating showHideConditions on input is inefficient as all forms are evaluated\n * whilst the user is still typing. We are better off allowing the user to finish typing\n * then evaluate the show hide conditions.\n */\n private subscribeToFormChanges() {\n this.unsubscribeFromFormChanges();\n this.formChangesSubscription = this.formGroup.valueChanges\n .pipe(\n debounceTime(100)\n )\n .subscribe(_ => {\n this.evalAllShowHideConditions();\n });\n }\n\n private evaluateControl(control: AbstractControl) {\n const cf = control['caseField'] as CaseField;\n const component = control['component'] as AbstractFormFieldComponent;\n this.evaluateCondition(cf, component, control);\n }\n\n private evaluateCondition(cf: CaseField, component: AbstractFormFieldComponent, control: AbstractControl) {\n if (cf) {\n if (cf.display_context === 'HIDDEN') {\n cf.hidden = true; // display_context === 'HIDDEN' means always hide\n } else if (cf.show_condition) {\n const showCondition: ShowCondition = ShowCondition.getInstance(cf.show_condition);\n const condResult = showCondition.match(this.allFieldValues, this.buildPath(component, cf));\n if (cf.hidden === null || cf.hidden === undefined) {\n cf.hidden = false;\n }\n if (condResult === cf.hidden) {\n cf.hidden = !condResult;\n }\n // EUI-3267. If this field is showing, set the hiddenCannotChange flag.\n // This is used in the display of the grey bar.\n if (!cf.hidden) {\n cf.hiddenCannotChange = showCondition.hiddenCannotChange(this.caseFields);\n }\n // Disable the control if it's hidden so that it doesn't count towards the\n // validation state of the form, but only if it's actually being validated.\n if (control.validator) {\n if (cf.hidden === true && !control.disabled) {\n control.disable({ emitEvent: false });\n } else if (cf.hidden !== true && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n }\n }\n }\n\n // make sure for the 3 callbacks that we are bound to this via an arrow function\n private readonly handleFormControl = (formControl: FormControl): void => {\n this.evaluateControl(formControl);\n }\n\n private readonly handleFormArray = (formArray: FormArray): void => {\n this.evaluateControl(formArray);\n formArray.controls.forEach(formControl => {\n this.fieldsUtils.controlIterator(formControl, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n\n private readonly handleFormGroup = (formGroup: FormGroup): void => {\n this.evaluateControl(formGroup);\n let groupControl = formGroup;\n if (formGroup.get('value') && formGroup.get('value') instanceof FormGroup) { // Complex Field\n groupControl = formGroup.get('value') as FormGroup;\n } else if (formGroup.controls) {\n // Special Fields like AddressUK, AddressGlobal\n groupControl = formGroup;\n }\n if (groupControl.controls) {\n Object.keys(groupControl.controls).forEach(cKey => {\n // EUI-3359.\n // Get the control from groupControl.controls[cKey] rather than\n // groupControl.get(cKey) as the latter does pathing and will interpret\n // full stops in cKey as delimeters for being nested within an array,\n // which makes no sense in this situation.\n const control = groupControl.controls[cKey];\n this.fieldsUtils.controlIterator(control, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n }\n\n private evalAllShowHideConditions(): void {\n this.getCurrentPagesReadOnlyAndFormFieldValues();\n this.fieldsUtils.controlIterator(this.formGroup, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n }\n\n private buildPath(c: AbstractFormFieldComponent, field: CaseField): string {\n if (c && c instanceof AbstractFieldWriteComponent) {\n if (c.idPrefix) {\n return c.idPrefix + field.id;\n }\n }\n return field.id;\n }\n\n private getCurrentPagesReadOnlyAndFormFieldValues(): any {\n const formFields = this.getFormFieldsValuesIncludingDisabled();\n this.allFieldValues = this.fieldsUtils.mergeCaseFieldsAndFormFields(this.contextFields, formFields);\n return this.allFieldValues;\n }\n\n private getFormFieldsValuesIncludingDisabled(): any {\n return this.formGroup.getRawValue();\n }\n\n private unsubscribeFromFormChanges(): void {\n if (this.formChangesSubscription) {\n this.formChangesSubscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ConditionalShowFormDirective } from './conditional-show-form.directive';\nimport { ConditionalShowRegistrarService } from './services/conditional-show-registrar.service';\nimport { GreyBarService } from './services/grey-bar.service';\n\n@NgModule({\n declarations: [\n ConditionalShowFormDirective\n ],\n exports: [\n ConditionalShowFormDirective\n ],\n providers: [\n FieldsUtils,\n ConditionalShowRegistrarService,\n GreyBarService\n ]\n})\nexport class ConditionalShowModule {}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FieldTypeSanitiser {\n public static readonly FIELD_TYPE_COMPLEX: FieldTypeEnum = 'Complex';\n public static readonly FIELD_TYPE_COLLECTION: FieldTypeEnum = 'Collection';\n public static readonly FIELD_TYPE_DYNAMIC_LIST: FieldTypeEnum = 'DynamicList';\n public static readonly FIELD_TYPE_DYNAMIC_RADIO_LIST: FieldTypeEnum = 'DynamicRadioList';\n\n /**\n * This method finds dynamiclists in a form and replaces their string\n * values, with a JSON object, as below:\n * From: 'xyz'\n * To : {\n * value: { code:'xyz', label:'XYZ' },\n * list_items: [\n * { code:'xyz', label:'XYZ'},\n * { code:'abc', label:'ABC'}\n * ]\n * }\n * @param caseFields The CaseFields to assess.\n * @param data The data in the form.\n */\n public sanitiseLists(caseFields: CaseField[], data: any) {\n if (!data || !caseFields) {\n return;\n }\n caseFields.forEach(caseField => {\n\n switch (caseField.field_type.type) {\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_RADIO_LIST:\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_LIST:\n this.convertStringToDynamicListOutput(caseField, data);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COMPLEX:\n this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:\n if (Array.isArray(data[caseField.id])) {\n data[caseField.id].forEach((formElement: any) => {\n this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);\n });\n }\n break;\n }\n\n });\n }\n\n private convertStringToDynamicListOutput(field: CaseField, data: any): void {\n const stringValue = data[field.id];\n if (typeof stringValue === 'string') {\n const listItems = this.getListItems(field);\n const matches = listItems.filter(value => value.code === stringValue);\n if (matches && matches.length > 0) {\n data[field.id] = {\n value: matches[0],\n list_items: listItems\n };\n }\n }\n }\n\n private getListItems(field: CaseField): any[] {\n if (field) {\n if (field.list_items) {\n return field.list_items;\n }\n if (field.formatted_value && field.formatted_value.list_items) {\n return field.formatted_value.list_items;\n }\n }\n return [];\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../fields/fields.utils';\nimport { FieldTypeSanitiser } from './field-type-sanitiser';\n\n@Injectable()\nexport class FormValueService {\n /**\n * Gets value of a field based on fieldKey which is a dot separated reference to value and collection index.\n * There are two exceptions:\n * 1) In case of a multiselect being identified as a leaf a '---LABEL' suffix is appended to the key and values of that key are returned\n * form= { 'list': ['code1', 'code2'],\n * 'list---LABEL': ['label1', 'label2'] },\n * fieldKey=list,\n * colIndex=0,\n * value=label1, label2\n * 2) In case of a collection of simple fields is identified as a leaf all values are joined seperated by a comma\n * form= { 'collection': [{ 'value': 'value1' }, { 'value': 'value2' }] }\n * fieldKey=collection\n * colIndex=1\n * value=value1, value2\n *\n * Other examples:\n * 1) simple field reference: form={ 'PersonFirstName': 'John' }, fieldKey=PersonFirstName, value=John\n * 2) complex field reference:\n * form= { complex1': {\n * 'simple11': 'value11',\n * 'simple12': 'value12',\n * 'complex2': {\n * 'simple21': 'value21'\n * }\n * }},\n * fieldKey=complex1.complex2.simple21\n * colIndex=0,\n * value=value21\n * 3) complex field with collection field with complex field reference:\n * form= { 'complex1': {\n * 'collection1': [\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value1',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value12'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value2',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value21'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value3',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value31'\n * }\n * }\n * }\n * }\n * }\n * ]}}\n * fieldKey=complex1.collection1.complex2.complex3.complex4.simple2\n * colIndex=2,\n * value=value21\n * 4) collection of complex types\n * form= { 'collection1': [\n * { 'value': {'complex1': {\n * 'simple1': 'value11',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value12'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value21',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value22'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value31',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value32'\n * }\n * }\n * }}\n * }\n * ]}\n * fieldKey=collection1.complex1.complex2.complex3.simple2\n * colIndex=2\n * value=value32\n *\n * If key is pointing at a complex or collection leaf (not simple, collection of simple or multiselect types) then undefined is returned.\n * Also no key referring a leaf that is contained within collection will contain index number. The index is passed as an argument to the\n * method.\n * @param form form\n * @param fieldKey dot separated reference to value\n * @param colIndex index of collection item being referenced or 0 otherwise\n * @returns string simple or combined value of a field\n */\n public static getFieldValue(form, fieldKey, colIndex) {\n const fieldIds = fieldKey.split('.');\n const currentFieldId = fieldIds[0];\n const currentForm = form[currentFieldId];\n if (FieldsUtils.isMultiSelectValue(currentForm)) {\n return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');\n } else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {\n return currentForm.map(fieldValue => fieldValue['value']).join(', ');\n } else if (FieldsUtils.isCollection(currentForm)) {\n return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);\n } else if (FieldsUtils.isNonEmptyObject(currentForm)) {\n return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);\n } else {\n return currentForm;\n }\n }\n\n /**\n * A recursive method to remove anything with a `---LABEL` suffix.\n * @param data The data to recurse through and remove MultiSelect labels.\n */\n public static removeMultiSelectLabels(data: any): void {\n if (data && typeof data === 'object') {\n if (Array.isArray(data)) {\n for (const item of data) {\n FormValueService.removeMultiSelectLabels(item);\n }\n } else {\n const keys: string[] = Object.keys(data);\n for (const key of keys) {\n // Have we found one a MultiSelect label?\n if (key.indexOf(FieldsUtils.LABEL_SUFFIX) > 0) {\n // If so, remove it.\n delete data[key];\n } else {\n FormValueService.removeMultiSelectLabels(data[key]);\n }\n }\n }\n }\n }\n\n private static isReadOnly(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'READONLY' : false;\n }\n\n private static isOptional(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'OPTIONAL' : false;\n }\n\n private static isLabel(field: CaseField): boolean {\n if (field.field_type) {\n return field.field_type.type === 'Label';\n } else {\n return false;\n }\n }\n\n private static isEmptyData(data: object): boolean {\n if (data) {\n let allEmpty = true;\n for (const prop of Object.keys(data)) {\n const value = data[prop];\n if (value) {\n if (typeof(value) === 'object') {\n allEmpty = allEmpty && this.isEmptyData(value);\n } else {\n allEmpty = false;\n }\n }\n }\n return allEmpty;\n }\n return true;\n }\n\n /**\n * Should we clear out optional, empty, complex objects?\n * @param clearEmpty False property if we simply want to skip it.\n * @param data The data to assess for \"emptiness\".\n * @param field The CaseField that will tell us if this is optional.\n */\n private static clearOptionalEmpty(clearEmpty: boolean, data: object, field: CaseField): boolean {\n if (clearEmpty) {\n return FormValueService.isOptional(field) && FormValueService.isEmptyData(data);\n }\n return false;\n }\n\n constructor(private readonly fieldTypeSanitiser: FieldTypeSanitiser) {\n }\n\n public sanitise(rawValue: object): object {\n return this.sanitiseObject(rawValue);\n }\n\n public sanitiseCaseReference(reference: string): string {\n // strip non digits\n const s: string = reference.replace(/[\\D]/g, '');\n if (s.length > 16) {\n return s.substr(s.length - 16, 16);\n }\n return s;\n }\n\n public filterCurrentPageFields(caseFields: CaseField[], editForm: any): any {\n const cloneForm = JSON.parse(JSON.stringify(editForm));\n Object.keys(cloneForm['data']).forEach((key) => {\n if (caseFields.findIndex((element) => element.id === key) < 0) {\n delete cloneForm['data'][key];\n }\n });\n return cloneForm;\n }\n\n public sanitiseDynamicLists(caseFields: CaseField[], editForm: any): any {\n return this.fieldTypeSanitiser.sanitiseLists(caseFields, editForm.data);\n }\n\n public clearNonCaseFields(data: object, caseFields: CaseField[]) {\n for (const dataKey in data) {\n if (!caseFields.find(cf => cf.id === dataKey)) {\n delete data [dataKey];\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeNullLabels(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels that are null\n if ((data[field.id] === null) || (data[field.id] === '')) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n // Recurse and remove anything unnecessary from within a complex field.\n this.removeNullLabels(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeNullLabels(item, field.field_type.collection_field_type.complex_fields);\n this.removeNullLabels(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeEmptyDocuments(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Complex':\n // Recurse and remove any empty documents from within a complex field.\n this.removeEmptyDocuments(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear out empty documents\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any empty documents within.\n for (const item of collection) {\n this.removeEmptyDocuments(item, field.field_type.collection_field_type.complex_fields);\n this.removeEmptyDocuments(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n case 'Document':\n // Ensure this is executed only if the Document field is NOT hidden and is empty of data; hidden Document\n // fields are handled by the filterRawFormValues() function in CaseEditSubmit component\n if (field.hidden !== true && FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n /**\n * Clear out unnecessary fields from a data object, based on an array of CaseFields.\n * This method is recursive and will call itself if it encounters particular field types.\n *\n * @param data The object to be tidied up.\n * @param caseFields The CaseFields that need to be cleaned up.\n * @param clearEmpty Whether or not we should clear out empty, optional, complex objects.\n * @param clearNonCase Whether or not we should clear out non-case fields at the top level.\n */\n public removeUnnecessaryFields(data: object, caseFields: CaseField[], clearEmpty = false, clearNonCase = false): void {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n if (clearNonCase) {\n this.clearNonCaseFields(data, caseFields);\n }\n for (const field of caseFields) {\n if (!FormValueService.isLabel(field) && FormValueService.isReadOnly(field)) {\n // Retain anything that is readonly and not a label.\n continue;\n }\n if (field.hidden === true && field.display_context !== 'HIDDEN') {\n // Delete anything that is hidden (that is NOT readonly), and that\n // hasn't had its display_context overridden to make it hidden.\n delete data[field.id];\n } else if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels.\n delete data[field.id];\n break;\n case 'Document':\n if (FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n this.removeUnnecessaryFields(data[field.id], field.field_type.complex_fields, clearEmpty);\n // Also remove any optional complex objects that are completely empty.\n // EUI-4244: Ritesh's fix, passing true instead of clearEmpty.\n if (FormValueService.clearOptionalEmpty(true, data[field.id], field)) {\n delete data[field.id];\n }\n break;\n case 'Collection':\n // Check for valid collection data\n this.removeInvalidCollectionData(data, field);\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeUnnecessaryFields(item, field.field_type.collection_field_type.complex_fields, clearEmpty);\n this.removeUnnecessaryFields(item.value, field.field_type.collection_field_type.complex_fields, false);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n\n // Clear out any MultiSelect labels.\n FormValueService.removeMultiSelectLabels(data);\n }\n\n /**\n * Remove any empty or invalid arry with only id\n *\n * @param data The object tree of form values on which to perform the removal\n * @param field domain model object for each field\n */\n public removeInvalidCollectionData(data: object, field: CaseField) {\n if (data[field.id] && data[field.id].length > 0) {\n for (const objCollection of data[field.id]) {\n if (Object.keys(objCollection).length === 1 && Object.keys(objCollection).indexOf('id') > -1) {\n data[field.id] = [];\n }\n }\n }\n }\n\n /**\n * Remove any empty collection fields where a value of greater than zero is specified in the field's {@link FieldType}\n * `min` attribute.\n *\n * @param data The object tree of form values on which to perform the removal\n * @param caseFields The list of underlying {@link CaseField} domain model objects for each field\n */\n public removeEmptyCollectionsWithMinValidation(data: object, caseFields: CaseField[]): void {\n if (data && caseFields && caseFields.length > 0) {\n for (const field of caseFields) {\n if (field.field_type.type === 'Collection' && field.field_type.min > 0 && data[field.id] &&\n Array.isArray(data[field.id]) && data[field.id].length === 0) {\n delete data[field.id];\n }\n }\n }\n }\n\n private sanitiseObject(rawObject: object): object {\n if (!rawObject) {\n return rawObject;\n }\n\n let sanitisedObject = {};\n const documentFieldKeys = ['document_url', 'document_binary_url', 'document_filename'];\n for (const key in rawObject) {\n // If the key is one of documentFieldKeys, it means the field is of Document type. If the value of any of these\n // properties is null, the entire sanitised object to be returned should be null\n if (documentFieldKeys.indexOf(key) > -1 && rawObject[key] == null) {\n sanitisedObject = null;\n break;\n } else if ('CaseReference' === key) {\n sanitisedObject[key] = this.sanitiseValue(this.sanitiseCaseReference(String(rawObject[key])));\n } else {\n sanitisedObject[key] = this.sanitiseValue(rawObject[key]);\n if (Array.isArray(sanitisedObject[key])) {\n // If the 'sanitised' array is empty, whereas the original array had 1 or more items\n // delete the property from the sanatised object\n if (sanitisedObject[key].length === 0 && rawObject[key].length > 0) {\n delete sanitisedObject[key];\n }\n }\n }\n }\n return sanitisedObject;\n }\n\n private sanitiseArray(rawArray: any[]): any[] {\n if (!rawArray) {\n return rawArray;\n }\n\n rawArray.forEach(item => {\n if (item && item.hasOwnProperty('value')) {\n item.value = this.sanitiseValue(item.value);\n }\n });\n\n // Filter the array to ensure only truthy values are returned; double-bang operator returns the boolean true/false\n // association of a value. In addition, if the array contains items with a \"value\" object property, return only\n // those whose value object contains non-empty values, including for any descendant objects\n return rawArray\n .filter(item => !!item)\n .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);\n }\n\n private sanitiseValue(rawValue: any): any {\n if (Array.isArray(rawValue)) {\n return this.sanitiseArray(rawValue);\n }\n\n switch (typeof rawValue) {\n case 'object':\n return this.sanitiseObject(rawValue);\n case 'string':\n return rawValue.trim();\n case 'number':\n return String(rawValue);\n default:\n return rawValue;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValueService } from '../../../services/form/form-value.service';\n\n// @dynamic\n@Injectable()\nexport class PlaceholderService {\n\n public resolvePlaceholders(pageFormFields: object, stringToResolve: string): string {\n const ps = new PlaceholderService.PlaceholderSubstitutor({pageFormFields, stringToResolve});\n return ps.resolvePlaceholders();\n }\n\n}\n\nexport namespace PlaceholderService {\n export class PlaceholderSubstitutor {\n private static readonly PLACEHOLDER_CONTENT_PATTERN = /^[a-zA-Z0-9_.\\]\\[]+$/;\n private static readonly PLACEHOLDER_PATTERN = /\\$\\{[a-zA-Z0-9_.\\]\\[]+\\}/;\n private static readonly STARTING_PLACEHOLDER = '$';\n private static readonly CLOSING_PLACEHOLDER = '}';\n private static readonly OPENING_PLACEHOLDER = '{';\n private static readonly NEW_LINE = `\n___\n`;\n\n private static readonly PLACEHOLDER_START =\n PlaceholderSubstitutor.STARTING_PLACEHOLDER + PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n private static readonly PLACEHOLDER_END = PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n\n private stringToResolve: string;\n private scanIndex: number;\n private numberCollectionItemsAsPlaceholder: number;\n private collectionItemIndex: number;\n private fieldIdToSubstitute: string;\n private startSubstitutionIndex: number;\n private isCollecting: boolean;\n private readonly resolvedFormValues = [];\n private readonly pageFormFields: object;\n private readonly originalStringToResolve: string;\n\n private static wrapPlaceholder(str: string): string {\n return `${this.PLACEHOLDER_START}${str}${this.PLACEHOLDER_END}`;\n }\n\n constructor(values: { stringToResolve: string, pageFormFields: object }) {\n this.stringToResolve = values.stringToResolve;\n this.originalStringToResolve = values.stringToResolve;\n this.pageFormFields = values.pageFormFields;\n }\n\n public resolvePlaceholders(): string {\n while (this.hasUnresolvedPlaceholder()) {\n this.resetPlaceholderSubstitutor();\n while (this.doesPlaceholderContainCollectionItems()) {\n while (this.isScanningStringToResolve()) {\n if (this.isStartPlaceholderAndNotCollecting()) {\n this.setStartCollecting();\n } else if (this.isCollecting) {\n if (this.isClosingPlaceholder()) {\n this.substitute();\n } else if (!this.isOpeningPlaceholder()) {\n this.appendCharacter();\n }\n }\n this.scanIndex++;\n }\n this.appendOriginalStringIfCollectionItemAsPlaceholder();\n }\n }\n return this.stringToResolve;\n }\n\n private isScanningStringToResolve(): boolean {\n return this.scanIndex < this.stringToResolve.length;\n }\n\n private doesPlaceholderContainCollectionItems(): boolean {\n return this.numberCollectionItemsAsPlaceholder-- > 0;\n }\n\n private hasUnresolvedPlaceholder(): boolean {\n return this.stringToResolve\n && typeof this.stringToResolve === 'string'\n && !!this.stringToResolve.match(PlaceholderSubstitutor.PLACEHOLDER_PATTERN);\n }\n\n private isStartPlaceholderAndNotCollecting(): boolean {\n return this.isStartingPlaceholder() && !this.isCollecting;\n }\n\n private isOpeningPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n }\n\n private isClosingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n }\n\n private resetPlaceholderSubstitutor(): void {\n this.scanIndex = 0;\n this.numberCollectionItemsAsPlaceholder = 1;\n this.collectionItemIndex = 0;\n this.fieldIdToSubstitute = '';\n this.startSubstitutionIndex = -1;\n this.isCollecting = false;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n\n private substitute(): void {\n if (this.isMatchingPlaceholderPattern() && this.isFieldIdInFormFields()) {\n this.updateNumberOfCollectionItemsAsPlaceholder();\n if (this.isFieldIdToSubstituteReferringItself()) {\n this.substituteWithEmptyString();\n } else {\n this.substituteFromFormFields();\n }\n } else {\n this.substituteWithEmptyString();\n }\n this.isCollecting = false;\n this.fieldIdToSubstitute = '';\n }\n\n private appendOriginalStringIfCollectionItemAsPlaceholder(): void {\n if (this.collectionItemIndex < this.numberCollectionItemsAsPlaceholder - 1) {\n this.stringToResolve += PlaceholderSubstitutor.NEW_LINE + this.originalStringToResolve;\n this.collectionItemIndex += 1;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n }\n\n private setStartCollecting(): void {\n this.isCollecting = true;\n this.startSubstitutionIndex = this.scanIndex;\n }\n\n private appendCharacter(): void {\n this.fieldIdToSubstitute += this.stringToResolve.charAt(this.scanIndex);\n }\n\n private isMatchingPlaceholderPattern(): boolean {\n return !!this.fieldIdToSubstitute.match(PlaceholderSubstitutor.PLACEHOLDER_CONTENT_PATTERN);\n }\n\n private isFieldIdInFormFields(): boolean {\n return this.getFieldValue() !== undefined;\n }\n\n private isFieldIdToSubstituteReferringItself(): boolean {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const value = this.getSubstitutionValueOrEmpty();\n return placeholder === value;\n }\n\n private getSubstitutionValueLengthOrZero(): number {\n return this.pageFormFields[this.fieldIdToSubstitute] ? this.getSubstitutionValueOrEmpty().toString().length : 0;\n }\n\n /**\n * Gets the value from `this` field, which could be any of a number of different types:\n * string | number | object | string[] | object[] | maybe others...\n * @returns The value associated with `this` field.\n */\n private getFieldValue(): any {\n if (this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute]) {\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n } else {\n const fieldValue = FormValueService.getFieldValue(this.pageFormFields, this.fieldIdToSubstitute, this.collectionItemIndex);\n this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute] = fieldValue;\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n }\n }\n\n private getSubstitutionValueOrEmpty(): string {\n const fieldValue = this.getFieldValue();\n return fieldValue ? fieldValue : '';\n }\n\n private getNumberOfCollectionItemsIfAny(): number {\n const fieldIds = this.fieldIdToSubstitute.split('.');\n let pageFormFieldsClone = FieldsUtils.cloneObject(this.pageFormFields);\n let numberCollectionItemsAsPlaceholder = 1;\n\n // tslint:disable-next-line\n for (let index = 0; index < fieldIds.length; index++) {\n if (FieldsUtils.isCollection(pageFormFieldsClone)) {\n numberCollectionItemsAsPlaceholder = pageFormFieldsClone.length;\n break;\n } else if (pageFormFieldsClone[fieldIds[index]] === undefined) {\n break;\n } else {\n pageFormFieldsClone = pageFormFieldsClone[fieldIds[index]];\n }\n }\n return numberCollectionItemsAsPlaceholder;\n }\n\n private isStartingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.STARTING_PLACEHOLDER;\n }\n\n private updateNumberOfCollectionItemsAsPlaceholder(): void {\n if (this.fieldIdToSubstitute.split('.').length > 1) {\n const newNumber = this.getNumberOfCollectionItemsIfAny();\n this.numberCollectionItemsAsPlaceholder = Math.max(newNumber, this.numberCollectionItemsAsPlaceholder);\n }\n }\n\n private substituteFromFormFields(): void {\n this.doSubstitution(this.getSubstitutionValueOrEmpty());\n this.resetScanIndexAfterSubstitution();\n }\n\n private substituteWithEmptyString(): void {\n this.doSubstitution('');\n this.scanIndex = this.startSubstitutionIndex;\n }\n\n private doSubstitution(value: string): void {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const replacedString = this.stringToResolve.substring(this.startSubstitutionIndex).replace(placeholder, value);\n this.stringToResolve = this.stringToResolve.substring(0, this.startSubstitutionIndex).concat(replacedString);\n }\n\n private resetScanIndexAfterSubstitution(): void {\n this.scanIndex = this.startSubstitutionIndex + this.getSubstitutionValueLengthOrZero();\n }\n }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { PlaceholderService } from './services/placeholder.service';\n\n@Directive({ selector: '[ccdLabelSubstitutor]' })\n/**\n * Checks all labels and substitutes any placholders that reference other fields values.\n */\nexport class LabelSubstitutorDirective implements OnInit, OnDestroy {\n\n @Input() public caseField: CaseField;\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n @Input() public elementsToSubstitute: string[] = ['label', 'hint_text'];\n\n private initialLabel: string;\n private initialHintText: string;\n\n constructor(\n private readonly fieldsUtils: FieldsUtils,\n private readonly placeholderService: PlaceholderService\n ) {}\n\n public ngOnInit(): void {\n this.initialLabel = this.caseField.label;\n this.initialHintText = this.caseField.hint_text;\n this.formGroup = this.formGroup || new FormGroup({});\n\n const fields: object = this.getReadOnlyAndFormFields();\n\n if (this.shouldSubstitute('label')) {\n this.caseField.label = this.resolvePlaceholders(fields, this.caseField.label);\n }\n if (this.shouldSubstitute('hint_text')) {\n this.caseField.hint_text = this.resolvePlaceholders(fields, this.caseField.hint_text);\n }\n if (this.shouldSubstitute('value')) {\n this.caseField.value = this.resolvePlaceholders(fields, this.caseField.value);\n }\n }\n\n public ngOnDestroy(): void {\n this.caseField.label = this.initialLabel;\n this.caseField.hint_text = this.initialHintText;\n }\n\n private shouldSubstitute(element: string): boolean {\n return this.elementsToSubstitute.find(e => e === element) !== undefined;\n }\n\n private getReadOnlyAndFormFields(): object {\n const formFields: object = this.getFormFieldsValuesIncludingDisabled();\n // TODO: Delete following line when @Input contextFields is fixed - https://tools.hmcts.net/jira/browse/RDM-3504\n const uniqueContextFields: CaseField[] = this.removeDuplicates(this.contextFields);\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(uniqueContextFields, formFields);\n }\n\n private removeDuplicates(original: CaseField[]): CaseField[] {\n const unique: CaseField[] = [];\n original.forEach(caseField => {\n const isUnique = unique.filter(e => e.id === caseField.id).length === 0;\n if (isUnique) {\n unique.push(caseField);\n }\n });\n return unique;\n }\n\n private getFormFieldsValuesIncludingDisabled(): object {\n return this.formGroup.getRawValue();\n }\n\n private resolvePlaceholders(fields: object, stringToResolve: string): string {\n return this.placeholderService.resolvePlaceholders(fields, stringToResolve);\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { LabelSubstitutorDirective } from './label-substitutor.directive';\n\n@NgModule({\n declarations: [\n LabelSubstitutorDirective\n ],\n exports: [\n LabelSubstitutorDirective\n ],\n providers: [\n FieldsUtils,\n CurrencyPipe,\n ]\n})\nexport class LabelSubstitutorModule {}\n","import { AfterContentInit, Directive, ElementRef, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[focusElement]'\n})\n/**\n * Focuses the host element after the content of the view has been initialised. Works on writable fields. If the\n * directive is used on more than one element, the last element to be initialised will be in focus.\n * NOTE:\n * The directive focuses on the element only for the very first time when the content into the component's view, the\n * view that the directive is in is initialised. Refocusing the element will require explicit focusing for e.g. by\n * calling this directives focus() method from the host component.\n */\nexport class FocusElementDirective implements AfterContentInit {\n\n constructor(private readonly el: ElementRef, private readonly renderer: Renderer2) {\n }\n\n public ngAfterContentInit(): void {\n this.focus();\n }\n\n public focus(): void {\n if (this.el.nativeElement) {\n const focusElement = this.renderer.selectRootElement(this.el.nativeElement, true);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FocusElementDirective } from './focus-element.directive';\n\n@NgModule({\n declarations: [\n FocusElementDirective\n ],\n exports: [\n FocusElementDirective\n ]\n})\nexport class FocusElementModule {\n}\n","export class ActivityInfo {\n public forename: string;\n public surname: string;\n}\n\nexport class Activity {\n public caseId: string;\n public viewers: ActivityInfo[];\n public editors: ActivityInfo[];\n public unknownViewers: number;\n public unknownEditors: number;\n}\n\nexport enum DisplayMode {\n BANNER,\n ICON\n}\n","export class AddressModel {\n public AddressLine1 = '';\n public AddressLine2 = '';\n public AddressLine3 = '';\n public PostTown = '';\n public County = '';\n public PostCode = '';\n public Country = '';\n}\n","import { AlertLevel } from './alert-level.model';\n\nexport class Alert {\n public level: AlertLevel;\n public message: string;\n}\n","import { Type } from 'class-transformer';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Orderable } from '../../../domain/order/orderable.model';\nimport { WizardPageField } from './wizard-page-field.model';\n\n// @dynamic\nexport class WizardPage implements Orderable {\n\n public id: string;\n public label: string;\n public order?: number;\n\n @Type(() => WizardPageField)\n public wizard_page_fields: WizardPageField[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public show_condition?: string;\n\n public parsedShowCondition: ShowCondition;\n\n public getCol1Fields(): CaseField[] {\n return this.case_fields?.filter(f =>\n !f.wizardProps.page_column_no || f.wizardProps.page_column_no === 1);\n }\n public getCol2Fields(): CaseField[] {\n return this.case_fields?.filter(f => f.wizardProps.page_column_no === 2);\n }\n\n public isMultiColumn(): boolean {\n return this.getCol2Fields()?.length > 0;\n }\n}\n","import { Type } from 'class-transformer';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { CaseField } from '../definition/case-field.model';\n\n// @dynamic\nexport class CaseEventTrigger {\n\n public id: string;\n public name: string;\n public description?: string;\n public case_id?: string;\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public event_token: string;\n\n @Type(() => WizardPage)\n public wizard_pages: WizardPage[];\n\n public show_summary?: boolean;\n public show_event_notes?: boolean;\n public end_button_label?: string;\n public can_save_draft?: boolean;\n\n public hasFields(): boolean {\n return this.case_fields && this.case_fields.length !== 0;\n }\n\n public hasPages(): boolean {\n return this.wizard_pages && this.wizard_pages.length !== 0;\n }\n}\n","export class CaseViewEvent {\n public id: number;\n public timestamp: string;\n public summary: string;\n public comment: string;\n public event_id: string;\n public event_name: string;\n public state_id: string;\n public state_name: string;\n public user_id: number;\n public user_last_name: string;\n public user_first_name: string;\n public significant_item: {\n type: string,\n description: string,\n url: string\n };\n}\n","import { Orderable } from '../order';\n\nexport class CaseViewTrigger implements Orderable {\n public static readonly DELETE = 'DELETE';\n\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { EventCaseField } from './event-case-field.model';\n\nexport class CaseEvent implements Orderable {\n public id: string;\n public name: string;\n public post_state: string;\n public pre_states: string[];\n public case_fields: EventCaseField[];\n public description: string;\n public order?: number;\n public acls?: AccessControlList[];\n}\n","import { Orderable } from '../order';\n\nexport class CaseState implements Orderable {\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { CaseEvent } from './case-event.model';\nimport { CaseState } from './case-state.model';\n\n// Light clone of CaseType to be used in Jurisdiction class\n// to avoid cyclic dependency\nexport class CaseTypeLite {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n public description: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseEvent } from './case-event.model';\nimport { CaseField } from './case-field.model';\nimport { CaseState } from './case-state.model';\nimport { Jurisdiction } from './jurisdiction.model';\n\n// @dynamics\nexport class CaseType {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public description: string;\n public jurisdiction: Jurisdiction;\n public printEnabled?: boolean;\n}\n","export class EventCaseField {\n public case_field_id: string;\n public showCondition: string;\n}\n","import { Banner } from './banner.model';\nimport { CaseTypeLite } from './case-type-lite.model';\n\nexport class Jurisdiction {\n public id: string;\n public name: string;\n public description: string;\n public caseTypes: CaseTypeLite[];\n}\n","export class Banner {\n public bannerDescription: string;\n public bannerUrlText: string;\n public bannerUrl: string;\n public bannerViewed: boolean;\n public bannerEnabled: boolean;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { Orderable } from '../order';\n\n// @dynamic\nexport class CaseTab implements Orderable {\n public id: string;\n public label: string;\n public order?: number;\n @Type(() => CaseField)\n public fields: CaseField[];\n public show_condition?: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { CaseTab } from './case-tab.model';\nimport { CaseViewEvent } from './case-view-event.model';\nimport { CaseViewTrigger } from './case-view-trigger.model';\n\n// @dynamic\nexport class CaseView {\n public case_id?: string;\n public case_type: {\n id: string,\n name: string,\n description?: string,\n jurisdiction: {\n id: string,\n name: string,\n description?: string\n },\n printEnabled?: boolean\n };\n public state: {\n id: string,\n name: string,\n description?: string\n title_display?: string\n };\n public channels: string[];\n @Type(() => CaseTab)\n public tabs: CaseTab[];\n public triggers: CaseViewTrigger[];\n public events: CaseViewEvent[];\n @Type(() => CaseField)\n public metadataFields?: CaseField[];\n public basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n}\n","export class CasePrintDocument {\n public name: string;\n public type: string;\n public url: string;\n}\n","export class HRef {\n public href: string;\n}\n\nexport class DocumentLinks {\n public self: HRef;\n public binary: HRef;\n}\n\nexport class Document {\n public _links: DocumentLinks;\n public originalDocumentName: string;\n public hashToken?: string;\n}\n\nexport class Embedded {\n public documents: Document[];\n}\n\nexport class DocumentData {\n public _embedded: Embedded;\n public documents: Document[];\n}\n\nexport class FormDocument {\n public document_url: string;\n public document_binary_url: string;\n public document_filename: string;\n public document_hash?: string;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nexport class HttpError {\n\n constructor() {\n this.timestamp = new Date().toISOString();\n this.error = HttpError.DEFAULT_ERROR;\n this.message = HttpError.DEFAULT_MESSAGE;\n this.status = HttpError.DEFAULT_STATUS;\n this.exception = null;\n this.path = null;\n this.details = null;\n this.callbackErrors = null;\n this.callbackWarnings = null;\n }\n private static readonly DEFAULT_ERROR = 'Unknown error';\n private static readonly DEFAULT_MESSAGE = 'Something unexpected happened, our technical staff have been automatically notified';\n private static readonly DEFAULT_STATUS = 500;\n\n public timestamp: string;\n public status: number;\n public error: string;\n public exception: string;\n public message: string;\n public path: string;\n public details?: any;\n public callbackErrors?: any;\n public callbackWarnings?: any;\n public static from(response: HttpErrorResponse): HttpError {\n const error = new HttpError();\n\n // Check that the HttpErrorResponse contains an \"error\" object before mapping the error properties\n if (!!(response && response.error)) {\n Object.keys(error).forEach(key => {\n error[key] = response.error.hasOwnProperty(key) && response.error[key] ? response.error[key] : error[key];\n });\n }\n\n return error;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { OrganisationVm } from '../../services/organisation';\nimport { SimpleOrganisationModel } from './simple-organisation.model';\n\n@Injectable()\nexport class OrganisationConverter {\n\n private static toSimpleAddress(organisationModel: OrganisationVm): string {\n let simpleAddress = '';\n if (organisationModel.addressLine1) { simpleAddress += organisationModel.addressLine1 + '<br>'; }\n if (organisationModel.addressLine2) { simpleAddress += organisationModel.addressLine2 + '<br>'; }\n if (organisationModel.addressLine3) { simpleAddress += organisationModel.addressLine3 + '<br>'; }\n if (organisationModel.townCity) { simpleAddress += organisationModel.townCity + '<br>'; }\n if (organisationModel.county) { simpleAddress += organisationModel.county + '<br>'; }\n if (organisationModel.country) { simpleAddress += organisationModel.country + '<br>'; }\n if (organisationModel.postCode) { simpleAddress += organisationModel.postCode + '<br>'; }\n return simpleAddress;\n }\n\n public toSimpleOrganisationModel(organisationModel: OrganisationVm): SimpleOrganisationModel {\n return {\n organisationIdentifier: organisationModel.organisationIdentifier,\n name: organisationModel.name,\n address: OrganisationConverter.toSimpleAddress(organisationModel)\n };\n }\n}\n","import { Type } from 'class-transformer';\nimport { Jurisdiction } from '../definition/jurisdiction.model';\n\nfunction hasRoles(profile: Profile): boolean {\n if (profile.user && profile.user.idam && Array.isArray(profile.user.idam.roles)) {\n return profile.user.idam.roles.length > 0;\n }\n return false;\n}\n\n// @dynamic\nexport class Profile {\n public user: {\n idam: {\n id: string,\n email: string,\n forename: string,\n surname: string,\n roles: string[]\n }\n };\n\n public channels: string[];\n\n @Type(() => Jurisdiction)\n public jurisdictions: Jurisdiction[];\n\n public default: {\n workbasket: {\n jurisdiction_id: string,\n case_type_id: string,\n state_id: string\n }\n };\n\n public isSolicitor(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-solicitor')) !== undefined;\n }\n return false;\n }\n\n public isCourtAdmin(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-courtadmin')) !== undefined;\n }\n return false;\n }\n}\n","import { FieldType } from '../definition';\n\nexport class Field {\n constructor(\n public id: string,\n public field_type: FieldType,\n public elementPath?: string,\n public value?: string,\n public label?: string,\n public metadata?: boolean\n ) { }\n}\n","import { FieldType } from '../definition';\n\nexport class SearchResultViewColumn {\n public case_field_id: string;\n public case_field_type: FieldType;\n public display_context?: string;\n public display_context_parameter?: string;\n public label: string;\n public order: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\n\n// @dynamic\nexport class SearchResultViewItem {\n public case_id: string;\n public case_fields: object;\n @Type(() => CaseField)\n public hydrated_case_fields?: CaseField[];\n public columns?: object;\n public supplementary_data?: any;\n public display_context_parameter?: any;\n}\n","import { CaseDetails } from './case-details.model';\n\nexport const DRAFT_PREFIX = 'DRAFT';\nexport const DRAFT_QUERY_PARAM = 'draft';\nexport class Draft {\n\n public id: string;\n public document?: CaseDetails;\n public type?: string;\n public created?: string;\n public updated?: string;\n public static stripDraftId(draftId: string): string {\n return draftId.slice(DRAFT_PREFIX.length);\n }\n\n public static isDraft(id: string): boolean {\n return String(id).startsWith(DRAFT_PREFIX);\n }\n}\n","import { Type } from 'class-transformer';\nimport { Draft } from '../draft.model';\nimport { SearchResultViewColumn } from './search-result-view-column.model';\nimport { SearchResultViewItem } from './search-result-view-item.model';\n\n// @dynamic\nexport class SearchResultView {\n @Type(() => SearchResultViewColumn)\n public columns: SearchResultViewColumn[];\n\n @Type(() => SearchResultViewItem)\n public results: SearchResultViewItem[];\n public result_error?: string;\n\n public hasDrafts() {\n return this.results[0]\n && this.results[0].case_id\n && Draft.isDraft(this.results[0].case_id);\n }\n}\n","export class CaseDetails {\n public id: string;\n public jurisdiction: string;\n public case_type_id: string;\n public state: string;\n public created_date?: string;\n public last_modified?: string;\n public locked_by_user_id?: string;\n public security_level?: string;\n public case_data?: object;\n}\n","export class CaseEventData {\n public event: {\n id: string;\n summary: string;\n description: string;\n };\n public data?: object;\n public event_data?: object; // full event data\n public event_token: string;\n public ignore_warning: boolean;\n public draft_id?: string;\n public case_reference?: string;\n}\n","import { Orderable } from '../order/orderable.model';\nimport { Field } from '../search/field.model';\n\nexport class WorkbasketInputModel implements Orderable {\n constructor(\n public label: string,\n public order: number,\n public field: Field,\n public metadata?: boolean,\n public display_context_parameter?: string) {\n }\n}\n\nexport class WorkbasketInput {\n public workbasketInputs: WorkbasketInputModel[];\n}\n","export class PaginationMetadata {\n public total_results_count: number;\n public total_pages_count: number;\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { SearchResultViewItemComparator } from './search-result-view-item-comparator';\nimport { SortOrder } from './sort-order';\n\nexport class SortParameters {\n\n public comparator: SearchResultViewItemComparator;\n public sortOrder: SortOrder;\n\n constructor(comparator: SearchResultViewItemComparator, sortOrder: SortOrder) {\n this.comparator = comparator;\n this.sortOrder = sortOrder;\n }\n\n}\n","export class ComplexFieldOverride {\n public complex_field_element_id: string;\n public display_context: string;\n public label?: string;\n public hint_text?: string;\n public show_condition?: string;\n}\n","import { CaseField, FieldType } from '../domain/definition';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\n\nexport class CaseFieldBuilder {\n\n private readonly caseField: CaseField = new CaseField();\n public static create(): CaseFieldBuilder {\n return new CaseFieldBuilder();\n }\n\n public withACLs(acls: AccessControlList[]): CaseFieldBuilder {\n this.caseField.acls = acls;\n return this;\n }\n\n public withId(id: string): CaseFieldBuilder {\n this.caseField.id = id;\n return this;\n }\n\n public withFieldType(field_type: FieldType): CaseFieldBuilder {\n this.caseField.field_type = field_type;\n return this;\n }\n\n public withDisplayContext(display_context: string): CaseFieldBuilder {\n this.caseField.display_context = display_context;\n return this;\n }\n\n public withDisplayContextParameter(display_context_parameter: string): CaseFieldBuilder {\n this.caseField.display_context_parameter = display_context_parameter;\n return this;\n }\n\n public withHidden(hidden: boolean): CaseFieldBuilder {\n this.caseField.hidden = hidden;\n return this;\n }\n\n public withHintText(hint_text: string): CaseFieldBuilder {\n this.caseField.hint_text = hint_text;\n return this;\n }\n\n public withLabel(label: string): CaseFieldBuilder {\n this.caseField.label = label;\n return this;\n }\n\n public withOrder(order: number): CaseFieldBuilder {\n this.caseField.order = order;\n return this;\n }\n\n public withSecurityLabel(security_label: string): CaseFieldBuilder {\n this.caseField.security_label = security_label;\n return this;\n }\n\n public withShowCondition(show_condition: string): CaseFieldBuilder {\n this.caseField.show_condition = show_condition;\n return this;\n }\n\n public withShowSummaryContentOption(option: number): CaseFieldBuilder {\n this.caseField.show_summary_content_option = option;\n return this;\n }\n\n public withValue(value: any): CaseFieldBuilder {\n this.caseField.value = value;\n return this;\n }\n\n public withListValue(value: any): CaseFieldBuilder {\n this.caseField.list_items = value;\n return this;\n }\n\n public build(): CaseField {\n return this.caseField;\n }\n}\n","import { ComplexFieldOverride } from '../components/case-editor/domain/wizard-page-field-complex-override.model';\nimport { WizardPageField } from '../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../components/case-editor/domain/wizard-page.model';\nimport { ShowCondition } from '../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../domain/case-view/case-event-trigger.model';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\nimport { CaseField } from '../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../domain/definition/field-type-enum.model';\nimport { FieldType } from '../domain/definition/field-type.model';\nimport { FixedListItem } from '../domain/definition/fixed-list-item.model';\nimport { CaseFieldBuilder } from './case-field-builder';\n\nexport const textFieldType = (): FieldType => {\n return {\n id: 'Text',\n type: 'Text',\n complex_fields: []\n };\n};\n\nexport const createCaseEventTrigger = (id: string,\n name: string,\n case_id: string,\n show_summary: boolean,\n case_fields: CaseField[],\n wizard_pages = [],\n can_save_draft = false): CaseEventTrigger => {\n const eventTrigger = new CaseEventTrigger();\n\n eventTrigger.id = id;\n eventTrigger.name = name;\n eventTrigger.case_id = case_id;\n eventTrigger.show_summary = show_summary;\n eventTrigger.wizard_pages = wizard_pages;\n eventTrigger.event_token = 'test-token';\n eventTrigger.case_fields = case_fields;\n eventTrigger.can_save_draft = can_save_draft;\n return eventTrigger;\n};\n\nexport const aCaseField = (id: string, label: string, type: FieldTypeEnum, display_context: string,\n show_summary_content_option: number, typeComplexFields: CaseField[] = [],\n retain_hidden_value?: boolean, hidden?: boolean): CaseField => {\n return ({\n id: id || 'personFirstName',\n field_type: {\n id: type.toString() || 'Text',\n type: type || 'Text',\n complex_fields: typeComplexFields || []\n },\n display_context: display_context || 'OPTIONAL',\n label: label || 'First name',\n show_summary_content_option,\n retain_hidden_value: retain_hidden_value || false,\n hidden: hidden || false\n }) as CaseField;\n};\n\nexport const createWizardPage = (id: string,\n label: string,\n order: number,\n wizardPageFields: WizardPageField[] = [],\n caseFields: CaseField[] = [],\n showCondition: string,\n parsedShowCondition: ShowCondition = null): WizardPage => {\n const wizardPage = new WizardPage();\n wizardPage.id = id;\n wizardPage.label = label;\n wizardPage.order = order;\n wizardPage.wizard_page_fields = wizardPageFields;\n wizardPage.case_fields = caseFields;\n wizardPage.show_condition = showCondition;\n wizardPage.parsedShowCondition = parsedShowCondition;\n return wizardPage;\n};\n\nexport const createWizardPageField = (id: string,\n order: number,\n pageColumnNumber: number,\n complexFieldOverrides: ComplexFieldOverride[] = []): WizardPageField => {\n const wizardPageField = new WizardPageField();\n wizardPageField.case_field_id = id;\n wizardPageField.order = order;\n wizardPageField.page_column_no = pageColumnNumber;\n wizardPageField.complex_field_overrides = complexFieldOverrides;\n return wizardPageField;\n};\n\nexport const createComplexFieldOverride = (id: string,\n order: number,\n displayContext: string,\n label: string,\n hint: string,\n showCondition: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = displayContext;\n complexFieldOverride.label = label;\n complexFieldOverride.hint_text = hint;\n complexFieldOverride.show_condition = showCondition;\n return complexFieldOverride;\n};\n\nexport const createHiddenComplexFieldOverride = (id: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = 'HIDDEN';\n return complexFieldOverride;\n};\n\nexport const createCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined,\n show_condition = undefined,\n ACLs: AccessControlList[] = undefined,\n hidden?: boolean): CaseField => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withLabel(label || 'First name')\n .withHintText(hint || 'First name hint text')\n .withShowSummaryContentOption(0)\n .withOrder(order)\n .withShowCondition(show_condition || undefined)\n .withACLs(ACLs)\n .withHidden(hidden || false)\n .build();\n};\n\nexport const newCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined): CaseFieldBuilder => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withHintText(hint || 'First name hint text')\n .withLabel(label || 'First name')\n .withOrder(order)\n .withShowSummaryContentOption(0);\n};\n\nexport const createFieldType = (typeId: string,\n type: FieldTypeEnum,\n complex_fields: CaseField[] = [],\n collection_field_type: FieldType = undefined): FieldType => {\n return {\n id: typeId || 'Text',\n type: type || 'Text',\n complex_fields: complex_fields || [],\n collection_field_type: collection_field_type || undefined\n };\n};\n\nexport const createFixedListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'FixedList-' + typeId,\n type: 'FixedList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createMultiSelectListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'MultiSelectList-' + typeId,\n type: 'MultiSelectList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createACL = (role: string, create: boolean, read: boolean, update: boolean, _delete: boolean): AccessControlList => {\n return ({\n role: role || 'roleX',\n create,\n read,\n update,\n delete: _delete\n }) as AccessControlList;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\n\n@Pipe({\n name: 'ccdCaseReference'\n})\nexport class CaseReferencePipe implements PipeTransform {\n\n public transform(caseReference: string): string {\n if (!caseReference) {\n return '';\n }\n if (Draft.isDraft(caseReference)) {\n return DRAFT_PREFIX;\n } else {\n const regex = /(?:\\/)?(\\d{4})(\\d{4})(\\d{4})(\\d{4})/g;\n const result = String(caseReference).replace(regex, (match,\n g1, g2, g3, g4) => {\n const isLink = match[0] === '/';\n if (isLink) {\n return match;\n }\n\n return [g1, g2, g3, g4].join('-');\n });\n\n return result;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PlaceholderService } from '../../directives/substitutor/services/placeholder.service';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdCaseTitle'\n})\nexport class CcdCaseTitlePipe implements PipeTransform {\n constructor(private readonly placeholderService: PlaceholderService, private readonly fieldsUtils: FieldsUtils) {\n }\n public transform(caseTitle: string, caseFields: CaseField[], values: any): any {\n const caseFieldValues = this.getReadOnlyAndFormFields(values, caseFields);\n const result = this.placeholderService.resolvePlaceholders(caseFieldValues, caseTitle);\n return result;\n }\n\n private getReadOnlyAndFormFields(formGroup, caseFields: CaseField[]): any {\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(caseFields, formGroup.getRawValue());\n }\n\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SortOrder } from '../../../components/palette/complex/sort-order';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SortParameters } from '../../../domain/search/sorting/sort-parameters';\n\n@Pipe({\n name: 'ccdSortSearchResult'\n})\nexport class SortSearchResultPipe implements PipeTransform {\n\n public transform(searchResults: SearchResultViewItem[], sortParameters: SortParameters) {\n\n if (isUndefined(searchResults) || isUndefined(sortParameters)) {\n return searchResults;\n }\n return searchResults.sort(\n (a, b) => {\n return sortParameters.comparator.compare(a, b)\n * (sortParameters.sortOrder === SortOrder.DESCENDING ? 1 : -1);\n }\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CaseReferencePipe } from './case-reference';\nimport { CcdCaseTitlePipe } from './case-title';\nimport { SortSearchResultPipe } from './search-result/sorting/sort-search-result.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe\n ],\n exports: [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe\n ]\n})\nexport class PipesModule {}\n","export interface AccessManagementBasicViewMockModel {\n active?: boolean;\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n accessProcess?: string;\n}\n\nexport interface AccessManagementRequestReviewMockModel {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n}\n\nexport abstract class AbstractAppConfig {\n public abstract load(): Promise<void>;\n public abstract getLoginUrl(): string;\n public abstract getApiUrl(): string;\n public abstract getCaseDataUrl(): string;\n public abstract getDocumentManagementUrl(): string;\n public getDocumentManagementUrlV2(): string {\n return undefined;\n }\n public getDocumentSecureMode(): boolean {\n return undefined;\n }\n public abstract getRemoteDocumentManagementUrl(): string;\n public abstract getHrsUrl(): string;\n public abstract getRemoteHrsUrl(): string;\n public abstract getAnnotationApiUrl(): string;\n public abstract getPostcodeLookupUrl(): string;\n public abstract getOAuth2ClientId(): string;\n public abstract getPaymentsUrl(): string;\n public abstract getPayBulkScanBaseUrl(): string;\n public abstract getCreateOrUpdateDraftsUrl(ctid: string): string;\n public abstract getViewOrDeleteDraftsUrl(did: string): string;\n public abstract getActivityUrl(): string;\n public abstract getActivityNexPollRequestMs(): number;\n public abstract getActivityRetry(): number;\n public abstract getActivityBatchCollectionDelayMs(): number;\n public abstract getActivityMaxRequestPerBatch(): number;\n public abstract getCaseHistoryUrl(caseId: string, eventId: string): string;\n public abstract getPrintServiceUrl(): string;\n /**\n * Dummy version replacing deprecated `getRemotePrintServiceUrl()`, to be removed in next major release\n * @deprecated\n * @returns `undefined`\n */\n public getRemotePrintServiceUrl(): string {\n return undefined;\n }\n public abstract getPaginationPageSize(): number;\n public abstract getBannersUrl(): string;\n public abstract getPrdUrl(): string;\n public abstract getCacheTimeOut(): number;\n public abstract getWorkAllocationApiUrl(): string;\n public getUserInfoApiUrl(): string {\n return undefined;\n }\n public getAccessManagementMode(): boolean {\n return undefined;\n }\n public getAccessManagementBasicViewMock(): AccessManagementBasicViewMockModel {\n return undefined;\n }\n public getAccessManagementRequestReviewMockModel(): AccessManagementRequestReviewMockModel {\n return undefined;\n }\n public getLocationRefApiUrl(): string {\n return undefined;\n }\n public getCamRoleAssignmentsApiUrl(): string {\n return undefined;\n }\n public abstract getRefundsUrl(): string;\n public abstract getPaymentReturnUrl(): string;\n}\n\nexport class CaseEditorConfig {\n public api_url: string;\n public case_data_url: string;\n public document_management_url: string;\n public document_management_url_v2: string;\n public hrs_url: string;\n public document_management_secure_enabled: boolean;\n public login_url: string;\n public oauth2_client_id: string;\n public postcode_lookup_url: string;\n public remote_document_management_url: string;\n public remote_hrs_url: string;\n public annotation_api_url: string;\n public payments_url: string;\n public pay_bulk_scan_url: string;\n public activity_batch_collection_delay_ms: number;\n public activity_next_poll_request_ms: number;\n public activity_retry: number;\n public activity_url: string;\n public activity_max_request_per_batch: number;\n public print_service_url: string;\n /**\n * remote_print_service_url marked as optional since deprecation, ahead of removal in next major release\n * @deprecated\n */\n public remote_print_service_url?: string;\n public pagination_page_size: number;\n public prd_url: string;\n public cache_time_out: number;\n public work_allocation_api_url: string;\n public user_info_api_url: string;\n public access_management_mode?: boolean;\n public access_management_basic_view_mock?: {\n active?: boolean,\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n },\n accessProcess?: string\n };\n public access_management_request_review_mock?: {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n };\n public location_ref_api_url?: string;\n public cam_role_assignments_api_url?: string;\n public refunds_url: string;\n public payment_return_url: string;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { AbstractAppConfig } from '../../../app.config';\n\n/**\n * `Oauth2Service` and `AuthService` cannot be merged as it creates a cyclic dependency on `AuthService` through `HttpErrorService`.\n */\n@Injectable()\nexport class AuthService {\n\n private static readonly PATH_OAUTH2_REDIRECT = '/oauth2redirect';\n\n constructor(private readonly appConfig: AbstractAppConfig,\n @Inject(DOCUMENT) private readonly document: any) {}\n\n public signIn(): void {\n const loginUrl = this.appConfig.getLoginUrl();\n const clientId = this.appConfig.getOAuth2ClientId();\n const redirectUri = encodeURIComponent(this.redirectUri());\n\n this.document.location.href = `${loginUrl}?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}`;\n }\n\n public redirectUri(): string {\n return this.document.location.origin + AuthService.PATH_OAUTH2_REDIRECT;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { AuthService } from '../auth/auth.service';\n\n\n@Injectable()\nexport class HttpErrorService {\n\n constructor(private readonly authService: AuthService) {}\n\n private static readonly CONTENT_TYPE = 'Content-Type';\n private static readonly JSON = 'json';\n\n private error: HttpError;\n public static convertToHttpError(error: HttpErrorResponse | any): HttpError {\n if (error instanceof HttpError) {\n return error;\n }\n let httpError = new HttpError();\n if (error instanceof HttpErrorResponse) {\n if (error.headers\n && error.headers.get(HttpErrorService.CONTENT_TYPE)\n && error.headers.get(HttpErrorService.CONTENT_TYPE).indexOf(HttpErrorService.JSON) !== -1) {\n try {\n httpError = HttpError.from(error);\n } catch (e) {\n console.error(e, e.message);\n }\n }\n if (!httpError.status) {\n httpError.status = error.status;\n }\n } else if (error) {\n if (error.message) {\n httpError.message = error.message;\n }\n if (error.status) {\n httpError.status = error.status;\n }\n }\n return httpError;\n }\n\n public setError(error: HttpError) {\n this.error = error;\n }\n\n public removeError(): HttpError {\n const error = this.error;\n this.error = null;\n return error;\n }\n\n public handle(error: HttpErrorResponse | any, redirectIfNotAuthorised = true): Observable<never> {\n const httpError: HttpError = HttpErrorService.convertToHttpError(error);\n if (redirectIfNotAuthorised && (httpError.status === 401 || httpError.status === 403)) {\n this.authService.signIn();\n }\n return throwError(httpError);\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService } from './http-error.service';\n\n@Injectable()\nexport class HttpService {\n\n private static readonly HEADER_ACCEPT = 'Accept';\n private static readonly HEADER_CONTENT_TYPE = 'Content-Type';\n\n constructor(\n private readonly httpclient: HttpClient,\n private readonly httpErrorService: HttpErrorService\n ) {}\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n\n public get(\n url: string,\n options?: OptionsType,\n redirectIfNotAuthorised = true,\n errorHandler?: (error: HttpErrorResponse) => HttpError): Observable<any> {\n return this.httpclient\n .get(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n let error: HttpErrorResponse | HttpError = res;\n if (typeof errorHandler === 'function') {\n error = errorHandler(res);\n }\n return this.httpErrorService.handle(error, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public post(url: string, body: any, options?: OptionsType, redirectIfNotAuthorised = true): Observable<any> {\n return this.httpclient\n .post(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public put(url: string, body: any, options?: OptionsType): Observable<any> {\n return this.httpclient\n .put(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public delete(url: string, options?: OptionsType): Observable<any> {\n return this.httpclient\n .delete(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n public setDefaultValue(options?: OptionsType): OptionsType {\n options = options || {observe: 'body'};\n options.withCredentials = true;\n\n if (!options.headers) {\n options.headers = new HttpHeaders()\n .set(HttpService.HEADER_ACCEPT, 'application/json')\n .set(HttpService.HEADER_CONTENT_TYPE, 'application/json');\n }\n return options;\n }\n}\n\nexport interface OptionsType {\n headers?: HttpHeaders;\n observe: 'body';\n params?: HttpParams | { [param: string]: string | string[]; };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class SessionStorageService {\n\n /**\n * Get an item from the session storage.\n */\n public getItem(key: string): string {\n return sessionStorage.getItem(key);\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 from 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 { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService, HttpService, OptionsType } from '../http';\nimport { SessionStorageService } from '../session';\n\n// @dynamic\n@Injectable()\nexport class ActivityService {\n public static get ACTIVITY_VIEW() { return 'view'; }\n public static get ACTIVITY_EDIT() { return 'edit'; }\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly sessionStorageService: SessionStorageService\n ) {}\n\n public get isEnabled(): boolean {\n return this.activityUrl() && this.userAuthorised;\n }\n public static readonly DUMMY_CASE_REFERENCE = '0';\n\n private userAuthorised: boolean = undefined;\n\n private static handleHttpError(response: HttpErrorResponse): HttpError {\n const error: HttpError = HttpErrorService.convertToHttpError(response);\n if (response.status && response.status !== error.status) {\n error.status = response.status;\n }\n return error;\n }\n\n public getOptions(): OptionsType {\n const userDetails = JSON.parse(this.sessionStorageService.getItem('userDetails'));\n const headers = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', userDetails.token);\n const options: OptionsType = {\n headers,\n withCredentials: true,\n observe: 'body',\n };\n return options;\n }\n\n public getActivities(...caseId: string[]): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId.join(',')}/activity`;\n return this.http\n .get(url, options, false, ActivityService.handleHttpError)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public postActivity(caseId: string, activity: string): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId}/activity`;\n const body = { activity };\n return this.http\n .post(url, body, options, false)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public verifyUserIsAuthorized(): void {\n if (this.sessionStorageService.getItem('userDetails') === undefined) {\n return;\n }\n if (this.activityUrl() && this.userAuthorised === undefined) {\n this.getActivities(ActivityService.DUMMY_CASE_REFERENCE).subscribe(\n () => this.userAuthorised = true,\n error => {\n if ([401, 403].indexOf(error.status) > -1) {\n this.userAuthorised = false;\n } else {\n this.userAuthorised = true;\n }\n }\n );\n }\n }\n\n private activityUrl(): string {\n return this.appConfig.getActivityUrl();\n }\n\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport polling, { IOptions } from 'rx-polling';\nimport { EMPTY, Observable, Subject, Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { ActivityService } from './activity.service';\n\n// @dynamic\n@Injectable()\nexport class ActivityPollingService {\n\n private readonly pendingRequests = new Map<string, Subject<Activity>>();\n private currentTimeoutHandle: any;\n private pollActivitiesSubscription: Subscription;\n private readonly pollConfig: IOptions;\n private readonly batchCollectionDelayMs: number;\n private readonly maxRequestsPerBatch: number;\n\n constructor(private readonly activityService: ActivityService, private readonly ngZone: NgZone, private readonly config: AbstractAppConfig) {\n this.pollConfig = {\n interval: config.getActivityNexPollRequestMs(),\n attempts: config.getActivityRetry(),\n backgroundPolling: true\n };\n this.batchCollectionDelayMs = config.getActivityBatchCollectionDelayMs();\n this.maxRequestsPerBatch = config.getActivityMaxRequestPerBatch();\n }\n\n public get isEnabled(): boolean {\n return this.activityService.isEnabled;\n }\n\n public subscribeToActivity(caseId: string, done: (activity: Activity) => void): Subject<Activity> {\n if (!this.isEnabled) {\n return new Subject<Activity>();\n }\n\n let subject = this.pendingRequests.get(caseId);\n if (subject) {\n subject.subscribe(done);\n } else {\n subject = new Subject<Activity>();\n subject.subscribe(done);\n this.pendingRequests.set(caseId, subject);\n }\n if (this.pendingRequests.size === 1) {\n this.ngZone.runOutsideAngular(() => {\n this.currentTimeoutHandle = setTimeout(\n () => this.ngZone.run(() => {\n // console.log('timeout: flushing requests')\n this.flushRequests();\n }),\n this.batchCollectionDelayMs);\n });\n }\n\n if (this.pendingRequests.size >= this.maxRequestsPerBatch) {\n // console.log('max pending hit: flushing requests');\n this.flushRequests();\n }\n return subject;\n }\n\n public stopPolling() {\n if (this.pollActivitiesSubscription) {\n this.pollActivitiesSubscription.unsubscribe();\n }\n }\n\n public flushRequests(): void {\n if (this.currentTimeoutHandle) {\n clearTimeout(this.currentTimeoutHandle);\n this.currentTimeoutHandle = undefined;\n }\n\n const requests = new Map(this.pendingRequests);\n this.pendingRequests.clear();\n this.performBatchRequest(requests);\n }\n\n public pollActivities(...caseIds: string[]): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n return polling(this.activityService.getActivities(...caseIds), this.pollConfig);\n }\n\n public postViewActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_VIEW);\n }\n\n public postEditActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_EDIT);\n }\n\n protected performBatchRequest(requests: Map<string, Subject<Activity>>): void {\n const caseIds = Array.from(requests.keys()).join();\n // console.log('issuing batch request for cases: ' + caseIds);\n this.ngZone.runOutsideAngular( () => {\n // run polling outside angular zone so it does not trigger change detection\n this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe(\n // process activity inside zone so it triggers change detection for activity.component.ts\n (activities: Activity[]) => this.ngZone.run( () => {\n activities.forEach((activity) => {\n // console.log('pushing activity: ' + activity.caseId);\n requests.get(activity.caseId).next(activity);\n });\n },\n (err) => {\n console.log('error: ' + err);\n Array.from(requests.values()).forEach((subject) => subject.error(err));\n }\n )\n );\n });\n }\n\n private postActivity(caseId: string, activityType: string): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n const pollingConfig = {\n ...this.pollConfig,\n interval: 5000 // inline with CCD Backend\n };\n\n return polling(this.activityService.postActivity(caseId, activityType), pollingConfig);\n }\n}\n","import { AddressModel } from '../../domain/addresses/address.model';\nimport { AddressesService } from './addresses.service';\n\n/**\n * Moving all this logic here into Address Parser class, so that it\n * will be easier for us when we move this parsing logic to into\n * `Shim` java service.\n */\n export class AddressParser {\n public parse(address: any) {\n const classification = `${address.CLASSIFICATION_CODE}`;\n const addressModel = new AddressModel();\n addressModel.AddressLine1 = this.parseAddressLine1(classification, address);\n addressModel.AddressLine2 = this.parseAddressLine2(classification, address);\n addressModel.AddressLine3 = this.parseAddressLine3(classification, address);\n addressModel.PostCode = address.POSTCODE;\n addressModel.PostTown = address.POST_TOWN;\n addressModel.Country = AddressesService.UK;\n return addressModel;\n }\n\n private parseAddressLine1(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.ORGANISATION_NAME} ${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n } else {\n addressLine =\n `${address.ORGANISATION_NAME}${this.prefixWithCommaIfPresent(address.BUILDING_NAME)}` +\n `${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine2(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine = `${address.BUILDING_NAME} `;\n } else {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine3(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n } else {\n addressLine =\n `${address.DEPENDENT_LOCALITY} ${address.DOUBLE_DEPENDENT_LOCALITY} ${address.DEPENDENT_THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private removeNonAddressValues(line: string) {\n line = line.replace(' null', ' ').replace('null ', ' ');\n line = this.removeUndefinedString(line);\n line = this.removeInitialComma(line);\n line = this.removeEmptySpaces(line);\n return line;\n }\n\n private removeUndefinedString(value: string) {\n return value.replace(new RegExp('undefined', 'gi'), '');\n }\n\n private removeEmptySpaces(value: string) {\n return value.replace(new RegExp(' +', 'gi'), ' ').trim();\n }\n\n private removeInitialComma(value: string) {\n return value.replace(new RegExp('^,', 'gi'), '');\n }\n\n private prefixWithCommaIfPresent(value: string) {\n return value ? ', ' + value : value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { AddressModel } from '../../domain/addresses';\nimport { HttpService } from '../http';\nimport { AddressParser } from './address-parser';\n\n@Injectable()\nexport class AddressesService {\n\n public static readonly DPA = 'DPA';\n\n public static readonly UK = 'United Kingdom';\n\n public static readonly RD06 = 'RD06';\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getAddressesForPostcode(postcode: string): Observable<AddressModel[]> {\n return this.http\n .get(this.appConfig.getPostcodeLookupUrl()\n .replace('${postcode}', postcode), undefined, false)\n .pipe(\n map(res => res.results))\n .pipe(\n map(output => output.map(addresses =>\n this.format(new AddressParser().parse(addresses[AddressesService.DPA]))\n ))\n );\n }\n\n private format(addressModel: AddressModel) {\n return this.formatAddressLines(this.shiftAddressLinesUp(addressModel));\n }\n\n private formatAddressLines(addressModel: AddressModel) {\n ['AddressLine1', 'AddressLine2', 'AddressLine3', 'PostTown'].forEach(value => {\n addressModel[value] = this.toCapitalCase(addressModel[value]);\n });\n return addressModel;\n }\n\n private shiftAddressLinesUp(addressModel: AddressModel) {\n if (addressModel.AddressLine2 === '') {\n addressModel.AddressLine2 = addressModel.AddressLine3;\n addressModel.AddressLine3 = '';\n }\n if (addressModel.AddressLine1 === '') {\n addressModel.AddressLine1 = addressModel.AddressLine2;\n addressModel.AddressLine2 = '';\n }\n return addressModel;\n }\n\n private toCapitalCase(sentence: string) {\n sentence = sentence.toLowerCase();\n sentence.split(' ').forEach((value, index) => {\n sentence = sentence.replace(value, value.charAt(0).toUpperCase() + value.substr(1));\n }\n );\n return sentence;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { ConnectableObservable, Observable, Observer } from 'rxjs';\nimport { publish, refCount } from 'rxjs/operators';\nimport { AlertLevel } from '../../domain/alert/alert-level.model';\nimport { Alert } from '../../domain/alert/alert.model';\n\n@Injectable()\nexport class AlertService {\n // the preserved messages\n public preservedError = '';\n public preservedWarning = '';\n public preservedSuccess = '';\n\n // TODO: Remove\n public message: string;\n public level: AlertLevel;\n\n public successes: ConnectableObservable<Alert>;\n public errors: ConnectableObservable<Alert>;\n public warnings: ConnectableObservable<Alert>;\n // TODO: Remove\n public alerts: ConnectableObservable<Alert>;\n\n private successObserver: Observer<Alert>;\n private errorObserver: Observer<Alert>;\n private warningObserver: Observer<Alert>;\n // TODO: Remove\n private alertObserver: Observer<Alert>;\n\n private preserveAlerts = false;\n\n constructor(private readonly router: Router) {\n\n this.successes = Observable\n .create(observer => this.successObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.successes.subscribe();\n\n this.errors = Observable\n .create(observer => this.errorObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.errors.subscribe();\n\n this.warnings = Observable\n .create(observer => this.warningObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.warnings.subscribe();\n\n // TODO: Remove\n this.alerts = Observable\n .create(observer => this.alertObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.alerts.subscribe();\n\n this.router\n .events\n .subscribe(event => {\n if (event instanceof NavigationStart) {\n // if there is no longer a preserve alerts setting for the page then clear all observers and preserved messages\n if (!this.preserveAlerts) {\n this.clear();\n }\n // if not, then set the preserving of alerts to false so rendering to a new page\n this.preserveAlerts = false;\n }\n });\n }\n\n public clear(): void {\n this.successObserver.next(null);\n this.errorObserver.next(null);\n this.warningObserver.next(null);\n this.preservedError = '';\n this.preservedWarning = '';\n this.preservedSuccess = '';\n\n // EUI-3381.\n this.alertObserver.next(null);\n this.message = '';\n }\n\n public error(message: string): void {\n this.preservedError = this.preserveMessages(message);\n const alert: Alert = { level: 'error', message };\n this.errorObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public warning(message: string): void {\n this.preservedWarning = this.preserveMessages(message);\n const alert: Alert = { level: 'warning', message };\n this.warningObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public success(message: string, preserve = false): void {\n this.preservedSuccess = this.preserveMessages(message);\n this.preserveAlerts = preserve || this.preserveAlerts;\n const alert: Alert = { level: 'success', message };\n this.successObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public setPreserveAlerts(preserve: boolean, urlInfo?: string[]) {\n // if there is no url setting then just preserve the messages\n if (!urlInfo) {\n this.preserveAlerts = preserve;\n } else {\n // check if the url includes the sting given\n this.preserveAlerts = this.currentUrlIncludesInfo(preserve, urlInfo);\n }\n }\n\n public currentUrlIncludesInfo(preserve: boolean, urlInfo: string[]): boolean {\n // loop through the list of strings and check the router includes all of them\n for (const urlSnip of urlInfo) {\n if (!this.router.url.includes(urlSnip)) {\n // return the opposite boolean value if the router does not include one of the strings\n return !preserve;\n }\n }\n // return the boolean value if all strings are in the url\n return preserve;\n }\n\n public isPreserveAlerts(): boolean {\n return this.preserveAlerts;\n }\n\n public preserveMessages(message: string): string {\n // preserve the messages if set to preserve them\n if (this.isPreserveAlerts()) {\n return message;\n } else {\n return '';\n }\n }\n\n // TODO: Remove\n public push(msgObject) {\n this.message = msgObject.message;\n this.level = msgObject.level;\n\n this.alertObserver.next({\n level: this.level,\n message: this.message\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\n\n@Injectable()\nexport class CaseFieldService {\n\n public isOptional (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n public isReadOnly (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'READONLY';\n }\n\n public isMandatory (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'MANDATORY';\n }\n\n public isLabel (field: CaseField) {\n if (!field || !field.field_type) {\n return false;\n }\n return field.field_type.type === 'Label';\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { DocumentData } from '../../domain/document/document-data.model';\nimport { HttpService } from '../http';\n\n@Injectable()\nexport class DocumentManagementService {\n private static readonly PDF = 'pdf';\n private static readonly IMAGE = 'image';\n private static readonly WORD = 'word';\n private static readonly EXCEL = 'excel';\n private static readonly POWERPOINT = 'powerpoint';\n private static readonly TXT = 'txt';\n private static readonly RTF = 'rtf';\n\n // This delay has been added to give enough time to the user on the UI to see the info messages on the document upload\n // field for cases when uploads are very fast.\n private static readonly RESPONSE_DELAY = 1000;\n\n private static readonly imagesList: string[] = ['GIF', 'JPG', 'JPEG', 'PNG', 'gif', 'jpg', 'jpeg', 'png'];\n private static readonly wordList: string[] = ['DOC', 'DOCX', 'doc', 'docx'];\n private static readonly excelList: string[] = ['XLS', 'XLSX', 'xls', 'xlsx'];\n private static readonly powerpointList: string[] = ['PPT', 'PPTX', 'ppt', 'pptx'];\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public uploadFile(formData: FormData): Observable<DocumentData> {\n const url = this.getDocStoreUrl();\n // Do not set any headers, such as \"Accept\" or \"Content-Type\", with null values; this is not permitted with the\n // Angular HttpClient in @angular/common/http. Just create and pass a new HttpHeaders object. Angular will add the\n // correct headers and values automatically\n const headers = new HttpHeaders();\n return this.http\n .post(url, formData, {headers, observe: 'body'})\n .pipe(delay(DocumentManagementService.RESPONSE_DELAY));\n }\n\n public getMediaViewerInfo(documentFieldValue: any): string {\n const mediaViewerInfo = {\n document_binary_url: this.transformDocumentUrl(documentFieldValue.document_binary_url),\n document_filename: documentFieldValue.document_filename,\n content_type: this.getContentType(documentFieldValue),\n annotation_api_url: this.appConfig.getAnnotationApiUrl(),\n case_id: documentFieldValue.id,\n case_jurisdiction: documentFieldValue.jurisdiction\n };\n return JSON.stringify(mediaViewerInfo);\n }\n\n public getContentType(documentFieldValue: any): string {\n let fileExtension = '<unknown>';\n if (documentFieldValue.document_filename) {\n const position = documentFieldValue.document_filename.lastIndexOf('.');\n if (position === documentFieldValue.document_filename.length) {\n fileExtension = '';\n } else if (position >= 0) {\n fileExtension = documentFieldValue.document_filename.slice(position + 1);\n }\n }\n if (this.isImage(fileExtension)) {\n return DocumentManagementService.IMAGE;\n } else if (this.isWord(fileExtension)) {\n return DocumentManagementService.WORD;\n } else if (this.isExcel(fileExtension)) {\n return DocumentManagementService.EXCEL;\n } else if (this.isPowerpoint(fileExtension)) {\n return DocumentManagementService.POWERPOINT;\n } else if (fileExtension.toLowerCase() === 'txt') {\n return DocumentManagementService.TXT;\n } else if (fileExtension.toLowerCase() === 'rtf') {\n return DocumentManagementService.RTF;\n } else if (fileExtension.toLowerCase() === 'pdf') {\n return DocumentManagementService.PDF;\n } else {\n return fileExtension;\n }\n }\n\n public isImage(imageType: string): boolean {\n return DocumentManagementService.imagesList.find(e => e === imageType) !== undefined;\n }\n\n public isWord(wordType: string): boolean {\n return DocumentManagementService.wordList.find(e => e === wordType) !== undefined;\n }\n\n public isExcel(excelType: string): boolean {\n return DocumentManagementService.excelList.find(e => e === excelType) !== undefined;\n }\n\n public isPowerpoint(powerpointType: string): boolean {\n return DocumentManagementService.powerpointList.find(e => e === powerpointType) !== undefined;\n }\n\n private transformDocumentUrl(documentBinaryUrl: string): string {\n const remoteHrsPattern = new RegExp(this.appConfig.getRemoteHrsUrl());\n documentBinaryUrl = documentBinaryUrl.replace(remoteHrsPattern, this.appConfig.getHrsUrl());\n const remoteDocumentManagementPattern = new RegExp(this.appConfig.getRemoteDocumentManagementUrl());\n return documentBinaryUrl.replace(remoteDocumentManagementPattern, this.getDocStoreUrl());\n }\n\n private getDocStoreUrl(): string {\n return this.appConfig.getDocumentSecureMode() ? this.appConfig.getDocumentManagementUrlV2() : this.appConfig.getDocumentManagementUrl();\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { CaseEventData } from '../../domain/case-event-data.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\nimport { HttpErrorService, HttpService } from '../http';\n\n@Injectable()\nexport class DraftService {\n\n public static readonly V2_MEDIATYPE_DRAFT_CREATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-create.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_UPDATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-update.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_READ =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-read.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_DELETE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-delete.v2+json;charset=UTF-8';\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {}\n\n public createDraft(ctid: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_CREATE)\n .set('Content-Type', 'application/json');\n return this.http\n .post(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public updateDraft(ctid: string, draftId: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid) + draftId;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_UPDATE)\n .set('Content-Type', 'application/json');\n return this.http\n .put(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public getDraft(draftId: string): Observable<CaseView> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_READ)\n .set('Content-Type', 'application/json');\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public deleteDraft(draftId: string): Observable<{} | any> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_DELETE)\n .set('Content-Type', 'application/json');\n return this.http\n .delete(url, {headers, observe: 'body'}).pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public createOrUpdateDraft(caseTypeId: string, draftId: string, caseEventData: CaseEventData): Observable<Draft> {\n if (!draftId) {\n return this.createDraft(caseTypeId, caseEventData);\n } else {\n return this.updateDraft(caseTypeId, Draft.stripDraftId(draftId), caseEventData);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ErrorNotifierService {\n public errorSource: Subject<any> = new Subject<any>();\n public error = this.errorSource.asObservable();\n\n public announceError(error: any) {\n this.errorSource.next(error);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class EventStatusService {\n public static readonly CALLBACK_STATUS_INCOMPLETE = 'INCOMPLETE_CALLBACK';\n public static readonly DELETE_DRAFT_STATUS_INCOMPLETE = 'INCOMPLETE_DELETE_DRAFT';\n public static readonly CALLBACK_STATUS_COMPLETE = 'CALLBACK_COMPLETED';\n public static readonly DELETE_DRAFT_STATUS_COMPLETE = 'DELETE_DRAFT_COMPLETED';\n\n public static isIncomplete (eventStatus: string) {\n if (!eventStatus) {\n return false;\n }\n return EventStatusService.CALLBACK_STATUS_INCOMPLETE === eventStatus\n || EventStatusService.DELETE_DRAFT_STATUS_INCOMPLETE === eventStatus;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { Wizard } from '../../components/case-editor/domain/wizard.model';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldsUtils } from './fields.utils';\n\n// @dynamic\n@Injectable()\nexport class FieldsPurger {\n\n constructor(private readonly fieldsUtils: FieldsUtils) {}\n\n /**\n * Deletes a field value by setting the value of the corresponding {@link FormControl} to null (or an empty array\n * if the field type is `Collection`), except when the field type is `Complex` or `Document`. For `Complex` field\n * types, this recursive method is called until simple or \"base\" field types are reached. For `Document` field\n * types, its _sub-field_ `FormControl` values are set to null.\n *\n * @param formGroup The `FormGroup` instance containing the `FormControl` for the specified field\n * @param field The `CaseField` whose value is to be deleted in the backend\n * @param parentField Reference to the parent `CaseField`. Used for checking specifically where a Complex field and\n * its sub-fields have `retain_hidden_value` set to `true`, but the field's parent has it set to `false` or undefined\n */\n public deleteFieldValue(formGroup: FormGroup, field: CaseField, parentField?: CaseField): void {\n const fieldType: FieldTypeEnum = field.field_type.type;\n const fieldControl = formGroup.get(field.id);\n\n if (fieldControl) {\n switch (fieldType) {\n case 'Complex':\n /**\n * If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for:\n *\n * * Any sub-fields where retain_hidden_value is false/undefined, if the parent field has\n * retain_hidden_value = true;\n * * ALL sub-fields if the parent field has retain_hidden_value = true BUT its _own_ parent has\n * retain_hidden_value = false/undefined (thus overriding anything else);\n * * ALL sub-fields if the parent field has retain_hidden_value = false/undefined;\n * * Any Complex sub-fields *regardless of their retain_hidden_value* (in order to inspect the sub-fields\n * of a Complex type within another Complex type)\n */\n if (field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n (complexSubField.field_type.type !== 'Complex' &&\n (field.retain_hidden_value\n ? !complexSubField.retain_hidden_value || (parentField && !parentField.retain_hidden_value)\n : true))) {\n // The fieldControl is cast to a FormGroup because a Complex field type uses this as its underlying\n // implementation\n this.deleteFieldValue(fieldControl as FormGroup, complexSubField, field);\n }\n }\n }\n break;\n case 'Collection':\n // If it is a collection of Complex types, loop through each one; else fall through to be handled as a\n // collection of simple types (in the same way as MultiSelectList), unless it's a collection of Document\n // types, which requires different handling\n const collectionFieldType = field.field_type.collection_field_type;\n if (collectionFieldType.type === 'Complex' && collectionFieldType.complex_fields.length > 0) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControl.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of collectionFieldType.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value, passing in the parent FormGroup\n const parentFormGroup: FormGroup = (fieldControl as FormArray).at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }));\n }\n break;\n } else if (collectionFieldType.type === 'Document') {\n // Get the array of Document field values\n const documentFieldValues = fieldControl.value as any[];\n\n // For each Document field value, set all its property values to null (this is not accepted by the\n // back-end but will be handled by sanitiseObject() in FormValueService before sending - see below for\n // the single Document case)\n if (documentFieldValues) {\n documentFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Get the FormGroup containing the FormControl for the sub-field and set its value to null\n (fieldControl as FormArray).at(index).get(`value.${subFieldId}`).setValue(null);\n }));\n }\n break;\n }\n // Omitted \"break\" is intentional because a collection should be handled as per MultiSelectList if it is\n // not a collection of Complex types\n // tslint:disable-next-line: no-switch-case-fall-through\n case 'MultiSelectList':\n // Field control should be a FormArray, so map each of its values to null\n // NOTE: The FormArray cannot just be set to an empty array because Angular checks that all existing values\n // of a FormArray are present; setting the control's value to an empty array causes a runtime error\n fieldControl.setValue(fieldControl.value.map(() => null));\n break;\n case 'Document':\n // NOTE: The field control (a FormGroup in this case) cannot just be set to null because Angular checks that\n // all existing values of a FormGroup are present; setting the control's value to null causes a runtime error\n const documentFieldValue = fieldControl.value;\n for (const key in documentFieldValue) {\n if (fieldControl.get(key)) {\n // The back-end doesn't accept null as a valid value for any of the Document field type properties but\n // this is handled by sanitiseObject() in FormValueService, returning a null object for the entire\n // Document field, if any of its properties is null - which is accepted by the back-end\n fieldControl.get(key).setValue(null);\n }\n }\n break;\n // Note: the default case applies to DynamicList fields, too\n default:\n fieldControl.setValue(null);\n }\n }\n }\n\n public clearHiddenFields(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger, currentPageId: string): void {\n this.clearHiddenFieldForFieldShowCondition(currentPageId, form, wizard, eventTrigger);\n this.clearHiddenFieldForPageShowCondition(form, wizard, eventTrigger);\n }\n\n private clearHiddenFieldForPageShowCondition(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger): void {\n const currentEventState = this.fieldsUtils.getCurrentEventState(eventTrigger, form);\n wizard.pages.forEach(wp => {\n if (this.hasShowConditionPage(wp, currentEventState)) {\n const condition = new ShowCondition(wp.show_condition);\n if (this.isHidden(condition, currentEventState)) {\n this.resetPage(form, wp);\n }\n }\n });\n }\n\n private clearHiddenFieldForFieldShowCondition(currentPageId: string, form: FormGroup, wizard: Wizard,\n eventTrigger: CaseEventTrigger): void {\n const formFields = form.getRawValue();\n const currentPage: WizardPage = wizard.getPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(eventTrigger, form));\n currentPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(currentPage, wpf);\n if (this.hasShowConditionField(case_field, formFields)) {\n const condition = new ShowCondition(case_field.show_condition);\n if (this.isHidden(condition, formFields.data) && !(this.isReadonly(case_field))) {\n this.resetField(form, case_field);\n }\n }\n this.retainHiddenValueByFieldType(case_field, form);\n });\n }\n\n private retainHiddenValueByFieldType(field: CaseField, form: any): void {\n // so far only applies to the new field type OrganisationPolicy which needs to retain the default case role value\n // for other case fields there should be no side effects\n if (field && field.field_type && field.field_type.id === 'OrganisationPolicy') {\n // <bubble_wrap>\n // Doing some null checking to stop it from falling over.\n const data: FormGroup = form.get('data') as FormGroup;\n if (data) {\n const fieldGroup: FormGroup = data.controls[field.id] as FormGroup;\n if (fieldGroup) {\n const caseRoleFormControl: FormControl = fieldGroup.get('OrgPolicyCaseAssignedRole') as FormControl;\n if (caseRoleFormControl) {\n caseRoleFormControl.enable();\n }\n }\n }\n // </bubble_wrap>\n }\n }\n\n private isHidden(condition: ShowCondition, formFields: any): boolean {\n return !condition.match(formFields);\n }\n\n private findCaseFieldByWizardPageFieldId(currentPage: WizardPage, wizardPageField: WizardPageField): CaseField {\n return currentPage.case_fields.find(cf => cf.id === wizardPageField.case_field_id);\n }\n\n private hasShowConditionPage(wizardPage: WizardPage, formFields: any): boolean {\n return wizardPage.show_condition && formFields[this.getShowConditionKey(wizardPage.show_condition)];\n }\n\n private hasShowConditionField(case_field: CaseField, formFields: any): boolean {\n return case_field.show_condition && formFields.data[this.getShowConditionKey(case_field.show_condition)];\n }\n\n private getShowConditionKey(show_condition: string): string {\n // Need to allow for negated conditions, i.e. !=, as well as regular ones (=)\n // Also need to allow for conditions specified using the \"CONTAINS\" keyword\n return show_condition.split(/!=|=|CONTAINS/)[0];\n }\n\n private resetField(form: FormGroup, field: CaseField): void {\n /**\n * If the hidden field's value is to be retained, do nothing (except if it is a Complex type or collection of\n * Complex types). This is a change to the previous behaviour (which used to clear the field value but remove it\n * from submission as an update to the back-end). The new behaviour is to leave the field as is, so if the field\n * is hidden but then un-hidden before form submission, any previously entered value is retained.\n *\n * For Complex field types, an additional check of sub-fields is required. The same applies to a collection of\n * Complex types.\n */\n if (field.retain_hidden_value) {\n const fieldType: FieldTypeEnum = field.field_type.type;\n // If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for any sub-fields\n // where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their retain_hidden_value*\n // (in order to inspect the sub-fields of a Complex type within another Complex type)\n if (fieldType === 'Complex' && field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n !complexSubField.retain_hidden_value) {\n // Check for the existence of the parent FormGroup corresponding to the Complex field; if it exists, call\n // deleteFieldValue() to delete the sub-field\n const parentFormGroup = (form.get('data') as FormGroup).controls[field.id] as FormGroup;\n if (parentFormGroup) {\n this.deleteFieldValue(parentFormGroup, complexSubField);\n }\n }\n }\n } else if (fieldType === 'Collection' && field.field_type.collection_field_type.type === 'Complex' &&\n field.field_type.collection_field_type.complex_fields.length > 0) {\n // If the field is a collection of Complex types, loop through each one and call deleteFieldValue() for any\n // sub-fields where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their\n // retain_hidden_value* (in order to inspect the sub-fields of a Complex type within another Complex type)\n\n // Get the array of field controls corresponding to the Complex field values\n const fieldControls = (form.get('data') as FormGroup).controls[field.id] as FormArray;\n\n if (fieldControls) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControls.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of field.field_type.collection_field_type.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value if retain_hidden_value is false, OR if the sub-field type is\n // Complex and regardless of retain_hidden_value, passing in the parent FormGroup\n if (subCaseField &&\n ((subCaseField.field_type.type === 'Complex' && subCaseField.field_type.complex_fields.length > 0) ||\n !subCaseField.retain_hidden_value)) {\n const parentFormGroup: FormGroup = fieldControls.at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }\n }));\n }\n }\n }\n } else {\n // Delete the field value\n this.deleteFieldValue(form.get('data') as FormGroup, field);\n }\n }\n\n private resetPage(form: FormGroup, wizardPage: WizardPage): void {\n wizardPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(wizardPage, wpf);\n this.resetField(form, case_field);\n });\n }\n\n private getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n private isObject(elem: any): boolean {\n return this.getType(elem) === 'Object';\n }\n\n // TODO: call isReadOnly on CaseFields once we make it available\n private isReadonly(case_field: CaseField): boolean {\n return case_field.display_context.toUpperCase() === 'READONLY';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n@Injectable()\nexport class FormErrorService {\n\n public mapFieldErrors(errors: { id: string; message: string }[], form: FormGroup, errorKey: string): void {\n\n errors.forEach(error => {\n const formControl = this.getFormControl(form, error.id);\n\n if (formControl) {\n formControl.setErrors({\n [errorKey]: error.message\n });\n }\n });\n }\n\n private getFormControl(form: FormGroup, fieldId: string): FormControl {\n const fields = fieldId.split('.');\n\n let group: FormGroup = form;\n let inArray = false;\n let control: FormControl;\n fields.every((field, index) => {\n if (index === fields.length - 1) {\n control = group.controls[field] as FormControl;\n } else {\n group = group.controls[field] as FormGroup;\n\n if (inArray && group.controls['value']) {\n group = group.controls['value'] as FormGroup;\n }\n\n if (group && group.constructor && FormArray.name === group.constructor.name) {\n inArray = true;\n } else {\n inArray = false;\n }\n }\n return !!group;\n });\n\n return control;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\n\n@Injectable()\nexport class JurisdictionService {\n\n public readonly selectedJurisdictionSource = new Subject<Jurisdiction>();\n\n public selectedJurisdiction = this.selectedJurisdictionSource.asObservable();\n\n public announceSelectedJurisdiction(jurisdiction: Jurisdiction) {\n this.selectedJurisdictionSource.next(jurisdiction);\n }\n\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Banner } from '../../domain/definition/banner.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class BannersService {\n public static readonly V2_MEDIATYPE_BANNERS = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-banners.v2+json;charset=UTF-8';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getBanners(jurisdictionReferences: string[]): Observable<Banner[]> {\n const url = this.appConfig.getBannersUrl();\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', BannersService.V2_MEDIATYPE_BANNERS)\n .set('Content-Type', 'application/json');\n let params = new HttpParams();\n jurisdictionReferences.forEach(reference => params = params.append('ids', reference));\n return this.httpService\n .get(url, {params, headers, observe: 'body'})\n .pipe(\n map(body => body.banners)\n );\n }\n}\n","export enum NavigationOrigin {\n DRAFT_DELETED,\n ERROR_DELETING_DRAFT,\n DRAFT_RESUMED,\n EVENT_TRIGGERED,\n NO_READ_ACCESS_REDIRECTION\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class NavigationNotifierService {\n public navigationSource: BehaviorSubject<any> = new BehaviorSubject<any>({});\n public navigation = this.navigationSource.asObservable();\n\n public announceNavigation(origin: any) {\n this.navigationSource.next(origin);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Orderable } from '../../domain/order/orderable.model';\n\n// @dynamic\n@Injectable()\nexport class OrderService {\n\n /**\n * @deprecated Use `sort` function instead or `compareAsc`\n */\n public sortAsc: (a:Orderable, b:Orderable)=> number = OrderService.DEFAULT_COMPARE_FUNCTION;\n private static readonly DEFAULT_COMPARE_FUNCTION = (a: Orderable, b: Orderable) => {\n const aOrdered = a.order === 0 || a.order;\n const bOrdered = b.order === 0 || b.order;\n\n if (!aOrdered) {\n return !bOrdered ? 0 : 1;\n }\n\n if (!bOrdered) {\n return -1;\n }\n\n return a.order - b.order;\n }\n\n /**\n * Clone and sort array. Ascending order used by default.\n *\n * @param array Array to sort\n * @returns Orderable[] Sorted clone array.\n */\n public sort<T extends Orderable>(array: T[], sortingFunction = this.sortAsc): T[] {\n return array\n .slice()\n .sort(sortingFunction);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Profile } from '../../domain/profile/profile.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class ProfileService {\n\n public static readonly V2_MEDIATYPE_USER_PROFILE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-user-profile.v2+json;charset=UTF-8';\n private static readonly URL = '/internal/profile';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public get(): Observable<Profile> {\n const url = this.appConfig.getCaseDataUrl() + ProfileService.URL;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)\n .set('Content-Type', 'application/json');\n\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map((p: object) => plainToClass(Profile, p))\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Profile } from '../../domain/profile/profile.model';\n\n@Injectable()\nexport class ProfileNotifier {\n public readonly profileSource: BehaviorSubject<Profile> = new BehaviorSubject<Profile>(new Profile());\n public profile = this.profileSource.asObservable();\n\n public announceProfile(profile: Profile) {\n this.profileSource.next(profile);\n }\n\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { OptionsType } from '..';\n\n@Injectable()\nexport class RequestOptionsBuilder {\n\n public static readonly FIELD_PREFIX = 'case.';\n\n /**\n * Assess the value to see if it should be included in the request options.\n * If it's null or an \"empty\" string, it shouldn't be.\n *\n * @param value The value to be assessed.\n */\n private static includeParam(value: any): boolean {\n if (value) {\n if (typeof(value) === 'string') {\n return value.trim().length > 0;\n }\n return true;\n }\n return false;\n }\n\n public buildOptions(metaCriteria: object, caseCriteria: object, view?: SearchView): OptionsType {\n // TODO: This should probably be the now built-in URLSearchParams but it\n // requires a bigger refactor and there are bigger fish to fry right now.\n let params = new HttpParams();\n\n if (view) {\n params = params.set('view', view);\n }\n\n if (metaCriteria) {\n for (const criterion of Object.keys(metaCriteria)) {\n // EUI-3490. Make sure the parameter should be included for adding it.\n // This was already handled by the old URLSearchParams mechanism.\n if (RequestOptionsBuilder.includeParam(metaCriteria[criterion])) {\n params = params.set(criterion, metaCriteria[criterion]);\n }\n }\n }\n\n if (caseCriteria) {\n for (const criterion of Object.keys(caseCriteria)) {\n if (RequestOptionsBuilder.includeParam(caseCriteria[criterion])) {\n const key = RequestOptionsBuilder.FIELD_PREFIX + criterion;\n const value = caseCriteria[criterion].trim ? caseCriteria[criterion].trim() : caseCriteria[criterion];\n params = params.set(key, value.replace(/’/i, `'`));\n }\n }\n }\n\n const options: OptionsType = { params, observe: 'body'};\n return options;\n }\n\n}\n\nexport type SearchView = 'SEARCH' | 'WORKBASKET';\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@Injectable()\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.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 'toolkit-loading-' + timestamp; // format: [source-library]-[unique incrementing number]\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { SearchInput } from '../../components/search-filters';\nimport { SearchResultView } from '../../domain/search/search-result-view.model';\nimport { HttpService, OptionsType } from '../http/http.service';\nimport { LoadingService } from '../loading/loading.service';\nimport { RequestOptionsBuilder, SearchView } from '../request/request.options.builder';\n\n@Injectable()\nexport class SearchService {\n public static readonly V2_MEDIATYPE_SEARCH_INPUTS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-search-input-details.v2+json;charset=UTF-8';\n public static readonly VIEW_SEARCH = 'SEARCH';\n public static readonly VIEW_WORKBASKET = 'WORKBASKET';\n public static readonly FIELD_PREFIX = 'case.';\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly appConfig: AbstractAppConfig,\n private readonly httpService: HttpService,\n private readonly requestOptionsBuilder: RequestOptionsBuilder,\n private readonly loadingService: LoadingService) { }\n\n public search(jurisdictionId: string, caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView): Observable<SearchResultView> {\n const url = this.appConfig.getApiUrl() + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types/${caseTypeId}`\n + `/cases`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const loadingToken = this.loadingService.register();\n return this.httpService\n .get(url, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public searchCases(caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView, sort?: {column: string, order: number}): Observable<{}> {\n const url = this.appConfig.getCaseDataUrl() + `/internal/searchCases?ctid=${caseTypeId}&use_case=${view}`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const body: {} = {\n sort,\n size: this.appConfig.getPaginationPageSize()\n };\n const loadingToken = this.loadingService.register();\n return this.httpService\n .post(url, body, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getSearchInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/search-inputs`;\n }\n\n public getSearchInputs(jurisdictionId: string, caseTypeId: string): Observable<SearchInput[]> {\n const url = this.getSearchInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', SearchService.V2_MEDIATYPE_SEARCH_INPUTS)\n .set('Content-Type', 'application/json');\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, { headers, observe: 'body' })\n .pipe(\n map(body => {\n const searchInputs = body.searchInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n searchInputs.forEach(item => {\n item.field.label = item.label;\n item.field.display_context_parameter = item.display_context_parameter;\n });\n } else {\n throw new Error('Response expired');\n }\n return searchInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class RouterHelperService {\n public getUrlSegmentsFromRoot(route: ActivatedRouteSnapshot): string[] {\n return route.pathFromRoot\n .filter(r => r.url && r.url.length)\n .reduce((acc, r) => {\n r.url.forEach(url => {\n acc.push(url.path);\n });\n return acc;\n }, []);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n public locationAssign(url: string): void {\n window.location.assign(url);\n }\n\n public setLocalStorage(key: string, value: string) {\n window.localStorage.setItem(key, value);\n }\n\n public getLocalStorage(key: string) {\n return window.localStorage.getItem(key);\n }\n\n public clearLocalStorage() {\n window.localStorage.clear();\n }\n\n public removeLocalStorage(key: string) {\n window.localStorage.removeItem(key);\n }\n\n public setSessionStorage(key: string, value: string) {\n window.sessionStorage.setItem(key, value);\n }\n\n public getSessionStorage(key: string) {\n return window.sessionStorage.getItem(key);\n }\n\n public openOnNewTab(url: string): void {\n window.open(url, '_blank');\n }\n\n public confirm(message: string): boolean {\n return window.confirm(message);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { WorkbasketInputModel } from '../../domain';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class WorkbasketInputFilterService {\n public static readonly V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-workbasket-input-details.v2+json;charset=UTF-8';\n\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getWorkbasketInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/work-basket-inputs`;\n }\n\n public getWorkbasketInputs(jurisdictionId: string, caseTypeId: string): Observable<WorkbasketInputModel[]> {\n const url = this.getWorkbasketInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', WorkbasketInputFilterService.V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS)\n .set('Content-Type', 'application/json');\n\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => {\n const workbasketInputs = body.workbasketInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n workbasketInputs.forEach(item => {\n item.field.label = item.label;\n if (item.display_context_parameter) {\n item.field.display_context_parameter = item.display_context_parameter;\n }\n });\n } else {\n throw new Error('Response expired');\n }\n return workbasketInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig as AppConfig } from '../../../app.config';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class DefinitionsService {\n\n constructor(private readonly http: HttpService, private readonly appConfig: AppConfig) {}\n\n public getCaseTypes(jurisdictionId: string, access: string): Observable<CaseTypeLite[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types?access=${access}`;\n\n return this.http\n .get(url).pipe(map(response => response));\n }\n\n public getJurisdictions(access: string): Observable<Jurisdiction[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions?access=${access}`;\n\n return this.http\n .get(url)\n .pipe(map(response => response));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DefinitionsService } from './definitions.service';\n\n@NgModule({\n providers: [\n DefinitionsService\n ]\n})\n\nexport class DefinitionsModule {}\n","import { Injectable } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SearchResultViewColumn } from '../../../domain/search/search-result-view-column.model';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SearchResultViewItemComparator } from '../../../domain/search/sorting/search-result-view-item-comparator';\n\n@Injectable()\nexport class SearchResultViewItemComparatorFactory {\n\n public createSearchResultViewItemComparator(column: SearchResultViewColumn): SearchResultViewItemComparator {\n const fieldId = column.case_field_id;\n switch (column.case_field_type.type) {\n case ('MultiSelectList'): {\n return this.textArrayComparator(fieldId);\n }\n case ('Number'):\n case ('MoneyGBP'): {\n return this.numberComparator(fieldId);\n }\n case ('Text'):\n case ('TextArea'):\n case ('Email'):\n case ('Date'):\n case ('DateTime'):\n case ('Label'):\n case ('Postcode'):\n case ('YesOrNo'):\n case ('PhoneUK'):\n case ('FixedList'): {\n return this.stringComparator(fieldId);\n }\n default: {\n return undefined;\n }\n }\n }\n\n private numberComparator(fieldId: string): SearchResultViewItemComparator {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA === null ? 0 : fieldA;\n fieldB = isUndefined(fieldB) || fieldB === null ? 0 : fieldB;\n return fieldA - fieldB;\n }\n } as SearchResultViewItemComparator;\n }\n\n private stringComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n\n private textArrayComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.join().toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.join().toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, timer } from 'rxjs';\nimport { catchError, map, publishReplay, refCount, take } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\n\nexport interface OrganisationSuperUser {\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport interface OrganisationAddress {\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n dxAddress: any [];\n}\n\nexport interface Organisation {\n organisationIdentifier: string;\n name: string;\n status: string;\n sraId: string;\n sraRegulated: boolean;\n companyNumber: string;\n companyUrl: string;\n superUser: OrganisationSuperUser;\n paymentAccount: string [];\n contactInformation: OrganisationAddress [];\n}\n\nexport interface OrganisationVm {\n organisationIdentifier: string;\n name: string;\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n}\n\n@Injectable()\nexport class OrganisationService {\n\n constructor(private readonly http: HttpClient,\n private readonly appconfig: AbstractAppConfig) {}\n\n private organisations$: Observable<OrganisationVm[]>;\n public static mapOrganisation(organisations: Organisation[]): OrganisationVm [] {\n const organisationsVm = new Array<OrganisationVm>();\n organisations.forEach(org => {\n let contactInformation = null;\n if (org.contactInformation && org.contactInformation[0]) {\n contactInformation = org.contactInformation[0];\n }\n organisationsVm.push({\n organisationIdentifier: org.organisationIdentifier,\n name: org.name,\n addressLine1: contactInformation !== null ? contactInformation.addressLine1 : null,\n addressLine2: contactInformation !== null ? contactInformation.addressLine2 : null,\n addressLine3: contactInformation !== null ? contactInformation.addressLine3 : null,\n townCity: contactInformation !== null ? contactInformation.townCity : null,\n county: contactInformation !== null ? contactInformation.county : null,\n country: contactInformation !== null ? contactInformation.country : null,\n postCode: contactInformation !== null ? contactInformation.postCode : null,\n });\n });\n return organisationsVm;\n }\n\n public getActiveOrganisations(): Observable<OrganisationVm[]> {\n if (!this.organisations$) {\n const url = this.appconfig.getPrdUrl();\n const cacheTimeOut = this.appconfig.getCacheTimeOut();\n this.organisations$ = this.http.get<Organisation[]>(url)\n .pipe(map((orgs) => OrganisationService.mapOrganisation(orgs)),\n publishReplay(1), refCount(), take(1), catchError(e => {\n console.log(e);\n // Handle error and return blank Observable array\n return of([]);\n }));\n timer(cacheTimeOut).subscribe(() => {\n this.organisations$ = null;\n });\n }\n return this.organisations$;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class BrowserService {\n public isFirefox(): boolean {\n return window.navigator.userAgent.indexOf('Firefox') > -1;\n }\n public isSafari(): boolean {\n const isSafariAgent = window.navigator.userAgent.indexOf('Safari') > -1;\n const isChromeAgent = window.navigator.userAgent.indexOf('Chrome') > -1;\n if ((isChromeAgent) && (isSafariAgent)) {\n return false;\n }\n return isSafariAgent;\n }\n public isIEOrEdge(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LoadingService } from './loading.service';\n\n@NgModule({\n imports: [\n ],\n declarations: [\n ],\n exports: [\n ],\n providers: [\n LoadingService\n ]\n})\n\nexport class LoadingModule {}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class TestRouteSnapshotBuilder {\n private parent: ActivatedRouteSnapshot = null;\n private params: object = {};\n private data: object = {};\n\n public withParent(parent: ActivatedRouteSnapshot): TestRouteSnapshotBuilder {\n this.parent = parent;\n return this;\n }\n\n public withParams(params: object): TestRouteSnapshotBuilder {\n this.params = params;\n return this;\n }\n\n public withData(data: object): TestRouteSnapshotBuilder {\n this.data = data;\n return this;\n }\n\n public build(): ActivatedRouteSnapshot {\n return {\n url: [],\n params: this.params,\n queryParams: [],\n fragment: '',\n data: this.data,\n outlet: null,\n component: null,\n routeConfig: null,\n root: null,\n parent: this.parent,\n firstChild: null,\n children: [],\n pathFromRoot: null,\n paramMap: null,\n queryParamMap: null,\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["i0","ctx_r1","email","phone","workhours","FooterComponent","title","ctx_r2","selectors","inputs","isSolicitor","ngContentSelectors","decls","vars","consts","template","rf","ctx","FooterComponent_div_2_Template","FooterComponent_div_3_Template","Component","args","selector","templateUrl","styleUrls","Input","HeaderBarComponent","this","signOutRequest","EventEmitter","prototype","signOut","emit","username","outputs","HeaderBarComponent_div_3_Template","HeaderBarComponent_div_4_Template","HeaderBarComponent_div_9_Template","Output","NavigationComponent","ctx_r0","label","imageLink","NavigationItemComponent","link","NavigationItemComponent_input_3_Template","PhaseComponent","phaseLabel","phaseLink","HeadersModule","CommonModule","RouterModule","ngJitMode","declarations","imports","exports","NgModule","BodyComponent","encapsulation","ViewEncapsulation","None","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","s","Symbol","iterator","m","next","value","done","__read","n","e","ar","push","error","__spread","concat","_r8_1","_r6","hourChange","i0__namespace","inputFocus","ctx_r3","hourId","displayHour","_c0","isInvalid","_r13_1","_r11","minuteChange","ctx_r4","minuteId","displayMinute","_r18_1","_r16","secondChange","ctx_r5","secondId","displaySecond","DateInputComponent","isTouched","displayDay","displayMonth","displayYear","DATE_FORMAT","rawValue","ngOnInit","mandatory","isDateTime","hour","minute","second","writeValue","obj","removeMilliseconds","_a","split","datePart","timePart","dateValues","year","month","day","timeParts","validate","control","viewValue","required","isDateFormat","getValueForValidation","pattern","registerOnChange","fn","propagateChange","registerOnTouched","ngOnDestroy","dayChange","monthChange","yearChange","touch","formControl","markAsTouched","markAsUntouched","dayId","id","monthId","yearId","date","pad","join","val","test","num","padNum","undefined","toString","replace","dateTime","type","features","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","NG_VALIDATORS","_r21_1","_r0","_r1","_r2","DateInputComponent_div_16_Template","DateInputComponent_div_17_Template","DateInputComponent_div_18_Template","providers","AlertMessageType","AlertComponent","showIcon","alertMessageType","TYPE_WARNING","TYPE_SUCCESS","TYPE_ERROR","TYPE_INFORMATION","AlertComponent_ng_container_2_Template","AlertComponent_ng_container_3_Template","AlertComponent_ng_container_4_Template","AlertComponent_ng_container_5_Template","WARNING","ERROR","SUCCESS","INFORMATION","AlertIconClassPipe","transform","CLASS_SUCCESS","CLASS_WARNING","pure","Pipe","name","AlertModule","TabComponent","selected","_r4_1","panel_r1","$implicit","show","_c1","_c2","TabsComponent","route","panelIds","ngAfterContentInit","_this","panels","forEach","panel","snapshot","fragment","toArray","indexOf","i1","ActivatedRoute","contentQueries","dirIndex","TabsComponent_li_2_Template","tabs","ViewChildren","ContentChildren","TabsModule","ActivityBannerComponent","bannerType","description","ActivityIconComponent","DisplayMode","ActivityInfo","Activity","HttpError","timestamp","Date","toISOString","DEFAULT_ERROR","message","DEFAULT_MESSAGE","status","DEFAULT_STATUS","exception","path","details","callbackErrors","callbackWarnings","from","response","keys","AbstractAppConfig","getDocumentManagementUrlV2","getDocumentSecureMode","getRemotePrintServiceUrl","getUserInfoApiUrl","getAccessManagementMode","getAccessManagementBasicViewMock","getAccessManagementRequestReviewMockModel","getLocationRefApiUrl","getCamRoleAssignmentsApiUrl","AuthService","appConfig","document","signIn","loginUrl","getLoginUrl","clientId","getOAuth2ClientId","redirectUri","encodeURIComponent","location","href","origin","PATH_OAUTH2_REDIRECT","t","DOCUMENT","token","factory","Injectable","Inject","HttpErrorService","authService","convertToHttpError","httpError","HttpErrorResponse","headers","get","CONTENT_TYPE","JSON","console","setError","removeError","handle","redirectIfNotAuthorised","throwError","i1.AuthService","HttpService","httpclient","httpErrorService","url","options","errorHandler","setDefaultValue","pipe","catchError","res","post","body","put","delete","observe","withCredentials","HttpHeaders","set","HEADER_ACCEPT","HEADER_CONTENT_TYPE","HttpClient","i2.HttpErrorService","SessionStorageService","getItem","sessionStorage","setItem","removeItem","clear","ActivityService","http","sessionStorageService","userAuthorised","activityUrl","handleHttpError","getOptions","userDetails","parse","getActivities","caseId","_i","map","log","postActivity","activity","verifyUserIsAuthorized","DUMMY_CASE_REFERENCE","subscribe","getActivityUrl","i1.HttpService","i2.AbstractAppConfig","i3.SessionStorageService","ActivityPollingService","activityService","ngZone","config","pendingRequests","Map","pollConfig","interval","getActivityNexPollRequestMs","attempts","getActivityRetry","backgroundPolling","batchCollectionDelayMs","getActivityBatchCollectionDelayMs","maxRequestsPerBatch","getActivityMaxRequestPerBatch","isEnabled","subscribeToActivity","Subject","subject","size","runOutsideAngular","currentTimeoutHandle","setTimeout","run","flushRequests","stopPolling","pollActivitiesSubscription","unsubscribe","clearTimeout","requests","performBatchRequest","pollActivities","caseIds","polling","apply","EMPTY","postViewActivity","ACTIVITY_VIEW","postEditActivity","ACTIVITY_EDIT","activities","err","values","activityType","pollingConfig","assign","viewersPresent","editorsText","viewersText","ActivityComponent_div_0_div_1_Template","ActivityComponent_div_0_div_2_Template","ActivityComponent_div_0_div_3_Template","ActivityComponent_div_0_div_4_Template","displayMode","dspMode","ICON","editorsPresent","BANNER","i1.ActivityService","NgZone","ActivityComponent","activityPollingService","VIEWERS_PREFIX","VIEWERS_SUFFIX","EDITORS_PREFIX","EDITORS_SUFFIX","editors","unknownEditors","viewers","unknownViewers","subscription","newActivity","onActivityChange","generateDescription","isActivityEnabled","isActiveCase","complete","prefix","suffix","namesArray","unknownCount","resultText","activityInfo","forename","surname","replaceLastCommaWithAnd","str","trim","i1.ActivityPollingService","ActivityComponent_div_0_Template","ActivityModule","ConditionalShowRegistrarService","registeredDirectives","register","newDirective","reset","GreyBarService","rendererFactory","fieldsToggledToShow","renderer","createRenderer","showGreyBar","field","el","isCollection","addGreyBar","removeGreyBar","divSelector","nativeElement","querySelector","removeClass","addToggledToShow","fieldId","removeToggledToShow","filter","wasToggledToShow","find","addClass","RendererFactory2","FormatTranslatorService","translate","javaFormat","result","prev","inQuote","maybePush","flag","javaFormat_1","javaFormat_1_1","showOnlyDates","dateFormat","includes","removeTime","hasDate","toLowerCase","is24Hour","hasNoDay","hasNoDayAndMonth","hasHours","hasMinutes","hasSeconds","DatePipe","formatTrans","zone","format","resultDate","match","DATE_FORMAT_REGEXP","offsetDate","getDate","getOffsetDate","translateDateFormat","moment","MONTHS","getMonth","getFullYear","getHour","getHours","getMinutes","getSeconds","toInt","parsedDate","isNaN","shortISO","toLocaleDateString","reverse","thisMoment","localOffset","getTimezoneOffset","getTime","minutes","seconds","hourStr","hourNum","parseInt","RegExp","i1.FormatTranslatorService","WizardPageField","FixedListItem","FieldType","Type","CaseField","_list_items","isDynamic","_value","code","list_items","field_type","fixed_list_items","items","isComplexDisplay","display_context_parameter","extractBracketValue","isComplexEntry","isComplex","isReadonly","isOptional","isMandatory","_","isEmpty","display_context","toUpperCase","some","isCaseLink","complex_fields","cf","fmt","paramName","leftBracket","rightBracket","a","startsWith","substr","Expose","FieldsUtils","convertToCaseField","plainToClassFromExist","toValuesMap","caseFields","valueMap","prepareValue","getType","elem","slice","isObject","isNonEmptyObject","isArray","areCollectionValuesSimpleFields","fieldValue","isCollectionOfSimpleTypes","isMultiSelectValue","form","isNonEmptyArray","isCollectionWithValue","pageFormFields","cloneObject","getCaseFields","caseView","caseDataFields","reduce","acc","tab","fields","metadataFields","caseField","findIndex","metadataField","addCaseFieldAndComponentReferences","comp","containsNonEmptyValues","object","objectRefs","hasNonNullPrimitive","x","y","handleNestedDynamicLists","jsonBody","case_fields","setDynamicListDefinition","valueMap_1","complexField","getMoneyGBP","currencyPipe","getLabel","datePipe","textForInvalidField","getFixedListLabelByCodeOrEmpty","relevantItem","item","invalidValue","caseFieldType","rootCaseField","SERVER_RESPONSE_FIELD_TYPE_COMPLEX","SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE","dynamicListValue","getDynamicListValue","complexValue","data","formatted_value","SERVER_RESPONSE_FIELD_TYPE_COLLECTION","collection_field_type","jsonBlock","getNestedFieldValues","jsonData","output","elementKey","buildCanShowPredicate","eventTrigger","currentState","getCurrentEventState","page","parsedShowCondition","mergeCaseFieldsAndFormFields","controls","cloneCaseField","formFields","mergeFields","DEFAULT_MERGE_FUNCTION","mergeLabelCaseFieldsAndFormFields","LABEL_MERGE_FUNCTION","controlIterator","aControl","formArrayFn","formGroupFn","controlFn","FormArray","FormGroup","FormControl","mergeFunction","LABEL_SUFFIX","CurrencyPipe","idx","f","elements","ShowCondition","condition","orConditions","andConditions","search","OR_CONDITION_REGEXP","AND_CONDITION_REGEXP","addPathPrefixToCondition","showCondition","pathPrefix","extractConditions","getInstance","instance","instanceCache","hiddenCannotChange","conditions","allUnchangeable","getField","head","shift","ft","conditions_1","conditions_1_1","conditionsArray","separator","CONTAINS","CONDITION_EQUALS","CONDITION_NOT_EQUALS","matchAndConditions","updatePathName","matchByContextFields","contextFields","pathName_1","pathTail","pathFinalIndex_1","pop","mappedPathTail","Number","orCondition","matchEqualityCondition","every","andCondition","conditionSeparator","_b","tail","currentValue","findValueForComplexCondition","expectedValue","unquoted","checkValueContains","checkValueEquals","conditionSeparaor","checkMultiSelectListEquals","endsWith","removeStarChar","checkValueNotEquals","okIfBothEmpty","formatCurrentValue","expectedValues","sort","values_1","getValue","findValueForComplexConditionInArray","findValueForComplexConditionForPathIfAny","arrayIndex","dropNumberPath","isDynamicList","dynamiclist","_score","has","substring","right","Constants","MANDATORY","REGEX_WHITESPACES","FormValidatorsService","addValidators","CUSTOM_VALIDATED_TYPES","validators","Validators","regular_expression","emptyValidator","min","minLength","max","maxLength","validator","setValidators","AbstractFormFieldComponent","idPrefix","registerControl","container","parent","formGroup","existing","addControlToParent","addControlToFormArray","addControlToFormGroup","index","setControl","addControl","Directive","AbstractFieldWriteComponent","_super","isExpanded","isInSearchBlock","fixCaseField","ngOnChanges","changes","change","createElementId","elementId","ConditionalShowFormDirective","fieldsUtils","handleFormControl","evaluateControl","handleFormArray","formArray","handleFormGroup","groupControl","cKey","ngAfterViewInit","evalAllShowHideConditions","subscribeToFormChanges","unsubscribeFromFormChanges","formChangesSubscription","valueChanges","debounceTime","component","evaluateCondition","hidden","show_condition","condResult","allFieldValues","buildPath","disabled","enable","emitEvent","disable","getCurrentPagesReadOnlyAndFormFieldValues","getFormFieldsValuesIncludingDisabled","getRawValue","i1.FieldsUtils","ConditionalShowModule","FieldTypeSanitiser","sanitiseLists","FIELD_TYPE_DYNAMIC_RADIO_LIST","FIELD_TYPE_DYNAMIC_LIST","convertStringToDynamicListOutput","FIELD_TYPE_COMPLEX","FIELD_TYPE_COLLECTION","formElement","stringValue","listItems","getListItems","matches","PlaceholderService","PlaceholderSubstitutor","FormValueService","fieldTypeSanitiser","getFieldValue","fieldKey","colIndex","fieldIds","currentFieldId","currentForm","removeMultiSelectLabels","data_1","data_1_1","keys_1","keys_1_1","isReadOnly","isLabel","isEmptyData","allEmpty","_c","clearOptionalEmpty","clearEmpty","sanitise","sanitiseObject","sanitiseCaseReference","reference","filterCurrentPageFields","editForm","cloneForm","stringify","element","sanitiseDynamicLists","clearNonCaseFields","dataKey","removeNullLabels","caseFields_1","caseFields_1_1","collection","collection_1","e_5","collection_1_1","removeEmptyDocuments","caseFields_2","caseFields_2_1","collection_2","e_7","collection_2_1","removeUnnecessaryFields","clearNonCase","caseFields_3","caseFields_3_1","removeInvalidCollectionData","collection_3","e_9","collection_3_1","objCollection","removeEmptyCollectionsWithMinValidation","caseFields_4","caseFields_4_1","rawObject","sanitisedObject","documentFieldKeys","sanitiseValue","sanitiseArray","rawArray","i1.FieldTypeSanitiser","resolvePlaceholders","stringToResolve","resolvedFormValues","originalStringToResolve","wrapPlaceholder","PLACEHOLDER_START","PLACEHOLDER_END","hasUnresolvedPlaceholder","resetPlaceholderSubstitutor","doesPlaceholderContainCollectionItems","isScanningStringToResolve","isStartPlaceholderAndNotCollecting","setStartCollecting","isCollecting","isClosingPlaceholder","substitute","isOpeningPlaceholder","appendCharacter","scanIndex","appendOriginalStringIfCollectionItemAsPlaceholder","numberCollectionItemsAsPlaceholder","PLACEHOLDER_PATTERN","isStartingPlaceholder","charAt","OPENING_PLACEHOLDER","CLOSING_PLACEHOLDER","collectionItemIndex","fieldIdToSubstitute","startSubstitutionIndex","isMatchingPlaceholderPattern","isFieldIdInFormFields","updateNumberOfCollectionItemsAsPlaceholder","isFieldIdToSubstituteReferringItself","substituteWithEmptyString","substituteFromFormFields","NEW_LINE","PLACEHOLDER_CONTENT_PATTERN","getSubstitutionValueOrEmpty","getSubstitutionValueLengthOrZero","getNumberOfCollectionItemsIfAny","pageFormFieldsClone","STARTING_PLACEHOLDER","newNumber","Math","doSubstitution","resetScanIndexAfterSubstitution","placeholder","replacedString","LabelSubstitutorDirective","placeholderService","elementsToSubstitute","initialLabel","initialHintText","hint_text","getReadOnlyAndFormFields","shouldSubstitute","uniqueContextFields","removeDuplicates","original","unique","i2.PlaceholderService","LabelSubstitutorModule","FocusElementDirective","focus","focusElement","selectRootElement","ElementRef","Renderer2","FocusElementModule","WizardPage","getCol1Fields","wizardProps","page_column_no","getCol2Fields","isMultiColumn","CaseEventTrigger","hasFields","hasPages","wizard_pages","DRAFT_PREFIX","DRAFT_QUERY_PARAM","Draft","stripDraftId","draftId","isDraft","CaseAccessUtils","getMappedRoleCategory","roles","roleCategories","roleKeywords","roleOrCategoryExists","JUDGE_ROLE","JUDGE_ROLE_CATEGORY","PROFESSIONAL_ROLE","PROFESSIONAL_ROLE_CATEGORY","CITIZEN_ROLE","CITIZEN_ROLE_CATEGORY","ADMIN_ROLE","ADMIN_ROLE_CATEGORY","LEGAL_OPERATIONS_ROLE_CATEGORY","roleKeyword","roleCategory","categoryExists","keywordExists","getAMRoleName","accessType","aMRole","roleName","JUDGE_ROLE_NAME","PROFESSIONAL_ROLE_NAME","CITIZEN_ROLE_NAME","ADMIN_ROLE_NAME","LEGAL_OPERATIONS_ROLE_NAME","getAMPayload","assignerId","actorId","grantType","beginTime","endTime","roleRequest","process","caseReference","replaceExisting","requestedRoles","actorIdType","roleType","classification","attributes","notes","userId","time","comment","LEGAL_OPERATIONS_ROLE","OrderService","sortAsc","DEFAULT_COMPARE_FUNCTION","array","sortingFunction","aOrdered","order","bOrdered","WizardPageFieldToCaseFieldMapper","mapAll","wizardPageFields","wizardField","wizardPageField","case_field_id","fixShowConditionPath","complex_field_overrides","override","processComplexFieldOverride","hideParentIfAllChildrenHidden","case_field_leaf","caseFieldIds","complex_field_element_id","children","getCaseFieldChildren","getCaseFieldLeaf","collectionCaseField","preparePathPrefix","caseFieldId","caseLeaf","Error","childrenCaseFields","allCaseFieldsHidden","providedIn","AlertService","router","preservedError","preservedWarning","preservedSuccess","preserveAlerts","successes","Observable","observer","successObserver","publish","refCount","errors","errorObserver","warnings","warningObserver","alerts","alertObserver","events","event","NavigationStart","preserveMessages","alert","level","warning","success","preserve","setPreserveAlerts","urlInfo","currentUrlIncludesInfo","urlInfo_1","urlInfo_1_1","urlSnip","isPreserveAlerts","msgObject","Router","MULTIPLE_TASKS_FOUND","WorkAllocationService","errorService","alertService","searchTasks","searchRequest","getWorkAllocationApiUrl","assignTask","taskId","completeTask","handleTaskCompletionError","assignAndCompleteTask","completion_options","assign_and_complete","userIsCaseworker","userInfo","lowerCaseRoles","role","iACCaseOfficer","iACAdmOfficer","completeAppropriateTask","ccdId","eventId","jurisdiction","caseTypeId","taskSearchParameter","tasks","getTasksByCaseIdAndEventId","caseType","getTask","i3.HttpErrorService","i4.AlertService","HasLoadingState","LoadingService","registered","loading","BehaviorSubject","distinctUntilChanged","generateToken","unregister","window","performance","now","CasesService","orderService","wizardPageFieldToCaseFieldMapper","workAllocationService","loadingService","getCaseView","jurisdictionId","getApiUrl","loadingToken","finalize","getCaseViewV2","getCaseDataUrl","V2_MEDIATYPE_CASE_VIEW","getEventTrigger","eventTriggerId","ignoreWarning","buildEventTriggerUrl","V2_MEDIATYPE_START_DRAFT_TRIGGER","V2_MEDIATYPE_START_EVENT_TRIGGER","V2_MEDIATYPE_START_CASE_TRIGGER","plainToClass","tap","initialiseEventTrigger","createEvent","caseDetails","eventData","case_id","V2_MEDIATYPE_CREATE_EVENT","processResponseBody","validateCase","ctid","pageId","pageIdString","V2_MEDIATYPE_CASE_DATA_VALIDATE","createCase","ignore_warning","V2_MEDIATYPE_CREATE_CASE","getPrintDocuments","V2_MEDIATYPE_CASE_DOCUMENTS","documentResources","getCourtOrHearingCentreName","locationId","createChallengedAccessRequest","request","userInfoStr","camUtils","setUTCHours","uid","payload","createSpecificAccessRequest","sar","setDate","readOnly","requestedRole","processTasksOnSuccess","wizardPage","wizard_page_fields","caseData","isPuiCaseManager","case_type","warn","PUI_CASE_MANAGER","i3.OrderService","i4.HttpErrorService","i5.WizardPageFieldToCaseFieldMapper","i6.WorkAllocationService","i7.LoadingService","i8.SessionStorageService","DraftService","createDraft","saveDraftEndpoint","getCreateOrUpdateDraftsUrl","V2_MEDIATYPE_DRAFT_CREATE","updateDraft","V2_MEDIATYPE_DRAFT_UPDATE","getDraft","getViewOrDeleteDraftsUrl","V2_MEDIATYPE_DRAFT_READ","deleteDraft","V2_MEDIATYPE_DRAFT_DELETE","createOrUpdateDraft","caseEventData","i1.HttpErrorService","EventTriggerService","eventTriggerSource","announceEventTrigger","FieldsPurger","deleteFieldValue","parentField","fieldType","fieldControl","complexSubField","retain_hidden_value","collectionFieldType_1","complexFieldValues","subFieldId","subCaseField","parentFormGroup","at","documentFieldValues","setValue","documentFieldValue","clearHiddenFields","wizard","currentPageId","clearHiddenFieldForFieldShowCondition","clearHiddenFieldForPageShowCondition","currentEventState","pages","wp","hasShowConditionPage","isHidden","resetPage","currentPage","getPage","wpf","case_field","findCaseFieldByWizardPageFieldId","hasShowConditionField","resetField","retainHiddenValueByFieldType","fieldGroup","caseRoleFormControl","getShowConditionKey","fieldControls_1","Wizard","wizardPages","firstPage","canShow","foundPage","findPage","findWizardPage","nextPage","currentIndex","findExistingIndex","previousPage","hasPage","hasPreviousPage","WizardFactoryService","CaseEditComponent","fb","fieldsPurger","registrarService","wizardFactory","cancelled","submitted","group","summary","queryParams","params","navigationOrigin","ORIGIN_QUERY_PARAM","first","navigate","relativeTo","navigateToPage","theQueryParams","previous","Promise","resolve","hasPrevious","cancel","confirm","confirmation","$event","_r2_1","emitCancelled","emitSubmitted","submit","saveDraft","FormBuilder","i2","i3.FieldsUtils","i4.FieldsPurger","i5.ConditionalShowRegistrarService","i6.WizardFactoryService","CaseCreateComponent","casesService","draftService","eventTriggerService","toPromise","then","catch","sanitizedEditForm","draft_id","can_save_draft","isDataLoaded","i1.CasesService","i2.AlertService","i3.DraftService","i4.EventTriggerService","CaseCreateComponent_div_0_Template","CaseReferencePipe","g1","g2","g3","g4","MarkdownComponent","content","onMarkdownClick","HTMLAnchorElement","hostBindings","markdownUseHrefAsRouterLink","HostListener","CcdCaseTitlePipe","caseTitle","caseFieldValues","getCaseTitle","ctx_r7","getCaseId","CaseEditConfirmComponent_ng_template_5_h2_0_Template","getHeader","ctx_r6","getBody","i1.PlaceholderService","i2.FieldsUtils","PaletteContext","CaseEditConfirmComponent","caseEdit","triggerText","getStatus","state","title_display","i1.CaseEditComponent","CaseEditConfirmComponent_div_2_Template","CaseEditConfirmComponent_ng_template_3_Template","CaseEditConfirmComponent_ng_template_5_Template","CaseEditConfirmComponent_div_8_Template","CaseEditConfirmComponent_div_9_Template","_r3","AbstractFieldReadComponent","context","DEFAULT","topLevelFormGroup","AddressModel","AddressLine1","AddressLine2","AddressLine3","PostTown","County","PostCode","Country","AddressOption","addressModel","getDescription","removeInitialCommaIfPresent","prefixWithCommaIfPresent","AddressParser","address","CLASSIFICATION_CODE","parseAddressLine1","parseAddressLine2","parseAddressLine3","POSTCODE","POST_TOWN","AddressesService","UK","addressLine","RD06","SUB_BUILDING_NAME","ORGANISATION_NAME","DEPARTMENT_NAME","PO_BOX_NUMBER","BUILDING_NAME","removeNonAddressValues","BUILDING_NUMBER","THOROUGHFARE_NAME","DEPENDENT_LOCALITY","DOUBLE_DEPENDENT_LOCALITY","DEPENDENT_THOROUGHFARE_NAME","line","removeUndefinedString","removeInitialComma","removeEmptySpaces","getAddressesForPostcode","postcode","getPostcodeLookupUrl","results","addresses","DPA","formatAddressLines","shiftAddressLinesUp","toCapitalCase","sentence","IsCompoundPipe","COMPOUND_TYPES","EXCLUDE","FieldsFilterPipe","isValidComplex","keepField","EMPTY_VALUES","isCompound","NESTED_TYPES","isValidCompound","keepEmpty","stripHidden","checkConditionsAgainst","clone","buildField","field_r2","complexGroup","buildIdPrefix","WriteComplexFieldComponent_ng_container_4_ccd_field_read_2_Template","WriteComplexFieldComponent_ng_container_4_ccd_field_write_3_Template","Complex","ADDRESS_FIELD_TYPES","WriteComplexFieldComponent","isCompoundPipe","formValidatorsService","renderLabel","ignoreMandatory","isTopLevelWithinCollection","setupFields","updateValueAndValidity","isAddressUK","addressValidatorsRequired","isSmallAddressLine1","parentCaseField","parentComponent","parentComponentCaseField","fieldsFilterPipe","complexFields","i1.IsCompoundPipe","i2.FormValidatorsService","WriteComplexFieldComponent_h2_3_Template","WriteComplexFieldComponent_ng_container_4_Template","FieldLabelPipe","WriteAddressFieldComponent_div_1_div_4_span_4_Template","_r7_1","findAddress","missingPostcode","addressOption_r9","_r11_1","addressSelected","WriteAddressFieldComponent_div_1_div_5_option_5_Template","addressList","addressOptions","blankAddress","WriteAddressFieldComponent_div_1_div_4_Template","WriteAddressFieldComponent_div_1_div_5_Template","WriteAddressFieldComponent_div_1_a_6_Template","shouldShowDetailFields","WriteAddressFieldComponent","addressesService","addressFormGroup","isComplexWithHiddenFields","postcode_1","unshift","defaultLabel","refocusElement","focusElementDirectives","setFormValue","writeComplexFieldComponent","hasAddress","numberOfAddresses","CaseReference","i1.AddressesService","i2.IsCompoundPipe","viewQuery","WriteAddressFieldComponent_div_1_Template","ViewChild","static","ReadCaseLinkFieldComponent","hasReference","ReadCaseLinkFieldComponent_a_0_Template","FirstErrorPipe","caseReferenceControl","WriteCaseLinkFieldComponent","caseLinkGroup","caseReferenceValidator","validCaseReference","valueString","touched","WriteCaseLinkFieldComponent_span_2_Template","WriteCaseLinkFieldComponent_span_3_Template","WriteCaseLinkFieldComponent_span_4_Template","valid","dirty","i_r5","item_r4","ReadCollectionFieldComponent_table_0_tbody_3_tr_1_Template","ReadCollectionFieldComponent_table_0_tbody_2_Template","ReadCollectionFieldComponent_table_0_tbody_3_Template","isDisplayContextParameterAvailable","ReadCollectionFieldComponent","ReadCollectionFieldComponent_table_0_Template","RemoveDialogComponent","matDialogRef","remove","close","MatDialogRef","Jurisdiction","hasRoles","profile","user","idam","Profile","isCourtAdmin","ProfileNotifier","profileSource","asObservable","announceProfile","WriteCollectionFieldComponent_h2_7_span_1_Template","WriteCollectionFieldComponent_h2_7_span_2_Template","_r10_1","i_r7","openModal","item_r6","itemLabel","isNotAuthorisedToDelete","WriteCollectionFieldComponent_div_8_div_1_Template","collItems","_r12_1","addItem","isNotAuthorisedToCreate","isSearchFilter","WriteCollectionFieldComponent","dialog","scrollToService","profileNotifier","profileSubscription","buildCaseField","getContainer","isNew","isCollectionOfSimpleType","cfid","newCaseField","doScroll","setErrors","scrollTo","duration","offset","focusLastItem","getCollectionPermission","isNotAuthorisedToUpdate","getControlIdAt","hasUpdateAccess","acls","acl","update","dialogConfig","MatDialogConfig","disableClose","autoFocus","ariaLabel","height","width","panelClass","closeOnNavigation","position","top","innerHeight","left","innerWidth","open","afterClosed","take","last","splice","removeAt","field_r1","MatDialog","ScrollToService","i3.ProfileNotifier","WriteCollectionFieldComponent_h2_7_Template","WriteCollectionFieldComponent_div_8_Template","WriteCollectionFieldComponent_button_9_Template","ReadComplexFieldRawComponent","ReadComplexFieldRawComponent_ng_container_1_Template","CaseEvent","CaseState","CaseTypeLite","CaseType","SortOrder","EventCaseField","Banner","heading_r2","sortRowsByColumns","columnsAllLabels","sortWidget","ctx_r10","toCaseField","heading_r9","item_r5","columnsHorizontalLabel","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_2_div_2_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_2_ng_template_3_Template","ctx_r19","vLabel_r16","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_1_td_4_Template","caseField_r24","ctx_r25","ctx_r29","ctx_r30","addCaseReferenceValue","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_ng_template_3_td_4_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_ng_template_3_td_5_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_tr_1_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_ng_template_3_Template","_r26","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_ng_container_2_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_1_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_tr_2_Template","ctx_r8","addCaseFieldValue","_r41_1","i_r6","ctx_r40","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_2_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_ng_container_11_Template","columns","getImage","columnsVerticalLabel","keepOriginalOrder","rows","ReadComplexFieldCollectionTableComponent","isSortAscending","column","sortOrder","UNSORTED","DESCENDING","labelsVertical","labelsHorizontal","allLabels","populateCaseFieldValuesIntoRows","populateLabels","populateHorizontalLabels","row","isVerticleDataNotEmpty","isNotBlank","shouldSortInAscendingOrder","ASCENDING","trimmedId","ReadComplexFieldCollectionTableComponent_th_9_Template","ReadComplexFieldCollectionTableComponent_ng_container_11_Template","ReadComplexFieldTableComponent_ng_container_8_ng_container_1_Template","ReadComplexFieldTableComponent_ng_container_8_ng_template_3_Template","ReadComplexFieldTableComponent","ReadComplexFieldTableComponent_ng_container_8_Template","ReadComplexFieldComponent","paletteContext","TABLE_VIEW","CHECK_YOUR_ANSWER","ReadComplexFieldComponent_ccd_read_complex_field_raw_1_Template","ReadComplexFieldComponent_ccd_read_complex_field_collection_table_2_Template","ReadComplexFieldComponent_ccd_read_complex_field_table_3_Template","ReadDateFieldComponent","timeZone","dateTimeDisplayFormat","CUSTOM_MOMENT_FORMATS","dateInput","display","monthYearLabel","dateA11yLabel","monthYearA11yLabel","dateControl","DatetimePickerComponent","formatTranslationService","ngxMatDateFormats","showSpinners","showSeconds","touchUi","enableMeridian","stepHour","stepMinute","stepSecond","color","disableMinute","hideTime","hideMinutes","startView","yearSelection","checkTime","stringEdited","minError","maxError","minimumDate","maximumDate","momentFormat","dateTimeEntryFormat","configureDatePicker","setDateTimeFormat","formatValueAndSetErrors","statusChanges","hasError","valueChanged","focusIn","focusOut","toggleClick","minDate","maxDate","dateTimePickerFormat","yearSelected","patchValue","datetimePicker","monthSelected","inputElement","formValue","keepErrorText","NGX_MAT_DATE_FORMATS","useValue","NgxMatDateAdapter","useClass","NgxMatMomentAdapter","NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS","useUtc","DatetimePickerComponent_span_3_Template","DatetimePickerComponent_span_4_Template","DatetimePickerComponent_span_5_Template","DatetimePickerComponent_span_6_Template","DatetimePickerComponent_span_7_Template","CaseFieldService","IsMandatoryPipe","caseFieldService","i1.CaseFieldService","WriteDateFieldComponent","WriteDateFieldComponent_span_3_Template","WriteDateFieldComponent_span_4_Template","WriteDateFieldComponent_span_5_Template","WriteDateContainerFieldComponent","WriteDateContainerFieldComponent_ng_container_0_Template","WriteDateContainerFieldComponent_ng_template_1_Template","WindowService","locationAssign","setLocalStorage","localStorage","getLocalStorage","clearLocalStorage","removeLocalStorage","setSessionStorage","getSessionStorage","openOnNewTab","DocumentManagementService","uploadFile","formData","getDocStoreUrl","delay","RESPONSE_DELAY","getMediaViewerInfo","mediaViewerInfo","document_binary_url","transformDocumentUrl","document_filename","content_type","getContentType","annotation_api_url","getAnnotationApiUrl","case_jurisdiction","fileExtension","lastIndexOf","isImage","IMAGE","isWord","WORD","isExcel","EXCEL","isPowerpoint","POWERPOINT","TXT","RTF","PDF","imageType","imagesList","wordType","wordList","excelType","excelList","powerpointType","powerpointList","documentBinaryUrl","remoteHrsPattern","getRemoteHrsUrl","getHrsUrl","remoteDocumentManagementPattern","getRemoteDocumentManagementUrl","getDocumentManagementUrl","showMediaViewer","MEDIA_VIEWER_INFO","ReadDocumentFieldComponent","windowService","documentManagement","caseViewSubscription","mergedInfo","openMediaViewer","getMediaViewerUrl","routerMediaViewer","createUrlTree","i1.WindowService","i2.DocumentManagementService","i3","i4.CasesService","ReadDocumentFieldComponent_a_0_Template","DocumentDialogComponent","initDialog","Alert","CaseViewEvent","CaseViewTrigger","DELETE","CaseTab","CaseView","CasePrintDocument","HRef","DocumentLinks","Document","Embedded","DocumentData","FormDocument","OrganisationConverter","toSimpleAddress","organisationModel","simpleAddress","addressLine1","addressLine2","addressLine3","townCity","county","country","postCode","toSimpleOrganisationModel","organisationIdentifier","Field","elementPath","SearchResultViewColumn","SearchResultViewItem","SearchResultView","hasDrafts","CaseDetails","CaseEventData","WorkbasketInputModel","WorkbasketInput","PaginationMetadata","SortParameters","comparator","CaseNotifier","caseViewSource","announceCase","FileUploadStateService","setUploadInProgress","uploadInProgress","isUploadInProgress","fileUploadMessages","WriteDocumentFieldComponent","caseNotifier","fileUploadStateService","clickout","fileInput","contains","clickInsideTheDocument","fileValidations","secureModeOn","document_url","document_hash","isAMandatoryComponent","createDocumentFormWithValidator","createDocumentForm","subscribeToCaseDetails","fileUploadSubscription","dialogSubscription","caseEventSubscription","cancelUpload","resetUpload","fileValidationsOnTab","validateFormUploadedDocument","displayFileUploadMessages","UPLOAD_ERROR_FILE_REQUIRED","fileChangeEvent","files","selectedFile","UPLOAD_WAITING_FILE_STATUS","documentUpload","buildDocumentUploadData","resultDocument","handleDocumentUploadResult","handleDocumentUploadError","openFileDialog","click","fileSelectEvent","openDialog","triggerReplace","confirmReplaceResult","getUploadedFileName","uploadedDocument","DOCUMENT_FILENAME","updateDocumentForm","isUpLoadingAFile","dialogRef","beforeClosed","fileUploadMessage","validation","DOCUMENT_URL","DOCUMENT_BINARY_URL","DOCUMENT_HASH","binaryUrl","filename","documentHash","documentFormGroup","getErrorMessage","UPLOAD_ERROR_NOT_AVAILABLE","FormData","append","caseTypeJurisdictionId","documents","_embedded","_links","self","binary","originalDocumentName","hashToken","i1.AbstractAppConfig","i2.CaseNotifier","i3.DocumentManagementService","i4","i5.FileUploadStateService","WriteDocumentFieldComponent_span_6_Template","WriteDocumentFieldComponent_span_7_Template","WriteDocumentFieldComponent_ccd_read_document_field_9_Template","DynamicListPipe","ReadDynamicListFieldComponent","dynamicListFormControl","type_r5","WriteDynamicListFieldComponent","WriteDynamicListFieldComponent_span_2_Template","WriteDynamicListFieldComponent_span_3_Template","WriteDynamicListFieldComponent_span_4_Template","WriteDynamicListFieldComponent_span_5_Template","WriteDynamicListFieldComponent_option_9_Template","DynamicRadioListPipe","ReadDynamicRadioListFieldComponent","dynamicRadioListControl","radioButton_r5","buildElementId","WriteDynamicRadioListFieldComponent","WriteDynamicRadioListFieldComponent_span_4_Template","WriteDynamicRadioListFieldComponent_span_5_Template","WriteDynamicRadioListFieldComponent_span_6_Template","WriteDynamicRadioListFieldComponent_span_7_Template","WriteDynamicRadioListFieldComponent_div_9_Template","ReadEmailFieldComponent","isFieldValueEmpty","ReadEmailFieldComponent_a_0_Template","emailControl","WriteEmailFieldComponent","WriteEmailFieldComponent_span_2_Template","WriteEmailFieldComponent_span_3_Template","WriteEmailFieldComponent_span_4_Template","FixedListPipe","ReadFixedListFieldComponent","fixedListFormControl","type_r4","WriteFixedListFieldComponent","WriteFixedListFieldComponent_span_2_Template","WriteFixedListFieldComponent_span_3_Template","WriteFixedListFieldComponent_span_4_Template","WriteFixedListFieldComponent_option_8_Template","FixedRadioListPipe","ReadFixedRadioListFieldComponent","fixedRadioListControl","radioButton_r4","WriteFixedRadioListFieldComponent","notEmpty","WriteFixedRadioListFieldComponent_span_4_Template","WriteFixedRadioListFieldComponent_span_5_Template","WriteFixedRadioListFieldComponent_span_6_Template","WriteFixedRadioListFieldComponent_div_8_Template","_r9_1","event_r1","caseHistoryClicked","getAriaLabelforLink","event_name","EventLogTableComponent_tr_16_div_3_a_1_Template","state_id","ctx_r12","EventLogTableComponent_tr_16_div_4_a_1_Template","getSignificantItemUrl","getSignificantItemDesc","select","EventLogTableComponent_tr_16_div_3_Template","EventLogTableComponent_tr_16_div_4_Template","EventLogTableComponent_tr_16_span_5_Template","EventLogTableComponent_tr_16_div_6_Template","getAriaLabelforRow","isPartOfCaseTimeline","significantItemExist","getAriaLabelforColumn","user_first_name","user_last_name","EventLogTableComponent","onSelect","onCaseHistory","observers","significant_item","formatDate","EventLogTableComponent_tr_16_Template","DashPipe","EventLogDetailsComponent","state_name","EventLogComponent","EventLogComponent_ccd_event_log_table_3_Template","EventLogComponent_ccd_event_log_table_4_Template","EventLogComponent_ccd_event_log_details_7_Template","CaseHistoryViewerFieldComponent","LabelFieldComponent","ReadMoneyGbpFieldComponent","amount","isNumber","ReadMoneyGbpFieldComponent_ng_container_0_Template","MoneyGbpInputComponent","displayValue","onChange","newValue","PATTERN_REGEXP","parts","integerPart","decimalPart","setDisabledState","isDisabled","registerOnValidatorChange","moneyGbpControl","WriteMoneyGbpFieldComponent","WriteMoneyGbpFieldComponent_span_2_Template","WriteMoneyGbpFieldComponent_span_3_Template","WriteMoneyGbpFieldComponent_span_4_Template","value_r2","ReadMultiSelectListFieldComponent_table_0_tr_2_Template","ReadMultiSelectListFieldComponent","ReadMultiSelectListFieldComponent_table_0_Template","checkboxes","_r6_1","onCheckChange","checkbox_r4","isSelected","WriteMultiSelectListFieldComponent","ctrl","WriteMultiSelectListFieldComponent_span_3_Template","WriteMultiSelectListFieldComponent_span_4_Template","WriteMultiSelectListFieldComponent_span_5_Template","WriteMultiSelectListFieldComponent_ng_container_6_Template","ReadNumberFieldComponent","numberControl","WriteNumberFieldComponent","WriteNumberFieldComponent_span_2_Template","WriteNumberFieldComponent_span_3_Template","WriteNumberFieldComponent_span_4_Template","ReadOrderSummaryRowComponent","getFeeAmount","feeValue","FeeAmount","attrs","FeeCode","FeeDescription","feeValue_r1","ReadOrderSummaryFieldComponent","getFees","Fees","getPaymentTotal","PaymentTotal","ReadOrderSummaryFieldComponent_tr_13_Template","WriteOrderSummaryFieldComponent","orderSummaryGroup","paymentReference","PaymentReference","paymentTotal","feesArray","fee","getFeeValue","feeGroup","FeeVersion","feeValueGroup","OrganisationService","appconfig","mapOrganisation","organisations","organisationsVm","org","contactInformation","getActiveOrganisations","organisations$","getPrdUrl","cacheTimeOut","getCacheTimeOut","orgs","publishReplay","of","timer","selectedOrg_r1","ReadOrganisationFieldRawComponent","organisationService","organisationConverter","OrganisationID","selectedOrg$","switchMap","findOrg","i1.OrganisationService","i2.OrganisationConverter","ReadOrganisationFieldRawComponent_table_6_Template","ReadOrganisationFieldTableComponent","ReadOrganisationFieldTableComponent_table_10_Template","ReadOrganisationFieldComponent","ReadOrganisationFieldComponent_ccd_read_organisation_field_raw_1_Template","ReadOrganisationFieldComponent_ccd_read_organisation_field_table_2_Template","ReadOrganisationFieldComponent_ccd_read_organisation_field_table_3_Template","WriteOrganisationComplexFieldComponent","organisation_r7","selectOrg","tmp_0_0","tmp_1_0","WriteOrganisationFieldComponent_fieldset_3_div_14_table_2_Template","WriteOrganisationFieldComponent_fieldset_3_div_14_div_4_Template","simpleOrganisations$","tmp_2_0","searchOrgValue$","deSelectOrg","selectedOrg_r11","WriteOrganisationFieldComponent_fieldset_3_ng_template_16_table_0_Template","WriteOrganisationFieldComponent_fieldset_3_div_14_Template","WriteOrganisationFieldComponent_fieldset_3_ng_template_16_Template","searchOrgTextFormControl","WriteOrganisationFieldComponent","defaultOrg","ORGANISATION_DETAILS","onSearchOrg","organisationFormGroup","PRE_POPULATE_TO_USERS_ORGANISATION","YES","OrganisationName","preSelectDefaultOrg","preSelectEmptyOrg","orgSearchText","lowerOrgSearchText_1","searchOrg","lowerOrgSearchText","partMatchingResultSet","withSpaceMatchingResultSet","MAX_RESULT_COUNT","organisation","searchCriteria","resultSet","hasMatchingOrganisation","searchHasSpace","searchWithSpace","hasResultSetBelowMaxCount","trimAll","oldText","selectedOrg","organisationIDFormControl","organisationNameFormControl","EMPTY_SIMPLE_ORG","instantiateOrganisationFormGroup","orgIDState","orgNameState","addOrganisationValidators","ORGANISATION_ID","organisationIdField","searchTextArray","searchTextArray_1","searchTextArray_1_1","singleSearchText","i3.WindowService","WriteOrganisationFieldComponent_fieldset_1_Template","WriteOrganisationFieldComponent_fieldset_3_Template","PaymentField","getBaseURL","getPaymentsUrl","getPayBulkScanBaseURL","getPayBulkScanBaseUrl","getRefundsUrl","getUserRoles","getUserEmail","sub","CasePaymentHistoryViewerFieldComponent","i2.SessionStorageService","ReadPhoneUKFieldComponent","phoneUkControl","WritePhoneUKFieldComponent","WritePhoneUKFieldComponent_span_2_Template","WritePhoneUKFieldComponent_span_3_Template","WritePhoneUKFieldComponent_span_4_Template","ReadTextAreaFieldComponent","BrowserService","isFirefox","navigator","userAgent","isSafari","isSafariAgent","isIEOrEdge","textareaControl","WriteTextAreaFieldComponent","browserService","autoGrow","style","scrollHeight","scrollTop","i1.BrowserService","WriteTextAreaFieldComponent_span_2_Template","WriteTextAreaFieldComponent_span_3_Template","WriteTextAreaFieldComponent_span_4_Template","ReadTextFieldComponent","textControl","WriteTextFieldComponent","onBlur","WriteTextFieldComponent_span_2_Template","WriteTextFieldComponent_span_3_Template","WriteTextFieldComponent_span_4_Template","UnsupportedFieldComponent","getCardPaymentReturnUrl","WaysToPayFieldComponent","getPaymentReturnUrl","WaysToPayFieldComponent_ccpay_payment_lib_0_Template","YesNoService","isYes","isNo","NO","YES_INPUTS","NO_INPUTS","ReadYesNoFieldComponent","yesNoService","formattedValue","yesNoControl","i1.YesNoService","value_r4","WriteYesNoFieldComponent","yesNoValues","WriteYesNoFieldComponent_span_3_Template","WriteYesNoFieldComponent_span_4_Template","WriteYesNoFieldComponent_span_5_Template","WriteYesNoFieldComponent_div_7_Template","PaletteService","getFieldComponentClass","write","FieldReadLabelComponent_dl_1_ng_container_4_Template","FieldReadLabelComponent","canHaveGreyBar","withLabel","FieldReadLabelComponent_dl_1_Template","FieldReadLabelComponent_ng_template_2_Template","FIX_CASEFIELD_FOR","FieldReadComponent","resolver","paletteService","componentClass","injector","Injector","fieldContainer","parentInjector","resolveComponentFactory","insert","hostView","ComponentFactoryResolver","i1.PaletteService","ViewContainerRef","read","FieldWriteComponent","injectorOptions","createComponent","IsReadOnlyAndNotCollectionPipe","CaseEditFormComponent_ng_container_0_ng_container_5_ng_container_1_Template","CaseEditFormComponent_ng_container_0_ng_container_5_ng_template_3_Template","CaseEditFormComponent_ng_container_0_ccd_field_read_4_Template","CaseEditFormComponent_ng_container_0_ng_container_5_Template","CaseEditFormComponent","formValueService","pageChangeSubject","valuesChanged","pageChangeSubscription","formGroupChangeSubscription","retrieveInitialFormValues","detectChangesAndEmit","initial","current","i1.FormValueService","CaseEditFormComponent_ng_container_0_Template","CaseEditPageText","SaveOrDiscardDialogComponent","save","discard","FormErrorService","mapFieldErrors","errorKey","getFormControl","inArray","PageValidationService","isPageValid","theControl","checkDocumentField","checkOptionalField","checkMandatoryField","CallbackErrorsContext","errorMsg_r5","CallbackErrorsComponent_div_0_ng_container_1_li_4_Template","warningMsg_r7","CallbackErrorsComponent_div_0_ng_container_3_li_4_Template","CallbackErrorsComponent_div_0_ng_container_1_Template","CallbackErrorsComponent_div_0_br_2_Template","CallbackErrorsComponent_div_0_ng_container_3_Template","hasErrors","hasWarnings","CallbackErrorsComponent","triggerTextIgnore","TRIGGER_TEXT_IGNORE","triggerTextContinue","TRIGGER_TEXT_SUBMIT","callbackErrorsSubject","callbackErrorsContext","errorEvent","hasInvalidData","buildCallbackErrorsContext","errorContext","trigger_text","field_errors","TRIGGER_TEXT_START","TRIGGER_TEXT_GO","CallbackErrorsComponent_div_0_Template","LoadingSpinnerComponent","loadingText","ctx_r11","CaseEditPageComponent_ng_container_1_h1_1_Template","CaseEditPageComponent_ng_container_1_ng_container_2_Template","ctx_r13","CaseEditPageComponent_ng_template_5_h2_0_Template","_r17_1","validationError_r15","navigateToErrorElement","CaseEditPageComponent_div_7_div_3_Template","validationErrors","fieldError_r20","CaseEditPageComponent_div_9_ul_5_li_1_Template","ctx_r18","CaseEditPageComponent_div_9_ul_5_Template","ctx_r9","_r24_1","applyValuesChanged","ctx_r21","ctx_r22","_r26_1","CaseEditPageComponent_form_12_ccd_case_edit_form_3_Template","CaseEditPageComponent_form_12_div_4_Template","toPreviousPage","hasPreviousPage$","submitting","getCancelText","CaseEditPageComponent","formErrorService","cdRef","pageValidationService","triggerTextStart","triggerTextIgnoreWarnings","TRIGGER_TEXT_CONTINUE","isSubmitting","formValuesChanged","scrollToTop","setFocusToTop","topContainer","getElementById","getTriggerText","ngAfterViewChecked","detectChanges","currentPageIsNotValid","buildCaseEventData","event_data","updateFormData","generateErrorMessage","casefield","fieldElement","id_1","markAsDirty","invalid","fieldArray_1","htmlElement","scrollIntoView","behavior","block","showSpinner","handleError","_d","pageWithFieldExists","updateEventTriggerCaseFields","updateFormControlsValue","callbackErrorsNotify","resetErrors","draftCaseEventData","queryParamMap","RESUMED_FORM_SAVE","NEW_FORM_SAVE","TRIGGER_TEXT_SAVE","RESUMED_FORM_DISCARD","NEW_FORM_DISCARD","event_token","draft","getCaseFieldsFromCurrentAndPreviousPages","pageFields","pageEventData","getFilteredCaseEventData","allCaseFields","formEventData","case_reference","i3.FormValueService","i4.FormErrorService","ChangeDetectorRef","i5.PageValidationService","i6","i7.CaseFieldService","CaseEditPageComponent_ccd_loading_spinner_0_Template","CaseEditPageComponent_ng_container_1_Template","CaseEditPageComponent_div_2_Template","CaseEditPageComponent_ng_template_3_Template","CaseEditPageComponent_ng_template_5_Template","CaseEditPageComponent_div_7_Template","CaseEditPageComponent_div_8_Template","CaseEditPageComponent_div_9_Template","CaseEditPageComponent_form_12_Template","_r5","Confirmation","header","CaseEditSubmitComponent_div_0_ng_template_6_h2_0_Template","fieldError_r15","CaseEditSubmitComponent_div_0_div_9_ul_5_li_1_Template","CaseEditSubmitComponent_div_0_div_9_ul_5_Template","field_r20","_r27_1","page_r17","CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_th_2_Template","CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template","summaryCaseField","isChangeAllowed","CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_Template","canShowFieldInCYA","CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_Template","CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_Template","ctx_r16","isShown","CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_Template","field_r32","ctx_r33","ctx_r34","CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_3_Template","CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_4_Template","CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_Template","showSummaryFields","CaseEditSubmitComponent_div_0_ng_container_14_fieldset_1_Template","CaseEditSubmitComponent_div_0_div_3_Template","CaseEditSubmitComponent_div_0_ng_template_4_Template","CaseEditSubmitComponent_div_0_ng_template_6_Template","CaseEditSubmitComponent_div_0_div_8_Template","CaseEditSubmitComponent_div_0_div_9_Template","_r39_1","CaseEditSubmitComponent_div_0_ng_container_12_Template","CaseEditSubmitComponent_div_0_ng_container_13_Template","CaseEditSubmitComponent_div_0_ng_container_14_Template","checkYourAnswerFieldsToDisplayExists","readOnlySummaryFieldsToDisplayExists","showEventNotes","_r44_1","onEventCanBeCompleted","eventCompletionParams","CaseEditSubmitComponent","eventCompletionChecksRequired","end_button_label","sortFieldsByShowSummaryContent","taskInSessionStorage","taskStr","getEventId","task","generateCaseEventData","caseSubmit","eventCanBeCompleted","cloneField","show_summary","_e","e_2","_f","show_summary_content_option","show_event_notes","getLastPageShown","show_summary_change_option","replaceEmptyComplexFieldValues","replaceHiddenFormValuesWithOriginalCaseData","cachedCaseView","buildConfirmation","rawFormValueData","caseFieldsLookup","len","form_1","hasCallbackFailed","lastPage","SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION","aCaseField","bCaseField","i2.FormValueService","i3.FormErrorService","i4.FieldsUtils","i5.CaseFieldService","i7.OrderService","i8.ProfileNotifier","i9.SessionStorageService","i10.CaseNotifier","CaseEditSubmitComponent_div_0_Template","CaseEditSubmitComponent_ccd_case_event_completion_1_Template","EventCompletionReturnStates","EventCompletionStates","CaseProgressComponent","case","i3.EventTriggerService","CaseProgressComponent_div_0_Template","ConvertHrefToRouterService","hrefMarkdownLinkContent","updateHrefLink","getHrefMarkdownLinkContent","callAngularRouter","urls","queryParamObj","queryParam","param","RouterHelperService","getUrlSegmentsFromRoot","pathFromRoot","CaseEditWizardGuard","routerHelper","processEventTrigger","goToSubmit","buildState","canShowPredicate","goToFirst","parentUrlSegments","i2.RouterHelperService","i3.WizardFactoryService","i5.EventTriggerService","Permissions","TaskState","EventCompletionPortalTypes","CaseworkerService","getCaseworkers","serviceId","serviceIds","EventCompletionStateMachineService","initialiseStateMachine","StateMachine","startStateMachine","stateMachine","start","stateCheckTasksCanBeCompleted","createStates","createState","CheckTasksCanBeCompleted","entryActionForStateCheckTasksCanBeCompleted","stateCompleteEventAndTask","CompleteEventAndTask","entryActionForStateCompleteEventAndTask","stateTaskCompletedOrCancelled","TaskCompetedOrCancelled","entryActionForStateTaskCompletedOrCancelled","stateTaskAssignedToAnotherUser","TaskAssignedToAnotherUser","entryActionForStateTaskAssignedToAnotherUser","stateTaskUnassigned","TaskUnassigned","entryActionForStateTaskUnassigned","stateFinal","Final","entryActionForStateFinal","addTransitions","addTransitionsForStateCheckTasksCanBeCompleted","addTransitionsForStateTaskCompletedOrCancelled","addTransitionsForStateCompleteEventAndTask","addTransitionsForStateTaskAssignedToAnotherUser","addTransitionsForStateTaskUnassigned","taskResponse","task_state","Unassigned","trigger","Completed","Cancelled","Terminated","Assigned","assignee","reassignedTask","showPortal","TaskCancelled","TaskReassigned","addTransition","JudicialworkerService","getJudicialworkers","userIds","services","ProfileService","httpService","URL","V2_MEDIATYPE_USER_PROFILE","ErrorsModule","BannersModule","BodyModule","FootersModule","FormModule","IsReadOnlyPipe","PaletteUtilsModule","CcdCollectionTableCaseFieldsFilterPipe","objs","CcdCYAPageLabelFilterPipe","getNonLabelComplexFieldType","ReadFieldsFilterPipe","evaluateConditionalShow","isValidCollection","isNotEmpty","ignoreLabels","ALWAYS_NULL_FIELDS","formGroupAvaliable","cond","searchRegExp","setupHidden","checkConditionalShowAgainst","formGroupAvailable","Collection","CcdTabFieldsPipe","CcdPageFieldsPipe","dataFormGroup","pcf","SortSearchResultPipe","searchResults","sortParameters","isUndefined","compare","pipeDeclarations","PipesModule","CollectionCreateCheckerService","setDisplayContextForChildren","child","hasCreateAccess","DocumentUrlPipe","FileUploadProgressGuard","canDeactivate","userDecision","CONFIRM_MESSAGE","i1.FileUploadStateService","i2.WindowService","FeeValue","Fee","OrderSummary","PALETTE_COMPONENTS","PaletteModule","MAT_DATE_LOCALE","BrowserModule","FormsModule","ReactiveFormsModule","NgxMdModule","NgxMatDatetimePickerModule","NgxMatTimepickerModule","NgxMatNativeDateModule","MatFormFieldModule","MatInputModule","MatDatepickerModule","PaymentLibModule","ScrollToModule","forRoot","i2__namespace","i1__namespace","NgIf","NgSwitch","NgSwitchCase","NgForOf","i3.ReadFieldsFilterPipe","i4.IsCompoundPipe","i5.CcdCollectionTableCaseFieldsFilterPipe","KeyValuePipe","i6.LabelSubstitutorDirective","i7","NgControlStatusGroup","FormGroupDirective","i8.FieldLabelPipe","i9.IsReadOnlyPipe","i10.FirstErrorPipe","CaseEventCompletionTaskCancelledComponent","onContinue","COMPONENT_PORTAL_INJECTION_TOKEN","assignedUserName","CaseEventCompletionTaskReassignedComponent","judicialworkerService","caseworkerService","caseworkerSubscription","service","caseworkers","caseworker","idamId","firstName","lastName","judicialworkerSubscription","judicialworkers","judicialworker","sidam_id","full_name","i2.WorkAllocationService","i4.JudicialworkerService","i5.CaseworkerService","i6.AlertService","CaseEventCompletionTaskReassignedComponent_div_0_Template","InjectionToken","CaseEventCompletionComponent","canBeCompleted","portalType","selectedComponentPortal","ComponentPortal","i1.EventCompletionStateMachineService","i4.WorkAllocationService","i5.AlertService","CaseEventCompletionComponent_ng_template_0_Template","CaseEditorModule","PortalModule","i1__namespace$3","FormGroupName","DefaultValueAccessor","NgControlStatus","FormControlName","MaxLengthValidator","i7.CcdCaseTitlePipe","i8.CaseReferencePipe","i9.CcdCYAPageLabelFilterPipe","i10.ReadFieldsFilterPipe","i11.CcdPageFieldsPipe","i12.IsCompoundPipe","editorRouting","caseEditWizardGuard","CaseHeaderComponent","CaseHeaderComponent_h1_0_Template","CaseHeaderComponent_div_1_Template","CaseHeaderModule","previousLabel","screenReaderPageLabel","PaginationComponent_ul_3_li_1_a_1_Template","PaginationComponent_ul_3_li_1_span_2_Template","isFirstPage","getCurrent","_r15_1","page_r10","setCurrent","screenReaderCurrentLabel","PaginationComponent_ul_3_li_4_a_1_Template","PaginationComponent_ul_3_li_4_ng_container_2_Template","_r23_1","ctx_r20","nextLabel","PaginationComponent_ul_3_li_5_a_1_Template","PaginationComponent_ul_3_li_5_span_2_Template","isLastPage","PaginationComponent_ul_3_li_1_Template","PaginationComponent_ul_3_li_4_Template","PaginationComponent_ul_3_li_5_Template","responsive","screenReaderPaginationLabel","directionLinks","getLastPage","coerceToBoolean","input","PaginationComponent","maxSize","pageChange","pageBoundsCorrection","_directionLinks","_autoHide","_responsive","_r5_1","selectAll","allOnPageSelected","canAnyBeShared","h_r6","c_r7","changeSelection","onKeyUp","tableConfig","idField","canBeShared","col_r16","routerLink","CaseListComponent_ng_container_8_ng_container_3_th_1_ng_container_1_Template","CaseListComponent_ng_container_8_ng_container_3_th_1_ng_container_2_Template","ctx_r31","formatDateAtTime","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_1_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_2_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_3_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_4_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_ng_container_5_Template","CaseListComponent_ng_container_8_ng_container_3_th_1_Template","CaseListComponent_ng_container_8_ng_container_3_td_2_Template","isFirst_r17","firstCellIsHeader","CaseListComponent_ng_container_8_th_2_Template","CaseListComponent_ng_container_8_ng_container_3_Template","selectionEnabled","columnConfigs","_r46_1","goToPage","visibilityLabel","autoHide","PaginationComponent_ul_3_Template","DateTimeFormatUtils","formatTime","CaseListComponent","classes","selection","selectedCases","cases","aCase","aSelectedCase","pageNumber","currentPageNo","caption","totalResultsCount","pageSize","CaseListComponent_th_5_Template","CaseListComponent_th_6_Template","CaseListComponent_ng_container_8_Template","CaseListComponent_ccd_pagination_10_Template","TableColumnConfig","TableConfig","ErrorNotifierService","errorSource","announceError","EventStatusService","isIncomplete","eventStatus","CALLBACK_STATUS_INCOMPLETE","DELETE_DRAFT_STATUS_INCOMPLETE","CALLBACK_STATUS_COMPLETE","DELETE_DRAFT_STATUS_COMPLETE","JurisdictionService","selectedJurisdictionSource","selectedJurisdiction","announceSelectedJurisdiction","NavigationOrigin","BannersService","getBanners","jurisdictionReferences","getBannersUrl","V2_MEDIATYPE_BANNERS","HttpParams","banners","NavigationNotifierService","navigationSource","navigation","announceNavigation","RequestOptionsBuilder","includeParam","buildOptions","metaCriteria","caseCriteria","view","criterion","FIELD_PREFIX","SearchService","requestOptionsBuilder","searchCases","getPaginationPageSize","getSearchInputUrl","getSearchInputs","V2_MEDIATYPE_SEARCH_INPUTS","currentJurisdiction","currentCaseType","searchInputs","isDataValid","VIEW_SEARCH","VIEW_WORKBASKET","i2.HttpService","i3.RequestOptionsBuilder","i4.LoadingService","WorkbasketInputFilterService","getWorkbasketInputUrl","getWorkbasketInputs","V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS","workbasketInputs","DefinitionsService","getCaseTypes","access","getJurisdictions","DefinitionsModule","SearchResultViewItemComparatorFactory","createSearchResultViewItemComparator","case_field_type","textArrayComparator","numberComparator","stringComparator","fieldA","fieldB","LoadingModule","PaginationModule","NgxPaginationModule","PaginatePipe","CaseListModule","j_r6","ct_r7","cs_r8","workbasketInput_r10","WorkbasketFiltersComponent_ng_container_22_div_2_Template","FORM_GROUP_VAL_LOC_STORAGE","SAVED_QUERY_PARAM_LOC_STORAGE","REGION_LIST_AND_FRC_FILTER","WorkbasketFiltersComponent","workbasketInputFilterService","jurisdictionService","onApply","onReset","initialised","initFilters","init","PARAM_JURISDICTION","PARAM_CASE_TYPE","caseState","PARAM_CASE_STATE","updateFormGroupFilters","getMetadataFields","resetFieldsWhenNoDefaults","workbasketInput","onJurisdictionIdChange","selectedJurisdictionCaseTypes","caseTypes","workbasketDefaults","clearWorkbasketInputs","isApplyButtonDisabled","onCaseTypeIdChange","resetCaseType","resetCaseState","selectedCaseTypeStates","sortStates","states","workbasketInputsReady","searchFormValueObject","isCaseTypesDropdownDisabled","isCaseStatesDropdownDisabled","isSearchableAndWorkbasketInputsReady","formGroupLS","savedQueryParams","routeSnapshot","selectedJurisdictionId","defaults","jurisdiction_id","jurisdictions","j","selectCaseType","selectCaseState","selectedCaseStateId_1","selectCaseStateIdFromQueryOrDefaults","ct","defaultCaseStateId","selectedCaseTypeId_1","selectCaseTypeIdFromQueryOrDefaults","case_type_id","defaultCaseTypeId","i2.WorkbasketInputFilterService","i4.JurisdictionService","i6.WindowService","WorkbasketFiltersComponent_option_7_Template","WorkbasketFiltersComponent_option_8_Template","WorkbasketFiltersComponent_option_13_Template","WorkbasketFiltersComponent_option_14_Template","WorkbasketFiltersComponent_option_21_Template","WorkbasketFiltersComponent_ng_container_22_Template","WorkbasketFiltersModule","READ_ACCESS","onWrapperApply","onWrapperReset","CaseListFiltersComponent","definitionsService","isVisible","i1.DefinitionsService","CaseListFiltersComponent_ccd_workbasket_filters_0_Template","CaseListFiltersModule","CaseHistoryCaseType","CaseHistory","CaseHistoryService","getCaseHistoryUrl","V2_MEDIATYPE_CASE_EVENT_VIEW","caseHistory","field_r4","CaseHistoryComponent_div_0_ng_container_49_ng_container_5_tr_4_Template","CaseHistoryComponent_div_0_ng_container_49_ng_container_5_tr_5_Template","tab_r2","CaseHistoryComponent_div_0_ng_container_49_ng_container_5_Template","CaseHistoryComponent_div_0_ng_container_49_Template","i3.AbstractAppConfig","CaseHistoryComponent","caseHistoryService","caseSubscription","paramMap","PARAM_EVENT_ID","ERROR_MESSAGE","sortTabFieldsAndFilterTabs","i4.CaseNotifier","i5.CaseHistoryService","CaseHistoryComponent_div_0_Template","CaseTimelineDisplayMode","CaseHistoryModule","CaseTimelineComponent_div_0_ng_container_2_ccd_event_log_1_Template","TIMELINE","goToCaseTimeline","selectedEventId","CaseTimelineComponent_div_0_ng_container_2_Template","CaseTimelineComponent_div_0_ng_container_3_Template","DETAILS","CaseTimelineComponent","i1.CaseNotifier","CaseTimelineComponent_div_0_Template","CaseTimelineModule","CaseResolver","navigationNotifierService","NavigationEnd","previousUrl","cid","PARAM_CASE_ID","isRootCaseViewRoute","getAndCacheCaseView","navigateToCaseList","action","NO_READ_ACCESS_REDIRECTION","firstChild","isTabViewRoute","getAndCacheDraft","checkAuthorizationError","EVENT_REGEX","CASE_CREATED_MSG","i2.CasesService","i4.NavigationNotifierService","i5","EventTriggerResolver","profileService","isRootTriggerEventRoute","getAndCacheEventTrigger","cachedEventTrigger","IGNORE_WARNING","IGNORE_WARNING_VALUES","cachedProfile","i3.ProfileService","i4.ProfileNotifier","CaseEventTriggerComponent","caseReferencePipe","activitySubscription","_resolved","parentUrl","hasPrint","hasEventSelector","i5.CaseReferencePipe","i6.ActivityPollingService","CaseEventTriggerComponent_div_0_Template","CaseViewComponent","navigationTriggered","navigationSubscription","basicFields","caseNameHmctsInternal","courtOrHearingCentre","i1.NavigationNotifierService","i3.CasesService","i4.DraftService","CaseViewComponent_div_0_Template","CaseBasicAccessViewComponent","caseManagementLocation","baseLocation","courtOrHearingCentreSubscription","building_location_name","onCancel","history","go","getRequestUrl","CaseBasicAccessViewComponent_ng_container_5_Template","CaseBasicAccessViewComponent_ng_container_6_Template","CaseBasicAccessViewComponent_div_13_Template","CaseBasicAccessViewComponent_div_14_Template","CaseBasicAccessViewComponent_div_15_Template","CaseBasicAccessViewComponent_div_16_Template","CaseBasicAccessViewComponent_div_17_Template","DeleteOrCancelDialogComponent","trigger_r3","triggerSubmit","triggerChange","EventTriggerComponent_form_0_option_5_Template","EventTriggerComponent_form_0_option_6_Template","triggerForm","triggers","isButtonDisabled","EventTriggerComponent","onTriggerSubmit","onTriggerChange","getDefault","i2.OrderService","EventTriggerComponent_form_0_Template","fieldError_r7","CaseFullAccessViewComponent_div_1_ul_5_li_1_Template","CaseFullAccessViewComponent_div_1_ul_5_Template","clearErrorsAndWarnings","applyTrigger","isTriggerButtonDisabled","tab_r16","field_r21","ctx_r23","CaseFullAccessViewComponent_ng_container_11_mat_tab_4_ng_template_1_ng_container_2_tr_4_Template","CaseFullAccessViewComponent_ng_container_11_mat_tab_4_ng_template_1_ng_container_2_tr_5_Template","CaseFullAccessViewComponent_ng_container_11_mat_tab_4_ng_template_1_ng_container_2_Template","tab_r17","CaseFullAccessViewComponent_ng_container_11_mat_tab_4_ng_template_1_Template","tab_r27","_r29_1","tabChanged","CaseFullAccessViewComponent_ng_container_11_mat_tab_3_Template","CaseFullAccessViewComponent_ng_container_11_mat_tab_4_Template","CaseFullAccessViewComponent_ng_container_11_mat_tab_5_Template","CaseFullAccessViewComponent_ng_container_11_router_outlet_6_Template","prependedTabs","sortedTabs","appendedTabs","CaseFullAccessViewComponent","errorNotifierService","convertHrefToRouterService","errorSubscription","isPrintEnabled","printEnabled","DRAFT_DELETED","ERROR_DELETING_DRAFT","DRAFT_RESUMED","jid","etid","EVENT_TRIGGERED","hasTabsPresent","matTab","hashValue","regExp","UNICODE_SPACE","EMPTY_SPACE","tabGroup","_tabs","textLabel","selectedIndex","paths","lastPath_1","decodeURIComponent","foundTab_1","additionalTabs","caseTab","aTab","bTab","preSelectTab_1","tabChangeEvent","tabsLengthBeforeAppended","label_1","hash","getTabFields","buildFormGroup","i2.NavigationNotifierService","i4.ActivityPollingService","i7.DraftService","i8.ErrorNotifierService","i9.ConvertHrefToRouterService","i10","Location","CaseFullAccessViewComponent_div_0_Template","CaseFullAccessViewComponent_div_1_Template","CaseFullAccessViewComponent_div_7_Template","CaseFullAccessViewComponent_div_8_Template","CaseFullAccessViewComponent_ng_container_11_Template","PrintUrlPipe","remoteUrl","printServiceUrlPathname","MSIE_BROWSER_NAME","IE11_BROWSER_ENGINE","urlParser","createElement","pathname","getPrintServiceUrl","document_r2","CasePrinterComponent_div_0_tr_12_Template","CasePrinterComponent","userAccessType","CaseViewerComponent_div_0_ccd_case_basic_access_view_1_Template","CaseViewerComponent_div_0_ccd_case_full_access_view_2_Template","hasStandardAccess","i3.AlertService","CasePrinterComponent_div_0_Template","CaseViewerComponent","METADATA_FIELD_ACCESS_PROCEES_ID","NON_STANDARD_USER_ACCESS_TYPES","loadCaseDetails","setUserAccessType","setMockData","access_process","accessManagementBasicViewMock","active","access_process_index","accessProcess","CaseViewerComponent_div_0_Template","ErrorMessageComponent","ErrorMessageComponent_ng_container_0_Template","EventMessageModule","MultipleTasksExistComponent","NoTasksAvailableComponent","TaskAssignedComponent","i2.JudicialworkerService","i3.CaseworkerService","TaskAssignedComponent_div_0_Template","TaskCancelledComponent","TaskConflictComponent","TaskUnassignedComponent","EventStartStates","EventStartGuard","canActivate","caseId_1","eventId_1","taskId_1","isComplete","caseInfoStr","caseInfo","checkForTasks","checkTaskInEventNotRequired","tasksAssignedToUser","task_required_for_event","i1.WorkAllocationService","i4.SessionStorageService","EventStartStateMachineService","stateCheckForMatchingTasks","CHECK_FOR_MATCHING_TASKS","entryActionForStateCheckForMatchingTasks","stateNoTask","NO_TASK","entryActionForStateNoTask","stateOneOrMoreTasks","ONE_OR_MORE_TASKS","entryActionForStateOneOrMoreTasks","TASK_UNASSIGNED","entryActionForStateTaskUnAssigned","stateTaskAssignedToUser","TASK_ASSIGNED_TO_USER","entryActionForStateTaskAssignedToUser","stateOneTaskAssignedToUser","ONE_TASK_ASSIGNED_TO_USER","entryActionForStateOneTaskAssignedToUser","stateMultipleTasksAssignedToUser","MULTIPLE_TASKS_ASSIGNED_TO_USER","entryActionForStateMultipleTasksAssignedToUser","FINAL","finalAction","addTransitionsForStateCheckForMatchingTasks","addTransitionsForStateNoTask","addTransitionsForStateOneOrMoreTasks","addTransitionsForStateTaskAssignedToUser","addTransitionsForStateOneTaskAssignedToUser","addTransitionsForStateMultipleTasksAssignedToUser","entryActionForStateMultipleTasks","navigationURL","EventStartComponent","i1.EventStartStateMachineService","EventTasksResolverService","EventStartModule","AccessReason","ChallengedAccessRequestPageText","ChallengedAccessRequestErrors","EventTriggerModule","errorMessage","CaseChallengedAccessRequestComponent_div_19_div_4_Template","caseRefLabel","CaseChallengedAccessRequestComponent_div_32_div_2_Template","CaseChallengedAccessRequestComponent","genericError","radioSelectedControlName","caseReferenceControlName","otherReasonControlName","accessReasons","reason","LINKED_TO_CURRENT_CASE","checked","CONSOLIDATE_CASE","ORDER_FOR_TRANSFER","OTHER","TITLE","hint","HINT","CASE_REF","radioSelected","inputEmpty","updateOn","onSubmit","NO_SELECTION","NO_CASE_REFERENCE","NO_REASON","radioSelectedValue","reasonNumber","challengedAccessRequest","otherReason","$roleAssignmentResponseSubscription","_response","_error","CaseChallengedAccessRequestComponent_exui_error_message_0_Template","CaseChallengedAccessRequestComponent_div_13_Template","CaseChallengedAccessRequestComponent_div_19_Template","CaseChallengedAccessRequestComponent_div_32_Template","CaseChallengedAccessSuccessComponent","ReviewSpecificAccessRequestPageText","ReviewSpecificAccessRequestErrors","CaseReviewSpecificAccessRejectComponent","retunToTask","returnToMyTask","SpecificAccessRequestPageText","SpecificAccessRequestErrors","CaseReviewSpecificAccessRequestComponent","collapsed","APPROVE_REQUEST","REJECT_REQUEST","REQUEST_MORE_INFORMATION","requestAccessDetailsMock","requestAccessDetails","CaseReviewSpecificAccessRequestComponent_exui_error_message_0_Template","CaseReviewSpecificAccessRequestComponent_div_44_Template","caseName","dateSubmitted","requestFrom","reasonForCaseAccess","CaseSpecificAccessRequestComponent","specificReasonControlName","specificAccessRequest","specificReason","CaseSpecificAccessRequestComponent_exui_error_message_0_Template","CaseSpecificAccessRequestComponent_div_29_Template","CaseSpecificAccessSuccessComponent","CaseViewerModule","MatTabsModule","viewerRouting","pathMatch","j_r3","ct_r4","e_r5","CreateCaseFiltersComponent","selectionSubmitted","selectionChanged","initControls","selectJurisdiction","filterJurisdictionControl","resetEvent","findJurisdiction","filterCaseTypeControl","findCaseType","selectedCaseTypeEvents","sortEvents","selectEvent","filterEventControl","onEventIdChange","emitChange","findEvent","isCreatable","retainEventsWithCreateRights","retainEventsWithNoPreStates","pre_states","userProfile","caseEvent","i1.OrderService","i2.DefinitionsService","startButtonText","CreateCaseFiltersComponent_option_7_Template","CreateCaseFiltersComponent_option_14_Template","CreateCaseFiltersComponent_option_21_Template","CreateCaseFiltersModule","CreateCaseFiltersSelection","DialogsModule","SearchInput","searchInput_r6","SearchFiltersComponent_ng_container_13_div_2_Template","JURISDICTION_LOC_STORAGE","META_FIELDS_LOC_STORAGE","FORM_GROUP_VALUE_LOC_STORAGE","CASE_TYPE_LOC_STORAGE","SearchFiltersComponent","searchService","onJurisdiction","localStorageJurisdiction_1","getQueryParams","populateValuesInLocalStorage","searchInput","isSearchable","isSearchableAndSearchInputsReady","searchInputsReady","formValueObject","isJurisdictionSelected","caseTypeObject_1","onWrapperJurisdiction","autoApply","i1.SearchService","i3.JurisdictionService","i4.WindowService","SearchFiltersComponent_option_7_Template","SearchFiltersComponent_option_12_Template","SearchFiltersComponent_ng_container_13_Template","SearchFiltersWrapperComponent","SearchFiltersWrapperComponent_ccd_search_filters_0_Template","SearchFiltersModule","paginationMetadata","total_results_count","getTotalResults","getFirstResult","getLastResult","clearSelection","_r14_1","_r19_1","col_r15","_r22_1","SearchResultComponent_table_0_th_10_div_6_Template","sortLabelText","_r30_1","result_r24","ctx_r37","getColumnsWithPrefix","col_r32","hydrated_case_fields","SearchResultComponent_table_0_ng_container_13_tr_1_td_2_a_1_ng_container_2_ccd_field_read_1_Template","SearchResultComponent_table_0_ng_container_13_tr_1_td_2_a_1_ng_container_2_ng_template_2_Template","ctx_r36","draftPrefixOrGet","_r38","SearchResultComponent_table_0_ng_container_13_tr_1_td_2_a_1_ng_container_2_Template","prepareCaseLinkUrl","hideRows","ctx_r35","SearchResultComponent_table_0_ng_container_13_tr_1_td_2_a_1_Template","SearchResultComponent_table_0_ng_container_13_tr_1_td_2_div_2_Template","colIndex_r33","ctx_r27","SearchResultComponent_table_0_ng_container_13_tr_1_td_1_Template","SearchResultComponent_table_0_ng_container_13_tr_1_td_2_Template","SearchResultComponent_table_0_ng_container_13_tr_1_td_3_Template","resultView","activityEnabled","SearchResultComponent_table_0_ng_container_13_tr_1_Template","paginationPageSize","resultTotal","_r56_1","result_r50","ctx_r51","ctx_r65","col_r60","SearchResultComponent_table_0_ng_container_14_tr_1_td_2_a_1_ng_container_2_ccd_field_read_1_Template","SearchResultComponent_table_0_ng_container_14_tr_1_td_2_a_1_ng_container_2_ng_template_2_Template","ctx_r64","_r66","SearchResultComponent_table_0_ng_container_14_tr_1_td_2_a_1_ng_container_2_Template","ctx_r62","ctx_r63","SearchResultComponent_table_0_ng_container_14_tr_1_td_2_a_1_Template","SearchResultComponent_table_0_ng_container_14_tr_1_td_2_div_2_Template","colIndex_r61","ctx_r53","SearchResultComponent_table_0_ng_container_14_tr_1_td_1_Template","SearchResultComponent_table_0_ng_container_14_tr_1_td_2_Template","SearchResultComponent_table_0_ng_container_14_tr_1_td_3_Template","ctx_r49","SearchResultComponent_table_0_ng_container_14_tr_1_Template","SearchResultComponent_table_0_div_4_Template","SearchResultComponent_table_0_div_5_Template","SearchResultComponent_table_0_div_6_Template","SearchResultComponent_table_0_th_9_Template","SearchResultComponent_table_0_th_10_Template","SearchResultComponent_table_0_th_11_Template","SearchResultComponent_table_0_ng_container_13_Template","SearchResultComponent_table_0_ng_container_14_Template","paginationLimitEnforced","hasResults","consumerSortingEnabled","_r78_1","SearchResultComponent","searchResultViewItemComparatorFactory","cdr","showOnlySelected","preSelectedCases","changePage","clickCase","sortHandler","consumerSortParameters","PAGINATION_MAX_ITEM_RESULT","total","maximumResultReached","preSelectedCase","this_1","hydrateResultView","draftsCount","numberOfDrafts","supplementary_data","l","canBeSharedCount","col","caseFilterFG","activeElement","HTMLElement","blur","total_pages_count","isColumn","isAscending","hyphenateIfCaseReferenceOrGet","getDraftsCountIfNotPageOne","caseLinkUrlTemplate","goToCase","currentSortOrder","isDescending","comparison","i1.SearchResultViewItemComparatorFactory","i3.ActivityService","i4.CaseReferencePipe","i5.PlaceholderService","i6.BrowserService","SearchResultComponent_table_0_Template","SearchResultComponent_ccd_pagination_1_Template","SearchResultComponent_div_2_Template","changeDetection","ChangeDetectionStrategy","OnPush","SearchResultModule","ComplexFieldOverride","CaseFieldBuilder","withACLs","withId","withFieldType","withDisplayContext","withDisplayContextParameter","withHidden","withHintText","withOrder","withSecurityLabel","security_label","withShowCondition","withShowSummaryContentOption","option","withValue","withListValue","build","textFieldType","TestRouteSnapshotBuilder","withParent","withParams","withData","outlet","routeConfig","root","typeComplexFields","_delete","ACLs","displayContext","complexFieldOverride","typeId","fixedListItems","pageColumnNumber","complexFieldOverrides"],"sources":["../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footer.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/header-bar/header-bar.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/navigation/navigation-item.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/phase/phase.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/header/headers.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.html","../../../node_modules/tslib/tslib.es6.js","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/date-input/date-input.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert-icon-class.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/alert/alert.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tab.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/tabs/tabs.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-banner/activity-banner.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-banner/activity-banner.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-icon/activity-icon.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity-icon/activity-icon.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/activity/activity.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/http/http-error.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/app.config.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/auth/auth.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/http/http.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/session/session-storage.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/activity/activity.polling.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/activity/activity.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/conditional-show-registrar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/services/grey-bar.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/format-translator.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/date.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/fixed-list-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/field-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.utils.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/domain/conditional-show.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/commons/constants.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-validators.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-form-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-field-write.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show-form.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/conditional-show/conditional-show.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/field-type-sanitiser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-value.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/services/placeholder.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/substitutor/label-substitutor.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.directive.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/directives/focus-element/focus-element.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-event-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/draft.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-access-utils/index.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/order/order.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/wizard-page-field-to-case-field.mapper.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/alert/alert.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/work-allocation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/cases.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/draft/draft.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/event-trigger.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/fields/fields.purger.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/wizard-factory.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit/case-edit.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-create/case-create.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit/case-edit.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-create/case-create.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-reference/case-reference.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/markdown/markdown.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/markdown/markdown.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/case-title/ccd-case-title.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/palette-context.enum.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/abstract-field-read.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/addresses/address.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/address/address-option.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/address-parser.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/addresses/addresses.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-compound.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/complex/fields-filter.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/write-complex-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/write-complex-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/field-label.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/address/write-address-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/address/write-address-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/read-case-link-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/read-case-link-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/first-error.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/write-case-link-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/case-link/write-case-link-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/read-collection-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/read-collection-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/jurisdiction.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/profile/profile.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.notifier.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/write-collection-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/write-collection-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-raw.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-raw.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-state.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type-lite.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/case-type.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/event-case-field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/definition/banner.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-collection-table.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-collection-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-table.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/complex/read-complex-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/read-date-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/datetime-picker/datetime-picker-utils.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/datetime-picker/datetime-picker.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/datetime-picker/datetime-picker.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/case-fields/case-field.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-mandatory.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-container-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/date/write-date-container-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/window/window.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/document-management/document-management.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/read-document-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/read-document-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/document-dialog/document-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/helpers/init-dialog-helper.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/document-dialog/document-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/alert/alert.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-event.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view-trigger.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-tab.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/case-print-document.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/document/document-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/organisation/organisation-converter.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/field.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-column.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view-item.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/search-result-view.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-details.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-event-data.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/workbasket/workbasket-input.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/pagination-metadata.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-order.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/search/sorting/sort-parameters.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/case.notifier.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/file-upload-state.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/write-document-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/write-document-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/dynamic-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/read-dynamic-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/write-dynamic-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-list/write-dynamic-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/dynamic-radio-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/read-dynamic-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/email/read-email-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/email/write-email-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/email/write-email-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/fixed-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/read-fixed-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/write-fixed-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-list/write-fixed-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/fixed-radio-list.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/read-fixed-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/write-fixed-radio-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/fixed-radio-list/write-fixed-radio-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-table.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/dash.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-details.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log-details.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/event-log/event-log.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/case-history-viewer-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/history/case-history-viewer-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/label/label-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/read-money-gbp-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/label/label-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/money-gbp-input.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/write-money-gbp-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/money-gbp/write-money-gbp-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/read-multi-select-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/read-multi-select-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/write-multi-select-list-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/multi-select-list/write-multi-select-list-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/number/read-number-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/number/write-number-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/number/write-number-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-row.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-row.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/read-order-summary-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/write-order-summary-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/write-order-summary-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/organisation/organisation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-raw.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-raw.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-table.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field-table.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/read-organisation-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-complex-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-complex-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/organisation/write-organisation-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/payment-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/payment/case-payment-history-viewer-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/payment/case-payment-history-viewer-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/phone-uk/read-phone-uk-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/phone-uk/write-phone-uk-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/phone-uk/write-phone-uk-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text-area/read-text-area-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/browser/browser.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text-area/write-text-area-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text-area/write-text-area-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text/read-text-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text/write-text-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/text/write-text-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/unsupported-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/waystopay/waystopay-field.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/waystopay/waystopay-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/yes-no.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/read-yes-no-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/write-yes-no-field.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/yes-no/write-yes-no-field.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/palette.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read-label.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read-label.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-read.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-write.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/base-field/field-write.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-read-only-and-not-collection.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-form/case-edit-form.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/form/form-error.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/page-validation.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/domain/error-context.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/callback-errors.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/callback-errors.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/loading-spinner/loading-spinner.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-page/case-edit-page.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/loading-spinner/loading-spinner.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/confirmation.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-progress/case-progress.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-progress/case-progress.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/event-completion-return-states.enum.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/event-completion-states.enum.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/convert-href-to-router.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/router/router-helper.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/case-edit-wizard.guard.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/case-worker.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/work-allocation/Task.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/event-completion-portal-types.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/event-completion-state-machine.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/services/judicial-worker.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/profile/profile.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error/errors.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/banners/banners.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/body/body.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/footer/footers.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/components/form/form.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/is-read-only.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/utils/utils.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/complex/ccd-tab-fields.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/complex/cdd-page-fields.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/pipes/pipes.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/collection/collection-create-checker.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/document-url.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/document/file-upload-progress.guard.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/fee-value.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/fee.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/order-summary/order-summary.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/palette/palette.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-event-completion/case-event-completion.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/case-editor.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/editor.routing.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-header/case-header.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-header/case-header.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-header/case-header.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/pagination/pagination.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/pagination/pagination.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list/case-list.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list/case-list.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/error/error-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/eventStatusService/event-status.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/jurisdiction/jurisdiction.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/banners/banners.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-origin.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/navigation/navigation-notifier.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/request/request.options.builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search/search.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/workbasket/workbasket-input-filter.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/definitions/definitions.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/services/loading/loading.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/pagination/pagination.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list/case-list.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/workbasket-filters/workbasket-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/workbasket-filters/workbasket-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/workbasket-filters/workbasket-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/domain/case-view/access-types.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list-filters/case-list-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list-filters/case-list-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-list-filters/case-list-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-history/domain/case-history.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-history/services/case-history.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-history/case-history.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-history/case-history.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-history/case-history.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-timeline/case-timeline.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-timeline/case-timeline.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-timeline/case-timeline.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/services/case.resolver.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/services/event-trigger.resolver.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-view/case-view.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-view/case-view.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-trigger/event-trigger.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-trigger/event-trigger.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/printer/case-printer.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/printer/case-printer.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-viewer.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-viewer.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error-message/error-message.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error-message/error-message.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/error-message/error-message.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-assigned/task-assigned.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-assigned/task-assigned.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-conflict/task-conflict.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-conflict/task-conflict.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/event-guard/event-start.guard.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/models/event-start-states-enum.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/services/event-start-state-machine.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/event-start.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-start/event-start.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/event-trigger/event-trigger.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/case-viewer.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-viewer/viewer.routing.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/create-case-filters/create-case-filters-selection.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/dialogs/dialogs.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/domain/search-input.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters-wrapper.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters-wrapper.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-filters/search-filters.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-result/search-result.component.html","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-result/search-result.component.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/search-result/search-result.module.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/components/case-editor/domain/wizard-page-field-complex-override.model.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/case-field-builder.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/fixture/shared.test.fixture.ts","../../../projects/ccd-case-ui-toolkit/src/lib/shared/test/test-route-snapshot-builder.ts"],"sourcesContent":["<footer class=\"group js-footer\" id=\"footer\" role=\"footer\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"footer-wrapper\">\n\n <!-- Condition: Solicitor -->\n <div *ngIf=\"isSolicitor\" class=\"footer-meta\">\n <div class=\"footer-meta-inner\">\n <ng-content select=\"[footerSolsNavLinks]\"></ng-content>\n <div class=\"open-government-licence\">\n <p class=\"logo\"><a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence</a></p>\n <p>All content is available under the <a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"license\">Open Government Licence v3.0</a>, except where otherwise stated</p>\n </div>\n </div>\n\n <div class=\"copyright\">\n <a href=\"https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/copyright-and-re-use/crown-copyright/\">© Crown copyright</a>\n </div>\n </div>\n\n <!-- Condition: Case Worker -->\n <div *ngIf=\"!isSolicitor\" class=\"footer-meta\">\n <div class=\"title\">\n <span class=\"footer-text\">Help</span>\n </div>\n <div class=\"email\">\n <span class=\"footer-text\">Email: <a href=\"mailto:{{email}}\">{{email}}</a></span>\n </div>\n <div class=\"phone\">\n <span class=\"footer-text\">Phone: {{phone}}</span>\n </div>\n <div class=\"work-hours\">\n <span class=\"footer-text\">{{workhours}}</span>\n </div>\n <ng-content select=\"[footerCaseWorkerNavLinks]\"></ng-content>\n </div>\n\n </div>\n</footer>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-footer-bar',\n templateUrl: './footer.html',\n styleUrls: ['./footer.scss']\n})\nexport class FooterComponent {\n\n @Input()\n public email: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public phone: string;\n\n @Input()\n public workhours: string;\n\n}\n","<header role=\"banner\" id=\"global-header\" class=\"with-proposition\">\n <div [class.full-screen]=\"!isSolicitor\" class=\"header-wrapper\">\n\n <div class=\"header-global\" [class.header-logo]=\"isSolicitor\">\n <div *ngIf=\"isSolicitor\">\n <a href=\"https://www.gov.uk\" title=\"Go to the GOV.UK homepage\" id=\"logo\" class=\"content\" style=\"margin-left: 0px;\">\n <img src=\"/img/gov.uk_logotype_crown_invert_trans.png?0.23.0\" width=\"36\" height=\"32\" alt=\"\"> GOV.UK\n </a>\n </div>\n <div class=\"global-header\" *ngIf=\"!isSolicitor\">\n <div class=\"title\">\n <span>{{title}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"header-proposition\">\n <div class=\"content\">\n <a href=\"#proposition-links\" class=\"js-header-toggle menu\">Menu</a>\n <div *ngIf=\"isSolicitor\" id=\"proposition-menu\">\n <div class=\"title-solicitor\">\n <span id=\"proposition-name\">{{title}}</span>\n <ng-content select=\"[headerNavigation]\"></ng-content>\n </div>\n </div>\n\n <div class=\"proposition-right\">\n <span id=\"user-name\">{{username}}</span>\n <a (click)=\"signOut()\" id=\"sign-out\" href=\"javascript:void(0)\">Sign Out</a>\n </div>\n </div>\n </div>\n\n </div>\n</header>\n","import { Component, Input, Output } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'cut-header-bar',\n templateUrl: './header-bar.html',\n styleUrls: ['./header-bar.scss']\n})\nexport class HeaderBarComponent {\n\n @Input()\n public title: string;\n\n @Input()\n public isSolicitor: boolean;\n\n @Input()\n public username: string;\n\n @Output()\n private readonly signOutRequest: EventEmitter<any> = new EventEmitter();\n\n public signOut() {\n this.signOutRequest.emit();\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-bar',\n templateUrl: './navigation.html',\n styleUrls: ['./navigation.scss']\n})\nexport class NavigationComponent {\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div>\n <a [routerLinkActive]=\"'item-bold'\" [routerLink]=\"link\">{{label}}</a>\n <input type=\"image\" alt=\"{{label}} button\" *ngIf=\"imageLink\" src=\"{{imageLink}}\"/>\n</div>\n","<div>\n <nav [class.full-screen]=\"!isSolicitor\" class=\"cut-nav-bar\">\n <ng-content select=\"[leftNavLinks]\"></ng-content>\n <ng-content select=\"[rightNavLinks]\"></ng-content>\n </nav>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-nav-item',\n templateUrl: './navigation-item.html',\n styleUrls: ['./navigation-item.scss']\n})\nexport class NavigationItemComponent {\n\n @Input()\n public label: string;\n\n @Input()\n public link: string;\n\n @Input()\n public imageLink: string;\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-phase-bar',\n templateUrl: './phase.html',\n styleUrls: ['./phase.scss']\n})\nexport class PhaseComponent {\n\n @Input()\n public phaseLabel: string;\n\n @Input()\n public phaseLink: string;\n\n @Input()\n public isSolicitor: boolean;\n\n}\n","<div [class.full-screen]=\"!isSolicitor\" class=\"phase-banner\">\n <p>\n <strong class=\"phase-tag\">{{phaseLabel}}</strong>\n <span class=\"text-16\">This is a new service – your <a href=\"{{phaseLink}}\" target=\"_blank\" rel=\"noopener\">feedback</a> will help us to improve it.</span>\n </p>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { HeaderBarComponent } from './header-bar/header-bar.component';\nimport { NavigationItemComponent } from './navigation/navigation-item.component';\nimport { NavigationComponent } from './navigation/navigation.component';\nimport { PhaseComponent } from './phase/phase.component';\n\n@NgModule({\n imports: [CommonModule, RouterModule],\n declarations: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent],\n exports: [PhaseComponent, HeaderBarComponent, NavigationComponent, NavigationItemComponent]\n})\nexport class HeadersModule {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'cut-body',\n templateUrl: './body.html',\n styleUrls: ['./fonts.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BodyComponent {\n\n}\n","<div class=\"global-display\">\n <ng-content select=\"[topBody]\"></ng-content>\n <ng-content select=\"[leftBody]\"></ng-content>\n <ng-content select=\"[rightBody]\"></ng-content>\n</div>\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","<div class=\"form-date\">\n\n <div class=\"form-group form-group-day\">\n <label class=\"form-label\" [for]=\"dayId()\">Day</label>\n <input #dayInput\n class=\"form-control\"\n [id]=\"dayId()\"\n [name]=\"dayId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayDay\"\n (change)=\"dayChange(dayInput.value)\"\n (keyup)=\"dayChange(dayInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-month\">\n <label class=\"form-label\" [for]=\"monthId()\">Month</label>\n <input #monthInput\n class=\"form-control\"\n [id]=\"monthId()\"\n [name]=\"monthId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayMonth\"\n (change)=\"monthChange(monthInput.value)\"\n (keyup)=\"monthChange(monthInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-year\">\n <label class=\"form-label\" [for]=\"yearId()\">Year</label>\n <input #yearInput\n class=\"form-control\"\n [id]=\"yearId()\"\n [name]=\"yearId()\"\n type=\"text\"\n pattern=\"[0-9]*\"\n inputmode=\"numeric\"\n [value]=\"displayYear\"\n (change)=\"yearChange(yearInput.value)\"\n (keyup)=\"yearChange(yearInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-hour\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"hourId()\">Hour</label>\n <input #hourInput\n class=\"form-control\"\n [id]=\"hourId()\"\n [name]=\"hourId()\"\n type=\"number\"\n [value]=\"displayHour\"\n (input)=\"hourChange(hourInput.value)\"\n (keyup)=\"hourChange(hourInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-minute\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"minuteId()\">Minute</label>\n <input #minuteInput\n class=\"form-control\"\n [id]=\"minuteId()\"\n [name]=\"minuteId()\"\n type=\"number\"\n [value]=\"displayMinute\"\n (input)=\"minuteChange(minuteInput.value)\"\n (keyup)=\"minuteChange(minuteInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n <div class=\"form-group form-group-second\" *ngIf=\"isDateTime\">\n <label class=\"form-label\" [for]=\"secondId()\">Second</label>\n <input #secondInput\n class=\"form-control\"\n [id]=\"secondId()\"\n [name]=\"secondId()\"\n type=\"number\"\n [value]=\"displaySecond\"\n (input)=\"secondChange(secondInput.value)\"\n (keyup)=\"secondChange(secondInput.value)\"\n (focus)=\"inputFocus()\"\n [ngClass]=\"{'govuk-input--error': isInvalid}\">\n </div>\n\n</div>\n","import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n@Component({\n selector: 'cut-date-input',\n templateUrl: './date-input.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true\n }\n ],\n})\nexport class DateInputComponent implements ControlValueAccessor, Validator, OnInit, OnDestroy {\n @Input()\n public id: string;\n\n @Input()\n public mandatory: boolean;\n\n @Input()\n public isDateTime: boolean;\n\n @Input()\n public formControl: FormControl;\n\n @Input()\n public isInvalid: boolean;\n\n public isTouched = false;\n public displayDay: string = null;\n public displayMonth: string = null;\n public displayYear: string = null;\n\n public displayHour: string = null;\n public displayMinute: string = null;\n public displaySecond: string = null;\n // Works with\n // 2018-04-09T08:02:27.542\n // 2018-04-09T08:02:27.542Z\n // 2018-04-09T08:02:27.542+01:00\n private readonly DATE_FORMAT =\n /^(19|20)\\d{2}-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?|Z)?$/;\n // year - month - day T HH : MM : SS .000 Z or + 01 : 00\n private propagateChange: (_: any) => {};\n private rawValue = '';\n private day: string;\n private month: string;\n private year: string;\n private hour: string;\n private minute: string;\n private second: string;\n\n public ngOnInit() {\n if (this.mandatory && this.isDateTime) {\n this.displayHour = '00';\n this.displayMinute = '00';\n this.displaySecond = '00';\n this.hour = '00';\n this.minute = '00';\n this.second = '00';\n }\n }\n\n public writeValue(obj: string): void { // 2018-04-09T08:02:27.542\n if (obj) {\n this.rawValue = this.removeMilliseconds(obj);\n // needs to handle also partial dates, e.g. -05-2016 (missing day)\n const [datePart, timePart] = this.rawValue.split('T');\n const dateValues = datePart.split('-');\n this.year = this.displayYear = dateValues[0] || '';\n this.month = this.displayMonth = dateValues[1] || '';\n this.day = this.displayDay = dateValues[2] || '';\n if (timePart) {\n const timeParts = timePart.split(':');\n this.hour = this.displayHour = timeParts[0] || '';\n this.minute = this.displayMinute = timeParts[1] || '';\n this.second = this.displaySecond = timeParts[2] || '';\n }\n }\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (this.mandatory && !this.viewValue()) {\n return {\n required: 'This field is required'\n };\n }\n if (control.value && !this.isDateFormat(this.getValueForValidation(control))) {\n return {\n pattern: 'Date is not valid'\n };\n }\n return undefined;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n // Do nothing.\n }\n\n public ngOnDestroy() {\n this.validate = (control: AbstractControl): ValidationErrors => {\n return undefined;\n };\n }\n\n public dayChange(value: string) {\n // get value from input\n this.day = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public monthChange(value: string) {\n // get value from input\n this.month = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public yearChange(value: string) {\n // get value from input\n this.year = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public hourChange(value: string) {\n // get value from input\n this.hour = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public minuteChange(value: string) {\n // get value from input\n this.minute = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n\n }\n\n public secondChange(value: string) {\n // get value from input\n this.second = value;\n\n this.rawValue = this.viewValue();\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public inputFocus() {\n this.isTouched = false;\n this.touch();\n }\n\n public touch() {\n if (this.isTouched) {\n this.formControl.markAsTouched();\n this.propagateChange(this.rawValue);\n } else {\n this.formControl.markAsUntouched();\n }\n }\n\n public dayId() {\n return this.id + '-day';\n }\n\n public monthId() {\n return this.id + '-month';\n }\n\n public yearId() {\n return this.id + '-year';\n }\n\n public hourId() {\n return this.id + '-hour';\n }\n\n public minuteId() {\n return this.id + '-minute';\n }\n\n public secondId() {\n return this.id + '-second';\n }\n\n private viewValue(): string {\n if (this.day || this.month || this.year || this.hour || this.minute || this.second) {\n const date = [\n this.year ? this.year : '',\n this.month ? this.pad(this.month) : '',\n this.day ? this.pad(this.day) : ''\n ].join('-');\n if (this.isDateTime) {\n const time = [\n this.hour ? this.pad(this.hour) : '',\n this.minute ? this.pad(this.minute) : '',\n this.second ? this.pad(this.second) : ''\n ].join(':');\n return date + 'T' + time + '.000';\n } else {\n return date;\n }\n }\n return null;\n }\n\n private isDateFormat(val: any): boolean {\n return this.DATE_FORMAT.test(val);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n\n private getValueForValidation(control: any) {\n if (this.isDateTime) {\n return control.value;\n } else {\n return control.value.replace(/Z.*/, 'T00:00:00Z');\n }\n }\n\n private removeMilliseconds(dateTime: string): string {\n return dateTime.replace(/\\..*/, '');\n }\n}\n","<div\n class=\"hmcts-banner\"\n [class.hmcts-banner--warning]=\"type === alertMessageType.WARNING || type === alertMessageType.ERROR\"\n [class.hmcts-banner--success]=\"type === alertMessageType.SUCCESS\"\n>\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"alertMessageType.WARNING\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.ERROR\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.SUCCESS\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"></path>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"alertMessageType.INFORMATION\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n </ng-container>\n </ng-container>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">{{type}}</span>\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\nexport enum AlertMessageType {\n WARNING = 'warning',\n SUCCESS = 'success',\n ERROR = 'error',\n INFORMATION = 'information'\n}\n\n@Component({\n selector: 'cut-alert',\n templateUrl: './alert.component.html',\n styleUrls: [\n './alert.component.scss'\n ]\n})\nexport class AlertComponent {\n\n // confirmation type has been removed as per EUI-3232\n public static readonly TYPE_WARNING = 'warning';\n public static readonly TYPE_SUCCESS = 'success';\n public static readonly TYPE_ERROR = 'error';\n public static readonly TYPE_INFORMATION = 'information';\n\n @Input()\n public type: AlertMessageType;\n\n @Input()\n public showIcon = true;\n\n public alertMessageType = AlertMessageType;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AlertComponent } from './alert.component';\n\n@Pipe({\n name: 'cutAlertIconClass'\n})\nexport class AlertIconClassPipe implements PipeTransform {\n private static readonly CLASS_WARNING = 'icon-alert';\n private static readonly CLASS_SUCCESS = 'icon-tick';\n\n public transform(type: string): string {\n switch (type) {\n case AlertComponent.TYPE_SUCCESS:\n return AlertIconClassPipe.CLASS_SUCCESS;\n case AlertComponent.TYPE_WARNING:\n default:\n return AlertIconClassPipe.CLASS_WARNING;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AlertIconClassPipe } from './alert-icon-class.pipe';\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n AlertComponent,\n AlertIconClassPipe\n ],\n exports: [\n AlertComponent\n ]\n})\nexport class AlertModule {}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cut-tab',\n templateUrl: './tab.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabComponent {\n\n @Input()\n public id: string;\n\n @Input()\n public title: string;\n\n @Input()\n public selected: boolean;\n\n}\n","<div\n class=\"tabs-panel\"\n [id]=\"id\"\n role=\"tabpanel\"\n [ngClass]=\"{\n 'js-hidden': !selected\n }\"\n [attr.aria-hidden]=\"!selected\"\n>\n <ng-content></ng-content>\n</div>\n","<div class=\"tabs\">\n\n <ul class=\"tabs-list\" role=\"list\">\n <li class=\"tabs-list-item\" *ngFor=\"let panel of panels\">\n <a\n class=\"tabs-toggle\"\n [routerLink]=\"['.']\"\n [fragment]=\"panel.id\"\n role=\"tab\"\n (click)=\"show(panel.id)\"\n [attr.aria-controls]=\"panel.id\"\n [attr.aria-selected]=\"panel.selected\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'tabs-toggle-selected': panel.selected\n }\"\n #tab\n >{{panel.title}}</a>\n </li>\n </ul>\n\n <div class=\"tabs-content\">\n <ng-content></ng-content>\n </div>\n\n</div>\n","import { AfterContentInit, Component, ContentChildren, ElementRef, QueryList, ViewChildren } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TabComponent } from './tab.component';\n\n@Component({\n selector: 'cut-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: [\n './tabs.component.scss'\n ],\n})\nexport class TabsComponent implements AfterContentInit {\n\n @ViewChildren('tab') public tabs!: QueryList<ElementRef>;\n\n @ContentChildren(TabComponent)\n public panels: QueryList<TabComponent>;\n\n private readonly panelIds: string[] = [];\n\n constructor(private readonly route: ActivatedRoute) {}\n\n public ngAfterContentInit(): void {\n this.panels.forEach((panel) => this.panelIds.push(panel.id));\n\n this.show(this.route.snapshot.fragment);\n }\n\n public show(id: string) {\n const panels: TabComponent[] = this.panels.toArray();\n\n id = id || panels[0].id;\n\n if (0 > this.panelIds.indexOf(id)) {\n id = panels[0].id;\n }\n\n panels.forEach((panel) => panel.selected = id === panel.id);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TabComponent } from './tab.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n TabsComponent,\n TabComponent,\n ],\n exports: [\n TabsComponent,\n TabComponent,\n ]\n})\nexport class TabsModule {}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ccd-activity-banner',\n templateUrl: './activity-banner.component.html',\n styleUrls: ['./activity-banner.component.css']\n})\nexport class ActivityBannerComponent implements OnInit {\n @Input()\n public bannerType: string;\n\n @Input()\n public description: string;\n\n @Input()\n public imageLink: string;\n\n constructor() { }\n\n public ngOnInit() {\n }\n}\n","<div [ngClass]=\"{caseLocked: bannerType === 'editor', someoneViewing: bannerType === 'viewer'}\">\n <div class=\"bannerIcon\"><img alt=\"{{description}}\" class=\"img-responsive\" src=\"{{imageLink}}\" /></div>\n <div class=\"bannerText\">{{description}}</div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ccd-activity-icon',\n templateUrl: './activity-icon.component.html',\n styleUrls: ['./activity-icon.component.css']\n})\nexport class ActivityIconComponent implements OnInit {\n @Input()\n public description: string;\n\n @Input()\n public imageLink: string;\n\n constructor() { }\n\n public ngOnInit() {\n }\n}\n","<div class=\"tooltip\">\n <img alt=\"{{description}}\" class=\"img-responsive\" src=\"{{imageLink}}\" />\n <span class=\"tooltiptext\">{{description}}</span>\n</div>\n","export class ActivityInfo {\n public forename: string;\n public surname: string;\n}\n\nexport class Activity {\n public caseId: string;\n public viewers: ActivityInfo[];\n public editors: ActivityInfo[];\n public unknownViewers: number;\n public unknownEditors: number;\n}\n\nexport enum DisplayMode {\n BANNER,\n ICON\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nexport class HttpError {\n\n constructor() {\n this.timestamp = new Date().toISOString();\n this.error = HttpError.DEFAULT_ERROR;\n this.message = HttpError.DEFAULT_MESSAGE;\n this.status = HttpError.DEFAULT_STATUS;\n this.exception = null;\n this.path = null;\n this.details = null;\n this.callbackErrors = null;\n this.callbackWarnings = null;\n }\n private static readonly DEFAULT_ERROR = 'Unknown error';\n private static readonly DEFAULT_MESSAGE = 'Something unexpected happened, our technical staff have been automatically notified';\n private static readonly DEFAULT_STATUS = 500;\n\n public timestamp: string;\n public status: number;\n public error: string;\n public exception: string;\n public message: string;\n public path: string;\n public details?: any;\n public callbackErrors?: any;\n public callbackWarnings?: any;\n public static from(response: HttpErrorResponse): HttpError {\n const error = new HttpError();\n\n // Check that the HttpErrorResponse contains an \"error\" object before mapping the error properties\n if (!!(response && response.error)) {\n Object.keys(error).forEach(key => {\n error[key] = response.error.hasOwnProperty(key) && response.error[key] ? response.error[key] : error[key];\n });\n }\n\n return error;\n }\n}\n","export interface AccessManagementBasicViewMockModel {\n active?: boolean;\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n accessProcess?: string;\n}\n\nexport interface AccessManagementRequestReviewMockModel {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n}\n\nexport abstract class AbstractAppConfig {\n public abstract load(): Promise<void>;\n public abstract getLoginUrl(): string;\n public abstract getApiUrl(): string;\n public abstract getCaseDataUrl(): string;\n public abstract getDocumentManagementUrl(): string;\n public getDocumentManagementUrlV2(): string {\n return undefined;\n }\n public getDocumentSecureMode(): boolean {\n return undefined;\n }\n public abstract getRemoteDocumentManagementUrl(): string;\n public abstract getHrsUrl(): string;\n public abstract getRemoteHrsUrl(): string;\n public abstract getAnnotationApiUrl(): string;\n public abstract getPostcodeLookupUrl(): string;\n public abstract getOAuth2ClientId(): string;\n public abstract getPaymentsUrl(): string;\n public abstract getPayBulkScanBaseUrl(): string;\n public abstract getCreateOrUpdateDraftsUrl(ctid: string): string;\n public abstract getViewOrDeleteDraftsUrl(did: string): string;\n public abstract getActivityUrl(): string;\n public abstract getActivityNexPollRequestMs(): number;\n public abstract getActivityRetry(): number;\n public abstract getActivityBatchCollectionDelayMs(): number;\n public abstract getActivityMaxRequestPerBatch(): number;\n public abstract getCaseHistoryUrl(caseId: string, eventId: string): string;\n public abstract getPrintServiceUrl(): string;\n /**\n * Dummy version replacing deprecated `getRemotePrintServiceUrl()`, to be removed in next major release\n * @deprecated\n * @returns `undefined`\n */\n public getRemotePrintServiceUrl(): string {\n return undefined;\n }\n public abstract getPaginationPageSize(): number;\n public abstract getBannersUrl(): string;\n public abstract getPrdUrl(): string;\n public abstract getCacheTimeOut(): number;\n public abstract getWorkAllocationApiUrl(): string;\n public getUserInfoApiUrl(): string {\n return undefined;\n }\n public getAccessManagementMode(): boolean {\n return undefined;\n }\n public getAccessManagementBasicViewMock(): AccessManagementBasicViewMockModel {\n return undefined;\n }\n public getAccessManagementRequestReviewMockModel(): AccessManagementRequestReviewMockModel {\n return undefined;\n }\n public getLocationRefApiUrl(): string {\n return undefined;\n }\n public getCamRoleAssignmentsApiUrl(): string {\n return undefined;\n }\n public abstract getRefundsUrl(): string;\n public abstract getPaymentReturnUrl(): string;\n}\n\nexport class CaseEditorConfig {\n public api_url: string;\n public case_data_url: string;\n public document_management_url: string;\n public document_management_url_v2: string;\n public hrs_url: string;\n public document_management_secure_enabled: boolean;\n public login_url: string;\n public oauth2_client_id: string;\n public postcode_lookup_url: string;\n public remote_document_management_url: string;\n public remote_hrs_url: string;\n public annotation_api_url: string;\n public payments_url: string;\n public pay_bulk_scan_url: string;\n public activity_batch_collection_delay_ms: number;\n public activity_next_poll_request_ms: number;\n public activity_retry: number;\n public activity_url: string;\n public activity_max_request_per_batch: number;\n public print_service_url: string;\n /**\n * remote_print_service_url marked as optional since deprecation, ahead of removal in next major release\n * @deprecated\n */\n public remote_print_service_url?: string;\n public pagination_page_size: number;\n public prd_url: string;\n public cache_time_out: number;\n public work_allocation_api_url: string;\n public user_info_api_url: string;\n public access_management_mode?: boolean;\n public access_management_basic_view_mock?: {\n active?: boolean,\n basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n },\n accessProcess?: string\n };\n public access_management_request_review_mock?: {\n active?: boolean;\n details?: {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n };\n accessProcess?: string;\n };\n public location_ref_api_url?: string;\n public cam_role_assignments_api_url?: string;\n public refunds_url: string;\n public payment_return_url: string;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { AbstractAppConfig } from '../../../app.config';\n\n/**\n * `Oauth2Service` and `AuthService` cannot be merged as it creates a cyclic dependency on `AuthService` through `HttpErrorService`.\n */\n@Injectable()\nexport class AuthService {\n\n private static readonly PATH_OAUTH2_REDIRECT = '/oauth2redirect';\n\n constructor(private readonly appConfig: AbstractAppConfig,\n @Inject(DOCUMENT) private readonly document: any) {}\n\n public signIn(): void {\n const loginUrl = this.appConfig.getLoginUrl();\n const clientId = this.appConfig.getOAuth2ClientId();\n const redirectUri = encodeURIComponent(this.redirectUri());\n\n this.document.location.href = `${loginUrl}?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}`;\n }\n\n public redirectUri(): string {\n return this.document.location.origin + AuthService.PATH_OAUTH2_REDIRECT;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { AuthService } from '../auth/auth.service';\n\n\n@Injectable()\nexport class HttpErrorService {\n\n constructor(private readonly authService: AuthService) {}\n\n private static readonly CONTENT_TYPE = 'Content-Type';\n private static readonly JSON = 'json';\n\n private error: HttpError;\n public static convertToHttpError(error: HttpErrorResponse | any): HttpError {\n if (error instanceof HttpError) {\n return error;\n }\n let httpError = new HttpError();\n if (error instanceof HttpErrorResponse) {\n if (error.headers\n && error.headers.get(HttpErrorService.CONTENT_TYPE)\n && error.headers.get(HttpErrorService.CONTENT_TYPE).indexOf(HttpErrorService.JSON) !== -1) {\n try {\n httpError = HttpError.from(error);\n } catch (e) {\n console.error(e, e.message);\n }\n }\n if (!httpError.status) {\n httpError.status = error.status;\n }\n } else if (error) {\n if (error.message) {\n httpError.message = error.message;\n }\n if (error.status) {\n httpError.status = error.status;\n }\n }\n return httpError;\n }\n\n public setError(error: HttpError) {\n this.error = error;\n }\n\n public removeError(): HttpError {\n const error = this.error;\n this.error = null;\n return error;\n }\n\n public handle(error: HttpErrorResponse | any, redirectIfNotAuthorised = true): Observable<never> {\n const httpError: HttpError = HttpErrorService.convertToHttpError(error);\n if (redirectIfNotAuthorised && (httpError.status === 401 || httpError.status === 403)) {\n this.authService.signIn();\n }\n return throwError(httpError);\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService } from './http-error.service';\n\n@Injectable()\nexport class HttpService {\n\n private static readonly HEADER_ACCEPT = 'Accept';\n private static readonly HEADER_CONTENT_TYPE = 'Content-Type';\n\n constructor(\n private readonly httpclient: HttpClient,\n private readonly httpErrorService: HttpErrorService\n ) {}\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n\n public get(\n url: string,\n options?: OptionsType,\n redirectIfNotAuthorised = true,\n errorHandler?: (error: HttpErrorResponse) => HttpError): Observable<any> {\n return this.httpclient\n .get(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n let error: HttpErrorResponse | HttpError = res;\n if (typeof errorHandler === 'function') {\n error = errorHandler(res);\n }\n return this.httpErrorService.handle(error, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public post(url: string, body: any, options?: OptionsType, redirectIfNotAuthorised = true): Observable<any> {\n return this.httpclient\n .post(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res, redirectIfNotAuthorised);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param body Body for post\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public put(url: string, body: any, options?: OptionsType): Observable<any> {\n return this.httpclient\n .put(url, body, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n /**\n *\n * @param url Url resolved using UrlResolverService\n * @param options OptionsType\n * @returns Observable<any> return value\n * @see UrlResolverService\n */\n public delete(url: string, options?: OptionsType): Observable<any> {\n return this.httpclient\n .delete(url, this.setDefaultValue(options))\n .pipe(\n catchError((res: HttpErrorResponse) => {\n return this.httpErrorService.handle(res);\n })\n );\n }\n\n public setDefaultValue(options?: OptionsType): OptionsType {\n options = options || {observe: 'body'};\n options.withCredentials = true;\n\n if (!options.headers) {\n options.headers = new HttpHeaders()\n .set(HttpService.HEADER_ACCEPT, 'application/json')\n .set(HttpService.HEADER_CONTENT_TYPE, 'application/json');\n }\n return options;\n }\n}\n\nexport interface OptionsType {\n headers?: HttpHeaders;\n observe: 'body';\n params?: HttpParams | { [param: string]: string | string[]; };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class SessionStorageService {\n\n /**\n * Get an item from the session storage.\n */\n public getItem(key: string): string {\n return sessionStorage.getItem(key);\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 from 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 { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { HttpErrorService, HttpService, OptionsType } from '../http';\nimport { SessionStorageService } from '../session';\n\n// @dynamic\n@Injectable()\nexport class ActivityService {\n public static get ACTIVITY_VIEW() { return 'view'; }\n public static get ACTIVITY_EDIT() { return 'edit'; }\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly sessionStorageService: SessionStorageService\n ) {}\n\n public get isEnabled(): boolean {\n return this.activityUrl() && this.userAuthorised;\n }\n public static readonly DUMMY_CASE_REFERENCE = '0';\n\n private userAuthorised: boolean = undefined;\n\n private static handleHttpError(response: HttpErrorResponse): HttpError {\n const error: HttpError = HttpErrorService.convertToHttpError(response);\n if (response.status && response.status !== error.status) {\n error.status = response.status;\n }\n return error;\n }\n\n public getOptions(): OptionsType {\n const userDetails = JSON.parse(this.sessionStorageService.getItem('userDetails'));\n const headers = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', userDetails.token);\n const options: OptionsType = {\n headers,\n withCredentials: true,\n observe: 'body',\n };\n return options;\n }\n\n public getActivities(...caseId: string[]): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId.join(',')}/activity`;\n return this.http\n .get(url, options, false, ActivityService.handleHttpError)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public postActivity(caseId: string, activity: string): Observable<Activity[]> {\n try {\n const options = this.getOptions();\n const url = this.activityUrl() + `/cases/${caseId}/activity`;\n const body = { activity };\n return this.http\n .post(url, body, options, false)\n .pipe(\n map(response => response)\n );\n } catch (error) {\n console.log('user may not be authenticated.' + error);\n }\n }\n\n public verifyUserIsAuthorized(): void {\n if (this.sessionStorageService.getItem('userDetails') === undefined) {\n return;\n }\n if (this.activityUrl() && this.userAuthorised === undefined) {\n this.getActivities(ActivityService.DUMMY_CASE_REFERENCE).subscribe(\n () => this.userAuthorised = true,\n error => {\n if ([401, 403].indexOf(error.status) > -1) {\n this.userAuthorised = false;\n } else {\n this.userAuthorised = true;\n }\n }\n );\n }\n }\n\n private activityUrl(): string {\n return this.appConfig.getActivityUrl();\n }\n\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport polling, { IOptions } from 'rx-polling';\nimport { EMPTY, Observable, Subject, Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Activity } from '../../domain/activity/activity.model';\nimport { ActivityService } from './activity.service';\n\n// @dynamic\n@Injectable()\nexport class ActivityPollingService {\n\n private readonly pendingRequests = new Map<string, Subject<Activity>>();\n private currentTimeoutHandle: any;\n private pollActivitiesSubscription: Subscription;\n private readonly pollConfig: IOptions;\n private readonly batchCollectionDelayMs: number;\n private readonly maxRequestsPerBatch: number;\n\n constructor(private readonly activityService: ActivityService, private readonly ngZone: NgZone, private readonly config: AbstractAppConfig) {\n this.pollConfig = {\n interval: config.getActivityNexPollRequestMs(),\n attempts: config.getActivityRetry(),\n backgroundPolling: true\n };\n this.batchCollectionDelayMs = config.getActivityBatchCollectionDelayMs();\n this.maxRequestsPerBatch = config.getActivityMaxRequestPerBatch();\n }\n\n public get isEnabled(): boolean {\n return this.activityService.isEnabled;\n }\n\n public subscribeToActivity(caseId: string, done: (activity: Activity) => void): Subject<Activity> {\n if (!this.isEnabled) {\n return new Subject<Activity>();\n }\n\n let subject = this.pendingRequests.get(caseId);\n if (subject) {\n subject.subscribe(done);\n } else {\n subject = new Subject<Activity>();\n subject.subscribe(done);\n this.pendingRequests.set(caseId, subject);\n }\n if (this.pendingRequests.size === 1) {\n this.ngZone.runOutsideAngular(() => {\n this.currentTimeoutHandle = setTimeout(\n () => this.ngZone.run(() => {\n // console.log('timeout: flushing requests')\n this.flushRequests();\n }),\n this.batchCollectionDelayMs);\n });\n }\n\n if (this.pendingRequests.size >= this.maxRequestsPerBatch) {\n // console.log('max pending hit: flushing requests');\n this.flushRequests();\n }\n return subject;\n }\n\n public stopPolling() {\n if (this.pollActivitiesSubscription) {\n this.pollActivitiesSubscription.unsubscribe();\n }\n }\n\n public flushRequests(): void {\n if (this.currentTimeoutHandle) {\n clearTimeout(this.currentTimeoutHandle);\n this.currentTimeoutHandle = undefined;\n }\n\n const requests = new Map(this.pendingRequests);\n this.pendingRequests.clear();\n this.performBatchRequest(requests);\n }\n\n public pollActivities(...caseIds: string[]): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n return polling(this.activityService.getActivities(...caseIds), this.pollConfig);\n }\n\n public postViewActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_VIEW);\n }\n\n public postEditActivity(caseId: string): Observable<Activity[]> {\n return this.postActivity(caseId, ActivityService.ACTIVITY_EDIT);\n }\n\n protected performBatchRequest(requests: Map<string, Subject<Activity>>): void {\n const caseIds = Array.from(requests.keys()).join();\n // console.log('issuing batch request for cases: ' + caseIds);\n this.ngZone.runOutsideAngular( () => {\n // run polling outside angular zone so it does not trigger change detection\n this.pollActivitiesSubscription = this.pollActivities(caseIds).subscribe(\n // process activity inside zone so it triggers change detection for activity.component.ts\n (activities: Activity[]) => this.ngZone.run( () => {\n activities.forEach((activity) => {\n // console.log('pushing activity: ' + activity.caseId);\n requests.get(activity.caseId).next(activity);\n });\n },\n (err) => {\n console.log('error: ' + err);\n Array.from(requests.values()).forEach((subject) => subject.error(err));\n }\n )\n );\n });\n }\n\n private postActivity(caseId: string, activityType: string): Observable<Activity[]> {\n if (!this.isEnabled) {\n return EMPTY;\n }\n\n const pollingConfig = {\n ...this.pollConfig,\n interval: 5000 // inline with CCD Backend\n };\n\n return polling(this.activityService.postActivity(caseId, activityType), pollingConfig);\n }\n}\n","<div class=\"activityComponent\" *ngIf=\"isActivityEnabled()\">\n <div *ngIf=\"displayMode === dspMode.ICON && editorsPresent()\" [class.activityEditorsAndViewersIcons]=\"viewersPresent()\" [class.activityEditorsIcon]=\"!viewersPresent()\">\n <ccd-activity-icon imageLink=\"/img/editor.png\" [description]=\"editorsText\"></ccd-activity-icon>\n </div>\n <div *ngIf=\"displayMode === dspMode.ICON && viewersPresent()\" class=\"activityViewersIcon\">\n <ccd-activity-icon imageLink=\"/img/viewer.png\" [description]=\"viewersText\"></ccd-activity-icon>\n </div>\n <div *ngIf=\"displayMode === dspMode.BANNER && editorsPresent()\">\n <ccd-activity-banner imageLink=\"/img/editorBanner.png\" [description]=\"editorsText\" bannerType=\"editor\">\n </ccd-activity-banner>\n </div>\n <div *ngIf=\"displayMode === dspMode.BANNER && viewersPresent()\">\n <ccd-activity-banner imageLink=\"/img/viewerBanner.png\" [description]=\"viewersText\" bannerType=\"viewer\">\n </ccd-activity-banner>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Activity, ActivityInfo, DisplayMode } from '../../domain/activity/activity.model';\nimport { ActivityPollingService } from '../../services/activity/activity.polling.service';\n\n@Component({\n selector: 'ccd-activity',\n templateUrl: './activity.component.html',\n styleUrls: ['./activity.component.css']\n})\nexport class ActivityComponent implements OnInit, OnDestroy {\n public activity: Activity;\n public dspMode = DisplayMode;\n\n public viewersText: string;\n public editorsText: string;\n\n public subscription: Subject<Activity>;\n\n @Input()\n public caseId: string;\n\n @Input()\n public displayMode: DisplayMode;\n private readonly VIEWERS_PREFIX = '';\n private readonly VIEWERS_SUFFIX = 'viewing this case';\n private readonly EDITORS_PREFIX = 'This case is being updated by ';\n private readonly EDITORS_SUFFIX = '';\n\n constructor(private readonly activityPollingService: ActivityPollingService) {}\n\n public ngOnInit() {\n this.activity = new Activity();\n this.activity.caseId = this.caseId;\n this.activity.editors = [];\n this.activity.unknownEditors = 0;\n this.activity.viewers = [];\n this.activity.unknownViewers = 0;\n this.viewersText = '';\n this.editorsText = '';\n this.subscription = this.activityPollingService.subscribeToActivity(this.caseId, newActivity => this.onActivityChange(newActivity));\n }\n\n public onActivityChange(newActivity: Activity) {\n this.activity = newActivity;\n this.viewersText = this.generateDescription(this.VIEWERS_PREFIX,\n this.VIEWERS_SUFFIX,\n this.activity.viewers,\n this.activity.unknownViewers);\n this.editorsText = this.generateDescription(this.EDITORS_PREFIX,\n this.EDITORS_SUFFIX,\n this.activity.editors,\n this.activity.unknownEditors);\n }\n\n public isActivityEnabled() {\n return this.activityPollingService.isEnabled;\n }\n\n public isActiveCase() {\n return this.activity.editors.length || this.activity.viewers.length || this.activity.unknownEditors || this.activity.unknownViewers;\n }\n\n public viewersPresent(): boolean {\n return (this.activity.viewers.length > 0 || this.activity.unknownViewers > 0);\n }\n\n public editorsPresent(): boolean {\n return (this.activity.editors.length > 0 || this.activity.unknownEditors > 0);\n }\n\n public ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.complete();\n this.subscription.unsubscribe();\n }\n this.activityPollingService.stopPolling();\n }\n\n public generateDescription(prefix: string, suffix: string, namesArray: ActivityInfo[], unknownCount) {\n let resultText = prefix;\n resultText += namesArray.map(activityInfo => activityInfo.forename + ' ' + activityInfo.surname).join(', ');\n if (unknownCount > 0) {\n resultText += (namesArray.length > 0 ? ' and ' + unknownCount + ' other' : unknownCount + ' user');\n resultText += ( unknownCount > 1 ? 's' : '');\n } else {\n resultText = this.replaceLastCommaWithAnd(resultText);\n }\n if (suffix.length > 0) {\n if (namesArray.length + unknownCount > 1) {\n resultText += ' are ' + suffix;\n } else {\n resultText += ' is ' + suffix;\n }\n }\n return resultText;\n }\n\n private replaceLastCommaWithAnd(str: string): string {\n return str.trim().replace(/,([^,]*)$/, ' and $1').split(' ').join(' ');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ActivityPollingService } from '../../services/activity/activity.polling.service';\nimport { ActivityService } from '../../services/activity/activity.service';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { ActivityBannerComponent } from './activity-banner';\nimport { ActivityIconComponent } from './activity-icon';\nimport { ActivityComponent } from './activity.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n ActivityComponent,\n ActivityBannerComponent,\n ActivityIconComponent,\n ],\n exports: [\n ActivityComponent,\n ActivityBannerComponent,\n ActivityIconComponent,\n ],\n providers: [\n ActivityService,\n ActivityPollingService,\n SessionStorageService\n ]\n})\nexport class ActivityModule {}\n","import { Injectable } from '@angular/core';\nimport type { ConditionalShowFormDirective } from '../conditional-show-form.directive';\n\n@Injectable()\nexport class ConditionalShowRegistrarService {\n public registeredDirectives: ConditionalShowFormDirective[] = [];\n\n public register(newDirective: ConditionalShowFormDirective): void {\n this.registeredDirectives.push(newDirective);\n }\n\n public reset(): void {\n this.registeredDirectives = [];\n }\n}\n","import { ElementRef, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n/** Keeps track of initially hidden fields that toggle to show on the page (parent page).\n * Used to decide whether to redisplay the grey bar when returning to the page during\n * navigation between pages.\n */\n@Injectable()\nexport class GreyBarService {\n\n private fieldsToggledToShow: string[] = [];\n private readonly renderer: Renderer2;\n\n constructor(rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n public showGreyBar(field: CaseField, el: ElementRef) {\n if (!field.isCollection()) {\n this.addGreyBar(el);\n }\n }\n\n public removeGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.removeClass(divSelector, 'show-condition-grey-bar');\n }\n }\n\n public addToggledToShow(fieldId: string) {\n this.fieldsToggledToShow.push(fieldId);\n }\n\n public removeToggledToShow(fieldId: string) {\n this.fieldsToggledToShow = this.fieldsToggledToShow.filter(id => id !== fieldId);\n }\n\n public wasToggledToShow(fieldId: string): boolean {\n return this.fieldsToggledToShow.find(id => id === fieldId) !== undefined;\n }\n\n public reset() {\n this.fieldsToggledToShow = [];\n }\n\n private addGreyBar(el: ElementRef) {\n const divSelector = el.nativeElement.querySelector('div');\n if (divSelector) {\n this.renderer.addClass(divSelector, 'show-condition-grey-bar');\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\n/*\nTranslate a date time format string from the Java format provided by CCD to the format supported by Angular formatDate()\nVery simple translator that maps unsupported chars to the nearest equivalent.\nIf there is no equivalent puts ***x*** into the output where x is the unsupported character\n\nJava format\nG era text AD; Anno Domini; A\n u year year 2004; 04\n y year-of-era year 2004; 04\n D day-of-year number 189\n M/L month-of-year number/text 7; 07; Jul; July; J\n d day-of-month number 10\n\n Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter\n Y week-based-year year 1996; 96\n w week-of-week-based-year number 27\n W week-of-month number 4\n E day-of-week text Tue; Tuesday; T\n e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T\n F week-of-month number 3\n\n a am-pm-of-day text PM\n h clock-hour-of-am-pm (1-12) number 12\n K hour-of-am-pm (0-11) number 0\n k clock-hour-of-am-pm (1-24) number 0\n\n H hour-of-day (0-23) number 0\n m minute-of-hour number 30\n s second-of-minute number 55\n S fraction-of-second fraction 978\n A milli-of-day number 1234\n n nano-of-second number 987654321\n N nano-of-day number 1234000000\n\n V time-zone ID zone-id America/Los_Angeles; Z; -08:30\n z time-zone name zone-name Pacific Standard Time; PST\n O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;\n X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;\n x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;\n Z zone-offset offset-Z +0000; -0800; -08:00;\n\n p pad next pad modifier 1\n\n ' escape for text delimiter\n '' single quote literal '\n [ optional section start\n ] optional section end\n # reserved for future use\n { reserved for future use\n } reserved for future use\n\n Angular dateFormat characters\n Era\tG, GG & GGG\tAbbreviated\tAD\nGGGG\tWide\tAnno Domini\nGGGGG\tNarrow\tA\nYear\ty\tNumeric: minimum digits\t2, 20, 201, 2017, 20173\nyy\tNumeric: 2 digits + zero padded\t02, 20, 01, 17, 73\nyyy\tNumeric: 3 digits + zero padded\t002, 020, 201, 2017, 20173\nyyyy\tNumeric: 4 digits or more + zero padded\t0002, 0020, 0201, 2017, 20173\nMonth\tM\tNumeric: 1 digit\t9, 12\nMM\tNumeric: 2 digits + zero padded\t09, 12\nMMM\tAbbreviated\tSep\nMMMM\tWide\tSeptember\nMMMMM\tNarrow\tS\nMonth standalone\tL\tNumeric: 1 digit\t9, 12\nLL\tNumeric: 2 digits + zero padded\t09, 12\nLLL\tAbbreviated\tSep\nLLLL\tWide\tSeptember\nLLLLL\tNarrow\tS\nWeek of year\tw\tNumeric: minimum digits\t1... 53\nww\tNumeric: 2 digits + zero padded\t01... 53\nWeek of month\tW\tNumeric: 1 digit\t1... 5\nDay of month\td\tNumeric: minimum digits\t1\ndd\tNumeric: 2 digits + zero padded\t01\nWeek day\tE, EE & EEE\tAbbreviated\tTue\nEEEE\tWide\tTuesday\nEEEEE\tNarrow\tT\nEEEEEE\tShort\tTu\nPeriod\ta, aa & aaa\tAbbreviated\tam/pm or AM/PM\naaaa\tWide (fallback to a when missing)\tante meridiem/post meridiem\naaaaa\tNarrow\ta/p\nPeriod*\tB, BB & BBB\tAbbreviated\tmid.\nBBBB\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nBBBBB\tNarrow\tmd\nPeriod standalone*\tb, bb & bbb\tAbbreviated\tmid.\nbbbb\tWide\tam, pm, midnight, noon, morning, afternoon, evening, night\nbbbbb\tNarrow\tmd\nHour 1-12\th\tNumeric: minimum digits\t1, 12\nhh\tNumeric: 2 digits + zero padded\t01, 12\nHour 0-23\tH\tNumeric: minimum digits\t0, 23\nHH\tNumeric: 2 digits + zero padded\t00, 23\nMinute\tm\tNumeric: minimum digits\t8, 59\nmm\tNumeric: 2 digits + zero padded\t08, 59\nSecond\ts\tNumeric: minimum digits\t0... 59\nss\tNumeric: 2 digits + zero padded\t00... 59\nFractional seconds\tS\tNumeric: 1 digit\t0... 9\nSS\tNumeric: 2 digits + zero padded\t00... 99\nSSS\tNumeric: 3 digits + zero padded (= milliseconds)\t000... 999\nZone\tz, zz & zzz\tShort specific non location format (fallback to O)\tGMT-8\nzzzz\tLong specific non location format (fallback to OOOO)\tGMT-08:00\nZ, ZZ & ZZZ\tISO8601 basic format\t-0800\nZZZZ\tLong localized GMT format\tGMT-8:00\nZZZZZ\tISO8601 extended format + Z indicator for offset 0 (= XXXXX)\t-08:00\nO, OO & OOO\tShort localized GMT format\tGMT-8\nOOOO\tLong localized GMT format\tGMT-08:00\n */\n\n@Injectable()\nexport class FormatTranslatorService {\n public translate(javaFormat: string): string {\n const result = [];\n let prev = '\\0';\n let inQuote = false;\n\n const maybePush = <T>(target: T[], obj: T, flag: boolean) => {\n if (!flag) {\n target.push(obj);\n }\n };\n for (const c of javaFormat) {\n switch (c) {\n case '\\'':\n if (prev === '\\'') {\n // literal single quote - ignore\n inQuote = false;\n } else {\n inQuote = !inQuote;\n }\n break;\n // Due to formatting constraints on the webapp, all 'd' characters should be replaced with 'D' (for Moment library)\n // This is because we want the date, not the day (this format will need to be converted back)\n case 'd':\n maybePush(result, 'D', inQuote);\n break;\n // moment library defines year as capital y\n case 'y':\n maybePush(result, 'Y', inQuote);\n break;\n case 'e':\n case 'c':\n maybePush(result, 'E', inQuote); // no lower case E\n break;\n case 'F':\n maybePush(result, 'W', inQuote);\n break;\n case 'K':\n maybePush(result, 'H', inQuote);\n break;\n case 'k':\n maybePush(result, 'h', inQuote);\n break;\n // commented out A change to '***' due to use in moment library for AM/PM\n // added 'a' specification to stop discrepancy in am/AM pm/PM formatting\n case 'a':\n maybePush(result, 'A', inQuote);\n break;\n case 'n':\n case 'N':\n maybePush(result, '***' + c + '***', inQuote); // No way to support A - millisec of day, n - nano of second, N - nano of Day\n break;\n case 'V':\n case 'O':\n maybePush(result, 'z', inQuote);\n break;\n case 'x':\n case 'X':\n maybePush(result, 'Z', inQuote);\n break;\n default:\n maybePush(result, c, inQuote);\n }\n prev = c;\n }\n return result.join('');\n }\n\n public showOnlyDates(dateFormat: string): string {\n // replace 'd' character with 'D' for the moment library\n // This ensures only dates allowed\n while (dateFormat.includes('d')) {\n dateFormat = dateFormat.replace('d', 'D');\n }\n while (dateFormat.includes('y')) {\n dateFormat = dateFormat.replace('y', 'Y');\n }\n return dateFormat;\n }\n\n public removeTime(dateFormat: string): string {\n // remove hours irrelevant of whether 12 or 24 hour clock\n while (dateFormat.includes('H') || dateFormat.includes('h')) {\n dateFormat = dateFormat.replace('H', '');\n dateFormat = dateFormat.replace('h', '');\n }\n // remove minutes\n while (dateFormat.includes('m')) {\n dateFormat = dateFormat.replace('m', '');\n }\n // remove seconds (s) and micro seconds (S)\n while (dateFormat.includes('S') || dateFormat.includes('s')) {\n dateFormat = dateFormat.replace('S', '');\n dateFormat = dateFormat.replace('s', '');\n }\n // because there is time removal algorithm can make reasonable assumption to remove colons\n while (dateFormat.includes(':')) {\n dateFormat = dateFormat.replace(':', '');\n }\n return dateFormat.trim();\n }\n\n public hasDate(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') >= 0 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public is24Hour(value: string): boolean {\n return this.translate(value).length &&\n value.indexOf('H') >= 0;\n }\n\n public hasNoDay(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') >= 0 && value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasNoDayAndMonth(value: string): boolean {\n return this.translate(value).length &&\n value.toLowerCase().indexOf('d') === -1 &&\n value.indexOf('M') === -1 &&\n value.toLowerCase().indexOf('y') >= 0;\n }\n\n public hasHours(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('h') >= 0 && value.indexOf('m') === -1;\n }\n\n public hasMinutes(value: string): boolean {\n return this.translate(value).length && value.indexOf('m') >= 0 && value.toLowerCase().indexOf('h') >= 0;\n }\n\n public hasSeconds(value: string): boolean {\n return this.translate(value).length && value.toLowerCase().indexOf('s') >= 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';\n\n@Pipe({\n name: 'ccdDate'\n})\nexport class DatePipe implements PipeTransform {\n\n private static readonly DATE_FORMAT_REGEXP =\n new RegExp('^(\\\\d{4})-?(\\\\d\\\\d)-?(\\\\d\\\\d)(?:T(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?::?(\\\\d\\\\d)(?:\\\\.(\\\\d+))?)?)?(Z|([+-])(\\\\d\\\\d):?(\\\\d\\\\d))?|Z)?$');\n // 1 2 3 4 5 6 7 8 9 10 11\n private static readonly MONTHS = [\n ['Jan'], ['Feb'], ['Mar'], ['Apr'], ['May'], ['Jun'], ['Jul'], ['Aug'], ['Sep'], ['Oct'], ['Nov'], ['Dec'],\n ];\n\n /**\n * constructor to allow format translator to be injected\n * @param formatTrans format translator\n */\n constructor(private readonly formatTrans: FormatTranslatorService) {\n }\n\n public transform(value: string, zone?: string, format?: string): string {\n let resultDate = null;\n const ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n if (value) {\n // included to avoid editing the hour twice on second pass through\n // this occurs on case details when datepipe is applied twice\n if (!value.includes('T')) {\n zone = 'utc';\n }\n const match: RegExpMatchArray = value.match(DatePipe.DATE_FORMAT_REGEXP);\n // Make sure we actually have a match.\n if (match) {\n let offsetDate = null;\n const date = this.getDate(match);\n if (zone === 'local') {\n offsetDate = this.getOffsetDate(date);\n } else {\n offsetDate = this.getDate(match);\n }\n // 'short' format is meaningful to formatDate, but not the same meaning as in the unit tests\n if (this.formatTrans && format && format !== 'short') {\n // support for java style formatting strings for dates\n format = this.translateDateFormat(format);\n resultDate = moment(date).format(format);\n } else {\n // RDM-1149 changed the pipe logic so that it doesn't add an hour to 'Summer Time' dates on DateTime field type\n resultDate = `${offsetDate.getDate()} ${DatePipe.MONTHS[offsetDate.getMonth()]} ${offsetDate.getFullYear()}`;\n if (match[4] && match[5] && match[6] && format !== 'short') {\n resultDate += ', ';\n resultDate += this.getHour(offsetDate.getHours().toString()) + ':';\n resultDate += this.pad(offsetDate.getMinutes()) + ':';\n resultDate += this.pad(offsetDate.getSeconds()) + ' ';\n resultDate += (this.toInt(offsetDate.getHours().toString()) >= 12) ? 'PM' : 'AM';\n }\n }\n } else {\n // EUI-2667. See if what we've been given is actually a formatted date that\n // we could attempt to do something with.\n const parsedDate: number = Date.parse(value);\n // We successfully parsed it so let's use it.\n if (!isNaN(parsedDate)) {\n const d: Date = new Date(parsedDate);\n // If what we received didn't include time, don't include it here either.\n if (value.indexOf(':') < 0) {\n const shortDate: string = d.toLocaleDateString('en-GB');\n const shortISO: string = shortDate.split('/').reverse().join('-');\n return this.transform(shortISO, zone, format);\n }\n // If it did include time, we want a full ISO string.\n const thisMoment = moment(d).format(ISO_FORMAT);\n return this.transform(thisMoment, zone, format);\n }\n }\n }\n return resultDate;\n }\n\n private translateDateFormat(format: string) {\n if (this.formatTrans) {\n return this.formatTrans.translate(format);\n } else {\n return format;\n }\n }\n\n private getOffsetDate(date: Date): Date {\n const localOffset = - date.getTimezoneOffset() / 60;\n return new Date(date.getTime() + localOffset * 3600 * 1000);\n }\n\n private getDate(match: RegExpMatchArray): Date {\n const year = this.toInt(match[1]);\n const month = this.toInt(match[2]) - 1;\n const day = this.toInt(match[3]);\n let resultDate;\n if (match[4] && match[5] && match[6]) {\n const hour = this.toInt(match[4]);\n const minutes = this.toInt(match[5]);\n const seconds = this.toInt(match[6]);\n resultDate = new Date(year, month, day, hour, minutes, seconds, 0);\n } else {\n resultDate = new Date(year, month, day);\n }\n return resultDate;\n }\n\n private getHour(hourStr: string): number {\n let hourNum = this.toInt(hourStr);\n if (hourNum > 12) {\n hourNum = hourNum - 12;\n } else if (hourNum === 0) {\n hourNum = 12;\n }\n return hourNum;\n }\n\n private toInt(str: string): number {\n return parseInt(str, 10);\n }\n\n private pad(num: any, padNum = 2): string {\n const val = num !== undefined ? num.toString() : '';\n return val.length >= padNum ? val : new Array(padNum - val.length + 1).join('0') + val;\n }\n}\n","import { Orderable } from '../../../domain/order/orderable.model';\nimport { ComplexFieldOverride } from './wizard-page-field-complex-override.model';\n\nexport class WizardPageField implements Orderable {\n public case_field_id: string;\n public order?: number;\n public page_column_no?: number;\n public complex_field_overrides?: ComplexFieldOverride[];\n}\n","import { Orderable } from '../order';\n\nexport class FixedListItem implements Orderable {\n public code: string;\n public label: string;\n public order?: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from './case-field.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FixedListItem } from './fixed-list-item.model';\n\n// @dynamic\nexport class FieldType {\n public id: string;\n public type: FieldTypeEnum;\n public min?: number | Date;\n public max?: number | Date;\n public regular_expression?: string;\n\n @Type(() => FixedListItem)\n public fixed_list_items?: FixedListItem[];\n\n @Type(() => CaseField)\n public complex_fields?: CaseField[];\n\n @Type(() => FieldType)\n public collection_field_type?: FieldType;\n }\n","import { Expose, Type } from 'class-transformer';\nimport * as _ from 'underscore';\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { FieldTypeEnum } from './field-type-enum.model';\nimport { FieldType } from './field-type.model';\n\n// @dynamic\nexport class CaseField implements Orderable {\n public id: string;\n public hidden: boolean;\n public hiddenCannotChange: boolean;\n public label: string;\n public order?: number;\n\n @Type(() => FieldType)\n public field_type: FieldType;\n\n public hint_text?: string;\n public security_label?: string;\n public display_context: string;\n public display_context_parameter?: string;\n public month_format?: string;\n public show_condition?: string;\n public show_summary_change_option?: boolean;\n public show_summary_content_option?: number;\n public acls?: AccessControlList[];\n public metadata?: boolean;\n public formatted_value?: any;\n public retain_hidden_value: boolean;\n\n @Type(() => WizardPageField)\n public wizardProps?: WizardPageField;\n\n public _value: any;\n public _list_items: any = [];\n\n @Expose()\n public get value(): any {\n if (this.isDynamic()) {\n return this._value && this._value.value ? this._value.value.code : this._value;\n } else {\n return this._value;\n }\n }\n\n public set value(value: any) {\n if (this.isDynamic()) {\n if (value && value instanceof Object && value.list_items) {\n this._list_items = value.list_items;\n } else if (!this._list_items || this._list_items.length === 0) {\n // Extract the list items from the current value if that's the only place they exist.\n this._list_items = this.list_items;\n if (!value || !value.value) {\n value = null;\n }\n }\n }\n this._value = value;\n }\n\n @Expose()\n public get list_items(): any {\n if (this.isDynamic()) {\n return this._value && this._value.list_items ? this._value.list_items : this._list_items;\n } else {\n return this.field_type.fixed_list_items;\n }\n }\n\n public set list_items(items: any) {\n this._list_items = items;\n }\n\n @Expose()\n public get dateTimeEntryFormat(): string {\n if (this.isComplexDisplay()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEENTRY');\n }\n return null;\n }\n\n @Expose()\n public get dateTimeDisplayFormat(): string {\n if (this.isComplexEntry()) {\n return null;\n }\n if (this.display_context_parameter) {\n return this.extractBracketValue(this.display_context_parameter, '#DATETIMEDISPLAY');\n }\n return null;\n }\n\n @Expose()\n public isComplexDisplay() {\n return (this.isComplex() || this.isCollection()) && this.isReadonly();\n }\n\n @Expose()\n public isComplexEntry() {\n return (this.isComplex() || this.isCollection()) && (this.isOptional() || this.isMandatory());\n }\n\n @Expose()\n public isReadonly() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'READONLY';\n }\n\n @Expose()\n public isOptional() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n @Expose()\n public isMandatory() {\n return !_.isEmpty(this.display_context)\n && this.display_context.toUpperCase() === 'MANDATORY';\n }\n\n @Expose()\n public isCollection(): boolean {\n return this.field_type && this.field_type.type === 'Collection';\n }\n\n @Expose()\n public isComplex(): boolean {\n return this.field_type && this.field_type.type === 'Complex';\n }\n\n @Expose()\n public isDynamic(): boolean {\n const dynamicFieldTypes: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n if (!this.field_type) {\n return false;\n }\n\n return dynamicFieldTypes.some(t => t === this.field_type.type);\n }\n\n @Expose()\n public isCaseLink(): boolean {\n return this.isComplex()\n && this.field_type.id === 'CaseLink'\n && this.field_type.complex_fields.some(cf => cf.id === 'CaseReference');\n }\n public extractBracketValue(fmt: string, paramName: string, leftBracket= '(', rightBracket= ')' ): string {\n fmt = fmt.split(',')\n .find(a => a.trim().startsWith(paramName));\n if (fmt) {\n const s = fmt.indexOf(leftBracket) + 1;\n const e = fmt.indexOf(rightBracket, s);\n if (e > s && s >= 0) {\n return fmt.substr(s, (e - s));\n }\n }\n return null;\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { DatePipe } from '../../components/palette/utils/date.pipe';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseTab } from '../../domain/case-view/case-tab.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldType } from '../../domain/definition/field-type.model';\nimport { FixedListItem } from '../../domain/definition/fixed-list-item.model';\nimport { Predicate } from '../../domain/predicate.model';\nimport { FormatTranslatorService } from '../case-fields/format-translator.service';\n\n// @dynamic\n@Injectable()\nexport class FieldsUtils {\n // EUI-4244. 3 dashes instead of 1 to make this less likely to clash with a real field.\n public static readonly LABEL_SUFFIX = '---LABEL';\n // Handling of Dynamic Lists in Complex Types\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COLLECTION = 'Collection';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_COMPLEX = 'Complex';\n public static readonly SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE: FieldTypeEnum[] = ['DynamicList', 'DynamicRadioList'];\n\n private static readonly currencyPipe: CurrencyPipe = new CurrencyPipe('en-GB');\n private static readonly datePipe: DatePipe = new DatePipe(new FormatTranslatorService());\n\n public static convertToCaseField(obj: any): CaseField {\n if (!(obj instanceof CaseField)) {\n return plainToClassFromExist(new CaseField(), obj);\n }\n return obj;\n }\n\n public static toValuesMap(caseFields: CaseField[]): any {\n const valueMap = {};\n caseFields.forEach(field => {\n valueMap[field.id] = FieldsUtils.prepareValue(field);\n });\n return valueMap;\n }\n\n public static getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n public static isObject(elem: any): boolean {\n return typeof elem === 'object' && elem !== null;\n }\n\n public static isNonEmptyObject(elem: any): boolean {\n return this.isObject(elem) && Object.keys(elem).length !== 0;\n }\n\n public static isArray(elem: any): boolean {\n return Array.isArray(elem);\n }\n\n public static areCollectionValuesSimpleFields(fieldValue: any[]): boolean {\n return !this.isObject(fieldValue[0]['value']) && !Array.isArray(fieldValue[0]['value']) && fieldValue[0]['value'] !== undefined;\n }\n\n public static isCollectionOfSimpleTypes(fieldValue: any): boolean {\n return this.isCollection(fieldValue) && this.areCollectionValuesSimpleFields(fieldValue);\n }\n\n public static isMultiSelectValue(form: any): boolean {\n return this.isNonEmptyArray(form) && !this.isCollectionWithValue(form);\n }\n\n public static isNonEmptyArray(pageFormFields: any): boolean {\n return Array.isArray(pageFormFields) && pageFormFields[0] !== undefined;\n }\n\n public static isCollection(pageFormFields: any): boolean {\n return this.isNonEmptyArray(pageFormFields) && this.isCollectionWithValue(pageFormFields);\n }\n\n public static isCollectionWithValue(pageFormFields: any[]): boolean {\n return pageFormFields[0]['value'] !== undefined;\n }\n\n public static cloneObject(obj: any): any {\n return Object.assign({}, obj);\n }\n\n // temporary function until this can be moved to CaseView class (RDM-2681)\n public static getCaseFields(caseView: CaseView): CaseField[] {\n const caseDataFields: CaseField[] = caseView.tabs.reduce((acc: CaseField[], tab: CaseTab) => {\n return acc.concat(tab.fields);\n }, []);\n\n const metadataFields: CaseField[] = caseView.metadataFields;\n return metadataFields.concat(caseDataFields.filter((caseField: CaseField) => {\n return metadataFields.findIndex(metadataField => metadataField.id === caseField.id) < 0;\n }));\n }\n\n public static addCaseFieldAndComponentReferences (c: AbstractControl, cf: CaseField, comp: AbstractFormFieldComponent): void {\n c['caseField'] = cf;\n c['component'] = comp;\n }\n\n /**\n * Recursive check of an array or object and its descendants for the presence of any non-empty values.\n *\n * @param object The array or object to check\n * @returns `true` if the array or object (or a descendant) contains at least one non-empty value; `false` otherwise\n */\n public static containsNonEmptyValues(object: object): boolean {\n if (!object) {\n return false;\n }\n const values = Object.keys(object).map(key => object[key]);\n const objectRefs = [];\n // Also test for numeric values, and length > 0 for non-numeric values because this covers both strings and arrays.\n // Note: Deliberate use of non-equality (!=) operator for null check, to handle both null and undefined values.\n const hasNonNullPrimitive = values.some(x => (x != null &&\n ((typeof x === 'object' && x.constructor === Object) || Array.isArray(x)\n ? !objectRefs.push(x)\n : typeof x === 'number' || x.length > 0)\n ));\n return !hasNonNullPrimitive ? objectRefs.some(y => this.containsNonEmptyValues(y)) : hasNonNullPrimitive;\n }\n\n /**\n * handleNestedDynamicLists()\n * Reassigns list_item and value data to DynamicList children\n * down the tree. Server response returns data only in\n * the `value` object of parent complex type\n *\n * EUI-2530 Dynamic Lists for Elements in a Complex Type\n *\n * @param jsonBody - { case_fields: [ CaseField, CaseField ] }\n */\n public static handleNestedDynamicLists(jsonBody: { case_fields: CaseField[] }): any {\n\n if (jsonBody.case_fields) {\n jsonBody.case_fields.forEach(caseField => {\n if (caseField.field_type) {\n this.setDynamicListDefinition(caseField, caseField.field_type, caseField);\n }\n });\n }\n\n return jsonBody;\n }\n\n private static prepareValue(field: CaseField): any {\n if (field.value) {\n return field.value;\n } else if (field.isComplex()) {\n const valueMap = {};\n field.field_type.complex_fields.forEach(complexField => {\n valueMap[complexField.id] = FieldsUtils.prepareValue(complexField);\n });\n return valueMap;\n }\n }\n\n private static readonly DEFAULT_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n };\n\n private static readonly LABEL_MERGE_FUNCTION = function mergeFunction(field: CaseField, result: object): void {\n if (!result.hasOwnProperty(field.id)) {\n result[field.id] = field.value;\n }\n switch (field.field_type.type) {\n case 'FixedList':\n case 'FixedRadioList': {\n result[field.id] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, result[field.id] || field.value);\n break;\n }\n case 'MultiSelectList': {\n const fieldValue = result[field.id] || [];\n result[field.id + FieldsUtils.LABEL_SUFFIX] = [];\n fieldValue.forEach((code: any, idx: any) => {\n result[field.id + FieldsUtils.LABEL_SUFFIX][idx] = FieldsUtils.getFixedListLabelByCodeOrEmpty(field, code);\n });\n break;\n }\n case 'Label': {\n result[field.id] = FieldsUtils.getLabel(field);\n break;\n }\n case 'MoneyGBP': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getMoneyGBP(fieldValue);\n break;\n }\n case 'Date': {\n const fieldValue = (result[field.id] || field.value);\n result[field.id] = FieldsUtils.getDate(fieldValue);\n break;\n }\n case 'Complex': {\n if (result[field.id] && field.field_type.complex_fields) {\n field.field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, result[field.id]);\n }\n });\n }\n break;\n }\n case 'Collection': {\n const elements = (result[field.id] || field.value);\n if (elements) {\n elements.forEach((elem: any) => {\n switch (field.field_type.collection_field_type.type) {\n case 'MoneyGBP': {\n elem.value = FieldsUtils.getMoneyGBP(elem.value);\n break;\n }\n case 'Date': {\n elem.value = FieldsUtils.getDate(elem.value);\n break;\n }\n case 'Complex': {\n if (field.field_type.collection_field_type.complex_fields) {\n field.field_type.collection_field_type.complex_fields.forEach((f: CaseField) => {\n if (['Collection', 'Complex', 'MultiSelectList'].indexOf(f.field_type.type) > -1) {\n FieldsUtils.LABEL_MERGE_FUNCTION(f, elem.value);\n }\n });\n }\n break;\n }\n }\n });\n }\n break;\n }\n }\n };\n\n /**\n * Formats a `MoneyGBP` value to include currency units.\n * @param fieldValue The CurrencyPipe expects an `any` parameter so this must also be `any`,\n * but it should be \"number-like\" (e.g., '1234')\n * @returns A formatted string (e.g., £12.34)\n */\n private static getMoneyGBP(fieldValue: any): string {\n return fieldValue ? FieldsUtils.currencyPipe.transform(fieldValue / 100, 'GBP', 'symbol') : fieldValue;\n }\n\n private static getLabel(fieldValue: CaseField): string {\n return fieldValue ? fieldValue.label : '';\n }\n\n private static getDate(fieldValue: string): string {\n try {\n // Format specified here wasn't previously working and lots of tests depend on it not working\n // Now that formats work correctly many test would break - and this could affect services which may depend on\n // the orginal behaviour of returning dates in \"d MMM yyyy\"\n // Note - replaced 'd' with 'D' as datepipe using moment to avoid timezone discrepancies\n return FieldsUtils.datePipe.transform(fieldValue, null, 'D MMM yyyy');\n } catch (e) {\n return this.textForInvalidField('Date', fieldValue);\n }\n }\n\n private static getFixedListLabelByCodeOrEmpty(field: CaseField, code: string): string {\n const relevantItem: FixedListItem = code ? field.field_type.fixed_list_items.find(item => item.code === code) : null;\n return relevantItem ? relevantItem.label : '';\n }\n\n private static textForInvalidField(type: string, invalidValue: string): string {\n return `{ Invalid ${type}: ${invalidValue} }`;\n }\n\n private static setDynamicListDefinition(caseField: CaseField, caseFieldType: FieldType, rootCaseField: CaseField) {\n if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COMPLEX) {\n\n caseFieldType.complex_fields.forEach(field => {\n try {\n const isDynamicField = FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_DYNAMIC_LIST_TYPE.indexOf(field.field_type.type) !== -1;\n\n if (isDynamicField) {\n const dynamicListValue = this.getDynamicListValue(rootCaseField.value, field.id);\n if (dynamicListValue) {\n const list_items = dynamicListValue[0].list_items;\n const complexValue = dynamicListValue.map(data => data.value);\n const value = {\n list_items,\n value: complexValue.length > 0 ? complexValue : undefined\n };\n field.value = {\n ...value\n };\n field.formatted_value = {\n ...field.formatted_value,\n ...value\n };\n }\n } else {\n this.setDynamicListDefinition(field, field.field_type, rootCaseField);\n }\n } catch (error) {\n console.log(error);\n }\n });\n } else if (caseFieldType.type === FieldsUtils.SERVER_RESPONSE_FIELD_TYPE_COLLECTION) {\n if (caseFieldType.collection_field_type) {\n this.setDynamicListDefinition(caseField, caseFieldType.collection_field_type, rootCaseField);\n }\n }\n }\n\n private static getDynamicListValue(jsonBlock: any, key: string) {\n\n const data = jsonBlock ? this.getNestedFieldValues(jsonBlock, key, []) : [];\n\n return data.length > 0 ? data : null;\n }\n\n private static getNestedFieldValues(jsonData: any, key: string, output: any[] = []) {\n if (jsonData && jsonData[key]) {\n output.push(jsonData[key]);\n } else {\n for (const elementKey in jsonData) {\n if (typeof jsonData === 'object' && jsonData.hasOwnProperty(elementKey)) {\n this.getNestedFieldValues(jsonData[elementKey], key, output);\n }\n }\n }\n return output;\n }\n\n public buildCanShowPredicate(eventTrigger: CaseEventTrigger, form: any): Predicate<WizardPage> {\n const currentState = this.getCurrentEventState(eventTrigger, form);\n return (page: WizardPage): boolean => {\n return page.parsedShowCondition.match(currentState);\n };\n }\n\n public getCurrentEventState(eventTrigger: { case_fields: CaseField[] }, form: FormGroup): object {\n return this.mergeCaseFieldsAndFormFields(eventTrigger.case_fields, form.controls['data'].value);\n }\n\n public cloneCaseField(obj: any): CaseField {\n return Object.assign(new CaseField(), obj);\n }\n\n public mergeCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.DEFAULT_MERGE_FUNCTION);\n }\n\n public mergeLabelCaseFieldsAndFormFields(caseFields: CaseField[], formFields: object): object {\n return this.mergeFields(caseFields, formFields, FieldsUtils.LABEL_MERGE_FUNCTION);\n }\n\n public controlIterator(\n aControl: AbstractControl,\n formArrayFn: (array: FormArray) => void,\n formGroupFn: (group: FormGroup) => void,\n controlFn: (control: FormControl) => void\n ): void {\n if (aControl instanceof FormArray) { // We're in a collection\n formArrayFn(aControl);\n } else if (aControl instanceof FormGroup) { // We're in a complex type.\n formGroupFn(aControl);\n } else if (aControl instanceof FormControl) { // FormControl\n controlFn(aControl);\n }\n }\n\n private mergeFields(caseFields: CaseField[], formFields: object, mergeFunction: (field: CaseField, result: object) => void): object {\n const result: object = FieldsUtils.cloneObject(formFields);\n caseFields.forEach(field => {\n mergeFunction(field, result);\n if (field.field_type && field.field_type.complex_fields && field.field_type.complex_fields.length > 0) {\n result[field.id] = this.mergeFields(field.field_type.complex_fields, result[field.id], mergeFunction);\n }\n });\n return result;\n }\n}\n","import * as _score from 'underscore';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\nexport class ShowCondition {\n\n // Expects a show condition of the form: <fieldName>=\"string\"\n constructor(public condition: string) {\n if (!!condition) {\n if (condition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n this.orConditions = condition.split(ShowCondition.OR_CONDITION_REGEXP);\n } else {\n this.andConditions = condition.split(ShowCondition.AND_CONDITION_REGEXP);\n }\n }\n }\n\n private static readonly AND_CONDITION_REGEXP = new RegExp('\\\\sAND\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly OR_CONDITION_REGEXP = new RegExp('\\\\sOR\\\\s(?![^\"]*\"(?:(?:[^\"]*\"){2})*[^\"]*$)', 'g');\n private static readonly CONDITION_NOT_EQUALS = '!=';\n private static readonly CONDITION_EQUALS = '=';\n private static readonly CONTAINS = 'CONTAINS';\n private static readonly instanceCache = new Map<string, ShowCondition>();\n\n private readonly orConditions: string[] = null;\n private readonly andConditions: string[] = null;\n public static addPathPrefixToCondition(showCondition: string, pathPrefix: string): string {\n if (!pathPrefix || pathPrefix === '') {\n return showCondition;\n }\n if (showCondition.search(ShowCondition.OR_CONDITION_REGEXP) !== -1) {\n let orConditions = showCondition.split(ShowCondition.OR_CONDITION_REGEXP);\n orConditions = this.extractConditions(orConditions, pathPrefix);\n return orConditions.join(' OR ');\n } else {\n let andConditions = showCondition.split(ShowCondition.AND_CONDITION_REGEXP);\n andConditions = this.extractConditions(andConditions, pathPrefix);\n return andConditions.join(' AND ');\n }\n }\n\n // Cache instances so that we can cache results more effectively\n public static getInstance(condition: string): ShowCondition {\n let instance = this.instanceCache.get(condition);\n if (!instance) {\n instance = new ShowCondition(condition);\n this.instanceCache.set(condition, instance);\n }\n return instance;\n }\n\n /**\n * Determine whether a ShowCondition model is affected by fields that have\n * a display_context of HIDDEN or READONLY, which means they aren't able to\n * be changed by the user's actions.\n *\n * @param showCondition The ShowCondition model to evaluate.\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public static hiddenCannotChange(showCondition: ShowCondition, caseFields: CaseField[]): boolean {\n if (showCondition && caseFields) {\n const conditions: string[] = showCondition.andConditions || showCondition.orConditions;\n if (conditions && conditions.length > 0) {\n let allUnchangeable = true;\n for (const condition of conditions) {\n const [field] = ShowCondition.getField(condition);\n const path: string[] = field.split('.');\n let head = path.shift();\n let caseField: CaseField = caseFields.find(cf => cf.id === head);\n while (path.length > 0) {\n head = path.shift();\n if (caseField) {\n // Jump out if this is HIDDEN or READONLY, regardless of whether or not it's\n // complex or a collection - nested fields will \"inherit\" the display_context.\n if (['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1) {\n break;\n }\n\n // Consider what type of field this is.\n const ft = caseField.field_type;\n switch (ft.type) {\n case 'Collection':\n if (ft.collection_field_type.type === 'Complex' && ft.collection_field_type.complex_fields) {\n caseField = ft.collection_field_type.complex_fields.find(cf => cf.id === head);\n }\n break;\n case 'Complex':\n if (ft.complex_fields) {\n caseField = ft.complex_fields.find(cf => cf.id === head);\n }\n break;\n }\n }\n }\n if (caseField) {\n allUnchangeable = allUnchangeable && ['HIDDEN', 'READONLY'].indexOf(caseField.display_context) > -1;\n }\n }\n return allUnchangeable;\n }\n }\n return false;\n }\n\n private static extractConditions(conditionsArray: string[], pathPrefix: string): string[] {\n const extracted = conditionsArray.map(condition => {\n if (condition.startsWith(pathPrefix)) {\n return condition;\n }\n return `${pathPrefix}.${condition}`;\n });\n return extracted;\n }\n\n private static getField(condition: string): [string, string?] {\n let separator: string = ShowCondition.CONTAINS;\n if (condition.indexOf(ShowCondition.CONTAINS) < 0) {\n separator = ShowCondition.CONDITION_EQUALS;\n if (condition.indexOf(ShowCondition.CONDITION_NOT_EQUALS) > -1) {\n separator = ShowCondition.CONDITION_NOT_EQUALS;\n }\n }\n return [ condition.split(separator)[0], separator ];\n }\n\n public match(fields: object, path?: string): boolean {\n if (!this.condition) {\n return true;\n }\n return this.matchAndConditions(fields, this.updatePathName(path));\n }\n\n public matchByContextFields(contextFields: CaseField[]): boolean {\n return this.match(FieldsUtils.toValuesMap(contextFields));\n }\n\n /**\n * Determine whether this is affected by fields that have a display_context\n * of HIDDEN or READONLY, which means they aren't able to be changed by the\n * user's actions.\n *\n * @param caseFields Inspected to see appropriate display_contexts.\n */\n public hiddenCannotChange(caseFields: CaseField[]): boolean {\n return ShowCondition.hiddenCannotChange(this, caseFields);\n }\n\n /**\n * Path Name gets updated for complex sub fields\n * @param path Path name.\n */\n private updatePathName(path: string): string {\n if (path && path.split(/[_]+/g).length > 0) {\n const [pathName, ...pathTail] = path.split(/[_]+/g);\n const pathFinalIndex = pathTail.pop();\n const pathTailString = pathTail.toString();\n let mappedPathTail;\n\n mappedPathTail = pathTail.map((value) => {\n return Number(pathFinalIndex) === Number(value) ? pathName : value;\n });\n\n return pathTailString !== mappedPathTail.toString()\n ? `${pathName}_${mappedPathTail.join('_')}_${pathFinalIndex}`\n : path;\n } else {\n return path;\n }\n }\n\n private matchAndConditions(fields: object, path?: string): boolean {\n if (!!this.orConditions) {\n return this.orConditions.some(orCondition => this.matchEqualityCondition(fields, orCondition, path));\n } else if (!!this.andConditions) {\n return this.andConditions.every(andCondition => this.matchEqualityCondition(fields, andCondition, path));\n } else {\n return false;\n }\n }\n\n private matchEqualityCondition(fields: object, condition: string, path?: string): boolean {\n const [field, conditionSeparator] = ShowCondition.getField(condition);\n const [head, ...tail] = field.split('.');\n const currentValue = this.findValueForComplexCondition(fields, head, tail, path);\n const expectedValue = this.unquoted(condition.split(conditionSeparator)[1]);\n if (conditionSeparator === ShowCondition.CONTAINS) {\n return this.checkValueContains(expectedValue, currentValue);\n } else {\n return this.checkValueEquals(expectedValue, currentValue, conditionSeparator);\n }\n }\n\n private checkValueEquals(expectedValue: string, currentValue: any, conditionSeparaor: string): boolean {\n if (expectedValue.search('[,]') > -1) { // for multi-select list\n return this.checkMultiSelectListEquals(expectedValue, currentValue, conditionSeparaor);\n } else if (expectedValue.endsWith('*') && currentValue && conditionSeparaor !== ShowCondition.CONDITION_NOT_EQUALS) {\n if (typeof currentValue === 'string') {\n return currentValue.startsWith(this.removeStarChar(expectedValue));\n }\n return expectedValue === '*';\n } else {\n // changed from '===' to '==' to cover number field conditions\n if (conditionSeparaor === ShowCondition.CONDITION_NOT_EQUALS) {\n return this.checkValueNotEquals(expectedValue, currentValue);\n } else {\n return currentValue == expectedValue || this.okIfBothEmpty(expectedValue, currentValue); // tslint:disable-line\n }\n }\n }\n\n private checkValueNotEquals(expectedValue: string, currentValue: any): boolean {\n const formatCurrentValue = currentValue ? currentValue.toString().trim() : '';\n if ('*' === expectedValue && formatCurrentValue !== '') {\n return false;\n }\n const formatExpectedValue = expectedValue ? expectedValue.toString().trim() : '';\n return formatCurrentValue != formatExpectedValue; // tslint:disable-line\n }\n\n private checkMultiSelectListEquals(expectedValue: string, currentValue: any, conditionSeparator: string): boolean {\n const expectedValues = expectedValue.split(',').sort().toString();\n const values = currentValue ? currentValue.sort().toString() : '';\n if (conditionSeparator === ShowCondition.CONDITION_NOT_EQUALS) {\n return expectedValues !== values;\n } else {\n return expectedValues === values;\n }\n }\n\n private checkValueContains(expectedValue: string, currentValue: any): boolean {\n if (expectedValue.search(',') > -1) {\n const expectedValues = expectedValue.split(',').sort();\n const values = currentValue ? currentValue.sort().toString() : '';\n return expectedValues.every(item => values.search(item) >= 0);\n } else {\n const values = currentValue && Array.isArray(currentValue) ? currentValue.toString() : '';\n return values.search(expectedValue) >= 0;\n }\n }\n\n private findValueForComplexCondition(fields: object, head: string, tail: string[], path?: string): any {\n if (!fields) {\n return undefined;\n }\n if (tail.length === 0) {\n return this.getValue(fields, head);\n } else {\n if (FieldsUtils.isArray(fields[head])) {\n return this.findValueForComplexConditionInArray(fields, head, tail, path);\n } else {\n return this.findValueForComplexConditionForPathIfAny(fields, head, tail, path);\n }\n }\n }\n\n private findValueForComplexConditionForPathIfAny(fields: object, head: string, tail: string[], path?: string): any {\n if (path) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), pathTail.join('_'));\n } else {\n return this.findValueForComplexCondition(fields[head], tail[0], tail.slice(1), path);\n }\n }\n\n private findValueForComplexConditionInArray(fields: object, head: string, tail: string[], path?: string): any {\n // use the path to resolve which array element we refer to\n if (path && path.startsWith(head)) {\n const [_, ...pathTail] = path.split(/[_]+/g);\n if (pathTail.length > 0) {\n try {\n const arrayIndex = Number.parseInt(pathTail[0], 10);\n const [__, ...dropNumberPath] = pathTail;\n return (fields[head][arrayIndex] !== undefined) ? this.findValueForComplexCondition(\n fields[head][arrayIndex]['value'], tail[0], tail.slice(1), dropNumberPath.join('_')) : null;\n } catch (e) {\n console.log('Error while parsing number', pathTail[0], e);\n }\n }\n } else {\n console.log('Path in formArray should start with ', head, ', full path: ', path);\n }\n }\n\n private getValue(fields: object, head: string): any {\n if (this.isDynamicList(fields[head])) {\n return fields[head].value.code;\n } else {\n return fields[head];\n }\n }\n\n private isDynamicList(dynamiclist: object): boolean {\n return !_score.isEmpty(dynamiclist) &&\n (_score.has(dynamiclist, 'value') && _score.has(dynamiclist, 'list_items'));\n }\n\n private unquoted(str: string): string {\n return str.replace(/(?:^\")|(?:\"$)/g, '');\n }\n\n private removeStarChar(str: string): string {\n return str.substring(0, str.length - 1);\n }\n\n private okIfBothEmpty(right: string, value: any): boolean {\n return value === null && (right === '');\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Constants {\n public static readonly MANDATORY: string = 'MANDATORY';\n public static readonly REGEX_WHITESPACES: string = '^[^ ]+(?:\\\\s+[^ ]+)*$';\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\n\nimport { Constants } from '../../commons/constants';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FormValidatorsService {\n\n private static readonly CUSTOM_VALIDATED_TYPES: FieldTypeEnum[] = [\n 'Date', 'MoneyGBP', 'Label'\n ];\n public static addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n if (\n caseField.display_context === Constants.MANDATORY &&\n FormValidatorsService.CUSTOM_VALIDATED_TYPES.indexOf(caseField.field_type.type) === -1\n ) {\n const validators = [Validators.required];\n if (caseField.field_type.type === 'Text') {\n if (caseField.field_type.regular_expression) {\n validators.push(Validators.pattern(caseField.field_type.regular_expression));\n } else {\n validators.push(this.emptyValidator());\n }\n if (caseField.field_type.min && (typeof caseField.field_type.min === 'number')) {\n validators.push(Validators.minLength(caseField.field_type.min));\n }\n if (caseField.field_type.max && (typeof caseField.field_type.max === 'number')) {\n validators.push(Validators.maxLength(caseField.field_type.max));\n }\n }\n if (control.validator) {\n validators.push(control.validator);\n }\n control.setValidators(validators);\n }\n return control;\n }\n\n public static emptyValidator(): ValidatorFn {\n const validator = (control: AbstractControl):ValidationErrors | null => {\n if (control && control.value && control.value.toString().trim().length === 0) {\n return { required: {} };\n }\n return null;\n };\n return validator;\n }\n\n // TODO: Strip this out as it's only here for the moment because\n // the service is being injected all over the place but it doesn't\n // need to be as FormValidatorsService.addValidators is perfectly\n // happy being static.\n public addValidators(caseField: CaseField, control: AbstractControl): AbstractControl {\n return FormValidatorsService.addValidators(caseField, control);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\n\n\ntype FormContainer = FormGroup | FormArray;\n\n@Directive()\nexport abstract class AbstractFormFieldComponent {\n @Input()\n public caseField: CaseField;\n\n @Input()\n public formGroup: FormGroup;\n\n @Input()\n public parent?: FormContainer;\n\n @Input()\n public idPrefix = '';\n\n public id() {\n return this.idPrefix + this.caseField.id;\n }\n\n protected registerControl<T extends AbstractControl>(control: T, replace = false): AbstractControl {\n const container: FormContainer = this.parent || this.formGroup;\n if (!container) {\n return control;\n }\n const existing = container.controls[this.caseField.id];\n if (existing) {\n if (replace) {\n // Set the validators on the replacement with what already exists.\n control.setValidators(existing.validator);\n } else {\n return existing;\n }\n }\n this.addValidators(this.caseField, control);\n FieldsUtils.addCaseFieldAndComponentReferences(control, this.caseField, this);\n return this.addControlToParent(control, container, replace);\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n // No validators by default, override this method to add validators to the form control\n }\n\n private addControlToParent(control: AbstractControl, parent: FormContainer, replace: boolean): AbstractControl {\n if (parent instanceof FormArray) {\n return this.addControlToFormArray(control, parent, replace);\n }\n return this.addControlToFormGroup(control, parent, replace);\n }\n\n private addControlToFormArray(control: AbstractControl, parent: FormArray, replace: boolean): AbstractControl {\n const index = parseInt(this.caseField.id, 10);\n if (replace && !isNaN(index)) {\n parent.setControl(index, control);\n } else {\n parent.push(control);\n }\n return control;\n }\n\n private addControlToFormGroup(control: AbstractControl, parent: FormGroup, replace: boolean): AbstractControl {\n if (replace) {\n if (this.caseField.field_type && this.caseField.field_type.id === 'CaseLink' && this.caseField.field_type.type === 'Complex' && /^-?\\d+$/.test(this.caseField.id)) {\n parent.setControl('CaseReference', control['controls']['CaseReference']);\n } else {\n parent.setControl(this.caseField.id, control);\n }\n } else {\n parent.addControl(this.caseField.id, control);\n }\n return control;\n }\n}\n","import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { AbstractFormFieldComponent } from './abstract-form-field.component';\n\n@Directive()\nexport abstract class AbstractFieldWriteComponent extends AbstractFormFieldComponent implements OnChanges {\n\n @Input()\n public isExpanded = false;\n\n @Input()\n public isInSearchBlock = false;\n\n public constructor() {\n super();\n this.fixCaseField();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const change = changes['caseField'];\n if (change) {\n const cfNew = change.currentValue;\n if (!(cfNew instanceof CaseField)) {\n this.fixCaseField();\n }\n }\n }\n\n public createElementId(elementId: string): string {\n return `${this.id()}_${elementId}`;\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n FormValidatorsService.addValidators(caseField, control);\n }\n\n private fixCaseField() {\n if (this.caseField && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n }\n}\n","import { AfterViewInit, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { AbstractFieldWriteComponent } from '../../components/palette/base-field/abstract-field-write.component';\nimport { AbstractFormFieldComponent } from '../../components/palette/base-field/abstract-form-field.component';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ShowCondition } from './domain/conditional-show.model';\n\n@Directive({ selector: '[ccdConditionalShowForm]' })\n/** Hides and shows all fields in a form. Works on read only fields and form fields.\n * The show condition is evaluated on all the fields of the page. i.e. read only and form fields.\n * Evaluation of the show condition includes disabled fields, which can be on their initial value or empty. Executes on the\n * host field initialization and when any field of the form changes.\n * Collaborates with the GreyBarService to show a vertical grey bar when a field initially hidden on the page is shown. When returning\n * to the page after the page has been left, the grey bar has to be redisplayed. If instead on initial page load the field renders as\n * initially shown, the grey bar is not displayed.\n */\nexport class ConditionalShowFormDirective implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() public caseFields: CaseField[];\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n\n private allFieldValues: any;\n private formChangesSubscription: Subscription;\n\n constructor(private readonly fieldsUtils: FieldsUtils) {\n }\n\n public ngOnInit() {\n if (!this.formGroup) {\n this.formGroup = new FormGroup({});\n }\n }\n\n /**\n * Moved the evaluation of show/hide conditions and subscription\n * to form changes until after the form has been fully created.\n *\n * Prior to this change, I traced more than 5,100,000 firings of\n * the evaluateCondition INSIDE the show_condition check on page\n * load for an event with a lot of content. After this change,\n * that number dropped to fewer than 2,500 - that's a.\n */\n public ngAfterViewInit() {\n this.evalAllShowHideConditions();\n this.subscribeToFormChanges();\n }\n\n public ngOnDestroy() {\n this.unsubscribeFromFormChanges();\n }\n\n /*\n * Delay the execution of evalShowHideConditions for 100ms\n * Evaluating showHideConditions on input is inefficient as all forms are evaluated\n * whilst the user is still typing. We are better off allowing the user to finish typing\n * then evaluate the show hide conditions.\n */\n private subscribeToFormChanges() {\n this.unsubscribeFromFormChanges();\n this.formChangesSubscription = this.formGroup.valueChanges\n .pipe(\n debounceTime(100)\n )\n .subscribe(_ => {\n this.evalAllShowHideConditions();\n });\n }\n\n private evaluateControl(control: AbstractControl) {\n const cf = control['caseField'] as CaseField;\n const component = control['component'] as AbstractFormFieldComponent;\n this.evaluateCondition(cf, component, control);\n }\n\n private evaluateCondition(cf: CaseField, component: AbstractFormFieldComponent, control: AbstractControl) {\n if (cf) {\n if (cf.display_context === 'HIDDEN') {\n cf.hidden = true; // display_context === 'HIDDEN' means always hide\n } else if (cf.show_condition) {\n const showCondition: ShowCondition = ShowCondition.getInstance(cf.show_condition);\n const condResult = showCondition.match(this.allFieldValues, this.buildPath(component, cf));\n if (cf.hidden === null || cf.hidden === undefined) {\n cf.hidden = false;\n }\n if (condResult === cf.hidden) {\n cf.hidden = !condResult;\n }\n // EUI-3267. If this field is showing, set the hiddenCannotChange flag.\n // This is used in the display of the grey bar.\n if (!cf.hidden) {\n cf.hiddenCannotChange = showCondition.hiddenCannotChange(this.caseFields);\n }\n // Disable the control if it's hidden so that it doesn't count towards the\n // validation state of the form, but only if it's actually being validated.\n if (control.validator) {\n if (cf.hidden === true && !control.disabled) {\n control.disable({ emitEvent: false });\n } else if (cf.hidden !== true && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n }\n }\n }\n\n // make sure for the 3 callbacks that we are bound to this via an arrow function\n private readonly handleFormControl = (formControl: FormControl): void => {\n this.evaluateControl(formControl);\n }\n\n private readonly handleFormArray = (formArray: FormArray): void => {\n this.evaluateControl(formArray);\n formArray.controls.forEach(formControl => {\n this.fieldsUtils.controlIterator(formControl, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n\n private readonly handleFormGroup = (formGroup: FormGroup): void => {\n this.evaluateControl(formGroup);\n let groupControl = formGroup;\n if (formGroup.get('value') && formGroup.get('value') instanceof FormGroup) { // Complex Field\n groupControl = formGroup.get('value') as FormGroup;\n } else if (formGroup.controls) {\n // Special Fields like AddressUK, AddressGlobal\n groupControl = formGroup;\n }\n if (groupControl.controls) {\n Object.keys(groupControl.controls).forEach(cKey => {\n // EUI-3359.\n // Get the control from groupControl.controls[cKey] rather than\n // groupControl.get(cKey) as the latter does pathing and will interpret\n // full stops in cKey as delimeters for being nested within an array,\n // which makes no sense in this situation.\n const control = groupControl.controls[cKey];\n this.fieldsUtils.controlIterator(control, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n });\n }\n }\n\n private evalAllShowHideConditions(): void {\n this.getCurrentPagesReadOnlyAndFormFieldValues();\n this.fieldsUtils.controlIterator(this.formGroup, this.handleFormArray, this.handleFormGroup, this.handleFormControl);\n }\n\n private buildPath(c: AbstractFormFieldComponent, field: CaseField): string {\n if (c && c instanceof AbstractFieldWriteComponent) {\n if (c.idPrefix) {\n return c.idPrefix + field.id;\n }\n }\n return field.id;\n }\n\n private getCurrentPagesReadOnlyAndFormFieldValues(): any {\n const formFields = this.getFormFieldsValuesIncludingDisabled();\n this.allFieldValues = this.fieldsUtils.mergeCaseFieldsAndFormFields(this.contextFields, formFields);\n return this.allFieldValues;\n }\n\n private getFormFieldsValuesIncludingDisabled(): any {\n return this.formGroup.getRawValue();\n }\n\n private unsubscribeFromFormChanges(): void {\n if (this.formChangesSubscription) {\n this.formChangesSubscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { ConditionalShowFormDirective } from './conditional-show-form.directive';\nimport { ConditionalShowRegistrarService } from './services/conditional-show-registrar.service';\nimport { GreyBarService } from './services/grey-bar.service';\n\n@NgModule({\n declarations: [\n ConditionalShowFormDirective\n ],\n exports: [\n ConditionalShowFormDirective\n ],\n providers: [\n FieldsUtils,\n ConditionalShowRegistrarService,\n GreyBarService\n ]\n})\nexport class ConditionalShowModule {}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\n\n@Injectable()\nexport class FieldTypeSanitiser {\n public static readonly FIELD_TYPE_COMPLEX: FieldTypeEnum = 'Complex';\n public static readonly FIELD_TYPE_COLLECTION: FieldTypeEnum = 'Collection';\n public static readonly FIELD_TYPE_DYNAMIC_LIST: FieldTypeEnum = 'DynamicList';\n public static readonly FIELD_TYPE_DYNAMIC_RADIO_LIST: FieldTypeEnum = 'DynamicRadioList';\n\n /**\n * This method finds dynamiclists in a form and replaces their string\n * values, with a JSON object, as below:\n * From: 'xyz'\n * To : {\n * value: { code:'xyz', label:'XYZ' },\n * list_items: [\n * { code:'xyz', label:'XYZ'},\n * { code:'abc', label:'ABC'}\n * ]\n * }\n * @param caseFields The CaseFields to assess.\n * @param data The data in the form.\n */\n public sanitiseLists(caseFields: CaseField[], data: any) {\n if (!data || !caseFields) {\n return;\n }\n caseFields.forEach(caseField => {\n\n switch (caseField.field_type.type) {\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_RADIO_LIST:\n case FieldTypeSanitiser.FIELD_TYPE_DYNAMIC_LIST:\n this.convertStringToDynamicListOutput(caseField, data);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COMPLEX:\n this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);\n break;\n\n case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:\n if (Array.isArray(data[caseField.id])) {\n data[caseField.id].forEach((formElement: any) => {\n this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);\n });\n }\n break;\n }\n\n });\n }\n\n private convertStringToDynamicListOutput(field: CaseField, data: any): void {\n const stringValue = data[field.id];\n if (typeof stringValue === 'string') {\n const listItems = this.getListItems(field);\n const matches = listItems.filter(value => value.code === stringValue);\n if (matches && matches.length > 0) {\n data[field.id] = {\n value: matches[0],\n list_items: listItems\n };\n }\n }\n }\n\n private getListItems(field: CaseField): any[] {\n if (field) {\n if (field.list_items) {\n return field.list_items;\n }\n if (field.formatted_value && field.formatted_value.list_items) {\n return field.formatted_value.list_items;\n }\n }\n return [];\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../fields/fields.utils';\nimport { FieldTypeSanitiser } from './field-type-sanitiser';\n\n@Injectable()\nexport class FormValueService {\n /**\n * Gets value of a field based on fieldKey which is a dot separated reference to value and collection index.\n * There are two exceptions:\n * 1) In case of a multiselect being identified as a leaf a '---LABEL' suffix is appended to the key and values of that key are returned\n * form= { 'list': ['code1', 'code2'],\n * 'list---LABEL': ['label1', 'label2'] },\n * fieldKey=list,\n * colIndex=0,\n * value=label1, label2\n * 2) In case of a collection of simple fields is identified as a leaf all values are joined seperated by a comma\n * form= { 'collection': [{ 'value': 'value1' }, { 'value': 'value2' }] }\n * fieldKey=collection\n * colIndex=1\n * value=value1, value2\n *\n * Other examples:\n * 1) simple field reference: form={ 'PersonFirstName': 'John' }, fieldKey=PersonFirstName, value=John\n * 2) complex field reference:\n * form= { complex1': {\n * 'simple11': 'value11',\n * 'simple12': 'value12',\n * 'complex2': {\n * 'simple21': 'value21'\n * }\n * }},\n * fieldKey=complex1.complex2.simple21\n * colIndex=0,\n * value=value21\n * 3) complex field with collection field with complex field reference:\n * form= { 'complex1': {\n * 'collection1': [\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value1',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value12'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value2',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value21'\n * }\n * }\n * }\n * }\n * },\n * { 'value': {\n * 'complex2': {\n * 'simple1': 'value3',\n * 'complex3': {\n * 'complex4': {\n * 'simple2': 'value31'\n * }\n * }\n * }\n * }\n * }\n * ]}}\n * fieldKey=complex1.collection1.complex2.complex3.complex4.simple2\n * colIndex=2,\n * value=value21\n * 4) collection of complex types\n * form= { 'collection1': [\n * { 'value': {'complex1': {\n * 'simple1': 'value11',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value12'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value21',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value22'\n * }\n * }\n * }}\n * },\n * { 'value': {'complex1': {\n * 'simple1': 'value31',\n * 'complex2': {\n * 'complex3': {\n * 'simple2': 'value32'\n * }\n * }\n * }}\n * }\n * ]}\n * fieldKey=collection1.complex1.complex2.complex3.simple2\n * colIndex=2\n * value=value32\n *\n * If key is pointing at a complex or collection leaf (not simple, collection of simple or multiselect types) then undefined is returned.\n * Also no key referring a leaf that is contained within collection will contain index number. The index is passed as an argument to the\n * method.\n * @param form form\n * @param fieldKey dot separated reference to value\n * @param colIndex index of collection item being referenced or 0 otherwise\n * @returns string simple or combined value of a field\n */\n public static getFieldValue(form, fieldKey, colIndex) {\n const fieldIds = fieldKey.split('.');\n const currentFieldId = fieldIds[0];\n const currentForm = form[currentFieldId];\n if (FieldsUtils.isMultiSelectValue(currentForm)) {\n return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');\n } else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {\n return currentForm.map(fieldValue => fieldValue['value']).join(', ');\n } else if (FieldsUtils.isCollection(currentForm)) {\n return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);\n } else if (FieldsUtils.isNonEmptyObject(currentForm)) {\n return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);\n } else {\n return currentForm;\n }\n }\n\n /**\n * A recursive method to remove anything with a `---LABEL` suffix.\n * @param data The data to recurse through and remove MultiSelect labels.\n */\n public static removeMultiSelectLabels(data: any): void {\n if (data && typeof data === 'object') {\n if (Array.isArray(data)) {\n for (const item of data) {\n FormValueService.removeMultiSelectLabels(item);\n }\n } else {\n const keys: string[] = Object.keys(data);\n for (const key of keys) {\n // Have we found one a MultiSelect label?\n if (key.indexOf(FieldsUtils.LABEL_SUFFIX) > 0) {\n // If so, remove it.\n delete data[key];\n } else {\n FormValueService.removeMultiSelectLabels(data[key]);\n }\n }\n }\n }\n }\n\n private static isReadOnly(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'READONLY' : false;\n }\n\n private static isOptional(field: CaseField): boolean {\n return field.display_context ? field.display_context.toUpperCase() === 'OPTIONAL' : false;\n }\n\n private static isLabel(field: CaseField): boolean {\n if (field.field_type) {\n return field.field_type.type === 'Label';\n } else {\n return false;\n }\n }\n\n private static isEmptyData(data: object): boolean {\n if (data) {\n let allEmpty = true;\n for (const prop of Object.keys(data)) {\n const value = data[prop];\n if (value) {\n if (typeof(value) === 'object') {\n allEmpty = allEmpty && this.isEmptyData(value);\n } else {\n allEmpty = false;\n }\n }\n }\n return allEmpty;\n }\n return true;\n }\n\n /**\n * Should we clear out optional, empty, complex objects?\n * @param clearEmpty False property if we simply want to skip it.\n * @param data The data to assess for \"emptiness\".\n * @param field The CaseField that will tell us if this is optional.\n */\n private static clearOptionalEmpty(clearEmpty: boolean, data: object, field: CaseField): boolean {\n if (clearEmpty) {\n return FormValueService.isOptional(field) && FormValueService.isEmptyData(data);\n }\n return false;\n }\n\n constructor(private readonly fieldTypeSanitiser: FieldTypeSanitiser) {\n }\n\n public sanitise(rawValue: object): object {\n return this.sanitiseObject(rawValue);\n }\n\n public sanitiseCaseReference(reference: string): string {\n // strip non digits\n const s: string = reference.replace(/[\\D]/g, '');\n if (s.length > 16) {\n return s.substr(s.length - 16, 16);\n }\n return s;\n }\n\n public filterCurrentPageFields(caseFields: CaseField[], editForm: any): any {\n const cloneForm = JSON.parse(JSON.stringify(editForm));\n Object.keys(cloneForm['data']).forEach((key) => {\n if (caseFields.findIndex((element) => element.id === key) < 0) {\n delete cloneForm['data'][key];\n }\n });\n return cloneForm;\n }\n\n public sanitiseDynamicLists(caseFields: CaseField[], editForm: any): any {\n return this.fieldTypeSanitiser.sanitiseLists(caseFields, editForm.data);\n }\n\n public clearNonCaseFields(data: object, caseFields: CaseField[]) {\n for (const dataKey in data) {\n if (!caseFields.find(cf => cf.id === dataKey)) {\n delete data [dataKey];\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeNullLabels(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels that are null\n if ((data[field.id] === null) || (data[field.id] === '')) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n // Recurse and remove anything unnecessary from within a complex field.\n this.removeNullLabels(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeNullLabels(item, field.field_type.collection_field_type.complex_fields);\n this.removeNullLabels(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited\n public removeEmptyDocuments(data: object, caseFields: CaseField[]) {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n for (const field of caseFields) {\n if (field.field_type) {\n switch (field.field_type.type) {\n case 'Complex':\n // Recurse and remove any empty documents from within a complex field.\n this.removeEmptyDocuments(data[field.id], field.field_type.complex_fields);\n break;\n case 'Collection':\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear out empty documents\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any empty documents within.\n for (const item of collection) {\n this.removeEmptyDocuments(item, field.field_type.collection_field_type.complex_fields);\n this.removeEmptyDocuments(item.value, field.field_type.collection_field_type.complex_fields);\n }\n }\n }\n break;\n case 'Document':\n // Ensure this is executed only if the Document field is NOT hidden and is empty of data; hidden Document\n // fields are handled by the filterRawFormValues() function in CaseEditSubmit component\n if (field.hidden !== true && FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n /**\n * Clear out unnecessary fields from a data object, based on an array of CaseFields.\n * This method is recursive and will call itself if it encounters particular field types.\n *\n * @param data The object to be tidied up.\n * @param caseFields The CaseFields that need to be cleaned up.\n * @param clearEmpty Whether or not we should clear out empty, optional, complex objects.\n * @param clearNonCase Whether or not we should clear out non-case fields at the top level.\n */\n public removeUnnecessaryFields(data: object, caseFields: CaseField[], clearEmpty = false, clearNonCase = false): void {\n if (data && caseFields && caseFields.length > 0) {\n // check if there is any data at the top level of the form that's not in the caseFields\n if (clearNonCase) {\n this.clearNonCaseFields(data, caseFields);\n }\n for (const field of caseFields) {\n if (!FormValueService.isLabel(field) && FormValueService.isReadOnly(field)) {\n // Retain anything that is readonly and not a label.\n continue;\n }\n if (field.hidden === true && field.display_context !== 'HIDDEN') {\n // Delete anything that is hidden (that is NOT readonly), and that\n // hasn't had its display_context overridden to make it hidden.\n delete data[field.id];\n } else if (field.field_type) {\n switch (field.field_type.type) {\n case 'Label':\n // Delete any labels.\n delete data[field.id];\n break;\n case 'Document':\n if (FormValueService.isEmptyData(data[field.id])) {\n delete data[field.id];\n }\n break;\n case 'Complex':\n this.removeUnnecessaryFields(data[field.id], field.field_type.complex_fields, clearEmpty);\n // Also remove any optional complex objects that are completely empty.\n // EUI-4244: Ritesh's fix, passing true instead of clearEmpty.\n if (FormValueService.clearOptionalEmpty(true, data[field.id], field)) {\n delete data[field.id];\n }\n break;\n case 'Collection':\n // Check for valid collection data\n this.removeInvalidCollectionData(data, field);\n // Get hold of the collection.\n const collection = data[field.id];\n // Check if we actually have a collection to work with.\n if (collection && Array.isArray(collection)) {\n // If this is a collection of complex object, we need to iterate through\n // and clear them out.\n if (field.field_type.collection_field_type.type === 'Complex') {\n // Iterate through the elements and remove any unnecessary fields within.\n for (const item of collection) {\n this.removeUnnecessaryFields(item, field.field_type.collection_field_type.complex_fields, clearEmpty);\n this.removeUnnecessaryFields(item.value, field.field_type.collection_field_type.complex_fields, false);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n\n // Clear out any MultiSelect labels.\n FormValueService.removeMultiSelectLabels(data);\n }\n\n /**\n * Remove any empty or invalid arry with only id\n *\n * @param data The object tree of form values on which to perform the removal\n * @param field domain model object for each field\n */\n public removeInvalidCollectionData(data: object, field: CaseField) {\n if (data[field.id] && data[field.id].length > 0) {\n for (const objCollection of data[field.id]) {\n if (Object.keys(objCollection).length === 1 && Object.keys(objCollection).indexOf('id') > -1) {\n data[field.id] = [];\n }\n }\n }\n }\n\n /**\n * Remove any empty collection fields where a value of greater than zero is specified in the field's {@link FieldType}\n * `min` attribute.\n *\n * @param data The object tree of form values on which to perform the removal\n * @param caseFields The list of underlying {@link CaseField} domain model objects for each field\n */\n public removeEmptyCollectionsWithMinValidation(data: object, caseFields: CaseField[]): void {\n if (data && caseFields && caseFields.length > 0) {\n for (const field of caseFields) {\n if (field.field_type.type === 'Collection' && field.field_type.min > 0 && data[field.id] &&\n Array.isArray(data[field.id]) && data[field.id].length === 0) {\n delete data[field.id];\n }\n }\n }\n }\n\n private sanitiseObject(rawObject: object): object {\n if (!rawObject) {\n return rawObject;\n }\n\n let sanitisedObject = {};\n const documentFieldKeys = ['document_url', 'document_binary_url', 'document_filename'];\n for (const key in rawObject) {\n // If the key is one of documentFieldKeys, it means the field is of Document type. If the value of any of these\n // properties is null, the entire sanitised object to be returned should be null\n if (documentFieldKeys.indexOf(key) > -1 && rawObject[key] == null) {\n sanitisedObject = null;\n break;\n } else if ('CaseReference' === key) {\n sanitisedObject[key] = this.sanitiseValue(this.sanitiseCaseReference(String(rawObject[key])));\n } else {\n sanitisedObject[key] = this.sanitiseValue(rawObject[key]);\n if (Array.isArray(sanitisedObject[key])) {\n // If the 'sanitised' array is empty, whereas the original array had 1 or more items\n // delete the property from the sanatised object\n if (sanitisedObject[key].length === 0 && rawObject[key].length > 0) {\n delete sanitisedObject[key];\n }\n }\n }\n }\n return sanitisedObject;\n }\n\n private sanitiseArray(rawArray: any[]): any[] {\n if (!rawArray) {\n return rawArray;\n }\n\n rawArray.forEach(item => {\n if (item && item.hasOwnProperty('value')) {\n item.value = this.sanitiseValue(item.value);\n }\n });\n\n // Filter the array to ensure only truthy values are returned; double-bang operator returns the boolean true/false\n // association of a value. In addition, if the array contains items with a \"value\" object property, return only\n // those whose value object contains non-empty values, including for any descendant objects\n return rawArray\n .filter(item => !!item)\n .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);\n }\n\n private sanitiseValue(rawValue: any): any {\n if (Array.isArray(rawValue)) {\n return this.sanitiseArray(rawValue);\n }\n\n switch (typeof rawValue) {\n case 'object':\n return this.sanitiseObject(rawValue);\n case 'string':\n return rawValue.trim();\n case 'number':\n return String(rawValue);\n default:\n return rawValue;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValueService } from '../../../services/form/form-value.service';\n\n// @dynamic\n@Injectable()\nexport class PlaceholderService {\n\n public resolvePlaceholders(pageFormFields: object, stringToResolve: string): string {\n const ps = new PlaceholderService.PlaceholderSubstitutor({pageFormFields, stringToResolve});\n return ps.resolvePlaceholders();\n }\n\n}\n\nexport namespace PlaceholderService {\n export class PlaceholderSubstitutor {\n private static readonly PLACEHOLDER_CONTENT_PATTERN = /^[a-zA-Z0-9_.\\]\\[]+$/;\n private static readonly PLACEHOLDER_PATTERN = /\\$\\{[a-zA-Z0-9_.\\]\\[]+\\}/;\n private static readonly STARTING_PLACEHOLDER = '$';\n private static readonly CLOSING_PLACEHOLDER = '}';\n private static readonly OPENING_PLACEHOLDER = '{';\n private static readonly NEW_LINE = `\n___\n`;\n\n private static readonly PLACEHOLDER_START =\n PlaceholderSubstitutor.STARTING_PLACEHOLDER + PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n private static readonly PLACEHOLDER_END = PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n\n private stringToResolve: string;\n private scanIndex: number;\n private numberCollectionItemsAsPlaceholder: number;\n private collectionItemIndex: number;\n private fieldIdToSubstitute: string;\n private startSubstitutionIndex: number;\n private isCollecting: boolean;\n private readonly resolvedFormValues = [];\n private readonly pageFormFields: object;\n private readonly originalStringToResolve: string;\n\n private static wrapPlaceholder(str: string): string {\n return `${this.PLACEHOLDER_START}${str}${this.PLACEHOLDER_END}`;\n }\n\n constructor(values: { stringToResolve: string, pageFormFields: object }) {\n this.stringToResolve = values.stringToResolve;\n this.originalStringToResolve = values.stringToResolve;\n this.pageFormFields = values.pageFormFields;\n }\n\n public resolvePlaceholders(): string {\n while (this.hasUnresolvedPlaceholder()) {\n this.resetPlaceholderSubstitutor();\n while (this.doesPlaceholderContainCollectionItems()) {\n while (this.isScanningStringToResolve()) {\n if (this.isStartPlaceholderAndNotCollecting()) {\n this.setStartCollecting();\n } else if (this.isCollecting) {\n if (this.isClosingPlaceholder()) {\n this.substitute();\n } else if (!this.isOpeningPlaceholder()) {\n this.appendCharacter();\n }\n }\n this.scanIndex++;\n }\n this.appendOriginalStringIfCollectionItemAsPlaceholder();\n }\n }\n return this.stringToResolve;\n }\n\n private isScanningStringToResolve(): boolean {\n return this.scanIndex < this.stringToResolve.length;\n }\n\n private doesPlaceholderContainCollectionItems(): boolean {\n return this.numberCollectionItemsAsPlaceholder-- > 0;\n }\n\n private hasUnresolvedPlaceholder(): boolean {\n return this.stringToResolve\n && typeof this.stringToResolve === 'string'\n && !!this.stringToResolve.match(PlaceholderSubstitutor.PLACEHOLDER_PATTERN);\n }\n\n private isStartPlaceholderAndNotCollecting(): boolean {\n return this.isStartingPlaceholder() && !this.isCollecting;\n }\n\n private isOpeningPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.OPENING_PLACEHOLDER;\n }\n\n private isClosingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.CLOSING_PLACEHOLDER;\n }\n\n private resetPlaceholderSubstitutor(): void {\n this.scanIndex = 0;\n this.numberCollectionItemsAsPlaceholder = 1;\n this.collectionItemIndex = 0;\n this.fieldIdToSubstitute = '';\n this.startSubstitutionIndex = -1;\n this.isCollecting = false;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n\n private substitute(): void {\n if (this.isMatchingPlaceholderPattern() && this.isFieldIdInFormFields()) {\n this.updateNumberOfCollectionItemsAsPlaceholder();\n if (this.isFieldIdToSubstituteReferringItself()) {\n this.substituteWithEmptyString();\n } else {\n this.substituteFromFormFields();\n }\n } else {\n this.substituteWithEmptyString();\n }\n this.isCollecting = false;\n this.fieldIdToSubstitute = '';\n }\n\n private appendOriginalStringIfCollectionItemAsPlaceholder(): void {\n if (this.collectionItemIndex < this.numberCollectionItemsAsPlaceholder - 1) {\n this.stringToResolve += PlaceholderSubstitutor.NEW_LINE + this.originalStringToResolve;\n this.collectionItemIndex += 1;\n this.resolvedFormValues[this.collectionItemIndex] = {};\n }\n }\n\n private setStartCollecting(): void {\n this.isCollecting = true;\n this.startSubstitutionIndex = this.scanIndex;\n }\n\n private appendCharacter(): void {\n this.fieldIdToSubstitute += this.stringToResolve.charAt(this.scanIndex);\n }\n\n private isMatchingPlaceholderPattern(): boolean {\n return !!this.fieldIdToSubstitute.match(PlaceholderSubstitutor.PLACEHOLDER_CONTENT_PATTERN);\n }\n\n private isFieldIdInFormFields(): boolean {\n return this.getFieldValue() !== undefined;\n }\n\n private isFieldIdToSubstituteReferringItself(): boolean {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const value = this.getSubstitutionValueOrEmpty();\n return placeholder === value;\n }\n\n private getSubstitutionValueLengthOrZero(): number {\n return this.pageFormFields[this.fieldIdToSubstitute] ? this.getSubstitutionValueOrEmpty().toString().length : 0;\n }\n\n /**\n * Gets the value from `this` field, which could be any of a number of different types:\n * string | number | object | string[] | object[] | maybe others...\n * @returns The value associated with `this` field.\n */\n private getFieldValue(): any {\n if (this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute]) {\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n } else {\n const fieldValue = FormValueService.getFieldValue(this.pageFormFields, this.fieldIdToSubstitute, this.collectionItemIndex);\n this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute] = fieldValue;\n return this.resolvedFormValues[this.collectionItemIndex][this.fieldIdToSubstitute];\n }\n }\n\n private getSubstitutionValueOrEmpty(): string {\n const fieldValue = this.getFieldValue();\n return fieldValue ? fieldValue : '';\n }\n\n private getNumberOfCollectionItemsIfAny(): number {\n const fieldIds = this.fieldIdToSubstitute.split('.');\n let pageFormFieldsClone = FieldsUtils.cloneObject(this.pageFormFields);\n let numberCollectionItemsAsPlaceholder = 1;\n\n // tslint:disable-next-line\n for (let index = 0; index < fieldIds.length; index++) {\n if (FieldsUtils.isCollection(pageFormFieldsClone)) {\n numberCollectionItemsAsPlaceholder = pageFormFieldsClone.length;\n break;\n } else if (pageFormFieldsClone[fieldIds[index]] === undefined) {\n break;\n } else {\n pageFormFieldsClone = pageFormFieldsClone[fieldIds[index]];\n }\n }\n return numberCollectionItemsAsPlaceholder;\n }\n\n private isStartingPlaceholder(): boolean {\n return this.stringToResolve.charAt(this.scanIndex) === PlaceholderSubstitutor.STARTING_PLACEHOLDER;\n }\n\n private updateNumberOfCollectionItemsAsPlaceholder(): void {\n if (this.fieldIdToSubstitute.split('.').length > 1) {\n const newNumber = this.getNumberOfCollectionItemsIfAny();\n this.numberCollectionItemsAsPlaceholder = Math.max(newNumber, this.numberCollectionItemsAsPlaceholder);\n }\n }\n\n private substituteFromFormFields(): void {\n this.doSubstitution(this.getSubstitutionValueOrEmpty());\n this.resetScanIndexAfterSubstitution();\n }\n\n private substituteWithEmptyString(): void {\n this.doSubstitution('');\n this.scanIndex = this.startSubstitutionIndex;\n }\n\n private doSubstitution(value: string): void {\n const placeholder = PlaceholderSubstitutor.wrapPlaceholder(this.fieldIdToSubstitute);\n const replacedString = this.stringToResolve.substring(this.startSubstitutionIndex).replace(placeholder, value);\n this.stringToResolve = this.stringToResolve.substring(0, this.startSubstitutionIndex).concat(replacedString);\n }\n\n private resetScanIndexAfterSubstitution(): void {\n this.scanIndex = this.startSubstitutionIndex + this.getSubstitutionValueLengthOrZero();\n }\n }\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { PlaceholderService } from './services/placeholder.service';\n\n@Directive({ selector: '[ccdLabelSubstitutor]' })\n/**\n * Checks all labels and substitutes any placholders that reference other fields values.\n */\nexport class LabelSubstitutorDirective implements OnInit, OnDestroy {\n\n @Input() public caseField: CaseField;\n @Input() public contextFields: CaseField[] = [];\n @Input() public formGroup: FormGroup;\n @Input() public elementsToSubstitute: string[] = ['label', 'hint_text'];\n\n private initialLabel: string;\n private initialHintText: string;\n\n constructor(\n private readonly fieldsUtils: FieldsUtils,\n private readonly placeholderService: PlaceholderService\n ) {}\n\n public ngOnInit(): void {\n this.initialLabel = this.caseField.label;\n this.initialHintText = this.caseField.hint_text;\n this.formGroup = this.formGroup || new FormGroup({});\n\n const fields: object = this.getReadOnlyAndFormFields();\n\n if (this.shouldSubstitute('label')) {\n this.caseField.label = this.resolvePlaceholders(fields, this.caseField.label);\n }\n if (this.shouldSubstitute('hint_text')) {\n this.caseField.hint_text = this.resolvePlaceholders(fields, this.caseField.hint_text);\n }\n if (this.shouldSubstitute('value')) {\n this.caseField.value = this.resolvePlaceholders(fields, this.caseField.value);\n }\n }\n\n public ngOnDestroy(): void {\n this.caseField.label = this.initialLabel;\n this.caseField.hint_text = this.initialHintText;\n }\n\n private shouldSubstitute(element: string): boolean {\n return this.elementsToSubstitute.find(e => e === element) !== undefined;\n }\n\n private getReadOnlyAndFormFields(): object {\n const formFields: object = this.getFormFieldsValuesIncludingDisabled();\n // TODO: Delete following line when @Input contextFields is fixed - https://tools.hmcts.net/jira/browse/RDM-3504\n const uniqueContextFields: CaseField[] = this.removeDuplicates(this.contextFields);\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(uniqueContextFields, formFields);\n }\n\n private removeDuplicates(original: CaseField[]): CaseField[] {\n const unique: CaseField[] = [];\n original.forEach(caseField => {\n const isUnique = unique.filter(e => e.id === caseField.id).length === 0;\n if (isUnique) {\n unique.push(caseField);\n }\n });\n return unique;\n }\n\n private getFormFieldsValuesIncludingDisabled(): object {\n return this.formGroup.getRawValue();\n }\n\n private resolvePlaceholders(fields: object, stringToResolve: string): string {\n return this.placeholderService.resolvePlaceholders(fields, stringToResolve);\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { LabelSubstitutorDirective } from './label-substitutor.directive';\n\n@NgModule({\n declarations: [\n LabelSubstitutorDirective\n ],\n exports: [\n LabelSubstitutorDirective\n ],\n providers: [\n FieldsUtils,\n CurrencyPipe,\n ]\n})\nexport class LabelSubstitutorModule {}\n","import { AfterContentInit, Directive, ElementRef, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[focusElement]'\n})\n/**\n * Focuses the host element after the content of the view has been initialised. Works on writable fields. If the\n * directive is used on more than one element, the last element to be initialised will be in focus.\n * NOTE:\n * The directive focuses on the element only for the very first time when the content into the component's view, the\n * view that the directive is in is initialised. Refocusing the element will require explicit focusing for e.g. by\n * calling this directives focus() method from the host component.\n */\nexport class FocusElementDirective implements AfterContentInit {\n\n constructor(private readonly el: ElementRef, private readonly renderer: Renderer2) {\n }\n\n public ngAfterContentInit(): void {\n this.focus();\n }\n\n public focus(): void {\n if (this.el.nativeElement) {\n const focusElement = this.renderer.selectRootElement(this.el.nativeElement, true);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FocusElementDirective } from './focus-element.directive';\n\n@NgModule({\n declarations: [\n FocusElementDirective\n ],\n exports: [\n FocusElementDirective\n ]\n})\nexport class FocusElementModule {\n}\n","import { Type } from 'class-transformer';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Orderable } from '../../../domain/order/orderable.model';\nimport { WizardPageField } from './wizard-page-field.model';\n\n// @dynamic\nexport class WizardPage implements Orderable {\n\n public id: string;\n public label: string;\n public order?: number;\n\n @Type(() => WizardPageField)\n public wizard_page_fields: WizardPageField[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public show_condition?: string;\n\n public parsedShowCondition: ShowCondition;\n\n public getCol1Fields(): CaseField[] {\n return this.case_fields?.filter(f =>\n !f.wizardProps.page_column_no || f.wizardProps.page_column_no === 1);\n }\n public getCol2Fields(): CaseField[] {\n return this.case_fields?.filter(f => f.wizardProps.page_column_no === 2);\n }\n\n public isMultiColumn(): boolean {\n return this.getCol2Fields()?.length > 0;\n }\n}\n","import { Type } from 'class-transformer';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { CaseField } from '../definition/case-field.model';\n\n// @dynamic\nexport class CaseEventTrigger {\n\n public id: string;\n public name: string;\n public description?: string;\n public case_id?: string;\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public event_token: string;\n\n @Type(() => WizardPage)\n public wizard_pages: WizardPage[];\n\n public show_summary?: boolean;\n public show_event_notes?: boolean;\n public end_button_label?: string;\n public can_save_draft?: boolean;\n\n public hasFields(): boolean {\n return this.case_fields && this.case_fields.length !== 0;\n }\n\n public hasPages(): boolean {\n return this.wizard_pages && this.wizard_pages.length !== 0;\n }\n}\n","import { CaseDetails } from './case-details.model';\n\nexport const DRAFT_PREFIX = 'DRAFT';\nexport const DRAFT_QUERY_PARAM = 'draft';\nexport class Draft {\n\n public id: string;\n public document?: CaseDetails;\n public type?: string;\n public created?: string;\n public updated?: string;\n public static stripDraftId(draftId: string): string {\n return draftId.slice(DRAFT_PREFIX.length);\n }\n\n public static isDraft(id: string): boolean {\n return String(id).startsWith(DRAFT_PREFIX);\n }\n}\n","import { ChallengedAccessRequest } from '../../../domain/case-view/challenged-access-request.model';\nimport { RoleCategory, RoleGrantTypeCategory, RoleRequestPayload } from '../../../domain/case-view/role-request.model';\nimport { SpecificAccessRequest } from '../../../domain/case-view/specific-access-request.model';\n\nexport class CaseAccessUtils {\n // User role mapping\n public static readonly JUDGE_ROLE = 'judge';\n public static readonly JUDGE_ROLE_CATEGORY = 'JUDICIAL';\n public static readonly JUDGE_ROLE_NAME = 'judicial';\n public static readonly ADMIN_ROLE = 'admin';\n public static readonly ADMIN_ROLE_CATEGORY = 'ADMIN';\n public static readonly ADMIN_ROLE_NAME = 'admin';\n public static readonly PROFESSIONAL_ROLE = 'solicitor';\n public static readonly PROFESSIONAL_ROLE_CATEGORY = 'PROFESSIONAL';\n public static readonly PROFESSIONAL_ROLE_NAME = 'professional';\n public static readonly LEGAL_OPERATIONS_ROLE = 'caseworker';\n public static readonly LEGAL_OPERATIONS_ROLE_CATEGORY = 'LEGAL_OPERATIONS';\n public static readonly LEGAL_OPERATIONS_ROLE_NAME = 'legal-ops';\n public static readonly CITIZEN_ROLE = 'citizen';\n public static readonly CITIZEN_ROLE_CATEGORY = 'CITIZEN';\n public static readonly CITIZEN_ROLE_NAME = 'citizen';\n\n public getMappedRoleCategory(roles: string[] = [], roleCategories: string[] = []): RoleCategory {\n\n const roleKeywords: string[] = roles.join().split('-').join().split(',');\n\n if (this.roleOrCategoryExists(CaseAccessUtils.JUDGE_ROLE, CaseAccessUtils.JUDGE_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.JUDGE_ROLE_CATEGORY;\n } else if (this.roleOrCategoryExists(CaseAccessUtils.PROFESSIONAL_ROLE,\n CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY;\n } else if (this.roleOrCategoryExists(CaseAccessUtils.CITIZEN_ROLE,\n CaseAccessUtils.CITIZEN_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.CITIZEN_ROLE_CATEGORY;\n } else if (this.roleOrCategoryExists(CaseAccessUtils.ADMIN_ROLE,\n CaseAccessUtils.ADMIN_ROLE_CATEGORY, roleKeywords, roleCategories)) {\n return CaseAccessUtils.ADMIN_ROLE_CATEGORY;\n } else {\n return CaseAccessUtils.LEGAL_OPERATIONS_ROLE_CATEGORY;\n }\n\n }\n\n public roleOrCategoryExists(roleKeyword: string, roleCategory: string, roleKeywords: string[], roleCategories: string[]): boolean {\n const categoryExists = roleCategories.indexOf(roleCategory) > -1;\n const keywordExists = roleKeywords.indexOf(roleKeyword) > -1;\n return categoryExists ? categoryExists : keywordExists;\n }\n\n public getAMRoleName(accessType: string, aMRole: RoleCategory): string {\n\n let roleName = '';\n\n switch (aMRole) {\n case CaseAccessUtils.JUDGE_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.JUDGE_ROLE_NAME}`;\n break;\n case CaseAccessUtils.PROFESSIONAL_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.PROFESSIONAL_ROLE_NAME}`;\n break;\n case CaseAccessUtils.CITIZEN_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.CITIZEN_ROLE_NAME}`;\n break;\n case CaseAccessUtils.ADMIN_ROLE_CATEGORY:\n roleName = `${accessType}-access-${CaseAccessUtils.ADMIN_ROLE_NAME}`;\n break;\n default:\n roleName = `${accessType}-access-${CaseAccessUtils.LEGAL_OPERATIONS_ROLE_NAME}`;\n break;\n }\n\n return roleName;\n\n }\n\n public getAMPayload(\n assignerId: string,\n actorId: string,\n roleName: string,\n roleCategory: RoleCategory,\n grantType: RoleGrantTypeCategory,\n caseId: string,\n details: ChallengedAccessRequest | SpecificAccessRequest,\n beginTime: Date = null,\n endTime: Date = null\n ): RoleRequestPayload {\n const process = (details as ChallengedAccessRequest).caseReference !== undefined ? 'challenged-access' : 'specific-access';\n const payload: RoleRequestPayload = {\n roleRequest: {\n assignerId,\n process,\n reference: `${caseId}/${roleName}/${actorId}`,\n replaceExisting: true\n },\n requestedRoles: [{\n actorIdType: 'IDAM',\n actorId,\n roleType: 'CASE',\n roleName,\n classification: 'PUBLIC',\n roleCategory,\n grantType,\n beginTime,\n endTime,\n attributes: {\n caseId\n },\n notes: [{\n userId: assignerId,\n time: new Date(),\n comment: JSON.stringify(details)\n }]\n }]\n };\n\n return payload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Orderable } from '../../domain/order/orderable.model';\n\n// @dynamic\n@Injectable()\nexport class OrderService {\n\n /**\n * @deprecated Use `sort` function instead or `compareAsc`\n */\n public sortAsc: (a:Orderable, b:Orderable)=> number = OrderService.DEFAULT_COMPARE_FUNCTION;\n private static readonly DEFAULT_COMPARE_FUNCTION = (a: Orderable, b: Orderable) => {\n const aOrdered = a.order === 0 || a.order;\n const bOrdered = b.order === 0 || b.order;\n\n if (!aOrdered) {\n return !bOrdered ? 0 : 1;\n }\n\n if (!bOrdered) {\n return -1;\n }\n\n return a.order - b.order;\n }\n\n /**\n * Clone and sort array. Ascending order used by default.\n *\n * @param array Array to sort\n * @returns Orderable[] Sorted clone array.\n */\n public sort<T extends Orderable>(array: T[], sortingFunction = this.sortAsc): T[] {\n return array\n .slice()\n .sort(sortingFunction);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { ComplexFieldOverride } from '../domain/wizard-page-field-complex-override.model';\nimport { WizardPageField } from '../domain/wizard-page-field.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WizardPageFieldToCaseFieldMapper {\n\n public mapAll(wizardPageFields: WizardPageField[], caseFields: CaseField[]): CaseField[] {\n return wizardPageFields.map(wizardField => {\n return this.map(wizardField, caseFields);\n });\n }\n\n private map(wizardPageField: WizardPageField, caseFields: CaseField[]): CaseField {\n\n const caseField: CaseField = caseFields.find(e => e.id === wizardPageField.case_field_id);\n caseField.wizardProps = wizardPageField;\n caseField.order = wizardPageField.order;\n\n this.fixShowConditionPath(caseField, '');\n\n if (wizardPageField.complex_field_overrides && wizardPageField.complex_field_overrides.length > 0) {\n wizardPageField.complex_field_overrides.forEach((override: ComplexFieldOverride) => {\n this.processComplexFieldOverride(override, caseField, caseFields);\n });\n }\n\n // this will fix the CaseLink type as we exclude it in ccdFieldsFilter directive\n this.hideParentIfAllChildrenHidden(caseField);\n\n return caseField;\n }\n\n private processComplexFieldOverride(override: ComplexFieldOverride, caseField: CaseField, caseFields: CaseField[]) {\n const caseFieldIds = override.complex_field_element_id.split('.');\n let case_field_leaf: CaseField;\n\n const children = this.getCaseFieldChildren(caseField);\n\n if (children.length > 0) {\n const [_, ...tail] = caseFieldIds;\n case_field_leaf = this.getCaseFieldLeaf(tail, children);\n } else {\n case_field_leaf = this.getCaseFieldLeaf(caseFieldIds, caseFields);\n }\n\n if (override.display_context !== 'HIDDEN') {\n case_field_leaf.hidden = false;\n case_field_leaf.display_context = override.display_context;\n if (override.label && override.label.length > 0) {\n case_field_leaf.label = override.label;\n }\n if (override.hint_text && override.hint_text.length > 0) {\n case_field_leaf.hint_text = override.hint_text;\n }\n if (override.show_condition && override.show_condition.length > 0) {\n case_field_leaf.show_condition = override.show_condition;\n }\n } else {\n case_field_leaf.hidden = true;\n case_field_leaf.display_context = override.display_context;\n }\n }\n\n private fixShowConditionPath(caseField: CaseField, pathPrefix: string) {\n if (caseField.show_condition) {\n caseField.show_condition = ShowCondition.addPathPrefixToCondition(caseField.show_condition, pathPrefix);\n }\n\n const childrenCaseFields = this.getCaseFieldChildren(caseField);\n\n childrenCaseFields.forEach(collectionCaseField => {\n this.fixShowConditionPath(collectionCaseField, this.preparePathPrefix(pathPrefix, caseField.id));\n });\n }\n\n private preparePathPrefix(pathPrefix: string, caseField: string) {\n return pathPrefix.length === 0 ? caseField : pathPrefix + '.' + caseField;\n }\n\n private getCaseFieldLeaf(caseFieldId: string[], caseFields: CaseField[]): CaseField {\n const [head, ...tail] = caseFieldId;\n if (caseFieldId.length === 1) {\n const caseLeaf = caseFields.find(e => e.id === head);\n if (!caseLeaf) {\n throw new Error(`Cannot find leaf for caseFieldId ${caseFieldId.join('.')}`);\n }\n return caseLeaf;\n } else if (caseFieldId.length > 1) {\n const caseField = caseFields.find(e => e.id === head);\n const children = this.getCaseFieldChildren(caseField);\n\n if (children.length === 0) {\n throw new Error(`field_type or complex_fields missing for ${caseFieldId.join('.')}`);\n }\n return this.getCaseFieldLeaf(tail, children);\n } else {\n throw new Error(`Cannot find leaf for caseFieldId ${caseFieldId.join('.')}`);\n }\n }\n\n private hideParentIfAllChildrenHidden(caseField: CaseField) {\n\n const childrenCaseFields = this.getCaseFieldChildren(caseField);\n\n childrenCaseFields.forEach(e => this.hideParentIfAllChildrenHidden(e));\n\n if (childrenCaseFields.length > 0 && this.allCaseFieldsHidden(childrenCaseFields)) {\n caseField.hidden = true;\n }\n }\n\n private getCaseFieldChildren(caseField: CaseField) {\n let childrenCaseFields = [];\n if (caseField.isCollection()) {\n childrenCaseFields = caseField.field_type.collection_field_type.complex_fields || [];\n } else if (caseField.isComplex()) {\n childrenCaseFields = caseField.field_type.complex_fields || [];\n }\n return childrenCaseFields;\n }\n\n private allCaseFieldsHidden(children: CaseField[]): boolean {\n return !children.some(e => e.hidden !== true);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { ConnectableObservable, Observable, Observer } from 'rxjs';\nimport { publish, refCount } from 'rxjs/operators';\nimport { AlertLevel } from '../../domain/alert/alert-level.model';\nimport { Alert } from '../../domain/alert/alert.model';\n\n@Injectable()\nexport class AlertService {\n // the preserved messages\n public preservedError = '';\n public preservedWarning = '';\n public preservedSuccess = '';\n\n // TODO: Remove\n public message: string;\n public level: AlertLevel;\n\n public successes: ConnectableObservable<Alert>;\n public errors: ConnectableObservable<Alert>;\n public warnings: ConnectableObservable<Alert>;\n // TODO: Remove\n public alerts: ConnectableObservable<Alert>;\n\n private successObserver: Observer<Alert>;\n private errorObserver: Observer<Alert>;\n private warningObserver: Observer<Alert>;\n // TODO: Remove\n private alertObserver: Observer<Alert>;\n\n private preserveAlerts = false;\n\n constructor(private readonly router: Router) {\n\n this.successes = Observable\n .create(observer => this.successObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.successes.subscribe();\n\n this.errors = Observable\n .create(observer => this.errorObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.errors.subscribe();\n\n this.warnings = Observable\n .create(observer => this.warningObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.warnings.subscribe();\n\n // TODO: Remove\n this.alerts = Observable\n .create(observer => this.alertObserver = observer).pipe(\n publish(),\n refCount()\n );\n this.alerts.subscribe();\n\n this.router\n .events\n .subscribe(event => {\n if (event instanceof NavigationStart) {\n // if there is no longer a preserve alerts setting for the page then clear all observers and preserved messages\n if (!this.preserveAlerts) {\n this.clear();\n }\n // if not, then set the preserving of alerts to false so rendering to a new page\n this.preserveAlerts = false;\n }\n });\n }\n\n public clear(): void {\n this.successObserver.next(null);\n this.errorObserver.next(null);\n this.warningObserver.next(null);\n this.preservedError = '';\n this.preservedWarning = '';\n this.preservedSuccess = '';\n\n // EUI-3381.\n this.alertObserver.next(null);\n this.message = '';\n }\n\n public error(message: string): void {\n this.preservedError = this.preserveMessages(message);\n const alert: Alert = { level: 'error', message };\n this.errorObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public warning(message: string): void {\n this.preservedWarning = this.preserveMessages(message);\n const alert: Alert = { level: 'warning', message };\n this.warningObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public success(message: string, preserve = false): void {\n this.preservedSuccess = this.preserveMessages(message);\n this.preserveAlerts = preserve || this.preserveAlerts;\n const alert: Alert = { level: 'success', message };\n this.successObserver.next(alert);\n\n // EUI-3381.\n this.push(alert);\n }\n\n public setPreserveAlerts(preserve: boolean, urlInfo?: string[]) {\n // if there is no url setting then just preserve the messages\n if (!urlInfo) {\n this.preserveAlerts = preserve;\n } else {\n // check if the url includes the sting given\n this.preserveAlerts = this.currentUrlIncludesInfo(preserve, urlInfo);\n }\n }\n\n public currentUrlIncludesInfo(preserve: boolean, urlInfo: string[]): boolean {\n // loop through the list of strings and check the router includes all of them\n for (const urlSnip of urlInfo) {\n if (!this.router.url.includes(urlSnip)) {\n // return the opposite boolean value if the router does not include one of the strings\n return !preserve;\n }\n }\n // return the boolean value if all strings are in the url\n return preserve;\n }\n\n public isPreserveAlerts(): boolean {\n return this.preserveAlerts;\n }\n\n public preserveMessages(message: string): string {\n // preserve the messages if set to preserve them\n if (this.isPreserveAlerts()) {\n return message;\n } else {\n return '';\n }\n }\n\n // TODO: Remove\n public push(msgObject) {\n this.message = msgObject.message;\n this.level = msgObject.level;\n\n this.alertObserver.next({\n level: this.level,\n message: this.message\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { UserDetails } from '../../../domain/user/user-details.model';\nimport { TaskRespone } from '../../../domain/work-allocation/task-response.model';\nimport { TaskSearchParameter } from '../../../domain/work-allocation/task-search-parameter.model';\nimport { TaskPayload } from '../../../domain/work-allocation/TaskPayload';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\n\nexport const MULTIPLE_TASKS_FOUND = 'More than one task found!';\n\n@Injectable()\nexport class WorkAllocationService {\n\n public static iACCaseOfficer = 'caseworker-ia-caseofficer';\n public static iACAdmOfficer = 'caseworker-ia-admofficer';\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService,\n private readonly alertService: AlertService\n ) {\n }\n\n /**\n * Call the API to get tasks matching the search criteria.\n * @param searchRequest The search parameters that specify which tasks to match.\n */\n public searchTasks(searchRequest: TaskSearchParameter): Observable<object> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/searchForCompletable`;\n return this.http\n .post(url, {searchRequest}, null, false)\n .pipe(\n map(response => response),\n catchError(error => {\n this.errorService.setError(error);\n // explicitly eat away 401 error and 400 error\n if (error && error.status && (error.status === 401 || error.status === 400)) {\n // do nothing\n console.log('error status 401 or 400', error);\n } else {\n return throwError(error);\n }\n })\n );\n }\n\n /**\n * Call the API to assign a task.\n * @param taskId specifies which task should be assigned.\n * @param userId specifies the user the task should be assigned to.\n */\n public assignTask(taskId: string, userId: string): Observable<any> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/assign`;\n return this.http\n .post(url, {userId})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n /**\n * Call the API to complete a task.\n * @param taskId specifies which task should be completed.\n */\n public completeTask(taskId: string): Observable<any> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/complete`;\n return this.http\n .post(url, {})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n // this will subscribe to get the user details and decide whether to display an error message\n this.http.get(this.appConfig.getUserInfoApiUrl()).pipe(map(response => response)).subscribe((response) => {\n this.handleTaskCompletionError(response);\n });\n return throwError(error);\n })\n );\n }\n\n /**\n * Call the API to assign and complete a task.\n * @param taskId specifies which task should be completed.\n */\n public assignAndCompleteTask(taskId: string): Observable<any> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/complete`;\n return this.http\n .post(url, {\n completion_options: {\n assign_and_complete: true\n }\n })\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n // this will subscribe to get the user details and decide whether to display an error message\n this.http.get(this.appConfig.getUserInfoApiUrl()).pipe(map(response => response)).subscribe((response) => {\n this.handleTaskCompletionError(response);\n });\n return throwError(error);\n })\n );\n }\n\n /**\n * Handles the response from the observable to get the user details when task is completed.\n * @param response is the response given from the observable which contains the user detaild.\n */\n public handleTaskCompletionError(response: any): void {\n const userDetails = response as UserDetails;\n if (this.userIsCaseworker(userDetails.userInfo.roles)) {\n // when submitting the completion of task if not yet rendered cases/case confirm then preserve the alert for re-rendering\n this.alertService.setPreserveAlerts(true, ['cases/case', 'submit']);\n this.alertService.warning('A task could not be completed successfully. Please complete the task associated with the case manually.');\n }\n }\n\n /**\n * Returns true if the user's role is equivalent to a caseworker.\n * @param roles is the list of roles found from the current user.\n */\n public userIsCaseworker(roles: string[]): boolean {\n const lowerCaseRoles = roles.map(role => role.toLowerCase());\n // When/if lib & target permanently change to es2016, replace indexOf with includes\n return (lowerCaseRoles.indexOf(WorkAllocationService.iACCaseOfficer) !== -1)\n || (lowerCaseRoles.indexOf(WorkAllocationService.iACAdmOfficer) !== -1);\n }\n\n /**\n * Look for open tasks for a case and event combination. There are 5 possible scenarios:\n * 1. No tasks found => Success.\n * 2. One task found => Mark as done => Success.\n * 3. One task found => Mark as done throws error => Failure.\n * 4. More than one task found => Failure.\n * 5. Search call throws an error => Failure.\n * @param ccdId The ID of the case to find tasks for.\n * @param eventId The ID of the event to find tasks for.\n */\n public completeAppropriateTask(ccdId: string, eventId: string, jurisdiction: string, caseTypeId: string): Observable<any> {\n const taskSearchParameter: TaskSearchParameter = {\n ccdId,\n eventId,\n jurisdiction,\n caseTypeId\n };\n return this.searchTasks(taskSearchParameter)\n .pipe(\n map((response: any) => {\n const tasks: any[] = response.tasks;\n if (tasks && tasks.length > 0) {\n if (tasks.length === 1) {\n this.completeTask(tasks[0].id).subscribe();\n } else {\n // This is a problem. Throw an appropriate error.\n throw new Error(MULTIPLE_TASKS_FOUND);\n }\n }\n return true; // All good. Nothing to see here.\n }),\n catchError(error => {\n // Simply rethrow it.\n return throwError(error);\n })\n );\n }\n\n /**\n * Return tasks for case and event.\n */\n public getTasksByCaseIdAndEventId(eventId: string, caseId: string, caseType: string, jurisdiction: string): Observable<TaskPayload> {\n return this.http.get(`${this.appConfig.getWorkAllocationApiUrl()}/case/tasks/${caseId}/event/${eventId}/caseType/${caseType}/jurisdiction/${jurisdiction}`);\n }\n\n /**\n * Call the API to get a task\n */\n public getTask(taskId: string): Observable<TaskRespone> {\n return this.http.get(`${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}`);\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@Injectable()\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.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 'toolkit-loading-' + timestamp; // format: [source-library]-[unique incrementing number]\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map, tap } from 'rxjs/operators';\n\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { ShowCondition } from '../../../directives';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CasePrintDocument } from '../../../domain/case-view/case-print-document.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { ChallengedAccessRequest } from '../../../domain/case-view/challenged-access-request.model';\nimport { RoleAssignmentResponse } from '../../../domain/case-view/role-assignment-response.model';\nimport { RoleCategory, RoleRequestPayload } from '../../../domain/case-view/role-request.model';\nimport { SpecificAccessRequest } from '../../../domain/case-view/specific-access-request.model';\nimport { Draft } from '../../../domain/draft.model';\nimport { UserInfo } from '../../../domain/user/user-info.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\nimport { LoadingService } from '../../../services/loading/loading.service';\nimport { OrderService } from '../../../services/order/order.service';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { CaseAccessUtils } from '../case-access-utils';\nimport { WizardPage } from '../domain/wizard-page.model';\nimport { WizardPageFieldToCaseFieldMapper } from './wizard-page-field-to-case-field.mapper';\nimport { WorkAllocationService } from './work-allocation.service';\n\n@Injectable()\nexport class CasesService {\n // Internal (UI) API\n public static readonly V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';\n public static readonly V2_MEDIATYPE_START_CASE_TRIGGER =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-case-trigger.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_START_EVENT_TRIGGER =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-event-trigger.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_START_DRAFT_TRIGGER =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-start-draft-trigger.v2+json;charset=UTF-8';\n\n // External (Data Store) API\n\n public static readonly V2_MEDIATYPE_CASE_DOCUMENTS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.case-documents.v2+json;charset=UTF-8';\n\n public static readonly V2_MEDIATYPE_CASE_DATA_VALIDATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.case-data-validate.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_CREATE_EVENT =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-event.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_CREATE_CASE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-case.v2+json;charset=UTF-8';\n\n public static readonly PUI_CASE_MANAGER = 'pui-case-manager';\n\n /**\n * @deprecated Use `CasesService::getCaseView` instead\n */\n public get = this.getCaseView;\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly orderService: OrderService,\n private readonly errorService: HttpErrorService,\n private readonly wizardPageFieldToCaseFieldMapper: WizardPageFieldToCaseFieldMapper,\n private readonly workAllocationService: WorkAllocationService,\n private readonly loadingService: LoadingService,\n private readonly sessionStorageService: SessionStorageService\n ) {\n }\n\n public getCaseView(jurisdictionId: string,\n caseTypeId: string,\n caseId: string): Observable<CaseView> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types/${caseTypeId}`\n + `/cases/${caseId}`;\n\n const loadingToken = this.loadingService.register();\n return this.http\n .get(url)\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n }),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getCaseViewV2(caseId: string): Observable<CaseView> {\n const url = `${this.appConfig.getCaseDataUrl()}/internal/cases/${caseId}`;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CASE_VIEW)\n .set('Content-Type', 'application/json');\n\n const loadingToken = this.loadingService.register();\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n }),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getEventTrigger(caseTypeId: string,\n eventTriggerId: string,\n caseId?: string,\n ignoreWarning?: string): Observable<CaseEventTrigger> {\n ignoreWarning = undefined !== ignoreWarning ? ignoreWarning : 'false';\n\n const url = this.buildEventTriggerUrl(caseTypeId, eventTriggerId, caseId, ignoreWarning);\n\n let headers = new HttpHeaders();\n headers = headers.set('experimental', 'true');\n headers = headers.set('Content-Type', 'application/json');\n\n if (Draft.isDraft(caseId)) {\n headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_DRAFT_TRIGGER);\n } else if (caseId !== undefined && caseId !== null) {\n headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_EVENT_TRIGGER);\n } else {\n headers = headers.set('Accept', CasesService.V2_MEDIATYPE_START_CASE_TRIGGER);\n }\n\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => {\n return FieldsUtils.handleNestedDynamicLists(body);\n }),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n }),\n map((p: object) => plainToClass(CaseEventTrigger, p)),\n tap(eventTrigger => this.initialiseEventTrigger(eventTrigger))\n );\n }\n\n public createEvent(caseDetails: CaseView, eventData: CaseEventData): Observable<object> {\n const caseId = caseDetails.case_id;\n const url = this.appConfig.getCaseDataUrl() + `/cases/${caseId}/events`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CREATE_EVENT)\n .set('Content-Type', 'application/json');\n\n return this.http\n .post(url, eventData, {headers, observe: 'body'})\n .pipe(\n map(body => this.processResponseBody(body, eventData)),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public validateCase(ctid: string, eventData: CaseEventData, pageId: string): Observable<object> {\n const pageIdString = pageId ? '?pageId=' + pageId : '';\n const url = this.appConfig.getCaseDataUrl()\n + `/case-types/${ctid}/validate${pageIdString}`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE)\n .set('Content-Type', 'application/json');\n\n return this.http\n .post(url, eventData, {headers, observe: 'body'})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public createCase(ctid: string, eventData: CaseEventData): Observable<object> {\n let ignoreWarning = 'false';\n\n if (eventData.ignore_warning) {\n ignoreWarning = 'true';\n }\n const url = this.appConfig.getCaseDataUrl()\n + `/case-types/${ctid}/cases?ignore-warning=${ignoreWarning}`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CREATE_CASE)\n .set('Content-Type', 'application/json');\n\n return this.http\n .post(url, eventData, {headers, observe: 'body'})\n .pipe(\n map(body => this.processResponseBody(body, eventData)),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public getPrintDocuments(caseId: string): Observable<CasePrintDocument[]> {\n const url = this.appConfig.getCaseDataUrl()\n + `/cases/${caseId}`\n + `/documents`;\n\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CasesService.V2_MEDIATYPE_CASE_DOCUMENTS)\n .set('Content-Type', 'application/json');\n\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => body.documentResources),\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public getCourtOrHearingCentreName(locationId: number): Observable<any> {\n return this.http.get(`${this.appConfig.getLocationRefApiUrl()}/building-locations?epimms_id=${locationId}`);\n }\n\n public createChallengedAccessRequest(caseId: string, request: ChallengedAccessRequest): Observable<RoleAssignmentResponse> {\n // Assignment API endpoint\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n\n const camUtils = new CaseAccessUtils();\n let userInfo: UserInfo;\n if (userInfoStr) {\n userInfo = JSON.parse(userInfoStr);\n }\n\n const roleCategory: RoleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);\n const roleName = camUtils.getAMRoleName('challenged', roleCategory);\n const beginTime = new Date();\n const endTime = new Date(new Date().setUTCHours(23, 59, 59, 999));\n const id = userInfo.id ? userInfo.id : userInfo.uid;\n const payload: RoleRequestPayload = camUtils.getAMPayload(id,\n id,\n roleName,\n roleCategory,\n 'CHALLENGED',\n caseId,\n request,\n beginTime,\n endTime);\n\n return this.http.post(`/api/challenged-access-request`, payload);\n }\n\n public createSpecificAccessRequest(caseId: string, sar: SpecificAccessRequest): Observable<RoleAssignmentResponse> {\n // Assignment API endpoint\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n\n const camUtils = new CaseAccessUtils();\n let userInfo: UserInfo;\n if (userInfoStr) {\n userInfo = JSON.parse(userInfoStr);\n }\n\n const roleCategory: RoleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);\n const roleName = camUtils.getAMRoleName('specific', roleCategory);\n const id = userInfo.id ? userInfo.id : userInfo.uid;\n const payload: RoleRequestPayload = camUtils.getAMPayload(null, id,\n roleName, roleCategory, 'SPECIFIC', caseId, sar);\n\n payload.roleRequest = {\n ...payload.roleRequest,\n process: 'specific-access',\n replaceExisting: true,\n assignerId: payload.requestedRoles[0].actorId,\n reference: `${caseId}/${roleName}/${payload.requestedRoles[0].actorId}`\n };\n\n payload.requestedRoles[0] = {\n ...payload.requestedRoles[0],\n roleName: 'specific-access-requested',\n roleCategory,\n classification: 'PRIVATE',\n endTime: new Date(new Date().setDate(new Date().getDate() + 30)),\n beginTime: null,\n grantType: 'BASIC',\n readOnly: true\n };\n\n payload.requestedRoles[0].attributes = {\n ...payload.requestedRoles[0].attributes,\n requestedRole: roleName\n };\n\n payload.requestedRoles[0].notes[0] = {\n ...payload.requestedRoles[0].notes[0],\n userId: payload.requestedRoles[0].actorId\n };\n return this.http.post(\n `/api/specific-access-request`,\n payload\n );\n }\n\n private buildEventTriggerUrl(caseTypeId: string,\n eventTriggerId: string,\n caseId?: string,\n ignoreWarning?: string): string {\n let url = this.appConfig.getCaseDataUrl() + `/internal`;\n\n if (Draft.isDraft(caseId)) {\n url += `/drafts/${caseId}`\n + `/event-trigger`\n + `?ignore-warning=${ignoreWarning}`;\n } else if (caseTypeId === undefined || caseTypeId === null) {\n url += `/cases/${caseId}`\n + `/event-triggers/${eventTriggerId}`\n + `?ignore-warning=${ignoreWarning}`;\n } else {\n url += `/case-types/${caseTypeId}`\n + `/event-triggers/${eventTriggerId}`\n + `?ignore-warning=${ignoreWarning}`;\n }\n\n return url;\n }\n\n private processResponseBody(body: any, eventData: CaseEventData): any {\n this.processTasksOnSuccess(body, eventData.event);\n return body;\n }\n\n private initialiseEventTrigger(eventTrigger: CaseEventTrigger) {\n if (!eventTrigger.wizard_pages) {\n eventTrigger.wizard_pages = [];\n }\n\n eventTrigger.wizard_pages.forEach((wizardPage: WizardPage) => {\n wizardPage.parsedShowCondition = ShowCondition.getInstance(wizardPage.show_condition);\n wizardPage.case_fields = this.orderService.sort(\n this.wizardPageFieldToCaseFieldMapper.mapAll(wizardPage.wizard_page_fields, eventTrigger.case_fields));\n });\n }\n\n private processTasksOnSuccess(caseData: any, eventData: any): void {\n // The following code is work allocation 1 related\n if (this.appConfig.getWorkAllocationApiUrl().toLowerCase() === 'workallocation') {\n // This is used a feature toggle to\n // control the work allocation\n if (!this.isPuiCaseManager()) {\n this.workAllocationService.completeAppropriateTask(caseData.id, eventData.id, caseData.jurisdiction, caseData.case_type)\n .subscribe(() => {\n // Success. Do nothing.\n }, error => {\n // Show an appropriate warning about something that went wrong.\n console.warn('Could not process tasks for this case event', error);\n });\n }\n }\n }\n\n /*\n Checks if the user has role of pui-case-manager and returns true or false\n */\n private isPuiCaseManager(): boolean {\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n if (userInfoStr) {\n const userInfo: UserInfo = JSON.parse(userInfoStr);\n return userInfo && userInfo.roles && (userInfo.roles.indexOf(CasesService.PUI_CASE_MANAGER) !== -1);\n }\n return false;\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { CaseEventData } from '../../domain/case-event-data.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\nimport { HttpErrorService, HttpService } from '../http';\n\n@Injectable()\nexport class DraftService {\n\n public static readonly V2_MEDIATYPE_DRAFT_CREATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-create.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_UPDATE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-update.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_READ =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-read.v2+json;charset=UTF-8';\n public static readonly V2_MEDIATYPE_DRAFT_DELETE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-draft-delete.v2+json;charset=UTF-8';\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {}\n\n public createDraft(ctid: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_CREATE)\n .set('Content-Type', 'application/json');\n return this.http\n .post(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public updateDraft(ctid: string, draftId: string, eventData: CaseEventData): Observable<Draft> {\n const saveDraftEndpoint = this.appConfig.getCreateOrUpdateDraftsUrl(ctid) + draftId;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_UPDATE)\n .set('Content-Type', 'application/json');\n return this.http\n .put(saveDraftEndpoint, eventData, {headers, observe: 'body'})\n .pipe(catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n }));\n }\n\n public getDraft(draftId: string): Observable<CaseView> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_READ)\n .set('Content-Type', 'application/json');\n return this.http\n .get(url, {headers, observe: 'body'})\n .pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public deleteDraft(draftId: string): Observable<{} | any> {\n const url = this.appConfig.getViewOrDeleteDraftsUrl(draftId.slice(DRAFT_PREFIX.length));\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', DraftService.V2_MEDIATYPE_DRAFT_DELETE)\n .set('Content-Type', 'application/json');\n return this.http\n .delete(url, {headers, observe: 'body'}).pipe(\n catchError((error: any): any => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n\n public createOrUpdateDraft(caseTypeId: string, draftId: string, caseEventData: CaseEventData): Observable<Draft> {\n if (!draftId) {\n return this.createDraft(caseTypeId, caseEventData);\n } else {\n return this.updateDraft(caseTypeId, Draft.stripDraftId(draftId), caseEventData);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EventTriggerService {\n\n public eventTriggerSource = new Subject<CaseEventTrigger>();\n\n public announceEventTrigger(eventTrigger: CaseEventTrigger) {\n this.eventTriggerSource.next(eventTrigger);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nimport { WizardPageField } from '../../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\nimport { Wizard } from '../../components/case-editor/domain/wizard.model';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../domain/definition/field-type-enum.model';\nimport { FieldsUtils } from './fields.utils';\n\n// @dynamic\n@Injectable()\nexport class FieldsPurger {\n\n constructor(private readonly fieldsUtils: FieldsUtils) {}\n\n /**\n * Deletes a field value by setting the value of the corresponding {@link FormControl} to null (or an empty array\n * if the field type is `Collection`), except when the field type is `Complex` or `Document`. For `Complex` field\n * types, this recursive method is called until simple or \"base\" field types are reached. For `Document` field\n * types, its _sub-field_ `FormControl` values are set to null.\n *\n * @param formGroup The `FormGroup` instance containing the `FormControl` for the specified field\n * @param field The `CaseField` whose value is to be deleted in the backend\n * @param parentField Reference to the parent `CaseField`. Used for checking specifically where a Complex field and\n * its sub-fields have `retain_hidden_value` set to `true`, but the field's parent has it set to `false` or undefined\n */\n public deleteFieldValue(formGroup: FormGroup, field: CaseField, parentField?: CaseField): void {\n const fieldType: FieldTypeEnum = field.field_type.type;\n const fieldControl = formGroup.get(field.id);\n\n if (fieldControl) {\n switch (fieldType) {\n case 'Complex':\n /**\n * If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for:\n *\n * * Any sub-fields where retain_hidden_value is false/undefined, if the parent field has\n * retain_hidden_value = true;\n * * ALL sub-fields if the parent field has retain_hidden_value = true BUT its _own_ parent has\n * retain_hidden_value = false/undefined (thus overriding anything else);\n * * ALL sub-fields if the parent field has retain_hidden_value = false/undefined;\n * * Any Complex sub-fields *regardless of their retain_hidden_value* (in order to inspect the sub-fields\n * of a Complex type within another Complex type)\n */\n if (field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n (complexSubField.field_type.type !== 'Complex' &&\n (field.retain_hidden_value\n ? !complexSubField.retain_hidden_value || (parentField && !parentField.retain_hidden_value)\n : true))) {\n // The fieldControl is cast to a FormGroup because a Complex field type uses this as its underlying\n // implementation\n this.deleteFieldValue(fieldControl as FormGroup, complexSubField, field);\n }\n }\n }\n break;\n case 'Collection':\n // If it is a collection of Complex types, loop through each one; else fall through to be handled as a\n // collection of simple types (in the same way as MultiSelectList), unless it's a collection of Document\n // types, which requires different handling\n const collectionFieldType = field.field_type.collection_field_type;\n if (collectionFieldType.type === 'Complex' && collectionFieldType.complex_fields.length > 0) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControl.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of collectionFieldType.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value, passing in the parent FormGroup\n const parentFormGroup: FormGroup = (fieldControl as FormArray).at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }));\n }\n break;\n } else if (collectionFieldType.type === 'Document') {\n // Get the array of Document field values\n const documentFieldValues = fieldControl.value as any[];\n\n // For each Document field value, set all its property values to null (this is not accepted by the\n // back-end but will be handled by sanitiseObject() in FormValueService before sending - see below for\n // the single Document case)\n if (documentFieldValues) {\n documentFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Get the FormGroup containing the FormControl for the sub-field and set its value to null\n (fieldControl as FormArray).at(index).get(`value.${subFieldId}`).setValue(null);\n }));\n }\n break;\n }\n // Omitted \"break\" is intentional because a collection should be handled as per MultiSelectList if it is\n // not a collection of Complex types\n // tslint:disable-next-line: no-switch-case-fall-through\n case 'MultiSelectList':\n // Field control should be a FormArray, so map each of its values to null\n // NOTE: The FormArray cannot just be set to an empty array because Angular checks that all existing values\n // of a FormArray are present; setting the control's value to an empty array causes a runtime error\n fieldControl.setValue(fieldControl.value.map(() => null));\n break;\n case 'Document':\n // NOTE: The field control (a FormGroup in this case) cannot just be set to null because Angular checks that\n // all existing values of a FormGroup are present; setting the control's value to null causes a runtime error\n const documentFieldValue = fieldControl.value;\n for (const key in documentFieldValue) {\n if (fieldControl.get(key)) {\n // The back-end doesn't accept null as a valid value for any of the Document field type properties but\n // this is handled by sanitiseObject() in FormValueService, returning a null object for the entire\n // Document field, if any of its properties is null - which is accepted by the back-end\n fieldControl.get(key).setValue(null);\n }\n }\n break;\n // Note: the default case applies to DynamicList fields, too\n default:\n fieldControl.setValue(null);\n }\n }\n }\n\n public clearHiddenFields(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger, currentPageId: string): void {\n this.clearHiddenFieldForFieldShowCondition(currentPageId, form, wizard, eventTrigger);\n this.clearHiddenFieldForPageShowCondition(form, wizard, eventTrigger);\n }\n\n private clearHiddenFieldForPageShowCondition(form: FormGroup, wizard: Wizard, eventTrigger: CaseEventTrigger): void {\n const currentEventState = this.fieldsUtils.getCurrentEventState(eventTrigger, form);\n wizard.pages.forEach(wp => {\n if (this.hasShowConditionPage(wp, currentEventState)) {\n const condition = new ShowCondition(wp.show_condition);\n if (this.isHidden(condition, currentEventState)) {\n this.resetPage(form, wp);\n }\n }\n });\n }\n\n private clearHiddenFieldForFieldShowCondition(currentPageId: string, form: FormGroup, wizard: Wizard,\n eventTrigger: CaseEventTrigger): void {\n const formFields = form.getRawValue();\n const currentPage: WizardPage = wizard.getPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(eventTrigger, form));\n currentPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(currentPage, wpf);\n if (this.hasShowConditionField(case_field, formFields)) {\n const condition = new ShowCondition(case_field.show_condition);\n if (this.isHidden(condition, formFields.data) && !(this.isReadonly(case_field))) {\n this.resetField(form, case_field);\n }\n }\n this.retainHiddenValueByFieldType(case_field, form);\n });\n }\n\n private retainHiddenValueByFieldType(field: CaseField, form: any): void {\n // so far only applies to the new field type OrganisationPolicy which needs to retain the default case role value\n // for other case fields there should be no side effects\n if (field && field.field_type && field.field_type.id === 'OrganisationPolicy') {\n // <bubble_wrap>\n // Doing some null checking to stop it from falling over.\n const data: FormGroup = form.get('data') as FormGroup;\n if (data) {\n const fieldGroup: FormGroup = data.controls[field.id] as FormGroup;\n if (fieldGroup) {\n const caseRoleFormControl: FormControl = fieldGroup.get('OrgPolicyCaseAssignedRole') as FormControl;\n if (caseRoleFormControl) {\n caseRoleFormControl.enable();\n }\n }\n }\n // </bubble_wrap>\n }\n }\n\n private isHidden(condition: ShowCondition, formFields: any): boolean {\n return !condition.match(formFields);\n }\n\n private findCaseFieldByWizardPageFieldId(currentPage: WizardPage, wizardPageField: WizardPageField): CaseField {\n return currentPage.case_fields.find(cf => cf.id === wizardPageField.case_field_id);\n }\n\n private hasShowConditionPage(wizardPage: WizardPage, formFields: any): boolean {\n return wizardPage.show_condition && formFields[this.getShowConditionKey(wizardPage.show_condition)];\n }\n\n private hasShowConditionField(case_field: CaseField, formFields: any): boolean {\n return case_field.show_condition && formFields.data[this.getShowConditionKey(case_field.show_condition)];\n }\n\n private getShowConditionKey(show_condition: string): string {\n // Need to allow for negated conditions, i.e. !=, as well as regular ones (=)\n // Also need to allow for conditions specified using the \"CONTAINS\" keyword\n return show_condition.split(/!=|=|CONTAINS/)[0];\n }\n\n private resetField(form: FormGroup, field: CaseField): void {\n /**\n * If the hidden field's value is to be retained, do nothing (except if it is a Complex type or collection of\n * Complex types). This is a change to the previous behaviour (which used to clear the field value but remove it\n * from submission as an update to the back-end). The new behaviour is to leave the field as is, so if the field\n * is hidden but then un-hidden before form submission, any previously entered value is retained.\n *\n * For Complex field types, an additional check of sub-fields is required. The same applies to a collection of\n * Complex types.\n */\n if (field.retain_hidden_value) {\n const fieldType: FieldTypeEnum = field.field_type.type;\n // If the field is a Complex type, loop over its sub-fields and call deleteFieldValue() for any sub-fields\n // where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their retain_hidden_value*\n // (in order to inspect the sub-fields of a Complex type within another Complex type)\n if (fieldType === 'Complex' && field.field_type.complex_fields.length > 0) {\n for (const complexSubField of field.field_type.complex_fields) {\n if ((complexSubField.field_type.type === 'Complex' && complexSubField.field_type.complex_fields.length > 0) ||\n !complexSubField.retain_hidden_value) {\n // Check for the existence of the parent FormGroup corresponding to the Complex field; if it exists, call\n // deleteFieldValue() to delete the sub-field\n const parentFormGroup = (form.get('data') as FormGroup).controls[field.id] as FormGroup;\n if (parentFormGroup) {\n this.deleteFieldValue(parentFormGroup, complexSubField);\n }\n }\n }\n } else if (fieldType === 'Collection' && field.field_type.collection_field_type.type === 'Complex' &&\n field.field_type.collection_field_type.complex_fields.length > 0) {\n // If the field is a collection of Complex types, loop through each one and call deleteFieldValue() for any\n // sub-fields where retain_hidden_value is false, OR for any Complex sub-fields *regardless of their\n // retain_hidden_value* (in order to inspect the sub-fields of a Complex type within another Complex type)\n\n // Get the array of field controls corresponding to the Complex field values\n const fieldControls = (form.get('data') as FormGroup).controls[field.id] as FormArray;\n\n if (fieldControls) {\n // Get the array of Complex field values\n const complexFieldValues = fieldControls.value as any[];\n\n // For each Complex field value, get the ID of each sub-field within it and use as a key to find the\n // corresponding sub-CaseField (which contains the field type information)\n if (complexFieldValues) {\n complexFieldValues.forEach((fieldValue, index) => Object.keys(fieldValue.value).forEach(subFieldId => {\n // Find the sub-CaseField corresponding to the sub-field ID\n let subCaseField: CaseField;\n for (const caseField of field.field_type.collection_field_type.complex_fields) {\n if (caseField.id === subFieldId) {\n subCaseField = caseField;\n break;\n }\n }\n\n // Recursively delete the sub-field value if retain_hidden_value is false, OR if the sub-field type is\n // Complex and regardless of retain_hidden_value, passing in the parent FormGroup\n if (subCaseField &&\n ((subCaseField.field_type.type === 'Complex' && subCaseField.field_type.complex_fields.length > 0) ||\n !subCaseField.retain_hidden_value)) {\n const parentFormGroup: FormGroup = fieldControls.at(index).get('value') as FormGroup;\n this.deleteFieldValue(parentFormGroup, subCaseField);\n }\n }));\n }\n }\n }\n } else {\n // Delete the field value\n this.deleteFieldValue(form.get('data') as FormGroup, field);\n }\n }\n\n private resetPage(form: FormGroup, wizardPage: WizardPage): void {\n wizardPage.wizard_page_fields.forEach(wpf => {\n const case_field = this.findCaseFieldByWizardPageFieldId(wizardPage, wpf);\n this.resetField(form, case_field);\n });\n }\n\n private getType(elem: any): string {\n return Object.prototype.toString.call(elem).slice(8, -1);\n }\n\n private isObject(elem: any): boolean {\n return this.getType(elem) === 'Object';\n }\n\n // TODO: call isReadOnly on CaseFields once we make it available\n private isReadonly(case_field: CaseField): boolean {\n return case_field.display_context.toUpperCase() === 'READONLY';\n }\n}\n","import { Predicate } from '../../../domain/predicate.model';\nimport { OrderService } from '../../../services/order/order.service';\nimport { WizardPage } from './wizard-page.model';\n\nexport class Wizard {\n public pages: WizardPage[];\n\n private readonly orderService = new OrderService();\n\n constructor(wizardPages: WizardPage[]) {\n this.pages = this.orderService.sort(wizardPages);\n }\n\n public firstPage(canShow: Predicate<WizardPage>): WizardPage {\n return this.pages.find(page => canShow(page));\n }\n\n public getPage(pageId: string, canShow: Predicate<WizardPage>): WizardPage {\n const foundPage: WizardPage = this.findPage(pageId);\n if (!foundPage) {\n throw new Error(`No page for ID: ${pageId}`);\n }\n return canShow(foundPage) ? foundPage : undefined;\n }\n\n public findWizardPage(caseFieldId: string): WizardPage {\n return this.pages.find(wizardPage => wizardPage.case_fields &&\n wizardPage.case_fields?.filter(caseField => caseField.id === caseFieldId).length > 0);\n }\n\n public nextPage(pageId: string, canShow: Predicate<WizardPage>): WizardPage {\n const currentIndex = this.findExistingIndex(pageId);\n\n return this.pages\n .slice(currentIndex + 1)\n .find(page => canShow(page));\n }\n\n public previousPage(pageId: string, canShow: Predicate<WizardPage>): WizardPage {\n const currentIndex = this.findExistingIndex(pageId);\n\n return this.pages\n .slice(0, currentIndex)\n .reverse()\n .find(page => canShow(page));\n }\n\n public hasPage(pageId: string): boolean {\n return !!this.findPage(pageId);\n }\n\n public hasPreviousPage(pageId: string, canShow: Predicate<WizardPage>): boolean {\n return !!this.previousPage(pageId, canShow);\n }\n\n public reverse(): WizardPage[] {\n return this.pages.slice().reverse();\n }\n\n private findPage(pageId: string): WizardPage {\n return this.pages.find(page => pageId === page.id);\n }\n\n private findExistingIndex(pageId: string): number {\n const index = this.pages.findIndex(page => pageId === page.id);\n\n if (-1 === index) {\n throw new Error(`No page for ID: ${pageId}`);\n }\n\n return index;\n }\n}\n","import { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { Wizard } from '../domain/wizard.model';\n\nexport class WizardFactoryService {\n public create(eventTrigger: CaseEventTrigger): Wizard {\n return new Wizard(eventTrigger.wizard_pages);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { ConditionalShowRegistrarService } from '../../../directives/conditional-show/services/conditional-show-registrar.service';\nimport { GreyBarService } from '../../../directives/conditional-show/services/grey-bar.service';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { Draft } from '../../../domain/draft.model';\nimport { Profile } from '../../../domain/profile/profile.model';\nimport { FieldsPurger } from '../../../services/fields/fields.purger';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { Confirmation } from '../domain/confirmation.model';\nimport { WizardPage } from '../domain/wizard-page.model';\nimport { Wizard } from '../domain/wizard.model';\nimport { WizardFactoryService } from '../services/wizard-factory.service';\n\n@Component({\n selector: 'ccd-case-edit',\n templateUrl: 'case-edit.component.html',\n styleUrls: ['../case-edit.scss'],\n providers: [GreyBarService]\n})\nexport class CaseEditComponent implements OnInit {\n public static readonly ORIGIN_QUERY_PARAM = 'origin';\n\n @Input()\n public eventTrigger: CaseEventTrigger;\n\n @Input()\n public submit: (CaseEventData, profile?: Profile) => Observable<object>;\n\n @Input()\n public validate: (CaseEventData, pageId: string) => Observable<object>;\n\n @Input()\n public saveDraft: (CaseEventData) => Observable<Draft>;\n\n @Input()\n public caseDetails: CaseView;\n\n @Output()\n public cancelled: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public submitted: EventEmitter<any> = new EventEmitter();\n\n public wizard: Wizard;\n\n public form: FormGroup;\n\n public confirmation: Confirmation;\n\n public navigationOrigin: any;\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly fieldsUtils: FieldsUtils,\n private readonly fieldsPurger: FieldsPurger,\n private readonly registrarService: ConditionalShowRegistrarService,\n private readonly wizardFactory: WizardFactoryService,\n ) {}\n\n public ngOnInit(): void {\n this.wizard = this.wizardFactory.create(this.eventTrigger);\n\n this.form = this.fb.group({\n data: new FormGroup({}),\n event: this.fb.group({\n id: [this.eventTrigger.id, Validators.required],\n summary: [''],\n description: ['']\n })\n });\n\n this.route.queryParams.subscribe((params: Params) => {\n this.navigationOrigin = params[CaseEditComponent.ORIGIN_QUERY_PARAM];\n });\n }\n\n public getPage(pageId: string): WizardPage {\n return this.wizard.getPage(pageId, this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));\n }\n\n public first(): Promise<boolean> {\n const firstPage = this.wizard.firstPage(this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));\n return this.router.navigate([firstPage ? firstPage.id : 'submit'], { relativeTo: this.route });\n }\n\n public navigateToPage(pageId: string): Promise<boolean> {\n const page = this.getPage(pageId);\n return this.router.navigate([page ? page.id : 'submit'], { relativeTo: this.route });\n }\n\n public next(currentPageId: string): Promise<boolean> {\n this.fieldsPurger.clearHiddenFields(this.form, this.wizard, this.eventTrigger, currentPageId);\n this.registrarService.reset();\n\n const theQueryParams: Params = {};\n theQueryParams[CaseEditComponent.ORIGIN_QUERY_PARAM] = this.navigationOrigin;\n const nextPage = this.wizard.nextPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));\n return this.router.navigate([nextPage ? nextPage.id : 'submit'], { queryParams: theQueryParams, relativeTo: this.route });\n }\n\n public previous(currentPageId: string): Promise<boolean> {\n this.fieldsPurger.clearHiddenFields(this.form, this.wizard, this.eventTrigger, currentPageId);\n this.registrarService.reset();\n\n const previousPage = this.wizard.previousPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));\n if (!previousPage) {\n return Promise.resolve(false);\n }\n\n const theQueryParams: Params = {};\n theQueryParams[CaseEditComponent.ORIGIN_QUERY_PARAM] = this.navigationOrigin;\n return this.router.navigate([previousPage.id], { queryParams: theQueryParams, relativeTo: this.route });\n }\n\n public hasPrevious(currentPageId: string): boolean {\n return this.wizard.hasPreviousPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));\n }\n\n public cancel(): void {\n this.cancelled.emit();\n }\n\n public confirm(confirmation: Confirmation): Promise<boolean> {\n this.confirmation = confirmation;\n return this.router.navigate(['confirm'], {relativeTo: this.route});\n }\n\n}\n","<div *ngIf=\"isDataLoaded()\">\n <ccd-case-edit [submit]=\"submit()\"\n [validate]=\"validate()\"\n [saveDraft]=\"saveDraft()\"\n [eventTrigger]=\"eventTrigger\"\n (cancelled)=\"emitCancelled($event)\"\n (submitted)=\"emitSubmitted($event)\"></ccd-case-edit>\n</div>","<router-outlet></router-outlet>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\n\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { Draft } from '../../../domain/draft.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { DraftService } from '../../../services/draft/draft.service';\nimport { CasesService } from '../services/cases.service';\nimport { EventTriggerService } from '../services/event-trigger.service';\n\n@Component({\n selector: 'ccd-case-create',\n templateUrl: 'case-create.component.html'\n})\nexport class CaseCreateComponent implements OnInit {\n\n @Input()\n public jurisdiction: string;\n @Input()\n public caseType: string;\n @Input()\n public event: string;\n\n @Output()\n public cancelled: EventEmitter<any> = new EventEmitter();\n @Output()\n public submitted: EventEmitter<any> = new EventEmitter();\n\n public eventTrigger: CaseEventTrigger;\n\n constructor(\n private readonly casesService: CasesService,\n private readonly alertService: AlertService,\n private readonly draftService: DraftService,\n private readonly eventTriggerService: EventTriggerService,\n ) {}\n\n public ngOnInit(): void {\n this.casesService.getEventTrigger(this.caseType, this.event).toPromise()\n .then(eventTrigger => {\n this.eventTrigger = eventTrigger;\n this.eventTriggerService.announceEventTrigger(eventTrigger);\n })\n .catch((error: HttpError) => {\n this.alertService.error(error.message);\n return throwError(error);\n });\n }\n\n public submit(): (sanitizedEditForm: CaseEventData) => Observable<object> {\n return (sanitizedEditForm: CaseEventData) => {\n sanitizedEditForm.draft_id = this.eventTrigger.case_id;\n return this.casesService.createCase(this.caseType, sanitizedEditForm);\n };\n }\n\n public validate(): (sanitizedEditForm: CaseEventData, pageId: string) => Observable<object> {\n return (sanitizedEditForm: CaseEventData, pageId: string) => this.casesService\n .validateCase(this.caseType, sanitizedEditForm, pageId);\n }\n\n public saveDraft(): (caseEventData: CaseEventData) => Observable<Draft> {\n if (this.eventTrigger.can_save_draft) {\n return (caseEventData: CaseEventData) => this.draftService.createOrUpdateDraft(\n this.caseType,\n this.eventTrigger.case_id,\n caseEventData\n );\n }\n }\n\n public emitCancelled(event): void {\n this.cancelled.emit(event);\n }\n\n public emitSubmitted(event): void {\n this.submitted.emit(event);\n }\n\n public isDataLoaded(): boolean {\n return this.eventTrigger ? true : false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Draft, DRAFT_PREFIX } from '../../domain/draft.model';\n\n@Pipe({\n name: 'ccdCaseReference'\n})\nexport class CaseReferencePipe implements PipeTransform {\n\n public transform(caseReference: string): string {\n if (!caseReference) {\n return '';\n }\n if (Draft.isDraft(caseReference)) {\n return DRAFT_PREFIX;\n } else {\n const regex = /(?:\\/)?(\\d{4})(\\d{4})(\\d{4})(\\d{4})/g;\n const result = String(caseReference).replace(regex, (match,\n g1, g2, g3, g4) => {\n const isLink = match[0] === '/';\n if (isLink) {\n return match;\n }\n\n return [g1, g2, g3, g4].join('-');\n });\n\n return result;\n }\n }\n}\n","import { Component, HostListener, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ccd-markdown',\n templateUrl: './markdown.html'\n})\nexport class MarkdownComponent implements OnInit {\n @Input()\n public content: string;\n @Input()\n public markdownUseHrefAsRouterLink!: boolean;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.content = this.content.replace(/ \\n/g, '<br>');\n }\n\n @HostListener('click', ['$event'])\n public onMarkdownClick(event: MouseEvent) {\n // If we don't have an anchor tag, we don't need to do anything.\n if (event.target instanceof HTMLAnchorElement === false) {\n return;\n }\n return true;\n }\n}\n","<div><markdown class=\"markdown\" [innerHTML]=\"content | ccdCaseReference\"></markdown></div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PlaceholderService } from '../../directives/substitutor/services/placeholder.service';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdCaseTitle'\n})\nexport class CcdCaseTitlePipe implements PipeTransform {\n constructor(private readonly placeholderService: PlaceholderService, private readonly fieldsUtils: FieldsUtils) {\n }\n public transform(caseTitle: string, caseFields: CaseField[], values: any): any {\n const caseFieldValues = this.getReadOnlyAndFormFields(values, caseFields);\n const result = this.placeholderService.resolvePlaceholders(caseFieldValues, caseTitle);\n return result;\n }\n\n private getReadOnlyAndFormFields(formGroup, caseFields: CaseField[]): any {\n return this.fieldsUtils.mergeLabelCaseFieldsAndFormFields(caseFields, formGroup.getRawValue());\n }\n\n}\n","<!-- Current Page && Event trigger name -->\n<h1 class=\"heading-h1\">{{ eventTrigger.name}}</h1>\n\n<!--Case ID or Title -->\n<div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n<ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: caseFields : editForm.controls['data']\"></ccd-markdown>\n</ng-template>\n<ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n</ng-template>\n\n<form [formGroup]=\"formGroup\" (submit)=\"submit()\">\n <div id=\"confirmation-header\" *ngIf=\"confirmation.getHeader()\">\n <ccd-markdown [content]=\"confirmation.getHeader()\"></ccd-markdown>\n </div>\n <div id=\"confirmation-body\" *ngIf=\"confirmation.getBody()\">\n <ccd-markdown [content]=\"confirmation.getBody()\"></ccd-markdown>\n </div>\n <button type=\"submit\" class=\"button\" data-ng-click=\"submit()\">{{this.triggerText}}</button>\n</form>\n","import { Component } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\n\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { CaseEditComponent } from '../case-edit/case-edit.component';\nimport { Confirmation } from '../domain/confirmation.model';\n\n@Component({\n templateUrl: './case-edit-confirm.html',\n styleUrls: ['../case-edit.scss']\n})\nexport class CaseEditConfirmComponent {\n public eventTrigger: CaseEventTrigger;\n public triggerText = 'Close and Return to case details';\n public formGroup = new FormControl();\n public confirmation: Confirmation;\n public caseFields: CaseField[];\n public editForm: FormGroup;\n\n private readonly caseId: string;\n\n constructor(private readonly caseEdit: CaseEditComponent, private readonly router: Router) {\n this.eventTrigger = this.caseEdit.eventTrigger;\n this.editForm = this.caseEdit.form;\n this.caseFields = this.getCaseFields();\n if (this.caseEdit.confirmation) {\n this.confirmation = this.caseEdit.confirmation;\n this.caseId = this.caseEdit.confirmation.getCaseId();\n } else {\n this.router.navigate(['/']);\n }\n }\n\n public submit(): void {\n this.caseEdit.submitted.emit({caseId: this.confirmation.getCaseId(), status: this.confirmation.getStatus()});\n }\n\n public getCaseId(): string {\n return (this.caseEdit.caseDetails ? this.caseEdit.caseDetails.case_id : '');\n }\n\n public getCaseTitle(): string {\n return (this.caseEdit.caseDetails && this.caseEdit.caseDetails.state &&\n this.caseEdit.caseDetails.state.title_display ? this.caseEdit.caseDetails.state.title_display : '');\n }\n\n private getCaseFields(): CaseField[] {\n if (this.caseEdit.caseDetails) {\n return FieldsUtils.getCaseFields(this.caseEdit.caseDetails);\n }\n\n return this.eventTrigger.case_fields;\n }\n}\n","export enum PaletteContext {\n DEFAULT = 'DEFAULT',\n CHECK_YOUR_ANSWER = 'CHECK_YOUR_ANSWER',\n TABLE_VIEW = 'TABLE_VIEW',\n}\n","import { Directive, Input, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\n\nimport { AbstractFormFieldComponent } from './abstract-form-field.component';\nimport { PaletteContext } from './palette-context.enum';\n\n@Directive()\nexport abstract class AbstractFieldReadComponent extends AbstractFormFieldComponent implements OnInit {\n\n @Input()\n public caseReference: string;\n\n @Input()\n public topLevelFormGroup: FormGroup | AbstractControl;\n\n /**\n * Optional. Enable context-aware rendering of fields.\n */\n @Input()\n public context: PaletteContext = PaletteContext.DEFAULT;\n\n public ngOnInit(): void {\n if (!this.caseField.metadata) {\n this.registerControl(new FormControl(this.caseField.value));\n }\n }\n\n}\n","export class AddressModel {\n public AddressLine1 = '';\n public AddressLine2 = '';\n public AddressLine3 = '';\n public PostTown = '';\n public County = '';\n public PostCode = '';\n public Country = '';\n}\n","import { AddressModel } from '../../../domain/addresses/address.model';\nexport class AddressOption {\n\n public description: string;\n\n public value: AddressModel;\n\n constructor (addressModel: AddressModel, description: string) {\n if (description == null) {\n this.value = addressModel;\n this.description = this.getDescription();\n } else {\n this.description = description;\n }\n }\n\n private getDescription() {\n return this.removeInitialCommaIfPresent(\n (this.value.AddressLine1 === undefined ? '' : this.value.AddressLine1)\n + this.prefixWithCommaIfPresent(this.value.AddressLine2)\n + this.prefixWithCommaIfPresent(this.value.AddressLine3)\n + ', ' + this.value.PostTown\n );\n }\n\n private prefixWithCommaIfPresent(value: string) {\n return value ? ', ' + value : value;\n }\n\n private removeInitialCommaIfPresent(value: string) {\n return value.replace(new RegExp('^,', 'gi'), '');\n }\n\n}\n","import { AddressModel } from '../../domain/addresses/address.model';\nimport { AddressesService } from './addresses.service';\n\n/**\n * Moving all this logic here into Address Parser class, so that it\n * will be easier for us when we move this parsing logic to into\n * `Shim` java service.\n */\n export class AddressParser {\n public parse(address: any) {\n const classification = `${address.CLASSIFICATION_CODE}`;\n const addressModel = new AddressModel();\n addressModel.AddressLine1 = this.parseAddressLine1(classification, address);\n addressModel.AddressLine2 = this.parseAddressLine2(classification, address);\n addressModel.AddressLine3 = this.parseAddressLine3(classification, address);\n addressModel.PostCode = address.POSTCODE;\n addressModel.PostTown = address.POST_TOWN;\n addressModel.Country = AddressesService.UK;\n return addressModel;\n }\n\n private parseAddressLine1(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.ORGANISATION_NAME} ${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n } else {\n addressLine =\n `${address.ORGANISATION_NAME}${this.prefixWithCommaIfPresent(address.BUILDING_NAME)}` +\n `${address.DEPARTMENT_NAME} ${address.PO_BOX_NUMBER}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine2(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine = `${address.BUILDING_NAME} `;\n } else {\n addressLine =\n `${address.SUB_BUILDING_NAME} ${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private parseAddressLine3(classification: string, address: any) {\n let addressLine = '';\n if (classification === AddressesService.RD06) {\n addressLine =\n `${address.BUILDING_NUMBER} ${address.THOROUGHFARE_NAME}`;\n } else {\n addressLine =\n `${address.DEPENDENT_LOCALITY} ${address.DOUBLE_DEPENDENT_LOCALITY} ${address.DEPENDENT_THOROUGHFARE_NAME}`;\n }\n return this.removeNonAddressValues(addressLine);\n }\n\n private removeNonAddressValues(line: string) {\n line = line.replace(' null', ' ').replace('null ', ' ');\n line = this.removeUndefinedString(line);\n line = this.removeInitialComma(line);\n line = this.removeEmptySpaces(line);\n return line;\n }\n\n private removeUndefinedString(value: string) {\n return value.replace(new RegExp('undefined', 'gi'), '');\n }\n\n private removeEmptySpaces(value: string) {\n return value.replace(new RegExp(' +', 'gi'), ' ').trim();\n }\n\n private removeInitialComma(value: string) {\n return value.replace(new RegExp('^,', 'gi'), '');\n }\n\n private prefixWithCommaIfPresent(value: string) {\n return value ? ', ' + value : value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { AddressModel } from '../../domain/addresses';\nimport { HttpService } from '../http';\nimport { AddressParser } from './address-parser';\n\n@Injectable()\nexport class AddressesService {\n\n public static readonly DPA = 'DPA';\n\n public static readonly UK = 'United Kingdom';\n\n public static readonly RD06 = 'RD06';\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getAddressesForPostcode(postcode: string): Observable<AddressModel[]> {\n return this.http\n .get(this.appConfig.getPostcodeLookupUrl()\n .replace('${postcode}', postcode), undefined, false)\n .pipe(\n map(res => res.results))\n .pipe(\n map(output => output.map(addresses =>\n this.format(new AddressParser().parse(addresses[AddressesService.DPA]))\n ))\n );\n }\n\n private format(addressModel: AddressModel) {\n return this.formatAddressLines(this.shiftAddressLinesUp(addressModel));\n }\n\n private formatAddressLines(addressModel: AddressModel) {\n ['AddressLine1', 'AddressLine2', 'AddressLine3', 'PostTown'].forEach(value => {\n addressModel[value] = this.toCapitalCase(addressModel[value]);\n });\n return addressModel;\n }\n\n private shiftAddressLinesUp(addressModel: AddressModel) {\n if (addressModel.AddressLine2 === '') {\n addressModel.AddressLine2 = addressModel.AddressLine3;\n addressModel.AddressLine3 = '';\n }\n if (addressModel.AddressLine1 === '') {\n addressModel.AddressLine1 = addressModel.AddressLine2;\n addressModel.AddressLine2 = '';\n }\n return addressModel;\n }\n\n private toCapitalCase(sentence: string) {\n sentence = sentence.toLowerCase();\n sentence.split(' ').forEach((value, index) => {\n sentence = sentence.replace(value, value.charAt(0).toUpperCase() + value.substr(1));\n }\n );\n return sentence;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../../../domain/definition/field-type-enum.model';\n\n@Pipe({\n name: 'ccdIsCompound'\n})\nexport class IsCompoundPipe implements PipeTransform {\n\n private static readonly COMPOUND_TYPES: FieldTypeEnum[] = [\n 'Complex', 'Label', 'AddressGlobal', 'AddressUK', 'AddressGlobalUK', 'CasePaymentHistoryViewer', 'CaseHistoryViewer', 'Organisation', 'WaysToPay'\n ];\n\n private static readonly EXCLUDE: string[] = [\n 'CaseLink'\n ];\n\n public transform(field: CaseField): boolean {\n if (!field || !field.field_type || !field.field_type.type) {\n return false;\n }\n\n if (IsCompoundPipe.COMPOUND_TYPES.indexOf(field.field_type.type) !== -1) {\n if (IsCompoundPipe.EXCLUDE.indexOf(field.field_type.id) !== -1) {\n return false;\n }\n return true;\n }\n\n return false;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdFieldsFilter'\n})\nexport class FieldsFilterPipe implements PipeTransform {\n\n private static readonly EMPTY_VALUES = [\n undefined,\n null,\n '',\n {}\n ];\n\n private static readonly NESTED_TYPES = {\n Complex: FieldsFilterPipe.isValidComplex\n };\n\n /**\n * Complex type should have at least on simple field descendant with a value.\n */\n private static isValidComplex(field: CaseField, values?: object): boolean {\n values = values || {};\n const type = field.field_type;\n const value = FieldsFilterPipe.getValue(field, values);\n\n const hasChildrenWithValue = type.complex_fields.find(f => {\n return FieldsFilterPipe.keepField(f, value);\n });\n\n return !!hasChildrenWithValue;\n }\n\n private static isEmpty(value: any): boolean {\n return FieldsFilterPipe.EMPTY_VALUES.indexOf(value) !== -1\n || value.length === 0;\n }\n\n private static isCompound(field: CaseField): boolean {\n return FieldsFilterPipe.NESTED_TYPES[field.field_type.type];\n }\n\n private static isValidCompound(field: CaseField, value?: object): boolean {\n return FieldsFilterPipe.isCompound(field)\n && FieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value);\n }\n\n private static keepField(field: CaseField, value?: object): boolean {\n // We shouldn't ditch labels.\n if (field.field_type.type === 'Label' && (field.label || '').length > 0) {\n return true;\n }\n\n value = value || {};\n\n if (FieldsFilterPipe.isCompound(field)) {\n return FieldsFilterPipe.isValidCompound(field, value);\n }\n\n return !FieldsFilterPipe.isEmpty(field.value)\n || !FieldsFilterPipe.isEmpty(value[field.id]);\n }\n\n private static getValue(field: CaseField, values: any, index?: number): any {\n let value: any;\n if (index >= 0 ) {\n value = values[index].value[field.id];\n } else {\n value = values[field.id];\n }\n return FieldsFilterPipe.isEmpty(field.value) ? value : field.value;\n }\n\n /**\n * Filter out fields having no data to display and harmonise field values coming parent's value.\n */\n public transform(complexField: CaseField, keepEmpty?: boolean, index?: number, stripHidden= false): CaseField[] {\n if (!complexField || !complexField.field_type) {\n return [];\n }\n\n const fields = complexField.field_type.complex_fields || [];\n const values = complexField.value || {};\n const checkConditionsAgainst = { [complexField.id]: values };\n\n return fields\n .filter( f => {\n if (stripHidden && f.show_condition) {\n const cond = ShowCondition.getInstance(f.show_condition);\n return cond.match(checkConditionsAgainst);\n }\n return true;\n })\n .map(f => {\n const clone = FieldsUtils.cloneObject(f);\n const value = FieldsFilterPipe.getValue(f, values, index);\n if (!FieldsFilterPipe.isEmpty(value)) {\n clone.value = value;\n }\n return clone;\n })\n .filter(f => keepEmpty || FieldsFilterPipe.keepField(f))\n .map(f => {\n if (!f.display_context) {\n f.display_context = complexField.display_context;\n }\n return f;\n });\n }\n}\n","<div class=\"form-group\" [id]=\"id()\">\n <fieldset>\n <legend><h2 *ngIf=\"renderLabel\" class=\"heading-h2\">{{caseField | ccdFieldLabel}}</h2></legend>\n <ng-container [ngSwitch]=\"field | ccdIsReadOnly\" *ngFor=\"let field of complexFields\">\n <ccd-field-read *ngSwitchCase=\"true\"\n ccdLabelSubstitutor\n [caseField]=\"buildField(field)\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [withLabel]=\"true\">\n </ccd-field-read>\n <ccd-field-write *ngSwitchCase=\"false\"\n ccdLabelSubstitutor\n [caseField]=\"field\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [parent]=\"complexGroup\"\n [idPrefix]=\"buildIdPrefix(field)\"\n [hidden]=\"field.hidden\"\n [isExpanded]=\"isExpanded\"\n [isInSearchBlock]=\"isInSearchBlock\">\n </ccd-field-write>\n </ng-container>\n </fieldset>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { Constants } from '../../../commons/constants';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FieldsFilterPipe } from '../../../pipes/complex/fields-filter.pipe';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\nimport { IsCompoundPipe } from '../utils/is-compound.pipe';\n\nconst ADDRESS_FIELD_TYPES = [ 'AddressUK', 'AddressGlobalUK', 'AddressGlobal' ];\n\n@Component({\n selector: 'ccd-write-complex-type-field',\n templateUrl: './write-complex-field.html',\n styleUrls: ['./read-complex-field-table.scss']\n})\nexport class WriteComplexFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public formGroup: FormGroup;\n\n public complexGroup: FormGroup;\n\n @Input()\n public renderLabel = true;\n\n @Input()\n public ignoreMandatory = false;\n\n public complexFields: CaseField[];\n\n constructor(private readonly isCompoundPipe: IsCompoundPipe, private readonly formValidatorsService: FormValidatorsService) {\n super();\n this.complexGroup = new FormGroup({});\n }\n\n public ngOnInit(): void {\n // Are we inside of a collection? If so, the parent is the complexGroup we want.\n if (this.isTopLevelWithinCollection()) {\n this.complexGroup = this.parent as FormGroup;\n FieldsUtils.addCaseFieldAndComponentReferences(this.complexGroup, this.caseField, this);\n } else {\n this.complexGroup = this.registerControl(this.complexGroup, true) as FormGroup;\n }\n // Add validators for the complex field.\n this.formValidatorsService.addValidators(this.caseField, this.complexGroup);\n this.setupFields();\n this.complexGroup.updateValueAndValidity({ emitEvent: true });\n }\n\n public buildField(caseField: CaseField): CaseField {\n let control: AbstractControl = this.complexGroup.get(caseField.id);\n if (!control) {\n control = new FormControl(caseField.value);\n this.complexGroup.addControl(caseField.id, control);\n }\n\n // Add validators for addresses, if appropriate.\n if (this.isAddressUK()) {\n if (this.addressValidatorsRequired(caseField)) {\n this.formValidatorsService.addValidators(caseField, control);\n }\n } else {\n // It's not an address so set it up according to its own display_context.\n this.formValidatorsService.addValidators(caseField, control);\n }\n\n // For Address-type fields, ensure that all sub-fields inherit the same value for retain_hidden_value as this\n // parent; although address fields use the Complex type, each of them is meant to be treated as one field\n if (this.isAddressUK() && this.caseField) {\n for (const addressSubField of this.caseField.field_type.complex_fields) {\n addressSubField.retain_hidden_value = this.caseField.retain_hidden_value;\n }\n }\n\n FieldsUtils.addCaseFieldAndComponentReferences(control, caseField, this);\n return caseField;\n }\n\n public buildIdPrefix(field: CaseField): string {\n return this.isCompoundPipe.transform(field) ? `${this.idPrefix}${field.id}_` : `${this.idPrefix}`;\n }\n\n private addressValidatorsRequired(caseField: CaseField): boolean {\n return this.isSmallAddressLine1(caseField) && this.isMandatory(caseField);\n }\n\n private isSmallAddressLine1(caseField: CaseField): boolean {\n return caseField.id === 'AddressLine1' && caseField.field_type.id === 'TextMax150';\n }\n\n private isMandatory(caseField: CaseField): boolean {\n return (Constants.MANDATORY === caseField.display_context || !this.ignoreMandatory);\n }\n\n private isAddressUK(): boolean {\n return ADDRESS_FIELD_TYPES.indexOf(this.caseField.field_type.id) > -1;\n }\n\n private isTopLevelWithinCollection(): boolean {\n if (this.parent) {\n const parentCaseField: CaseField = this.parent['caseField'];\n if (parentCaseField && parentCaseField.id === this.caseField.id) {\n const parentComponent = this.parent['component'] as AbstractFormFieldComponent;\n if (parentComponent) {\n const parentComponentCaseField = parentComponent.caseField;\n if (parentComponentCaseField.field_type) {\n return parentComponentCaseField.field_type.type === 'Collection';\n }\n }\n }\n }\n return false;\n }\n\n private setupFields(): void {\n const fieldsFilterPipe: FieldsFilterPipe = new FieldsFilterPipe();\n this.complexFields = fieldsFilterPipe.transform(this.caseField, true).map(field => {\n if (field && field.id) {\n if (!(field instanceof CaseField)) {\n return this.buildField(plainToClassFromExist(new CaseField(), field));\n }\n }\n return this.buildField(field);\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n@Pipe({\n name: 'ccdFieldLabel'\n})\nexport class FieldLabelPipe implements PipeTransform {\n\n public transform (field: CaseField): string {\n if (!field || !field.label) {\n return '';\n } else if (!field.display_context) {\n return field.label;\n }\n return field.label + (field.display_context.toUpperCase() === 'OPTIONAL' ? ' (Optional)' : '');\n }\n}\n","<div class=\"form-group\" [id]=\"id()\">\n\n <div *ngIf=\"!isComplexWithHiddenFields()\">\n <h2 class=\"heading-h2\">{{caseField | ccdFieldLabel }}</h2>\n\n <div class=\"form-group bottom-30 postcodeLookup\" [id]=\"createElementId('postcodeLookup')\" [ngClass]=\"{'form-group-error': missingPostcode}\" *ngIf=\"!isExpanded\">\n <label [for]=\"createElementId('postcodeInput')\">\n <span class=\"form-label\">Enter a UK postcode</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">Enter the Postcode</span>\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\"\n [id]=\"createElementId('postcodeInput')\" name=\"postcode\" class=\"form-control postcodeinput inline-block\" [formControl]=\"postcode\">\n <button type=\"button\" class=\"button button-30\" (click)=\"findAddress()\">Find address</button>\n </div>\n\n <div class=\"form-group\" *ngIf=\"addressOptions\" id=\"selectAddress\">\n <label [for]=\"createElementId('addressList')\">\n <span class=\"form-label\">Select an address</span>\n </label>\n\n <select class=\"form-control ccd-dropdown addressList\" [id]=\"createElementId('addressList')\" name=\"address\" [formControl]=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n\n <a class=\"manual-link bottom-30\" *ngIf=\"!shouldShowDetailFields()\" (click)=\"blankAddress()\" href=\"javascript:void(0)\">I can't enter a UK postcode</a>\n </div>\n\n <ccd-write-complex-type-field\n [hidden]=\"!shouldShowDetailFields()\"\n [caseField]=\"caseField\"\n [renderLabel]=\"false\"\n [parent]=\"parent\"\n [formGroup]=\"formGroup\"\n [ignoreMandatory]=\"true\"\n [idPrefix]=\"buildIdPrefix('detail')\"\n #writeComplexFieldComponent>\n </ccd-write-complex-type-field>\n</div>\n","import { Component, Input, OnChanges, OnInit, QueryList, SimpleChanges, ViewChild, ViewChildren } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { FocusElementDirective } from '../../../directives/focus-element';\nimport { AddressModel } from '../../../domain/addresses/address.model';\nimport { AddressesService } from '../../../services/addresses/addresses.service';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { WriteComplexFieldComponent } from '../complex/write-complex-field.component';\nimport { IsCompoundPipe } from '../utils/is-compound.pipe';\nimport { AddressOption } from './address-option.model';\n\n@Component({\n selector: 'ccd-write-address-field',\n templateUrl: 'write-address-field.html',\n styleUrls: ['write-address-field.scss']\n})\nexport class WriteAddressFieldComponent extends AbstractFieldWriteComponent implements OnInit, OnChanges {\n\n @ViewChild('writeComplexFieldComponent', { static: false })\n public writeComplexFieldComponent: WriteComplexFieldComponent;\n\n @ViewChildren(FocusElementDirective)\n public focusElementDirectives: QueryList<FocusElementDirective>;\n\n public addressesService: AddressesService;\n\n @Input()\n public formGroup: FormGroup;\n\n public addressFormGroup = new FormGroup({});\n public postcode: FormControl;\n public addressList: FormControl;\n\n public addressOptions: AddressOption[];\n\n public missingPostcode = false;\n\n constructor(addressesService: AddressesService, private readonly isCompoundPipe: IsCompoundPipe) {\n super();\n this.addressesService = addressesService;\n }\n\n public ngOnInit(): void {\n if (!this.isComplexWithHiddenFields()) {\n this.postcode = new FormControl('');\n this.addressFormGroup.addControl('postcode', this.postcode);\n this.addressList = new FormControl('');\n this.addressFormGroup.addControl('address', this.addressList);\n }\n }\n\n public findAddress() {\n if (!this.postcode.value) {\n this.missingPostcode = true;\n } else {\n this.missingPostcode = false;\n const postcode = this.postcode.value;\n this.caseField.value = null;\n this.addressOptions = new Array();\n this.addressesService.getAddressesForPostcode(postcode.replace(' ', '').toUpperCase()).subscribe(\n result => {\n result.forEach(\n address => {\n this.addressOptions.push(new AddressOption(address, null));\n }\n );\n this.addressOptions.unshift(\n new AddressOption(undefined, this.defaultLabel(this.addressOptions.length))\n );\n }, (error) => {\n console.log(`An error occurred retrieving addresses for postcode ${postcode}. ${error}`);\n this.addressOptions.unshift(\n new AddressOption(undefined, this.defaultLabel(this.addressOptions.length))\n );\n });\n this.addressList.setValue(undefined);\n this.refocusElement();\n }\n }\n\n public refocusElement(): void {\n if (this.focusElementDirectives && this.focusElementDirectives.length > 0) {\n this.focusElementDirectives.first.focus();\n }\n }\n\n public blankAddress() {\n this.caseField.value = new AddressModel();\n this.setFormValue();\n }\n\n public isComplexWithHiddenFields() {\n if (this.caseField.isComplex() && this.caseField.field_type.complex_fields\n && this.caseField.field_type.complex_fields.some(cf => cf.hidden === true)) {\n return true;\n }\n }\n\n public shouldShowDetailFields() {\n if (this.isComplexWithHiddenFields()) {\n return true;\n }\n if (this.isExpanded) {\n return true;\n }\n if (!this.writeComplexFieldComponent || !this.writeComplexFieldComponent.complexGroup) {\n return false;\n }\n const address = this.writeComplexFieldComponent.complexGroup.value;\n let hasAddress = false;\n if (address) {\n Object.keys(address).forEach((key) => {\n if (address[key] != null) {\n hasAddress = true;\n }\n });\n }\n return hasAddress;\n }\n\n public addressSelected() {\n this.caseField.value = this.addressList.value;\n this.setFormValue();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n super.ngOnChanges(changes);\n const change = changes['caseField'];\n if (change) {\n this.setFormValue();\n }\n }\n\n public buildIdPrefix(elementId: string): string {\n return `${this.idPrefix}_${elementId}`;\n }\n\n private defaultLabel(numberOfAddresses) {\n return numberOfAddresses === 0 ? 'No address found'\n : numberOfAddresses + (numberOfAddresses === 1 ? ' address ' : ' addresses ') + 'found';\n }\n\n private setFormValue() {\n if (this.writeComplexFieldComponent.complexGroup) {\n this.writeComplexFieldComponent.complexGroup.setValue(\n this.caseField.value\n );\n }\n }\n}\n","<a *ngIf=\"hasReference()\" href=\"/v2/case/{{caseField.value.CaseReference}}\" target=\"_blank\">\n <span class=\"text-16\">{{caseField.value.CaseReference ? (caseField.value.CaseReference | ccdCaseReference) : ''}}</span>\n</a>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-case-link-field',\n templateUrl: 'read-case-link-field.html'\n})\nexport class ReadCaseLinkFieldComponent extends AbstractFieldReadComponent {\n\n public hasReference(): boolean {\n return this.caseField.value && this.caseField.value.CaseReference;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\n@Pipe({\n name: 'ccdFirstError'\n})\nexport class FirstErrorPipe implements PipeTransform {\n\n public transform(value: ValidationErrors, args?: string): string {\n if (!value) {\n return '';\n }\n\n if (!args) {\n args = 'Field';\n }\n\n const keys = Object.keys(value);\n\n if (!keys.length) {\n return '';\n }\n if (keys[0] === 'required') {\n return `${args} is required`;\n } else if (keys[0] === 'pattern') {\n return `The data entered is not valid for ${args}`;\n } else if (keys[0] === 'minlength') {\n return `${args} is below the minimum length`;\n } else if (keys[0] === 'maxlength') {\n return `${args} exceeds the maximum length`;\n } else if (value.hasOwnProperty('matDatetimePickerParse')) {\n return 'The date entered is not valid. Please provide a valid date';\n }\n return value[keys[0]];\n }\n\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !caseReferenceControl.valid && (caseReferenceControl.dirty || caseReferenceControl.touched)}\">\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"caseReferenceControl.errors && (caseReferenceControl.dirty || caseReferenceControl.touched)\">{{caseReferenceControl.errors | ccdFirstError:caseField.label}}</span>\n <input class=\"form-control bottom-30\" [id]=\"id()\" type=\"text\" [formControl]=\"caseReferenceControl\">\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { WriteComplexFieldComponent } from '../complex/write-complex-field.component';\n\n@Component({\n selector: 'ccd-write-case-link-field',\n templateUrl: 'write-case-link-field.html'\n})\nexport class WriteCaseLinkFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public caseReferenceControl: AbstractControl;\n public caseLinkGroup: FormGroup;\n\n @ViewChild('writeComplexFieldComponent', /* TODO: add static flag */ {})\n public writeComplexFieldComponent: WriteComplexFieldComponent;\n\n public ngOnInit(): void {\n if (this.caseField.value) {\n this.caseLinkGroup = this.registerControl(new FormGroup({\n CaseReference: new FormControl(this.caseField.value.CaseReference, Validators.required),\n }), true) as FormGroup;\n } else {\n this.caseLinkGroup = this.registerControl(new FormGroup({\n CaseReference: new FormControl(null, Validators.required),\n }), true) as FormGroup;\n }\n this.caseReferenceControl = this.caseLinkGroup.controls['CaseReference'];\n this.caseReferenceControl.setValidators(this.caseReferenceValidator());\n\n // Ensure that all sub-fields inherit the same value for retain_hidden_value as this parent; although a CaseLink\n // field uses the Complex type, it is meant to be treated as one field\n if (this.caseField && this.caseField.field_type.type === 'Complex') {\n for (const caseLinkSubField of this.caseField.field_type.complex_fields) {\n caseLinkSubField.retain_hidden_value = this.caseField.retain_hidden_value;\n }\n }\n }\n\n public validCaseReference(valueString: string): boolean {\n if (!valueString ) {\n return false;\n }\n return new RegExp('^\\\\b\\\\d{4}[ -]?\\\\d{4}[ -]?\\\\d{4}[ -]?\\\\d{4}\\\\b$').test(valueString.trim());\n }\n\n private caseReferenceValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } => {\n if (control.value) {\n if ( this.validCaseReference(control.value) ) {\n return null;\n }\n return {error: 'Please use a valid 16 Digit Case Reference'};\n } else {\n if (control.touched) {\n return {error: 'Please use a valid 16 Digit Case Reference'};\n }\n }\n return null;\n };\n }\n}\n","<table *ngIf=\"caseField.value && caseField.value.length \" class=\"collection-field-table\" aria-describedby=\"collection table\">\n <ng-container [ngSwitch]=\"isDisplayContextParameterAvailable\">\n <tbody *ngSwitchCase=\"true\">\n <tr>\n <th id=\"hiddenHeader\" style=\"display: none;\"></th>\n <td>\n <ccd-field-read\n [caseField]=\"{\n id: caseField.label,\n label: caseField.label,\n field_type: caseField.field_type.collection_field_type,\n display_context_parameter: caseField.display_context_parameter,\n value: caseField.value,\n hidden: caseField.hidden\n }\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\">\n </ccd-field-read>\n </td>\n </tr>\n </tbody>\n <tbody *ngSwitchCase=\"false\">\n <tr *ngFor=\"let item of caseField.value; let i = index\">\n <td>\n <ccd-field-read\n [caseField]=\"{\n id: i,\n label: caseField.label + ' ' + (i + 1),\n field_type: caseField.field_type.collection_field_type,\n value: item.value,\n hidden: caseField.hidden\n }\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"buildIdPrefix(i)\">\n </ccd-field-read>\n </td>\n </tr>\n </tbody>\n </ng-container>\n</table>\n","import { Component, OnInit } from '@angular/core';\n\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-collection-field',\n templateUrl: './read-collection-field.html',\n styleUrls: ['./collection-field.scss']\n})\nexport class ReadCollectionFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public isDisplayContextParameterAvailable = false;\n\n public ngOnInit(): void {\n if (this.caseField.display_context_parameter && this.caseField.display_context_parameter.trim().startsWith('#TABLE(')) {\n this.isDisplayContextParameterAvailable = true;\n }\n }\n\n public buildIdPrefix(index: number): string {\n const prefix = `${this.idPrefix}${this.caseField.id}_`;\n if (this.caseField.field_type.collection_field_type.type === 'Complex') {\n return `${prefix}${index}_`;\n }\n return prefix;\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-remove-dialog',\n templateUrl: './remove-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class RemoveDialogComponent {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<RemoveDialogComponent>) {}\n\n public remove() {\n this.result = 'Remove';\n this.matDialogRef.close(this.result);\n }\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n}\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Are you sure you want to remove the item</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You are about to permanently remove an item, are you sure you want to\n remove this item?</span>\n </div>\n <div>\n <button type=\"button\" title=\"Remove\" class=\"button action-button\" (click)=\"remove()\">Remove</button>\n <button type=\"button\" title=\"Cancel\" class=\"button button-secondary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>\n","import { Banner } from './banner.model';\nimport { CaseTypeLite } from './case-type-lite.model';\n\nexport class Jurisdiction {\n public id: string;\n public name: string;\n public description: string;\n public caseTypes: CaseTypeLite[];\n}\n","import { Type } from 'class-transformer';\nimport { Jurisdiction } from '../definition/jurisdiction.model';\n\nfunction hasRoles(profile: Profile): boolean {\n if (profile.user && profile.user.idam && Array.isArray(profile.user.idam.roles)) {\n return profile.user.idam.roles.length > 0;\n }\n return false;\n}\n\n// @dynamic\nexport class Profile {\n public user: {\n idam: {\n id: string,\n email: string,\n forename: string,\n surname: string,\n roles: string[]\n }\n };\n\n public channels: string[];\n\n @Type(() => Jurisdiction)\n public jurisdictions: Jurisdiction[];\n\n public default: {\n workbasket: {\n jurisdiction_id: string,\n case_type_id: string,\n state_id: string\n }\n };\n\n public isSolicitor(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-solicitor')) !== undefined;\n }\n return false;\n }\n\n public isCourtAdmin(): boolean {\n if (hasRoles(this)) {\n return this.user.idam.roles.find(r => r.endsWith('-courtadmin')) !== undefined;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Profile } from '../../domain/profile/profile.model';\n\n@Injectable()\nexport class ProfileNotifier {\n public readonly profileSource: BehaviorSubject<Profile> = new BehaviorSubject<Profile>(new Profile());\n public profile = this.profileSource.asObservable();\n\n public announceProfile(profile: Profile) {\n this.profileSource.next(profile);\n }\n\n}\n","<div class=\"form-group\" [id]=\"id()\">\n\n <div class=\"panel collection-indicator\">\n\n <h2 class=\"heading-h2 error-spacing\">\n {{caseField | ccdFieldLabel}}\n </h2>\n <button class=\"button write-collection-add-item__top\" type=\"button\" (click)=\"addItem(true)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\">Add new</button>\n <h2 class=\"heading-h2 error-spacing\" *ngIf=\"caseField.hint_text || formArray.errors\">\n <span *ngIf=\"caseField.hint_text\" class=\"form-hint\">{{caseField.hint_text}}</span>\n <span *ngIf=\"formArray.errors\" class=\"error-message\">{{formArray.errors | ccdFirstError:caseField.label}}</span>\n </h2>\n\n <div class=\"form-group\" [hidden]=\"caseField.hidden\" *ngIf=\"caseField.value && caseField.value.length\">\n\n <div class=\"form-group\" *ngFor=\"let item of collItems; let i = index\" #collectionItem>\n <div class=\"collection-title\">\n <div class=\"float-left\">\n <label [for]=\"item.prefix + i\"><h3 class=\"heading-h3\">{{itemLabel(i)}}</h3></label>\n </div>\n <div class=\"float-right\">\n <button class=\"button button-secondary\" type=\"button\" (click)=\"openModal(i)\"\n [disabled]=\"isNotAuthorisedToDelete(i)\"\n attr.aria-label=\"Remove {{ itemLabel(i) }}\">Remove</button>\n </div>\n </div>\n <ccd-field-write [caseField]=\"item.caseField\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [parent]=\"item.container\"\n [idPrefix]=\"item.prefix\"\n [hidden]=\"item.caseField.hidden\"\n [isExpanded]=\"isExpanded\"\n [isInSearchBlock]=\"isInSearchBlock\">\n </ccd-field-write>\n </div>\n\n </div>\n\n <button class=\"button write-collection-add-item__bottom\" type=\"button\" (click)=\"addItem(false)\" [disabled]=\"isNotAuthorisedToCreate() || isSearchFilter()\" *ngIf=\"caseField.value && caseField.value.length\">Add new</button>\n\n </div>\n\n</div>","import { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { ScrollToService } from '@nicky-lenaers/ngx-scroll-to';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { Subscription } from 'rxjs';\nimport { finalize, take } from 'rxjs/operators';\nimport { FieldType } from '../../../domain/definition/field-type.model';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Profile } from '../../../domain/profile/profile.model';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { ProfileNotifier } from '../../../services/profile/profile.notifier';\nimport { RemoveDialogComponent } from '../../dialogs/remove-dialog/remove-dialog.component';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\ntype CollectionItem = {\n caseField: CaseField;\n item: any;\n prefix: string;\n index: number;\n container: FormGroup;\n};\n\n@Component({\n selector: 'ccd-write-collection-field',\n templateUrl: './write-collection-field.html',\n styleUrls: ['./collection-field.scss']\n})\nexport class WriteCollectionFieldComponent extends AbstractFieldWriteComponent implements OnInit, OnDestroy {\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public formGroup: FormGroup;\n\n public formArray: FormArray;\n\n public profile: Profile;\n public profileSubscription: Subscription;\n\n @ViewChildren('collectionItem')\n private readonly items: QueryList<ElementRef>;\n public readonly collItems: CollectionItem[] = [];\n\n constructor(private readonly dialog: MatDialog,\n private readonly scrollToService: ScrollToService,\n private readonly profileNotifier: ProfileNotifier\n ) {\n super();\n }\n\n public ngOnInit(): void {\n if (!this.isExpanded) { // meaning I am not rendered on the search/workbasket input filter\n this.profileSubscription = this.profileNotifier.profile.subscribe(_ => this.profile = _);\n }\n this.caseField.value = this.caseField.value || [];\n this.formArray = this.registerControl(new FormArray([]), true) as FormArray;\n this.formArray['caseField'] = this.caseField;\n this.caseField.value.forEach((item: any, index: number) => {\n const prefix: string = this.buildIdPrefix(index);\n const caseField = this.buildCaseField(item, index);\n const container = this.getContainer(index);\n if (this.collItems.length <= index) {\n this.collItems.length = index + 1;\n }\n this.collItems[index] = { caseField, item, prefix, index, container };\n });\n }\n\n public ngOnDestroy(): void {\n if (this.profileSubscription) {\n this.profileSubscription.unsubscribe();\n }\n }\n\n public buildCaseField(item, index: number, isNew = false): CaseField {\n /**\n * What follow is code that makes me want to go jump in the shower!\n * Basically, we land in here repeatedly because of the binding, and\n * this is what appears to be happening:\n * 1. this.formArray contains no controls at all.\n * this.formArray.value = [];\n * 2. this.formArray contains a FormGroup, which contains a single\n * FormControl with the id 'code'.\n * this.formArray.value = [{ code: null }]\n * 3. this.formArray contains what is being set up below.\n * this.formArray.value = [{ code: null, id: null, value: { code: null } }]\n * 4, 5, 6, etc - the same as 3.\n */\n let group: FormGroup;\n if (this.formArray && (index < this.formArray.length)) {\n group = this.formArray.at(index) as FormGroup;\n } else {\n group = new FormGroup({});\n }\n\n let value;\n if (this.isCollectionOfSimpleType(this.caseField)) {\n value = group.get('value') as FormControl;\n if (!value) {\n value = new FormControl(item.value);\n // Now add the value FormControl to the outer group.\n group.addControl('value', value);\n }\n } else {\n value = group.get('value') as FormGroup;\n if (!value) {\n value = new FormGroup({});\n for (const key of Object.keys(group.controls)) {\n value.addControl(key, group.get(key));\n // DON'T remove the control for this key from the outer group or it\n // goes awry. So DON'T uncomment the below line!\n // group.removeControl(key);\n }\n // Now add the value FormGroup to the outer group.\n group.addControl('value', value);\n }\n }\n let id = group.get('id') as FormControl;\n // If we're not in scenario 3, above, we need to do some jiggery pokery\n // and set up the id and value controls.\n // Also set up an id control if it doesn't yet exist.\n if (!id) {\n id = new FormControl(item.id);\n group.addControl('id', id);\n }\n\n /**\n * Again, very sorry. I've not found a better way to produce the\n * output needed for what needs to be sent to the server yet.\n */\n\n // Now, add the outer group to the array (or replace it).\n if (index < this.formArray.length) {\n this.formArray.setControl(index, group);\n } else {\n this.formArray.push(group);\n }\n\n // Now set up the CaseField and validation.\n let cfid: string;\n if (value instanceof FormControl) {\n cfid = 'value';\n } else {\n cfid = index.toString();\n }\n\n // isNew:\n const cf: CaseField = this.newCaseField(cfid, item, index, isNew);\n FormValidatorsService.addValidators(cf, value);\n FieldsUtils.addCaseFieldAndComponentReferences(value, cf, this);\n return cf;\n }\n\n public buildIdPrefix(index: number): string {\n const prefix = `${this.idPrefix}${this.caseField.id}_`;\n if (this.caseField.field_type.collection_field_type.type === 'Complex') {\n return `${prefix}${index}_`;\n }\n return prefix;\n }\n\n public isSearchFilter(): boolean {\n return this.isInSearchBlock && this.collItems.length > 0;\n }\n\n public addItem(doScroll: boolean): void {\n // Manually resetting errors is required to prevent `ExpressionChangedAfterItHasBeenCheckedError`\n this.formArray.setErrors(null);\n const item = { value: null };\n this.caseField.value.push(item);\n const index = this.caseField.value.length - 1;\n const caseField: CaseField = this.buildCaseField(item, index, true);\n const prefix = this.buildIdPrefix(index);\n const container = this.getContainer(index);\n this.collItems.push({ caseField, item, index, prefix, container });\n\n // Timeout is required for the collection item to be rendered before it can be scrolled to or focused.\n if (doScroll) {\n setTimeout(() => {\n this.scrollToService.scrollTo({\n target: `${this.buildIdPrefix(index)}${index}`,\n duration: 1000,\n offset: -150,\n })\n .pipe(finalize(() => this.focusLastItem()))\n .subscribe(() => {}, console.error);\n });\n } else {\n setTimeout(() => this.focusLastItem());\n }\n }\n\n public itemLabel(index: number) {\n if (index) {\n return `${this.caseField.label} ${index + 1}`;\n }\n return this.caseField.label;\n }\n\n public isNotAuthorisedToCreate() {\n if (this.isExpanded) {\n return false;\n }\n return !this.getCollectionPermission(this.caseField, 'allowInsert');\n }\n\n public getCollectionPermission(field: CaseField, type: string) {\n return field.display_context_parameter &&\n field.display_context_parameter.split('#')\n .filter(item => item.startsWith('COLLECTION('))[0]\n .includes(type);\n }\n\n public isNotAuthorisedToUpdate(index) {\n if (this.isExpanded) {\n return false;\n }\n // Was reassesed as part of EUI-3505. There is still a caveat around CRD, but that was deemed an unlikely scenario\n const id = this.getControlIdAt(index);\n if (id) {\n if (!!this.profile.user && !!this.profile.user.idam) {\n const updateRole = this.profile.user.idam.roles.find(role => this.hasUpdateAccess(role));\n return !updateRole;\n }\n }\n return false;\n }\n\n public hasUpdateAccess(role: any): boolean {\n return !!this.caseField.acls.find( acl => acl.role === role && acl.update === true);\n }\n\n public isNotAuthorisedToDelete(index: number) {\n if (this.isExpanded) {\n return false;\n }\n // Should be able to delete if creating a case even if \"D\" is absent, hence:\n const id = this.getControlIdAt(index);\n return !!id && !this.getCollectionPermission(this.caseField, 'allowDelete');\n }\n\n public openModal(i: number) {\n const dialogConfig = new MatDialogConfig();\n dialogConfig.disableClose = true;\n dialogConfig.autoFocus = true;\n dialogConfig.ariaLabel = 'Label';\n dialogConfig.height = '220px';\n dialogConfig.width = '550px';\n dialogConfig.panelClass = 'dialog';\n\n dialogConfig.closeOnNavigation = false;\n dialogConfig.position = {\n top: window.innerHeight / 2 - 110 + 'px', left: window.innerWidth / 2 - 275 + 'px'\n };\n\n const dialogRef = this.dialog.open(RemoveDialogComponent, dialogConfig);\n\n dialogRef.afterClosed().pipe(take(1)).subscribe(result => {\n if (result === 'Remove') {\n this.removeItem(i);\n }\n });\n }\n\n private newCaseField(id: string, item, index, isNew = false) {\n const isNotAuthorisedToUpdate = !isNew && this.isNotAuthorisedToUpdate(index);\n\n const fieldType = plainToClassFromExist(new FieldType(), this.caseField.field_type.collection_field_type);\n if (fieldType.complex_fields) {\n fieldType.complex_fields\n .filter((cf: CaseField) => !!cf.show_condition)\n .map((cf: CaseField) => cf.hidden = true);\n }\n\n // Remove the bit setting the hidden flag here as it's an item in the array and\n // its hidden state isn't independently re-evaluated when the form is changed.\n return plainToClassFromExist(new CaseField(), {\n id,\n field_type: fieldType,\n display_context: isNotAuthorisedToUpdate ? 'READONLY' : this.caseField.display_context,\n value: item.value,\n label: null,\n acls: this.caseField.acls\n });\n }\n\n private getContainer(index: number): FormGroup {\n const value = this.formArray.at(index).get('value');\n if (value instanceof FormGroup) {\n return value;\n } else {\n return this.formArray.at(index) as FormGroup;\n }\n }\n\n private focusLastItem() {\n const item: any = this.items.last.nativeElement.querySelector('.form-control');\n if (item) {\n item.focus();\n }\n }\n\n private removeItem(index: number): void {\n this.collItems.splice(index, 1);\n this.caseField.value.splice(index, 1);\n this.formArray.removeAt(index);\n }\n\n /**\n * Applied full solution as part of EUI-3505\n */\n private getControlIdAt(index: number): string {\n\n // this.formArray contains [ FormGroup( id: FormControl, value: FormGroup ), ... ].\n // Here, we need to get the value of the id FormControl.\n const group: FormGroup = this.formArray.at(index) as FormGroup;\n const control: FormControl = group.get('id') as FormControl;\n return control ? control.value : undefined;\n }\n\n private isCollectionOfSimpleType(caseField: CaseField) {\n const notSimple = ['Collection', 'Complex'];\n return notSimple.indexOf( caseField.field_type.collection_field_type.type ) < 0;\n }\n}\n","<dl class=\"complex-raw\">\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true :topLevelFormGroup :id()\">\n <dt [hidden]=\"field.hidden || field.field_type.type === 'Label'\"><span class=\"text-16\">{{field.label}}</span></dt>\n <dd [hidden]=\"field.hidden\">\n <ccd-field-read [caseField]=\"field\" [context]=\"context\" [caseFields]=\"caseFields\" [topLevelFormGroup]=\"topLevelFormGroup\" [idPrefix]=\"idPrefix\"></ccd-field-read>\n </dd>\n </ng-container>\n</dl>\n","import { Component, Input } from '@angular/core';\nimport { CaseField } from '../../../domain';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n/**\n * Display a complex type fields as a list of values without labels.\n * This is intended for rendering of Check Your Answer page.\n */\n@Component({\n selector: 'ccd-read-complex-field-raw',\n templateUrl: './read-complex-field-raw.html',\n styleUrls: [\n './read-complex-field-raw.scss'\n ],\n})\nexport class ReadComplexFieldRawComponent extends AbstractFieldReadComponent {\n\n @Input()\n public caseFields: CaseField[] = [];\n}\n","import { Orderable } from '../order';\nimport { AccessControlList } from './access-control-list.model';\nimport { EventCaseField } from './event-case-field.model';\n\nexport class CaseEvent implements Orderable {\n public id: string;\n public name: string;\n public post_state: string;\n public pre_states: string[];\n public case_fields: EventCaseField[];\n public description: string;\n public order?: number;\n public acls?: AccessControlList[];\n}\n","import { Orderable } from '../order';\n\nexport class CaseState implements Orderable {\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { CaseEvent } from './case-event.model';\nimport { CaseState } from './case-state.model';\n\n// Light clone of CaseType to be used in Jurisdiction class\n// to avoid cyclic dependency\nexport class CaseTypeLite {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n public description: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseEvent } from './case-event.model';\nimport { CaseField } from './case-field.model';\nimport { CaseState } from './case-state.model';\nimport { Jurisdiction } from './jurisdiction.model';\n\n// @dynamics\nexport class CaseType {\n public id: string;\n public name: string;\n public events: CaseEvent[];\n public states: CaseState[];\n\n @Type(() => CaseField)\n public case_fields: CaseField[];\n\n public description: string;\n public jurisdiction: Jurisdiction;\n public printEnabled?: boolean;\n}\n","export class EventCaseField {\n public case_field_id: string;\n public showCondition: string;\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","export class Banner {\n public bannerDescription: string;\n public bannerUrlText: string;\n public bannerUrl: string;\n public bannerViewed: boolean;\n public bannerEnabled: boolean;\n}\n","<div class=\"complex-panel\" [hidden]=\"caseField.hidden\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label}}</span></dt>\n <dd></dd>\n </dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table\">\n <tbody>\n <!-- <COMPLEX table field header>-->\n <tr>\n <th *ngFor=\"let heading of columns\" scope=\"col\">\n <span class=\"text-16\">{{columnsAllLabels[heading].label}}</span>\n <a href=\"javascript:void(0)\"\n (click)=\"sortRowsByColumns(heading)\"\n class=\"sort-widget\"\n [innerHTML]=\"sortWidget(columnsAllLabels[heading])\"></a>\n </th>\n <th></th>\n </tr>\n <!-- </COMPLEX table field header>-->\n <ng-container *ngFor=\"let item of rows; let i = index;\">\n <!-- <COMPLEX table collapsed view>-->\n <tr class=\"new-table-row accordion-heading\" (click)=\"isHidden[i] = !isHidden[i]\"\n [class.last-accordion]=\"isHidden[i]\">\n <ng-container *ngFor=\"let heading of columns\">\n <td class=\"text-16\">\n <div *ngIf=\"item[heading]; else showEmptyTd\">\n <ccd-field-read\n [caseField]=\"toCaseField(heading, item[heading].label, columnsHorizontalLabel[heading].type, item[heading])\"\n [context]=\"context\"></ccd-field-read>\n </div>\n <ng-template #showEmptyTd>\n <div> </div>\n </ng-template>\n </td>\n </ng-container>\n <td>\n <div style=\"float: right;\">\n <a href=\"javascript:void(0)\"> <img src=\"{{ getImage(i) }}\" alt=\"image\" class=\"accordion-image\"/></a>\n </div>\n </td>\n </tr>\n <!-- </COMPLEX table collapsed view>-->\n <!-- <COMPLEX table expanded view>-->\n <tr [hidden]=\"isHidden[i]\">\n <td [colSpan]=\"columns.length + 1\">\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table expanded\">\n <tbody>\n <ng-container\n *ngFor=\"let vLabel of columnsVerticalLabel | keyvalue: keepOriginalOrder | ccdCollectionTableCaseFieldsFilter: caseField: rows[i] | ccdReadFieldsFilter:true :undefined :true\">\n <!-- <COMPLEX table expandable body simple field>-->\n <tr class=\"complex-panel-simple-field accordion-body\" *ngIf=\"item[vLabel.id]\" [hidden]=\"vLabel.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{vLabel.label}}</span></th>\n <td *ngIf=\"vLabel['type'] !== 'Complex'\" class=\"text-16\">\n <ccd-field-read [caseField]=\"toCaseField('', vLabel.label, vLabel.field_type, item[vLabel.id])\"\n [context]=\"context\"></ccd-field-read>\n </td>\n </tr>\n <!-- </COMPLEX table expandable body simple field>-->\n\n <!-- <COMPLEX table expandable body complex field>-->\n <tr *ngIf=\"vLabel['type'] === 'Complex' && addCaseFieldValue(vLabel, item[vLabel.id])\" [hidden]=\"vLabel.hidden\">\n <td colspan=\"2\">\n <ng-container *ngFor=\"let caseField of vLabel | ccdReadFieldsFilter:true :undefined :true\">\n <tr class=\"complex-panel-compound-field\" *ngIf=\"(caseField | ccdIsCompound); else SimpleRow\" [hidden]=\"caseField\">\n <td colspan=\"2\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n </tr>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-nested-field\" [hidden]=\"caseField.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{caseField.label}}</span></th>\n <td *ngIf=\"!item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n <td *ngIf=\"item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <ccd-read-case-link-field [caseField]=\"addCaseReferenceValue(caseField, item[vLabel.id].CaseReference)\" [context]=\"context\"></ccd-read-case-link-field>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </td>\n </tr>\n <!-- <COMPLEX table expandable body complex field>-->\n </ng-container>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- </COMPLEX table expanded view>-->\n </ng-container>\n </tbody>\n </table>\n</div>\n","import { Component, OnInit } from '@angular/core';\n\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { SortOrder } from './sort-order';\n\n@Component({\n selector: 'ccd-read-complex-field-collection-table',\n templateUrl: './read-complex-field-collection-table.html',\n styleUrls: ['./read-complex-field-collection-table.scss']\n})\nexport class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponent implements OnInit {\n\n public columns: string[];\n public columnsVerticalLabel: any;\n public columnsHorizontalLabel: any;\n public columnsAllLabels: any;\n public rows: any[] = [];\n public isHidden: boolean[] = [];\n private static isSortAscending(column: any): boolean {\n return !(column.sortOrder === SortOrder.UNSORTED || column.sortOrder === SortOrder.DESCENDING);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.display_context_parameter\n && this.caseField.display_context_parameter.trim().startsWith('#TABLE(')) {\n\n const displayContextParameter = this.caseField.display_context_parameter.trim();\n const result: string = displayContextParameter.replace('#TABLE(', '');\n this.columns = result.replace(')', '').split(',').map((c: string) => c.trim());\n\n const labelsVertical: { [k: string]: any } = {};\n const labelsHorizontal: { [k: string]: any } = {};\n const allLabels: { [k: string]: any } = {};\n this.populateCaseFieldValuesIntoRows();\n this.populateLabels(labelsVertical, allLabels);\n this.populateHorizontalLabels(labelsHorizontal, allLabels, labelsVertical);\n\n this.columnsVerticalLabel = labelsVertical;\n this.columnsHorizontalLabel = labelsHorizontal;\n this.columnsAllLabels = allLabels;\n\n }\n }\n\n public getImage(row): string {\n if (this.isHidden[row]) {\n return 'img/accordion-plus.png';\n } else {\n if (this.isVerticleDataNotEmpty(row)) {\n return 'img/accordion-minus.png';\n } else {\n this.isHidden[row] = true;\n return 'img/accordion-plus.png';\n }\n }\n }\n\n /**\n * Needs to be called before 'ccdFieldsFilter' pipe is used, as it needs a caseField value.\n */\n public addCaseFieldValue(field, value): boolean {\n field.value = value;\n return true;\n }\n\n public isNotBlank(value: string) {\n return value !== null && value !== '';\n }\n\n public addCaseReferenceValue(field, value: any): any {\n field.value = { CaseReference: value};\n return field;\n }\n\n public toCaseField(id: string, label: string, field_type: any, value: any): CaseField {\n return plainToClassFromExist(new CaseField(), {\n id,\n label,\n display_context: 'READONLY',\n value,\n field_type\n });\n }\n\n public keepOriginalOrder = (a, b) => a.key;\n\n public sortRowsByColumns(column): void {\n const shouldSortInAscendingOrder = this.columnsHorizontalLabel[column].sortOrder === SortOrder.UNSORTED\n || this.columnsHorizontalLabel[column].sortOrder === SortOrder.DESCENDING;\n\n switch (this.columnsHorizontalLabel[column].type.type) {\n case 'Number':\n case 'MoneyGBP': {\n if (shouldSortInAscendingOrder) {\n this.rows.sort((a, b) => a[column] - b[column]);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.ASCENDING;\n } else {\n this.rows.sort((a, b) => b[column] - a[column]);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.DESCENDING;\n }\n break;\n }\n case 'Text':\n case 'TextArea':\n case 'Email':\n case 'Date':\n case 'DateTime':\n case 'Label':\n case 'Postcode':\n case 'YesOrNo':\n case 'PhoneUK':\n case 'FixedList': {\n if (shouldSortInAscendingOrder) {\n this.rows.sort((a, b) => a[column] < b[column] ? -1 : a[column] > b[column] ? 1 : 0);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.ASCENDING;\n } else {\n this.rows.sort((a, b) => a[column] < b[column] ? 1 : a[column] > b[column] ? -1 : 0);\n this.columnsHorizontalLabel[column].sortOrder = SortOrder.DESCENDING;\n }\n }\n break;\n }\n }\n\n public sortWidget(column: any): string {\n return ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? '▼' : '▲';\n }\n\n private populateHorizontalLabels(labelsHorizontal: { [p: string]: any },\n allLabels: { [p: string]: any },\n labelsVertical: { [p: string]: any }): void {\n for (const id of this.columns) {\n const trimmedId = id.trim();\n labelsHorizontal[trimmedId] = allLabels[trimmedId];\n labelsHorizontal[trimmedId].sortOrder = SortOrder.UNSORTED;\n delete labelsVertical[trimmedId];\n }\n }\n\n private populateLabels(labelsVertical: { [p: string]: any }, allLabels: { [p: string]: any }): void {\n for (const obj of this.caseField.field_type.complex_fields) {\n if (obj.field_type.type === 'FixedList' ||\n obj.field_type.type === 'MultiSelectList' ||\n obj.field_type.type === 'FixedRadioList') {\n labelsVertical[obj.id] = {label: obj.label, type: obj.field_type, caseField: obj};\n allLabels[obj.id] = {label: obj.label, type: obj.field_type};\n } else if (obj.isComplex()) {\n labelsVertical[obj.id] = {label: obj.label, type: obj.field_type.type, caseField: obj};\n allLabels[obj.id] = {label: obj.label, type: obj.field_type.type, caseField: obj};\n } else {\n labelsVertical[obj.id] = {label: obj.label, type: {type: obj.field_type.type}, caseField: obj};\n allLabels[obj.id] = {label: obj.label, type: {type: obj.field_type.type}, caseField: obj};\n }\n }\n }\n\n private populateCaseFieldValuesIntoRows(): void {\n for (const obj of this.caseField.value) {\n this.rows.push(obj.value);\n this.isHidden.push(true);\n }\n }\n\n private isVerticleDataNotEmpty(row): boolean {\n let result = false;\n for (const key in this.columnsVerticalLabel) {\n if (this.rows[row][key]) {\n result = true;\n }\n }\n return result;\n }\n}\n","<div class=\"complex-panel\">\n <dl class=\"complex-panel-title\"><dt><span class=\"text-16\">{{caseField.label}}</span></dt><dd></dd></dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex field table\">\n <tbody>\n <ng-container *ngFor=\"let field of caseField | ccdReadFieldsFilter:false :undefined :true\">\n <ng-container *ngIf=\"(field | ccdIsCompound); else SimpleRow\">\n <tr class=\"complex-panel-compound-field\" [hidden]=\"field.hidden\">\n <td colspan=\"2\">\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-container>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-simple-field\" [hidden]=\"field.hidden\">\n <th id=\"complex-panel-simple-field-label\"><span class=\"text-16\">{{field.label}}</span></th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"topLevelFormGroup\"\n [caseField]=\"field\" [context]=\"context\"></ccd-field-read>\n </span>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-complex-field-table',\n templateUrl: './read-complex-field-table.html',\n styleUrls: ['./read-complex-field-table.scss']\n})\nexport class ReadComplexFieldTableComponent extends AbstractFieldReadComponent {\n @Input()\n public caseFields: CaseField[] = [];\n}\n","<ng-container [ngSwitch]=\"context\">\n <ccd-read-complex-field-raw\n *ngSwitchCase=\"paletteContext.CHECK_YOUR_ANSWER\"\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"idPrefix\"\n ></ccd-read-complex-field-raw>\n <ccd-read-complex-field-collection-table\n *ngSwitchCase=\"paletteContext.TABLE_VIEW\"\n [caseField]=\"caseField\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"idPrefix\"\n ></ccd-read-complex-field-collection-table>\n <ccd-read-complex-field-table\n *ngSwitchDefault\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n [topLevelFormGroup]=\"topLevelFormGroup\"\n [idPrefix]=\"idPrefix\"\n ></ccd-read-complex-field-table>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { PaletteContext } from '../base-field/palette-context.enum';\n\n@Component({\n selector: 'ccd-read-complex-field',\n templateUrl: './read-complex-field.html',\n})\nexport class ReadComplexFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public caseFields: CaseField[] = [];\n\n public paletteContext = PaletteContext;\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.display_context_parameter) {\n this.context = PaletteContext.TABLE_VIEW;\n } else if (!this.caseField.display_context_parameter && this.context && this.context !== PaletteContext.CHECK_YOUR_ANSWER) {\n // default to default views\n this.context = PaletteContext.DEFAULT;\n }\n if (this.caseField.field_type) {\n this.caseField.field_type.complex_fields.forEach(field => {\n if (field.isDynamic()) {\n field.list_items = this.caseField.value[field.id].list_items;\n field.value = {\n list_items: field.list_items,\n value: this.caseField.value[field.id].value && this.caseField.value[field.id].value.code ?\n this.caseField.value[field.id].value.code :\n this.caseField.value[field.id].value\n };\n }\n });\n }\n }\n\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-date-field',\n template: `<span class=\"text-16\">{{caseField.value | ccdDate:'utc':caseField.dateTimeDisplayFormat}}</span>`\n})\nexport class ReadDateFieldComponent extends AbstractFieldReadComponent {\n public timeZone = 'utc';\n}\n","import { NgxMatDateFormats } from '@angular-material-components/datetime-picker';\n\nexport const CUSTOM_MOMENT_FORMATS: NgxMatDateFormats = {\n parse: {\n dateInput: 'YYYY MM DD HH:mm:ss'\n },\n display: {\n dateInput: 'YYYY MM DD HH:mm:ss',\n monthYearLabel: 'MMMM YYYY',\n dateA11yLabel: 'EEE/MMM/YYYY',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n","<div class=\"govuk-form-group bottom-30\" [id]=\"caseField.id\"\n [ngClass]=\"{'form-group-error': dateControl && !dateControl.valid && dateControl.dirty}\">\n <fieldset>\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel }}</span>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\"\n *ngIf=\"dateControl && dateControl.errors && dateControl.dirty && !(minError || maxError)\">{{dateControl.errors | ccdFirstError:caseField.label}}</span>\n <span class=\"error-message\"\n *ngIf=\"dateControl && dateControl.dirty && minError\">This date is older than the minimum date allowed</span>\n <span class=\"error-message\"\n *ngIf=\"dateControl && dateControl.dirty && maxError\">This date is later than the maximum date allowed</span>\n </legend>\n <div class=\"datepicker-container\">\n <input class=\"govuk-input\"\n #input\n attr.aria-label=\"Please enter a date and time in the format {{dateTimeEntryFormat}}\"\n [min]=\"minDate(caseField)\"\n [max]=\"maxDate(caseField)\"\n [formControl]=\"dateControl\"\n [ngxMatDatetimePicker]=\"picker\"\n (focusin)=\"focusIn()\"\n (focusout)=\"focusOut()\"\n (dateChange)=\"valueChanged()\"\n ng-model-options=\"{timezone:'utc'}\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\" id=\"pickerOpener\"></mat-datepicker-toggle>\n <ngx-mat-datetime-picker #picker\n [color]=\"color\"\n [touchUi]=\"touchUi\"\n [hideTime]=\"hideTime\"\n [startView]=\"startView\"\n [stepHour]=\"stepHour\"\n [stepSecond]=\"stepSecond\"\n [stepMinute]=\"stepMinute\"\n [showSeconds]=\"showSeconds\"\n [showSpinners]=\"showSpinners\"\n [disableMinute]=\"disableMinute\"\n [enableMeridian]=\"enableMeridian\"\n (yearSelected)=\"yearSelected($event)\"\n (monthSelected)=\"monthSelected($event)\"\n (opened)=\"toggleClick()\"\n >\n </ngx-mat-datetime-picker>\n </div>\n </fieldset>\n</div>\n","import {\n NgxMatDateAdapter,\n NgxMatDateFormats,\n NgxMatDatetimePicker, NGX_MAT_DATE_FORMATS\n} from '@angular-material-components/datetime-picker';\nimport { NgxMatMomentAdapter, NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular-material-components/moment-adapter';\nimport { Component, ElementRef, Inject, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { Moment } from 'moment/moment';\n\nimport * as moment from 'moment';\nimport { FormatTranslatorService } from '../../../services/case-fields/format-translator.service';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\nimport { CUSTOM_MOMENT_FORMATS } from './datetime-picker-utils';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n@Component({\n selector: 'ccd-datetime-picker',\n templateUrl: './datetime-picker.component.html',\n styleUrls: ['./datetime-picker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_MOMENT_FORMATS },\n { provide: NgxMatDateAdapter, useClass: NgxMatMomentAdapter },\n { provide: NGX_MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }\n ]\n})\n\nexport class DatetimePickerComponent extends AbstractFormFieldComponent implements OnInit {\n\n public showSpinners = true;\n public showSeconds = false;\n public touchUi = false;\n public enableMeridian = false;\n public stepHour = 1;\n public stepMinute = 1;\n public stepSecond = 1;\n public color: ThemePalette = 'primary';\n public disableMinute = true;\n public hideTime = true;\n public hideMinutes = true;\n public startView = 'month';\n public yearSelection = false;\n public checkTime = true;\n public stringEdited = false;\n public minError = false;\n public maxError = false;\n public dateTimeEntryFormat: string;\n\n @ViewChild('picker', { static: false }) public datetimePicker: NgxMatDatetimePicker<any>;\n @ViewChild('input', { static: false }) public inputElement: ElementRef<HTMLInputElement>;\n\n @Input() public dateControl: FormControl = new FormControl(new Date());\n\n private minimumDate = new Date('01/01/1800');\n private maximumDate = null;\n private momentFormat = 'YYYY-MM-DDTHH:mm:ss.SSS';\n\n constructor(private readonly formatTranslationService: FormatTranslatorService,\n @Inject(NGX_MAT_DATE_FORMATS) private readonly ngxMatDateFormats: NgxMatDateFormats) {\n super();\n }\n\n public ngOnInit(): void {\n this.dateTimeEntryFormat = this.formatTranslationService.showOnlyDates(this.caseField.dateTimeEntryFormat);\n this.configureDatePicker(this.dateTimeEntryFormat);\n // set date control based on mandatory field\n this.dateControl = (this.caseField.isMandatory ?\n this.registerControl(new FormControl(this.caseField.value || '', [Validators.required]))\n : this.registerControl(new FormControl(this.caseField.value))) as FormControl;\n // in resetting the format just after the page initialises, the input can be reformatted\n // otherwise the last format given will be how the text shown will be displayed\n setTimeout(() => {\n this.setDateTimeFormat();\n this.formatValueAndSetErrors();\n }, 1000);\n // when the status changes check that the maximum/minimum date has not been exceeded\n this.dateControl.statusChanges.subscribe(() => {\n this.minError = this.dateControl.hasError('matDatetimePickerMin');\n this.maxError = this.dateControl.hasError('matDatetimePickerMax');\n });\n }\n\n public setDateTimeFormat(): void {\n this.ngxMatDateFormats.parse.dateInput = this.dateTimeEntryFormat;\n this.ngxMatDateFormats.display.dateInput = this.dateTimeEntryFormat;\n }\n\n /*\n When the value changes, update the form control\n */\n public valueChanged(): void {\n this.formatValueAndSetErrors();\n }\n\n public focusIn(): void {\n this.setDateTimeFormat();\n }\n\n public focusOut(): void {\n // focus out needed to obtain errors (relevant to formatting)\n this.formatValueAndSetErrors();\n }\n\n public toggleClick(): void {\n this.setDateTimeFormat();\n }\n\n public minDate(caseField: CaseField): Date {\n // set minimum date\n if (caseField.field_type.min instanceof Date) {\n this.minimumDate = caseField.field_type.min ? new Date(caseField.field_type.min) : this.minimumDate;\n }\n return this.minimumDate;\n }\n\n public maxDate(caseField: CaseField): Date {\n // set maximum date\n if (caseField.field_type.max instanceof Date) {\n this.maximumDate = caseField.field_type.max ? new Date(caseField.field_type.max) : this.maximumDate;\n }\n return this.maximumDate;\n }\n\n public configureDatePicker(dateTimePickerFormat: string): void {\n if (this.caseField.field_type.type === 'Date') {\n this.hideTime = true;\n this.checkTime = false;\n this.dateTimeEntryFormat = this.formatTranslationService.removeTime(this.dateTimeEntryFormat);\n this.momentFormat = 'YYYY-MM-DD';\n }\n\n if (this.checkTime) {\n\n if (this.formatTranslationService.hasSeconds(dateTimePickerFormat)) {\n this.showSeconds = true;\n this.hideMinutes = false;\n this.disableMinute = false;\n this.hideTime = false;\n if (!this.formatTranslationService.is24Hour(dateTimePickerFormat)) {\n this.enableMeridian = true;\n }\n }\n if (this.formatTranslationService.hasHours(dateTimePickerFormat)) {\n this.hideTime = false;\n if (!this.formatTranslationService.is24Hour(dateTimePickerFormat)) {\n this.enableMeridian = true;\n }\n return;\n }\n\n if (this.formatTranslationService.hasMinutes(dateTimePickerFormat)) {\n this.hideMinutes = false;\n this.disableMinute = false;\n this.hideTime = false;\n if (!this.formatTranslationService.is24Hour(dateTimePickerFormat)) {\n this.enableMeridian = true;\n }\n return;\n }\n }\n\n if (this.formatTranslationService.hasDate(dateTimePickerFormat)) {\n return;\n }\n\n if (this.formatTranslationService.hasNoDay(dateTimePickerFormat)) {\n this.startView = 'multi-year';\n }\n\n if (this.formatTranslationService.hasNoDayAndMonth(dateTimePickerFormat)) {\n this.startView = 'multi-year';\n this.yearSelection = true;\n }\n }\n\n public yearSelected(event: Moment): void {\n if (this.startView === 'multi-year' && this.yearSelection) {\n this.dateControl.patchValue(event.toISOString());\n this.datetimePicker.close();\n this.valueChanged();\n }\n }\n\n public monthSelected(event: Moment): void {\n if (this.startView === 'multi-year') {\n this.dateControl.patchValue(event.toISOString());\n this.dateControl.patchValue(event.toISOString());\n this.datetimePicker.close();\n this.valueChanged();\n }\n }\n\n private formatValueAndSetErrors(): void {\n if (this.inputElement.nativeElement.value) {\n let formValue = this.inputElement.nativeElement.value;\n formValue = moment(formValue, this.dateTimeEntryFormat).format(this.momentFormat);\n if (formValue !== 'Invalid date') {\n // if not invalid set the value as the formatted value\n this.dateControl.setValue(formValue);\n } else {\n // ensure that the datepicker picks up the invalid error\n const keepErrorText = this.inputElement.nativeElement.value;\n this.dateControl.setValue(keepErrorText);\n this.inputElement.nativeElement.value = keepErrorText;\n }\n } else {\n // ensure required errors are picked up if relevant\n this.dateControl.setValue('');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\n\n@Injectable()\nexport class CaseFieldService {\n\n public isOptional (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'OPTIONAL';\n }\n\n public isReadOnly (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'READONLY';\n }\n\n public isMandatory (field: CaseField) {\n if (!field || !field.display_context) {\n return false;\n }\n return field.display_context.toUpperCase() === 'MANDATORY';\n }\n\n public isLabel (field: CaseField) {\n if (!field || !field.field_type) {\n return false;\n }\n return field.field_type.type === 'Label';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\n\n@Pipe({\n name: 'ccdIsMandatory'\n})\nexport class IsMandatoryPipe implements PipeTransform {\n\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public transform(field: CaseField): boolean {\n return this.caseFieldService.isMandatory(field);\n }\n}\n","<div class=\"form-group bottom-30\" [id]=\"id()\" [ngClass]=\"{'form-group-error': dateControl && !dateControl.valid && (dateControl.dirty || dateControl.touched)}\">\n\n <fieldset>\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel }}</span>\n </legend>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"dateControl && dateControl.errors && (dateControl.dirty || dateControl.touched)\">{{dateControl.errors | ccdFirstError:caseField.label}}</span>\n <cut-date-input [id]=\"id()\"\n [isDateTime]=\"isDateTime()\"\n [mandatory]=\"caseField | ccdIsMandatory\"\n [isInvalid]=\"dateControl.errors && (dateControl.dirty || dateControl.touched)\"\n [formControl]=\"dateControl\"></cut-date-input>\n\n </fieldset>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-date-field',\n templateUrl: './write-date-field.html'\n})\nexport class WriteDateFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n public dateControl: FormControl;\n\n public ngOnInit() {\n this.dateControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n\n public isDateTime(): boolean {\n return this.caseField.field_type.id === 'DateTime';\n }\n\n}\n","<ng-container *ngIf=\"caseField.dateTimeEntryFormat; else nativeDatepicker\">\n <ccd-datetime-picker\n [caseField]=\"caseField\"\n [formGroup]=\"formGroup\"\n [parent]=\"parent\">\n </ccd-datetime-picker>\n</ng-container>\n<ng-template #nativeDatepicker>\n <ccd-write-date-field\n [caseField]=\"caseField\"\n [formGroup]=\"formGroup\"\n [parent]=\"parent\"\n ></ccd-write-date-field>\n</ng-template>\n\n","import { Component } from '@angular/core';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\n\n@Component({\n selector: 'ccd-write-date-container-field',\n templateUrl: './write-date-container-field.html'\n})\nexport class WriteDateContainerFieldComponent extends AbstractFormFieldComponent {}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n public locationAssign(url: string): void {\n window.location.assign(url);\n }\n\n public setLocalStorage(key: string, value: string) {\n window.localStorage.setItem(key, value);\n }\n\n public getLocalStorage(key: string) {\n return window.localStorage.getItem(key);\n }\n\n public clearLocalStorage() {\n window.localStorage.clear();\n }\n\n public removeLocalStorage(key: string) {\n window.localStorage.removeItem(key);\n }\n\n public setSessionStorage(key: string, value: string) {\n window.sessionStorage.setItem(key, value);\n }\n\n public getSessionStorage(key: string) {\n return window.sessionStorage.getItem(key);\n }\n\n public openOnNewTab(url: string): void {\n window.open(url, '_blank');\n }\n\n public confirm(message: string): boolean {\n return window.confirm(message);\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { DocumentData } from '../../domain/document/document-data.model';\nimport { HttpService } from '../http';\n\n@Injectable()\nexport class DocumentManagementService {\n private static readonly PDF = 'pdf';\n private static readonly IMAGE = 'image';\n private static readonly WORD = 'word';\n private static readonly EXCEL = 'excel';\n private static readonly POWERPOINT = 'powerpoint';\n private static readonly TXT = 'txt';\n private static readonly RTF = 'rtf';\n\n // This delay has been added to give enough time to the user on the UI to see the info messages on the document upload\n // field for cases when uploads are very fast.\n private static readonly RESPONSE_DELAY = 1000;\n\n private static readonly imagesList: string[] = ['GIF', 'JPG', 'JPEG', 'PNG', 'gif', 'jpg', 'jpeg', 'png'];\n private static readonly wordList: string[] = ['DOC', 'DOCX', 'doc', 'docx'];\n private static readonly excelList: string[] = ['XLS', 'XLSX', 'xls', 'xlsx'];\n private static readonly powerpointList: string[] = ['PPT', 'PPTX', 'ppt', 'pptx'];\n\n constructor(private readonly http: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public uploadFile(formData: FormData): Observable<DocumentData> {\n const url = this.getDocStoreUrl();\n // Do not set any headers, such as \"Accept\" or \"Content-Type\", with null values; this is not permitted with the\n // Angular HttpClient in @angular/common/http. Just create and pass a new HttpHeaders object. Angular will add the\n // correct headers and values automatically\n const headers = new HttpHeaders();\n return this.http\n .post(url, formData, {headers, observe: 'body'})\n .pipe(delay(DocumentManagementService.RESPONSE_DELAY));\n }\n\n public getMediaViewerInfo(documentFieldValue: any): string {\n const mediaViewerInfo = {\n document_binary_url: this.transformDocumentUrl(documentFieldValue.document_binary_url),\n document_filename: documentFieldValue.document_filename,\n content_type: this.getContentType(documentFieldValue),\n annotation_api_url: this.appConfig.getAnnotationApiUrl(),\n case_id: documentFieldValue.id,\n case_jurisdiction: documentFieldValue.jurisdiction\n };\n return JSON.stringify(mediaViewerInfo);\n }\n\n public getContentType(documentFieldValue: any): string {\n let fileExtension = '<unknown>';\n if (documentFieldValue.document_filename) {\n const position = documentFieldValue.document_filename.lastIndexOf('.');\n if (position === documentFieldValue.document_filename.length) {\n fileExtension = '';\n } else if (position >= 0) {\n fileExtension = documentFieldValue.document_filename.slice(position + 1);\n }\n }\n if (this.isImage(fileExtension)) {\n return DocumentManagementService.IMAGE;\n } else if (this.isWord(fileExtension)) {\n return DocumentManagementService.WORD;\n } else if (this.isExcel(fileExtension)) {\n return DocumentManagementService.EXCEL;\n } else if (this.isPowerpoint(fileExtension)) {\n return DocumentManagementService.POWERPOINT;\n } else if (fileExtension.toLowerCase() === 'txt') {\n return DocumentManagementService.TXT;\n } else if (fileExtension.toLowerCase() === 'rtf') {\n return DocumentManagementService.RTF;\n } else if (fileExtension.toLowerCase() === 'pdf') {\n return DocumentManagementService.PDF;\n } else {\n return fileExtension;\n }\n }\n\n public isImage(imageType: string): boolean {\n return DocumentManagementService.imagesList.find(e => e === imageType) !== undefined;\n }\n\n public isWord(wordType: string): boolean {\n return DocumentManagementService.wordList.find(e => e === wordType) !== undefined;\n }\n\n public isExcel(excelType: string): boolean {\n return DocumentManagementService.excelList.find(e => e === excelType) !== undefined;\n }\n\n public isPowerpoint(powerpointType: string): boolean {\n return DocumentManagementService.powerpointList.find(e => e === powerpointType) !== undefined;\n }\n\n private transformDocumentUrl(documentBinaryUrl: string): string {\n const remoteHrsPattern = new RegExp(this.appConfig.getRemoteHrsUrl());\n documentBinaryUrl = documentBinaryUrl.replace(remoteHrsPattern, this.appConfig.getHrsUrl());\n const remoteDocumentManagementPattern = new RegExp(this.appConfig.getRemoteDocumentManagementUrl());\n return documentBinaryUrl.replace(remoteDocumentManagementPattern, this.getDocStoreUrl());\n }\n\n private getDocStoreUrl(): string {\n return this.appConfig.getDocumentSecureMode() ? this.appConfig.getDocumentManagementUrlV2() : this.appConfig.getDocumentManagementUrl();\n }\n}\n","<a *ngIf=\"caseField.value\" href=\"javascript:void(0)\"\n (click)=\"showMediaViewer()\">\n {{ caseField.value.document_filename }}\n</a>\n","import { Component, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { DocumentManagementService } from '../../../services/document-management';\nimport { WindowService } from '../../../services/window';\nimport { CasesService } from '../../case-editor/services/cases.service';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\nconst MEDIA_VIEWER_INFO = 'media-viewer-info';\n\n@Component({\n selector: 'ccd-read-document-field',\n templateUrl: './read-document-field.html'\n})\nexport class ReadDocumentFieldComponent extends AbstractFieldReadComponent implements OnDestroy {\n\n public caseViewSubscription: Subscription;\n\n constructor(\n private readonly windowService: WindowService,\n private readonly documentManagement: DocumentManagementService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly casesService: CasesService\n ) {\n super();\n }\n\n public showMediaViewer(): void {\n const caseId = this.route.snapshot.params['cid'];\n this.windowService.removeLocalStorage(MEDIA_VIEWER_INFO);\n if (caseId) {\n this.caseViewSubscription = this.casesService.getCaseViewV2(caseId).subscribe(caseView => {\n if (this.caseField && this.caseField.value) {\n const mergedInfo = {\n ...this.caseField.value,\n id: caseView.case_id,\n jurisdiction: caseView.case_type.jurisdiction.id\n };\n this.openMediaViewer(mergedInfo);\n }\n });\n } else {\n if (this.caseField && this.caseField.value) {\n this.openMediaViewer(this.caseField.value);\n }\n }\n }\n\n public openMediaViewer(documentFieldValue): void {\n this.windowService.setLocalStorage(MEDIA_VIEWER_INFO, this.documentManagement.getMediaViewerInfo(documentFieldValue));\n this.windowService.openOnNewTab(this.getMediaViewerUrl());\n }\n\n public getMediaViewerUrl(): string {\n const routerMediaViewer = this.router.createUrlTree(['/media-viewer']);\n if (routerMediaViewer) {\n return routerMediaViewer.toString();\n }\n }\n\n public ngOnDestroy(): void {\n if (this.caseViewSubscription) {\n this.caseViewSubscription.unsubscribe();\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-document-dialog',\n templateUrl: './document-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class DocumentDialogComponent implements OnInit {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<DocumentDialogComponent>) {}\n\n public ngOnInit() {\n }\n\n public replace() {\n this.result = 'Replace';\n this.matDialogRef.close(this.result);\n }\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n}\n","import { MatDialogConfig } from '@angular/material/dialog';\n\nexport function initDialog(): MatDialogConfig {\n const dialogConfig = new MatDialogConfig();\n\n dialogConfig.disableClose = true;\n dialogConfig.autoFocus = true;\n dialogConfig.ariaLabel = 'Label';\n dialogConfig.height = '245px';\n dialogConfig.width = '550px';\n dialogConfig.panelClass = 'dialog';\n dialogConfig.closeOnNavigation = false;\n dialogConfig.position = {\n top: `${window.innerHeight / 2 - 120}px`, left: `${window.innerWidth / 2 - 275}px`\n };\n\n return dialogConfig;\n}\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Are you sure you want to replace the existing file?</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You are about to delete the original file uploaded. Are you sure you want to proceed?</span>\n </div>\n <div>\n <button type=\"button\" title=\"Replace\" class=\"button action-button\" (click)=\"replace()\">Replace file</button>\n <button type=\"button\" title=\"Cancel\" class=\"button button-secondary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>\n","import { AlertLevel } from './alert-level.model';\n\nexport class Alert {\n public level: AlertLevel;\n public message: string;\n}\n","export class CaseViewEvent {\n public id: number;\n public timestamp: string;\n public summary: string;\n public comment: string;\n public event_id: string;\n public event_name: string;\n public state_id: string;\n public state_name: string;\n public user_id: number;\n public user_last_name: string;\n public user_first_name: string;\n public significant_item: {\n type: string,\n description: string,\n url: string\n };\n}\n","import { Orderable } from '../order';\n\nexport class CaseViewTrigger implements Orderable {\n public static readonly DELETE = 'DELETE';\n\n public id: string;\n public name: string;\n public description: string;\n public order?: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { Orderable } from '../order';\n\n// @dynamic\nexport class CaseTab implements Orderable {\n public id: string;\n public label: string;\n public order?: number;\n @Type(() => CaseField)\n public fields: CaseField[];\n public show_condition?: string;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\nimport { CaseTab } from './case-tab.model';\nimport { CaseViewEvent } from './case-view-event.model';\nimport { CaseViewTrigger } from './case-view-trigger.model';\n\n// @dynamic\nexport class CaseView {\n public case_id?: string;\n public case_type: {\n id: string,\n name: string,\n description?: string,\n jurisdiction: {\n id: string,\n name: string,\n description?: string\n },\n printEnabled?: boolean\n };\n public state: {\n id: string,\n name: string,\n description?: string\n title_display?: string\n };\n public channels: string[];\n @Type(() => CaseTab)\n public tabs: CaseTab[];\n public triggers: CaseViewTrigger[];\n public events: CaseViewEvent[];\n @Type(() => CaseField)\n public metadataFields?: CaseField[];\n public basicFields?: {\n caseNameHmctsInternal?: string,\n caseManagementLocation?: {\n baseLocation?: number\n }\n };\n}\n","export class CasePrintDocument {\n public name: string;\n public type: string;\n public url: string;\n}\n","export class HRef {\n public href: string;\n}\n\nexport class DocumentLinks {\n public self: HRef;\n public binary: HRef;\n}\n\nexport class Document {\n public _links: DocumentLinks;\n public originalDocumentName: string;\n public hashToken?: string;\n}\n\nexport class Embedded {\n public documents: Document[];\n}\n\nexport class DocumentData {\n public _embedded: Embedded;\n public documents: Document[];\n}\n\nexport class FormDocument {\n public document_url: string;\n public document_binary_url: string;\n public document_filename: string;\n public document_hash?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { OrganisationVm } from '../../services/organisation';\nimport { SimpleOrganisationModel } from './simple-organisation.model';\n\n@Injectable()\nexport class OrganisationConverter {\n\n private static toSimpleAddress(organisationModel: OrganisationVm): string {\n let simpleAddress = '';\n if (organisationModel.addressLine1) { simpleAddress += organisationModel.addressLine1 + '<br>'; }\n if (organisationModel.addressLine2) { simpleAddress += organisationModel.addressLine2 + '<br>'; }\n if (organisationModel.addressLine3) { simpleAddress += organisationModel.addressLine3 + '<br>'; }\n if (organisationModel.townCity) { simpleAddress += organisationModel.townCity + '<br>'; }\n if (organisationModel.county) { simpleAddress += organisationModel.county + '<br>'; }\n if (organisationModel.country) { simpleAddress += organisationModel.country + '<br>'; }\n if (organisationModel.postCode) { simpleAddress += organisationModel.postCode + '<br>'; }\n return simpleAddress;\n }\n\n public toSimpleOrganisationModel(organisationModel: OrganisationVm): SimpleOrganisationModel {\n return {\n organisationIdentifier: organisationModel.organisationIdentifier,\n name: organisationModel.name,\n address: OrganisationConverter.toSimpleAddress(organisationModel)\n };\n }\n}\n","import { FieldType } from '../definition';\n\nexport class Field {\n constructor(\n public id: string,\n public field_type: FieldType,\n public elementPath?: string,\n public value?: string,\n public label?: string,\n public metadata?: boolean\n ) { }\n}\n","import { FieldType } from '../definition';\n\nexport class SearchResultViewColumn {\n public case_field_id: string;\n public case_field_type: FieldType;\n public display_context?: string;\n public display_context_parameter?: string;\n public label: string;\n public order: number;\n}\n","import { Type } from 'class-transformer';\nimport { CaseField } from '../definition';\n\n// @dynamic\nexport class SearchResultViewItem {\n public case_id: string;\n public case_fields: object;\n @Type(() => CaseField)\n public hydrated_case_fields?: CaseField[];\n public columns?: object;\n public supplementary_data?: any;\n public display_context_parameter?: any;\n}\n","import { Type } from 'class-transformer';\nimport { Draft } from '../draft.model';\nimport { SearchResultViewColumn } from './search-result-view-column.model';\nimport { SearchResultViewItem } from './search-result-view-item.model';\n\n// @dynamic\nexport class SearchResultView {\n @Type(() => SearchResultViewColumn)\n public columns: SearchResultViewColumn[];\n\n @Type(() => SearchResultViewItem)\n public results: SearchResultViewItem[];\n public result_error?: string;\n\n public hasDrafts() {\n return this.results[0]\n && this.results[0].case_id\n && Draft.isDraft(this.results[0].case_id);\n }\n}\n","export class CaseDetails {\n public id: string;\n public jurisdiction: string;\n public case_type_id: string;\n public state: string;\n public created_date?: string;\n public last_modified?: string;\n public locked_by_user_id?: string;\n public security_level?: string;\n public case_data?: object;\n}\n","export class CaseEventData {\n public event: {\n id: string;\n summary: string;\n description: string;\n };\n public data?: object;\n public event_data?: object; // full event data\n public event_token: string;\n public ignore_warning: boolean;\n public draft_id?: string;\n public case_reference?: string;\n}\n","import { Orderable } from '../order/orderable.model';\nimport { Field } from '../search/field.model';\n\nexport class WorkbasketInputModel implements Orderable {\n constructor(\n public label: string,\n public order: number,\n public field: Field,\n public metadata?: boolean,\n public display_context_parameter?: string) {\n }\n}\n\nexport class WorkbasketInput {\n public workbasketInputs: WorkbasketInputModel[];\n}\n","export class PaginationMetadata {\n public total_results_count: number;\n public total_pages_count: number;\n}\n","export enum SortOrder {\n\n ASCENDING, DESCENDING, UNSORTED\n\n}\n","import { SearchResultViewItemComparator } from './search-result-view-item-comparator';\nimport { SortOrder } from './sort-order';\n\nexport class SortParameters {\n\n public comparator: SearchResultViewItemComparator;\n public sortOrder: SortOrder;\n\n constructor(comparator: SearchResultViewItemComparator, sortOrder: SortOrder) {\n this.comparator = comparator;\n this.sortOrder = sortOrder;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CaseView } from '../../../domain';\n\n@Injectable()\nexport class CaseNotifier {\n public readonly caseViewSource: BehaviorSubject<CaseView> = new BehaviorSubject<CaseView>(new CaseView());\n\n public caseView = this.caseViewSource.asObservable();\n public cachedCaseView: CaseView;\n public announceCase(c: CaseView) {\n this.caseViewSource.next(c);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class FileUploadStateService {\n public uploadInProgress: boolean;\n\n public setUploadInProgress(value: boolean): void {\n this.uploadInProgress = value;\n }\n\n public isUploadInProgress(): boolean {\n return this.uploadInProgress;\n }\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error bottom-30': !valid}\">\n <label [for]=\"id()\">\n <span class=\"form-label\" attr.aria-label=\"{{caseField | ccdFieldLabel}}\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"fileUploadMessages && !valid\">{{fileUploadMessages}}</span>\n\n <div>\n <!--<span *ngIf=\"getUploadedFileName()\" class=\"text-16\">File name: {{getUploadedFileName()}}</span>-->\n <ccd-read-document-field *ngIf=\"caseField\" [caseField]=\"caseField\"></ccd-read-document-field>\n </div>\n\n <div style='position:relative'>\n\n <div [id]=\"createElementId('fileInputWrapper')\" (click)=\"fileSelectEvent()\"></div>\n <input class=\"form-control bottom-30\" [id]=\"id()\" type=\"file\" (keydown.Tab)=\"fileValidationsOnTab()\" (change)=\"fileChangeEvent($event)\"\n accept=\"{{caseField.field_type.regular_expression}}\" #fileInput/>\n </div>\n</div>\n<div class=\"form-group bottom-30\">\n <button class=\"button button-secondary\" type=\"button\" aria-label=\"Cancel upload\" (click)=\"cancelUpload()\" [disabled]=\"!isUploadInProgress()\">Cancel upload</button>\n</div>\n","import { Component, ElementRef, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { Constants } from '../../../commons/constants';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { DocumentData, FormDocument } from '../../../domain/document/document-data.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { DocumentManagementService } from '../../../services/document-management/document-management.service';\nimport { CaseNotifier } from '../../case-editor/services/case.notifier';\nimport { DocumentDialogComponent } from '../../dialogs/document-dialog/document-dialog.component';\nimport { initDialog } from '../../helpers';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { FileUploadStateService } from './file-upload-state.service';\n\n@Component({\n selector: 'ccd-write-document-field',\n templateUrl: './write-document-field.html'\n})\nexport class WriteDocumentFieldComponent extends AbstractFieldWriteComponent implements OnInit, OnDestroy {\n public static readonly DOCUMENT_URL = 'document_url';\n public static readonly DOCUMENT_BINARY_URL = 'document_binary_url';\n public static readonly DOCUMENT_FILENAME = 'document_filename';\n public static readonly DOCUMENT_HASH = 'document_hash';\n public static readonly UPLOAD_ERROR_FILE_REQUIRED = 'File required';\n public static readonly UPLOAD_ERROR_NOT_AVAILABLE = 'Document upload facility is not available at the moment';\n public static readonly UPLOAD_WAITING_FILE_STATUS = 'Uploading...';\n\n @ViewChild('fileInput', { static: false }) public fileInput: ElementRef;\n\n public selectedFile: File;\n public valid = true;\n public fileUploadMessages: string;\n public confirmReplaceResult: string;\n public clickInsideTheDocument: boolean;\n\n public fileUploadSubscription: Subscription;\n public dialogSubscription: Subscription;\n public caseEventSubscription: Subscription;\n\n private caseDetails: CaseView;\n private uploadedDocument: FormGroup;\n private dialogConfig: MatDialogConfig;\n private secureModeOn: boolean;\n\n constructor(\n private readonly appConfig: AbstractAppConfig,\n private readonly caseNotifier: CaseNotifier,\n private readonly documentManagement: DocumentManagementService,\n public dialog: MatDialog,\n private readonly fileUploadStateService: FileUploadStateService,\n ) {\n super();\n }\n\n @HostListener('document:click', ['$event'])\n public clickout(event) {\n // Capturing the event of of the associated ElementRef <input type=\"file\" #fileInpu\n\n if (this.fileInput.nativeElement.contains(event.target)) {\n this.clickInsideTheDocument = true;\n } else {\n this.fileValidations();\n }\n }\n\n public ngOnInit(): void {\n this.secureModeOn = this.appConfig.getDocumentSecureMode();\n this.dialogConfig = initDialog();\n // EUI-3403. The field was not being registered when there was no value and the field\n // itself was not mandatory, which meant that show_conditions would not be evaluated.\n // I've cleaned up the logic and it's now always registered.\n let document = this.caseField.value || { document_url: null, document_binary_url: null, document_filename: null };\n document = this.secureModeOn && !document.document_hash ? { ...document, document_hash: null } : document;\n if (this.isAMandatoryComponent()) {\n this.createDocumentFormWithValidator(document);\n } else {\n this.createDocumentForm(document);\n }\n\n if (this.appConfig.getDocumentSecureMode()) {\n this.subscribeToCaseDetails();\n }\n }\n\n public ngOnDestroy(): void {\n if (this.fileUploadSubscription) {\n this.fileUploadSubscription.unsubscribe();\n }\n if (this.dialogSubscription) {\n this.dialogSubscription.unsubscribe();\n }\n if (this.caseEventSubscription) {\n this.caseEventSubscription.unsubscribe();\n }\n }\n\n public isUploadInProgress(): boolean {\n return this.fileUploadStateService.isUploadInProgress();\n }\n\n public cancelUpload(): void {\n if (this.fileUploadSubscription) {\n this.fileUploadSubscription.unsubscribe();\n }\n\n this.fileUploadStateService.setUploadInProgress(false);\n this.fileInput.nativeElement.value = '';\n this.resetUpload();\n }\n\n public fileValidationsOnTab(): void {\n if (this.isAMandatoryComponent()) {\n if (this.validateFormUploadedDocument()) {\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED);\n }\n }\n }\n\n public fileChangeEvent(fileInput: any): void {\n\n if (fileInput.target.files[0]) {\n this.selectedFile = fileInput.target.files[0];\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_WAITING_FILE_STATUS);\n const documentUpload: FormData = this.buildDocumentUploadData(this.selectedFile);\n this.fileUploadStateService.setUploadInProgress(true);\n\n this.fileUploadSubscription = this.documentManagement.uploadFile(documentUpload).subscribe({\n next: (resultDocument: DocumentData) => this.handleDocumentUploadResult(resultDocument),\n error: (error: HttpError) => this.handleDocumentUploadError(error)\n });\n } else {\n this.resetUpload();\n }\n }\n\n public openFileDialog(): void {\n this.fileInput.nativeElement.click();\n }\n\n public fileSelectEvent(): void {\n if ((this.caseField.value && this.caseField.value.document_filename) ||\n (this.selectedFile && this.selectedFile.name)) {\n this.openDialog(this.dialogConfig);\n } else {\n this.openFileDialog();\n }\n }\n\n public triggerReplace(): void {\n if (this.confirmReplaceResult === 'Replace') {\n this.openFileDialog();\n }\n }\n\n public getUploadedFileName(): any {\n if (this.uploadedDocument) {\n return this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_FILENAME).value;\n } else {\n return undefined;\n }\n }\n\n private resetUpload(): void {\n this.selectedFile = null;\n if (this.isAMandatoryComponent()) {\n this.updateDocumentForm(null, null, null);\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED);\n } else {\n this.valid = true;\n }\n }\n\n private fileValidations(): void {\n if (this.isAMandatoryComponent()) {\n if (this.clickInsideTheDocument && this.validateFormUploadedDocument() && !this.isUpLoadingAFile()) {\n this.displayFileUploadMessages(WriteDocumentFieldComponent.UPLOAD_ERROR_FILE_REQUIRED);\n }\n }\n }\n\n private openDialog(dialogConfig): void {\n const dialogRef = this.dialog.open(DocumentDialogComponent, dialogConfig);\n this.dialogSubscription = dialogRef.beforeClosed().subscribe(result => {\n this.confirmReplaceResult = result;\n this.triggerReplace();\n });\n }\n\n private subscribeToCaseDetails(): void {\n this.caseEventSubscription = this.caseNotifier.caseView.subscribe({\n next: (caseDetails) => {\n this.caseDetails = caseDetails;\n }\n });\n }\n\n private isAMandatoryComponent(): boolean {\n return this.caseField.display_context && this.caseField.display_context === Constants.MANDATORY;\n }\n\n private displayFileUploadMessages(fileUploadMessage: string): void {\n this.valid = false;\n this.fileUploadMessages = fileUploadMessage;\n }\n\n private isUpLoadingAFile(): boolean {\n return this.fileUploadMessages === WriteDocumentFieldComponent.UPLOAD_WAITING_FILE_STATUS;\n }\n private validateFormUploadedDocument(): boolean {\n if (!this.uploadedDocument) {\n return true;\n }\n\n let validation = !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_URL).valid &&\n !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_BINARY_URL).valid &&\n !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_FILENAME).valid;\n\n if (this.secureModeOn) {\n validation = validation && !this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_HASH).valid;\n }\n\n return validation;\n }\n\n private updateDocumentForm(url: string, binaryUrl: string, filename: string, documentHash?: string): void {\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_URL).setValue(url);\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_BINARY_URL).setValue(binaryUrl);\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_FILENAME).setValue(filename);\n if (documentHash) {\n this.uploadedDocument.get(WriteDocumentFieldComponent.DOCUMENT_HASH).setValue(documentHash);\n }\n }\n\n private createDocumentFormWithValidator(document: FormDocument): void {\n let documentFormGroup = {\n document_url: new FormControl(document.document_url, Validators.required),\n document_binary_url: new FormControl(document.document_binary_url, Validators.required),\n document_filename: new FormControl(document.document_filename, Validators.required)\n };\n\n documentFormGroup = this.secureModeOn ? {\n ...documentFormGroup,\n ...{ document_hash: new FormControl(document.document_hash) }\n } : documentFormGroup;\n\n this.uploadedDocument = this.registerControl(new FormGroup(documentFormGroup), true) as FormGroup;\n }\n\n private createDocumentForm(document: FormDocument): void {\n let documentFormGroup = {\n document_url: new FormControl(document.document_url),\n document_binary_url: new FormControl(document.document_binary_url),\n document_filename: new FormControl(document.document_filename)\n };\n\n documentFormGroup = this.secureModeOn ? {\n ...documentFormGroup,\n ...{ document_hash: new FormControl(document.document_hash) }\n } : documentFormGroup;\n\n this.uploadedDocument = this.registerControl(new FormGroup(documentFormGroup), true) as FormGroup;\n }\n\n private getErrorMessage(error: HttpError): string {\n // Document Management unavailable\n if (0 === error.status || 502 === error.status) {\n return WriteDocumentFieldComponent.UPLOAD_ERROR_NOT_AVAILABLE;\n }\n return error.error;\n }\n\n private buildDocumentUploadData(selectedFile: File): FormData {\n const documentUpload: FormData = new FormData();\n documentUpload.append('files', selectedFile, selectedFile.name);\n documentUpload.append('classification', 'PUBLIC');\n\n if (this.appConfig.getDocumentSecureMode()) {\n const caseTypeId = this.caseDetails &&\n this.caseDetails.case_type &&\n this.caseDetails.case_type.id ? this.caseDetails.case_type.id : null;\n const caseTypeJurisdictionId = this.caseDetails &&\n this.caseDetails.case_type &&\n this.caseDetails.case_type.jurisdiction &&\n this.caseDetails.case_type.jurisdiction.id ? this.caseDetails.case_type.jurisdiction.id : null;\n documentUpload.append('caseTypeId', caseTypeId);\n documentUpload.append('jurisdictionId', caseTypeJurisdictionId);\n }\n\n return documentUpload;\n }\n\n private handleDocumentUploadResult(result: DocumentData): void {\n if (!this.uploadedDocument) {\n if (this.secureModeOn) {\n this.createDocumentForm({document_url: null, document_binary_url: null, document_filename: null, document_hash: null});\n } else {\n this.createDocumentForm({document_url: null, document_binary_url: null, document_filename: null});\n }\n }\n\n const document = this.secureModeOn ? result.documents[0] : result._embedded.documents[0];\n\n if (this.secureModeOn) {\n this.updateDocumentForm(\n document._links.self.href,\n document._links.binary.href,\n document.originalDocumentName,\n document.hashToken\n );\n } else {\n this.updateDocumentForm(\n document._links.self.href,\n document._links.binary.href,\n document.originalDocumentName,\n );\n }\n\n this.valid = true;\n this.fileUploadStateService.setUploadInProgress(false);\n\n // refresh replaced document info\n if (this.caseField.value) {\n this.caseField.value.document_binary_url = document._links.binary.href;\n this.caseField.value.document_filename = document.originalDocumentName;\n this.caseField.value.document_url = document._links.self.href;\n\n if (this.secureModeOn) {\n this.caseField.value.document_hash = document.hashToken;\n }\n }\n }\n\n private handleDocumentUploadError(error: HttpError): void {\n this.fileUploadMessages = this.getErrorMessage(error);\n this.valid = false;\n this.fileUploadStateService.setUploadInProgress(false);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdDynamicList'\n})\nexport class DynamicListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: string, items: FixedListItem[]): any {\n const item = items.find(i => i.code === value);\n return item ? item.label : DynamicListPipe.EMPTY;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-dynamic-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdDynamicList:caseField.list_items}}</span>',\n})\nexport class ReadDynamicListFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public ngOnInit(): void {\n /**\n *\n * Reassigning list_items from formatted_list when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n super.ngOnInit();\n }\n}\n","<div class=\"form-group\"\n [ngClass]=\"{'form-group-error': !dynamicListFormControl.valid && (dynamicListFormControl.dirty || dynamicListFormControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"form-label\" *ngIf=\"!caseField.label && !caseField.hint_text\">Select an option from the\n dropdown</span>\n <span class=\"error-message\"\n *ngIf=\"dynamicListFormControl.errors && dynamicListFormControl.dirty\">{{dynamicListFormControl.errors |\n ccdFirstError:caseField.label}}</span>\n\n <select class=\"form-control ccd-dropdown bottom-30\" [id]=\"id()\"\n [formControl]=\"dynamicListFormControl\">\n <option [ngValue]=null>--Select a value--</option>\n <option [ngValue]=\"type.code\" *ngFor=\"let type of caseField.list_items\" role=\"option\">{{type.label}}</option>\n </select>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-dynamic-list-field',\n templateUrl: './write-dynamic-list-field.html'\n})\nexport class WriteDynamicListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public dynamicListFormControl: FormControl;\n\n public ngOnInit() {\n /**\n * Reassigning list_items from formatted_value when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n\n /**\n * Reassigning value from formatted_value when value is empty\n */\n if (!this.caseField.value) {\n if (this.caseField.formatted_value && this.caseField.formatted_value.value && this.caseField.formatted_value.value.code) {\n this.caseField.value = this.caseField.formatted_value.value.code;\n }\n }\n\n const isNull = this.caseField.value === undefined || this.caseField.value === '';\n\n if (isNull || typeof this.caseField.value === 'object') {\n this.caseField.value = null;\n }\n\n this.dynamicListFormControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n this.dynamicListFormControl.setValue(this.caseField.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdDynamicRadioList'\n})\nexport class DynamicRadioListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: any, items: FixedListItem[]): any {\n /**\n *\n * If value is object with element `value.code`, use code instead.\n */\n if (value && value.value && value.value.code) {\n value = value.value.code;\n }\n const item = items.find(i => i.code === value);\n return item ? item.label : DynamicRadioListPipe.EMPTY;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-dynamic-radio-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdDynamicRadioList:caseField.list_items}}</span>',\n})\nexport class ReadDynamicRadioListFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public ngOnInit(): void {\n /**\n *\n * Reassigning list_items from formatted_list when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n\n /**\n *\n * Seems formatted_value can also be empty for DynamicRadioList's. Reassigning list_items from value.list_items in that case\n */\n if (!this.caseField.list_items && this.caseField.value && this.caseField.value.list_items) {\n this.caseField.list_items = this.caseField.value.list_items;\n }\n }\n}\n","<div class=\"form-group bottom-30\"\n [ngClass]=\"{'form-group-error': !dynamicRadioListControl.valid && dynamicRadioListControl.dirty}\" [id]=\"id()\">\n <fieldset>\n <legend style=\"display: none;\"></legend>\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"form-label\" *ngIf=\"!caseField.label && !caseField.hint_text\">Select an option below</span>\n <span class=\"error-message\"\n *ngIf=\"dynamicRadioListControl.errors && dynamicRadioListControl.dirty\">{{dynamicRadioListControl.errors |\n ccdFirstError}}</span>\n </label>\n\n <ng-container>\n <div class=\"multiple-choice\" *ngFor=\"let radioButton of caseField.list_items\" [ngClass]=\"{selected: dynamicRadioListControl.value === radioButton.code}\">\n <input class=\"form-control\" [id]=\"buildElementId(radioButton.code)\" name=\"{{id()}}\" type=\"radio\" [formControl]=\"dynamicRadioListControl\" [value]=\"radioButton.code\">\n <label class=\"form-label\" [for]=\"buildElementId(radioButton.code)\">{{radioButton.label}}</label>\n </div>\n </ng-container>\n </fieldset>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-dynamic-radio-list-field',\n templateUrl: './write-dynamic-radio-list-field.html'\n})\nexport class WriteDynamicRadioListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public dynamicRadioListControl: FormControl;\n\n public ngOnInit(): void {\n /**\n *\n * Reassigning list_items from formatted_list when list_items is empty\n */\n if (!this.caseField.list_items && this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n this.caseField.list_items = this.caseField.formatted_value.list_items;\n }\n\n if (!this.caseField.value && this.caseField.formatted_value && this.caseField.formatted_value.value) {\n this.caseField.value = this.caseField.formatted_value.value.code;\n }\n\n const isNull: boolean = this.caseField.value === undefined || this.caseField.value === '';\n\n if (isNull || typeof this.caseField.value === 'object') {\n this.caseField.value = [];\n }\n\n this.dynamicRadioListControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n this.dynamicRadioListControl.setValue(this.caseField.value);\n }\n\n public buildElementId(name: string): string {\n return `${this.id()}-${name}`;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-email-field',\n template: `\n <a *ngIf=\"!isFieldValueEmpty()\" href=\\\"mailto:{{caseField.value}}\\\">{{caseField.value}}</a>\n `\n})\nexport class ReadEmailFieldComponent extends AbstractFieldReadComponent {\n\n public isFieldValueEmpty(): boolean {\n return (!this.caseField.value);\n }\n\n}\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !emailControl.valid && (emailControl.dirty || emailControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"emailControl.errors && (emailControl.dirty || emailControl.touched)\">{{emailControl.errors | ccdFirstError:caseField.label}}</span>\n\n <input class=\"form-control\" [ngClass]=\"{'govuk-input--error': emailControl.errors && (emailControl.dirty || emailControl.touched)}\"\n [id]=\"id()\" type=\"email\" [formControl]=\"emailControl\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-email-field',\n templateUrl: 'write-email-field.html'\n})\nexport class WriteEmailFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public emailControl: FormControl;\n\n public ngOnInit() {\n this.emailControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdFixedList'\n})\nexport class FixedListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: string, items: FixedListItem[]): any {\n if (!!items) {\n const item = items.find(i => i.code === value);\n return item ? item.label : FixedListPipe.EMPTY;\n } else {\n return FixedListPipe.EMPTY;\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-fixed-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdFixedList:caseField.list_items}}</span>',\n})\nexport class ReadFixedListFieldComponent extends AbstractFieldReadComponent {\n\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !fixedListFormControl.valid && (fixedListFormControl.dirty || fixedListFormControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"fixedListFormControl.errors && (fixedListFormControl.dirty || fixedListFormControl.touched)\">{{fixedListFormControl.errors | ccdFirstError:caseField.label}}</span>\n\n <select class=\"form-control ccd-dropdown bottom-30\" [id]=\"id()\" [formControl]=\"fixedListFormControl\">\n <option [ngValue]=null>--Select a value--</option>\n <option [ngValue]=\"type.code\" *ngFor=\"let type of listItems\">{{type.label}}</option>\n </select>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-fixed-list-field',\n templateUrl: './write-fixed-list-field.html'\n})\nexport class WriteFixedListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public fixedListFormControl: FormControl;\n\n public get listItems(): any[] {\n if (this.caseField) {\n if (this.caseField.list_items) {\n return this.caseField.list_items;\n }\n if (this.caseField.formatted_value && this.caseField.formatted_value.list_items) {\n return this.caseField.formatted_value.list_items;\n }\n }\n return [];\n }\n\n public ngOnInit() {\n const isNull = this.caseField.value === undefined || this.caseField.value === '';\n\n if (isNull) {\n this.caseField.value = null;\n }\n\n this.fixedListFormControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n this.fixedListFormControl.setValue(this.caseField.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FixedListItem } from '../../../domain/definition/fixed-list-item.model';\n\n@Pipe({\n name: 'ccdFixedRadioList'\n})\nexport class FixedRadioListPipe implements PipeTransform {\n\n private static readonly EMPTY = '';\n\n public transform(value: string, items: FixedListItem[]): any {\n const item = items.find(i => i.code === value);\n return item ? item.label : FixedRadioListPipe.EMPTY;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-fixed-radio-list-field',\n template: '<span class=\"text-16\">{{caseField.value | ccdFixedRadioList:caseField.field_type.fixed_list_items}}</span>',\n})\nexport class ReadFixedRadioListFieldComponent extends AbstractFieldReadComponent { }\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !fixedRadioListControl.valid && (fixedRadioListControl.dirty || fixedRadioListControl.touched)}\" [id]=\"id()\">\n <fieldset>\n <legend>\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"fixedRadioListControl.errors && (fixedRadioListControl.dirty || fixedRadioListControl.touched)\">{{fixedRadioListControl.errors | ccdFirstError:caseField.label}}</span>\n </legend>\n <ng-container>\n <div class=\"multiple-choice\" *ngFor=\"let radioButton of caseField.field_type.fixed_list_items\" [ngClass]=\"{selected: fixedRadioListControl.value === radioButton.code}\">\n <input class=\"form-control\" [id]=\"id()+'-'+radioButton.code\" [name]=\"id()\" type=\"radio\" [formControl]=\"fixedRadioListControl\" [value]=\"radioButton.code\">\n <label class=\"form-label\" [for]=\"id()+'-'+radioButton.code\">{{radioButton.label}}</label>\n </div>\n </ng-container>\n </fieldset>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-fixed-radio-list-field',\n templateUrl: './write-fixed-radio-list-field.html'\n})\nexport class WriteFixedRadioListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public fixedRadioListControl: FormControl;\n\n public ngOnInit() {\n const notEmpty = this.caseField.value !== null && this.caseField.value !== undefined;\n this.fixedRadioListControl = this.registerControl(new FormControl(notEmpty ? this.caseField.value : null)) as FormControl;\n }\n}\n","<table class=\"EventLogTable\">\n <caption><h2 class=\"heading-h2\">History</h2></caption>\n <thead>\n <tr>\n <th><span class=\"text-16\">Event</span></th>\n <th><span class=\"text-16\">Date</span></th>\n <th><span class=\"text-16\">Author</span></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let event of events\" (click)=\"select(event)\" [ngClass]=\"{'EventLogTable-Selected': selected === event}\" tabindex=\"0\" attr.aria-label=\"{{getAriaLabelforRow(event)}}\">\n <td>\n <ng-container [ngSwitch]=\"isPartOfCaseTimeline\">\n <div id=\"case-timeline\" *ngSwitchCase=\"true\">\n <a (click)=\"caseHistoryClicked(event.id)\"\n *ngIf=\"event.state_id !== 'Draft'\" class=\"text-16 event-link\" attr.aria-label=\"{{getAriaLabelforLink(event)}}\">{{event.event_name}}</a>\n </div>\n <div *ngSwitchCase=\"false\">\n <a [routerLink]=\"['./', 'event', event.id, 'history']\"\n [target]=\"'_blank'\"\n *ngIf=\"event.state_id !== 'Draft'\" class=\"text-16 event-link\" attr.aria-label=\"{{getAriaLabelforLink(event)}}\">{{event.event_name}}</a>\n </div>\n </ng-container>\n <span *ngIf=\"event.state_id === 'Draft'\">{{event.event_name}}</span>\n <div class=\"tooltip\" *ngIf=\"significantItemExist(event)\">\n <a href=\"{{getSignificantItemUrl(event)}}\" target=\"_blank\" rel=\"noopener\" attr.aria-label=\"{{getAriaLabelforLink(event)}}\">\n <img class=\"doc-img\" alt=\"document image\" src=\"data:image/png;base64,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\"/>\n </a>\n <span class=\"tooltiptext doc-tooltip\">{{getSignificantItemDesc(event)}}</span>\n </div>\n </td>\n <td tabindex=\"0\" attr.aria-label=\"{{getAriaLabelforColumn(event)}}\" (keydown.enter)=\"select(event)\"><div class=\"tooltip text-16\">{{event.timestamp | ccdDate : 'local'}}\n <span class=\"tooltiptext\">Local: {{event.timestamp | ccdDate : 'local'}}</span>\n </div></td>\n <td tabindex=\"0\"><span class=\"text-16\">{{event.user_first_name | titlecase}} {{event.user_last_name | uppercase}}</span></td>\n </tr>\n </tbody>\n</table>\n","import { formatDate } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CaseViewEvent } from '../../../../domain';\n\n@Component({\n selector: 'ccd-event-log-table',\n templateUrl: './event-log-table.component.html',\n styleUrls: ['./event-log-table.scss']\n})\nexport class EventLogTableComponent implements OnInit {\n\n @Input()\n public events: CaseViewEvent[];\n\n @Input()\n public selected: CaseViewEvent;\n\n @Output()\n public onSelect = new EventEmitter<CaseViewEvent>();\n\n @Output()\n public onCaseHistory = new EventEmitter<string>();\n\n public isPartOfCaseTimeline = false;\n\n public ngOnInit(): void {\n this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;\n }\n\n public select(event: CaseViewEvent): void {\n this.selected = event;\n this.onSelect.emit(event);\n }\n\n public significantItemExist(event: CaseViewEvent): boolean {\n return (event.significant_item &&\n event.significant_item.type === 'DOCUMENT' &&\n event.significant_item.url !== undefined &&\n event.significant_item.description !== undefined);\n }\n\n public getSignificantItemUrl(event: CaseViewEvent): string {\n if (event.significant_item) {\n return event.significant_item.url;\n }\n }\n\n public getSignificantItemDesc(event: CaseViewEvent): string {\n if (event.significant_item) {\n return event.significant_item.description;\n }\n }\n\n public caseHistoryClicked(eventId: string) {\n this.onCaseHistory.emit(eventId);\n }\n\n public getAriaLabelforColumn(event: CaseViewEvent): string {\n if (this.selected !== event) {\n return `date ${formatDate(event.timestamp, 'dd MMM yyyy hh:mm:ss a', 'en-GB')},\n press enter key for event ${event.event_name} details`;\n } else {\n return '';\n }\n }\n\n public getAriaLabelforRow(event: CaseViewEvent): string {\n return `you are on event ${event.event_name} row, press tab key to navigate to columns`;\n }\n\n public getAriaLabelforLink(event: CaseViewEvent): string {\n return `press enter key to open event ${event.event_name} link in separate window`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ccdDash'\n})\nexport class DashPipe implements PipeTransform {\n\n public transform(value: string): string {\n return value ? value : '-';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CaseViewEvent } from '../../../../domain';\n\n@Component({\n selector: 'ccd-event-log-details',\n templateUrl: './event-log-details.component.html',\n styleUrls: ['./event-log-details.scss']\n})\nexport class EventLogDetailsComponent {\n @Input()\n public event: CaseViewEvent;\n}\n","<div class=\"grid-row\">\n <div class=\"column-one-half\">\n <ng-container [ngSwitch]=\"isPartOfCaseTimeline\">\n <ccd-event-log-table *ngSwitchCase=\"true\" [events]=\"events\" [selected]=\"selected\" (onSelect)=\"select($event)\" (onCaseHistory)=\"caseHistoryClicked($event)\"></ccd-event-log-table>\n <ccd-event-log-table *ngSwitchCase=\"false\" [events]=\"events\" [selected]=\"selected\" (onSelect)=\"select($event)\"></ccd-event-log-table>\n </ng-container>\n </div>\n <div class=\"column-one-half\">\n <div class=\"EventLog-DetailsPanel\">\n <ccd-event-log-details *ngIf=\"selected\" [event]=\"selected\"></ccd-event-log-details>\n </div>\n </div>\n</div>\n","<table tabindex=\"0\" class=\"EventLogDetails\">\n <caption><h2 class=\"heading-h2\">Details</h2></caption>\n <tbody tabindex=\"0\" aria-live=\"polite\">\n <tr>\n <th><span class=\"text-16\">Date</span></th>\n <td>\n <div class=\"tooltip text-16\">{{event.timestamp | ccdDate : 'local'}}\n <span class=\"tooltiptext text-16\">Local: {{event.timestamp | ccdDate : 'local'}}</span>\n </div>\n </td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Author</span></th>\n <td><span class=\"text-16\">{{event.user_first_name | titlecase}} {{event.user_last_name | uppercase}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">End state</span></th>\n <td><span class=\"text-16\">{{event.state_name}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Event</span></th>\n <td><span class=\"text-16\">{{event.event_name}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Summary</span></th>\n <td><span class=\"text-16\">{{event.summary | ccdDash}}</span></td>\n </tr>\n <tr>\n <th><span class=\"text-16\">Comment</span></th>\n <td><span class=\"text-16\">{{event.comment | ccdDash}}</span></td>\n </tr>\n </tbody>\n</table>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CaseViewEvent } from '../../../../domain';\n\n@Component({\n selector: 'ccd-event-log',\n templateUrl: './event-log.component.html',\n styleUrls: ['./event-log.scss']\n})\nexport class EventLogComponent implements OnInit {\n\n @Input()\n public events: CaseViewEvent[];\n\n @Output()\n public onCaseHistory = new EventEmitter<string>();\n\n public selected: CaseViewEvent;\n\n public isPartOfCaseTimeline = false;\n\n public ngOnInit(): void {\n this.selected = this.events[0];\n this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;\n }\n\n public select(event: CaseViewEvent): void {\n this.selected = event;\n }\n\n public caseHistoryClicked(eventId: string) {\n this.onCaseHistory.emit(eventId);\n }\n\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-case-history-viewer-field',\n templateUrl: 'case-history-viewer-field.component.html',\n})\nexport class CaseHistoryViewerFieldComponent extends AbstractFieldReadComponent {}\n","<ccd-event-log [events]=\"caseField.value\"></ccd-event-log>","import { Component, Input } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\n\n@Component({\n selector: 'ccd-label-field',\n templateUrl: './label-field.html'\n})\nexport class LabelFieldComponent {\n @Input()\n public caseField: CaseField;\n\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public markdownUseHrefAsRouterLink?: boolean;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-money-gbp-field',\n template: `<ng-container *ngIf=\"isNumber()\"><span class=\"text-16\">{{value / 100 | currency:'GBP':'symbol'}}</span></ng-container>`\n})\nexport class ReadMoneyGbpFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public amount: any;\n public value: any;\n\n public ngOnInit(): void {\n if (this.amount) {\n this.value = this.amount;\n } else if (this.caseField) {\n this.registerControl(new FormControl(this.caseField.value));\n this.value = this.caseField.value;\n }\n }\n\n public isNumber(): boolean {\n return null !== this.value && !isNaN(this.value);\n }\n\n}\n","<dl [hidden]=\"caseField.hidden\" class=\"case-field\" ccdLabelSubstitutor [caseField]=\"caseField\" [contextFields]=\"caseFields\" [id]=\"caseField.id\">\n <dt>\n <ccd-markdown [content]=\"caseField.value || caseField.label\" [markdownUseHrefAsRouterLink]=\"markdownUseHrefAsRouterLink\">\n </ccd-markdown>\n </dt>\n <dd></dd>\n</dl>\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n@Component({\n selector: 'ccd-money-gbp-input',\n template: `<input class=\"form-control form-control-1-8\"\n type=\"text\"\n [id]=\"id\"\n [name]=\"name\"\n [value]=\"displayValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n [disabled]=\"disabled\"/>`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MoneyGbpInputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MoneyGbpInputComponent),\n multi: true,\n }\n ]\n})\nexport class MoneyGbpInputComponent implements ControlValueAccessor, Validator {\n\n private static readonly PATTERN_REGEXP = new RegExp('^-?\\\\d*(\\\\.\\\\d{0,2})?$');\n\n @Input()\n public id: string;\n\n @Input()\n public name: string;\n\n @Input()\n public mandatory: boolean;\n\n @Input()\n public formControl: FormControl;\n\n public displayValue: string = null;\n public disabled: boolean;\n\n private rawValue: number;\n\n // change events from the textarea\n public onChange(event) {\n\n // get value from input\n const newValue = event.target.value;\n\n if (newValue && MoneyGbpInputComponent.PATTERN_REGEXP.test(newValue)) {\n const parts = newValue.split('.');\n\n if (!parts[1]) {\n parts[1] = '00';\n } else {\n while (2 > parts[1].length) {\n parts[1] += '0';\n }\n }\n\n this.rawValue = parts.join('');\n } else {\n // When pattern not matched, value is passed as is so that it fails validation.\n this.rawValue = newValue;\n }\n\n // update the form\n this.propagateChange(this.rawValue);\n }\n\n public writeValue(obj: any): void {\n if (obj) {\n this.rawValue = obj;\n\n const integerPart = obj.slice(0, -2) || '0';\n let decimalPart = obj.slice(-2);\n\n while (2 > decimalPart.length) {\n decimalPart += '0';\n }\n\n this.displayValue = [integerPart, decimalPart].join('.');\n }\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(_: any): void {\n // Not used.\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public validate(control: FormControl): ValidationErrors {\n if (this.mandatory && !control.value) {\n return {\n pattern: 'This field is required'\n };\n }\n if (control.value && !MoneyGbpInputComponent.PATTERN_REGEXP.test(control.value)) {\n return {\n pattern: 'Should only contain numbers with up to 2 decimal places'\n };\n }\n return undefined;\n }\n\n public registerOnValidatorChange(_: () => void): void {\n // Not used.\n }\n\n private propagateChange = (_: any) => { };\n\n}\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !moneyGbpControl.valid && (moneyGbpControl.dirty || moneyGbpControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"moneyGbpControl.errors && (moneyGbpControl.dirty || moneyGbpControl.touched)\">{{moneyGbpControl.errors | ccdFirstError:caseField.label}}</span>\n\n <div class=\"form-money\">\n <span class=\"form-currency\">£</span>\n <ccd-money-gbp-input [id]=\"id()\"\n [name]=\"id()\"\n [mandatory]=\"caseField | ccdIsMandatory\"\n [formControl]=\"moneyGbpControl\"></ccd-money-gbp-input>\n </div>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-money-gbp-field',\n templateUrl: './write-money-gbp-field.html'\n})\nexport class WriteMoneyGbpFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public moneyGbpControl: FormControl;\n\n public ngOnInit() {\n this.moneyGbpControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","<table *ngIf=\"caseField.value && caseField.value.length\" class=\"multi-select-list-field-table\" aria-describedby=\"multi selection table\">\n <tbody>\n <tr *ngFor=\"let value of caseField.value\">\n <th style=\"display: none;\"></th>\n <td><span class=\"text-16\">{{ value | ccdFixedList:caseField.field_type.fixed_list_items }}</span></td>\n </tr>\n </tbody>\n</table>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-multi-select-list-field',\n templateUrl: './read-multi-select-list-field.html',\n styleUrls: ['./multi-select-list.scss']\n})\nexport class ReadMultiSelectListFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group bottom-30\" [ngClass]=\"{'error': !checkboxes.valid && (checkboxes.dirty || checkboxes.touched)}\" [id]=\"id()\">\n\n <fieldset>\n\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </legend>\n <span *ngIf=\"caseField.hint_text\" class=\"form-hint\">{{caseField.hint_text}}</span>\n <span *ngIf=\"checkboxes.errors && (checkboxes.dirty || checkboxes.touched)\" class=\"error-message\">{{checkboxes.errors | ccdFirstError:caseField.label}}</span>\n\n <ng-container *ngFor=\"let checkbox of caseField.field_type.fixed_list_items\">\n\n <div class=\"multiple-choice\">\n <input class=\"form-control\" [id]=\"id()+'-'+checkbox.code\" [name]=\"id()\" type=\"checkbox\" [value]=\"checkbox.code\" [checked]=\"isSelected(checkbox.code)\" (change)=\"onCheckChange($event)\">\n <label class=\"form-label\" [for]=\"id()+'-'+checkbox.code\">{{checkbox.label}}</label>\n </div>\n\n </ng-container>\n\n </fieldset>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl } from '@angular/forms';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-multi-select-list-field',\n templateUrl: './write-multi-select-list-field.html'\n})\nexport class WriteMultiSelectListFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public checkboxes: FormArray;\n\n public ngOnInit(): void {\n this.checkboxes = new FormArray([]);\n\n // Initialise array with existing values\n if (this.caseField.value && Array.isArray(this.caseField.value)) {\n const values: string[] = this.caseField.value;\n values.forEach(value => {\n this.checkboxes.push(new FormControl(value));\n });\n }\n this.registerControl(this.checkboxes, true);\n if (this.caseField.display_context && this.caseField.display_context === 'MANDATORY' && this.caseField.field_type\n && this.caseField.field_type.type === 'MultiSelectList' && this.caseField.field_type.fixed_list_items.length > 0\n && this.checkboxes.controls.length === 0) {\n if (this.caseField.field_type.fixed_list_items[0].code) {\n this.checkboxes.push(new FormControl(this.caseField.field_type.fixed_list_items[0].code));\n this.checkboxes.removeAt(0);\n }\n }\n }\n\n public onCheckChange(event) {\n if (!this.isSelected(event.target.value)) {\n // Add a new control in the FormArray\n this.checkboxes.push(new FormControl(event.target.value));\n } else {\n // Remove the control form the FormArray\n this.checkboxes.controls.forEach((ctrl: FormControl, i) => {\n if (ctrl.value === event.target.value) {\n this.checkboxes.removeAt(i);\n return;\n }\n });\n }\n }\n\n public isSelected(code): AbstractControl {\n if (this.checkboxes && this.checkboxes.controls) {\n return this.checkboxes.controls.find(control => control.value === code);\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-number-field',\n template: `<span class=\"text-16\">{{caseField.value | ccdCaseReference}}</span>`\n})\nexport class ReadNumberFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !numberControl.valid && numberControl.dirty}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"numberControl.errors && numberControl.dirty\">{{numberControl.errors | ccdFirstError:caseField.label}}</span>\n\n <input class=\"form-control bottom-30\" [ngClass]=\"{'govuk-input--error': numberControl.errors && numberControl.dirty}\"\n [id]=\"id()\" type=\"number\" [formControl]=\"numberControl\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-number-field',\n templateUrl: './write-number-field.html'\n})\nexport class WriteNumberFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public numberControl: FormControl;\n\n public ngOnInit() {\n this.numberControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { FeeValue } from './fee-value.model';\n\n@Component({\n // tslint:disable-next-line\n selector: '[ccdReadOrderSummaryRow]',\n templateUrl: './read-order-summary-row.html',\n styleUrls: [\n './read-order-summary-row.scss'\n ],\n})\nexport class ReadOrderSummaryRowComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public feeValue: FeeValue;\n\n public ngOnInit() {\n // We don't want to register this if we don't have a caseField\n if (this.caseField) {\n super.ngOnInit();\n }\n }\n\n public getFeeAmount(): string {\n return this.feeValue.value ? this.feeValue.value.FeeAmount : '';\n }\n}\n","<td>{{feeValue.value.FeeCode}}</td>\n<td>{{feeValue.value.FeeDescription}}</td>\n<td><ccd-read-money-gbp-field [amount]=\"getFeeAmount()\"></ccd-read-money-gbp-field></td>","<div class=\"order-summary-title\">Order Summary</div>\n<table aria-describedby=\"order summary table\">\n <thead>\n <tr><th id=\"hiddenHeader\" style=\"display: none;\"></th><td>Code</td><td>Description</td><td>Amount</td></tr>\n </thead>\n <tbody>\n <tr ccdReadOrderSummaryRow *ngFor=\"let feeValue of getFees()\" [feeValue]=\"feeValue\"></tr>\n <tr>\n <td></td>\n <td class=\"payment-total\">Total</td>\n <td><ccd-read-money-gbp-field [amount]=\"getPaymentTotal()\"></ccd-read-money-gbp-field></td>\n </tr>\n </tbody>\n</table>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { FeeValue } from './fee-value.model';\n\n@Component({\n selector: 'ccd-read-order-summary-field',\n templateUrl: './read-order-summary-field.html',\n styleUrls: [\n './read-order-summary-field.scss'\n ],\n})\nexport class ReadOrderSummaryFieldComponent extends AbstractFieldReadComponent {\n\n public getFees(): FeeValue[] {\n return this.caseField.value ? this.caseField.value.Fees : [];\n }\n\n public getPaymentTotal(): string {\n return this.caseField.value ? this.caseField.value.PaymentTotal : '';\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-order-summary-field',\n templateUrl: './write-order-summary-field.html'\n})\nexport class WriteOrderSummaryFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n /*\n These are implemented manually rather than using WriteComplexFieldComponent. The reason\n is because the view is readonly the tree of form controls is not being built automatically\n and has to be built manually.\n */\n public ngOnInit(): void {\n const orderSummaryGroup: FormGroup = this.registerControl(new FormGroup({}), true) as FormGroup;\n const paymentReference: FormControl = new FormControl(this.caseField.value.PaymentReference);\n orderSummaryGroup.addControl('PaymentReference', paymentReference);\n const paymentTotal: FormControl = new FormControl(this.caseField.value.PaymentTotal);\n orderSummaryGroup.addControl('PaymentTotal', paymentTotal);\n const feesArray: FormArray = new FormArray([]);\n this.caseField.value.Fees.forEach((fee) => {\n feesArray.push(this.getFeeValue(fee.value));\n });\n orderSummaryGroup.addControl('Fees', feesArray);\n }\n\n private getFeeValue(feeValue): FormGroup {\n const feeGroup = new FormGroup({});\n feeGroup.addControl('FeeCode', new FormControl(feeValue.FeeCode));\n feeGroup.addControl('FeeAmount', new FormControl(feeValue.FeeAmount));\n feeGroup.addControl('FeeDescription', new FormControl(feeValue.FeeDescription));\n feeGroup.addControl('FeeVersion', new FormControl(feeValue.FeeVersion));\n const feeValueGroup = new FormGroup({});\n feeValueGroup.addControl('value', feeGroup);\n return feeValueGroup;\n }\n\n}\n","<ccd-read-order-summary-field [caseField]=\"caseField\"></ccd-read-order-summary-field>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, timer } from 'rxjs';\nimport { catchError, map, publishReplay, refCount, take } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\n\nexport interface OrganisationSuperUser {\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport interface OrganisationAddress {\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n dxAddress: any [];\n}\n\nexport interface Organisation {\n organisationIdentifier: string;\n name: string;\n status: string;\n sraId: string;\n sraRegulated: boolean;\n companyNumber: string;\n companyUrl: string;\n superUser: OrganisationSuperUser;\n paymentAccount: string [];\n contactInformation: OrganisationAddress [];\n}\n\nexport interface OrganisationVm {\n organisationIdentifier: string;\n name: string;\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n townCity: string;\n county: string;\n country: string;\n postCode: string;\n}\n\n@Injectable()\nexport class OrganisationService {\n\n constructor(private readonly http: HttpClient,\n private readonly appconfig: AbstractAppConfig) {}\n\n private organisations$: Observable<OrganisationVm[]>;\n public static mapOrganisation(organisations: Organisation[]): OrganisationVm [] {\n const organisationsVm = new Array<OrganisationVm>();\n organisations.forEach(org => {\n let contactInformation = null;\n if (org.contactInformation && org.contactInformation[0]) {\n contactInformation = org.contactInformation[0];\n }\n organisationsVm.push({\n organisationIdentifier: org.organisationIdentifier,\n name: org.name,\n addressLine1: contactInformation !== null ? contactInformation.addressLine1 : null,\n addressLine2: contactInformation !== null ? contactInformation.addressLine2 : null,\n addressLine3: contactInformation !== null ? contactInformation.addressLine3 : null,\n townCity: contactInformation !== null ? contactInformation.townCity : null,\n county: contactInformation !== null ? contactInformation.county : null,\n country: contactInformation !== null ? contactInformation.country : null,\n postCode: contactInformation !== null ? contactInformation.postCode : null,\n });\n });\n return organisationsVm;\n }\n\n public getActiveOrganisations(): Observable<OrganisationVm[]> {\n if (!this.organisations$) {\n const url = this.appconfig.getPrdUrl();\n const cacheTimeOut = this.appconfig.getCacheTimeOut();\n this.organisations$ = this.http.get<Organisation[]>(url)\n .pipe(map((orgs) => OrganisationService.mapOrganisation(orgs)),\n publishReplay(1), refCount(), take(1), catchError(e => {\n console.log(e);\n // Handle error and return blank Observable array\n return of([]);\n }));\n timer(cacheTimeOut).subscribe(() => {\n this.organisations$ = null;\n });\n }\n return this.organisations$;\n }\n}\n","<div class=\"complex-panel\">\n <table class=\"complex-field-table\" aria-describedby=\"complex organisation field table\">\n <tbody>\n <tr>\n <th style=\"display: none;\"></th>\n <td>\n <table class=\"complex-field-table\" *ngIf=\"(selectedOrg$ | async) as selectedOrg\" aria-describedby=\"complex selected organisation field table\">\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-small\"><span class=\"text-16\">Name:</span></td>\n <td><span class=\"text-16\">{{selectedOrg.name}}</span></td>\n </tr>\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-small\"><span class=\"text-16\">Address:</span></td>\n <td>\n <ccd-markdown [content]=\"selectedOrg.address\"></ccd-markdown>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition';\nimport { OrganisationConverter } from '../../../domain/organisation/organisation-converter';\nimport { SimpleOrganisationModel } from '../../../domain/organisation/simple-organisation.model';\nimport { OrganisationService, OrganisationVm } from '../../../services/organisation/organisation.service';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-organisation-field-raw',\n templateUrl: './read-organisation-field-raw.component.html',\n styleUrls: ['./organisation-field.scss']\n})\nexport class ReadOrganisationFieldRawComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public caseFields: CaseField[] = [];\n\n public organisations$: Observable<OrganisationVm[]>;\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor(private readonly organisationService: OrganisationService, private readonly organisationConverter: OrganisationConverter) {\n super();\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.value && this.caseField.value.OrganisationID) {\n this.organisations$ = this.organisationService.getActiveOrganisations();\n this.selectedOrg$ = this.organisations$.pipe(\n switchMap((organisations: OrganisationVm[]) => of(\n this.organisationConverter.toSimpleOrganisationModel(\n organisations.find(findOrg => findOrg.organisationIdentifier === this.caseField.value.OrganisationID)\n )\n )\n )\n );\n }\n }\n}\n","<div class=\"complex-panel\">\n <table class=\"complex-field-table\" aria-describedby=\"complex organisation field table\">\n <tbody>\n <tr>\n <th class=\"complex-field-title\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label}}</span></dt>\n </dl>\n </th>\n <td>\n <table class=\"complex-field-table\" *ngIf=\"(selectedOrg$ | async) as selectedOrg\" aria-describedby=\"complex selected organisation field table\">\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-medium\"><span class=\"text-16\">Name:</span></td>\n <td><span class=\"text-16\">{{selectedOrg.name}}</span></td>\n </tr>\n <tr class=\"complex-panel-compound-field\">\n <th style=\"display: none;\"></th>\n <td class=\"label-width-medium\"><span class=\"text-16\">Address:</span></td>\n <td>\n <ccd-markdown [content]=\"selectedOrg.address\"></ccd-markdown>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { OrganisationConverter } from '../../../domain/organisation/organisation-converter';\nimport { SimpleOrganisationModel } from '../../../domain/organisation/simple-organisation.model';\nimport { OrganisationService, OrganisationVm } from '../../../services/organisation/organisation.service';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-organisation-field-table',\n templateUrl: './read-organisation-field-table.component.html',\n styleUrls: ['./organisation-field.scss']\n})\n\nexport class ReadOrganisationFieldTableComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public caseFields: CaseField[] = [];\n\n public organisations$: Observable<OrganisationVm[]>;\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor(private readonly organisationService: OrganisationService, private readonly organisationConverter: OrganisationConverter) {\n super();\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.value && this.caseField.value.OrganisationID) {\n this.organisations$ = this.organisationService.getActiveOrganisations();\n this.selectedOrg$ = this.organisations$.pipe(\n switchMap((organisations: OrganisationVm[]) => of(\n this.organisationConverter.toSimpleOrganisationModel(\n organisations.find(findOrg => findOrg.organisationIdentifier === this.caseField.value.OrganisationID)\n )\n )\n )\n );\n }\n }\n}\n","<ng-container [ngSwitch]=\"context\">\n <ccd-read-organisation-field-raw\n *ngSwitchCase=\"paletteContext.CHECK_YOUR_ANSWER\"\n [caseField]=\"caseField\"\n [context]=\"context\"\n ></ccd-read-organisation-field-raw>\n <ccd-read-organisation-field-table\n *ngSwitchCase=\"paletteContext.TABLE_VIEW\"\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n ></ccd-read-organisation-field-table>\n <ccd-read-organisation-field-table\n *ngSwitchDefault\n [caseField]=\"caseField\"\n [caseFields]=\"caseFields\"\n [context]=\"context\"\n ></ccd-read-organisation-field-table>\n</ng-container>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { PaletteContext } from '../base-field/palette-context.enum';\n\n@Component({\n selector: 'ccd-read-organisation-field',\n templateUrl: './read-organisation-field.html',\n})\nexport class ReadOrganisationFieldComponent extends AbstractFieldReadComponent implements OnInit {\n @Input()\n public caseFields: CaseField[] = [];\n\n public paletteContext = PaletteContext;\n\n public ngOnInit(): void {\n super.ngOnInit();\n if (this.caseField.display_context_parameter) {\n this.context = PaletteContext.TABLE_VIEW;\n }\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SimpleOrganisationModel } from '../../../domain/organisation';\nimport { AbstractFormFieldComponent } from '../base-field/abstract-form-field.component';\n\n@Component({\n selector: 'ccd-write-organisation-complex-field',\n templateUrl: './write-organisation-complex-field.component.html',\n styleUrls: ['./organisation-field.scss']\n})\nexport class WriteOrganisationComplexFieldComponent extends AbstractFormFieldComponent {\n\n @Input()\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor() {\n super();\n }\n\n}\n","<div class=\"form-group\" [formGroup]=\"organisationFormGroup\">\n <fieldset *ngIf=\"(organisations$ | async)?.length === 0\" class=\"govuk-fieldset\">\n <legend style=\"display: none;\"></legend>\n <div class=\"hmcts-banner\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\" /></svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n <p class=\"warning-message\">Organisation search is currently unavailable.</p>\n </div>\n </div>\n <div class=\"warning-panel\">\n <div class=\"warning-message\">\n We are working to fix the issue. You can try again later.\n </div>\n </div>\n </fieldset>\n <fieldset *ngIf=\"(organisations$ | async)?.length > 0\" class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h2 class=\"heading-h2\">\n Search for an organisation\n </h2>\n </legend>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"search-org-text\">\n <span id=\"search-org-hint\" class=\"govuk-hint\">\n You can only search for organisations already registered with MyHMCTS. For example, you can search by organisation name or address.\n </span>\n </label>\n <input id=\"search-org-text\" class=\"form-control\" type=\"text\" [formControl]=\"searchOrgTextFormControl\" />\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"organisation-table\">\n <h2 class=\"heading-h2\">Organisation name and address</h2>\n </label>\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <div *ngIf=\"!(selectedOrg$ | async)?.organisationIdentifier; else selectedOrganisation\" [ngClass]=\"{'scroll-container ': (simpleOrganisations$ | async)?.length > 10}\">\n <table id=\"organisation-table\" *ngFor=\"let organisation of (simpleOrganisations$ | async)\">\n <caption><h3 class=\"name-header\">{{organisation.name}}</h3></caption>\n <tbody>\n <tr>\n <th style=\"display: none;\"></th>\n <td class=\"td-address\">\n <ccd-markdown [content]=\"organisation.address\"></ccd-markdown>\n </td>\n <td class=\"td-select\">\n <a href=\"javascript:void(0);\" (click)=\"selectOrg(organisation)\" title=\"Select the organisation {{organisation.name}}\">Select</a>\n </td>\n </tr>\n </tbody>\n </table>\n <div *ngIf=\"(simpleOrganisations$ | async)?.length === 0 && (searchOrgValue$ | async)?.length > 2\">\n <div class=\"no-result-message\">\n No results found.\n </div>\n </div>\n </div>\n <ng-template #selectedOrganisation>\n <table id=\"organisation-selected-table\" *ngIf=\"(selectedOrg$ | async) as selectedOrg\">\n <caption><h3 class=\"name-header\">{{selectedOrg.name}}</h3></caption>\n <tbody>\n <tr>\n <th style=\"display: none;\"></th>\n <td class=\"td-address\">\n <ccd-markdown [content]=\"selectedOrg.address\"></ccd-markdown>\n </td>\n <td class=\"td-select\">\n <a href=\"javascript:void(0);\" (click)=\"deSelectOrg()\" title=\"Clear organisation selection for {{selectedOrg.name}}\">Clear</a>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-template>\n </div>\n <ccd-write-organisation-complex-field [caseField]=\"caseField\"\n [formGroup]=\"formGroup\"\n [selectedOrg$]=\"selectedOrg$\">\n </ccd-write-organisation-complex-field>\n <details id=\"find-organisation-help\" class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span id=\"content-why-can-not-find-organisation\" class=\"govuk-details__summary-text\">\n Can’t find the organisation you are looking for?\n </span>\n </summary>\n <div id=\"content-reason-can-not-find-organisation\" class=\"govuk-details__text\">\n If you know that the solicitor is already registered with MyHMCTS, check that you have entered their details correctly.\n Remember that organisations can only register one office address. This means that the details could be slightly different from what you're expecting. Contact the solicitor directly if you have any concerns.\n </div>\n </details>\n </fieldset>\n</div>\n","<div>\n <input type=\"hidden\" name=\"organisationID\" [value]=\"(selectedOrg$ | async)?.organisationIdentifier\">\n <input type=\"hidden\" name=\"organisationName\" [value]=\"(selectedOrg$ | async)?.name\">\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { OrganisationConverter } from '../../../domain/organisation/organisation-converter';\nimport { SimpleOrganisationModel } from '../../../domain/organisation/simple-organisation.model';\nimport { OrganisationService, OrganisationVm } from '../../../services/organisation/organisation.service';\nimport { WindowService } from '../../../services/window/window.service';\n\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-organisation-field',\n templateUrl: './write-organisation-field.component.html',\n styleUrls: ['./organisation-field.scss']\n})\nexport class WriteOrganisationFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n private static readonly EMPTY_SIMPLE_ORG: SimpleOrganisationModel = {organisationIdentifier: '', name: '', address: ''};\n private static readonly MAX_RESULT_COUNT: number = 100;\n private static readonly ORGANISATION_ID: string = 'OrganisationID';\n private static readonly ORGANISATION_NAME: string = 'OrganisationName';\n private static readonly PRE_POPULATE_TO_USERS_ORGANISATION: string = 'PrepopulateToUsersOrganisation';\n private static readonly ORGANISATION_DETAILS: string = 'organisationDetails';\n private static readonly YES: string = 'YES';\n private static readonly MANDATORY: string = 'MANDATORY';\n public defaultOrg: any;\n\n public organisationFormGroup: FormGroup;\n public searchOrgTextFormControl: FormControl;\n public organisationIDFormControl: FormControl;\n public organisationNameFormControl: FormControl;\n\n public organisations$: Observable<OrganisationVm[]>;\n public searchOrgValue$: Observable<string>;\n public simpleOrganisations$: Observable<SimpleOrganisationModel[]>;\n public selectedOrg$: Observable<SimpleOrganisationModel>;\n\n constructor(private readonly organisationService: OrganisationService,\n private readonly organisationConverter: OrganisationConverter,\n private readonly windowService: WindowService) {\n super();\n this.defaultOrg = JSON.parse(this.windowService.getSessionStorage(WriteOrganisationFieldComponent.ORGANISATION_DETAILS));\n }\n\n public ngOnInit(): void {\n this.organisations$ = this.organisationService.getActiveOrganisations();\n\n this.searchOrgTextFormControl = new FormControl('');\n this.searchOrgValue$ = this.searchOrgTextFormControl.valueChanges;\n this.searchOrgValue$.subscribe(value => this.onSearchOrg(value));\n\n this.organisationFormGroup = this.registerControl(new FormGroup({}), true) as FormGroup;\n if (this.parent && this.parent.controls && this.parent.controls.hasOwnProperty(WriteOrganisationFieldComponent.PRE_POPULATE_TO_USERS_ORGANISATION)\n && this.parent.controls[WriteOrganisationFieldComponent.PRE_POPULATE_TO_USERS_ORGANISATION].value\n && this.parent.controls[WriteOrganisationFieldComponent.PRE_POPULATE_TO_USERS_ORGANISATION].value.toUpperCase()\n === WriteOrganisationFieldComponent.YES) {\n if (this.caseField && !this.caseField.value) {\n this.caseField.value = {\n OrganisationID: this.defaultOrg ? this.defaultOrg.organisationIdentifier : null,\n OrganisationName: this.defaultOrg ? this.defaultOrg.name : null\n };\n }\n this.preSelectDefaultOrg();\n } else {\n if (this.caseField && this.caseField.value && this.caseField.value.OrganisationID) {\n this.preSelectDefaultOrg();\n } else {\n this.preSelectEmptyOrg();\n }\n }\n\n // Ensure that all sub-fields inherit the same value for retain_hidden_value as this parent; although an\n // Organisation field uses the Complex type, it is meant to be treated as one field\n if (this.caseField && this.caseField.field_type.type === 'Complex') {\n for (const organisationSubField of this.caseField.field_type.complex_fields) {\n organisationSubField.retain_hidden_value = this.caseField.retain_hidden_value;\n }\n }\n }\n\n public onSearchOrg(orgSearchText: string): void {\n if (orgSearchText && orgSearchText.length >= 2) {\n const lowerOrgSearchText = orgSearchText.toLowerCase();\n this.simpleOrganisations$ = this.organisations$.pipe(\n switchMap(organisations => of(\n this.searchOrg(organisations, lowerOrgSearchText)\n )\n )\n );\n } else {\n this.simpleOrganisations$ = of([]);\n }\n }\n\n // The way the search works divide into two phases\n // 1. go through collection of org items one by one by doing the comparsion of search string using includes to all the address fields\n // 2. split the search string into arrays and apply the each array item into the address fields\n // 3. both step 1, 2 will go until max count result reaches, and finally combine both result sets into final collection\n public searchOrg(organisations: OrganisationVm[], lowerOrgSearchText: string): SimpleOrganisationModel[] {\n const partMatchingResultSet = [];\n const withSpaceMatchingResultSet = [];\n const MAX_RESULT_COUNT = WriteOrganisationFieldComponent.MAX_RESULT_COUNT;\n organisations.forEach((organisation) => {\n if ( partMatchingResultSet.length < MAX_RESULT_COUNT && this.searchCriteria(organisation, lowerOrgSearchText)) {\n partMatchingResultSet.push(organisation);\n }\n });\n\n organisations.forEach((org) => {\n const resultSet = [...partMatchingResultSet, ...withSpaceMatchingResultSet];\n const hasMatchingOrganisation = resultSet.find(item => item.organisationIdentifier === org.organisationIdentifier);\n const searchHasSpace = this.searchWithSpace(org, lowerOrgSearchText);\n const hasResultSetBelowMaxCount = resultSet.length < MAX_RESULT_COUNT;\n\n if (!hasMatchingOrganisation && partMatchingResultSet.length === 0 && hasResultSetBelowMaxCount && searchHasSpace) {\n withSpaceMatchingResultSet.push(org);\n }\n });\n return [...partMatchingResultSet, ...withSpaceMatchingResultSet].map((organisation) =>\n this.organisationConverter.toSimpleOrganisationModel(organisation)\n );\n }\n\n public trimAll(oldText: string): string {\n return oldText.replace(/\\s+/g, '');\n }\n\n public selectOrg(selectedOrg: SimpleOrganisationModel): void {\n this.organisationIDFormControl.setValue(selectedOrg.organisationIdentifier);\n this.organisationNameFormControl.setValue(selectedOrg.name);\n this.selectedOrg$ = of(selectedOrg);\n this.simpleOrganisations$ = of([...[], selectedOrg]);\n this.searchOrgTextFormControl.setValue('');\n this.searchOrgTextFormControl.disable();\n this.caseField.value = {\n OrganisationID: selectedOrg.organisationIdentifier,\n OrganisationName: selectedOrg.name\n };\n this.organisationFormGroup.setValue(this.caseField.value);\n }\n\n public deSelectOrg(): void {\n this.organisationIDFormControl.reset();\n this.organisationNameFormControl.reset();\n this.selectedOrg$ = of(WriteOrganisationFieldComponent.EMPTY_SIMPLE_ORG);\n this.simpleOrganisations$ = of([]);\n this.searchOrgTextFormControl.setValue('');\n this.searchOrgTextFormControl.enable();\n this.caseField.value = {OrganisationID: null, OrganisationName: null};\n this.organisationFormGroup.setValue(this.caseField.value);\n }\n\n private preSelectDefaultOrg(): void {\n this.instantiateOrganisationFormGroup(this.caseField.value.OrganisationID, this.caseField.value.OrganisationName);\n this.selectedOrg$ = this.organisations$.pipe(\n map(organisations =>\n organisations.filter(findOrg => {\n return findOrg.organisationIdentifier === this.caseField.value.OrganisationID;\n })\n .map(organisation => this.organisationConverter.toSimpleOrganisationModel(organisation))[0]),\n );\n if (this.caseField.value && this.caseField.value.OrganisationID) {\n this.searchOrgTextFormControl.disable();\n }\n }\n\n private preSelectEmptyOrg(): void {\n this.instantiateOrganisationFormGroup(null, null);\n this.selectedOrg$ = of(WriteOrganisationFieldComponent.EMPTY_SIMPLE_ORG);\n }\n\n private instantiateOrganisationFormGroup(orgIDState: any, orgNameState: any): void {\n this.organisationIDFormControl = new FormControl(orgIDState);\n this.addOrganisationValidators(this.caseField, this.organisationIDFormControl);\n this.organisationFormGroup.addControl(WriteOrganisationFieldComponent.ORGANISATION_ID, this.organisationIDFormControl);\n this.organisationNameFormControl = new FormControl(orgNameState);\n this.organisationFormGroup.addControl(WriteOrganisationFieldComponent.ORGANISATION_NAME, this.organisationNameFormControl);\n }\n\n private addOrganisationValidators(caseField: CaseField, control: AbstractControl): void {\n if (caseField.field_type && caseField.field_type.complex_fields) {\n const organisationIdField = caseField.field_type.complex_fields\n .find(field => field.id === WriteOrganisationFieldComponent.ORGANISATION_ID);\n this.addValidators(organisationIdField, control);\n }\n }\n\n private searchCriteria(organisation: OrganisationVm, lowerOrgSearchText: string): boolean {\n if (organisation.postCode && organisation.postCode.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.postCode && this.trimAll(organisation.postCode).toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.postCode && organisation.postCode.toLowerCase().includes(this.trimAll(lowerOrgSearchText))) {\n return true;\n }\n if (organisation.name && organisation.name.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.addressLine1 && organisation.addressLine1.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.addressLine2 && organisation.addressLine2.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.addressLine3 && organisation.addressLine3.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.townCity && organisation.townCity.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n if (organisation.county && organisation.county.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n // noinspection RedundantIfStatementJS\n if (organisation.country && organisation.country.toLowerCase().includes(lowerOrgSearchText)) {\n return true;\n }\n return false;\n }\n\n private searchWithSpace(organisation: OrganisationVm, lowerOrgSearchText: string): boolean {\n const searchTextArray: string[] = lowerOrgSearchText.split(/\\s+/g);\n for (const singleSearchText of searchTextArray) {\n if (singleSearchText && this.searchCriteria(organisation, singleSearchText)) {\n return true;\n }\n }\n }\n}\n","import { AbstractAppConfig } from '../../../../app.config';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { AbstractFieldReadComponent } from './abstract-field-read.component';\n\nexport abstract class PaymentField extends AbstractFieldReadComponent {\n constructor(\n protected readonly appConfig: AbstractAppConfig,\n protected readonly sessionStorage: SessionStorageService\n ) {\n super();\n }\n\n public getBaseURL() {\n return this.appConfig.getPaymentsUrl();\n }\n\n public getPayBulkScanBaseURL() {\n return this.appConfig.getPayBulkScanBaseUrl();\n }\n\n public getRefundsUrl() {\n return this.appConfig.getRefundsUrl();\n }\n\n public getUserRoles() {\n const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);\n if (!userDetails || !userDetails.hasOwnProperty('roles')) {\n return [];\n }\n return userDetails.roles;\n }\n\n public getUserEmail() {\n const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);\n if (!userDetails || !userDetails.hasOwnProperty('sub')) {\n return '';\n }\n return userDetails.sub;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { PaymentField } from '../base-field/payment-field.component';\n\n@Component({\n selector: 'ccd-case-payment-history-viewer-field',\n templateUrl: 'case-payment-history-viewer-field.html',\n})\nexport class CasePaymentHistoryViewerFieldComponent extends PaymentField {\n constructor(\n appConfig: AbstractAppConfig,\n sessionStorage: SessionStorageService\n ) {\n super(appConfig, sessionStorage);\n }\n}\n","<ccpay-payment-lib\n [API_ROOT]=\"getBaseURL()\"\n [CCD_CASE_NUMBER]=\"caseReference\"\n [BULKSCAN_API_ROOT]=\"getPayBulkScanBaseURL()\"\n [SELECTED_OPTION]=\"'CCDorException'\"\n [ISBSENABLE]=\"'true'\"\n [LOGGEDINUSEREMAIL]=\"getUserEmail()\"\n [LOGGEDINUSERROLES]=\"getUserRoles()\"\n [REFUNDS_API_ROOT]=\"getRefundsUrl()\"\n [VIEW]=\"'case-transactions'\"\n [REFUNDS_API_ROOT]=\"getRefundsUrl()\"\n [TAKEPAYMENT]=\"false\"\n [SERVICEREQUEST]=\"false\"\n [PAYMENT_GROUP_REF]=\"null\"\n [EXC_REFERENCE]=\"caseReference\"\n [DCN_NUMBER]=\"null\"\n [LOGGEDINUSERROLES]=\"getUserRoles()\"\n></ccpay-payment-lib>\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-phone-uk-field',\n template: `<span class=\"text-16\">{{caseField.value}}</span>`\n})\nexport class ReadPhoneUKFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !phoneUkControl.valid && (phoneUkControl.dirty || phoneUkControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"phoneUkControl.errors && (phoneUkControl.dirty || phoneUkControl.touched)\">{{phoneUkControl.errors | ccdFirstError:caseField.label}}</span>\n <input class=\"form-control bottom-30\" [ngClass]=\"{'govuk-input--error': phoneUkControl.errors && phoneUkControl.dirty}\"\n [id]=\"id()\" type=\"tel\" [formControl]=\"phoneUkControl\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-phone-uk-field',\n templateUrl: './write-phone-uk-field.html'\n})\nexport class WritePhoneUKFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public phoneUkControl: FormControl;\n\n public ngOnInit() {\n this.phoneUkControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-text-area-field',\n template: `<span style=\"white-space: pre-wrap\">{{caseField.value}}</span>`\n})\nexport class ReadTextAreaFieldComponent extends AbstractFieldReadComponent {}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class BrowserService {\n public isFirefox(): boolean {\n return window.navigator.userAgent.indexOf('Firefox') > -1;\n }\n public isSafari(): boolean {\n const isSafariAgent = window.navigator.userAgent.indexOf('Safari') > -1;\n const isChromeAgent = window.navigator.userAgent.indexOf('Chrome') > -1;\n if ((isChromeAgent) && (isSafariAgent)) {\n return false;\n }\n return isSafariAgent;\n }\n public isIEOrEdge(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !textareaControl.valid && textareaControl.dirty}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"textareaControl.errors && (textareaControl.dirty || textareaControl.touched)\">{{textareaControl.errors | ccdFirstError:caseField.label}}</span>\n\n <textarea (input)=\"autoGrow($event)\" class=\"form-control bottom-30\" [ngClass]=\"{'govuk-textarea--error': textareaControl.errors && (textareaControl.dirty || textareaControl.touched)}\"\n [id]=\"id()\" rows=\"3\" [formControl]=\"textareaControl\"></textarea>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { BrowserService } from '../../../services/browser/browser.service';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-text-area-field',\n templateUrl: './write-text-area-field.html',\n providers: [BrowserService]\n})\nexport class WriteTextAreaFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public textareaControl: FormControl;\n constructor(private readonly browserService: BrowserService) {\n super();\n }\n\n public ngOnInit() {\n this.textareaControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n\n public autoGrow(event) {\n if (this.browserService.isIEOrEdge()) {\n event.target.style.height = 'auto';\n event.target.style.height = event.target.scrollHeight + 'px';\n event.target.scrollTop = event.target.scrollHeight;\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\n\n@Component({\n selector: 'ccd-read-text-field',\n template: `<span class=\"text-16\">{{caseField.value}}</span>`\n})\nexport class ReadTextFieldComponent extends AbstractFieldReadComponent {}\n","<div class=\"form-group\" [ngClass]=\"{'form-group-error': !!textControl && !textControl.valid && (textControl.dirty || textControl.touched)}\">\n\n <label [for]=\"id()\">\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </label>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"textControl?.errors && (textControl.dirty || textControl.touched)\">{{textControl.errors | ccdFirstError:caseField.label}}</span>\n <input class=\"form-control bottom-30\" [ngClass]=\"{'govuk-input--error': textControl?.errors && (textControl.dirty || textControl.touched)}\"\n [id]=\"id()\" type=\"text\" [formControl]=\"textControl\" (blur)=\"onBlur($event)\">\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\n\n@Component({\n selector: 'ccd-write-text-field',\n templateUrl: './write-text-field.html'\n})\nexport class WriteTextFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public textControl: FormControl;\n\n public ngOnInit() {\n this.textControl = this.registerControl(new FormControl(this.caseField.value)) as FormControl;\n }\n\n public onBlur($event) {\n $event.target.value = $event.target.value.trim();\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n template: `<em>Field type not supported</em>`\n})\nexport class UnsupportedFieldComponent {}\n","<ccpay-payment-lib *ngIf=\"getUserRoles().length > 0\"\n [API_ROOT]=\"getBaseURL()\"\n [BULKSCAN_API_ROOT]=\"getPayBulkScanBaseURL()\"\n [REFUNDS_API_ROOT]=\"getRefundsUrl()\"\n [CCD_CASE_NUMBER]=\"caseReference\"\n [VIEW]=\"'case-transactions'\"\n [TAKEPAYMENT]=\"false\"\n [SERVICEREQUEST]=\"true\"\n [PAYMENT_GROUP_REF]=\"null\"\n [EXC_REFERENCE]=\"caseReference\"\n [DCN_NUMBER]=\"null\"\n [SELECTED_OPTION]=\"'CCDorException'\"\n [LOGGEDINUSERROLES]=\"getUserRoles()\"\n [CARDPAYMENTRETURNURL]=\"getCardPaymentReturnUrl()\"\n></ccpay-payment-lib>","import { Component } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { PaymentField } from '../base-field/payment-field.component';\n\n@Component({\n selector: 'ccd-ways-to-pay-field',\n templateUrl: './waystopay-field.component.html'\n})\nexport class WaysToPayFieldComponent extends PaymentField {\n constructor(\n appConfig: AbstractAppConfig,\n sessionStorage: SessionStorageService\n ) {\n super(appConfig, sessionStorage);\n }\n\n public getCardPaymentReturnUrl(): string {\n return this.appConfig.getPaymentReturnUrl();\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class YesNoService {\n private static readonly YES_INPUTS: string[] = [\n 'Y',\n 'YES'\n ];\n private static readonly NO_INPUTS: string[] = [\n 'N',\n 'NO'\n ];\n private static readonly YES = 'Yes';\n private static readonly NO = 'No';\n private static readonly EMPTY = null;\n\n public format(value: any): string {\n\n if (this.isYes(value)) {\n return YesNoService.YES;\n } else if (this.isNo(value)) {\n return YesNoService.NO;\n }\n\n return YesNoService.EMPTY;\n }\n\n private isYes(value: any): boolean {\n switch (typeof(value)) {\n case 'boolean':\n return value;\n case 'string':\n return YesNoService.YES_INPUTS.indexOf(value.toUpperCase()) !== -1;\n }\n\n return false;\n }\n\n private isNo(value: any): boolean {\n switch (typeof(value)) {\n case 'boolean':\n return !value;\n case 'string':\n return YesNoService.NO_INPUTS.indexOf(value.toUpperCase()) !== -1;\n }\n\n return false;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractFieldReadComponent } from '../base-field/abstract-field-read.component';\nimport { YesNoService } from './yes-no.service';\n\n@Component({\n selector: 'ccd-read-yes-no-field',\n template: `<span class=\"text-16\">{{formattedValue}}</span>`\n})\nexport class ReadYesNoFieldComponent extends AbstractFieldReadComponent implements OnInit {\n\n public formattedValue: string;\n\n constructor(private readonly yesNoService: YesNoService) {\n super();\n }\n\n public ngOnInit() {\n super.ngOnInit();\n this.formattedValue = this.yesNoService.format(this.caseField.value);\n }\n\n}\n","<div [id]=\"id()\" class=\"form-group bottom-30\" [ngClass]=\"{'form-group-error': !yesNoControl.valid && (yesNoControl.dirty || yesNoControl.touched)}\">\n\n\t<fieldset class=\"inline\">\n\n <legend>\n <span class=\"form-label\" *ngIf=\"caseField.label\">{{caseField | ccdFieldLabel}}</span>\n </legend>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">{{caseField.hint_text}}</span>\n <span class=\"error-message\" *ngIf=\"yesNoControl.errors && (yesNoControl.dirty || yesNoControl.touched)\">{{yesNoControl.errors | ccdFirstError:caseField.label}}</span>\n\n <div [id]=\"createElementId('radio')\">\n\n \t <div class=\"multiple-choice\" *ngFor=\"let value of yesNoValues\" [ngClass]=\"{selected: yesNoControl.value === value}\">\n \t <input class=\"form-control\" [id]=\"createElementId(value)\" [attr.name]=\"id()\" [name]=\"id()\" type=\"radio\" [formControl]=\"yesNoControl\" [value]=\"value\">\n \t <label class=\"form-label\" [for]=\"createElementId(value)\">{{value}}</label>\n \t </div>\n\n </div>\n\n\t</fieldset>\n\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';\nimport { YesNoService } from './yes-no.service';\n\n@Component({\n selector: 'ccd-write-yes-no-field',\n templateUrl: './write-yes-no-field.html'\n})\nexport class WriteYesNoFieldComponent extends AbstractFieldWriteComponent implements OnInit {\n\n public yesNoValues = [ 'Yes', 'No' ];\n public yesNoControl: FormControl;\n\n constructor(private readonly yesNoService: YesNoService) {\n super();\n }\n\n public ngOnInit() {\n this.yesNoControl = this.registerControl(new FormControl(this.yesNoService.format(this.caseField.value))) as FormControl;\n }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { WriteAddressFieldComponent } from './address/write-address-field.component';\nimport { ReadCaseLinkFieldComponent } from './case-link/read-case-link-field.component';\nimport { WriteCaseLinkFieldComponent } from './case-link/write-case-link-field.component';\nimport { ReadCollectionFieldComponent } from './collection/read-collection-field.component';\nimport { WriteCollectionFieldComponent } from './collection/write-collection-field.component';\nimport { ReadComplexFieldComponent } from './complex/read-complex-field.component';\nimport { WriteComplexFieldComponent } from './complex/write-complex-field.component';\nimport { ReadDateFieldComponent } from './date/read-date-field.component';\nimport { WriteDateContainerFieldComponent } from './date/write-date-container-field.component';\nimport { ReadDocumentFieldComponent } from './document/read-document-field.component';\nimport { WriteDocumentFieldComponent } from './document/write-document-field.component';\nimport { ReadDynamicListFieldComponent } from './dynamic-list/read-dynamic-list-field.component';\nimport { WriteDynamicListFieldComponent } from './dynamic-list/write-dynamic-list-field.component';\nimport { ReadDynamicRadioListFieldComponent } from './dynamic-radio-list/read-dynamic-radio-list-field.component';\nimport { WriteDynamicRadioListFieldComponent } from './dynamic-radio-list/write-dynamic-radio-list-field.component';\nimport { ReadEmailFieldComponent } from './email/read-email-field.component';\nimport { WriteEmailFieldComponent } from './email/write-email-field.component';\nimport { ReadFixedListFieldComponent } from './fixed-list/read-fixed-list-field.component';\nimport { WriteFixedListFieldComponent } from './fixed-list/write-fixed-list-field.component';\nimport { ReadFixedRadioListFieldComponent } from './fixed-radio-list/read-fixed-radio-list-field.component';\nimport { WriteFixedRadioListFieldComponent } from './fixed-radio-list/write-fixed-radio-list-field.component';\nimport { CaseHistoryViewerFieldComponent } from './history/case-history-viewer-field.component';\nimport { LabelFieldComponent } from './label/label-field.component';\nimport { ReadMoneyGbpFieldComponent } from './money-gbp/read-money-gbp-field.component';\nimport { WriteMoneyGbpFieldComponent } from './money-gbp/write-money-gbp-field.component';\nimport { ReadMultiSelectListFieldComponent } from './multi-select-list/read-multi-select-list-field.component';\nimport { WriteMultiSelectListFieldComponent } from './multi-select-list/write-multi-select-list-field.component';\nimport { ReadNumberFieldComponent } from './number/read-number-field.component';\nimport { WriteNumberFieldComponent } from './number/write-number-field.component';\nimport { ReadOrderSummaryFieldComponent } from './order-summary/read-order-summary-field.component';\nimport { WriteOrderSummaryFieldComponent } from './order-summary/write-order-summary-field.component';\nimport { ReadOrganisationFieldComponent } from './organisation/read-organisation-field.component';\nimport { WriteOrganisationFieldComponent } from './organisation/write-organisation-field.component';\nimport { CasePaymentHistoryViewerFieldComponent } from './payment/case-payment-history-viewer-field.component';\nimport { ReadPhoneUKFieldComponent } from './phone-uk/read-phone-uk-field.component';\nimport { WritePhoneUKFieldComponent } from './phone-uk/write-phone-uk-field.component';\nimport { ReadTextAreaFieldComponent } from './text-area/read-text-area-field.component';\nimport { WriteTextAreaFieldComponent } from './text-area/write-text-area-field.component';\nimport { ReadTextFieldComponent } from './text/read-text-field.component';\nimport { WriteTextFieldComponent } from './text/write-text-field.component';\nimport { UnsupportedFieldComponent } from './unsupported-field.component';\nimport { WaysToPayFieldComponent } from './waystopay/waystopay-field.component';\nimport { ReadYesNoFieldComponent } from './yes-no/read-yes-no-field.component';\nimport { WriteYesNoFieldComponent } from './yes-no/write-yes-no-field.component';\n\n@Injectable()\nexport class PaletteService {\n\n public getFieldComponentClass(caseField: CaseField, write: boolean): Type<{}> {\n switch (caseField.field_type.type) {\n case 'Text':\n case 'Postcode':\n return write ? WriteTextFieldComponent : ReadTextFieldComponent;\n case 'TextArea':\n return write ? WriteTextAreaFieldComponent : ReadTextAreaFieldComponent;\n case 'Number':\n return write ? WriteNumberFieldComponent : ReadNumberFieldComponent;\n case 'YesOrNo':\n return write ? WriteYesNoFieldComponent : ReadYesNoFieldComponent;\n case 'Email':\n return write ? WriteEmailFieldComponent : ReadEmailFieldComponent;\n case 'PhoneUK':\n return write ? WritePhoneUKFieldComponent : ReadPhoneUKFieldComponent;\n case 'Date':\n case 'DateTime':\n return write ? WriteDateContainerFieldComponent : ReadDateFieldComponent;\n case 'MoneyGBP':\n return write ? WriteMoneyGbpFieldComponent : ReadMoneyGbpFieldComponent;\n case 'DynamicList':\n return write ? WriteDynamicListFieldComponent : ReadDynamicListFieldComponent;\n case 'FixedList':\n return write ? WriteFixedListFieldComponent : ReadFixedListFieldComponent;\n case 'DynamicRadioList':\n return write ? WriteDynamicRadioListFieldComponent : ReadDynamicRadioListFieldComponent;\n case 'FixedRadioList':\n return write ? WriteFixedRadioListFieldComponent : ReadFixedRadioListFieldComponent;\n case 'Complex':\n switch (caseField.field_type.id) {\n case 'AddressGlobalUK':\n case 'AddressUK':\n return write ? WriteAddressFieldComponent : ReadComplexFieldComponent;\n case 'OrderSummary':\n return write ? WriteOrderSummaryFieldComponent : ReadOrderSummaryFieldComponent;\n case 'CaseLink':\n return write ? WriteCaseLinkFieldComponent : ReadCaseLinkFieldComponent;\n case 'Organisation':\n return write ? WriteOrganisationFieldComponent : ReadOrganisationFieldComponent;\n default:\n return write ? WriteComplexFieldComponent : ReadComplexFieldComponent;\n }\n case 'Collection':\n return write ? WriteCollectionFieldComponent : ReadCollectionFieldComponent;\n case 'MultiSelectList':\n return write ? WriteMultiSelectListFieldComponent : ReadMultiSelectListFieldComponent;\n case 'Document':\n return write ? WriteDocumentFieldComponent : ReadDocumentFieldComponent;\n case 'Label':\n return LabelFieldComponent;\n case 'CasePaymentHistoryViewer':\n return CasePaymentHistoryViewerFieldComponent;\n case 'CaseHistoryViewer':\n return CaseHistoryViewerFieldComponent;\n case 'WaysToPay':\n return WaysToPayFieldComponent;\n default:\n return UnsupportedFieldComponent;\n }\n }\n}\n","<div [hidden]=\"caseField.hidden\" [class.grey-bar]=\"canHaveGreyBar && !caseField.hiddenCannotChange\">\n <dl class=\"case-field\" *ngIf=\"withLabel && !isLabel() && (!isComplex() || isCaseLink()); else caseFieldValue\">\n <dt class=\"case-field__label\">{{caseField.label}}</dt>\n <dd class=\"case-field__value\">\n <ng-container *ngTemplateOutlet=\"caseFieldValue\"></ng-container>\n </dd>\n </dl>\n <ng-template #caseFieldValue>\n <ng-content></ng-content>\n </ng-template>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { AbstractFieldReadComponent } from './abstract-field-read.component';\n\n@Component({\n selector: 'ccd-field-read-label',\n templateUrl: './field-read-label.html',\n styleUrls: [\n './field-read-label.scss'\n ]\n})\nexport class FieldReadLabelComponent extends AbstractFieldReadComponent implements OnChanges {\n\n // EUI-3267. Flag for whether or not this can have a grey bar.\n public canHaveGreyBar = false;\n\n @Input()\n public withLabel: boolean;\n\n @Input()\n public markdownUseHrefAsRouterLink?: boolean;\n\n public isLabel(): boolean {\n return this.caseField.field_type && this.caseField.field_type.type === 'Label';\n }\n\n public isComplex(): boolean {\n return this.caseField.isComplex();\n }\n\n public isCaseLink(): boolean {\n return this.caseField.isCaseLink();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const change = changes['caseField'];\n if (change) {\n const cfNew = change.currentValue;\n if (!(cfNew instanceof CaseField)) {\n this.fixCaseField();\n }\n\n // EUI-3267.\n // Set up the flag for whether this can have a grey bar.\n this.canHaveGreyBar = !!this.caseField.show_condition;\n }\n }\n\n private fixCaseField() {\n if (this.caseField && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n }\n}\n","import { Component, ComponentFactoryResolver, Injector, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { PaletteService } from '../palette.service';\nimport { AbstractFieldReadComponent } from './abstract-field-read.component';\n\nconst FIX_CASEFIELD_FOR = [ 'FixedList', 'DynamicList' ];\n\n@Component({\n selector: 'ccd-field-read',\n templateUrl: './field-read.html'\n})\nexport class FieldReadComponent extends AbstractFieldReadComponent implements OnInit {\n\n @Input()\n public withLabel = false;\n\n @Input()\n public formGroup: FormGroup = new FormGroup({});\n\n @Input()\n public caseFields: CaseField[] = [];\n\n @Input()\n public markdownUseHrefAsRouterLink?: boolean;\n\n @ViewChild('fieldContainer', { static: false, read: ViewContainerRef })\n public fieldContainer: ViewContainerRef;\n\n constructor(private readonly resolver: ComponentFactoryResolver, private readonly paletteService: PaletteService) {\n super();\n }\n\n public ngOnInit(): void {\n // Ensure all field values are resolved by label interpolation before the component is fully initialised.\n Promise.resolve(null).then(() => {\n const componentClass = this.paletteService.getFieldComponentClass(this.caseField, false);\n const injector = Injector.create([], this.fieldContainer.parentInjector);\n const component = this.resolver.resolveComponentFactory(componentClass).create(injector);\n\n // Provide component @Inputs\n // Only Fixed list use plainToClassFromExist\n // Better performance\n // TODO AW 30/12/20 figure out why FixedLists need plainToClassFromExist\n // Added a check to make sure it's NOT already a CaseField and then\n // assigning it back to this.caseField so we don't create separation.\n if (FIX_CASEFIELD_FOR.indexOf(this.caseField.field_type.type) > -1 && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n component.instance['caseField'] = this.caseField;\n component.instance['caseFields'] = this.caseFields;\n component.instance['formGroup'] = this.formGroup;\n component.instance['topLevelFormGroup'] = this.topLevelFormGroup;\n component.instance['idPrefix'] = this.idPrefix;\n component.instance['parent'] = this.parent;\n component.instance['caseReference'] = this.caseReference;\n component.instance['context'] = this.context;\n component.instance['markdownUseHrefAsRouterLink'] = this.markdownUseHrefAsRouterLink;\n\n this.fieldContainer.insert(component.hostView);\n });\n }\n}\n","<div [hidden]=\"caseField.hidden\">\n <ccd-field-read-label [formGroup]=\"formGroup\" [topLevelFormGroup]=\"topLevelFormGroup\" [caseField]=\"caseField\" [withLabel]=\"withLabel\" [markdownUseHrefAsRouterLink]=\"markdownUseHrefAsRouterLink\">\n <ng-container #fieldContainer></ng-container>\n </ccd-field-read-label>\n</div>\n","import { Component, ComponentFactoryResolver, Injector, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FormValidatorsService } from '../../../services/form/form-validators.service';\nimport { PaletteService } from '../palette.service';\nimport { AbstractFieldWriteComponent } from './abstract-field-write.component';\n\nconst FIX_CASEFIELD_FOR = [ 'FixedList', 'DynamicList' ];\n\n@Component({\n selector: 'ccd-field-write',\n templateUrl: './field-write.component.html',\n styleUrls: [ './field-write.component.scss' ]\n})\nexport class FieldWriteComponent extends AbstractFieldWriteComponent implements OnInit {\n\n // EUI-3267. Flag for whether or not this can have a grey bar.\n public canHaveGreyBar = false;\n\n @Input()\n public caseFields: CaseField[] = [];\n\n @ViewChild('fieldContainer', { static: true, read: ViewContainerRef })\n public fieldContainer: ViewContainerRef;\n\n constructor(private readonly resolver: ComponentFactoryResolver,\n private readonly paletteService: PaletteService) {\n super();\n }\n\n public ngOnInit(): void {\n const componentClass = this.paletteService.getFieldComponentClass(this.caseField, true);\n const injectorOptions = {\n providers: [],\n parent: this.fieldContainer?.injector\n };\n\n const injector = Injector.create(injectorOptions);\n\n const factory = this.resolver.resolveComponentFactory(componentClass);\n const component = this.fieldContainer.createComponent(factory, 0, injector);\n\n // Only Fixed list use plainToClassFromExist\n // Better performance\n // TODO AW 30/12/20 figure out why FixedLists need plainToClassFromExist\n // Added a check to make sure it's NOT already a CaseField and then\n // assigning it back to this.caseField so we don't create separation.\n if (FIX_CASEFIELD_FOR.indexOf(this.caseField.field_type.type) > -1 && !(this.caseField instanceof CaseField)) {\n this.caseField = plainToClassFromExist(new CaseField(), this.caseField);\n }\n component.instance['caseField'] = this.caseField;\n component.instance['caseFields'] = this.caseFields;\n component.instance['formGroup'] = this.formGroup;\n component.instance['parent'] = this.parent;\n component.instance['idPrefix'] = this.idPrefix;\n if (this.caseField.field_type.id === 'AddressGlobal') {\n component.instance['ignoreMandatory'] = true;\n }\n component.instance['isExpanded'] = this.isExpanded;\n component.instance['isInSearchBlock'] = this.isInSearchBlock;\n this.fieldContainer.insert(component.hostView);\n\n // EUI-3267.\n // Set up the flag for whether this can have a grey bar.\n this.canHaveGreyBar = this.caseField.show_condition && this.caseField.field_type.type !== 'Collection';\n }\n\n protected addValidators(caseField: CaseField, control: AbstractControl): void {\n FormValidatorsService.addValidators(caseField, control);\n }\n}\n","<div [hidden]=\"caseField.hidden\" [class.grey-bar]=\"canHaveGreyBar && !caseField.hiddenCannotChange\">\n <ng-container #fieldContainer></ng-container>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { CaseFieldService } from '../../../services/case-fields';\n\n@Pipe({\n name: 'ccdIsReadOnlyAndNotCollection'\n})\nexport class IsReadOnlyAndNotCollectionPipe implements PipeTransform {\n\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public transform(field: CaseField): boolean {\n if (!field || !field.field_type || !field.field_type.type) {\n return false;\n }\n if (this.isCollection(field)) {\n return false;\n }\n return this.caseFieldService.isReadOnly(field);\n }\n\n // CaseField @Expose() doesn't work with the pipe in here, so leaving the manual check\n private isCollection(field: CaseField): boolean {\n return field.field_type && field.field_type.type === 'Collection';\n }\n}\n","<ng-container ccdConditionalShowForm [formGroup]=\"formGroup\" [caseFields]=\"fields\" [contextFields]=\"caseFields\"\n *ngFor=\"let field of fields\">\n\n <div ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <ng-container [ngSwitch]=\"field | ccdIsReadOnlyAndNotCollection\">\n\n <ccd-field-read *ngSwitchCase=\"true\" [caseField]=\"field\" [caseFields]=\"caseFields\" [withLabel]=\"true\"\n [formGroup]=\"formGroup\" [attr.field_id]=\"field.id\"\n [attr.field_type]=\"field.field_type.type\"></ccd-field-read>\n <ng-container *ngSwitchCase=\"false\">\n\n <ng-container *ngIf=\"!(field | ccdIsCompound); else CompoundRow\">\n <ccd-field-write [caseField]=\"field\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [idPrefix]=\"\"\n [hidden]=\"field.hidden\"\n [attr.field_id]=\"field.id\"\n [attr.field_type]=\"field.field_type.type\">\n </ccd-field-write>\n </ng-container>\n\n <ng-template #CompoundRow>\n <ccd-field-write [caseField]=\"field\"\n [caseFields]=\"caseFields\"\n [formGroup]=\"formGroup\"\n [idPrefix]=\"field.id + '_'\"\n [hidden]=\"field.hidden\"\n [attr.field_id]=\"field.id\"\n [attr.field_type]=\"field.field_type.type\"></ccd-field-write>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { FormValueService } from '../../../services/form/form-value.service';\n\n@Component({\n selector: 'ccd-case-edit-form',\n templateUrl: 'case-edit-form.html'\n})\nexport class CaseEditFormComponent implements OnDestroy, AfterViewInit {\n\n @Input()\n public fields: CaseField[] = [];\n @Input()\n public formGroup: FormGroup;\n @Input()\n public caseFields: CaseField[] = [];\n @Input()\n public pageChangeSubject: Subject<boolean> = new Subject();\n @Output()\n public valuesChanged: EventEmitter<any> = new EventEmitter();\n\n public initial: any;\n public pageChangeSubscription: Subscription;\n public formGroupChangeSubscription: Subscription;\n\n constructor(private readonly formValueService: FormValueService) {}\n\n public ngOnDestroy(): void {\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n if (this.formGroupChangeSubscription) {\n this.formGroupChangeSubscription.unsubscribe();\n }\n }\n\n // We need the below un/subscribe complexity as we do not have proper page component per page with its AfterViewInit hook\n // being called on each page load. This is done for \"Cancel and return\" modal from RDM-2302.\n public ngAfterViewInit(): void {\n this.retrieveInitialFormValues();\n this.pageChangeSubscription = this.pageChangeSubject.subscribe(() => {\n if (this.formGroupChangeSubscription) {\n this.formGroupChangeSubscription.unsubscribe();\n }\n // Timeout is required for the form to be rendered before subscription to form changes and initial form values retrieval.\n setTimeout(() => {\n this.subscribeToFormChanges();\n this.retrieveInitialFormValues();\n });\n });\n this.subscribeToFormChanges();\n }\n\n public subscribeToFormChanges() {\n this.formGroupChangeSubscription = this.formGroup.valueChanges\n .pipe(\n debounceTime(200)\n )\n .subscribe(_ => this.detectChangesAndEmit(_));\n }\n\n public retrieveInitialFormValues() {\n this.initial = JSON.stringify(this.formValueService.sanitise(this.formGroup.value));\n }\n\n public detectChangesAndEmit(changes) {\n const current = JSON.stringify(this.formValueService.sanitise(changes));\n this.initial !== current ? this.valuesChanged.emit(true) : this.valuesChanged.emit(false);\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-save-or-discard-dialog',\n templateUrl: './save-or-discard-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class SaveOrDiscardDialogComponent {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<SaveOrDiscardDialogComponent>) {}\n\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n public save() {\n this.result = 'Save';\n this.matDialogRef.close(this.result);\n }\n public discard() {\n this.result = 'Discard';\n this.matDialogRef.close(this.result);\n }\n}\n","export enum CaseEditPageText {\n RESUMED_FORM_DISCARD = 'RESUMED_FORM_DISCARD',\n NEW_FORM_DISCARD = 'NEW_FORM_DISCARD',\n NEW_FORM_SAVE = 'NEW_FORM_CHANGED_SAVE',\n RESUMED_FORM_SAVE = 'RESUMED_FORM_SAVE',\n TRIGGER_TEXT_START = 'Continue',\n TRIGGER_TEXT_SAVE = 'Save and continue',\n TRIGGER_TEXT_CONTINUE = 'Ignore Warning and Continue'\n}","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Would you like to save changes to this page?</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You will be taken back to your case list.</span>\n </div>\n <div>\n <button type=\"button\" title=\"Save\" class=\"button action-button\" (click)=\"save()\">Save</button>\n <button type=\"button\" title=\"Discard\" class=\"button button-secondary\" (click)=\"discard()\">Discard</button>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n@Injectable()\nexport class FormErrorService {\n\n public mapFieldErrors(errors: { id: string; message: string }[], form: FormGroup, errorKey: string): void {\n\n errors.forEach(error => {\n const formControl = this.getFormControl(form, error.id);\n\n if (formControl) {\n formControl.setErrors({\n [errorKey]: error.message\n });\n }\n });\n }\n\n private getFormControl(form: FormGroup, fieldId: string): FormControl {\n const fields = fieldId.split('.');\n\n let group: FormGroup = form;\n let inArray = false;\n let control: FormControl;\n fields.every((field, index) => {\n if (index === fields.length - 1) {\n control = group.controls[field] as FormControl;\n } else {\n group = group.controls[field] as FormGroup;\n\n if (inArray && group.controls['value']) {\n group = group.controls['value'] as FormGroup;\n }\n\n if (group && group.constructor && FormArray.name === group.constructor.name) {\n inArray = true;\n } else {\n inArray = false;\n }\n }\n return !!group;\n });\n\n return control;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\n\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\nimport { WizardPage } from '../domain/wizard-page.model';\n\n@Injectable()\nexport class PageValidationService {\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public isPageValid(page: WizardPage, editForm: FormGroup): boolean {\n return page.case_fields\n .filter(caseField => !this.caseFieldService.isReadOnly(caseField))\n .filter(caseField => !this.isHidden(caseField, editForm))\n .every(caseField => {\n const theControl = editForm.controls['data'].get(caseField.id);\n return this.checkDocumentField(caseField, theControl) && this.checkOptionalField(caseField, theControl);\n });\n }\n\n public isHidden(caseField: CaseField, editForm: FormGroup, path?: string): boolean {\n const formFields = editForm.getRawValue();\n const condition = ShowCondition.getInstance(caseField.show_condition);\n if (path && path.indexOf('_' + caseField.id + '_') === -1) {\n path = `${path}${caseField.id}`;\n }\n return !condition.match(formFields.data, path);\n }\n\n private checkDocumentField(caseField: CaseField, theControl: AbstractControl): boolean {\n if (caseField.field_type.id !== 'Document') {\n return true;\n }\n return !(this.checkMandatoryField(caseField, theControl));\n }\n\n private checkOptionalField(caseField: CaseField, theControl: AbstractControl): boolean {\n if (!theControl) {\n return this.caseFieldService.isOptional(caseField);\n } else {\n return theControl.valid || theControl.disabled;\n }\n }\n\n private checkMandatoryField(caseField: CaseField, theControl: AbstractControl): boolean {\n return this.caseFieldService.isMandatory(caseField) && theControl === null;\n }\n}\n","export class CallbackErrorsContext {\n public trigger_text: string;\n public ignore_warning: boolean;\n}\n","<div *ngIf=\"hasErrors() || hasWarnings()\" class=\"error-summary\" role=\"group\"\n aria-label=\"Cannot continue because the service reported one or more errors or warnings\" tabindex=\"-1\">\n <ng-container *ngIf=\"hasErrors()\">\n <h3 class=\"heading-h3 error-summary-heading\">\n Errors\n </h3>\n <ul id=\"errors\" class=\"error-summary-list\">\n <li *ngFor=\"let errorMsg of error.callbackErrors\">\n {{errorMsg}}\n </li>\n </ul>\n </ng-container>\n <!-- Add a break for spacing if there are both errors and warnings -->\n <br *ngIf=\"hasErrors() && hasWarnings()\">\n <ng-container *ngIf=\"hasWarnings()\">\n <h3 class=\"heading-h3 error-summary-heading\">\n Warnings\n </h3>\n <ul id=\"warnings\" class=\"error-summary-list\">\n <li *ngFor=\"let warningMsg of error.callbackWarnings\">\n {{warningMsg}}\n </li>\n </ul>\n </ng-container>\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { HttpError } from '../../domain/http';\nimport { CallbackErrorsContext } from './domain/error-context';\n\n@Component({\n selector: 'ccd-callback-errors',\n templateUrl: './callback-errors.html'\n})\nexport class CallbackErrorsComponent implements OnInit, OnDestroy {\n\n public static readonly TRIGGER_TEXT_SUBMIT = 'Submit';\n public static readonly TRIGGER_TEXT_START = 'Start';\n public static readonly TRIGGER_TEXT_GO = 'Go';\n public static readonly TRIGGER_TEXT_IGNORE = 'Ignore Warning and Go';\n\n @Input()\n public triggerTextIgnore: string = CallbackErrorsComponent.TRIGGER_TEXT_IGNORE;\n @Input()\n public triggerTextContinue: string = CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;\n @Input()\n public callbackErrorsSubject: Subject<any> = new Subject();\n\n @Output()\n public callbackErrorsContext: EventEmitter<CallbackErrorsContext> = new EventEmitter();\n\n public error: HttpError;\n\n public ngOnInit(): void {\n this.callbackErrorsSubject.subscribe(errorEvent => {\n this.error = errorEvent;\n if (this.hasWarnings() || this.hasErrors() || this.hasInvalidData()) {\n const callbackErrorsContext: CallbackErrorsContext = this.buildCallbackErrorsContext();\n this.callbackErrorsContext.emit(callbackErrorsContext);\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.callbackErrorsSubject) {\n this.callbackErrorsSubject.unsubscribe();\n }\n }\n\n public hasErrors(): boolean {\n return this.error\n && this.error.callbackErrors\n && this.error.callbackErrors.length;\n }\n\n public hasWarnings(): boolean {\n return this.error\n && this.error.callbackWarnings\n && this.error.callbackWarnings.length;\n }\n\n private buildCallbackErrorsContext(): CallbackErrorsContext {\n const errorContext: CallbackErrorsContext = new CallbackErrorsContext();\n if (this.hasWarnings() && !this.hasErrors() && !this.hasInvalidData()) {\n errorContext.ignore_warning = true;\n errorContext.trigger_text = this.triggerTextIgnore;\n } else {\n errorContext.ignore_warning = false;\n errorContext.trigger_text = this.triggerTextContinue;\n }\n return errorContext;\n }\n\n private hasInvalidData(): boolean {\n return this.error\n && this.error.details\n && this.error.details.field_errors\n && this.error.details.field_errors.length;\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ccd-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 = 'Loading';\n}\n","<ccd-loading-spinner *ngIf=\"showSpinner\"></ccd-loading-spinner>\n<ng-container *ngIf=\"currentPage\">\n <h1 *ngIf=\"!currentPage.label\" class=\"govuk-heading-l\">{{eventTrigger.name}}</h1>\n <ng-container *ngIf=\"currentPage.label\">\n <span class=\"govuk-caption-l\">{{ eventTrigger.name}}</span>\n <h1 class=\"govuk-heading-l\">{{currentPage.label}}</h1>\n </ng-container>\n</ng-container>\n\n<!--Case ID or Title -->\n<div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n<ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: caseFields : editForm.controls['data']\"></ccd-markdown>\n</ng-template>\n<ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n</ng-template>\n\n<!-- Error message summary -->\n<div *ngIf=\"validationErrors.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div *ngFor=\"let validationError of validationErrors\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(validationError.id)\" class=\"validation-error\">{{validationError.message}}</a>\n </li>\n </ul>\n </div>\n</div>\n\n<!-- Generic error heading and error message to be displayed only if there are no specific callback errors or warnings, or no error details -->\n<div *ngIf=\"error && !(error.callbackErrors || error.callbackWarnings || error.details)\" class=\"error-summary\"\n role=\"status\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n\n <h1 class=\"heading-h1 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n Something went wrong\n </h1>\n <div class=\"govuk-error-summary__body\" id=\"edit-case-event_error-summary-body\">\n <p>We're working to fix the problem. Try again shortly.</p>\n <p><a href=\"get-help\" target=\"_blank\">Contact us</a> if you're still having problems.</p>\n </div>\n</div>\n<!-- Event error heading and error message to be displayed if there are specific error details -->\n<div *ngIf=\"error && error.details\" class=\"error-summary\" role=\"status\"\n aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h3 class=\"heading-h3 error-summary-heading\" id=\"edit-case-event_error-summary-heading-3\">\n The event could not be created\n </h3>\n <p>{{error.message}}</p>\n <ul *ngIf=\"error.details?.field_errors\" class=\"error-summary-list\">\n <li *ngFor=\"let fieldError of error.details.field_errors\" class=\"ccd-error-summary-li\">{{fieldError.message}}</li>\n </ul>\n</div>\n<ccd-callback-errors\n [triggerTextContinue]=\"triggerTextStart\"\n [triggerTextIgnore]=\"triggerTextIgnoreWarnings\"\n [callbackErrorsSubject]=\"callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\">\n</ccd-callback-errors>\n<div class=\"width-50\">\n <form *ngIf=\"currentPage\" class=\"form\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <fieldset id=\"fieldset-case-data\">\n <legend style=\"display: none;\"></legend>\n <!-- single column -->\n <ccd-case-edit-form id='caseEditForm' *ngIf=\"!currentPage.isMultiColumn()\" [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"\n [pageChangeSubject]=\"pageChangeSubject\"\n (valuesChanged)=\"applyValuesChanged($event)\"></ccd-case-edit-form>\n <!-- two columns -->\n <div *ngIf=\"currentPage.isMultiColumn()\" class=\"grid-row\">\n <div class=\"column-two-thirds rightBorderSeparator\">\n <ccd-case-edit-form id='caseEditForm1' [fields]=\"currentPage.getCol1Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n <div class=\"column-one-third\">\n <ccd-case-edit-form id='caseEditForm2' [fields]=\"currentPage.getCol2Fields()\"\n [formGroup]=\"editForm.controls['data']\" [caseFields]=\"caseFields\"></ccd-case-edit-form>\n </div>\n </div>\n </fieldset>\n\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!(hasPreviousPage$ | async)\" (click)=\"toPreviousPage()\">\n Previous\n </button>\n <button class=\"button\" type=\"submit\" [disabled]=\"submitting()\">{{triggerText}}</button>\n </div>\n\n <p class=\"cancel\"><a (click)=\"cancel()\" href=\"javascript:void(0)\">{{getCancelText()}}</a></p>\n\n </form>\n</div>\n","<div class=\"spinner-container\">\n <div class=\"spinner-inner-container\">\n <p>{{loadingText}}</p>\n <div class=\"spinner\" style=\"margin: auto;\"></div>\n </div>\n</div>","import { AfterViewChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { ActivatedRoute } from '@angular/router';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../../domain/definition';\nimport { DRAFT_PREFIX } from '../../../domain/draft.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormErrorService } from '../../../services/form/form-error.service';\nimport { FormValueService } from '../../../services/form/form-value.service';\nimport { SaveOrDiscardDialogComponent } from '../../dialogs/save-or-discard-dialog';\nimport { CallbackErrorsContext } from '../../error/domain/error-context';\nimport { initDialog } from '../../helpers/init-dialog-helper';\nimport { CaseEditComponent } from '../case-edit/case-edit.component';\nimport { WizardPage } from '../domain/wizard-page.model';\nimport { Wizard } from '../domain/wizard.model';\nimport { PageValidationService } from '../services/page-validation.service';\nimport { CaseEditPageText } from './case-edit-page-text.enum';\n\n@Component({\n selector: 'ccd-case-edit-page',\n templateUrl: 'case-edit-page.html',\n styleUrls: ['./case-edit-page.scss']\n})\nexport class CaseEditPageComponent implements OnInit, AfterViewChecked {\n\n constructor(\n private readonly caseEdit: CaseEditComponent,\n private readonly route: ActivatedRoute,\n private readonly formValueService: FormValueService,\n private readonly formErrorService: FormErrorService,\n private readonly cdRef: ChangeDetectorRef,\n private readonly pageValidationService: PageValidationService,\n private readonly dialog: MatDialog,\n private readonly caseFieldService: CaseFieldService\n ) { }\n\n public eventTrigger: CaseEventTrigger;\n public editForm: FormGroup;\n public wizard: Wizard;\n public currentPage: WizardPage;\n public dialogConfig: MatDialogConfig;\n public error: HttpError;\n public callbackErrorsSubject: Subject<any> = new Subject();\n public ignoreWarning = false;\n public triggerTextStart = CaseEditPageText.TRIGGER_TEXT_START;\n public triggerTextIgnoreWarnings = CaseEditPageText.TRIGGER_TEXT_CONTINUE;\n public triggerText: string;\n public isSubmitting = false;\n public formValuesChanged = false;\n public pageChangeSubject: Subject<boolean> = new Subject();\n public caseFields: CaseField[];\n public validationErrors: { id: string, message: string }[] = [];\n public showSpinner: boolean;\n\n public hasPreviousPage$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n private static scrollToTop(): void {\n window.scrollTo(0, 0);\n }\n\n private static setFocusToTop() {\n const topContainer = document.getElementById('top');\n if (topContainer) {\n topContainer.focus();\n }\n }\n\n public ngOnInit(): void {\n this.dialogConfig = initDialog();\n this.eventTrigger = this.caseEdit.eventTrigger;\n this.editForm = this.caseEdit.form;\n this.wizard = this.caseEdit.wizard;\n this.caseFields = this.getCaseFields();\n this.triggerText = this.getTriggerText();\n\n this.route.params\n .subscribe(params => {\n const pageId = params['page'];\n if (!this.currentPage || pageId !== this.currentPage.id) {\n const page = this.caseEdit.getPage(pageId);\n if (page) {\n this.currentPage = page;\n } else {\n if (this.currentPage) {\n return this.next();\n } else {\n return this.first();\n }\n }\n this.hasPreviousPage$.next(this.caseEdit.hasPrevious(this.currentPage.id));\n }\n });\n CaseEditPageComponent.setFocusToTop();\n }\n\n public ngAfterViewChecked(): void {\n this.cdRef.detectChanges();\n }\n\n public applyValuesChanged(valuesChanged: boolean): void {\n this.formValuesChanged = valuesChanged;\n }\n\n public first(): Promise<boolean> {\n return this.caseEdit.first();\n }\n\n public currentPageIsNotValid(): boolean {\n return !this.pageValidationService.isPageValid(this.currentPage, this.editForm);\n }\n\n /**\n * caseEventData.event_data contains all the values from the previous pages so we set caseEventData.data = caseEventData.event_data\n * This builds the form with data from the previous pages\n * EUI-3732 - Breathing space data not persisted on Previous button click with ExpUI Demo\n */\n public toPreviousPage(): void {\n this.validationErrors = [];\n const caseEventData: CaseEventData = this.buildCaseEventData();\n caseEventData.data = caseEventData.event_data;\n this.updateFormData(caseEventData);\n this.previous();\n CaseEditPageComponent.setFocusToTop();\n }\n\n // Adding validation message to show it as Error Summary\n public generateErrorMessage(fields: CaseField[] = [], container?: AbstractControl, path?: string): void {\n const group: AbstractControl = container || this.editForm.controls['data'];\n fields.filter(casefield => !this.caseFieldService.isReadOnly(casefield))\n .filter(casefield => !this.pageValidationService.isHidden(casefield, this.editForm, path))\n .forEach(casefield => {\n const fieldElement = group.get(casefield.id);\n if (fieldElement) {\n const label = casefield.label || 'Field';\n let id = casefield.id;\n if (fieldElement['component'] && fieldElement['component'].parent) {\n if (fieldElement['component'].idPrefix.indexOf('_' + id + '_') === -1) {\n id = `${fieldElement['component'].idPrefix}${id}`;\n } else {\n id = `${fieldElement['component'].idPrefix}`;\n }\n }\n if (fieldElement.hasError('required')) {\n this.validationErrors.push({ id, message: `${label} is required` });\n fieldElement.markAsDirty();\n } else if (fieldElement.hasError('pattern')) {\n this.validationErrors.push({ id, message: `${label} is not valid` });\n fieldElement.markAsDirty();\n } else if (fieldElement.hasError('minlength')) {\n this.validationErrors.push({ id, message: `${label} is below the minimum length` });\n fieldElement.markAsDirty();\n } else if (fieldElement.hasError('maxlength')) {\n this.validationErrors.push({ id, message: `${label} exceeds the maximum length` });\n fieldElement.markAsDirty();\n } else if (fieldElement.invalid) {\n if (casefield.isComplex()) {\n this.generateErrorMessage(casefield.field_type.complex_fields, fieldElement, id);\n } else if (casefield.isCollection() && casefield.field_type.collection_field_type.type === 'Complex') {\n const fieldArray = fieldElement as FormArray;\n if (fieldArray['component'] && fieldArray['component']['collItems'] && fieldArray['component']['collItems'].length > 0) {\n fieldArray['component']['collItems'].forEach(element => {\n id = `${element.prefix}`;\n fieldArray.controls.forEach((control: AbstractControl, index) => {\n if (id.charAt(id.indexOf(index.toString())) === index.toString()) {\n this.generateErrorMessage(casefield.field_type.collection_field_type.complex_fields, control.get('value'), id);\n }\n });\n });\n }\n } else {\n this.validationErrors.push({ id, message: `Select or fill the required ${casefield.label} field` });\n fieldElement.markAsDirty();\n }\n }\n }\n });\n CaseEditPageComponent.scrollToTop();\n }\n\n public navigateToErrorElement(elementId: string): void {\n if (elementId) {\n const htmlElement = document.getElementById(elementId);\n if (htmlElement) {\n htmlElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n htmlElement.focus();\n }\n }\n }\n\n public submit(): void {\n this.validationErrors = [];\n if (this.currentPageIsNotValid()) {\n this.generateErrorMessage(this.currentPage.case_fields);\n }\n if (!this.isSubmitting && !this.currentPageIsNotValid()) {\n this.isSubmitting = true;\n this.error = null;\n const caseEventData: CaseEventData = this.buildCaseEventData();\n this.showSpinner = true;\n this.caseEdit.validate(caseEventData, this.currentPage.id)\n .subscribe((jsonData) => {\n if (jsonData) {\n this.updateFormData(jsonData as CaseEventData);\n }\n this.saveDraft();\n this.showSpinner = false;\n this.next();\n }, error => {\n this.showSpinner = false;\n this.handleError(error);\n });\n CaseEditPageComponent.scrollToTop();\n }\n CaseEditPageComponent.setFocusToTop();\n }\n\n public updateFormData(jsonData: CaseEventData): void {\n for (const caseFieldId of Object.keys(jsonData.data)) {\n if (this.pageWithFieldExists(caseFieldId)) {\n this.updateEventTriggerCaseFields(caseFieldId, jsonData, this.caseEdit.eventTrigger);\n this.updateFormControlsValue(this.editForm, caseFieldId, jsonData.data[caseFieldId]);\n }\n }\n }\n\n // we do the check, becasue the data comes from the external source\n public pageWithFieldExists(caseFieldId: string) {\n return this.wizard.findWizardPage(caseFieldId);\n }\n\n public updateEventTriggerCaseFields(caseFieldId: string, jsonData: CaseEventData, eventTrigger: CaseEventTrigger) {\n if (eventTrigger.case_fields) {\n eventTrigger.case_fields?.filter(element => element.id === caseFieldId)\n .forEach(element => element.value = jsonData.data[caseFieldId]);\n }\n }\n\n public updateFormControlsValue(formGroup: FormGroup, caseFieldId: string, value: any): void {\n const theControl = formGroup.controls['data'].get(caseFieldId);\n if (theControl && theControl['status'] !== 'DISABLED') {\n if (Array.isArray(theControl.value) && Array.isArray(value)\n && theControl.value.length > value.length && theControl['caseField']\n && theControl['caseField']['display_context'] && theControl['caseField']['display_context'] === 'OPTIONAL'\n && theControl['caseField']['field_type'] && theControl['caseField']['field_type']['type'] === 'Collection') {\n // do nothing\n } else {\n theControl.patchValue(value);\n }\n }\n }\n\n public callbackErrorsNotify(errorContext: CallbackErrorsContext) {\n this.ignoreWarning = errorContext.ignore_warning;\n this.triggerText = errorContext.trigger_text;\n }\n\n public next(): Promise<boolean> {\n this.resetErrors();\n this.isSubmitting = false;\n this.formValuesChanged = false;\n this.pageChangeSubject.next(true);\n return this.caseEdit.next(this.currentPage.id);\n }\n\n public previous(): Promise<boolean> {\n this.resetErrors();\n this.saveDraft();\n this.formValuesChanged = false;\n this.pageChangeSubject.next(true);\n return this.caseEdit.previous(this.currentPage.id);\n }\n\n public hasPrevious(): boolean {\n return this.caseEdit.hasPrevious(this.currentPage.id);\n }\n\n public cancel(): void {\n if (this.eventTrigger?.can_save_draft) {\n if (this.formValuesChanged) {\n const dialogRef = this.dialog.open(SaveOrDiscardDialogComponent, this.dialogConfig);\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'Discard') {\n this.discard();\n } else if (result === 'Save') {\n const draftCaseEventData: CaseEventData = this.formValueService.sanitise(this.editForm.value) as CaseEventData;\n if (this.route.snapshot.queryParamMap.get(CaseEditComponent.ORIGIN_QUERY_PARAM) === 'viewDraft') {\n this.caseEdit.cancelled.emit({ status: CaseEditPageText.RESUMED_FORM_SAVE, data: draftCaseEventData });\n } else {\n this.caseEdit.cancelled.emit({ status: CaseEditPageText.NEW_FORM_SAVE, data: draftCaseEventData });\n }\n }\n });\n } else {\n this.discard();\n }\n } else {\n this.caseEdit.cancelled.emit();\n }\n }\n\n public submitting(): boolean {\n return this.isSubmitting;\n }\n\n public getCaseId(): string {\n return (this.caseEdit.caseDetails ? this.caseEdit.caseDetails.case_id : '');\n }\n\n public getCaseTitle(): string {\n return (this.caseEdit.caseDetails && this.caseEdit.caseDetails.state &&\n this.caseEdit.caseDetails.state.title_display ? this.caseEdit.caseDetails.state.title_display : '');\n }\n\n public getCancelText(): string {\n return this.eventTrigger?.can_save_draft ? 'Return to case list' : 'Cancel';\n }\n\n private getTriggerText(): string {\n return this.eventTrigger?.can_save_draft\n ? CaseEditPageText.TRIGGER_TEXT_SAVE\n : CaseEditPageText.TRIGGER_TEXT_START;\n }\n\n private discard(): void {\n if (this.route.snapshot.queryParamMap.get(CaseEditComponent.ORIGIN_QUERY_PARAM) === 'viewDraft') {\n this.caseEdit.cancelled.emit({ status: CaseEditPageText.RESUMED_FORM_DISCARD });\n } else {\n this.caseEdit.cancelled.emit({ status: CaseEditPageText.NEW_FORM_DISCARD });\n }\n }\n\n private handleError(error) {\n this.isSubmitting = false;\n this.error = error;\n this.callbackErrorsSubject.next(this.error);\n if (this.error.details) {\n this.formErrorService\n .mapFieldErrors(this.error.details.field_errors, this.editForm.controls['data'] as FormGroup, 'validation');\n }\n }\n\n private resetErrors(): void {\n this.error = null;\n this.ignoreWarning = false;\n this.triggerText = this.getTriggerText();\n this.callbackErrorsSubject.next(null);\n }\n\n private saveDraft() {\n if (this.eventTrigger?.can_save_draft) {\n const draftCaseEventData: CaseEventData = this.formValueService.sanitise(this.editForm.value) as CaseEventData;\n draftCaseEventData.event_token = this.eventTrigger.event_token;\n draftCaseEventData.ignore_warning = this.ignoreWarning;\n this.caseEdit.saveDraft(draftCaseEventData).subscribe(\n (draft) => this.eventTrigger.case_id = DRAFT_PREFIX + draft.id, error => this.handleError(error)\n );\n }\n }\n\n private getCaseFields(): CaseField[] {\n if (this.caseEdit.caseDetails) {\n return FieldsUtils.getCaseFields(this.caseEdit.caseDetails);\n }\n\n return this.eventTrigger.case_fields;\n }\n\n private getCaseFieldsFromCurrentAndPreviousPages(): CaseField[] {\n const result: CaseField[] = [];\n this.wizard.pages.forEach(page => {\n if (page.order <= this.currentPage.order) {\n page.case_fields.forEach(field => result.push(field));\n }\n });\n return result;\n }\n\n private buildCaseEventData(): CaseEventData {\n const formValue: object = this.editForm.value;\n\n // Get the CaseEventData for the current page.\n const pageFields: CaseField[] = this.currentPage.case_fields;\n const pageEventData: CaseEventData = this.getFilteredCaseEventData(pageFields, formValue, true);\n\n // Get the CaseEventData for the entire form (all pages).\n const allCaseFields = this.getCaseFieldsFromCurrentAndPreviousPages();\n const formEventData: CaseEventData = this.getFilteredCaseEventData(allCaseFields, formValue, false, true);\n\n // Now here's the key thing - the pageEventData has a property called `event_data` and\n // we need THAT to be the value of the entire form: `formEventData.data`.\n pageEventData.event_data = formEventData.data;\n\n // Finalise the CaseEventData object.\n pageEventData.event_token = this.eventTrigger.event_token;\n pageEventData.ignore_warning = this.ignoreWarning;\n\n // Finally, try to set up the case_reference.\n if (this.caseEdit.caseDetails) {\n pageEventData.case_reference = this.caseEdit.caseDetails.case_id;\n }\n\n // Return the now hopefully sane CaseEventData.\n return pageEventData;\n }\n\n /**\n * Abstracted this method from buildCaseEventData to remove duplication.\n * @param caseFields The fields to filter the data by.\n * @param formValue The original value of the form.\n * @param clearEmpty Whether or not to clear out empty values.\n * @param clearNonCase Whether or not to clear out fields that are not part of the case.\n * @returns CaseEventData for the specified parameters.\n */\n private getFilteredCaseEventData(caseFields: CaseField[], formValue: object, clearEmpty = false, clearNonCase = false): CaseEventData {\n // Get the data for the fields specified.\n const formFields = this.formValueService.filterCurrentPageFields(caseFields, formValue);\n\n // Sort out the dynamic lists.\n this.formValueService.sanitiseDynamicLists(caseFields, formFields);\n\n // Get hold of the CaseEventData.\n const caseEventData: CaseEventData = this.formValueService.sanitise(formFields) as CaseEventData;\n\n // Tidy it up before we return it.\n this.formValueService.removeUnnecessaryFields(caseEventData.data, caseFields, clearEmpty, clearNonCase);\n\n return caseEventData;\n }\n}\n","export class Confirmation {\n constructor(private readonly caseId: string, private readonly status: string, private readonly header: string, private readonly body: string) {\n }\n\n public getCaseId(): string {\n return this.caseId;\n }\n\n public getStatus(): string {\n return this.status;\n }\n\n public getHeader(): string {\n return this.header;\n }\n\n public getBody(): string {\n return this.body;\n }\n}\n","<div *ngIf=\"!eventCompletionChecksRequired\">\n <!-- Event trigger name -->\n <h1 class=\"govuk-heading-l\">{{ eventTrigger.name}}</h1>\n\n <!--Case ID or Title -->\n <div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n <ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: contextFields : editForm.controls['data']\"></ccd-markdown>\n </ng-template>\n <ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n </ng-template>\n\n <!-- Generic error heading and error message to be displayed only if there are no specific callback errors or warnings, or no error details -->\n <div *ngIf=\"error && (!(error.callbackErrors || error.callbackWarnings || error.details) && !error.message)\" class=\"error-summary\" role=\"group\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h1 class=\"heading-h1 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n Something went wrong\n </h1>\n <div class=\"govuk-error-summary__body\" id=\"edit-case-event_error-summary-body\">\n <p>We're working to fix the problem. Try again shortly.</p>\n <p><a href=\"get-help\" target=\"_blank\">Contact us</a> if you're still having problems.</p>\n </div>\n </div>\n <!-- Event error heading and error message to be displayed if there are specific error details -->\n <div *ngIf=\"error && (error.details || error.message)\" class=\"error-summary\" role=\"group\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h3 class=\"heading-h3 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n The event could not be created\n </h3>\n <p>{{error.message}}</p>\n <ul *ngIf=\"error.details?.field_errors\" class=\"error-summary-list\">\n <li *ngFor=\"let fieldError of error.details.field_errors\" class=\"ccd-error-summary-li\">{{fieldError.message}}</li>\n </ul>\n </div>\n <ccd-callback-errors [callbackErrorsSubject]=\"callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\"></ccd-callback-errors>\n\n <form class=\"check-your-answers\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <ng-container *ngIf=\"checkYourAnswerFieldsToDisplayExists()\">\n\n <h2 class=\"heading-h2\">Check your answers</h2>\n <span class=\"text-16\">Check the information below carefully.</span>\n\n <table class=\"form-table\" aria-describedby=\"check your answers table\">\n <tbody>\n <ng-container *ngFor=\"let page of this.wizard.pages\">\n <ng-container *ngIf=\"isShown(page)\">\n <ng-container *ngFor=\"let field of page\n | ccdPageFields: editForm\n | ccdReadFieldsFilter: false :undefined :true : editForm.controls['data']\n | ccdCYAPageLabelFilter\">\n <ng-container *ngIf=\"canShowFieldInCYA(field)\">\n <tr ccdLabelSubstitutor [caseField]=\"field\" [hidden]=\"field.hidden\"\n [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th *ngIf=\"!isLabel(field)\" class=\"valign-top case-field-label\"><span class=\"text-16\">{{field.label}}</span></th>\n <td class=\"form-cell case-field-content\" [attr.colspan]=\"isLabel(field) ? '2' : '1'\">\n <ccd-field-read\n [formGroup]=\"editForm.controls['data']\" [topLevelFormGroup]=\"editForm.controls['data']\"\n [caseField]=\"summaryCaseField(field)\" [context]=\"paletteContext\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n <td class=\"valign-top check-your-answers__change case-field-change\">\n <a *ngIf=\"isChangeAllowed(field)\" (click)=\"navigateToPage(page.id)\"\n href=\"javascript:void(0)\"><span class=\"text-16\" attr.aria-label=\"Change {{ field.label }}\">Change</span></a>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"readOnlySummaryFieldsToDisplayExists()\">\n\n <table class=\"summary-fields\" aria-describedby=\"summary fields table\">\n <tbody>\n <ng-container *ngFor=\"let field of this.showSummaryFields\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th id=\"summary-field-label\">{{field.label}}</th>\n <td class=\"form-cell\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\"></ccd-field-read>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <td colspan=\"2\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"showEventNotes()\">\n <fieldset id=\"fieldset-event\" formGroupName=\"event\" *ngIf=\"profile && !isSolicitor()\">\n <legend style=\"display: none;\"></legend>\n <div class=\"form-group\">\n <label for=\"field-trigger-summary\" class=\"form-label\">\n Event summary (optional)\n <span class=\"form-hint\">A few words describing the purpose of the event.</span>\n </label>\n <input type=\"text\" id=\"field-trigger-summary\" class=\"form-control bottom-30 width-50\" formControlName=\"summary\" maxlength=\"1024\">\n </div>\n <div class=\"form-group\">\n <label for=\"field-trigger-description\" class=\"form-label\">Event description (optional)</label>\n <textarea id=\"field-trigger-description\" class=\"form-control bottom-30 width-50\" formControlName=\"description\"\n maxlength=\"65536\"></textarea>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!hasPrevious() || isSubmitting\" (click)=\"previous()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isDisabled\" class=\"button\">{{triggerText}}</button>\n </div>\n <p class=\"cancel\"><a (click)=\"cancel()\" href=\"javascript:void(0)\" [class.disabled]=\"isSubmitting\">{{getCancelText()}}</a></p>\n </form>\n</div>\n<ccd-case-event-completion *ngIf=\"eventCompletionChecksRequired\"\n [eventCompletionParams]=\"eventCompletionParams\"\n (eventCanBeCompleted)=\"onEventCanBeCompleted($event)\">\n</ccd-case-event-completion>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subject, Subscription } from 'rxjs';\nimport { PaletteContext } from '../../../components/palette/base-field/palette-context.enum';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { Profile } from '../../../domain/profile/profile.model';\nimport { Task } from '../../../domain/work-allocation/Task';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { FormErrorService } from '../../../services/form/form-error.service';\nimport { FormValueService } from '../../../services/form/form-value.service';\nimport { OrderService } from '../../../services/order/order.service';\nimport { ProfileNotifier } from '../../../services/profile/profile.notifier';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { CallbackErrorsComponent, CallbackErrorsContext } from '../../error';\nimport { CaseEditPageText } from '../case-edit-page/case-edit-page-text.enum';\nimport { CaseEditComponent } from '../case-edit/case-edit.component';\nimport { Confirmation } from '../domain/confirmation.model';\nimport { EventCompletionParams } from '../domain/event-completion-params.model';\nimport { WizardPage } from '../domain/wizard-page.model';\nimport { Wizard } from '../domain/wizard.model';\nimport { CaseNotifier } from '../services/case.notifier';\n\n// @dynamic\n@Component({\n selector: 'ccd-case-edit-submit',\n templateUrl: 'case-edit-submit.html',\n styleUrls: ['../case-edit.scss']\n})\nexport class CaseEditSubmitComponent implements OnInit, OnDestroy {\n\n constructor(\n private readonly caseEdit: CaseEditComponent,\n private readonly formValueService: FormValueService,\n private readonly formErrorService: FormErrorService,\n private readonly fieldsUtils: FieldsUtils,\n private readonly caseFieldService: CaseFieldService,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly orderService: OrderService,\n private readonly profileNotifier: ProfileNotifier,\n private readonly sessionStorageService: SessionStorageService,\n private readonly caseNotifier: CaseNotifier,\n ) {}\n\n public get isDisabled(): boolean {\n // EUI-3452.\n // We don't need to check the validity of the editForm as it is readonly.\n // This was causing issues with hidden fields that aren't wanted but have\n // not been disabled.\n return this.isSubmitting || this.hasErrors;\n }\n\n private get hasErrors(): boolean {\n return this.error\n && this.error.callbackErrors\n && this.error.callbackErrors.length;\n }\n\n public eventTrigger: CaseEventTrigger;\n public editForm: FormGroup;\n public error: HttpError;\n public callbackErrorsSubject: Subject<any> = new Subject();\n public ignoreWarning = false;\n public triggerText: string;\n public wizard: Wizard;\n public profile: Profile;\n public showSummaryFields: CaseField[];\n public paletteContext: PaletteContext = PaletteContext.CHECK_YOUR_ANSWER;\n public isSubmitting: boolean;\n public profileSubscription: Subscription;\n public contextFields: CaseField[];\n public task: Task;\n public eventCompletionParams: EventCompletionParams;\n public eventCompletionChecksRequired = false;\n public static readonly SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION = (a: CaseField, b: CaseField): number => {\n const aCaseField = a.show_summary_content_option === 0 || a.show_summary_content_option;\n const bCaseField = b.show_summary_content_option === 0 || b.show_summary_content_option;\n\n if (!aCaseField) {\n return !bCaseField ? 0 : 1;\n }\n\n if (!bCaseField) {\n return -1;\n }\n return a.show_summary_content_option - b.show_summary_content_option;\n }\n\n public ngOnInit(): void {\n this.profileSubscription = this.profileNotifier.profile.subscribe(_ => this.profile = _);\n this.eventTrigger = this.caseEdit.eventTrigger;\n this.triggerText = this.eventTrigger.end_button_label || CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;\n this.editForm = this.caseEdit.form;\n this.wizard = this.caseEdit.wizard;\n this.showSummaryFields = this.sortFieldsByShowSummaryContent(this.eventTrigger.case_fields);\n this.isSubmitting = false;\n this.contextFields = this.getCaseFields();\n }\n\n public ngOnDestroy(): void {\n if (this.profileSubscription) {\n this.profileSubscription.unsubscribe();\n }\n }\n\n /**\n * Handler function for event completion\n */\n public submit(): void {\n this.isSubmitting = true;\n\n // We have to run the event completion checks if task in session storage\n // and if the task is in session storage, then is it associated to the case\n let taskInSessionStorage: Task;\n const taskStr = this.sessionStorageService.getItem('taskToComplete');\n if (taskStr) {\n taskInSessionStorage = JSON.parse(taskStr);\n }\n\n if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId()) {\n // Show event completion component to perform event completion checks\n this.eventCompletionParams = {\n caseId: this.getCaseId(),\n eventId: this.getEventId(),\n task: taskInSessionStorage\n };\n this.eventCompletionChecksRequired = true;\n } else {\n // Task not in session storage, proceed to submit\n const caseEventData = this.generateCaseEventData();\n this.caseSubmit(caseEventData);\n }\n }\n\n /**\n * Handler function for event emitted from case event completion component\n */\n public onEventCanBeCompleted(eventCanBeCompleted: boolean): void {\n if (eventCanBeCompleted) {\n // Submit\n const caseEventData = this.generateCaseEventData();\n this.caseSubmit(caseEventData);\n } else {\n // Navigate to tasks tab on case details page\n this.router.navigate([`/cases/case-details/${this.getCaseId()}/tasks`], { relativeTo: this.route });\n }\n }\n\n public navigateToPage(pageId: string): void {\n this.caseEdit.navigateToPage(pageId);\n }\n\n public callbackErrorsNotify(errorContext: CallbackErrorsContext): void {\n this.ignoreWarning = errorContext.ignore_warning;\n this.triggerText = errorContext.trigger_text;\n }\n\n public summaryCaseField(field: CaseField): CaseField {\n if (!this.editForm.get('data').get(field.id)) {\n // If not in form, return field itself\n return field;\n }\n\n const cloneField: CaseField = this.fieldsUtils.cloneCaseField(field);\n cloneField.value = this.editForm.get('data').get(field.id).value;\n\n return cloneField;\n }\n\n public cancel(): void {\n if (this.eventTrigger.can_save_draft) {\n if (this.route.snapshot.queryParamMap.get(CaseEditComponent.ORIGIN_QUERY_PARAM) === 'viewDraft') {\n this.caseEdit.cancelled.emit({status: CaseEditPageText.RESUMED_FORM_DISCARD});\n } else {\n this.caseEdit.cancelled.emit({status: CaseEditPageText.NEW_FORM_DISCARD});\n }\n } else {\n this.caseEdit.cancelled.emit();\n }\n }\n\n public isLabel(field: CaseField): boolean {\n return this.caseFieldService.isLabel(field);\n }\n\n public isChangeAllowed(field: CaseField): boolean {\n return !this.caseFieldService.isReadOnly(field);\n }\n\n public checkYourAnswerFieldsToDisplayExists(): boolean {\n if (!this.eventTrigger.show_summary) {\n return false;\n }\n\n for (const page of this.wizard.pages) {\n if (this.isShown(page)) {\n for (const field of page.case_fields) {\n if (this.canShowFieldInCYA(field)) {\n // at least one field needs showing\n return true;\n }\n }\n }\n }\n\n // found no fields to show in CYA summary page\n return false;\n }\n\n public readOnlySummaryFieldsToDisplayExists(): boolean {\n return this.eventTrigger.case_fields.some(field => field.show_summary_content_option >= 0 );\n }\n\n public showEventNotes(): boolean {\n return this.eventTrigger.show_event_notes !== false;\n }\n\n public previous(): void {\n if (this.hasPrevious()) {\n this.navigateToPage(this.getLastPageShown().id);\n }\n }\n\n public hasPrevious(): boolean {\n return !!this.getLastPageShown();\n }\n\n public isShown(page: WizardPage): boolean {\n const fields = this.fieldsUtils\n .mergeCaseFieldsAndFormFields(this.eventTrigger.case_fields, this.editForm.controls['data'].value);\n return page.parsedShowCondition.match(fields);\n }\n\n public canShowFieldInCYA(field: CaseField): boolean {\n return field.show_summary_change_option;\n }\n\n public isSolicitor(): boolean {\n return this.profile.isSolicitor();\n }\n\n public getCaseId(): string {\n return (this.caseEdit.caseDetails ? this.caseEdit.caseDetails.case_id : '');\n }\n\n public getEventId(): string {\n return this.editForm.value.event.id;\n }\n\n public getCaseTitle(): string {\n return (this.caseEdit.caseDetails && this.caseEdit.caseDetails.state &&\n this.caseEdit.caseDetails.state.title_display ? this.caseEdit.caseDetails.state.title_display : '');\n }\n\n public getCancelText(): string {\n if (this.eventTrigger.can_save_draft) {\n return 'Return to case list';\n } else {\n return 'Cancel';\n }\n }\n\n /**\n * Function to generate and return case event data for completing the event\n */\n private generateCaseEventData(): CaseEventData {\n const caseEventData: CaseEventData = {\n data: this.replaceEmptyComplexFieldValues(\n this.formValueService.sanitise(\n this.replaceHiddenFormValuesWithOriginalCaseData(\n this.editForm.get('data') as FormGroup, this.eventTrigger.case_fields))),\n event: this.editForm.value.event\n } as CaseEventData;\n this.formValueService.clearNonCaseFields(caseEventData.data, this.eventTrigger.case_fields);\n this.formValueService.removeNullLabels(caseEventData.data, this.eventTrigger.case_fields);\n this.formValueService.removeEmptyDocuments(caseEventData.data, this.eventTrigger.case_fields);\n // Remove collection fields that have \"min\" validation of greater than zero set on the FieldType but are empty;\n // these will fail validation\n this.formValueService.removeEmptyCollectionsWithMinValidation(caseEventData.data, this.eventTrigger.case_fields);\n caseEventData.event_token = this.eventTrigger.event_token;\n caseEventData.ignore_warning = this.ignoreWarning;\n if (this.caseEdit.confirmation) {\n caseEventData.data = {};\n }\n\n return caseEventData;\n }\n\n /**\n * Function to complete the event\n */\n private caseSubmit(caseEventData: CaseEventData): void {\n this.caseEdit.submit(caseEventData)\n .subscribe(\n response => {\n this.caseNotifier.cachedCaseView = null;\n const confirmation: Confirmation = this.buildConfirmation(response);\n if (confirmation && (confirmation.getHeader() || confirmation.getBody())) {\n this.caseEdit.confirm(confirmation);\n } else {\n this.caseEdit.submitted.emit({caseId: response['id'], status: this.getStatus(response)});\n }\n },\n error => {\n this.error = error;\n this.callbackErrorsSubject.next(this.error);\n if (this.error.details) {\n this.formErrorService\n .mapFieldErrors(this.error.details.field_errors, this.editForm.controls['data'] as FormGroup, 'validation');\n }\n this.isSubmitting = false;\n }\n );\n }\n\n /**\n * Traverse *all* values of a FormGroup, including those for disabled fields (i.e. hidden ones), replacing the\n * value of any that are hidden AND have `retain_hidden_value` set to `true` in the corresponding `CaseField`, with\n * the *original* value held in the `CaseField` object.\n *\n * This is as per design in EUI-3622, where any user-driven updates to hidden fields with `retain_hidden_value` =\n * `true` are ignored (thus retaining the value displayed originally).\n *\n * * For Complex field types, the replacement above is performed recursively for all hidden sub-fields with\n * `retain_hidden_value` = `true`.\n *\n * * For Collection field types, including collections of Complex and Document field types, the replacement is\n * performed for all fields in the collection.\n * returns An object with the *raw* form value data (as key-value pairs), with any value replacements as necessary\n */\n private replaceHiddenFormValuesWithOriginalCaseData(formGroup: FormGroup, caseFields: CaseField[], parentField?: CaseField): object {\n // Get the raw form value data, which includes the values of any disabled controls, as key-value pairs\n const rawFormValueData = formGroup.getRawValue();\n\n // Place all case fields in a lookup object, so they can be retrieved by id\n const caseFieldsLookup = {};\n for (let i = 0, len = caseFields.length; i < len; i++) {\n caseFieldsLookup[caseFields[i].id] = caseFields[i];\n }\n\n /**\n * Replace any form value with the original, where its CaseField is hidden AND has the retain_hidden_value flag set\n * to true.\n *\n * If the CaseField's `hidden` attribute is null or undefined, then check this attribute in the parent CaseField (if\n * one exists). This is occurring (and is possibly a bug) when a CaseField is a sub-field of a Complex type, or an\n * item in a Collection type.\n *\n * If the field is a Complex type with retain_hidden_value = true, perform a recursive replacement for all (hidden)\n * sub-fields with retain_hidden_value = true, using their original CaseField values (from the `formatted_value`\n * attribute).\n *\n * If the field is a Collection type with retain_hidden_value = true, the entire collection is replaced with the\n * original from `formatted_value`. This applies to *all* types of Collections.\n */\n Object.keys(rawFormValueData).forEach((key) => {\n const caseField: CaseField = caseFieldsLookup[key];\n // If caseField.hidden is NOT truthy and also NOT equal to false, then it must be null/undefined (remember that\n // both null and undefined are equal to *neither false nor true*)\n if (caseField && caseField.retain_hidden_value &&\n (caseField.hidden || (caseField.hidden !== false && parentField && parentField.hidden))) {\n if (caseField.field_type.type === 'Complex') {\n if (caseField.value !== null && caseField.value !== undefined) {\n // Call this function recursively to replace the Complex field's sub-fields as necessary, passing the\n // CaseField itself (the sub-fields do not contain any values, so these need to be obtained from the\n // parent)\n // Update rawFormValueData for this field\n // creating form group and adding control into it in case caseField is of complext type and and part of formGroup\n const form: FormGroup = new FormGroup({});\n if (formGroup.controls[key].value) {\n Object.keys(formGroup.controls[key].value).forEach((item) => {\n form.addControl(item, new FormControl(formGroup.controls[key].value[item]));\n });\n }\n rawFormValueData[key] = this.replaceHiddenFormValuesWithOriginalCaseData(\n form, caseField.field_type.complex_fields, caseField);\n }\n } else {\n // Default case also handles collections of *all* types; the entire collection in rawFormValueData will be\n // replaced with the original from formatted_value\n // Use the CaseField's existing *formatted_value* from the parent, if available. (This is necessary for\n // Complex fields, whose sub-fields do not hold any values in the model.) Otherwise, use formatted_value\n // from the CaseField itself.\n if (parentField && parentField.formatted_value) {\n rawFormValueData[key] = parentField.formatted_value[caseField.id];\n } else {\n rawFormValueData[key] = caseField.formatted_value;\n }\n }\n }\n });\n\n return rawFormValueData;\n }\n\n /**\n * Replaces non-array value objects with `null` for any Complex-type fields whose value is effectively empty, i.e.\n * all its sub-fields and descendants are `null` or `undefined`.\n */\n private replaceEmptyComplexFieldValues(data: object): object {\n Object.keys(data).forEach((key) => {\n if (!Array.isArray(data[key]) && typeof data[key] === 'object' && !FieldsUtils.containsNonEmptyValues(data[key])) {\n data[key] = null;\n }\n });\n\n return data;\n }\n\n private getStatus(response: object): any {\n return this.hasCallbackFailed(response) ? response['callback_response_status'] : response['delete_draft_response_status'];\n }\n\n private hasCallbackFailed(response: object): boolean {\n return response['callback_response_status'] !== 'CALLBACK_COMPLETED';\n }\n\n private getLastPageShown(): WizardPage {\n let lastPage: WizardPage;\n this.wizard.reverse().forEach(page => {\n if (!lastPage && this.isShown(page)) {\n lastPage = page;\n }\n });\n // noinspection JSUnusedAssignment\n return lastPage;\n }\n\n private buildConfirmation(response: object): Confirmation {\n if (response['after_submit_callback_response']) {\n return new Confirmation(\n response['id'],\n response['callback_response_status'],\n response['after_submit_callback_response']['confirmation_header'],\n response['after_submit_callback_response']['confirmation_body']\n );\n } else {\n return null;\n }\n }\n\n private sortFieldsByShowSummaryContent(fields: CaseField[]): CaseField[] {\n return this.orderService\n .sort(fields, CaseEditSubmitComponent.SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION)\n .filter(cf => cf.show_summary_content_option);\n }\n\n private getCaseFields(): CaseField[] {\n if (this.caseEdit.caseDetails) {\n return FieldsUtils.getCaseFields(this.caseEdit.caseDetails);\n }\n\n return this.eventTrigger.case_fields;\n }\n}\n","<div *ngIf=\"isDataLoaded()\">\n <ccd-case-edit [submit]=\"submit()\"\n [validate]=\"validate()\"\n [caseDetails]=\"caseDetails\"\n [eventTrigger]=\"eventTrigger\"\n (cancelled)=\"emitCancelled($event)\"\n (submitted)=\"emitSubmitted($event)\"></ccd-case-edit>\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { CasesService } from '../services/cases.service';\nimport { EventTriggerService } from '../services/event-trigger.service';\n\n\n\n@Component({\n selector: 'ccd-case-progress',\n templateUrl: 'case-progress.component.html'\n})\nexport class CaseProgressComponent implements OnInit {\n\n @Input()\n public case: string;\n @Input()\n public event: string;\n\n @Output()\n public cancelled: EventEmitter<any> = new EventEmitter();\n @Output()\n public submitted: EventEmitter<any> = new EventEmitter();\n\n public caseDetails: CaseView;\n public eventTrigger: CaseEventTrigger;\n\n constructor(\n private readonly casesService: CasesService,\n private readonly alertService: AlertService,\n private readonly eventTriggerService: EventTriggerService\n ) {}\n\n public ngOnInit(): void {\n // tslint:disable-next-line: prefer-const\n let caseTypeId: string;\n this.casesService.getCaseViewV2(this.case).toPromise()\n .then(caseView => this.caseDetails = caseView)\n .then(caseView => this.casesService.getEventTrigger(caseTypeId, this.event, caseView.case_id)\n .toPromise())\n .then(eventTrigger => {\n this.eventTriggerService.announceEventTrigger(eventTrigger);\n this.eventTrigger = eventTrigger;\n })\n .catch((error: HttpError) => {\n this.alertService.error(error.message);\n return throwError(error);\n });\n }\n\n public submit(): (sanitizedEditForm: CaseEventData) => Observable<object> {\n return (sanitizedEditForm: CaseEventData) =>\n this.casesService.createEvent(this.caseDetails, sanitizedEditForm);\n }\n\n public validate(): (sanitizedEditForm: CaseEventData, pageId: string) => Observable<object> {\n return (sanitizedEditForm: CaseEventData, pageId: string) => this.casesService.validateCase(\n this.caseDetails.case_type.id,\n sanitizedEditForm,\n pageId);\n }\n\n public emitCancelled(event): void {\n this.cancelled.emit(event);\n }\n\n public emitSubmitted(event): void {\n this.submitted.emit(event);\n }\n\n public isDataLoaded(): boolean {\n return this.eventTrigger && this.caseDetails ? true : false;\n }\n}\n","export enum EventCompletionReturnStates {\n InProgress = 'in-progress',\n CompleteEvent = 'complete-event',\n CancelEvent = 'cancel-event'\n}\n","export enum EventCompletionStates {\n CheckTasksCanBeCompleted = 'check-tasks-can-be-completed',\n CompleteEventAndTask = 'complete-event-and-task',\n CancelEvent = 'cancel-event',\n CompleteEventNotTask = 'complete-event-not-task',\n TaskCompetedOrCancelled = 'task-completed-or-cancelled',\n TaskAssignedToAnotherUser = 'task-assigned-to-another-user',\n TaskReassignToUser = 'task-reassign-to-user',\n TaskAssignToUser = 'task-assign-to-user',\n TaskUnassigned = 'task-unassigned',\n Final = 'final'\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class ConvertHrefToRouterService {\n\n private readonly hrefMarkdownLinkContent = new BehaviorSubject('Default');\n\n constructor(private readonly router: Router) {}\n\n public updateHrefLink(content: string): void {\n this.hrefMarkdownLinkContent.next(content);\n }\n\n public getHrefMarkdownLinkContent(): Observable<string> {\n return this.hrefMarkdownLinkContent.asObservable();\n }\n\n public callAngularRouter(hrefMarkdownLinkContent): void {\n const urls = hrefMarkdownLinkContent.split('?');\n const queryParams = urls[1];\n const queryParamObj = {};\n\n if (queryParams) {\n const queryParam = queryParams.split('&');\n if (queryParam[0]) {\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < queryParam.length; i++) {\n const param = queryParam[i].split('=');\n queryParamObj[param[0]] = param[1];\n }\n }\n }\n\n this.router.navigate([urls[0]], {\n queryParams: queryParamObj && (Object.keys(queryParamObj).length) ? queryParamObj : ''\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class RouterHelperService {\n public getUrlSegmentsFromRoot(route: ActivatedRouteSnapshot): string[] {\n return route.pathFromRoot\n .filter(r => r.url && r.url.length)\n .reduce((acc, r) => {\n r.url.forEach(url => {\n acc.push(url.path);\n });\n return acc;\n }, []);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router';\nimport { first } from 'rxjs/operators';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Predicate } from '../../../domain/predicate.model';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { FieldsUtils } from '../../../services/fields/fields.utils';\nimport { RouterHelperService } from '../../../services/router/router-helper.service';\nimport { WizardPage } from '../domain/wizard-page.model';\nimport { Wizard } from '../domain/wizard.model';\nimport { EventTriggerService } from './event-trigger.service';\nimport { WizardFactoryService } from './wizard-factory.service';\n\n@Injectable()\nexport class CaseEditWizardGuard implements Resolve<boolean> {\n\n constructor(\n private readonly router: Router,\n private readonly routerHelper: RouterHelperService,\n private readonly wizardFactory: WizardFactoryService,\n private readonly alertService: AlertService,\n private readonly eventTriggerService: EventTriggerService\n ) {}\n\n public resolve(route: ActivatedRouteSnapshot): Promise<boolean> {\n this.eventTriggerService.eventTriggerSource.asObservable().pipe(\n first(),\n ).subscribe(eventTrigger => {\n this.processEventTrigger(route, eventTrigger);\n });\n if (route.parent.data.eventTrigger) {\n this.eventTriggerService.announceEventTrigger(route.parent.data.eventTrigger);\n }\n return Promise.resolve(true);\n }\n\n private processEventTrigger(route: ActivatedRouteSnapshot, eventTrigger: CaseEventTrigger): Promise<boolean> {\n if (!eventTrigger.hasFields() || !eventTrigger.hasPages()) {\n this.goToSubmit(route);\n return Promise.resolve(false);\n }\n\n const wizard = this.wizardFactory.create(eventTrigger);\n const currentState = this.buildState(eventTrigger.case_fields);\n // TODO Extract predicate and state creation in a factory\n const canShowPredicate: Predicate<WizardPage> = (page: WizardPage): boolean => {\n return ShowCondition.getInstance(page.show_condition).match(currentState);\n };\n\n if (!route.params['page']) {\n this.goToFirst(wizard, canShowPredicate, route);\n return Promise.resolve(false);\n }\n\n const pageId = route.params['page'];\n\n if (!wizard.hasPage(pageId)) {\n this.goToFirst(wizard, canShowPredicate, route)\n .then(() => {\n this.alertService.error(`No page could be found for '${pageId}'`);\n });\n return Promise.resolve(false);\n }\n return Promise.resolve(true);\n }\n\n private goToFirst(wizard: Wizard, canShowPredicate: Predicate<WizardPage>, route: ActivatedRouteSnapshot): Promise<boolean> {\n const firstPage = wizard.firstPage(canShowPredicate);\n // If there’s no specific wizard page called, it makes another navigation to either the first page available or to the submit page\n // TODO should find a way to navigate to target page without going through the whole loop (and make a second call to BE) again\n return this.router.navigate([...this.parentUrlSegments(route), firstPage ? firstPage.id : 'submit'],\n { queryParams: route.queryParams });\n }\n\n private goToSubmit(route: ActivatedRouteSnapshot): Promise<boolean> {\n return this.router.navigate([...this.parentUrlSegments(route), 'submit'], {queryParams: route.queryParams});\n }\n\n private buildState(caseFields: CaseField[]): any {\n const state = {};\n\n /**\n *\n * EUI-4873 SSCS - Dynamic lists in a collection within a complex type\n *\n * Catering for mid event callbacks, hence the call to re-evaluate\n * for DynamicList's\n *\n */\n FieldsUtils.handleNestedDynamicLists({case_fields: caseFields});\n\n caseFields.forEach(field => {\n state[field.id] = field.value;\n });\n\n return state;\n }\n\n private parentUrlSegments(route: ActivatedRouteSnapshot): string[] {\n return this.routerHelper.getUrlSegmentsFromRoot(route.parent);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { CaseworkersByService } from '../../../domain/work-allocation/case-worker.model';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\n\n@Injectable()\nexport class CaseworkerService {\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {\n }\n\n public getCaseworkers(serviceId): Observable<CaseworkersByService[]> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/retrieveCaseWorkersForServices`;\n return this.http\n .post(url, { serviceIds: [serviceId]})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n}\n","export interface Task {\n assignee?: string;\n auto_assigned?: boolean;\n case_category: string;\n case_id: string;\n case_management_category?: string;\n case_name?: string;\n case_type_id?: string;\n created_date: string;\n due_date?: string;\n execution_type?: string;\n id: string;\n jurisdiction: string;\n location?: string;\n location_name?: string;\n name?: string;\n permissions: { values: Permissions[]};\n region?: string;\n security_classification?: string;\n task_state?: string;\n task_system?: string;\n task_title?: string;\n type?: string;\n warning_list?: { values: string[]};\n warnings?: true;\n work_type_id?: string;\n}\n\nexport enum Permissions {\n Own= 'OWN',\n Execute= 'EXECUTE',\n Read= 'READ',\n Manage= 'MANAGE',\n Cancel= 'CANCEL',\n}\n\nexport enum TaskState {\n UnConfigured = 'UNCONFIGURED',\n PendingAutoAssign = 'PENDING_AUTO_ASSIGN',\n Assigned = 'ASSIGNED',\n Configured = 'CONFIGURED',\n Unassigned = 'UNASSIGNED',\n Completed = 'COMPLETED',\n Cancelled = 'CANCELLED',\n Terminated = 'TERMINATED',\n PendingReConfiguration = 'PENDING_RECONFIGURATION'\n}\n","export enum EventCompletionPortalTypes {\n TaskCancelled,\n TaskReassigned\n}\n","import { Injectable } from '@angular/core';\nimport { State, StateMachine } from '@edium/fsm';\nimport { throwError } from 'rxjs';\nimport { Task, TaskState } from '../../../domain/work-allocation/Task';\nimport { EventCompletionPortalTypes } from '../domain/event-completion-portal-types.model';\nimport { EventCompletionStateMachineContext } from '../domain/event-completion-state-machine-context.model';\nimport { EventCompletionStates } from '../domain/event-completion-states.enum.model';\n\nconst EVENT_COMPLETION_STATE_MACHINE = 'EVENT COMPLETION STATE MACHINE';\n\n@Injectable()\nexport class EventCompletionStateMachineService {\n public stateCheckTasksCanBeCompleted: State;\n public stateCompleteEventAndTask: State;\n public stateCancelEvent: State;\n public stateCompleteEventNotTask: State;\n public stateTaskCompletedOrCancelled: State;\n public stateTaskAssignedToAnotherUser: State;\n public stateTaskReassignToUser: State;\n public stateTaskAssignToUser: State;\n public stateTaskUnassigned: State;\n public stateFinal: State;\n\n public initialiseStateMachine(context: EventCompletionStateMachineContext): StateMachine {\n return new StateMachine(EVENT_COMPLETION_STATE_MACHINE, context);\n }\n\n public startStateMachine(stateMachine: StateMachine): void {\n stateMachine.start(this.stateCheckTasksCanBeCompleted);\n }\n\n public createStates(stateMachine: StateMachine): void {\n // Initial state\n this.stateCheckTasksCanBeCompleted = stateMachine.createState(\n EventCompletionStates.CheckTasksCanBeCompleted,\n false,\n this.entryActionForStateCheckTasksCanBeCompleted\n );\n\n this.stateCompleteEventAndTask = stateMachine.createState(\n EventCompletionStates.CompleteEventAndTask,\n false,\n this.entryActionForStateCompleteEventAndTask\n );\n\n this.stateTaskCompletedOrCancelled = stateMachine.createState(\n EventCompletionStates.TaskCompetedOrCancelled,\n false,\n this.entryActionForStateTaskCompletedOrCancelled\n );\n\n this.stateTaskAssignedToAnotherUser = stateMachine.createState(\n EventCompletionStates.TaskAssignedToAnotherUser,\n false,\n this.entryActionForStateTaskAssignedToAnotherUser\n );\n\n this.stateTaskUnassigned = stateMachine.createState(\n EventCompletionStates.TaskUnassigned,\n false,\n this.entryActionForStateTaskUnassigned\n );\n\n // Create final state, the second param isComplete is set to true to make sure state machine finished running\n this.stateFinal = stateMachine.createState(\n EventCompletionStates.Final,\n true,\n this.entryActionForStateFinal\n );\n }\n\n public addTransitions(): void {\n // Initial transition\n this.addTransitionsForStateCheckTasksCanBeCompleted();\n this.addTransitionsForStateTaskCompletedOrCancelled();\n this.addTransitionsForStateCompleteEventAndTask();\n this.addTransitionsForStateTaskAssignedToAnotherUser();\n this.addTransitionsForStateTaskUnassigned();\n }\n\n public entryActionForStateCheckTasksCanBeCompleted(state: State, context: EventCompletionStateMachineContext): void {\n context.workAllocationService.getTask(context.task.id).subscribe(\n taskResponse => {\n if (taskResponse && taskResponse.task && taskResponse.task.task_state) {\n switch (taskResponse.task.task_state.toUpperCase()) {\n case TaskState.Unassigned:\n // Task unassigned\n state.trigger(EventCompletionStates.TaskUnassigned);\n break;\n case TaskState.Completed:\n case TaskState.Cancelled:\n case TaskState.Terminated:\n // Task completed or cancelled\n state.trigger(EventCompletionStates.TaskCompetedOrCancelled);\n break;\n case TaskState.Assigned:\n // Task is in assigned state\n if (taskResponse.task.assignee === context.task.assignee) {\n // Task still assigned to current user, complete event and task\n state.trigger(EventCompletionStates.CompleteEventAndTask);\n } else {\n // Task has been reassigned to another user, display error message\n context.reassignedTask = taskResponse.task;\n state.trigger(EventCompletionStates.TaskAssignedToAnotherUser);\n }\n break;\n default:\n // Allow user to complete the event\n state.trigger(EventCompletionStates.CompleteEventAndTask);\n break;\n }\n }\n },\n error => {\n context.alertService.error(error.message);\n return throwError(error);\n });\n }\n\n public entryActionForStateTaskCompletedOrCancelled(state: State, context: EventCompletionStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventCompletionStates.Final);\n // Load case event completion task cancelled component\n context.component.showPortal(EventCompletionPortalTypes.TaskCancelled);\n }\n\n public entryActionForStateCompleteEventAndTask(state: State, context: EventCompletionStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventCompletionStates.Final);\n\n const taskStr = context.sessionStorageService.getItem('taskToComplete');\n if (taskStr) {\n // Task is in session storage\n const task: Task = JSON.parse(taskStr);\n\n // Task already assigned to current user, just complete task\n context.workAllocationService.completeTask(task.id).subscribe(\n response => {\n // Emit event can be completed event\n context.component.eventCanBeCompleted.emit(true);\n },\n error => {\n // Emit event cannot be completed event\n context.component.eventCanBeCompleted.emit(false);\n context.alertService.error(error.message);\n return throwError(error);\n });\n } else {\n // Emit event cannot be completed event\n context.component.eventCanBeCompleted.emit(false);\n }\n }\n\n public entryActionForStateTaskAssignedToAnotherUser(state: State, context: EventCompletionStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventCompletionStates.Final);\n // Load case event completion task reassigned component\n context.component.showPortal(EventCompletionPortalTypes.TaskReassigned);\n }\n\n public entryActionForStateTaskUnassigned(state: State, context: EventCompletionStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventCompletionStates.Final);\n\n // Get task details\n const taskStr = context.sessionStorageService.getItem('taskToComplete');\n if (taskStr) {\n // Task is in session storage\n const task: Task = JSON.parse(taskStr);\n\n // Assign and complete task\n context.workAllocationService.assignAndCompleteTask(task.id).subscribe(\n response => {\n // Emit event can be completed event\n context.component.eventCanBeCompleted.emit(true);\n },\n error => {\n // Emit event cannot be completed event\n context.component.eventCanBeCompleted.emit(false);\n context.alertService.error(error.message);\n return throwError(error);\n });\n } else {\n // Emit event cannot be completed event\n context.component.eventCanBeCompleted.emit(false);\n }\n }\n\n public entryActionForStateFinal(state: State, context: EventCompletionStateMachineContext): void {\n // Final actions can be performed here, the state machine finished running\n console.log('FINAL');\n }\n\n public addTransitionsForStateCheckTasksCanBeCompleted(): void {\n // Complete event and task\n this.stateCheckTasksCanBeCompleted.addTransition(\n EventCompletionStates.CompleteEventAndTask,\n this.stateCompleteEventAndTask\n );\n // Task completed or cancelled\n this.stateCheckTasksCanBeCompleted.addTransition(\n EventCompletionStates.TaskCompetedOrCancelled,\n this.stateTaskCompletedOrCancelled\n );\n // Task assigned to another user\n this.stateCheckTasksCanBeCompleted.addTransition(\n EventCompletionStates.TaskAssignedToAnotherUser,\n this.stateTaskAssignedToAnotherUser\n );\n // Task unassigned\n this.stateCheckTasksCanBeCompleted.addTransition(\n EventCompletionStates.TaskUnassigned,\n this.stateTaskUnassigned\n );\n }\n\n public addTransitionsForStateTaskCompletedOrCancelled(): void {\n this.stateTaskCompletedOrCancelled.addTransition(\n EventCompletionStates.Final,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateCompleteEventAndTask(): void {\n this.stateCompleteEventAndTask.addTransition(\n EventCompletionStates.Final,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateTaskAssignedToAnotherUser(): void {\n this.stateTaskAssignedToAnotherUser.addTransition(\n EventCompletionStates.Final,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateTaskUnassigned(): void {\n this.stateTaskUnassigned.addTransition(\n EventCompletionStates.Final,\n this.stateFinal\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { Judicialworker } from '../../../domain/work-allocation/judicial-worker.model';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\n\n@Injectable()\nexport class JudicialworkerService {\n\n constructor(\n private readonly http: HttpService,\n private readonly appConfig: AbstractAppConfig,\n private readonly errorService: HttpErrorService\n ) {\n }\n\n public getJudicialworkers(userIds: string[], serviceId: string): Observable<Judicialworker[]> {\n const url = `${this.appConfig.getWorkAllocationApiUrl()}/getJudicialUsers`;\n return this.http\n .post(url, {userIds, services: [serviceId]})\n .pipe(\n catchError(error => {\n this.errorService.setError(error);\n return throwError(error);\n })\n );\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Profile } from '../../domain/profile/profile.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class ProfileService {\n\n public static readonly V2_MEDIATYPE_USER_PROFILE =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-user-profile.v2+json;charset=UTF-8';\n private static readonly URL = '/internal/profile';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {}\n\n public get(): Observable<Profile> {\n const url = this.appConfig.getCaseDataUrl() + ProfileService.URL;\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', ProfileService.V2_MEDIATYPE_USER_PROFILE)\n .set('Content-Type', 'application/json');\n\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map((p: object) => plainToClass(Profile, p))\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CallbackErrorsComponent } from './callback-errors.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ],\n declarations: [\n CallbackErrorsComponent\n ],\n exports: [\n CallbackErrorsComponent,\n ]\n})\nexport class ErrorsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AlertModule } from './alert/alert.module';\n\n@NgModule({\n imports: [\n CommonModule,\n AlertModule\n ],\n exports: [\n AlertModule\n ]\n})\nexport class BannersModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { BodyComponent } from './body.component';\n\n@NgModule({\n imports: [CommonModule, RouterModule],\n declarations: [BodyComponent],\n exports: [BodyComponent]\n})\nexport class BodyModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { FooterComponent } from './footer.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [FooterComponent],\n exports: [FooterComponent]\n})\nexport class FootersModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DateInputComponent } from './date-input/date-input.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n DateInputComponent,\n ],\n exports: [\n DateInputComponent,\n ]\n})\nexport class FormModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { CaseFieldService } from '../../../services/case-fields/case-field.service';\n\n@Pipe({\n name: 'ccdIsReadOnly'\n})\nexport class IsReadOnlyPipe implements PipeTransform {\n\n constructor(private readonly caseFieldService: CaseFieldService) {}\n\n public transform(field: CaseField): boolean {\n return this.caseFieldService.isReadOnly(field);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DashPipe } from './dash.pipe';\nimport { DatePipe } from './date.pipe';\nimport { FieldLabelPipe } from './field-label.pipe';\nimport { FirstErrorPipe } from './first-error.pipe';\nimport { IsCompoundPipe } from './is-compound.pipe';\nimport { IsMandatoryPipe } from './is-mandatory.pipe';\nimport { IsReadOnlyAndNotCollectionPipe } from './is-read-only-and-not-collection.pipe';\nimport { IsReadOnlyPipe } from './is-read-only.pipe';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n DatePipe,\n FieldLabelPipe,\n FirstErrorPipe,\n IsCompoundPipe,\n IsMandatoryPipe,\n IsReadOnlyPipe,\n IsReadOnlyAndNotCollectionPipe,\n DashPipe\n ],\n exports: [\n DatePipe,\n FieldLabelPipe,\n FirstErrorPipe,\n IsCompoundPipe,\n IsMandatoryPipe,\n IsReadOnlyPipe,\n IsReadOnlyAndNotCollectionPipe,\n DashPipe\n ]\n})\nexport class PaletteUtilsModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { CaseField } from '../../domain/definition/case-field.model';\n\n@Pipe({\n name: 'ccdCollectionTableCaseFieldsFilter'\n})\nexport class CcdCollectionTableCaseFieldsFilterPipe implements PipeTransform {\n\n public transform(objs: { [key: string]: any }[], caseField: CaseField, value: {}): CaseField {\n const fields: CaseField[] = objs.map((obj) => ({\n ...obj.value.caseField,\n type: obj.value.type.type ? obj.value.type.type : obj.value.type\n }));\n return plainToClassFromExist(new CaseField(), {\n id: caseField ? caseField.id : '',\n label: caseField ? caseField.label : '',\n display_context: 'READONLY',\n value,\n field_type: {\n id: caseField ? caseField.id : '',\n type: 'Complex',\n complex_fields: fields,\n }\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaseField } from '../../domain';\n\n@Pipe({\n name: 'ccdCYAPageLabelFilter'\n})\nexport class CcdCYAPageLabelFilterPipe implements PipeTransform {\n\n public transform(caseFields: CaseField[]): CaseField[] {\n return caseFields.map((caseField: CaseField) => {\n if (caseField.field_type.collection_field_type &&\n caseField.field_type.collection_field_type.complex_fields &&\n caseField.field_type.collection_field_type.complex_fields.length) {\n caseField.field_type.collection_field_type.complex_fields = this.transform(\n caseField.field_type.collection_field_type.complex_fields\n );\n }\n if (caseField.field_type.complex_fields && caseField.field_type.complex_fields.length) {\n caseField.field_type.complex_fields = this.getNonLabelComplexFieldType(caseField.field_type.complex_fields);\n }\n\n return caseField;\n });\n }\n\n private readonly getNonLabelComplexFieldType = (complexFields: CaseField[]): CaseField[] =>\n complexFields.filter((caseField: CaseField) => caseField.field_type.type !== 'Label')\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\n\nimport { plainToClassFromExist } from 'class-transformer';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\n\n@Pipe({\n name: 'ccdReadFieldsFilter'\n})\nexport class ReadFieldsFilterPipe implements PipeTransform {\n\n private static readonly EMPTY_VALUES = [\n undefined,\n null,\n '',\n {}\n ];\n\n private static readonly ALWAYS_NULL_FIELDS = ['CasePaymentHistoryViewer', 'WaysToPay'];\n\n private static readonly NESTED_TYPES = {\n Complex: ReadFieldsFilterPipe.isValidComplex,\n Collection: ReadFieldsFilterPipe.isValidCollection\n };\n\n /**\n * Complex type should have at least on simple field descendant with a value.\n */\n private static isValidComplex(field: CaseField, values?: object): boolean {\n values = values || {};\n const type = field.field_type;\n const value = ReadFieldsFilterPipe.getValue(field, values);\n\n const hasChildrenWithValue = type.complex_fields.find(f => {\n const willKeep = ReadFieldsFilterPipe.keepField(f, value, true);\n return willKeep && ReadFieldsFilterPipe.evaluateConditionalShow(f, value).hidden !== true;\n });\n\n return !!hasChildrenWithValue;\n }\n\n private static isValidCollection(field: CaseField, values?: object): boolean {\n // if field is collection and it has complex/collection child field; parent field doesnt have value defined\n if (!Array.isArray(field.value) && values && values.hasOwnProperty(field.id)) {\n return true;\n }\n const isNotEmpty = Array.isArray(field.value) && field.value.length > 0;\n if (isNotEmpty && field.field_type.collection_field_type.type === 'Complex') {\n return !!field.value.find(item => {\n const complexField = plainToClassFromExist(new CaseField(), {\n id: field.field_type.collection_field_type.id,\n field_type: field.field_type.collection_field_type,\n value: item.value,\n label: null,\n });\n return ReadFieldsFilterPipe.isValidComplex(complexField);\n });\n }\n return isNotEmpty;\n }\n\n private static isEmpty(value: any): boolean {\n return ReadFieldsFilterPipe.EMPTY_VALUES.indexOf(value) !== -1\n || value.length === 0;\n }\n\n private static isCompound(field: CaseField): boolean {\n return ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type];\n }\n\n private static isValidCompound(field: CaseField, value?: object): boolean {\n return ReadFieldsFilterPipe.isCompound(field)\n && ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value);\n }\n\n private static keepField(field: CaseField, value?: object, ignoreLabels = false): boolean {\n // We shouldn't ditch labels.\n if (!ignoreLabels && field.field_type.type === 'Label' && (field.label || '').length > 0) {\n return true;\n }\n // We also shouldn't ditch fields that will always come back with a null value.\n if (this.ALWAYS_NULL_FIELDS.indexOf(field.field_type.type) !== -1) {\n return true;\n }\n\n value = value || {};\n\n if (ReadFieldsFilterPipe.isCompound(field)) {\n return ReadFieldsFilterPipe.isValidCompound(field, value);\n }\n\n return !ReadFieldsFilterPipe.isEmpty(field.value)\n || !ReadFieldsFilterPipe.isEmpty(value[field.id]);\n }\n\n private static getValue(field: CaseField, values: any, index?: number): any {\n let value: any;\n if (index >= 0 ) {\n value = values[index].value[field.id];\n } else {\n value = values[field.id];\n }\n return ReadFieldsFilterPipe.isEmpty(field.value) ? value : field.value;\n }\n\n private static evaluateConditionalShow(field: CaseField, formValue: any, path?: string,\n formGroupAvaliable?: boolean, fieldId?: string): CaseField {\n if (field.display_context === 'HIDDEN') {\n field.hidden = true;\n } else if (field.show_condition) {\n let cond: ShowCondition;\n if (fieldId && field.show_condition.indexOf(fieldId) > -1 && !formGroupAvaliable && !!Object.keys(formValue).length) {\n const search = fieldId + '.';\n const searchRegExp = new RegExp(search, 'g');\n const replaceWith = '';\n cond = ShowCondition.getInstance(field.show_condition.replace(searchRegExp, replaceWith));\n } else {\n cond = ShowCondition.getInstance(field.show_condition);\n }\n field.hidden = !cond.match(formValue, path);\n } else {\n field.hidden = false;\n }\n return field;\n }\n\n /**\n * Filter out fields having no data to display and harmonise field values coming parent's value.\n */\n public transform(\n complexField: CaseField, keepEmpty?: boolean, index?: number,\n setupHidden = false, formGroup?: FormGroup | AbstractControl, path?: string): CaseField[] {\n if (!complexField || !complexField.field_type) {\n return [];\n }\n\n const fields = complexField.field_type.complex_fields || [];\n const values = complexField.value || {};\n let checkConditionalShowAgainst: any = values;\n let formGroupAvailable = false;\n if (formGroup) {\n checkConditionalShowAgainst = formGroup.value;\n formGroupAvailable = true;\n }\n\n return fields\n .map(f => {\n const clone = FieldsUtils.cloneObject(f);\n const value = ReadFieldsFilterPipe.getValue(f, values, index);\n if (!ReadFieldsFilterPipe.isEmpty(value)) {\n clone.value = value;\n }\n return clone;\n })\n .map(f => {\n if (!f.display_context) {\n f.display_context = complexField.display_context;\n }\n if (setupHidden) {\n ReadFieldsFilterPipe.evaluateConditionalShow(f, checkConditionalShowAgainst, path, formGroupAvailable, complexField.id);\n }\n return f;\n })\n .filter(f => keepEmpty || ReadFieldsFilterPipe.keepField(f));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\n\nimport { CaseTab } from '../../domain/case-view';\nimport { CaseField } from '../../domain/definition';\n\n@Pipe({\n name: 'ccdTabFields'\n})\nexport class CcdTabFieldsPipe implements PipeTransform {\n\n public transform(tab: CaseTab): CaseField {\n const value: any = tab.fields.reduce((acc: any, field: CaseField) => {\n return {...acc, [field.id]: field.value};\n }, {});\n return plainToClassFromExist(new CaseField(), {\n id: tab.id,\n label: tab.label,\n display_context: 'READONLY',\n value,\n field_type: {\n id: tab.id,\n type: 'Complex',\n complex_fields: tab.fields\n }\n });\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { WizardPage } from '../../components/case-editor/domain/wizard-page.model';\n\nimport { CaseField } from '../../domain/definition';\n\n@Pipe({\n name: 'ccdPageFields'\n})\nexport class CcdPageFieldsPipe implements PipeTransform {\n\n public transform(page: WizardPage, dataFormGroup: FormGroup): CaseField {\n const complex_fields: CaseField[] = Object.keys(dataFormGroup.controls).map(key => {\n const control: AbstractControl = dataFormGroup.controls[key];\n return control['caseField'] as CaseField;\n }).filter(field => {\n return !!page.case_fields.find(pcf => pcf.id === field.id);\n }).sort((a, b) => a.order - b.order);\n const rawValue: any = dataFormGroup.value;\n const value: any = page.case_fields.reduce((acc: any, field: CaseField) => {\n const fieldValue: any = rawValue[field.id] || field.value;\n return {...acc, [field.id]: fieldValue};\n }, {});\n return plainToClassFromExist(new CaseField(), {\n id: page.id,\n label: page.label,\n display_context: 'READONLY',\n value,\n field_type: {\n id: page.id,\n type: 'Complex',\n complex_fields\n }\n });\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SortOrder } from '../../../components/palette/complex/sort-order';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SortParameters } from '../../../domain/search/sorting/sort-parameters';\n\n@Pipe({\n name: 'ccdSortSearchResult'\n})\nexport class SortSearchResultPipe implements PipeTransform {\n\n public transform(searchResults: SearchResultViewItem[], sortParameters: SortParameters) {\n\n if (isUndefined(searchResults) || isUndefined(sortParameters)) {\n return searchResults;\n }\n return searchResults.sort(\n (a, b) => {\n return sortParameters.comparator.compare(a, b)\n * (sortParameters.sortOrder === SortOrder.DESCENDING ? 1 : -1);\n }\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CaseReferencePipe } from './case-reference';\nimport { CcdCaseTitlePipe } from './case-title';\nimport { CcdCollectionTableCaseFieldsFilterPipe, CcdCYAPageLabelFilterPipe, ReadFieldsFilterPipe, CcdTabFieldsPipe, CcdPageFieldsPipe } from './complex';\nimport { SortSearchResultPipe } from './search-result/sorting/sort-search-result.pipe';\n\nconst pipeDeclarations = [\n CaseReferencePipe,\n SortSearchResultPipe,\n CcdCaseTitlePipe,\n CcdCollectionTableCaseFieldsFilterPipe,\n CcdCYAPageLabelFilterPipe,\n ReadFieldsFilterPipe,\n CcdTabFieldsPipe,\n CcdPageFieldsPipe\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n ...pipeDeclarations\n ],\n exports: [\n ...pipeDeclarations\n ]\n})\nexport class PipesModule {}\n","import { Injectable } from '@angular/core';\nimport { CaseField } from '../../../domain/definition';\nimport { Profile } from '../../../domain/profile';\n\n@Injectable()\nexport class CollectionCreateCheckerService {\n\n public setDisplayContextForChildren(caseField: CaseField, profile: Profile) {\n const children = this.getCaseFieldChildren(caseField);\n\n if (children && children.length > 0) {\n children.forEach(child => {\n if (!!profile.user.idam.roles.find(role => this.hasCreateAccess(child, role))) {\n child.display_context = caseField.display_context;\n }\n if (this.isCollection(child) || this.isComplex(child)) {\n this.setDisplayContextForChildren(child, profile);\n }\n });\n }\n }\n\n private getCaseFieldChildren(caseField: CaseField): CaseField[] {\n let childrenCaseFields = [];\n if (this.isCollection(caseField)) {\n childrenCaseFields = caseField.field_type.collection_field_type.complex_fields || [];\n } else if (this.isComplex(caseField)) {\n childrenCaseFields = caseField.field_type.complex_fields || [];\n }\n return childrenCaseFields;\n }\n\n private isComplex(case_field: CaseField) {\n return case_field.field_type.type === 'Complex';\n }\n\n private isCollection(case_field: CaseField) {\n return case_field.field_type.type === 'Collection';\n }\n\n private hasCreateAccess(caseField: CaseField, role: any) {\n return !!caseField.acls.find( acl => acl.role === role && acl.create === true);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../app.config';\n\n@Pipe({\n name: 'ccdDocumentUrl'\n})\nexport class DocumentUrlPipe implements PipeTransform {\n\n constructor(private readonly appConfig: AbstractAppConfig) {}\n\n public transform(value: string): string {\n const remoteHrsPattern = new RegExp(this.appConfig.getRemoteHrsUrl());\n value = value.replace(remoteHrsPattern, this.appConfig.getHrsUrl());\n const remoteDocumentManagementPattern = new RegExp(this.appConfig.getRemoteDocumentManagementUrl());\n return value.replace(remoteDocumentManagementPattern, this.appConfig.getDocumentManagementUrl());\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { WindowService } from '../../../services/window/window.service';\nimport { FileUploadStateService } from './file-upload-state.service';\n\n@Injectable()\nexport class FileUploadProgressGuard implements CanDeactivate<any> {\n\n public static readonly CONFIRM_MESSAGE = 'File upload in progress. Press “Cancel” to cancel the upload. Press “Ok” to continue the document upload.';\n\n constructor(\n private readonly fileUploadStateService: FileUploadStateService,\n private readonly windowService: WindowService\n ) {}\n\n public canDeactivate() {\n if (this.fileUploadStateService.isUploadInProgress()) {\n const userDecision = !this.windowService.confirm(FileUploadProgressGuard.CONFIRM_MESSAGE);\n if (userDecision) {\n this.fileUploadStateService.setUploadInProgress(false);\n }\n return userDecision;\n }\n return true;\n }\n\n}\n","import { Fee } from './fee.model';\n\nexport class FeeValue {\n public value: Fee;\n}\n","export class Fee {\n public FeeCode: string;\n public FeeAmount: string;\n public FeeDescription?: string;\n public FeeVersion: string;\n}\n","import { FeeValue } from './fee-value.model';\n\nexport class OrderSummary {\n public PaymentReference: string;\n public Fees: FeeValue[];\n public PaymentTotal: string;\n}\n","import { NgxMatDatetimePickerModule, NgxMatNativeDateModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { PaymentLibModule } from '@hmcts/ccpay-web-component';\nimport { NgxMdModule } from 'ngx-md';\n\nimport { HeadersModule, TabsModule } from '../../../components';\nimport { BannersModule } from '../../../components/banners/banners.module';\nimport { BodyModule } from '../../../components/body/body.module';\nimport { FootersModule } from '../../../components/footer/footers.module';\nimport { FormModule } from '../../../components/form/form.module';\n\nimport { PaletteUtilsModule } from './utils';\n\nimport { PipesModule } from '../../pipes/pipes.module';\nimport { FieldReadComponent, FieldReadLabelComponent, FieldWriteComponent } from './base-field';\n\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RouterModule } from '@angular/router';\nimport { LabelSubstitutorModule } from '../../directives/substitutor';\nimport { FormValidatorsService } from '../../services/form/form-validators.service';\nimport { WindowService } from '../../services/window';\nimport { ReadCaseLinkFieldComponent } from './case-link/read-case-link-field.component';\nimport { WriteCaseLinkFieldComponent } from './case-link/write-case-link-field.component';\nimport { ReadCollectionFieldComponent, WriteCollectionFieldComponent } from './collection';\nimport { CollectionCreateCheckerService } from './collection/collection-create-checker.service';\nimport { ReadComplexFieldCollectionTableComponent, ReadComplexFieldComponent, ReadComplexFieldRawComponent, ReadComplexFieldTableComponent, WriteComplexFieldComponent } from './complex';\nimport { ReadDateFieldComponent, WriteDateContainerFieldComponent, WriteDateFieldComponent } from './date';\nimport { DatetimePickerComponent } from './datetime-picker';\nimport { DocumentUrlPipe } from './document';\nimport { FileUploadProgressGuard } from './document/file-upload-progress.guard';\nimport { FileUploadStateService } from './document/file-upload-state.service';\nimport { DynamicListPipe, ReadDynamicListFieldComponent } from './dynamic-list';\nimport { DynamicRadioListPipe, ReadDynamicRadioListFieldComponent } from './dynamic-radio-list';\nimport { ReadEmailFieldComponent, WriteEmailFieldComponent } from './email';\nimport { FixedListPipe, ReadFixedListFieldComponent, WriteFixedListFieldComponent } from './fixed-list';\nimport { FixedRadioListPipe, ReadFixedRadioListFieldComponent, WriteFixedRadioListFieldComponent } from './fixed-radio-list';\nimport { CaseHistoryViewerFieldComponent, EventLogComponent, EventLogDetailsComponent, EventLogTableComponent } from './history';\nimport { LabelFieldComponent } from './label';\nimport { MarkdownComponent } from './markdown';\nimport { MoneyGbpInputComponent, ReadMoneyGbpFieldComponent, WriteMoneyGbpFieldComponent } from './money-gbp';\nimport { ReadMultiSelectListFieldComponent, WriteMultiSelectListFieldComponent } from './multi-select-list';\nimport { ReadNumberFieldComponent, WriteNumberFieldComponent } from './number';\nimport { ReadOrderSummaryFieldComponent, ReadOrderSummaryRowComponent, WriteOrderSummaryFieldComponent } from './order-summary';\nimport { ReadOrganisationFieldComponent, ReadOrganisationFieldRawComponent, ReadOrganisationFieldTableComponent, WriteOrganisationComplexFieldComponent, WriteOrganisationFieldComponent } from './organisation';\nimport { PaletteService } from './palette.service';\nimport { CasePaymentHistoryViewerFieldComponent } from './payment';\nimport { ReadPhoneUKFieldComponent, WritePhoneUKFieldComponent } from './phone-uk';\nimport { ReadTextFieldComponent, WriteTextFieldComponent } from './text';\nimport { ReadTextAreaFieldComponent, WriteTextAreaFieldComponent } from './text-area';\nimport { UnsupportedFieldComponent } from './unsupported-field.component';\nimport { WaysToPayFieldComponent } from './waystopay';\nimport { ReadYesNoFieldComponent, WriteYesNoFieldComponent, YesNoService } from './yes-no';\nimport { WriteAddressFieldComponent } from './address/write-address-field.component';\nimport { WriteDocumentFieldComponent } from './document/write-document-field.component'\nimport { WriteDynamicRadioListFieldComponent } from './dynamic-radio-list/write-dynamic-radio-list-field.component';\nimport { WriteDynamicListFieldComponent } from './dynamic-list/write-dynamic-list-field.component';\nimport { ReadDocumentFieldComponent } from './document/read-document-field.component';\nimport { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to';\n\nconst PALETTE_COMPONENTS = [\n UnsupportedFieldComponent,\n DatetimePickerComponent,\n WaysToPayFieldComponent,\n MarkdownComponent,\n FieldReadComponent,\n FieldWriteComponent,\n FieldReadLabelComponent,\n LabelFieldComponent,\n CasePaymentHistoryViewerFieldComponent,\n MoneyGbpInputComponent,\n CaseHistoryViewerFieldComponent,\n EventLogComponent,\n EventLogDetailsComponent,\n EventLogTableComponent,\n\n // // Read\n ReadTextFieldComponent,\n ReadTextAreaFieldComponent,\n ReadNumberFieldComponent,\n ReadEmailFieldComponent,\n ReadPhoneUKFieldComponent,\n ReadDateFieldComponent,\n ReadCollectionFieldComponent,\n ReadDocumentFieldComponent,\n\n // new\n ReadYesNoFieldComponent,\n ReadOrganisationFieldComponent,\n ReadOrganisationFieldTableComponent,\n ReadOrganisationFieldRawComponent,\n ReadOrderSummaryFieldComponent,\n ReadOrderSummaryRowComponent,\n ReadMoneyGbpFieldComponent,\n ReadMultiSelectListFieldComponent,\n ReadDynamicListFieldComponent,\n ReadFixedListFieldComponent,\n ReadFixedRadioListFieldComponent,\n ReadDynamicRadioListFieldComponent,\n ReadCaseLinkFieldComponent,\n ReadComplexFieldComponent,\n ReadComplexFieldRawComponent,\n ReadComplexFieldTableComponent,\n ReadComplexFieldCollectionTableComponent,\n\n // Write\n WriteAddressFieldComponent,\n WriteComplexFieldComponent,\n WriteOrganisationComplexFieldComponent,\n WriteDocumentFieldComponent,\n WriteDynamicListFieldComponent,\n WriteDynamicRadioListFieldComponent,\n WriteTextFieldComponent,\n WriteDateContainerFieldComponent,\n WriteTextAreaFieldComponent,\n WritePhoneUKFieldComponent,\n WriteNumberFieldComponent,\n WriteEmailFieldComponent,\n WriteDateFieldComponent,\n\n // new\n WriteYesNoFieldComponent,\n WriteOrganisationFieldComponent,\n WriteOrganisationComplexFieldComponent,\n WriteOrderSummaryFieldComponent,\n WriteMoneyGbpFieldComponent,\n WriteDateContainerFieldComponent,\n WriteMultiSelectListFieldComponent,\n WriteFixedListFieldComponent,\n WriteFixedRadioListFieldComponent,\n WriteCaseLinkFieldComponent,\n WriteCollectionFieldComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteUtilsModule,\n PipesModule,\n BannersModule,\n HeadersModule,\n FootersModule,\n BodyModule,\n FormModule,\n TabsModule,\n LabelSubstitutorModule,\n NgxMdModule,\n NgxMatDatetimePickerModule,\n NgxMatTimepickerModule,\n NgxMatNativeDateModule,\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n PaymentLibModule,\n ScrollToModule.forRoot()\n ],\n declarations: [\n FixedListPipe,\n FixedRadioListPipe,\n DynamicListPipe,\n DynamicRadioListPipe,\n DocumentUrlPipe,\n\n ...PALETTE_COMPONENTS\n ],\n exports: [\n TabsModule,\n PaletteUtilsModule,\n PipesModule,\n ...PALETTE_COMPONENTS\n ],\n providers: [\n YesNoService,\n CollectionCreateCheckerService,\n PaletteService,\n FormValidatorsService,\n FileUploadStateService,\n FileUploadProgressGuard,\n WindowService,\n {provide: MAT_DATE_LOCALE, useValue: 'en-GB'}\n ]\n})\nexport class PaletteModule {\n}\n","import { Component, Inject } from '@angular/core';\nimport { CaseEventCompletionComponent, COMPONENT_PORTAL_INJECTION_TOKEN } from '../../case-event-completion.component';\n\n@Component({\n selector: 'app-case-event-completion-task-cancelled',\n templateUrl: './case-event-completion-task-cancelled.html'\n})\nexport class CaseEventCompletionTaskCancelledComponent {\n public caseId: string;\n\n constructor(@Inject(COMPONENT_PORTAL_INJECTION_TOKEN) private readonly parentComponent: CaseEventCompletionComponent) {\n this.caseId = this.parentComponent.context.caseId;\n }\n\n public onContinue(): void {\n // Emit event can be completed event\n this.parentComponent.eventCanBeCompleted.emit(true);\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task cancelled/marked as done</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task cancelled/marked as done</h2>\n\n <p>This task has been cancelled or marked as done.</p>\n\n <p>Click Continue to complete the event and save your progress.</p>\n\n <p>Alternatively, click Cancel to return to the tasks tab without saving your progress.</p>\n\n <div class=\"form-group form-group-related\">\n <button class=\"govuk-button govuk-!-margin-right-2\" data-module=\"govuk-button\" (click)=\"onContinue()\">Continue</button>\n <a [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\"\n class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">Cancel</a>\n </div>\n </div>\n</div>\n","<div class=\"govuk-!-margin-9\" *ngIf=\"assignedUserName\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\"\n data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task reassigned</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task reassigned</h2>\n\n <p>This task has been reassigned to {{assignedUserName}}.</p>\n\n <p>Click Continue to reassign the task to you and save your progress.</p>\n\n <p>Alternatively, click Cancel to return to the tasks tab without saving your progress.</p>\n\n <div class=\"form-group form-group-related\">\n <button class=\"govuk-button govuk-!-margin-right-2\" data-module=\"govuk-button\" (click)=\"onContinue()\">Continue</button>\n <a [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\"\n class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">Cancel</a>\n </div>\n </div>\n</div>\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AlertService } from '../../../../../services/alert/alert.service';\nimport { Subscription, throwError } from 'rxjs';\nimport { Task } from '../../../../../domain/work-allocation/Task';\nimport { CaseworkerService } from '../../../services/case-worker.service';\nimport { JudicialworkerService } from '../../../services/judicial-worker.service';\nimport { WorkAllocationService } from '../../../services/work-allocation.service';\nimport { CaseEventCompletionComponent, COMPONENT_PORTAL_INJECTION_TOKEN } from '../../case-event-completion.component';\nimport { SessionStorageService } from '../../../../../services/session/session-storage.service';\n\n@Component({\n selector: 'app-case-event-completion-task-reassigned',\n templateUrl: './case-event-completion-task-reassigned.html'\n})\nexport class CaseEventCompletionTaskReassignedComponent implements OnInit, OnDestroy {\n\n public caseId: string;\n public assignedUserId: string;\n public assignedUserName: string;\n public subscription: Subscription;\n public caseworkerSubscription: Subscription;\n public judicialworkerSubscription: Subscription;\n\n constructor(@Inject(COMPONENT_PORTAL_INJECTION_TOKEN) private readonly parentComponent: CaseEventCompletionComponent,\n private readonly route: ActivatedRoute,\n private readonly workAllocationService: WorkAllocationService,\n private readonly sessionStorageService: SessionStorageService,\n private readonly judicialworkerService: JudicialworkerService,\n private readonly caseworkerService: CaseworkerService,\n private readonly alertService: AlertService) {\n }\n\n public ngOnInit(): void {\n // Get case id and task from the parent component\n this.caseId = this.parentComponent.context.caseId;\n const task = this.parentComponent.context.reassignedTask;\n\n // Current user is a caseworker?\n this.caseworkerSubscription = this.caseworkerService.getCaseworkers(task.jurisdiction).subscribe(result => {\n if (result && result[0].service === task.jurisdiction && result[0].caseworkers) {\n const caseworker = result[0].caseworkers.find(x => x.idamId === task.assignee);\n if (caseworker) {\n this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;\n }\n }\n\n if (!this.assignedUserName) {\n // Current user is a judicial user?\n this.judicialworkerSubscription = this.judicialworkerService.getJudicialworkers([task.assignee], task.jurisdiction)\n .subscribe(judicialworkers => {\n if (judicialworkers) {\n const judicialworker = judicialworkers.find(x => x.sidam_id === task.assignee);\n if (judicialworker) {\n this.assignedUserName = judicialworker.full_name;\n }\n }\n\n if (!this.assignedUserName) {\n this.assignedUserName = 'another user';\n }\n });\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.caseworkerSubscription) {\n this.caseworkerSubscription.unsubscribe();\n }\n if (this.judicialworkerSubscription) {\n this.judicialworkerSubscription.unsubscribe();\n }\n }\n\n public onContinue(): void {\n // Get task details\n const taskStr = this.sessionStorageService.getItem('taskToComplete');\n if (taskStr) {\n // Task is in session storage\n const task: Task = JSON.parse(taskStr);\n\n // Assign and complete task\n this.subscription = this.workAllocationService.assignAndCompleteTask(task.id).subscribe(\n response => {\n // Emit event can be completed event\n this.parentComponent.eventCanBeCompleted.emit(true);\n },\n error => {\n // Emit event cannot be completed event\n this.parentComponent.eventCanBeCompleted.emit(false);\n this.alertService.error(error.message);\n return throwError(error);\n });\n } else {\n // Emit event cannot be completed event\n this.parentComponent.eventCanBeCompleted.emit(false);\n }\n }\n}\n","import { ComponentPortal } from '@angular/cdk/portal';\nimport { Component, EventEmitter, InjectionToken, Injector, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { StateMachine } from '@edium/fsm';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { EventCompletionParams } from '../domain/event-completion-params.model';\nimport { EventCompletionPortalTypes } from '../domain/event-completion-portal-types.model';\nimport { EventCompletionComponentEmitter, EventCompletionStateMachineContext } from '../domain/event-completion-state-machine-context.model';\nimport { EventCompletionStateMachineService } from '../services/event-completion-state-machine.service';\nimport { WorkAllocationService } from '../services/work-allocation.service';\nimport { CaseEventCompletionTaskCancelledComponent } from './components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component';\nimport { CaseEventCompletionTaskReassignedComponent } from './components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component';\n\nexport const COMPONENT_PORTAL_INJECTION_TOKEN = new InjectionToken<CaseEventCompletionComponent>('');\n\n@Component({\n selector: 'ccd-case-event-completion',\n templateUrl: './case-event-completion.html'\n})\nexport class CaseEventCompletionComponent implements OnChanges, EventCompletionComponentEmitter {\n\n @Input()\n public eventCompletionParams: EventCompletionParams;\n\n @Output()\n public eventCanBeCompleted: EventEmitter<boolean> = new EventEmitter();\n\n public stateMachine: StateMachine;\n public context: EventCompletionStateMachineContext;\n public selectedComponentPortal: ComponentPortal<any>;\n\n constructor(private readonly service: EventCompletionStateMachineService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly sessionStorageService: SessionStorageService,\n private readonly workAllocationService: WorkAllocationService,\n private readonly alertService: AlertService) {\n }\n\n public ngOnChanges(changes?: SimpleChanges): void {\n if (changes.eventCompletionParams && changes.eventCompletionParams.currentValue) {\n // Setup the context\n this.context = {\n task: this.eventCompletionParams.task,\n caseId: this.eventCompletionParams.caseId,\n eventId: this.eventCompletionParams.eventId,\n reassignedTask: null,\n router: this.router,\n route: this.route,\n sessionStorageService: this.sessionStorageService,\n workAllocationService: this.workAllocationService,\n alertService: this.alertService,\n canBeCompleted: false,\n component: this\n };\n // Initialise state machine\n this.stateMachine = this.service.initialiseStateMachine(this.context);\n // Create states\n this.service.createStates(this.stateMachine);\n // Add transitions for the states\n this.service.addTransitions();\n // Start state machine\n this.service.startStateMachine(this.stateMachine);\n }\n }\n\n public showPortal(portalType: number): void {\n const injector = Injector.create({\n providers: [\n {provide: COMPONENT_PORTAL_INJECTION_TOKEN, useValue: this}\n ]\n });\n switch (portalType) {\n case EventCompletionPortalTypes.TaskCancelled:\n this.selectedComponentPortal = new ComponentPortal(CaseEventCompletionTaskCancelledComponent, null, injector);\n break;\n case EventCompletionPortalTypes.TaskReassigned:\n this.selectedComponentPortal = new ComponentPortal(CaseEventCompletionTaskReassignedComponent, null, injector);\n break;\n }\n }\n}\n","<ng-template [cdkPortalOutlet]=\"selectedComponentPortal\"></ng-template>\n","import { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { CallbackErrorsComponent } from '../../components/error';\nimport { ConditionalShowModule } from '../../directives/conditional-show';\nimport {\n ConditionalShowRegistrarService\n} from '../../directives/conditional-show/services/conditional-show-registrar.service';\nimport { LabelSubstitutorModule } from '../../directives/substitutor/label-substitutor.module';\nimport { AddressesService } from '../../services/addresses';\nimport { CaseFieldService } from '../../services/case-fields/case-field.service';\nimport { DocumentManagementService } from '../../services/document-management';\nimport { FieldsPurger } from '../../services/fields/fields.purger';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { FieldTypeSanitiser } from '../../services/form/field-type-sanitiser';\nimport { FormErrorService } from '../../services/form/form-error.service';\nimport { FormValueService } from '../../services/form/form-value.service';\nimport { HttpService } from '../../services/http/http.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { ProfileNotifier } from '../../services/profile/profile.notifier';\nimport { ProfileService } from '../../services/profile/profile.service';\nimport { RouterHelperService } from '../../services/router';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { ErrorsModule } from '../error/errors.module';\nimport { LoadingSpinnerComponent } from '../loading-spinner/loading-spinner.component';\nimport { PaletteModule } from '../palette/palette.module';\nimport { CaseCreateComponent } from './case-create/case-create.component';\nimport { CaseEditConfirmComponent } from './case-edit-confirm/case-edit-confirm.component';\nimport { CaseEditFormComponent } from './case-edit-form/case-edit-form.component';\nimport { CaseEditPageComponent } from './case-edit-page/case-edit-page.component';\nimport { CaseEditSubmitComponent } from './case-edit-submit/case-edit-submit.component';\nimport { CaseEditComponent } from './case-edit/case-edit.component';\nimport {\n CaseEventCompletionComponent,\n CaseEventCompletionTaskCancelledComponent,\n CaseEventCompletionTaskReassignedComponent\n} from './case-event-completion';\nimport { CaseProgressComponent } from './case-progress/case-progress.component';\nimport {\n EventCompletionStateMachineService,\n EventTriggerService,\n JudicialworkerService,\n PageValidationService,\n WizardFactoryService,\n WorkAllocationService\n} from './services';\nimport { CaseEditWizardGuard } from './services/case-edit-wizard.guard';\nimport { CaseworkerService } from './services/case-worker.service';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n LabelSubstitutorModule,\n ConditionalShowModule,\n ErrorsModule,\n PortalModule\n ],\n declarations: [\n CaseEditConfirmComponent,\n CaseEditComponent,\n CaseEditPageComponent,\n CaseEditFormComponent,\n CaseEditSubmitComponent,\n CaseEventCompletionComponent,\n CaseEventCompletionTaskCancelledComponent,\n CaseEventCompletionTaskReassignedComponent,\n CaseCreateComponent,\n CaseProgressComponent,\n LoadingSpinnerComponent\n ],\n exports: [\n CaseEditConfirmComponent,\n CaseEditComponent,\n CaseEditPageComponent,\n CaseEditFormComponent,\n CaseEditSubmitComponent,\n CaseCreateComponent,\n CaseProgressComponent,\n CallbackErrorsComponent,\n LoadingSpinnerComponent\n ],\n providers: [\n FieldsUtils,\n FieldsPurger,\n ConditionalShowRegistrarService,\n WizardFactoryService,\n FieldTypeSanitiser,\n FormValueService,\n FormErrorService,\n HttpService,\n PageValidationService,\n CaseFieldService,\n OrderService,\n EventTriggerService,\n ProfileService,\n ProfileNotifier,\n AddressesService,\n DocumentManagementService,\n RouterHelperService,\n ProfileService,\n CaseEditWizardGuard,\n WorkAllocationService,\n JudicialworkerService,\n CaseworkerService,\n SessionStorageService,\n EventCompletionStateMachineService\n ]\n})\nexport class CaseEditorModule {}\n","import { Routes } from '@angular/router';\nimport { FileUploadProgressGuard } from '../palette/document/file-upload-progress.guard';\nimport { CaseEditConfirmComponent } from './case-edit-confirm/case-edit-confirm.component';\nimport { CaseEditPageComponent } from './case-edit-page/case-edit-page.component';\nimport { CaseEditSubmitComponent } from './case-edit-submit/case-edit-submit.component';\nimport { CaseEditWizardGuard } from './services/case-edit-wizard.guard';\n\nexport const editorRouting: Routes = [\n {\n path: '',\n resolve: {\n caseEditWizardGuard: CaseEditWizardGuard,\n },\n component: CaseEditPageComponent,\n },\n {\n path: 'submit',\n component: CaseEditSubmitComponent,\n },\n {\n path: 'confirm',\n component: CaseEditConfirmComponent,\n },\n {\n path: ':page',\n resolve: {\n caseEditWizardGuard: CaseEditWizardGuard,\n },\n canDeactivate: [FileUploadProgressGuard],\n component: CaseEditPageComponent,\n }\n];\n","<h1 *ngIf=\"!caseTitle.label\" class=\"heading-h1\">#{{ caseDetails.case_id | ccdCaseReference}}</h1>\n\n<div *ngIf=\"caseTitle.label\" class=\"case-title\">\n <ccd-label-field [caseField]=\"caseTitle\" [caseFields]=\"caseFields\"></ccd-label-field>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { Draft } from '../../domain/draft.model';\n\n@Component({\n selector: 'ccd-case-header',\n templateUrl: './case-header.html',\n styleUrls: ['./case-header.scss']\n})\n\nexport class CaseHeaderComponent implements OnInit {\n\n @Input()\n public caseDetails: CaseView;\n public caseTitle: CaseField;\n public caseFields: CaseField[];\n\n public ngOnInit(): void {\n this.caseTitle = new CaseField();\n if (!this.isDraft() && this.caseDetails.state.title_display) {\n this.caseTitle.label = this.caseDetails.state.title_display;\n this.caseFields = this.getCaseFields();\n }\n }\n\n public isDraft(): boolean {\n return Draft.isDraft(this.caseDetails.case_id);\n }\n\n private getCaseFields(): CaseField[] {\n const caseDataFields = this.caseDetails.tabs.reduce((acc, tab) => {\n return acc.concat(tab.fields);\n }, []);\n\n return caseDataFields.concat(this.caseDetails.metadataFields);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PaletteModule } from '../palette';\nimport { CaseHeaderComponent } from './case-header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n PaletteModule\n ],\n declarations: [\n CaseHeaderComponent,\n ],\n exports: [\n CaseHeaderComponent,\n ]\n})\nexport class CaseHeaderModule {}\n","<pagination-template #p=\"paginationApi\" [id]=\"id\" [maxSize]=\"maxSize\" (pageChange)=\"pageChange.emit($event)\"\n (pageBoundsCorrection)=\"pageBoundsCorrection.emit($event)\">\n <nav role=\"navigation\" aria-label=\"Pagination\">\n <ul class=\"ngx-pagination\" role=\"navigation\" [attr.aria-label]=\"screenReaderPaginationLabel\"\n [class.responsive]=\"responsive\" *ngIf=\"!(autoHide && p.pages.length <= 1)\">\n <li class=\"pagination-previous\" [class.disabled]=\"p.isFirstPage()\" *ngIf=\"directionLinks\">\n <a tabindex=\"0\" *ngIf=\"1 < p.getCurrent()\" (keyup.enter)=\"p.previous()\" (click)=\"p.previous()\"\n [attr.aria-label]=\"previousLabel + ' ' + screenReaderPageLabel\">\n {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </a>\n <span *ngIf=\"p.isFirstPage()\">\n {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </span>\n </li>\n <li class=\"small-screen\">\n {{ p.getCurrent() }} / {{ p.getLastPage() }}\n </li>\n <li [class.current]=\"p.getCurrent() === page.value\" [class.ellipsis]=\"page.label === '...'\"\n *ngFor=\"let page of p.pages\">\n <a tabindex=\"0\" (keyup.enter)=\"p.setCurrent(page.value)\" (click)=\"p.setCurrent(page.value)\"\n *ngIf=\"p.getCurrent() !== page.value\">\n <span class=\"show-for-sr\">{{ screenReaderPageLabel }} </span>\n <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n </a>\n <ng-container *ngIf=\"p.getCurrent() === page.value\">\n <span class=\"show-for-sr\">{{ screenReaderCurrentLabel }} </span>\n <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n </ng-container>\n </li>\n <li class=\"pagination-next\" [class.disabled]=\"p.isLastPage()\" *ngIf=\"directionLinks\">\n <a tabindex=\"0\" *ngIf=\"!p.isLastPage()\" (keyup.enter)=\"p.next()\" (click)=\"p.next()\"\n [attr.aria-label]=\"nextLabel + ' ' + screenReaderPageLabel\">\n {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </a>\n <span *ngIf=\"p.isLastPage()\">\n {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n </span>\n </li>\n </ul>\n </nav>\n</pagination-template>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nfunction coerceToBoolean(input: string | boolean): boolean {\n return !!input && input !== 'false';\n}\n\n@Component({\n selector: 'ccd-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss']\n})\nexport class PaginationComponent {\n @Input()\n public visibilityLabel: string;\n @Input() public id: string;\n @Input() public maxSize = 7;\n @Input() public previousLabel = 'Previous';\n @Input() public nextLabel = 'Next';\n @Input() public screenReaderPaginationLabel = 'Pagination';\n @Input() public screenReaderPageLabel = 'page';\n @Input() public screenReaderCurrentLabel = `You're on page`;\n @Output() public pageChange: EventEmitter<number> = new EventEmitter<number>();\n @Output() public pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n\n private _directionLinks = true;\n private _autoHide = false;\n private _responsive = false;\n\n @Input()\n public get directionLinks(): boolean {\n return this._directionLinks;\n }\n\n public set directionLinks(value: boolean) {\n this._directionLinks = coerceToBoolean(value);\n }\n\n @Input()\n public get autoHide(): boolean {\n return this._autoHide;\n }\n\n public set autoHide(value: boolean) {\n this._autoHide = coerceToBoolean(value);\n }\n\n @Input()\n public get responsive(): boolean {\n return this._responsive;\n }\n\n public set responsive(value: boolean) {\n this._responsive = coerceToBoolean(value);\n }\n}\n","<table class=\"{{'govuk-table ' + classes}}\">\n <caption class=\"govuk-table__caption\">{{caption}}</caption>\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header\" scope=\"col\" *ngIf=\"selectionEnabled\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\"\n [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <!-- This label element is used to hide the standard checkbox with a govuk-styled one -->\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\">\n </label>\n </div>\n </th>\n <th class=\"govuk-table__header\" scope=\"col\" *ngFor=\"let h of tableConfig.columnConfigs\">{{h.header}}</th>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <ng-container *ngFor=\"let c of cases | paginate: { itemsPerPage: pageSize, currentPage: currentPageNo, totalItems: totalResultsCount }\">\n <tr data-selector=\"table-row\" class=\"govuk-table__row\">\n <th data-selector=\"table-header\" class=\"govuk-table__header\" scope=\"row\" *ngIf=\"selectionEnabled\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ c[tableConfig.idField] }}\" name=\"select-{{ c[tableConfig.idField] }}\"\n type=\"checkbox\" (change)=\"changeSelection(c)\" [checked]=\"isSelected(c)\" [disabled]=\"!canBeShared(c)\" (keyup)=\"onKeyUp($event, c)\" />\n <!-- This label element is used to hide the standard checkbox with a govuk-styled one -->\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ c[tableConfig.idField] }}\">\n </label>\n </div>\n </th>\n <ng-container *ngFor=\"let col of tableConfig.columnConfigs; first as isFirst\">\n <th data-selector=\"table-header\" class=\"govuk-table__header\" scope=\"row\" *ngIf=\"isFirst && firstCellIsHeader\">\n <ng-container *ngIf=\"!col.type || col.type === 'text'\">{{c[col.key]}}</ng-container>\n <ng-container *ngIf=\"col.type === 'link' && c.routerLink\">\n <a class=\"govuk-link\" [routerLink]=\"c.routerLink\">{{c[col.key]}}</a>\n </ng-container>\n </th>\n <td data-selector=\"table-cell\" class=\"govuk-table__cell\" *ngIf=\"!(isFirst && firstCellIsHeader)\" [ngSwitch]=\"col?.type\">\n <ng-container *ngIf=\"col.type === 'link' && c.routerLink\">\n <a class=\"govuk-link\" [routerLink]=\"c.routerLink\">{{c[col.key]}}</a>\n </ng-container>\n <ng-container *ngSwitchCase=\"'money'\">-{{ c[col.key] | currency:'GBP' }}</ng-container>\n <ng-container *ngSwitchCase=\"'date'\">{{formatDate(c[col.key])}}</ng-container>\n <ng-container *ngSwitchCase=\"'dateAtTime'\">{{formatDateAtTime(c[col.key])}}</ng-container>\n <ng-container *ngSwitchDefault>{{c[col.key]}}</ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n</table>\n<ccd-pagination *ngIf=\"totalResultsCount > pageSize\"\n (pageChange)=\"goToPage($event)\" \n></ccd-pagination>\n","import { formatDate } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BrowserService } from '../../services/browser/browser.service';\n\nexport class DateTimeFormatUtils {\n public static formatDateAtTime(date: Date, is24Hour: boolean): string {\n return `${formatDate(date, 'dd MMM yyyy', 'en-GB')} at ${DateTimeFormatUtils.formatTime(date, is24Hour)}`;\n }\n\n public static formatTime(date: Date, is24Hour: boolean): string {\n return is24Hour ? formatDate(date, 'HH:mm', 'en-GB') : formatDate(date, 'h:mm a', 'en-GB').toLowerCase();\n }\n}\n\n@Component({\n selector: 'ccd-case-list',\n templateUrl: './case-list.component.html',\n styleUrls: ['./case-list.component.scss']\n})\nexport class CaseListComponent {\n\n @Input() public classes = '';\n\n @Input() public caption: string;\n @Input() public firstCellIsHeader = false;\n\n @Input() public cases: object[];\n\n @Input() public tableConfig: TableConfig = {\n idField: 'id',\n columnConfigs: [\n { header: 'Date', key: 'date', type: 'text' },\n { header: 'Amount', key: 'amount' }\n ]\n };\n\n @Input() public selectionEnabled = false;\n\n @Output() public selection = new EventEmitter<any[]>();\n\n @Input() public selectedCases: any[] = [];\n\n @Input() public currentPageNo: number;\n\n @Input() public totalResultsCount?: number;\n\n @Input() public pageSize?: number;\n\n @Output() public pageChange = new EventEmitter();\n\n constructor(private readonly browserService: BrowserService) { }\n\n public formatDate(date: Date): string {\n return date ? formatDate(date, 'dd MMM yyyy', 'en-GB') : '-';\n }\n\n public formatDateAtTime(date: Date): string {\n return date ? DateTimeFormatUtils.formatDateAtTime(date, false) : '-';\n }\n\n public canBeShared(c: any): boolean {\n return true;\n }\n\n public canAnyBeShared(): boolean {\n return this.cases.some(c => this.canBeShared(c));\n }\n\n public selectAll(): void {\n if (this.allOnPageSelected()) {\n // All cases already selected, so unselect all on this page\n this.selectedCases = [];\n } else {\n this.cases.forEach(aCase => {\n if (!this.isSelected(aCase) && this.canBeShared(aCase)) {\n this.selectedCases = [... this.selectedCases, aCase];\n }\n });\n }\n this.selection.emit(this.selectedCases);\n }\n\n public changeSelection(aCase: any): void {\n if (this.isSelected(aCase)) {\n this.selectedCases.forEach((aSelectedCase, i) => {\n if (aCase.case_id === aSelectedCase.case_id) {\n this.selectedCases = this.selectedCases.slice(0, i).concat(this.selectedCases.slice(i + 1));\n }\n });\n } else {\n if (this.canBeShared(aCase)) {\n this.selectedCases = [...this.selectedCases, aCase];\n }\n }\n this.selection.emit(this.selectedCases);\n }\n\n public isSelected(aCase: any): boolean {\n if (this.selectedCases) {\n for (let index = 0, length = this.selectedCases.length; index < length; index++) {\n if (aCase.case_id === this.selectedCases[index].case_id) {\n return true;\n }\n }\n }\n return false;\n }\n\n public allOnPageSelected(): boolean {\n return !this.cases.some(aCase => !this.isSelected(aCase));\n }\n\n public onKeyUp($event: KeyboardEvent, aCase: any): void {\n if ($event.key === 'Space') {\n if (this.browserService.isFirefox || this.browserService.isSafari || this.browserService.isIEOrEdge) {\n this.changeSelection(aCase);\n }\n }\n }\n\n public goToPage(pageNumber: number) {\n this.currentPageNo = pageNumber;\n this.pageChange.emit(pageNumber);\n }\n}\n\nexport class TableColumnConfig {\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\nexport class TableConfig {\n // Specifies which field of an item uniquely identifies it among others of the same type\n public idField: string;\n\n public columnConfigs: TableColumnConfig[];\n\n constructor() {\n this.idField = '';\n this.columnConfigs = [];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ErrorNotifierService {\n public errorSource: Subject<any> = new Subject<any>();\n public error = this.errorSource.asObservable();\n\n public announceError(error: any) {\n this.errorSource.next(error);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class EventStatusService {\n public static readonly CALLBACK_STATUS_INCOMPLETE = 'INCOMPLETE_CALLBACK';\n public static readonly DELETE_DRAFT_STATUS_INCOMPLETE = 'INCOMPLETE_DELETE_DRAFT';\n public static readonly CALLBACK_STATUS_COMPLETE = 'CALLBACK_COMPLETED';\n public static readonly DELETE_DRAFT_STATUS_COMPLETE = 'DELETE_DRAFT_COMPLETED';\n\n public static isIncomplete (eventStatus: string) {\n if (!eventStatus) {\n return false;\n }\n return EventStatusService.CALLBACK_STATUS_INCOMPLETE === eventStatus\n || EventStatusService.DELETE_DRAFT_STATUS_INCOMPLETE === eventStatus;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\n\n@Injectable()\nexport class JurisdictionService {\n\n public readonly selectedJurisdictionSource = new Subject<Jurisdiction>();\n\n public selectedJurisdiction = this.selectedJurisdictionSource.asObservable();\n\n public announceSelectedJurisdiction(jurisdiction: Jurisdiction) {\n this.selectedJurisdictionSource.next(jurisdiction);\n }\n\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { Banner } from '../../domain/definition/banner.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class BannersService {\n public static readonly V2_MEDIATYPE_BANNERS = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-banners.v2+json;charset=UTF-8';\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getBanners(jurisdictionReferences: string[]): Observable<Banner[]> {\n const url = this.appConfig.getBannersUrl();\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', BannersService.V2_MEDIATYPE_BANNERS)\n .set('Content-Type', 'application/json');\n let params = new HttpParams();\n jurisdictionReferences.forEach(reference => params = params.append('ids', reference));\n return this.httpService\n .get(url, {params, headers, observe: 'body'})\n .pipe(\n map(body => body.banners)\n );\n }\n}\n","export enum NavigationOrigin {\n DRAFT_DELETED,\n ERROR_DELETING_DRAFT,\n DRAFT_RESUMED,\n EVENT_TRIGGERED,\n NO_READ_ACCESS_REDIRECTION\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class NavigationNotifierService {\n public navigationSource: BehaviorSubject<any> = new BehaviorSubject<any>({});\n public navigation = this.navigationSource.asObservable();\n\n public announceNavigation(origin: any) {\n this.navigationSource.next(origin);\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { OptionsType } from '..';\n\n@Injectable()\nexport class RequestOptionsBuilder {\n\n public static readonly FIELD_PREFIX = 'case.';\n\n /**\n * Assess the value to see if it should be included in the request options.\n * If it's null or an \"empty\" string, it shouldn't be.\n *\n * @param value The value to be assessed.\n */\n private static includeParam(value: any): boolean {\n if (value) {\n if (typeof(value) === 'string') {\n return value.trim().length > 0;\n }\n return true;\n }\n return false;\n }\n\n public buildOptions(metaCriteria: object, caseCriteria: object, view?: SearchView): OptionsType {\n // TODO: This should probably be the now built-in URLSearchParams but it\n // requires a bigger refactor and there are bigger fish to fry right now.\n let params = new HttpParams();\n\n if (view) {\n params = params.set('view', view);\n }\n\n if (metaCriteria) {\n for (const criterion of Object.keys(metaCriteria)) {\n // EUI-3490. Make sure the parameter should be included for adding it.\n // This was already handled by the old URLSearchParams mechanism.\n if (RequestOptionsBuilder.includeParam(metaCriteria[criterion])) {\n params = params.set(criterion, metaCriteria[criterion]);\n }\n }\n }\n\n if (caseCriteria) {\n for (const criterion of Object.keys(caseCriteria)) {\n if (RequestOptionsBuilder.includeParam(caseCriteria[criterion])) {\n const key = RequestOptionsBuilder.FIELD_PREFIX + criterion;\n const value = caseCriteria[criterion].trim ? caseCriteria[criterion].trim() : caseCriteria[criterion];\n params = params.set(key, value.replace(/’/i, `'`));\n }\n }\n }\n\n const options: OptionsType = { params, observe: 'body'};\n return options;\n }\n\n}\n\nexport type SearchView = 'SEARCH' | 'WORKBASKET';\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { SearchInput } from '../../components/search-filters';\nimport { SearchResultView } from '../../domain/search/search-result-view.model';\nimport { HttpService, OptionsType } from '../http/http.service';\nimport { LoadingService } from '../loading/loading.service';\nimport { RequestOptionsBuilder, SearchView } from '../request/request.options.builder';\n\n@Injectable()\nexport class SearchService {\n public static readonly V2_MEDIATYPE_SEARCH_INPUTS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-search-input-details.v2+json;charset=UTF-8';\n public static readonly VIEW_SEARCH = 'SEARCH';\n public static readonly VIEW_WORKBASKET = 'WORKBASKET';\n public static readonly FIELD_PREFIX = 'case.';\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly appConfig: AbstractAppConfig,\n private readonly httpService: HttpService,\n private readonly requestOptionsBuilder: RequestOptionsBuilder,\n private readonly loadingService: LoadingService) { }\n\n public search(jurisdictionId: string, caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView): Observable<SearchResultView> {\n const url = this.appConfig.getApiUrl() + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types/${caseTypeId}`\n + `/cases`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const loadingToken = this.loadingService.register();\n return this.httpService\n .get(url, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public searchCases(caseTypeId: string,\n metaCriteria: object, caseCriteria: object, view?: SearchView, sort?: {column: string, order: number}): Observable<{}> {\n const url = this.appConfig.getCaseDataUrl() + `/internal/searchCases?ctid=${caseTypeId}&use_case=${view}`;\n\n const options: OptionsType = this.requestOptionsBuilder.buildOptions(metaCriteria, caseCriteria, view);\n const body: {} = {\n sort,\n size: this.appConfig.getPaginationPageSize()\n };\n const loadingToken = this.loadingService.register();\n return this.httpService\n .post(url, body, options)\n .pipe(\n map(response => response),\n finalize(() => this.loadingService.unregister(loadingToken))\n );\n }\n\n public getSearchInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/search-inputs`;\n }\n\n public getSearchInputs(jurisdictionId: string, caseTypeId: string): Observable<SearchInput[]> {\n const url = this.getSearchInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', SearchService.V2_MEDIATYPE_SEARCH_INPUTS)\n .set('Content-Type', 'application/json');\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, { headers, observe: 'body' })\n .pipe(\n map(body => {\n const searchInputs = body.searchInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n searchInputs.forEach(item => {\n item.field.label = item.label;\n item.field.display_context_parameter = item.display_context_parameter;\n });\n } else {\n throw new Error('Response expired');\n }\n return searchInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { WorkbasketInputModel } from '../../domain';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class WorkbasketInputFilterService {\n public static readonly V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-workbasket-input-details.v2+json;charset=UTF-8';\n\n private currentJurisdiction: string;\n private currentCaseType: string;\n\n constructor(private readonly httpService: HttpService, private readonly appConfig: AbstractAppConfig) {\n }\n\n public getWorkbasketInputUrl(caseTypeId: string): string {\n return `${this.appConfig.getCaseDataUrl()}/internal/case-types/${caseTypeId}/work-basket-inputs`;\n }\n\n public getWorkbasketInputs(jurisdictionId: string, caseTypeId: string): Observable<WorkbasketInputModel[]> {\n const url = this.getWorkbasketInputUrl(caseTypeId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', WorkbasketInputFilterService.V2_MEDIATYPE_WORKBASKET_INPUT_DETAILS)\n .set('Content-Type', 'application/json');\n\n this.currentJurisdiction = jurisdictionId;\n this.currentCaseType = caseTypeId;\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map(body => {\n const workbasketInputs = body.workbasketInputs;\n if (this.isDataValid(jurisdictionId, caseTypeId)) {\n workbasketInputs.forEach(item => {\n item.field.label = item.label;\n if (item.display_context_parameter) {\n item.field.display_context_parameter = item.display_context_parameter;\n }\n });\n } else {\n throw new Error('Response expired');\n }\n return workbasketInputs;\n })\n );\n }\n\n public isDataValid(jurisdictionId: string, caseTypeId: string): boolean {\n return this.currentJurisdiction === jurisdictionId && this.currentCaseType === caseTypeId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AbstractAppConfig as AppConfig } from '../../../app.config';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { HttpService } from '../http/http.service';\n\n@Injectable()\nexport class DefinitionsService {\n\n constructor(private readonly http: HttpService, private readonly appConfig: AppConfig) {}\n\n public getCaseTypes(jurisdictionId: string, access: string): Observable<CaseTypeLite[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions/${jurisdictionId}`\n + `/case-types?access=${access}`;\n\n return this.http\n .get(url).pipe(map(response => response));\n }\n\n public getJurisdictions(access: string): Observable<Jurisdiction[]> {\n const url = this.appConfig.getApiUrl()\n + `/caseworkers/:uid`\n + `/jurisdictions?access=${access}`;\n\n return this.http\n .get(url)\n .pipe(map(response => response));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DefinitionsService } from './definitions.service';\n\n@NgModule({\n providers: [\n DefinitionsService\n ]\n})\n\nexport class DefinitionsModule {}\n","import { Injectable } from '@angular/core';\nimport { isUndefined } from 'util';\nimport { SearchResultViewColumn } from '../../../domain/search/search-result-view-column.model';\nimport { SearchResultViewItem } from '../../../domain/search/search-result-view-item.model';\nimport { SearchResultViewItemComparator } from '../../../domain/search/sorting/search-result-view-item-comparator';\n\n@Injectable()\nexport class SearchResultViewItemComparatorFactory {\n\n public createSearchResultViewItemComparator(column: SearchResultViewColumn): SearchResultViewItemComparator {\n const fieldId = column.case_field_id;\n switch (column.case_field_type.type) {\n case ('MultiSelectList'): {\n return this.textArrayComparator(fieldId);\n }\n case ('Number'):\n case ('MoneyGBP'): {\n return this.numberComparator(fieldId);\n }\n case ('Text'):\n case ('TextArea'):\n case ('Email'):\n case ('Date'):\n case ('DateTime'):\n case ('Label'):\n case ('Postcode'):\n case ('YesOrNo'):\n case ('PhoneUK'):\n case ('FixedList'): {\n return this.stringComparator(fieldId);\n }\n default: {\n return undefined;\n }\n }\n }\n\n private numberComparator(fieldId: string): SearchResultViewItemComparator {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA === null ? 0 : fieldA;\n fieldB = isUndefined(fieldB) || fieldB === null ? 0 : fieldB;\n return fieldA - fieldB;\n }\n } as SearchResultViewItemComparator;\n }\n\n private stringComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n\n private textArrayComparator(fieldId: string) {\n return {\n compare(a: SearchResultViewItem, b: SearchResultViewItem) {\n let fieldA = a.case_fields[fieldId];\n let fieldB = b.case_fields[fieldId];\n fieldA = isUndefined(fieldA) || fieldA == null ? '' : fieldA.join().toLowerCase();\n fieldB = isUndefined(fieldB) || fieldB == null ? '' : fieldB.join().toLowerCase();\n return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;\n }\n } as SearchResultViewItemComparator;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LoadingService } from './loading.service';\n\n@NgModule({\n imports: [\n ],\n declarations: [\n ],\n exports: [\n ],\n providers: [\n LoadingService\n ]\n})\n\nexport class LoadingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgxPaginationModule, PaginatePipe } from 'ngx-pagination';\nimport { PaginationComponent } from './pagination.component';\n\n@NgModule({\n imports: [\n CommonModule,\n NgxPaginationModule\n ],\n declarations: [\n PaginationComponent\n ],\n exports: [\n PaginationComponent,\n PaginatePipe\n ],\n})\nexport class PaginationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport { BrowserService } from '../../services';\nimport { PaginationModule } from '../pagination/pagination.module';\nimport { CaseListComponent } from './case-list.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n NgxPaginationModule,\n PaginationModule\n ],\n declarations: [CaseListComponent],\n exports: [CaseListComponent],\n providers: [\n BrowserService\n ]\n})\nexport class CaseListModule { }\n","\n<h2 class=\"heading-h2\" aria-label=\"Filters\">Filters</h2>\n<form class=\"global-display\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-jurisdiction\">Jurisdiction</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">Select a value</option>\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-type\">Case type</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-type\"\n name=\"case-type\" [(ngModel)]=\"selected.caseType\" [disabled]=\"isCaseTypesDropdownDisabled()\"\n (change)=\"onCaseTypeIdChange()\" aria-controls=\"search-result\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">Select a value</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-state\">State</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-state\"\n name=\"state\" [(ngModel)]=\"selected.caseState\" [disabled]=\"isCaseStatesDropdownDisabled()\"\n aria-controls=\"search-result\">\n <option [ngValue]=\"null\">Any</option>\n <option *ngFor=\"let cs of selectedCaseTypeStates\" [ngValue]=\"cs\">{{cs.name}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndWorkbasketInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let workbasketInput of workbasketInputs\">\n <ccd-field-write [caseField]=\"workbasketInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" [isInSearchBlock]=\"true\" (keyup.enter)=\"apply(null)\"></ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button type=\"button\" class=\"button workbasket-filters-apply\" (click)=\"apply(true)\" [disabled]=\"isApplyButtonDisabled()\" title=\"Apply filter\" aria-label=\"Apply filter\">Apply</button> \n <button type=\"button\" (click)=\"reset()\" class=\"button button-secondary\" title=\"Reset filter\" aria-label=\"Reset filter\">Reset</button>\n</form>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { CaseState } from '../../domain/definition/case-state.model';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { WorkbasketInputModel } from '../../domain/workbasket/workbasket-input.model';\nimport { AlertService } from '../../services/alert/alert.service';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { WorkbasketInputFilterService } from '../../services/workbasket/workbasket-input-filter.service';\n\nconst FORM_GROUP_VAL_LOC_STORAGE = 'workbasket-filter-form-group-value';\nconst SAVED_QUERY_PARAM_LOC_STORAGE = 'savedQueryParams';\nconst REGION_LIST_AND_FRC_FILTER = 'regionList';\n\n@Component({\n selector: 'ccd-workbasket-filters',\n templateUrl: './workbasket-filters.component.html',\n styleUrls: ['./workbasket-filters.component.scss']\n})\nexport class WorkbasketFiltersComponent implements OnInit {\n\n public static readonly PARAM_JURISDICTION = 'jurisdiction';\n public static readonly PARAM_CASE_TYPE = 'case-type';\n public static readonly PARAM_CASE_STATE = 'case-state';\n public caseFields: CaseField[];\n\n @Input()\n public jurisdictions: Jurisdiction[];\n\n @Input()\n public defaults;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n public workbasketInputs: WorkbasketInputModel[];\n public workbasketInputsReady: boolean;\n\n public workbasketDefaults: boolean;\n\n public selected: {\n init?: boolean,\n jurisdiction?: Jurisdiction,\n caseType?: CaseTypeLite,\n caseState?: CaseState,\n formGroup?: FormGroup,\n page?: number,\n metadataFields?: string[]\n };\n\n public formGroup: FormGroup = new FormGroup({});\n\n public selectedJurisdictionCaseTypes?: CaseTypeLite[];\n public selectedCaseTypeStates?: CaseState[];\n\n public initialised = false;\n\n constructor(\n private readonly route: ActivatedRoute,\n private readonly workbasketInputFilterService: WorkbasketInputFilterService,\n private readonly orderService: OrderService,\n private readonly jurisdictionService: JurisdictionService,\n private readonly alertService: AlertService,\n private readonly windowService: WindowService) {\n }\n\n public ngOnInit(): void {\n this.selected = {};\n this.route.queryParams.subscribe(params => {\n if (!this.initialised || !params || !Object.keys(params).length) {\n this.initFilters(false);\n this.initialised = true;\n }\n });\n }\n\n public apply(init): void {\n // Save filters as query parameters for current route\n const queryParams = {};\n if (this.selected.jurisdiction) {\n queryParams[WorkbasketFiltersComponent.PARAM_JURISDICTION] = this.selected.jurisdiction.id;\n }\n if (this.selected.caseType) {\n queryParams[WorkbasketFiltersComponent.PARAM_CASE_TYPE] = this.selected.caseType.id;\n }\n if (this.selected.caseState) {\n queryParams[WorkbasketFiltersComponent.PARAM_CASE_STATE] = this.selected.caseState.id;\n }\n // without explicitly preserving alerts any message on the page\n // would be cleared out because of this initial navigation.\n // The above is only true if no alerts were set prior to loading case list page.\n if (!this.alertService.isPreserveAlerts()) {\n this.alertService.setPreserveAlerts(!this.initialised);\n }\n if (Object.keys(this.formGroup.controls).length === 0) {\n this.selected.formGroup = JSON.parse(localStorage.getItem(FORM_GROUP_VAL_LOC_STORAGE));\n } else {\n // Update form group filters\n this.updateFormGroupFilters();\n\n this.selected.formGroup = this.formGroup;\n }\n this.selected.init = init;\n this.selected.page = 1;\n this.selected.metadataFields = this.getMetadataFields();\n if (init) {\n this.windowService.setLocalStorage(SAVED_QUERY_PARAM_LOC_STORAGE, JSON.stringify(queryParams));\n if (Object.keys(this.formGroup.controls).length > 0) {\n this.windowService.setLocalStorage(FORM_GROUP_VAL_LOC_STORAGE, JSON.stringify(this.formGroup.value));\n }\n }\n // Apply filters\n this.onApply.emit({selected: this.selected, queryParams});\n this.setFocusToTop();\n }\n\n public reset(): void {\n this.windowService.removeLocalStorage(FORM_GROUP_VAL_LOC_STORAGE);\n this.windowService.removeLocalStorage(SAVED_QUERY_PARAM_LOC_STORAGE);\n setTimeout (() => {\n this.resetFieldsWhenNoDefaults();\n this.onReset.emit(true);\n }, 500);\n }\n\n public getMetadataFields(): string[] {\n if (this.workbasketInputs) {\n return this.workbasketInputs\n .filter(workbasketInput => workbasketInput.field.metadata === true)\n .map(workbasketInput => workbasketInput.field.id);\n }\n }\n\n public onJurisdictionIdChange() {\n if (this.selected.jurisdiction) {\n this.jurisdictionService.announceSelectedJurisdiction(this.selected.jurisdiction);\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes.length > 0 ? this.selected.jurisdiction.caseTypes : null;\n // Line was too long for linting so refactored it.\n if (this.workbasketDefaults && this.selectedJurisdictionCaseTypes) {\n this.selected.caseType = this.selectedJurisdictionCaseTypes[0];\n } else {\n this.selected.caseType = null;\n }\n\n this.selected.caseState = null;\n this.clearWorkbasketInputs();\n\n if (!this.isApplyButtonDisabled()) {\n this.onCaseTypeIdChange();\n }\n } else {\n this.resetCaseType();\n this.resetCaseState();\n }\n }\n\n public onCaseTypeIdChange(): void {\n if (this.selected.caseType) {\n this.selectedCaseTypeStates = this.sortStates(this.selected.caseType.states);\n this.selected.caseState = null;\n this.formGroup = new FormGroup({});\n this.clearWorkbasketInputs();\n if (!this.isApplyButtonDisabled()) {\n this.workbasketInputFilterService.getWorkbasketInputs(this.selected.jurisdiction.id, this.selected.caseType.id).pipe(\n take(1)\n ).subscribe(workbasketInputs => {\n this.workbasketInputsReady = true;\n this.workbasketInputs = workbasketInputs\n .sort(this.orderService.sortAsc);\n const formValue = this.windowService.getLocalStorage(FORM_GROUP_VAL_LOC_STORAGE);\n\n workbasketInputs.forEach(item => {\n if (item.field.elementPath) {\n item.field.id = item.field.id + '.' + item.field.elementPath;\n }\n item.field.label = item.label;\n if (formValue) {\n const searchFormValueObject = JSON.parse(formValue);\n item.field.value = searchFormValueObject[item.field.id];\n }\n });\n this.getCaseFields();\n }, error => {\n console.log('Workbasket input fields request will be discarded reason: ', error.message);\n });\n }\n } else {\n this.resetCaseState();\n }\n }\n\n public isCaseTypesDropdownDisabled(): boolean {\n return !this.selectedJurisdictionCaseTypes;\n }\n\n public isCaseStatesDropdownDisabled(): boolean {\n return !this.selected.caseType || !(this.selected.caseType.states && this.selected.caseType.states.length > 0);\n }\n\n public isApplyButtonDisabled(): boolean {\n return !(this.selected.jurisdiction && this.selected.caseType);\n }\n\n public isSearchableAndWorkbasketInputsReady(): boolean {\n return this.selected.jurisdiction && this.selected.caseType && this.workbasketInputsReady;\n }\n\n /**\n * This method is used to clear the previously used\n * form group control filter values to make sure only the\n * currently selected form group control filter values are present.\n *\n * Has been implemented for 'Region and FRC filters' and can be extended\n * in future to incorporate other dynamic filters.\n */\n public updateFormGroupFilters(): void {\n // Read the form group local storage\n const formGroupLS = JSON.parse(this.windowService.getLocalStorage(FORM_GROUP_VAL_LOC_STORAGE));\n\n // Form group local storage is available and contains regionList property\n if (!!formGroupLS && formGroupLS.hasOwnProperty(REGION_LIST_AND_FRC_FILTER)) {\n if (this.formGroup.get(REGION_LIST_AND_FRC_FILTER)) {\n // If regionList value does not match between local storage and form group\n // then the filter value has been changed and we need to clear the old filter values\n if (formGroupLS[REGION_LIST_AND_FRC_FILTER] !== this.formGroup.get(REGION_LIST_AND_FRC_FILTER).value) {\n for (const key in formGroupLS) {\n if (formGroupLS.hasOwnProperty(key)) {\n const value = formGroupLS[key];\n // Clear the filter form group control values if it has a value in local storage\n // The regionList form group control value should be ignored as it always contain the latest value\n if (key !== REGION_LIST_AND_FRC_FILTER && value != null) {\n this.formGroup.get(key).setValue(null);\n }\n }\n }\n }\n }\n }\n }\n\n private sortStates(states: CaseState[]) {\n return states.sort(this.orderService.sortAsc);\n }\n\n /**\n * Try to initialise filters based on query parameters or workbasket defaults.\n * Query parameters, when available, take precedence over workbasket defaults.\n */\n private initFilters(init: boolean) {\n const savedQueryParams = this.windowService.getLocalStorage(SAVED_QUERY_PARAM_LOC_STORAGE);\n const routeSnapshot: ActivatedRouteSnapshot = this.route.snapshot;\n if (savedQueryParams) {\n routeSnapshot.queryParams = JSON.parse(savedQueryParams);\n }\n const selectedJurisdictionId = routeSnapshot.queryParams[WorkbasketFiltersComponent.PARAM_JURISDICTION] ||\n (this.defaults && this.defaults.jurisdiction_id);\n if (selectedJurisdictionId) {\n this.selected.jurisdiction = this.jurisdictions.find(j => selectedJurisdictionId === j.id);\n if (this.selected.jurisdiction && this.selected.jurisdiction.caseTypes.length > 0) {\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;\n this.selected.caseType = this.selectCaseType(this.selected, this.selectedJurisdictionCaseTypes, routeSnapshot);\n if (this.selected.caseType) {\n this.onCaseTypeIdChange();\n this.selected.caseState = this.selectCaseState(this.selected.caseType, routeSnapshot);\n }\n this.workbasketDefaults = true;\n }\n } else {\n this.selected.jurisdiction = null;\n }\n this.apply(init);\n }\n\n private selectCaseState(caseType: CaseTypeLite, routeSnapshot: ActivatedRouteSnapshot): CaseState {\n let caseState;\n if (caseType) {\n const selectedCaseStateId = this.selectCaseStateIdFromQueryOrDefaults(routeSnapshot, (this.defaults && this.defaults.state_id));\n caseState = caseType.states.find(ct => selectedCaseStateId === ct.id);\n }\n return caseState ? caseState : null;\n }\n\n private selectCaseStateIdFromQueryOrDefaults(routeSnapshot: ActivatedRouteSnapshot, defaultCaseStateId: string): string {\n return routeSnapshot.queryParams[WorkbasketFiltersComponent.PARAM_CASE_STATE] || defaultCaseStateId;\n }\n\n private selectCaseType(selected: any, caseTypes: CaseTypeLite[], routeSnapshot: ActivatedRouteSnapshot): CaseTypeLite {\n let caseType;\n if (selected.jurisdiction) {\n const selectedCaseTypeId = this.selectCaseTypeIdFromQueryOrDefaults(routeSnapshot, (this.defaults && this.defaults.case_type_id));\n caseType = caseTypes.find(ct => selectedCaseTypeId === ct.id);\n }\n return caseType ? caseType : caseTypes[0];\n }\n\n private selectCaseTypeIdFromQueryOrDefaults(routeSnapshot: ActivatedRouteSnapshot, defaultCaseTypeId: string): string {\n return routeSnapshot.queryParams[WorkbasketFiltersComponent.PARAM_CASE_TYPE] || defaultCaseTypeId;\n }\n\n private resetFieldsWhenNoDefaults() {\n this.resetCaseState();\n this.resetCaseType();\n this.clearWorkbasketInputs();\n this.workbasketDefaults = false;\n this.selected.jurisdiction = null;\n this.initialised = false;\n this.initFilters(true);\n }\n\n private clearWorkbasketInputs() {\n this.workbasketInputsReady = false;\n this.workbasketInputs = [];\n }\n\n private resetCaseState() {\n this.defaults.state_id = null;\n this.selected.caseState = null;\n this.selectedCaseTypeStates = null;\n }\n\n private resetCaseType() {\n this.selected.caseType = undefined; // option should be blank rather than \"Select a value\" in case of reset.\n this.selectedJurisdictionCaseTypes = null;\n }\n\n private setFocusToTop() {\n window.scrollTo(0, 0);\n\n const topContainer = document.getElementById('search-result-heading__text');\n if (topContainer) {\n topContainer.focus();\n }\n }\n\n private getCaseFields(): void {\n if (this.workbasketInputs) {\n this.caseFields = this.workbasketInputs.map(item => FieldsUtils.convertToCaseField(item.field));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ConditionalShowModule } from '../../directives/conditional-show/conditional-show.module';\nimport { AlertService } from '../../services/alert/alert.service';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { WorkbasketInputFilterService } from '../../services/workbasket/workbasket-input-filter.service';\nimport { PaletteModule } from '../palette/palette.module';\nimport { WorkbasketFiltersComponent } from './workbasket-filters.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n ConditionalShowModule\n ],\n declarations: [\n WorkbasketFiltersComponent,\n ],\n exports: [\n WorkbasketFiltersComponent,\n ],\n providers: [\n WorkbasketInputFilterService,\n OrderService,\n JurisdictionService,\n AlertService,\n WindowService,\n ]\n})\nexport class WorkbasketFiltersModule {}\n","export type AccessTypeEnum =\n 'read'\n | 'create'\n | 'update';\n\nexport const READ_ACCESS: AccessTypeEnum = 'read';\nexport const CREATE_ACCESS: AccessTypeEnum = 'create';\nexport const UPDATE_ACCESS: AccessTypeEnum = 'update';\n","<ccd-workbasket-filters\n *ngIf=\"isVisible\"\n [jurisdictions]=\"jurisdictions\"\n [defaults]=\"defaults\"\n (onApply)=\"onWrapperApply($event)\"\n (onReset)=\"onWrapperReset($event)\"\n></ccd-workbasket-filters>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { READ_ACCESS } from '../../domain/case-view/access-types.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\n\n@Component({\n selector: 'ccd-case-list-filters',\n templateUrl: './case-list-filters.component.html'\n})\nexport class CaseListFiltersComponent implements OnInit {\n\n @Input()\n public defaults;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n public jurisdictions: Jurisdiction[];\n public isVisible: boolean;\n\n constructor(\n private readonly definitionsService: DefinitionsService,\n ) {\n }\n\n public ngOnInit(): void {\n this.isVisible = false;\n\n this.definitionsService.getJurisdictions(READ_ACCESS)\n .subscribe(jurisdictions => {\n this.isVisible = jurisdictions.length > 0;\n this.jurisdictions = jurisdictions;\n });\n }\n\n public onWrapperApply(value) {\n this.onApply.emit(value);\n }\n\n public onWrapperReset(value) {\n this.onReset.emit(value);\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AlertService, DefinitionsModule, JurisdictionService, OrderService, WindowService,\n WorkbasketInputFilterService } from '../../services';\nimport { PaletteModule } from '../palette';\nimport { WorkbasketFiltersModule } from '../workbasket-filters';\nimport { CaseListFiltersComponent } from './case-list-filters.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n DefinitionsModule,\n WorkbasketFiltersModule\n ],\n declarations: [\n CaseListFiltersComponent,\n ],\n exports: [\n CaseListFiltersComponent,\n ],\n providers: [\n WorkbasketInputFilterService,\n OrderService,\n JurisdictionService,\n AlertService,\n WindowService\n ]\n})\nexport class CaseListFiltersModule {}\n","import { Type } from 'class-transformer';\nimport { CaseTab } from '../../../domain/case-view/case-tab.model';\nimport { CaseViewEvent } from '../../../domain/case-view/case-view-event.model';\nimport { Jurisdiction } from '../../../domain/definition/jurisdiction.model';\n\n// @dynamic\nexport class CaseHistoryCaseType {\n public id: string;\n public name: string;\n public description?: string;\n\n @Type(() => Jurisdiction)\n public jurisdiction: Jurisdiction;\n}\n\n// @dynamic\nexport class CaseHistory {\n public case_id?: string;\n\n @Type(() => CaseHistoryCaseType)\n public caseType: CaseHistoryCaseType;\n\n @Type(() => CaseTab)\n public tabs: CaseTab[];\n\n @Type(() => CaseViewEvent)\n public event: CaseViewEvent;\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { HttpErrorService } from '../../../services/http/http-error.service';\nimport { HttpService } from '../../../services/http/http.service';\nimport { CaseHistory } from '../domain/case-history.model';\n\n@Injectable()\nexport class CaseHistoryService {\n public static readonly V2_MEDIATYPE_CASE_EVENT_VIEW =\n 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-event-view.v2+json;charset=UTF-8';\n\n constructor(private readonly httpService: HttpService,\n private readonly httpErrorService: HttpErrorService,\n private readonly appConfig: AbstractAppConfig) {}\n\n public get(caseId: string, eventId: string): Observable<CaseHistory> {\n const url = this.appConfig.getCaseHistoryUrl(caseId, eventId);\n const headers = new HttpHeaders()\n .set('experimental', 'true')\n .set('Accept', CaseHistoryService.V2_MEDIATYPE_CASE_EVENT_VIEW)\n .set('Content-Type', 'application/json');\n\n return this.httpService\n .get(url, {headers, observe: 'body'})\n .pipe(\n map((caseHistory: object) => plainToClass(CaseHistory, caseHistory)),\n catchError(\n (error: any): any => {\n this.httpErrorService.setError(error);\n return throwError(error);\n }\n )) as Observable<CaseHistory>;\n }\n}\n","<div *ngIf=\"isDataLoaded()\">\n <div class=\"grid-row\">\n <div class=\"column-full\">\n <ccd-case-header [caseDetails]=\"caseDetails\"></ccd-case-header>\n </div>\n </div>\n <div class=\"grid-row\">\n <div class=\"column-full\">\n <div>\n <h2 class=\"heading-h2\">Event Details</h2>\n <table class=\"EventDetails\" aria-describedby=\"event details table\">\n <tbody>\n <tr>\n <th>Date</th>\n <td>{{caseHistory.event.timestamp | ccdDate}}</td>\n </tr>\n <tr>\n <th>Author</th>\n <td>{{caseHistory.event.user_first_name | titlecase}} {{caseHistory.event.user_last_name | uppercase}}</td>\n </tr>\n <tr>\n <th>End state</th>\n <td>{{caseHistory.event.state_name}}</td>\n </tr>\n <tr>\n <th>Event</th>\n <td>{{caseHistory.event.event_name}}</td>\n </tr>\n <tr>\n <th>Summary</th>\n <td>{{caseHistory.event.summary | ccdDash}}</td>\n </tr>\n <tr>\n <th>Comment</th>\n <td>{{caseHistory.event.comment | ccdDash}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n <div>\n <h2 class=\"heading-h2\">Case Details</h2>\n <ng-container *ngFor=\"let tab of tabs\">\n <div class=\"caseHistorySection\">\n <h3 class=\"heading-h3\">{{tab.label}}</h3>\n <table class=\"CaseHistory\" id=\"{{tab.id}}\" aria-describedby=\"case history table\">\n <ng-container *ngFor=\"let field of tab | ccdTabFields | ccdReadFieldsFilter:false :undefined :true\">\n <div ccdLabelSubstitutor [caseField]=\"field\" [contextFields]=\"tab.fields\" [hidden]=\"field.hidden\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\">\n <th id=\"case-viewer-label-header\">\n <div class=\"case-viewer-label\">{{field.label}}</div>\n </th>\n <td>\n <ccd-field-read [caseField]=\"field\" [caseReference]=\"caseHistory.case_id\"></ccd-field-read>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\">\n <td colspan=\"2\">\n <ccd-field-read [caseField]=\"field\" [caseReference]=\"caseHistory.case_id\"></ccd-field-read>\n </td>\n </tr>\n </ng-container>\n </div>\n </ng-container>\n </table>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { ShowCondition } from '../../directives/conditional-show/domain/conditional-show.model';\nimport { CaseTab } from '../../domain/case-view/case-tab.model';\nimport { CaseView } from '../../domain/case-view/case-view.model';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { AlertService } from '../../services/alert/alert.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { CaseNotifier } from '../case-editor/services/case.notifier';\nimport { CaseHistory } from './domain/case-history.model';\nimport { CaseHistoryService } from './services/case-history.service';\n\n@Component({\n selector: 'ccd-case-history',\n templateUrl: './case-history.component.html',\n styleUrls: ['./case-history.component.scss']\n})\nexport class CaseHistoryComponent implements OnInit, OnDestroy {\n public static readonly PARAM_EVENT_ID = 'eid';\n\n private static readonly ERROR_MESSAGE = 'No case history to show';\n\n @Input()\n public event: string;\n\n public caseHistory: CaseHistory;\n public caseDetails: CaseView;\n public tabs: CaseTab[];\n public caseSubscription: Subscription;\n\n constructor(\n private readonly route: ActivatedRoute,\n private readonly alertService: AlertService,\n private readonly orderService: OrderService,\n private readonly caseNotifier: CaseNotifier,\n private readonly caseHistoryService: CaseHistoryService) { }\n\n public ngOnInit() {\n this.caseSubscription = this.caseNotifier.caseView.subscribe(caseDetails => {\n this.caseDetails = caseDetails;\n const eventId = this.route.snapshot.paramMap.get(CaseHistoryComponent.PARAM_EVENT_ID) || this.event;\n this.caseHistoryService\n .get(this.caseDetails.case_id, eventId)\n .pipe(\n map(caseHistory => {\n if (!caseHistory) {\n const error = new HttpError();\n error.message = CaseHistoryComponent.ERROR_MESSAGE;\n throw error;\n }\n\n this.caseHistory = caseHistory;\n this.tabs = this.orderService.sort(this.caseHistory.tabs);\n this.tabs = this.sortTabFieldsAndFilterTabs(this.tabs);\n }),\n catchError(error => {\n console.error(error);\n if (error.status !== 401 && error.status !== 403) {\n this.alertService.error(error.message);\n }\n return throwError(error);\n })\n ).toPromise();\n });\n }\n\n public ngOnDestroy(): void {\n if (this.caseSubscription) {\n this.caseSubscription.unsubscribe();\n }\n }\n\n public isDataLoaded() {\n return !!(this.caseDetails && this.caseHistory);\n }\n\n private sortTabFieldsAndFilterTabs(tabs: CaseTab[]): CaseTab[] {\n return tabs\n .map(tab => Object.assign({}, tab, { fields: this.orderService.sort(tab.fields) }))\n .filter(tab => ShowCondition.getInstance(tab.show_condition).matchByContextFields(tab.fields));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ConditionalShowModule, LabelSubstitutorModule } from '../../directives';\nimport { CaseHeaderModule } from '../case-header/case-header.module';\nimport { PaletteModule } from '../palette';\nimport { CaseHistoryComponent } from './case-history.component';\nimport { CaseHistoryService } from './services/case-history.service';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n CaseHeaderModule,\n ConditionalShowModule,\n PaletteModule,\n LabelSubstitutorModule\n ],\n declarations: [\n CaseHistoryComponent\n ],\n providers: [\n CaseHistoryService,\n ],\n exports: [\n CaseHistoryComponent,\n ]\n})\nexport class CaseHistoryModule {}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CaseViewEvent } from '../../domain/case-view/case-view-event.model';\nimport { HttpError } from '../../domain/http/http-error.model';\nimport { AlertService } from '../../services/alert/alert.service';\nimport { CaseNotifier, CasesService } from '../case-editor';\n\nexport enum CaseTimelineDisplayMode {\n TIMELINE,\n DETAILS\n}\n@Component({\n selector: 'ccd-case-timeline',\n templateUrl: './case-timeline.component.html'\n})\nexport class CaseTimelineComponent implements OnInit {\n\n @Input()\n public case: string;\n\n public events: CaseViewEvent[];\n public selectedEventId: string;\n public dspMode = CaseTimelineDisplayMode;\n public displayMode: CaseTimelineDisplayMode = CaseTimelineDisplayMode.TIMELINE;\n\n constructor(\n private readonly caseNotifier: CaseNotifier,\n private readonly casesService: CasesService,\n private readonly alertService: AlertService,\n ) {}\n\n public ngOnInit() {\n this.casesService\n .getCaseViewV2(this.case)\n .pipe(\n map(caseView => {\n this.events = caseView.events;\n this.caseNotifier.announceCase(caseView);\n })\n )\n .toPromise()\n .catch((error: HttpError) => {\n this.alertService.error(error.message);\n return throwError(error);\n });\n }\n\n public isDataLoaded(): boolean {\n return this.events ? true : false;\n }\n\n public caseHistoryClicked(eventId: string) {\n this.displayMode = CaseTimelineDisplayMode.DETAILS;\n this.selectedEventId = eventId;\n }\n\n public goToCaseTimeline(): void {\n this.displayMode = CaseTimelineDisplayMode.TIMELINE;\n }\n}\n","<div *ngIf=\"isDataLoaded()\">\n <ng-container [ngSwitch]=\"displayMode\">\n <ng-container *ngSwitchCase=\"dspMode.TIMELINE\">\n <ccd-event-log [events]=\"events\" (onCaseHistory)=\"caseHistoryClicked($event)\" *ngIf=\"displayMode === dspMode.TIMELINE\"></ccd-event-log>\n </ng-container>\n <ng-container *ngSwitchCase=\"dspMode.DETAILS\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTimeline()\" class=\"govuk-back-link\">Back to case timeline</a>\n </li>\n </ol>\n </div>\n <ccd-case-history [event]=\"selectedEventId\"></ccd-case-history>\n </ng-container>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CaseHistoryModule } from '../case-history';\nimport { ErrorsModule } from '../error/errors.module';\nimport { PaletteModule } from '../palette';\nimport { CaseTimelineComponent } from './case-timeline.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ErrorsModule,\n FormsModule,\n ReactiveFormsModule,\n CaseHistoryModule,\n PaletteModule\n ],\n declarations: [\n CaseTimelineComponent\n ],\n exports: [\n CaseTimelineComponent\n ]\n})\n\nexport class CaseTimelineModule {}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, NavigationEnd, Resolve, Router } from '@angular/router';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { of, throwError } from 'rxjs';\nimport { catchError, filter, map } from 'rxjs/operators';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { Draft } from '../../../domain/draft.model';\nimport { DraftService } from '../../../services/draft/draft.service';\nimport { NavigationNotifierService } from '../../../services/navigation/navigation-notifier.service';\nimport { NavigationOrigin } from '../../../services/navigation/navigation-origin.model';\nimport { CaseNotifier } from '../../case-editor/services/case.notifier';\nimport { CasesService } from '../../case-editor/services/cases.service';\n\n@Injectable()\nexport class CaseResolver implements Resolve<CaseView> {\n\n public static readonly EVENT_REGEX = new RegExp('\\/trigger\\/.*?\\/submit$');\n public static readonly PARAM_CASE_ID = 'cid';\n public static readonly CASE_CREATED_MSG = 'The case has been created successfully';\n\n // we need to run the CaseResolver on every child route of 'case/:jid/:ctid/:cid'\n // this is achieved with runGuardsAndResolvers: 'always' configuration\n // we cache the case view to avoid retrieving it for each child route\n public previousUrl: string;\n constructor(private readonly caseNotifier: CaseNotifier,\n private readonly casesService: CasesService,\n private readonly draftService: DraftService,\n private readonly navigationNotifierService: NavigationNotifierService,\n private readonly router: Router) {\n router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n ).subscribe((event: NavigationEnd) => {\n this.previousUrl = event.url;\n });\n }\n\n public resolve(route: ActivatedRouteSnapshot): Promise<CaseView> {\n\n const cid = route.paramMap.get(CaseResolver.PARAM_CASE_ID);\n\n if (!cid) {\n // when redirected to case view after a case created, and the user has no READ access,\n // the post returns no id\n this.navigateToCaseList();\n } else {\n return this.isRootCaseViewRoute(route) ? this.getAndCacheCaseView(cid)\n : this.caseNotifier.cachedCaseView ? Promise.resolve(this.caseNotifier.cachedCaseView)\n : this.getAndCacheCaseView(cid);\n }\n }\n\n private navigateToCaseList() {\n this.navigationNotifierService.announceNavigation({action: NavigationOrigin.NO_READ_ACCESS_REDIRECTION});\n }\n\n private isRootCaseViewRoute(route: ActivatedRouteSnapshot) {\n // is route case/:jid/:ctid/:cid\n return ((!route.firstChild || !route.firstChild.url.length) && !this.isTabViewRoute(route));\n }\n\n private isTabViewRoute(route: ActivatedRouteSnapshot) {\n // is route case/:jid/:ctid/:cid#fragment\n return route.firstChild && route.firstChild.fragment;\n }\n\n private getAndCacheCaseView(cid): Promise<CaseView> {\n if (this.caseNotifier.cachedCaseView && this.caseNotifier.cachedCaseView.case_id && this.caseNotifier.cachedCaseView.case_id === cid) {\n this.caseNotifier.announceCase(this.caseNotifier.cachedCaseView);\n return of(this.caseNotifier.cachedCaseView).toPromise();\n } else {\n if (Draft.isDraft(cid)) {\n return this.getAndCacheDraft(cid);\n } else {\n return this.casesService\n .getCaseViewV2(cid)\n .pipe(\n map(caseView => {\n this.caseNotifier.cachedCaseView = plainToClassFromExist(new CaseView(), caseView);\n this.caseNotifier.announceCase(this.caseNotifier.cachedCaseView);\n return this.caseNotifier.cachedCaseView;\n }),\n catchError(error => this.checkAuthorizationError(error))\n ).toPromise();\n }\n }\n }\n\n private getAndCacheDraft(cid): Promise<CaseView> {\n if (this.caseNotifier.cachedCaseView && this.caseNotifier.cachedCaseView.case_id && this.caseNotifier.cachedCaseView.case_id === cid) {\n this.caseNotifier.announceCase(this.caseNotifier.cachedCaseView);\n return of(this.caseNotifier.cachedCaseView).toPromise();\n } else {\n return this.draftService\n .getDraft(cid)\n .pipe(\n map(caseView => {\n this.caseNotifier.cachedCaseView = plainToClassFromExist(new CaseView(), caseView);\n this.caseNotifier.announceCase(this.caseNotifier.cachedCaseView);\n return this.caseNotifier.cachedCaseView;\n }),\n catchError(error => this.checkAuthorizationError(error))\n ).toPromise() as Promise<CaseView>;\n }\n }\n\n private checkAuthorizationError(error: any) {\n // TODO Should be logged to remote logging infrastructure\n console.error(error);\n if (CaseResolver.EVENT_REGEX.test(this.previousUrl) && error.status === 404) {\n this.router.navigate(['/list/case']);\n return of(null);\n }\n if (error.status !== 401 && error.status !== 403) {\n this.router.navigate(['/error']);\n }\n return throwError(error);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve } from '@angular/router';\nimport { throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { Profile } from '../../../domain/profile/profile.model';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { ProfileNotifier } from '../../../services/profile/profile.notifier';\nimport { ProfileService } from '../../../services/profile/profile.service';\nimport { CasesService } from '../../case-editor/services/cases.service';\n\n@Injectable()\nexport class EventTriggerResolver implements Resolve<CaseEventTrigger> {\n public static readonly PARAM_CASE_ID = 'cid';\n public static readonly PARAM_EVENT_ID = 'eid';\n public static readonly IGNORE_WARNING = 'ignoreWarning';\n private static readonly IGNORE_WARNING_VALUES = [ 'true', 'false' ];\n private cachedEventTrigger: CaseEventTrigger;\n private cachedProfile: Profile;\n constructor(\n private readonly casesService: CasesService,\n private readonly alertService: AlertService,\n private readonly profileService: ProfileService,\n private readonly profileNotifier: ProfileNotifier,\n ) {}\n\n public resolve(route: ActivatedRouteSnapshot): Promise<CaseEventTrigger> {\n return this.isRootTriggerEventRoute(route) ? this.getAndCacheEventTrigger(route)\n : this.cachedEventTrigger ? Promise.resolve(this.cachedEventTrigger)\n : this.getAndCacheEventTrigger(route);\n }\n\n private isRootTriggerEventRoute(route: ActivatedRouteSnapshot) {\n // if route is 'trigger/:eid'\n return !route.firstChild || !route.firstChild.url.length;\n }\n\n private getAndCacheEventTrigger(route: ActivatedRouteSnapshot): Promise<CaseEventTrigger> {\n const cid = route.parent.paramMap.get(EventTriggerResolver.PARAM_CASE_ID);\n // tslint:disable-next-line: prefer-const\n let caseTypeId: string;\n const eventTriggerId = route.paramMap.get(EventTriggerResolver.PARAM_EVENT_ID);\n let ignoreWarning = route.queryParamMap.get(EventTriggerResolver.IGNORE_WARNING);\n if (-1 === EventTriggerResolver.IGNORE_WARNING_VALUES.indexOf(ignoreWarning)) {\n ignoreWarning = 'false';\n }\n\n if (this.cachedProfile) {\n this.profileNotifier.announceProfile(this.cachedProfile);\n } else {\n this.profileService.get().subscribe(profile => {\n this.cachedProfile = profile;\n this.profileNotifier.announceProfile(profile);\n });\n }\n\n return this.casesService\n .getEventTrigger(caseTypeId, eventTriggerId, cid, ignoreWarning)\n .pipe(\n map(eventTrigger => this.cachedEventTrigger = eventTrigger),\n catchError(error => {\n this.alertService.error(error.message);\n return throwError(error);\n })\n ).toPromise();\n }\n}\n","<div *ngIf=\"isDataLoaded()\" class=\"screen-990\">\n <ccd-activity [caseId]=\"caseDetails.case_id\" [displayMode]=\"BANNER\"></ccd-activity>\n <ccd-case-edit [caseDetails]=\"caseDetails\"\n [submit]=\"submit()\"\n [validate]=\"validate()\"\n [eventTrigger]=\"eventTrigger\"\n (cancelled)=\"cancel()\"\n (submitted)=\"submitted($event)\"></ccd-case-edit>\n</div>\n","import { Component, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Observable, Subscription } from 'rxjs';\nimport { Activity, DisplayMode } from '../../../domain/activity/activity.model';\nimport { CaseEventData } from '../../../domain/case-event-data.model';\nimport { CaseEventTrigger } from '../../../domain/case-view/case-event-trigger.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { CaseReferencePipe } from '../../../pipes/case-reference/case-reference.pipe';\nimport { ActivityPollingService } from '../../../services/activity/activity.polling.service';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { EventStatusService } from '../../../services/eventStatusService/event-status.service';\nimport { CaseNotifier } from '../../case-editor/services/case.notifier';\nimport { CasesService } from '../../case-editor/services/cases.service';\n\n\n@Component({\n selector: 'ccd-case-event-trigger',\n templateUrl: './case-event-trigger.html'\n})\nexport class CaseEventTriggerComponent implements OnInit, OnDestroy {\n public BANNER = DisplayMode.BANNER;\n public eventTrigger: CaseEventTrigger;\n public caseDetails: CaseView;\n public activitySubscription: Subscription;\n public caseSubscription: Subscription;\n public parentUrl: string;\n\n constructor(\n private readonly ngZone: NgZone,\n private readonly casesService: CasesService,\n private readonly caseNotifier: CaseNotifier,\n private readonly router: Router,\n private readonly alertService: AlertService,\n private readonly route: ActivatedRoute,\n private readonly caseReferencePipe: CaseReferencePipe,\n private readonly activityPollingService: ActivityPollingService\n ) {\n }\n\n public ngOnInit(): void {\n if (this.route.snapshot.data.case) {\n this.caseDetails = this.route.snapshot.data.case;\n } else {\n this.caseSubscription = this.caseNotifier.caseView.subscribe(caseDetails => {\n this.caseDetails = caseDetails;\n });\n }\n this.eventTrigger = this.route.snapshot.data.eventTrigger;\n if (this.activityPollingService.isEnabled) {\n this.ngZone.runOutsideAngular( () => {\n this.activitySubscription = this.postEditActivity().subscribe((_resolved) => {\n // console.log('Posted EDIT activity and result is: ' + JSON.stringify(_resolved));\n });\n });\n }\n this.route.parent.url.subscribe(path => {\n this.parentUrl = `/${path.join('/')}`;\n });\n }\n\n public ngOnDestroy(): void {\n if (this.activitySubscription && this.activityPollingService.isEnabled) {\n this.activitySubscription.unsubscribe();\n }\n if (!this.route.snapshot.data.case && this.caseSubscription) {\n this.caseSubscription.unsubscribe();\n }\n }\n\n public postEditActivity(): Observable<Activity[]> {\n return this.activityPollingService.postEditActivity(this.caseDetails.case_id);\n }\n\n public submit(): (sanitizedEditForm: CaseEventData) => Observable<object> {\n return (sanitizedEditForm: CaseEventData) =>\n this.casesService.createEvent(this.caseDetails, sanitizedEditForm);\n }\n\n public validate(): (sanitizedEditForm: CaseEventData, pageId: string) => Observable<object> {\n return (sanitizedEditForm: CaseEventData, pageId: string) => this.casesService.validateCase(\n this.caseDetails.case_type.id, sanitizedEditForm,\n pageId);\n }\n\n public submitted(event: any): void {\n const eventStatus: string = event['status'];\n this.router\n .navigate([this.parentUrl])\n .then(() => {\n const caseReference = this.caseReferencePipe.transform(this.caseDetails.case_id.toString());\n if (EventStatusService.isIncomplete(eventStatus)) {\n this.alertService.warning(`Case #${caseReference} has been updated with event: ${this.eventTrigger.name} `\n + `but the callback service cannot be completed`);\n } else {\n this.alertService.success(`Case #${caseReference} has been updated with event: ${this.eventTrigger.name}`, true);\n }\n });\n }\n\n public cancel(): Promise<boolean> {\n return this.router.navigate([this.parentUrl]);\n }\n\n public isDataLoaded(): boolean {\n return !!(this.eventTrigger && this.caseDetails);\n }\n}\n","<div *ngIf=\"isDataLoaded()\">\n <ccd-case-viewer [hasPrint]=\"hasPrint\"\n [hasEventSelector]=\"hasEventSelector\"></ccd-case-viewer>\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { plainToClassFromExist } from 'class-transformer';\nimport { Observable, Subscription, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { Draft } from '../../../domain/draft.model';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { DraftService } from '../../../services/draft/draft.service';\nimport { NavigationNotifierService } from '../../../services/navigation/navigation-notifier.service';\nimport { CaseNotifier } from '../../case-editor/services/case.notifier';\nimport { CasesService } from '../../case-editor/services/cases.service';\n\n\n@Component({\n selector: 'ccd-case-view',\n templateUrl: 'case-view.component.html'\n})\nexport class CaseViewComponent implements OnInit, OnDestroy {\n\n @Input()\n public case: string;\n @Input()\n public hasPrint = true;\n @Input()\n public hasEventSelector = true;\n\n @Output()\n public navigationTriggered: EventEmitter<any> = new EventEmitter();\n\n public navigationSubscription: Subscription;\n public caseDetails: CaseView;\n\n constructor(\n private readonly navigationNotifierService: NavigationNotifierService,\n private readonly caseNotifier: CaseNotifier,\n private readonly casesService: CasesService,\n private readonly draftService: DraftService,\n private readonly alertService: AlertService,\n ) {}\n\n public ngOnInit(): void {\n this.getCaseView(this.case)\n .pipe(\n map(caseView => {\n this.caseDetails = plainToClassFromExist(new CaseView(), caseView);\n this.caseNotifier.announceCase(this.caseDetails);\n })\n )\n .toPromise()\n .catch(error => this.checkAuthorizationError(error));\n this.navigationSubscription = this.navigationNotifierService.navigation.subscribe(navigation => {\n this.navigationTriggered.emit(navigation);\n });\n }\n\n public ngOnDestroy(): void {\n if (this.navigationSubscription) {\n this.navigationSubscription.unsubscribe();\n }\n }\n\n public isDataLoaded(): boolean {\n return !!this.caseDetails;\n }\n\n private getCaseView(cid): Observable<CaseView> {\n if (Draft.isDraft(cid)) {\n return this.getDraft(cid);\n } else {\n return this.casesService.getCaseViewV2(cid);\n }\n }\n\n private getDraft(cid): Observable<CaseView> {\n return this.draftService\n .getDraft(cid);\n }\n\n private checkAuthorizationError(error: any) {\n // TODO Should be logged to remote logging infrastructure\n console.error(error);\n if (error.status !== 401 && error.status !== 403) {\n this.alertService.error(error.message);\n }\n return throwError(error);\n }\n}\n","<div>\n <cut-alert type=\"information\">This case requires {{accessType | lowercase}} access.<br />\n <ng-container *ngIf=\"accessType === 'CHALLENGED'\">This is because the case is outside your work area. If you request access to the case, it will be logged for auditing purposes.</ng-container>\n <ng-container *ngIf=\"accessType === 'SPECIFIC'\">This means it's outside your jurisdiction and requires authorisation. If you request access to the case, it will be logged for auditing purposes.</ng-container>\n </cut-alert>\n <h1 class=\"heading-h1\">#{{ caseDetails.case_id | ccdCaseReference}}</h1>\n <h2 class=\"govuk-heading-m\">Case details</h2>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.basicFields?.caseNameHmctsInternal\">\n <dt class=\"govuk-summary-list__key summary-key\">Case name</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.basicFields.caseNameHmctsInternal}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.case_type?.jurisdiction?.name\">\n <dt class=\"govuk-summary-list__key summary-key\">Service</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.case_type.jurisdiction.name}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"caseDetails.state?.description\">\n <dt class=\"govuk-summary-list__key summary-key\">State</dt>\n <dd class=\"govuk-summary-list__value\">{{caseDetails.state.description}}</dd>\n </div>\n <div class=\"govuk-summary-list__row\" *ngIf=\"courtOrHearingCentre\">\n <dt class=\"govuk-summary-list__key summary-key\">Court or hearing centre</dt>\n <dd class=\"govuk-summary-list__value\">{{courtOrHearingCentre | titlecase}}</dd>\n </div>\n\n <div class=\"govuk-summary-list__row\" *ngIf=\"accessType\">\n <dt class=\"govuk-summary-list__key summary-key\">Access</dt>\n <dd class=\"govuk-summary-list__value\">{{accessType | titlecase}}</dd>\n </div>\n </dl>\n</div>\n<div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" [routerLink]=\"getRequestUrl(accessType)\"> Request access </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\"> Cancel </a>\n </p>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { CasesService } from '../../case-editor/services/cases.service';\n\n@Component({\n selector: 'ccd-case-basic-access-view',\n templateUrl: 'case-basic-access-view.component.html'\n})\nexport class CaseBasicAccessViewComponent implements OnInit, OnDestroy {\n\n @Input()\n public caseDetails: CaseView = null;\n\n @Input()\n public accessType: string = null;\n\n public courtOrHearingCentre: string = null;\n private courtOrHearingCentreSubscription: Subscription;\n\n constructor(\n private readonly casesService: CasesService\n ) {}\n\n public ngOnInit(): void {\n const locationId = this.caseDetails &&\n this.caseDetails.basicFields &&\n this.caseDetails.basicFields.caseManagementLocation &&\n this.caseDetails.basicFields.caseManagementLocation.baseLocation ?\n this.caseDetails.basicFields.caseManagementLocation.baseLocation : null;\n\n if (locationId) {\n this.courtOrHearingCentreSubscription = this.casesService.getCourtOrHearingCentreName(locationId).subscribe(courtOrHearingCentre =>\n this.courtOrHearingCentre = courtOrHearingCentre[0] && courtOrHearingCentre[0].building_location_name ?\n courtOrHearingCentre[0].building_location_name :\n null\n );\n }\n }\n\n public ngOnDestroy(): void {\n if (this.courtOrHearingCentreSubscription) {\n this.courtOrHearingCentreSubscription.unsubscribe();\n }\n }\n\n public onCancel(): void {\n // Navigate to the previous page\n window.history.go(-1);\n }\n\n public getRequestUrl(accessType: string): string {\n return accessType === 'CHALLENGED' ? 'challenged-access-request' : 'specific-access-request';\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'ccd-delete-or-cancel-dialog',\n templateUrl: './delete-or-cancel-dialog.component.html',\n styleUrls: ['../action-dialog.component.scss']\n})\nexport class DeleteOrCancelDialogComponent {\n\n public result: string;\n\n constructor(private readonly matDialogRef: MatDialogRef<DeleteOrCancelDialogComponent>) {}\n\n public delete() {\n this.result = 'Delete';\n this.matDialogRef.close(this.result);\n }\n public cancel() {\n this.result = 'Cancel';\n this.matDialogRef.close(this.result);\n }\n}\n","<form *ngIf=\"triggers && triggers.length\" class=\"event-trigger\" (ngSubmit)=\"triggerSubmit()\" [formGroup]=\"triggerForm\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"next-step\">Next step</label>\n <select class=\"form-control ccd-dropdown\" id=\"next-step\" (change)=\"triggerChange()\" formControlName=\"trigger\" [ngClass]=\"{\n 'EventTrigger-empty': !triggerForm.value['trigger']\n }\">\n <option *ngIf=\"1 !== triggers.length\" value=\"\" data-default>Select action</option>\n <option *ngFor=\"let trigger of triggers\" [ngValue]=\"trigger\" [title]=\"trigger.description\">{{trigger.name}}</option>\n </select>\n </div>\n <button [disabled]=\"isButtonDisabled()\" type=\"submit\" class=\"button\">{{triggerText}}</button>\n</form>\n","\n<div>\n <div class=\"dialog-header\">\n <h2 (click)=\"cancel()\" class=\"heading-h2 x\">X</h2>\n </div>\n <div>\n <h2 class=\"heading-h2 dialog-title\">Are you sure you want to delete this draft?</h2>\n </div>\n <div class=\"dialog-info\">\n <span class=\"text-info\">You are about to delete this draft. Are you sure you want to proceed?</span>\n </div>\n <div>\n <button type=\"button\" title=\"Delete\" class=\"button action-button\" (click)=\"delete()\">Delete draft</button>\n <button type=\"button\" title=\"Cancel\" class=\"button button-secondary\" (click)=\"cancel()\">Cancel</button>\n </div>\n </div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { CaseViewTrigger } from '../../domain/case-view/case-view-trigger.model';\nimport { OrderService } from '../../services/order/order.service';\n\n@Component({\n selector: 'ccd-event-trigger',\n templateUrl: './event-trigger.component.html',\n styleUrls: ['./event-trigger.component.scss']\n})\nexport class EventTriggerComponent implements OnChanges {\n\n @Input()\n public triggers: CaseViewTrigger[];\n\n @Input()\n public triggerText: string;\n\n @Input()\n public isDisabled: boolean;\n\n @Output()\n public onTriggerSubmit: EventEmitter<CaseViewTrigger> = new EventEmitter();\n\n @Output()\n public onTriggerChange: EventEmitter<any> = new EventEmitter();\n\n public triggerForm: FormGroup;\n\n constructor(private readonly fb: FormBuilder, private readonly orderService: OrderService) {}\n\n public ngOnChanges(changes?: SimpleChanges): void {\n if (changes.triggers && changes.triggers.currentValue) {\n this.triggers = this.orderService.sort(this.triggers);\n\n this.triggerForm = this.fb.group({\n trigger: [this.getDefault(), Validators.required]\n });\n }\n }\n\n public isButtonDisabled(): boolean {\n return !this.triggerForm.valid || this.isDisabled;\n }\n\n public triggerSubmit() {\n this.onTriggerSubmit.emit(this.triggerForm.value['trigger']);\n }\n\n public triggerChange() {\n this.onTriggerChange.emit(null);\n }\n\n private getDefault(): any {\n return this.triggers.length === 1 ? this.triggers[0] : '';\n }\n}\n","<!-- Generic error heading and error message to be displayed only if there are no specific callback errors or warnings, or no error details -->\n<div *ngIf=\"error && !(error.callbackErrors || error.callbackWarnings || error.details)\" class=\"error-summary\"\n role=\"group\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h1 class=\"heading-h1 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n Something went wrong\n </h1>\n <div class=\"govuk-error-summary__body\" id=\"edit-case-event_error-summary-body\">\n <p>We're working to fix the problem. Try again shortly.</p>\n <p><a href=\"get-help\" target=\"_blank\">Contact us</a> if you're still having problems.</p>\n </div>\n</div>\n<!-- Callback error heading and error message to be displayed if there are specific error details -->\n<div *ngIf=\"error && error.details\" class=\"error-summary\" role=\"group\"\n aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-h2 error-summary-heading\" id=\"edit-case-event_error-summary-heading\">\n The callback data failed validation\n </h2>\n <p>{{error.message}}</p>\n <ul *ngIf=\"error.details?.field_errors\" class=\"error-summary-list\">\n <li *ngFor=\"let fieldError of error.details.field_errors\">\n {{fieldError.message}}\n </li>\n </ul>\n</div>\n<ccd-callback-errors\n [triggerTextContinue]=\"triggerTextStart\"\n [triggerTextIgnore]=\"triggerTextIgnoreWarnings\"\n [callbackErrorsSubject]=\"callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\">\n</ccd-callback-errors>\n<ccd-activity [caseId]=\"caseDetails.case_id\" [displayMode]=\"BANNER\"></ccd-activity>\n<div class=\"grid-row\">\n <div class=\"column-one-half\">\n <ccd-case-header [caseDetails]=\"caseDetails\"></ccd-case-header>\n <div class=\"case-viewer-controls\" *ngIf=\"hasPrint && !isDraft() && isPrintEnabled()\">\n <a id=\"case-viewer-control-print\" routerLink=\"print\" class=\"button button-secondary\">Print</a>\n </div>\n </div>\n <div *ngIf=\"hasEventSelector\" class=\"column-one-half\">\n <ccd-event-trigger [isDisabled]=\"isTriggerButtonDisabled()\" [triggers]=\"caseDetails.triggers\"\n [triggerText]=\"triggerText\" (onTriggerChange)=\"clearErrorsAndWarnings()\"\n (onTriggerSubmit)=\"applyTrigger($event)\"></ccd-event-trigger>\n </div>\n</div>\n<div class=\"grid-row\">\n <div class=\"column-full\">\n <ng-container *ngIf=\"hasTabsPresent()\">\n <mat-tab-group #tabGroup animationDuration=\"0ms\" (selectedTabChange)=\"tabChanged($event)\" [disableRipple]=\"true\">\n <mat-tab *ngFor=\"let tab of prependedTabs\" [id]=\"tab.id\" [label]=\"tab.label\">\n </mat-tab>\n <mat-tab *ngFor=\"let tab of sortedTabs; let curIdx=index\" [id]=\"tab.id\" [label]=\"tab.label\">\n <ng-template matTabContent>\n <table [class]=\"tab.id\" aria-describedby=\"case viewer table\">\n <tbody>\n <ng-container *ngFor=\"let field of tab | ccdTabFields | ccdReadFieldsFilter:false :undefined :true : formGroup.controls['data']\">\n <div ccdLabelSubstitutor [caseField]=\"field\" [contextFields]=\"caseFields\" [hidden]=\"field.hidden\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\">\n <th>\n <div class=\"case-viewer-label text-16\">{{field.label}}</div>\n </th>\n <td>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"formGroup.controls['data']\"\n [caseField]=\"field\" [caseReference]=\"caseDetails.case_id\"\n [markdownUseHrefAsRouterLink]=\"markdownUseHrefAsRouterLink\">\n </ccd-field-read>\n </span>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\">\n <th>\n <span class=\"text-16\">\n <ccd-field-read [topLevelFormGroup]=\"formGroup.controls['data']\"\n [caseField]=\"field\" [caseReference]=\"caseDetails.case_id\"\n [markdownUseHrefAsRouterLink]=\"markdownUseHrefAsRouterLink\">\n </ccd-field-read>\n </span>\n </th>\n </tr>\n </ng-container>\n </div>\n </ng-container>\n </tbody>\n </table>\n </ng-template>\n </mat-tab>\n <mat-tab *ngFor=\"let tab of appendedTabs\" [id]=\"tab.id\" [label]=\"tab.label\">\n </mat-tab>\n </mat-tab-group>\n <router-outlet *ngIf=\"(prependedTabs && prependedTabs.length) || (appendedTabs && appendedTabs.length)\"></router-outlet>\n </ng-container>\n </div>\n</div>\n","import { Location } from '@angular/common';\nimport { AfterViewInit, Component, Input, NgZone, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { plainToClass } from 'class-transformer';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { initDialog } from '../../../components/helpers/init-dialog-helper';\nimport { ShowCondition } from '../../../directives/conditional-show/domain/conditional-show.model';\nimport { Activity, DisplayMode } from '../../../domain/activity/activity.model';\nimport { CaseTab } from '../../../domain/case-view/case-tab.model';\nimport { CaseViewTrigger } from '../../../domain/case-view/case-view-trigger.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { CaseField } from '../../../domain/definition/case-field.model';\nimport { Draft, DRAFT_QUERY_PARAM } from '../../../domain/draft.model';\nimport { ActivityPollingService } from '../../../services/activity/activity.polling.service';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { DraftService } from '../../../services/draft/draft.service';\nimport { ErrorNotifierService } from '../../../services/error/error-notifier.service';\nimport { NavigationNotifierService } from '../../../services/navigation/navigation-notifier.service';\nimport { NavigationOrigin } from '../../../services/navigation/navigation-origin.model';\nimport { OrderService } from '../../../services/order/order.service';\nimport { ConvertHrefToRouterService } from '../../case-editor/services/convert-href-to-router.service';\nimport { DeleteOrCancelDialogComponent } from '../../dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component';\nimport { CallbackErrorsContext } from '../../error/domain/error-context';\n\n\n\n@Component({\n selector: 'ccd-case-full-access-view',\n templateUrl: './case-full-access-view.component.html',\n styleUrls: ['./case-full-access-view.component.scss']\n})\nexport class CaseFullAccessViewComponent implements OnInit, OnDestroy, AfterViewInit {\n public static readonly ORIGIN_QUERY_PARAM = 'origin';\n public static readonly TRIGGER_TEXT_START = 'Go';\n public static readonly TRIGGER_TEXT_CONTINUE = 'Ignore Warning and Go';\n public static readonly UNICODE_SPACE = '%20';\n public static readonly EMPTY_SPACE = ' ';\n\n @Input() public hasPrint = true;\n @Input() public hasEventSelector = true;\n @Input() public caseDetails: CaseView;\n @Input() public prependedTabs: CaseTab[] = [];\n @Input() public appendedTabs: CaseTab[] = [];\n\n public BANNER = DisplayMode.BANNER;\n public sortedTabs: CaseTab[];\n public caseFields: CaseField[];\n public formGroup: FormGroup;\n public error: any;\n public triggerTextStart = CaseFullAccessViewComponent.TRIGGER_TEXT_START;\n public triggerTextIgnoreWarnings = CaseFullAccessViewComponent.TRIGGER_TEXT_CONTINUE;\n public triggerText: string = CaseFullAccessViewComponent.TRIGGER_TEXT_START;\n public ignoreWarning = false;\n public activitySubscription: Subscription;\n public caseSubscription: Subscription;\n public errorSubscription: Subscription;\n public dialogConfig: MatDialogConfig;\n public markdownUseHrefAsRouterLink: boolean;\n public message: string;\n public subscription: Subscription;\n\n public callbackErrorsSubject: Subject<any> = new Subject();\n @ViewChild('tabGroup', { static: false }) public tabGroup: MatTabGroup;\n\n constructor(\n private readonly ngZone: NgZone,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly navigationNotifierService: NavigationNotifierService,\n private readonly orderService: OrderService,\n private readonly activityPollingService: ActivityPollingService,\n private readonly dialog: MatDialog,\n private readonly alertService: AlertService,\n private readonly draftService: DraftService,\n private readonly errorNotifierService: ErrorNotifierService,\n private readonly convertHrefToRouterService: ConvertHrefToRouterService,\n private readonly location: Location\n ) {\n }\n\n public ngOnInit() {\n this.dialogConfig = initDialog();\n\n this.init();\n\n this.callbackErrorsSubject.subscribe(errorEvent => {\n this.error = errorEvent;\n });\n this.errorSubscription = this.errorNotifierService.error.subscribe(error => {\n if (error && error.status !== 401 && error.status !== 403) {\n this.error = error;\n this.callbackErrorsSubject.next(this.error);\n }\n });\n this.markdownUseHrefAsRouterLink = true;\n\n this.subscription = this.convertHrefToRouterService.getHrefMarkdownLinkContent().subscribe((hrefMarkdownLinkContent: string) => {\n // do not convert router with initial default value; convert to router only on updated link content\n if (hrefMarkdownLinkContent !== 'Default') {\n this.convertHrefToRouterService.callAngularRouter(hrefMarkdownLinkContent);\n }\n });\n }\n\n public isPrintEnabled(): boolean {\n return this.caseDetails.case_type.printEnabled;\n }\n\n public ngOnDestroy() {\n if (this.activitySubscription && this.activityPollingService.isEnabled) {\n this.activitySubscription.unsubscribe();\n }\n if (this.callbackErrorsSubject) {\n this.callbackErrorsSubject.unsubscribe();\n }\n if (!this.route.snapshot.data.case && this.caseSubscription) {\n this.caseSubscription.unsubscribe();\n }\n if (this.errorSubscription) {\n this.errorSubscription.unsubscribe();\n }\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n public postViewActivity(): Observable<Activity[]> {\n return this.activityPollingService.postViewActivity(this.caseDetails.case_id);\n }\n\n public clearErrorsAndWarnings(): void {\n this.resetErrors();\n this.ignoreWarning = false;\n this.triggerText = CaseFullAccessViewComponent.TRIGGER_TEXT_START;\n }\n\n public applyTrigger(trigger: CaseViewTrigger): void {\n this.error = null;\n\n const theQueryParams: Params = {};\n\n if (this.ignoreWarning) {\n theQueryParams['ignoreWarning'] = this.ignoreWarning;\n }\n\n // we may need to take care of different triggers in the future\n if (trigger.id === CaseViewTrigger.DELETE) {\n const dialogRef = this.dialog.open(DeleteOrCancelDialogComponent, this.dialogConfig);\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'Delete') {\n this.draftService.deleteDraft(this.caseDetails.case_id)\n .subscribe(_ => {\n this.navigationNotifierService.announceNavigation({action: NavigationOrigin.DRAFT_DELETED});\n }, _ => {\n this.navigationNotifierService.announceNavigation({action: NavigationOrigin.ERROR_DELETING_DRAFT});\n });\n }\n });\n } else if (this.isDraft() && trigger.id !== CaseViewTrigger.DELETE) {\n theQueryParams[DRAFT_QUERY_PARAM] = this.caseDetails.case_id;\n theQueryParams[CaseFullAccessViewComponent.ORIGIN_QUERY_PARAM] = 'viewDraft';\n this.navigationNotifierService.announceNavigation(\n {\n action: NavigationOrigin.DRAFT_RESUMED,\n jid: this.caseDetails.case_type.jurisdiction.id,\n ctid: this.caseDetails.case_type.id,\n etid: trigger.id,\n queryParams: theQueryParams\n });\n } else {\n this.navigationNotifierService.announceNavigation(\n {\n action: NavigationOrigin.EVENT_TRIGGERED,\n queryParams: theQueryParams,\n etid: trigger.id,\n relativeTo: this.route\n });\n }\n }\n\n public hasTabsPresent(): boolean {\n return this.sortedTabs.length > 0 || this.prependedTabs.length > 0 || this.appendedTabs.length > 0;\n }\n\n public callbackErrorsNotify(callbackErrorsContext: CallbackErrorsContext): void {\n this.ignoreWarning = callbackErrorsContext.ignore_warning;\n this.triggerText = callbackErrorsContext.trigger_text;\n }\n\n public isDraft(): boolean {\n return Draft.isDraft(this.caseDetails.case_id);\n }\n\n public isTriggerButtonDisabled(): boolean {\n return (this.error\n && this.error.callbackErrors\n && this.error.callbackErrors.length)\n || (this.error\n && this.error.details\n && this.error.details.field_errors\n && this.error.details.field_errors.length);\n }\n\n public ngAfterViewInit(): void {\n let matTab;\n const url = this.location.path(true);\n let hashValue = url.substring(url.indexOf('#') + 1);\n if (!url.includes('#')) {\n const paths = url.split('/');\n // lastPath can be /caseId, or the tabs /tasks, /hearings etc.\n const lastPath = decodeURIComponent(paths[paths.length - 1]);\n let foundTab: CaseTab = null;\n const additionalTabs = [...this.prependedTabs, ...this.appendedTabs];\n if (additionalTabs && additionalTabs.length) {\n foundTab = additionalTabs.find((caseTab: CaseTab) => caseTab.id.toLowerCase() === lastPath.toLowerCase());\n }\n // found tasks or hearing tab\n if (foundTab) {\n this.router.navigate(['cases', 'case-details', this.caseDetails.case_id, foundTab.id]).then(() => {\n matTab = this.tabGroup._tabs.find((x) => x.textLabel === foundTab.label);\n this.tabGroup.selectedIndex = matTab.position;\n });\n // last path is caseId\n } else {\n // sort with the order of CCD predefined tabs\n this.caseDetails.tabs.sort((aTab, bTab) => aTab.order > bTab.order ? 1 : (bTab.order > aTab.order ? -1 : 0));\n // preselect the 1st order of CCD predefined tabs\n const preSelectTab: CaseTab = this.caseDetails.tabs[0];\n this.router.navigate(['cases', 'case-details', this.caseDetails.case_id]).then(() => {\n matTab = this.tabGroup._tabs.find((x) => x.textLabel === preSelectTab.label);\n this.tabGroup.selectedIndex = matTab.position;\n });\n }\n } else {\n const regExp = new RegExp(CaseFullAccessViewComponent.UNICODE_SPACE, 'g');\n hashValue = hashValue.replace(regExp, CaseFullAccessViewComponent.EMPTY_SPACE);\n matTab = this.tabGroup._tabs.find((x) =>\n x.textLabel.replace(CaseFullAccessViewComponent.EMPTY_SPACE, '').toLowerCase() ===\n hashValue.replace(CaseFullAccessViewComponent.EMPTY_SPACE, '').toLowerCase());\n if (matTab && matTab.position) {\n this.tabGroup.selectedIndex = matTab.position;\n }\n }\n }\n\n public tabChanged(tabChangeEvent: MatTabChangeEvent): void {\n const tab = tabChangeEvent.tab['_viewContainerRef'] as ViewContainerRef;\n const id = (tab.element.nativeElement as HTMLElement).id;\n const tabsLengthBeforeAppended = this.prependedTabs.length + this.caseDetails.tabs.length;\n if ((tabChangeEvent.index <= 1 && this.prependedTabs.length) ||\n (tabChangeEvent.index >= tabsLengthBeforeAppended && this.appendedTabs.length)) {\n this.router.navigate([id], {relativeTo: this.route});\n } else {\n const label = tabChangeEvent.tab.textLabel;\n this.router.navigate(['cases', 'case-details', this.caseDetails.case_id]).then(() => {\n window.location.hash = label;\n });\n }\n }\n\n private init(): void {\n // Clone and sort tabs array\n this.sortedTabs = this.orderService.sort(this.caseDetails.tabs);\n this.caseFields = this.getTabFields();\n this.sortedTabs = this.sortTabFieldsAndFilterTabs(this.sortedTabs);\n this.formGroup = this.buildFormGroup(this.caseFields);\n\n if (this.activityPollingService.isEnabled) {\n this.ngZone.runOutsideAngular(() => {\n this.activitySubscription = this.postViewActivity().subscribe((_resolved) => {\n // console.log('Posted VIEW activity and result is: ' + JSON.stringify(_resolved));\n });\n });\n }\n\n if (this.caseDetails.triggers && this.error) {\n this.resetErrors();\n }\n }\n\n private sortTabFieldsAndFilterTabs(tabs: CaseTab[]): CaseTab[] {\n return tabs\n .map(tab => Object.assign({}, tab, {fields: this.orderService.sort(tab.fields)}))\n .filter(tab => ShowCondition.getInstance(tab.show_condition).matchByContextFields(this.caseFields));\n }\n\n private getTabFields(): CaseField[] {\n const caseDataFields = this.sortedTabs.reduce((acc, tab) => {\n return acc.concat(plainToClass(CaseField, tab.fields));\n }, []);\n\n return caseDataFields.concat(this.caseDetails.metadataFields);\n }\n\n /**\n * For EUI-3825:\n * Builds a FormGroup from all the CaseFields contained within the view.\n * This FormGroup is necessary for evaluation the show/hide conditions of\n * fields that are dependent on a field only available on a DIFFERENT tab.\n */\n private buildFormGroup(caseFields: CaseField[]): FormGroup {\n let value: object = {};\n if (caseFields) {\n caseFields.forEach(caseField => {\n value = {\n ...value,\n [caseField.id]: caseField.value\n };\n });\n }\n return new FormGroup({data: new FormControl(value)});\n }\n\n private resetErrors(): void {\n this.error = null;\n this.callbackErrorsSubject.next(null);\n this.alertService.clear();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractAppConfig } from '../../../../../app.config';\n\n@Pipe({\n name: 'ccdPrintUrl'\n})\nexport class PrintUrlPipe implements PipeTransform {\n\n private static readonly MSIE_BROWSER_NAME = 'MSIE';\n private static readonly IE11_BROWSER_ENGINE = 'Trident';\n\n constructor(private readonly appConfig: AbstractAppConfig) {}\n\n /**\n * Takes a \"remote\" Print Service URL (for example, as returned by calling the `/documents` CCD endpoint) and\n * rewrites it into a \"local\", application-specific URL for the front-end. The resulting URL is of the form:\n *\n * Configurable \"Local URL\" (e.g. `/print`) + _pathname_ from original \"remote URL\"\n * (e.g. `/jurisdictions/TEST/case-types/Test1/cases/1111222233334444`)\n *\n * @param remoteUrl The \"remote\" URL to rewrite\n * @returns A rewritten URL as per the above description, or the original `remoteUrl` if it is `null`, `undefined`,\n * or the empty string\n */\n public transform(remoteUrl: string): string {\n if (remoteUrl && remoteUrl.length > 0) {\n let printServiceUrlPathname: string;\n\n /**\n * Check navigator.userAgent to see if the browser is IE or not. Check for either the browser name, \"MSIE\", or\n * the rendering engine, \"Trident\" (used to identify IE 11 because it no longer reports as \"MSIE\").\n * Note: IE does not support the URL interface and requires a workaround to parse URLs.\n */\n if (navigator.userAgent.indexOf(PrintUrlPipe.MSIE_BROWSER_NAME) !== -1 ||\n navigator.userAgent.indexOf(PrintUrlPipe.IE11_BROWSER_ENGINE) !== -1) {\n // Workaround for not being able to use the URL interface\n const urlParser = document.createElement('a');\n urlParser.href = remoteUrl;\n // Get the pathname from the anchor element with the \"remote\" Print Service URL\n printServiceUrlPathname = urlParser.pathname;\n if (printServiceUrlPathname[0] !== '/') {\n // Fix for IE11; it returns the pathname without leading slash\n printServiceUrlPathname = '/' + printServiceUrlPathname;\n }\n } else {\n // Get the pathname parsed from the \"remote\" Print Service URL object\n printServiceUrlPathname = new URL(remoteUrl).pathname;\n }\n\n // Return an amended URL comprising the \"local\" Print Service URL (usually /print) and the \"remote\" pathname\n return this.appConfig.getPrintServiceUrl() + printServiceUrlPathname;\n }\n\n return remoteUrl;\n }\n}\n","<div *ngIf=\"isDataLoaded()\">\n <ccd-case-header [caseDetails]=\"caseDetails\"></ccd-case-header>\n <h2 class=\"heading-h2\">Print</h2>\n <table aria-describedby=\"case print table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let document of documents\">\n <td class=\"document-name\"><a [href]=\"document.url | ccdPrintUrl\" target=\"_blank\" rel=\"external\">{{document.name}}</a></td>\n <td class=\"document-type\">{{document.type}}</td>\n </tr>\n </tbody>\n </table>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { CasePrintDocument } from '../../../domain/case-view/case-print-document.model';\nimport { CaseView } from '../../../domain/case-view/case-view.model';\nimport { HttpError } from '../../../domain/http/http-error.model';\nimport { AlertService } from '../../../services/alert/alert.service';\nimport { CaseNotifier } from '../../case-editor/services/case.notifier';\nimport { CasesService } from '../../case-editor/services/cases.service';\n\n@Component({\n templateUrl: './case-printer.html'\n})\nexport class CasePrinterComponent implements OnInit, OnDestroy {\n\n private readonly ERROR_MESSAGE = 'No documents to print';\n\n public caseDetails: CaseView;\n public documents: CasePrintDocument[];\n public caseSubscription: Subscription;\n\n constructor(\n private readonly caseNotifier: CaseNotifier,\n private readonly casesService: CasesService,\n private readonly alertService: AlertService\n ) {}\n\n public ngOnInit(): void {\n this.caseSubscription = this.caseNotifier.caseView.subscribe(caseDetails => {\n this.caseDetails = caseDetails;\n this.casesService\n .getPrintDocuments(this.caseDetails.case_id)\n .pipe(\n map(documents => {\n\n if (!documents || !documents.length) {\n const error = new HttpError();\n error.message = this.ERROR_MESSAGE;\n throw error;\n }\n\n this.documents = documents;\n }),\n catchError(error => {\n this.alertService.error(error.message);\n return throwError(error);\n })\n ).toPromise();\n });\n }\n\n public ngOnDestroy(): void {\n if (this.caseSubscription) {\n this.caseSubscription.unsubscribe();\n }\n }\n\n public isDataLoaded() {\n return this.caseDetails && this.documents ? true : false;\n }\n\n}\n","<div *ngIf=\"isDataLoaded()\">\n <ccd-case-basic-access-view *ngIf=\"!hasStandardAccess()\"\n [accessType]=\"userAccessType\"\n [caseDetails]=\"caseDetails\">\n </ccd-case-basic-access-view>\n <ccd-case-full-access-view *ngIf=\"hasStandardAccess()\"\n [caseDetails]=\"caseDetails\"\n [hasPrint]=\"hasPrint\"\n [hasEventSelector]=\"hasEventSelector\"\n [prependedTabs]=\"prependedTabs\"\n [appendedTabs]=\"appendedTabs\">\n </ccd-case-full-access-view>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { CaseField, CaseTab, CaseView } from '../../domain';\nimport { CaseNotifier } from '../case-editor';\n\n@Component({\n selector: 'ccd-case-viewer',\n templateUrl: './case-viewer.component.html'\n})\nexport class CaseViewerComponent implements OnInit, OnDestroy {\n\n public readonly METADATA_FIELD_ACCESS_PROCEES_ID = '[ACCESS_PROCESS]';\n public readonly NON_STANDARD_USER_ACCESS_TYPES = ['CHALLENGED', 'SPECIFIC'];\n\n @Input() public hasPrint = true;\n @Input() public hasEventSelector = true;\n\n @Input() public prependedTabs: CaseTab[] = [];\n @Input() public appendedTabs: CaseTab[] = [];\n @Input() public caseDetails: CaseView;\n public caseSubscription: Subscription;\n public userAccessType: string;\n\n constructor(\n private readonly route: ActivatedRoute,\n private readonly caseNotifier: CaseNotifier,\n private readonly appConfig: AbstractAppConfig,\n ) {\n }\n\n public ngOnInit(): void {\n this.loadCaseDetails();\n }\n\n public ngOnDestroy(): void {\n if (this.caseSubscription) {\n this.caseSubscription.unsubscribe();\n }\n }\n\n public loadCaseDetails(): void {\n if (!this.route.snapshot.data.case) {\n this.caseSubscription = this.caseNotifier.caseView.subscribe(caseDetails => {\n this.caseDetails = caseDetails;\n this.setUserAccessType(this.caseDetails);\n });\n } else {\n this.caseDetails = this.route.snapshot.data.case;\n this.setUserAccessType(this.caseDetails);\n }\n }\n\n public setUserAccessType(caseDetails: CaseView): void {\n // remove once CCD starts sending CAM data or Access management goes live\n this.setMockData(caseDetails);\n if (caseDetails && Array.isArray(caseDetails.metadataFields)) {\n const access_process = caseDetails.metadataFields.find(metadataField =>\n metadataField.id === this.METADATA_FIELD_ACCESS_PROCEES_ID);\n this.userAccessType = access_process ? access_process.value : null;\n }\n }\n\n public isDataLoaded(): boolean {\n return !!this.caseDetails;\n }\n\n public hasStandardAccess(): boolean {\n const featureToggleOn = this.appConfig.getAccessManagementMode();\n return featureToggleOn ? this.NON_STANDARD_USER_ACCESS_TYPES.indexOf(this.userAccessType) === -1 : true;\n }\n\n // remove once Access management goes live\n private setMockData(caseDetails: CaseView): void {\n const accessManagementBasicViewMock = this.appConfig.getAccessManagementBasicViewMock();\n if (accessManagementBasicViewMock && accessManagementBasicViewMock.active && !caseDetails.basicFields) {\n const access_process_index = caseDetails.metadataFields.findIndex(metadataField =>\n metadataField.id === this.METADATA_FIELD_ACCESS_PROCEES_ID);\n\n if (access_process_index > -1) {\n caseDetails.metadataFields[access_process_index].value = accessManagementBasicViewMock.accessProcess;\n } else {\n const access_process: CaseField = new CaseField();\n access_process.id = this.METADATA_FIELD_ACCESS_PROCEES_ID;\n access_process.value = accessManagementBasicViewMock.accessProcess;\n access_process.field_type = {\n id: '',\n type: 'Text'\n };\n caseDetails.metadataFields.push(access_process);\n }\n\n caseDetails.basicFields = accessManagementBasicViewMock.basicFields;\n\n }\n }\n}\n","<!-- Cloned from rpx-xui-webapp src/app/components/error-message/error-message.component.html -->\n<ng-container *ngIf=\"error\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">{{error.title}}</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a routerLink=\".\" [fragment]=\"error.fieldId\">{{error.description}}</a>\n </li>\n </ul>\n </div>\n </div>\n</ng-container>\n","/**\n * Cloned from rpx-xui-webapp src/app/components/error-message/error-message.component.ts\n */\nimport { Component, Input } from '@angular/core';\n\nimport { ErrorMessage } from '../../domain';\n\n@Component({\n selector: 'exui-error-message',\n templateUrl: './error-message.component.html'\n})\nexport class ErrorMessageComponent {\n @Input() public error: ErrorMessage;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ActivityModule } from '../activity';\nimport { ErrorMessageComponent } from './error-message.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n RouterModule,\n ActivityModule\n ],\n declarations: [\n ErrorMessageComponent\n ],\n exports: [\n ErrorMessageComponent\n ]\n})\nexport class EventMessageModule {}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-multiple-tasks-exist',\n templateUrl: './multiple-tasks-exist.component.html'\n})\nexport class MultipleTasksExistComponent {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Multiple tasks exist</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Multiple tasks exist</h2>\n\n <p>You're starting work which could complete more than one of the active tasks for this case.</p>\n\n <p>Return to tasks tab and start the event from there.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\n\n@Component({\n selector: 'app-no-tasks-available',\n templateUrl: './no-tasks-available.component.html'\n})\nexport class NoTasksAvailableComponent {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">No task available</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">No task available</h2>\n\n <p>You should have an assigned task for this event, but something has gone wrong.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","<div class=\"govuk-!-margin-9\" *ngIf=\"assignedUserName\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task assignment required</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task assignment required</h2>\n\n <p>This task is assigned to {{assignedUserName}}. You must assign it to yourself to continue.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { Task } from '../../../../domain/work-allocation/Task';\nimport { CaseworkerService } from '../../../case-editor/services/case-worker.service';\nimport { JudicialworkerService } from '../../../case-editor/services/judicial-worker.service';\n\n@Component({\n selector: 'app-task-assigned',\n templateUrl: './task-assigned.component.html'\n})\nexport class TaskAssignedComponent implements OnInit, OnDestroy {\n\n public task: Task = null;\n public caseId: string;\n public assignedUserName: string;\n public caseworkerSubscription: Subscription;\n public judicialworkerSubscription: Subscription;\n\n constructor(private readonly route: ActivatedRoute,\n private readonly judicialworkerService: JudicialworkerService,\n private readonly caseworkerService: CaseworkerService) {\n this.caseId = this.route.snapshot.data.case.case_id;\n this.task = this.route.snapshot.queryParams as Task;\n }\n\n public ngOnInit(): void {\n // Current user is a caseworker?\n this.caseworkerSubscription = this.caseworkerService.getCaseworkers(this.task.jurisdiction).subscribe(result => {\n if (result && result[0].service === this.task.jurisdiction && result[0].caseworkers) {\n const caseworker = result[0].caseworkers.find(x => x.idamId === this.task.assignee);\n if (caseworker) {\n this.assignedUserName = `${caseworker.firstName} ${caseworker.lastName}`;\n }\n }\n\n if (!this.assignedUserName) {\n // Current user is a judicial user?\n this.judicialworkerSubscription =\n this.judicialworkerService.getJudicialworkers([this.task.assignee], this.task.jurisdiction)\n .subscribe(judicialworkers => {\n if (judicialworkers) {\n const judicialworker = judicialworkers.find(x => x.sidam_id === this.task.assignee);\n if (judicialworker) {\n this.assignedUserName = judicialworker.full_name;\n }\n }\n\n if (!this.assignedUserName) {\n this.assignedUserName = 'another user';\n }\n });\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.caseworkerSubscription) {\n this.caseworkerSubscription.unsubscribe();\n }\n if (this.judicialworkerSubscription) {\n this.judicialworkerSubscription.unsubscribe();\n }\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-task-cancelled',\n templateUrl: './task-cancelled.component.html'\n})\nexport class TaskCancelledComponent {\n @Input() public caseId: string;\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task cancelled/marked as done</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task cancelled/marked as done</h2>\n\n <p>This task has been cancelled or marked as done.</p>\n\n <p>Click Continue to complete the task and save your progress.</p>\n\n <p>Alternatively, click Cancel to return to the tasks tab without saving your progress.</p>\n\n <div class=\"form-group form-group-related\">\n <button type=\"submit\" class=\"govuk-button govuk-!-margin-right-2\" data-module=\"govuk-button\">Continue</button>\n <a [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\"\n class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">Cancel</a>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Task } from '../../../../domain/work-allocation/Task';\n\n@Component({\n selector: 'app-task-conflict',\n templateUrl: './task-conflict.component.html'\n})\nexport class TaskConflictComponent {\n @Input() public task: Task;\n @Input() public caseId: string;\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\" data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task conflict</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task conflict</h2>\n\n <p>This task cannot be completed due to conflict with another task or tasks for this case.</p>\n\n <p>If the problem persists, contact William Priest</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab</a>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-task-unassigned',\n templateUrl: './task-unassigned.component.html'\n})\nexport class TaskUnassignedComponent {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","<div class=\"govuk-!-margin-9\">\n <div class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\"\n data-module=\"error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n There is a problem\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a href=\"#\">Task assignment required</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"govuk-form-group govuk-form-group--error\">\n <h2 class=\"govuk-heading-m\">Task assignment required</h2>\n\n <p>You must assign one of the available tasks from the task tab to continue with your work.</p>\n\n <a href=\"javascript:void(0)\" [routerLink]=\"['/', 'cases', 'case-details', caseId, 'tasks']\">Return to tasks tab to\n assign a task</a>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { TaskPayload } from '../../../domain/work-allocation/TaskPayload';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { WorkAllocationService } from '../../case-editor/services/work-allocation.service';\n\n@Injectable()\nexport class EventStartGuard implements CanActivate {\n\n constructor(private readonly workAllocationService: WorkAllocationService,\n private readonly router: Router,\n private readonly appConfig: AbstractAppConfig,\n private readonly sessionStorageService: SessionStorageService) {\n }\n\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n // Checks must be performed only for Work Allocation 2\n if (this.appConfig.getWorkAllocationApiUrl().toLowerCase() === 'workallocation2') {\n const caseId = route.params['cid'];\n const eventId = route.params['eid'];\n const taskId = route.queryParams['tid'];\n\n // TODO: NavigationExtras should be used once Angular upgrade changes have been incorporated\n const isComplete = route.queryParams['isComplete'];\n const caseInfoStr = this.sessionStorageService.getItem('caseInfo');\n if (caseInfoStr) {\n const caseInfo = JSON.parse(caseInfoStr);\n if (caseInfo && caseInfo.cid === caseId) {\n if (isComplete) {\n return of(true);\n }\n\n return this.workAllocationService.getTasksByCaseIdAndEventId(eventId, caseId, caseInfo.caseType, caseInfo.jurisdiction).pipe(\n switchMap((payload: TaskPayload) => this.checkForTasks(payload, caseId, eventId, taskId))\n );\n }\n }\n } else {\n // Checks not required, return true by default for Work Allocation 1\n return of(true);\n }\n }\n\n public checkTaskInEventNotRequired(payload: TaskPayload, caseId: string, taskId: string): boolean {\n if (!payload || !payload.tasks) {\n return true;\n }\n const taskNumber = payload.tasks.length;\n if (taskNumber === 0) {\n // if there are no tasks just carry on\n return true;\n }\n // Get number of tasks assigned to user\n const userInfoStr = this.sessionStorageService.getItem('userDetails');\n const userInfo = JSON.parse(userInfoStr);\n const tasksAssignedToUser = payload.tasks.filter(x =>\n x.task_state !== 'unassigned' && x.assignee === userInfo.id || x.assignee === userInfo.uid\n );\n\n if (tasksAssignedToUser.length === 0) {\n // if no tasks assigned to user carry on\n return true;\n } else if (tasksAssignedToUser.length > 1 && !taskId) {\n // if more than one task assigned to the user then give multiple tasks error\n this.router.navigate([`/cases/case-details/${caseId}/multiple-tasks-exist`]);\n return false;\n } else {\n let task: any;\n if (taskId) {\n task = payload.tasks.find(x => x.id === taskId);\n } else {\n task = tasksAssignedToUser[0];\n }\n // if one task assigned to user, allow user to complete event\n this.sessionStorageService.setItem('taskToComplete', JSON.stringify(task));\n return true;\n }\n }\n\n private checkForTasks(payload: TaskPayload, caseId: string, eventId: string, taskId: string): Observable<boolean> {\n // Clear taskToComplete from session as we will be starting the process for new task\n this.sessionStorageService.removeItem('taskToComplete');\n\n if (payload.task_required_for_event) {\n // There are some issues in EventTriggerResolver/CaseService and/or CCD for some events\n // which triggers the CanActivate guard again.\n // If event start is initiated again, then we do not need to perform state machine processing again.\n // https://tools.hmcts.net/jira/browse/EUI-5489\n if (this.router && this.router.url && this.router.url.includes('event-start')) {\n return of(true);\n }\n this.router.navigate([`/cases/case-details/${caseId}/event-start`], { queryParams: { caseId, eventId, taskId } });\n return of(false);\n } else {\n return of(this.checkTaskInEventNotRequired(payload, caseId, taskId));\n }\n }\n}\n","export enum EventStartStates {\n CHECK_FOR_MATCHING_TASKS = 'check-for-matching-tasks',\n NO_TASK = 'no-task',\n ONE_OR_MORE_TASKS = 'one-or-more-tasks',\n TASK_ASSIGNED_TO_USER = 'task-assigned-to-user',\n ONE_TASK_ASSIGNED_TO_USER = 'one-task-assigned-to-user',\n MULTIPLE_TASKS_ASSIGNED_TO_USER = 'multiple-tasks-assigned-to-user',\n TASK_UNASSIGNED = 'task-unassigned',\n TASK_ASSIGNMENT_REQUIRED = 'task-assignment-required',\n ASSIGN_TASK_TO_SELF = 'assign-task-to-self',\n ASK_MANAGER_TO_ASSIGN_TASK = 'ask-manager-to-assign-task',\n SHOW_WARNING = 'show-warning',\n FINAL = 'final'\n}\n","import { Injectable } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { State, StateMachine } from '@edium/fsm';\nimport { EventStartStateMachineContext, EventStartStates } from '../models';\n\nconst EVENT_STATE_MACHINE = 'EVENT STATE MACHINE';\n\n@Injectable()\nexport class EventStartStateMachineService {\n public stateCheckForMatchingTasks: State;\n public stateNoTask: State;\n public stateOneTask: State;\n public stateOneOrMoreTasks: State;\n public stateTaskAssignedToUser: State;\n public stateOneTaskAssignedToUser: State;\n public stateMultipleTasksAssignedToUser: State;\n public stateTaskUnassigned: State;\n public stateFinal: State;\n\n public initialiseStateMachine(context: EventStartStateMachineContext): StateMachine {\n return new StateMachine(EVENT_STATE_MACHINE, context);\n }\n\n public createStates(stateMachine: StateMachine): void {\n // Initial state\n this.stateCheckForMatchingTasks = stateMachine.createState(\n EventStartStates.CHECK_FOR_MATCHING_TASKS,\n false,\n this.entryActionForStateCheckForMatchingTasks\n );\n\n // States based on number of tasks available\n this.stateNoTask = stateMachine.createState(\n EventStartStates.NO_TASK,\n false,\n this.entryActionForStateNoTask\n );\n this.stateOneOrMoreTasks = stateMachine.createState(\n EventStartStates.ONE_OR_MORE_TASKS,\n false,\n this.entryActionForStateOneOrMoreTasks\n );\n\n // States based on number of tasks assigned to user\n this.stateTaskUnassigned = stateMachine.createState(\n EventStartStates.TASK_UNASSIGNED,\n false,\n this.entryActionForStateTaskUnAssigned\n );\n this.stateTaskAssignedToUser = stateMachine.createState(\n EventStartStates.TASK_ASSIGNED_TO_USER,\n false,\n this.entryActionForStateTaskAssignedToUser\n );\n this.stateOneTaskAssignedToUser = stateMachine.createState(\n EventStartStates.ONE_TASK_ASSIGNED_TO_USER,\n false,\n this.entryActionForStateOneTaskAssignedToUser\n );\n this.stateMultipleTasksAssignedToUser = stateMachine.createState(\n EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER,\n false,\n this.entryActionForStateMultipleTasksAssignedToUser\n );\n\n // Create final state, the second param isComplete is set to true to make sure state machine finished running\n this.stateFinal = stateMachine.createState(\n EventStartStates.FINAL,\n true,\n this.finalAction\n );\n }\n\n public addTransitions(): void {\n // Initial transition\n this.addTransitionsForStateCheckForMatchingTasks();\n\n // Transitions based on number of tasks available\n this.addTransitionsForStateNoTask();\n this.addTransitionsForStateOneOrMoreTasks();\n\n // Transitions based on number of tasks assigned to user\n this.addTransitionsForStateTaskUnassigned();\n this.addTransitionsForStateTaskAssignedToUser();\n this.addTransitionsForStateOneTaskAssignedToUser();\n this.addTransitionsForStateMultipleTasksAssignedToUser();\n }\n\n public startStateMachine(stateMachine: StateMachine): void {\n stateMachine.start(this.stateCheckForMatchingTasks);\n }\n\n /**\n * Initial entry action for state check for matching tasks, decided based on the number of tasks\n */\n public entryActionForStateCheckForMatchingTasks(state: State, context: EventStartStateMachineContext): void {\n const taskCount = context && context.tasks ? context.tasks.length : 0;\n\n if (taskCount === 0) {\n // Trigger state no task\n state.trigger(EventStartStates.NO_TASK);\n } else {\n // Trigger state one or more tasks\n state.trigger(EventStartStates.ONE_OR_MORE_TASKS);\n }\n }\n\n public entryActionForStateNoTask(state: State, context: EventStartStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n // Navigate to no tasks available error page\n context.router.navigate([`/cases/case-details/${context.caseId}/no-tasks-available`], { relativeTo: context.route });\n }\n\n public entryActionForStateOneOrMoreTasks(state: State, context: EventStartStateMachineContext): void {\n state.trigger(EventStartStates.TASK_ASSIGNED_TO_USER);\n }\n\n public entryActionForStateMultipleTasks(state: State, context: EventStartStateMachineContext): void {\n state.trigger(EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER);\n }\n\n public entryActionForStateTaskAssignedToUser(state: State, context: EventStartStateMachineContext): void {\n // Get number of tasks assigned to user\n const userInfoStr = context.sessionStorageService.getItem('userDetails');\n const userInfo = JSON.parse(userInfoStr);\n const tasksAssignedToUser = context.tasks.filter(x =>\n x.task_state !== 'unassigned' && x.assignee === userInfo.id || x.assignee === userInfo.uid\n );\n\n // Check if user initiated the event from task tab\n const isEventInitiatedFromTaskTab = context.taskId !== undefined && tasksAssignedToUser.findIndex(x => x.id === context.taskId) > -1;\n\n if (isEventInitiatedFromTaskTab) {\n // User initiated event from task tab\n state.trigger(EventStartStates.ONE_TASK_ASSIGNED_TO_USER);\n } else {\n // User initiated event from dropdown\n switch (tasksAssignedToUser.length) {\n case 0:\n // No tasks assigned to user, trigger state task unassigned\n state.trigger(EventStartStates.TASK_UNASSIGNED);\n break;\n case 1:\n // One task assigned to user\n state.trigger(EventStartStates.ONE_TASK_ASSIGNED_TO_USER);\n break;\n default:\n // Multiple tasks assigned to user, trigger state multiple tasks assigned to user\n state.trigger(EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER);\n break;\n }\n }\n }\n\n public entryActionForStateTaskUnAssigned(state: State, context: EventStartStateMachineContext): void {\n let navigationURL = '';\n let theQueryParams: Params = {};\n\n if (context.tasks[0].assignee) {\n // Task is assigned to some other user, navigate to task assigned error page\n navigationURL = `/cases/case-details/${context.caseId}/task-assigned`;\n theQueryParams = context.tasks[0];\n } else {\n // Task is unassigned, navigate to task unassigned error page\n navigationURL = `/cases/case-details/${context.caseId}/task-unassigned`;\n }\n\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n // Navigate\n context.router.navigate([`${navigationURL}`], { queryParams: theQueryParams, relativeTo: context.route });\n }\n\n public entryActionForStateOneTaskAssignedToUser(state: State, context: EventStartStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n\n // Get task assigned to user\n let task = context.tasks.find(x => x.id === context.taskId);\n if (!task) {\n task = context.tasks[0];\n }\n\n // Store task to session\n context.sessionStorageService.setItem('taskToComplete', JSON.stringify(task));\n // Allow user to perform the event\n context.router.navigate([`/cases/case-details/${context.caseId}/trigger/${context.eventId}`],\n { queryParams: { isComplete: true }, relativeTo: context.route });\n }\n\n public entryActionForStateMultipleTasksAssignedToUser(state: State, context: EventStartStateMachineContext): void {\n // Trigger final state to complete processing of state machine\n state.trigger(EventStartStates.FINAL);\n // Navigate to multiple tasks exist error page\n context.router.navigate([`/cases/case-details/${context.caseId}/multiple-tasks-exist`], { relativeTo: context.route });\n }\n\n public finalAction(state: State): void {\n // Final actions can be performed here, the state machine finished running\n // console.log('FINAL', state);\n return;\n }\n\n public addTransitionsForStateCheckForMatchingTasks(): void {\n // No tasks\n this.stateCheckForMatchingTasks.addTransition(\n EventStartStates.NO_TASK,\n this.stateNoTask\n );\n // One task\n this.stateCheckForMatchingTasks.addTransition(\n EventStartStates.ONE_OR_MORE_TASKS,\n this.stateOneOrMoreTasks\n );\n }\n\n public addTransitionsForStateNoTask(): void {\n this.stateNoTask.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateOneOrMoreTasks(): void {\n this.stateOneOrMoreTasks.addTransition(\n EventStartStates.TASK_ASSIGNED_TO_USER,\n this.stateTaskAssignedToUser\n );\n }\n\n public addTransitionsForStateTaskUnassigned(): void {\n this.stateTaskUnassigned.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateTaskAssignedToUser(): void {\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.ONE_TASK_ASSIGNED_TO_USER,\n this.stateOneTaskAssignedToUser\n );\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.TASK_UNASSIGNED,\n this.stateTaskUnassigned\n );\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.MULTIPLE_TASKS_ASSIGNED_TO_USER,\n this.stateMultipleTasksAssignedToUser\n );\n this.stateTaskAssignedToUser.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateOneTaskAssignedToUser(): void {\n this.stateOneTaskAssignedToUser.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n\n public addTransitionsForStateMultipleTasksAssignedToUser(): void {\n this.stateMultipleTasksAssignedToUser.addTransition(\n EventStartStates.FINAL,\n this.stateFinal\n );\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { StateMachine } from '@edium/fsm';\nimport { Task } from '../../domain/work-allocation/Task';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { EventStartStateMachineContext } from './models/event-start-state-machine-context.model';\nimport { EventStartStateMachineService } from './services/event-start-state-machine.service';\n\n@Component({\n selector: 'ccd-event-start',\n templateUrl: './event-start.component.html'\n})\nexport class EventStartComponent implements OnInit {\n\n public stateMachine: StateMachine;\n public context: EventStartStateMachineContext;\n\n constructor(private service: EventStartStateMachineService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly sessionStorageService: SessionStorageService) {\n }\n\n public ngOnInit(): void {\n // Get task and case id payload from route data\n const tasks: Task[] = this.route.snapshot.data.tasks;\n const caseId = this.route.snapshot.data.case.case_id;\n const eventId = this.route.snapshot.queryParams['eventId'];\n const taskId = this.route.snapshot.queryParams['taskId'];\n\n // Setup the context\n this.context = {\n tasks,\n caseId,\n eventId,\n taskId,\n router: this.router,\n route: this.route,\n sessionStorageService: this.sessionStorageService\n };\n\n // Initialise state machine\n this.service = new EventStartStateMachineService();\n this.stateMachine = this.service.initialiseStateMachine(this.context);\n // Create states\n this.service.createStates(this.stateMachine);\n // Add transitions for the states\n this.service.addTransitions();\n // Start state machine\n this.service.startStateMachine(this.stateMachine);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Task } from '../../../domain/work-allocation/Task';\nimport { TaskPayload } from '../../../domain/work-allocation/TaskPayload';\nimport { SessionStorageService } from '../../../services/session/session-storage.service';\nimport { WorkAllocationService } from '../../case-editor/services/work-allocation.service';\n\n@Injectable()\nexport class EventTasksResolverService implements Resolve<Task[]> {\n\n constructor(private readonly service: WorkAllocationService,\n private readonly sessionStorageService: SessionStorageService) {\n }\n\n public resolve(route: ActivatedRouteSnapshot): Observable<Task[]> {\n const eventId = route.queryParamMap.get('eventId');\n const caseId = route.queryParamMap.get('caseId');\n const caseInfoStr = this.sessionStorageService.getItem('caseInfo');\n const caseInfo = JSON.parse(caseInfoStr);\n if (caseInfo) {\n return this.service.getTasksByCaseIdAndEventId(eventId, caseId, caseInfo.caseType, caseInfo.jurisdiction)\n .pipe(\n map((payload: TaskPayload) => payload.tasks)\n );\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { MultipleTasksExistComponent } from './components/multiple-tasks-exist/multiple-tasks-exist.component';\nimport { NoTasksAvailableComponent } from './components/no-tasks-available/no-tasks-available.component';\nimport { TaskAssignedComponent } from './components/task-assigned/task-assigned.component';\nimport { TaskCancelledComponent } from './components/task-cancelled/task-cancelled.component';\nimport { TaskConflictComponent } from './components/task-conflict/task-conflict.component';\nimport { TaskUnassignedComponent } from './components/task-unassigned/task-unassigned.component';\nimport { EventStartGuard } from './event-guard/event-start.guard';\nimport { EventStartComponent } from './event-start.component';\nimport { EventTasksResolverService } from './resolvers/event-tasks-resolver.service';\nimport { EventStartStateMachineService } from './services';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n RouterModule\n ],\n declarations: [\n EventStartComponent,\n MultipleTasksExistComponent,\n NoTasksAvailableComponent,\n TaskAssignedComponent,\n TaskCancelledComponent,\n TaskConflictComponent,\n TaskUnassignedComponent\n ],\n providers: [\n EventStartGuard,\n EventTasksResolverService,\n EventStartStateMachineService\n ],\n exports: [\n EventStartComponent,\n TaskAssignedComponent,\n TaskUnassignedComponent\n ]\n})\nexport class EventStartModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ActivityModule } from '../activity';\nimport { EventTriggerComponent } from './event-trigger.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n ActivityModule,\n ],\n declarations: [\n EventTriggerComponent\n ],\n exports: [\n EventTriggerComponent\n ]\n})\nexport class EventTriggerModule {}\n","export enum AccessReason {\n LINKED_TO_CURRENT_CASE = 'The cases or parties are linked to the case I am working on',\n CONSOLIDATE_CASE = 'To determine if the case needs to be consolidated',\n ORDER_FOR_TRANSFER = 'To consider an order for transfer',\n OTHER = 'Other reason'\n}\n\nexport enum ChallengedAccessRequestPageText {\n TITLE = 'Why do you need to access this case?',\n HINT = 'Select a reason.',\n CASE_REF = 'Case reference'\n}\n\nexport enum ChallengedAccessRequestErrors {\n NO_SELECTION = 'Select a reason',\n NO_CASE_REFERENCE = 'Enter a case reference',\n NO_REASON = 'Enter a reason'\n}\n","<exui-error-message *ngIf=\"formGroup.invalid && submitted\" [error]=\"errorMessage\"></exui-error-message>\n<cut-alert type=\"information\">This case requires challenged access.<br/>This is because the case is\n outside your work area. If you request access to the case, it will be\n logged for auditing purposes.</cut-alert>\n<form [formGroup]=\"formGroup\" (submit)=\"onSubmit()\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': formGroup.invalid && submitted}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"reason-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"govuk-fieldset__heading\">\n {{title}}\n </h1>\n </legend>\n <div id=\"reason-hint\" class=\"govuk-hint\">\n {{hint}}\n </div>\n <div id=\"error-message\" class=\"govuk-error-message\" *ngIf=\"formGroup.get('radioSelected').invalid && submitted\">\n {{errorMessage.description}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"reason-0\" name=\"radioSelected\" type=\"radio\" [value]=\"accessReasons[0].reason\"\n data-aria-controls=\"conditional-reason-0\" formControlName=\"radioSelected\" [checked]=\"accessReasons[0].checked\"\n (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-0\">\n {{accessReasons[0].reason}}\n </label>\n </div>\n <div id=\"conditional-reason-0\" *ngIf=\"formGroup.get('radioSelected').value === accessReasons[0].reason\"\n class=\"govuk-radios__conditional\">\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"case-reference\">\n {{caseRefLabel}}\n </label>\n <div id=\"case-reference-error-message\" class=\"govuk-error-message\" *ngIf=\"formGroup.get('caseReference').invalid && submitted\">\n {{errorMessage.description}}\n </div>\n <input class=\"govuk-input govuk-!-width-one-third\"\n [ngClass]=\"{'govuk-input--error': formGroup.get('caseReference').invalid && submitted}\" id=\"case-reference\"\n name=\"case-reference\" type=\"text\" formControlName=\"caseReference\">\n </div>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"reason-1\" name=\"radioSelected\" type=\"radio\" [value]=\"accessReasons[1].reason\"\n formControlName=\"radioSelected\" [checked]=\"accessReasons[1].checked\" (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-1\">\n {{accessReasons[1].reason}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"reason-2\" name=\"radioSelected\" type=\"radio\" [value]=\"accessReasons[2].reason\"\n formControlName=\"radioSelected\" [checked]=\"accessReasons[2].checked\" (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-2\">\n {{accessReasons[2].reason}}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"reason-3\" name=\"radioSelected\" type=\"radio\" [value]=\"accessReasons[3].reason\"\n data-aria-controls=\"conditional-reason-3\" formControlName=\"radioSelected\" [checked]=\"accessReasons[3].checked\"\n (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-3\" id=\"reason-3-label\">\n {{accessReasons[3].reason}}\n </label>\n </div>\n <div id=\"conditional-reason-3\" *ngIf=\"formGroup.get('radioSelected').value === accessReasons[3].reason\"\n class=\"govuk-radios__conditional\">\n <div class=\"govuk-form-group\">\n <div id=\"other-reason-error-message\" class=\"govuk-error-message\" *ngIf=\"formGroup.get('otherReason').invalid && submitted\">\n {{errorMessage.description}}\n </div>\n <textarea class=\"govuk-textarea\" [ngClass]=\"{'govuk-textarea--error': formGroup.get('otherReason').invalid && submitted}\"\n id=\"other-reason\" name=\"other-reason\" rows=\"5\" aria-describedby=\"reason-3-label\" formControlName=\"otherReason\"></textarea>\n </div>\n </div>\n </div>\n </fieldset>\n </div>\n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" type=\"submit\">\n Submit\n </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class='govuk-body' (click)=\"onCancel()\" href=\"javascript:void(0)\">\n Cancel\n </a>\n </p>\n </div>\n </div>\n</form>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { ChallengedAccessRequest, ErrorMessage } from '../../../domain';\nimport { CasesService } from '../../case-editor';\nimport { AccessReason, ChallengedAccessRequestErrors, ChallengedAccessRequestPageText } from './models';\n\n@Component({\n selector: 'ccd-case-challenged-access-request',\n templateUrl: './case-challenged-access-request.component.html'\n})\nexport class CaseChallengedAccessRequestComponent implements OnDestroy, OnInit {\n\n public title: string;\n public hint: string;\n public caseRefLabel: string;\n public readonly accessReasons: DisplayedAccessReason[];\n public formGroup: FormGroup;\n public submitted = false;\n public errorMessage: ErrorMessage;\n public $roleAssignmentResponseSubscription: Subscription;\n\n private readonly genericError = 'There is a problem';\n private readonly radioSelectedControlName = 'radioSelected';\n private readonly caseReferenceControlName = 'caseReference';\n private readonly otherReasonControlName = 'otherReason';\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly router: Router,\n private readonly casesService: CasesService,\n private readonly route: ActivatedRoute\n ) {\n this.accessReasons = [\n {reason: AccessReason.LINKED_TO_CURRENT_CASE, checked: false},\n {reason: AccessReason.CONSOLIDATE_CASE, checked: false},\n {reason: AccessReason.ORDER_FOR_TRANSFER, checked: false},\n {reason: AccessReason.OTHER, checked: false}\n ];\n }\n\n public ngOnInit(): void {\n this.title = ChallengedAccessRequestPageText.TITLE;\n this.hint = ChallengedAccessRequestPageText.HINT;\n this.caseRefLabel = ChallengedAccessRequestPageText.CASE_REF;\n this.formGroup = this.fb.group({\n radioSelected: new FormControl(null, Validators.required)\n });\n this.formGroup.addControl(this.caseReferenceControlName,\n new FormControl('', {\n validators: [(control: AbstractControl): {[key: string]: boolean} | null => {\n if (this.formGroup.get(this.radioSelectedControlName).value === AccessReason.LINKED_TO_CURRENT_CASE && this.inputEmpty(control)) {\n return {invalid: true};\n }\n return null;\n }],\n updateOn: 'submit'\n })\n );\n this.formGroup.addControl(this.otherReasonControlName,\n new FormControl('', {\n validators: [(control: AbstractControl): {[key: string]: boolean} | null => {\n if (this.formGroup.get(this.radioSelectedControlName).value === AccessReason.OTHER && this.inputEmpty(control)) {\n return {invalid: true};\n }\n return null;\n }],\n updateOn: 'submit'\n })\n );\n }\n\n public onChange(): void {\n this.submitted = false;\n // Clear the \"Case reference\" and \"Other reason\" fields manually. This prevents any previous value being retained by\n // the field's FormControl when the field itself is removed from the DOM by *ngIf. (If it is subsequently added back\n // to the DOM by *ngIf, it will appear empty but the associated FormControl still has the previous value.)\n this.formGroup.get(this.caseReferenceControlName).setValue('');\n this.formGroup.get(this.otherReasonControlName).setValue('');\n }\n\n public onSubmit(): void {\n this.submitted = true;\n if (this.formGroup.get(this.radioSelectedControlName).invalid) {\n this.errorMessage = {\n title: this.genericError,\n description: ChallengedAccessRequestErrors.NO_SELECTION\n };\n } else {\n if (this.formGroup.get(this.caseReferenceControlName).invalid) {\n this.errorMessage = {\n title: this.genericError,\n description: ChallengedAccessRequestErrors.NO_CASE_REFERENCE,\n fieldId: 'case-reference'\n };\n }\n\n if (this.formGroup.get(this.otherReasonControlName).invalid) {\n this.errorMessage = {\n title: this.genericError,\n description: ChallengedAccessRequestErrors.NO_REASON,\n fieldId: 'other-reason'\n };\n }\n }\n\n // Initiate Challenged Access Request\n if (this.formGroup.valid) {\n // Get the Case Reference (for which access is being requested) from the ActivatedRouteSnapshot data\n const caseId = this.route.snapshot.data.case.case_id;\n const radioSelectedValue = this.formGroup.get(this.radioSelectedControlName).value;\n // Get the index of the selected AccessReason enum value. Can't use Object.values because it's not available in\n // < ES2017!\n const reasonNumber = Object.keys(AccessReason).map(e => AccessReason[e]).indexOf(radioSelectedValue);\n const challengedAccessRequest = {\n reason: reasonNumber,\n caseReference: reasonNumber === 0 ? this.formGroup.get(this.caseReferenceControlName).value : null,\n otherReason: reasonNumber === 3 ? this.formGroup.get(this.otherReasonControlName).value : null\n } as ChallengedAccessRequest;\n\n this.$roleAssignmentResponseSubscription = this.casesService.createChallengedAccessRequest(caseId, challengedAccessRequest)\n .subscribe(\n _response => {\n // Would have been nice to pass the caseId within state.data, but this isn't part of NavigationExtras until\n // Angular 7.2!\n this.router.navigate(['success'], {relativeTo: this.route});\n },\n _error => {\n // Navigate to error page\n }\n );\n }\n }\n\n public onCancel(): void {\n // Navigate to the page before previous one (should be Search Results or Case List page, for example)\n window.history.go(-2);\n }\n\n public ngOnDestroy(): void {\n if (this.$roleAssignmentResponseSubscription) {\n this.$roleAssignmentResponseSubscription.unsubscribe();\n }\n }\n\n private inputEmpty(input: AbstractControl): boolean {\n return input.value == null || input.value.trim().length === 0;\n }\n}\n\nexport interface DisplayedAccessReason {\n reason: AccessReason;\n checked: boolean;\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'ccd-case-challenged-access-success',\n templateUrl: './case-challenged-access-success.component.html'\n})\nexport class CaseChallengedAccessSuccessComponent implements OnInit {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) { }\n\n public ngOnInit(): void {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n\n}\n","<div class=\"govuk-width-container\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Access successful<br><br>\n <div class=\"govuk-panel__body\">\n Case reference:<br>\n {{caseId}}\n </div>\n </h1>\n </div>\n <h2 class=\"govuk-heading-m \">What happens next</h2>\n <p class=\"govuk-body\">\n You can access this case file until midnight tonight.\n </p>\n <p class=\"govuk-body\">\n You'll need to request access again once this expires.\n </p>\n <p class=\"govuk-body\">\n Your request will be logged for auditing purposes.\n </p>\n <p class=\"govuk-body\"><a href=\"cases/case-details/{{caseId}}\">View case file</a>.</p>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'case-review-specific-access-reject',\n templateUrl: './case-review-specific-access-reject.component.html'\n})\nexport class CaseReviewSpecificAccessRejectComponent implements OnInit {\n\n public caseId: string;\n public readonly retunToTask = 'Return to the Tasks tab for this case';\n public readonly returnToMyTask = 'Return to My tasks';\n\n constructor(private readonly route: ActivatedRoute) { }\n\n public ngOnInit(): void {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n}\n","export enum AccessReason {\n APPROVE_REQUEST = 'Approve request',\n REJECT_REQUEST = 'Reject request',\n REQUEST_MORE_INFORMATION = 'Request more information',\n}\n\nexport enum ReviewSpecificAccessRequestPageText {\n TITLE = 'Review specific access request',\n HINT = 'What do you want to do with this request?',\n CASE_REF = 'Case reference'\n}\n\nexport enum ReviewSpecificAccessRequestErrors {\n NO_SELECTION = 'Select an option',\n GENERIC_ERROR = 'There is a problem',\n}\n","<exui-error-message\n *ngIf=\"formGroup.invalid && submitted\"\n [error]=\"errorMessage\">\n</exui-error-message>\n\n<form [formGroup]=\"formGroup\" (submit)=\"onSubmit()\">\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"reason-hint\">\n <div class=\"govuk-grid-column-two-thirds\" >\n <p></p>\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"govuk-fieldset__heading\">\n {{ title }}\n </h1>\n </legend>\n <p></p>\n <table class=\"govuk-table\">\n <caption></caption>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <th scope=\"row\" class=\"govuk-table__header leftLabel\" >\n Case name\n </th>\n <td class=\"govuk-table__cell\">{{ requestAccessDetails.caseName }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <th scope=\"row\" class=\"govuk-table__header leftLabel\" >\n Case reference\n </th>\n <td class=\"govuk-table__cell\">{{ requestAccessDetails.caseReference }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <th scope=\"row\" class=\"govuk-table__header leftLabel\" >\n Date submitted\n </th>\n <td class=\"govuk-table__cell\">{{ requestAccessDetails.dateSubmitted }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <th scope=\"row\" class=\"govuk-table__header leftLabel\" >\n Request from\n </th>\n <td class=\"govuk-table__cell\">{{ requestAccessDetails.requestFrom }}<br /></td>\n </tr>\n <tr class=\"govuk-table__row\">\n <th scope=\"row\" class=\"govuk-table__header leftLabel\" >\n Reason for case access\n </th>\n <td class=\"govuk-table__cell\">{{ requestAccessDetails.reasonForCaseAccess }}</td>\n </tr>\n </tbody>\n </table>\n\n <div\n class=\"govuk-form-group\"\n [ngClass]=\"{ 'form-group-error': formGroup.invalid && submitted }\">\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 class=\"govuk-fieldset__heading\">\n {{ hint }}\n </h1>\n </legend>\n <div\n id=\"error-message\"\n class=\"govuk-error-message\"\n *ngIf=\"formGroup.get('radioSelected').invalid && submitted\">\n {{ errorMessage.description }}\n </div>\n <div class=\"govuk-radios__item\">\n <input\n class=\"govuk-radios__input\"\n id=\"reason-0\"\n name=\"radioSelected\"\n type=\"radio\"\n [value]=\"accessReasons[0].reason\"\n formControlName=\"radioSelected\"\n [checked]=\"accessReasons[0].checked\"\n (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-0\">\n {{ accessReasons[0].reason }}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input\n class=\"govuk-radios__input\"\n id=\"reason-1\"\n name=\"radioSelected\"\n type=\"radio\"\n [value]=\"accessReasons[1].reason\"\n formControlName=\"radioSelected\"\n [checked]=\"accessReasons[1].checked\"\n (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-1\">\n {{ accessReasons[1].reason }}\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input\n class=\"govuk-radios__input\"\n id=\"reason-2\"\n name=\"radioSelected\"\n type=\"radio\"\n [value]=\"accessReasons[2].reason\"\n formControlName=\"radioSelected\"\n [checked]=\"accessReasons[2].checked\"\n (change)=\"onChange()\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"reason-2\">\n {{ accessReasons[2].reason }}\n </label>\n </div>\n </fieldset>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" type=\"submit\">\n Continue\n </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\">\n Cancel\n </a>\n </p>\n </div>\n </div>\n</form>\n","<p></p>\n<div class=\"govuk-width-container\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Request for access denied<br>\n </h1>\n </div>\n <h2 class=\"govuk-heading-m \">What happens next</h2>\n <p class=\"govuk-body\">\n The requester has been denied access to this case.\n </p>\n </div>\n </div>\n <div class=\"form-group form-group-related\">\n <p ><a button class=\"govuk-button govuk-!-margin-right-3\" href=\"tasks/list\" >{{returnToMyTask}}</a></p>\n </div>\n <p class=\"cancel\"><a href=\"cases/case-details/{{caseId}}\" >{{retunToTask}}</a></p>\n</div>","export enum SpecificAccessRequestPageText {\n TITLE = 'Why do you need to access this case?',\n HINT = 'Provide a reason.',\n CASE_REF = 'Case reference'\n}\n\nexport enum SpecificAccessRequestErrors {\n NO_REASON = 'Enter a reason'\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { AbstractAppConfig } from '../../../../app.config';\nimport { CaseView, ErrorMessage, ReviewSpecificAccessRequest } from '../../../domain';\nimport { AccessReason, ReviewSpecificAccessRequestErrors, ReviewSpecificAccessRequestPageText } from './models';\n\n@Component({\n selector: 'ccd-case-review-specific-access-request',\n templateUrl: './case-review-specific-access-request.component.html',\n styleUrls: ['./case-review-specific-access-request.component.scss']\n})\nexport class CaseReviewSpecificAccessRequestComponent\n implements OnInit, OnDestroy {\n public collapsed = false;\n public title: string;\n public hint: string;\n public caseRefLabel: string;\n public formGroup: FormGroup;\n public submitted = false;\n public errorMessage: ErrorMessage;\n public readonly accessReasons: DisplayedAccessReason[];\n public requestAccessDetails: RequestAccessDetails;\n public caseSubscription: Subscription;\n public userAccessType: string;\n public caseDetails: CaseView;\n\n private readonly genericError = 'There is a problem';\n private readonly radioSelectedControlName = 'radioSelected';\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly appConfig: AbstractAppConfig,\n ) {\n this.accessReasons = [\n { reason: AccessReason.APPROVE_REQUEST, checked: false },\n { reason: AccessReason.REJECT_REQUEST, checked: false },\n { reason: AccessReason.REQUEST_MORE_INFORMATION, checked: false },\n ];\n }\n\n public ngOnInit(): void {\n // TODO: this ticket is blocked so mocked with those data to go through, they will be removed and implimented with actual data\n // when dependency resolved\n this.setMockData();\n this.title = ReviewSpecificAccessRequestPageText.TITLE;\n this.hint = ReviewSpecificAccessRequestPageText.HINT;\n this.caseRefLabel = ReviewSpecificAccessRequestPageText.CASE_REF;\n this.formGroup = this.fb.group({\n radioSelected: new FormControl(null, Validators.required),\n });\n }\n\n public ngOnDestroy(): void {\n if (this.caseSubscription) {\n this.caseSubscription.unsubscribe();\n }\n }\n\n public onChange(): void {\n this.submitted = false;\n }\n\n public onSubmit(): void {\n this.submitted = true;\n\n if (this.formGroup.get(this.radioSelectedControlName).invalid) {\n this.errorMessage = {\n title: this.genericError,\n description: ReviewSpecificAccessRequestErrors.NO_SELECTION,\n };\n }\n // Initiate Review Access Request\n if (this.formGroup.valid) {\n // Get the Case Reference (for which access is being requested) from the ActivatedRouteSnapshot data\n const caseId = this.route.snapshot.data.case.case_id;\n const radioSelectedValue = this.formGroup.get(\n this.radioSelectedControlName\n ).value;\n // Get the index of the selected AccessReason enum value. Can't use Object.values because it's not available in\n // < ES2017!\n const reasonNumber = Object.keys(AccessReason)\n .map((e) => AccessReason[e])\n .indexOf(radioSelectedValue);\n // request model created , it will be used for submission part\n const challengedAccessRequest = {\n reason: reasonNumber,\n caseId,\n } as ReviewSpecificAccessRequest;\n if ( AccessReason.REJECT_REQUEST === radioSelectedValue ) {\n this.router.navigate(['rejected'], {relativeTo: this.route});\n }\n }\n }\n\n public onCancel(): void {\n // Navigate to the page before previous one (should be Search Results or Case List page, for example)\n window.history.go(-1);\n }\n\n // remove once Access management goes live\n public setMockData(): void {\n const requestAccessDetailsMock =\n this.appConfig.getAccessManagementRequestReviewMockModel();\n\n if (requestAccessDetailsMock.active) {\n this.requestAccessDetails = requestAccessDetailsMock.details;\n }\n }\n}\n\nexport interface DisplayedAccessReason {\n reason: AccessReason;\n checked: boolean;\n}\n\nexport interface RequestAccessDetails {\n caseName: string;\n caseReference: string;\n dateSubmitted: string;\n requestFrom: string;\n reasonForCaseAccess: string;\n}\n","<exui-error-message\n *ngIf=\"formGroup.invalid && submitted\"\n [error]=\"errorMessage\"></exui-error-message>\n<cut-alert type=\"information\"\n >This case requires specific access.<br />This means it's outside your\n jurisdiction and requires authorisation. If you request access to the case, it\n will be logged for auditing purposes.</cut-alert>\n<form [formGroup]=\"formGroup\" (submit)=\"onSubmit()\">\n <div class=\"govuk-form-group\"\n [ngClass]=\"{ 'form-group-error': formGroup.invalid && submitted }\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"reason-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"govuk-fieldset__heading\">\n {{ title }}\n </h1>\n </legend>\n\n <details class=\"govuk-details\" data-module=\"govuk-details\" role=\"group\">\n <summary\n class=\"govuk-details__summary\"\n role=\"button\"\n aria-expanded=\"false\">\n <span class=\"govuk-details__summary-text\">\n Help with requesting case access\n </span>\n </summary>\n <div\n class=\"govuk-details__text\"\n aria-hidden=\"true\">\n <p class=\"govuk-body\">You could include:</p>\n <ul class=\"govuk-list govuk-list--bullet\">\n <li>the case reference of the linked case</li>\n <li>how long you require access to this case</li>\n <li>any other reasons why you require access</li>\n </ul>\n </div>\n </details>\n\n <div id=\"reason-hint\" class=\"govuk-hint\">\n {{ hint }}\n </div>\n <div id=\"conditional-reason-3\">\n <div class=\"govuk-form-group\">\n <div\n id=\"specific-reason-error-message\"\n class=\"govuk-error-message\"\n *ngIf=\"formGroup.get('specificReason').invalid && submitted\">\n {{ errorMessage.description }}\n </div>\n <textarea\n class=\"govuk-textarea\"\n [ngClass]=\"{\n 'govuk-textarea--error':\n formGroup.get('specificReason').invalid && submitted\n }\"\n id=\"specific-reason\"\n name=\"specific-reason\"\n rows=\"8\"\n formControlName=\"specificReason\">\n </textarea>\n </div>\n </div>\n </fieldset>\n </div>\n \n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" type=\"submit\">\n Submit\n </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\">\n Cancel\n </a>\n </p>\n </div>\n </div>\n</form>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n FormBuilder,\n FormControl,\n FormGroup\n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { ErrorMessage, SpecificAccessRequest } from '../../../domain';\nimport { CasesService } from '../../case-editor';\nimport {\n SpecificAccessRequestErrors,\n SpecificAccessRequestPageText\n} from './models';\n\n@Component({\n selector: 'ccd-case-specific-access-request',\n templateUrl: './case-specific-access-request.component.html',\n})\nexport class CaseSpecificAccessRequestComponent implements OnDestroy, OnInit {\n public collapsed = false;\n public title: string;\n public hint: string;\n public caseRefLabel: string;\n public formGroup: FormGroup;\n public submitted = false;\n public errorMessage: ErrorMessage;\n public $roleAssignmentResponseSubscription: Subscription;\n\n private readonly genericError = 'There is a problem';\n private readonly specificReasonControlName = 'specificReason';\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly router: Router,\n private readonly casesService: CasesService,\n private readonly route: ActivatedRoute\n ) {}\n\n public ngOnInit(): void {\n this.title = SpecificAccessRequestPageText.TITLE;\n this.hint = SpecificAccessRequestPageText.HINT;\n this.caseRefLabel = SpecificAccessRequestPageText.CASE_REF;\n this.formGroup = this.fb.group({\n radioSelected: new FormControl(null, null),\n });\n\n this.formGroup.addControl(\n this.specificReasonControlName,\n new FormControl('', {\n validators: [\n (control: AbstractControl): { [key: string]: boolean } | null => {\n if (this.inputEmpty(control)) {\n return { invalid: true };\n }\n return null;\n },\n ],\n updateOn: 'submit',\n })\n );\n }\n\n public onChange(): void {\n this.submitted = false;\n // Clear the \"specific reason\" fields manually. This prevents any previous value being retained by\n // the field's FormControl when the field itself is removed from the DOM by *ngIf. (If it is subsequently added back\n // to the DOM by *ngIf, it will appear empty but the associated FormControl still has the previous value.)\n this.formGroup.get(this.specificReasonControlName).setValue('');\n }\n\n public onSubmit(): void {\n this.submitted = true;\n if (this.formGroup.get(this.specificReasonControlName).invalid) {\n this.errorMessage = {\n title: this.genericError,\n description: SpecificAccessRequestErrors.NO_REASON,\n fieldId: 'specific-reason',\n };\n }\n\n // Initiate Specific Access Request\n if (this.formGroup.valid) {\n // Get the Case Reference (for which access is being requested) from the ActivatedRouteSnapshot data\n const caseId = this.route.snapshot.data.case.case_id;\n const specificAccessRequest = {\n specificReason: this.formGroup.get(this.specificReasonControlName).value\n } as SpecificAccessRequest;\n\n this.$roleAssignmentResponseSubscription = this.casesService.createSpecificAccessRequest(caseId, specificAccessRequest)\n .subscribe(\n _response => {\n // Would have been nice to pass the caseId within state.data, but this isn't part of NavigationExtras until\n // Angular 7.2\n this.router.navigate(['success'], {relativeTo: this.route});\n },\n _error => {\n // Navigate to error page\n }\n );\n }\n }\n\n public onCancel(): void {\n // Navigate to the page before previous one (should be Search Results or Case List page, for example)\n window.history.go(-2);\n }\n\n public ngOnDestroy(): void {\n if (this.$roleAssignmentResponseSubscription) {\n this.$roleAssignmentResponseSubscription.unsubscribe();\n }\n }\n\n private inputEmpty(input: AbstractControl): boolean {\n return input.value == null || input.value.trim().length === 0;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'ccd-case-specific-access-success',\n templateUrl: './case-specific-access-success.component.html'\n})\nexport class CaseSpecificAccessSuccessComponent implements OnInit {\n\n public caseId: string;\n\n constructor(private readonly route: ActivatedRoute) { }\n\n public ngOnInit(): void {\n this.caseId = this.route.snapshot.data.case.case_id;\n }\n\n}\n","<div class=\"govuk-width-container\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Request sent<br><br>\n <div class=\"govuk-panel__body\">\n Case reference:<br>\n {{caseId}}\n </div>\n </h1>\n </div>\n <h2 class=\"govuk-heading-m \">What happens next</h2>\n <p class=\"govuk-body\">\n Your request to access this case file has been sent.\n </p>\n <p class=\"govuk-body\">\n Once your request has been authorised, you’ll be able to access the case through\n <a href=\"work/my-work/my-access\">My access</a>.\n </p>\n <p class=\"govuk-body\">\n Your request will be logged for auditing purposes.\n </p>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { RouterModule } from '@angular/router';\nimport { EventLogDetailsComponent } from '../palette/history/event-log/event-log-details.component';\nimport { AlertModule } from '../../../components/banners/alert';\nimport { ConditionalShowModule, LabelSubstitutorModule } from '../../directives';\nimport { CaseReferencePipe } from '../../pipes';\nimport {\n ActivityPollingService,\n ActivityService,\n DraftService,\n ErrorNotifierService,\n HttpService,\n NavigationNotifierService,\n OrderService\n} from '../../services';\nimport { ActivityModule } from '../activity';\nimport { CaseEditorModule, CaseNotifier, ConvertHrefToRouterService } from '../case-editor';\nimport { CaseHeaderModule } from '../case-header';\nimport { CaseHistoryModule } from '../case-history';\nimport { ErrorsModule } from '../error/errors.module';\nimport { EventMessageModule } from '../error-message/error-message.module';\nimport { EventStartModule } from '../event-start/event-start.module';\nimport { EventTriggerModule } from '../event-trigger';\nimport { PaletteModule } from '../palette';\nimport { CaseBasicAccessViewComponent } from './case-basic-access-view/case-basic-access-view.component';\nimport { CaseChallengedAccessRequestComponent } from './case-challenged-access-request/case-challenged-access-request.component';\nimport { CaseChallengedAccessSuccessComponent } from './case-challenged-access-success/case-challenged-access-success.component';\nimport { CaseEventTriggerComponent } from './case-event-trigger';\nimport { CaseFullAccessViewComponent } from './case-full-access-view/case-full-access-view.component';\nimport { CaseReviewSpecificAccessRejectComponent } from './case-review-specific-access-reject';\nimport { CaseReviewSpecificAccessRequestComponent } from './case-review-specific-access-request/case-review-specific-access-request.component';\nimport { CaseSpecificAccessRequestComponent } from './case-specific-access-request/case-specific-access-request.component';\nimport { CaseSpecificAccessSuccessComponent } from './case-specific-access-success/case-specific-access-success.component';\nimport { CaseViewComponent } from './case-view';\nimport { CaseViewerComponent } from './case-viewer.component';\nimport { CasePrinterComponent, PrintUrlPipe } from './printer';\nimport { CaseResolver, EventTriggerResolver } from './services';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ErrorsModule,\n ActivityModule,\n CaseHeaderModule,\n EventStartModule,\n EventTriggerModule,\n EventMessageModule,\n PaletteModule,\n CaseEditorModule,\n ConditionalShowModule,\n CaseHistoryModule,\n MatTabsModule,\n ReactiveFormsModule,\n AlertModule,\n LabelSubstitutorModule\n ],\n declarations: [\n CaseEventTriggerComponent,\n CasePrinterComponent,\n CaseViewerComponent,\n CaseBasicAccessViewComponent,\n CaseFullAccessViewComponent,\n CaseViewComponent,\n PrintUrlPipe,\n CaseChallengedAccessRequestComponent,\n CaseSpecificAccessRequestComponent,\n CaseReviewSpecificAccessRequestComponent,\n CaseChallengedAccessSuccessComponent,\n CaseSpecificAccessSuccessComponent,\n CaseReviewSpecificAccessRejectComponent\n ],\n exports: [\n CaseViewerComponent,\n CaseViewComponent\n ],\n providers: [\n CaseNotifier,\n ConvertHrefToRouterService,\n NavigationNotifierService,\n CaseReferencePipe,\n EventTriggerResolver,\n ActivityService,\n ActivityPollingService,\n OrderService,\n DraftService,\n HttpService,\n CaseResolver,\n ErrorNotifierService,\n ]\n})\nexport class CaseViewerModule {\n}\n","import { Routes } from '@angular/router';\nimport { editorRouting } from '../case-editor';\nimport { CaseHistoryComponent } from '../case-history';\nimport {\n EventStartComponent,\n MultipleTasksExistComponent,\n NoTasksAvailableComponent,\n TaskAssignedComponent,\n TaskCancelledComponent,\n TaskConflictComponent,\n TaskUnassignedComponent\n} from '../event-start';\nimport { EventStartGuard } from '../event-start/event-guard/event-start.guard';\nimport { EventTasksResolverService } from '../event-start/resolvers/event-tasks-resolver.service';\nimport { FileUploadProgressGuard } from '../palette/document/file-upload-progress.guard';\nimport { CaseChallengedAccessRequestComponent } from './case-challenged-access-request';\nimport { CaseChallengedAccessSuccessComponent } from './case-challenged-access-success';\nimport { CaseEventTriggerComponent } from './case-event-trigger';\nimport { CaseReviewSpecificAccessRejectComponent } from './case-review-specific-access-reject';\nimport { CaseReviewSpecificAccessRequestComponent } from './case-review-specific-access-request';\nimport { CaseSpecificAccessRequestComponent } from './case-specific-access-request';\nimport { CaseSpecificAccessSuccessComponent } from './case-specific-access-success';\nimport { CasePrinterComponent } from './printer/case-printer.component';\nimport { EventTriggerResolver } from './services/event-trigger.resolver';\n\nexport const viewerRouting: Routes = [\n {\n path: 'print',\n component: CasePrinterComponent,\n },\n {\n path: 'trigger/:eid',\n resolve: {\n eventTrigger: EventTriggerResolver,\n },\n component: CaseEventTriggerComponent,\n children: editorRouting,\n canActivate: [EventStartGuard],\n canDeactivate: [FileUploadProgressGuard],\n },\n {\n path: 'event-start',\n component: EventStartComponent,\n resolve: {\n tasks: EventTasksResolverService\n }\n },\n {\n path: 'task-assigned',\n component: TaskAssignedComponent\n },\n {\n path: 'task-unassigned',\n component: TaskUnassignedComponent\n },\n {\n path: 'multiple-tasks-exist',\n component: MultipleTasksExistComponent\n },\n {\n path: 'no-tasks-available',\n component: NoTasksAvailableComponent\n },\n {\n path: 'task-cancelled',\n component: TaskCancelledComponent\n },\n {\n path: 'task-conflict',\n component: TaskConflictComponent\n },\n {\n path: 'event/:eid/history',\n component: CaseHistoryComponent,\n },\n {\n path: 'challenged-access-request',\n children: [\n {\n path: '',\n component: CaseChallengedAccessRequestComponent,\n data: {\n title: 'Request Challenged Access',\n },\n pathMatch: 'full',\n },\n {\n path: 'success',\n component: CaseChallengedAccessSuccessComponent,\n data: {\n title: 'Challenged Access Success',\n },\n },\n ],\n },\n {\n path: 'specific-access-request',\n children: [\n {\n path: '',\n component: CaseSpecificAccessRequestComponent,\n data: {\n title: 'Request Specific Access',\n },\n pathMatch: 'full',\n },\n {\n path: 'success',\n component: CaseSpecificAccessSuccessComponent,\n data: {\n title: 'Specific Access Success',\n },\n },\n ],\n },\n {\n path: 'review-specific-access-request',\n children: [\n {\n path: '',\n component: CaseReviewSpecificAccessRequestComponent,\n data: {\n title: 'Request Specific Access',\n },\n pathMatch: 'full',\n },\n {\n path: 'rejected',\n component: CaseReviewSpecificAccessRejectComponent,\n data: {\n title: 'Review Access Rejected'\n }\n }\n ],\n },\n];\n","<form (ngSubmit)=\"apply()\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"cc-jurisdiction\">Jurisdiction</label>\n <select class=\"form-control ccd-dropdown\" id=\"cc-jurisdiction\" name=\"jurisdiction\" [formControl]=\"filterJurisdictionControl\" (change)=\"onJurisdictionIdChange()\">\n <option value=\"\">--Select a value--</option>\n <option *ngFor=\"let j of jurisdictions\" [value]=\"j.id\">{{j.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"cc-case-type\">Case type</label>\n <select class=\"form-control ccd-dropdown\" id=\"cc-case-type\" name=\"case-type\" [formControl]=\"filterCaseTypeControl\" (change)=\"onCaseTypeIdChange()\">\n <option value=\"\">--Select a value--</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [value]=\"ct.id\">{{ct.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"cc-event\">Event</label>\n <select class=\"form-control ccd-dropdown\" id=\"cc-event\" name=\"event\" [formControl]=\"filterEventControl\" (change)=\"onEventIdChange()\">\n <option value=\"\">--Select a value--</option>\n <option *ngFor=\"let e of selectedCaseTypeEvents\" [value]=\"e.id\">{{e.name}}</option>\n </select>\n </div>\n\n <button type=\"submit\" class=\"button\" [disabled]=\"!isCreatable()\">{{startButtonText}}</button>\n</form>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { CREATE_ACCESS } from '../../domain/case-view/access-types.model';\nimport { CaseEvent } from '../../domain/definition/case-event.model';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { SessionStorageService } from '../../services/session/session-storage.service';\nimport { CreateCaseFiltersSelection } from './create-case-filters-selection.model';\n\n@Component({\n selector: 'ccd-create-case-filters',\n templateUrl: './create-case-filters.component.html'\n})\nexport class CreateCaseFiltersComponent implements OnInit {\n\n @Input()\n public isDisabled: boolean;\n @Input()\n public startButtonText: string;\n @Output()\n public selectionSubmitted: EventEmitter<CreateCaseFiltersSelection> = new EventEmitter();\n @Output()\n public selectionChanged: EventEmitter<any> = new EventEmitter();\n\n public formGroup: FormGroup = new FormGroup({});\n\n public selected: {\n jurisdiction?: Jurisdiction,\n caseType?: CaseTypeLite,\n event?: CaseEvent,\n formGroup?: FormGroup\n };\n\n public jurisdictions: Jurisdiction[];\n public selectedJurisdictionCaseTypes?: CaseTypeLite[];\n public selectedCaseTypeEvents?: CaseEvent[];\n\n public filterJurisdictionControl: FormControl;\n public filterCaseTypeControl: FormControl;\n public filterEventControl: FormControl;\n\n constructor(\n private readonly orderService: OrderService,\n private readonly definitionsService: DefinitionsService,\n private readonly sessionStorageService: SessionStorageService\n ) { }\n\n public ngOnInit() {\n this.selected = {};\n this.initControls();\n this.definitionsService.getJurisdictions(CREATE_ACCESS)\n .subscribe(jurisdictions => {\n this.jurisdictions = jurisdictions;\n this.selectJurisdiction(this.jurisdictions, this.filterJurisdictionControl);\n });\n if (document.getElementById('cc-jurisdiction')) {\n document.getElementById('cc-jurisdiction').focus();\n }\n }\n\n public onJurisdictionIdChange(): void {\n this.resetCaseType();\n this.resetEvent();\n if (this.filterJurisdictionControl.value !== '') {\n this.formGroup.controls['caseType'].enable();\n this.selected.jurisdiction = this.findJurisdiction(this.jurisdictions, this.filterJurisdictionControl.value);\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;\n this.selectCaseType(this.selectedJurisdictionCaseTypes, this.filterCaseTypeControl);\n }\n }\n\n public onCaseTypeIdChange(): void {\n this.resetEvent();\n if (this.filterCaseTypeControl.value !== '') {\n this.selected.caseType = this.findCaseType(this.selectedJurisdictionCaseTypes, this.filterCaseTypeControl.value);\n this.formGroup.controls['event'].enable();\n this.selectedCaseTypeEvents = this.sortEvents(this.selected.caseType.events);\n this.selectEvent(this.selectedCaseTypeEvents, this.filterEventControl);\n }\n }\n\n public onEventIdChange(): void {\n this.emitChange();\n if (this.filterEventControl.value !== '') {\n this.selected.event = this.findEvent(this.selectedCaseTypeEvents, this.filterEventControl.value);\n } else {\n this.selected.event = null;\n }\n }\n\n public isCreatable(): boolean {\n return !this.isEmpty(this.selected) &&\n !this.isEmpty(this.selected.jurisdiction) &&\n !this.isEmpty(this.selected.caseType) &&\n !this.isEmpty(this.selected.event) &&\n !this.isDisabled;\n }\n\n public apply() {\n this.selectionSubmitted.emit({\n jurisdictionId: this.selected.jurisdiction.id,\n caseTypeId: this.selected.caseType.id,\n eventId: this.selected.event.id\n });\n }\n\n public initControls(): void {\n this.filterJurisdictionControl = new FormControl('');\n this.formGroup.addControl('jurisdiction', this.filterJurisdictionControl);\n this.filterCaseTypeControl = new FormControl({ value: '', disabled: true });\n this.formGroup.addControl('caseType', this.filterCaseTypeControl);\n this.filterEventControl = new FormControl({ value: '', disabled: true });\n this.formGroup.addControl('event', this.filterEventControl);\n }\n\n public emitChange(): void {\n setTimeout(() => { // workaround to prevent 'ExpressionChangedAfterItHasBeenCheckedError'\n if (this.selectionChanged) {\n this.selectionChanged.emit();\n }\n }, 0);\n }\n\n private sortEvents(events: CaseEvent[]): CaseEvent[] {\n return this.orderService.sort(this.retainEventsWithCreateRights(this.retainEventsWithNoPreStates(events)));\n }\n\n private retainEventsWithNoPreStates(events: CaseEvent[]): CaseEvent[] {\n return events.filter(event => event.pre_states.length === 0);\n }\n\n private retainEventsWithCreateRights(events: CaseEvent[]): CaseEvent[] {\n const userProfile = JSON.parse(this.sessionStorageService.getItem('userDetails'));\n return events.filter(event => userProfile && userProfile.roles &&\n !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));\n }\n\n private hasCreateAccess(caseEvent: CaseEvent, role: any): boolean {\n return !!caseEvent.acls.find(acl => acl.role === role && acl.create === true);\n }\n\n private selectJurisdiction(jurisdictions: Jurisdiction[], filterJurisdictionControl: FormControl) {\n if (jurisdictions.length === 1) {\n filterJurisdictionControl.setValue(jurisdictions[0].id);\n this.onJurisdictionIdChange();\n }\n }\n\n private selectCaseType(caseTypes: CaseTypeLite[], filterCaseTypeControl: FormControl) {\n if (caseTypes.length === 1) {\n filterCaseTypeControl.setValue(caseTypes[0].id);\n this.onCaseTypeIdChange();\n }\n }\n\n private selectEvent(events: CaseEvent[], filterEventControl: FormControl) {\n if (events.length === 1) {\n filterEventControl.setValue(events[0].id);\n this.onEventIdChange();\n }\n }\n\n private findJurisdiction(jurisdictions: Jurisdiction[], id: string): Jurisdiction {\n return jurisdictions.find(j => j.id === id);\n }\n\n private findCaseType(caseTypes: CaseTypeLite[], id: string): CaseTypeLite {\n return caseTypes.find(caseType => caseType.id === id);\n }\n\n private findEvent(events: CaseEvent[], id: string): CaseEvent {\n return events.find(event => event.id === id);\n }\n\n private resetCaseType(): void {\n this.emitChange();\n this.filterCaseTypeControl.setValue('');\n this.selected.caseType = null;\n this.selectedJurisdictionCaseTypes = [];\n this.formGroup.controls['caseType'].disable();\n }\n\n private resetEvent(): void {\n this.emitChange();\n this.filterEventControl.setValue('');\n this.selected.event = null;\n this.selectedCaseTypeEvents = [];\n this.formGroup.controls['event'].disable();\n }\n\n private isEmpty(value: any): boolean {\n return value === null || value === undefined;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DefinitionsModule } from '../../services/definitions/definitions.module';\nimport { ErrorsModule } from '../error/errors.module';\nimport { CreateCaseFiltersComponent } from './create-case-filters.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DefinitionsModule,\n ErrorsModule,\n ],\n declarations: [\n CreateCaseFiltersComponent\n ],\n exports: [\n CreateCaseFiltersComponent\n ]\n})\n\nexport class CreateCaseFiltersModule {}\n","export class CreateCaseFiltersSelection {\n public jurisdictionId: string;\n public caseTypeId: string;\n public eventId: string;\n\n constructor() {\n this.jurisdictionId = 'TEST',\n this.caseTypeId = 'TestAddressBookCase',\n this.eventId = 'startCase';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DeleteOrCancelDialogComponent } from './delete-or-cancel-dialog';\nimport { DocumentDialogComponent } from './document-dialog';\nimport { RemoveDialogComponent } from './remove-dialog';\nimport { SaveOrDiscardDialogComponent } from './save-or-discard-dialog';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n declarations: [\n DocumentDialogComponent,\n DeleteOrCancelDialogComponent,\n SaveOrDiscardDialogComponent,\n RemoveDialogComponent,\n ],\n exports: [\n DocumentDialogComponent,\n DeleteOrCancelDialogComponent,\n SaveOrDiscardDialogComponent,\n RemoveDialogComponent,\n ]\n})\nexport class DialogsModule {}\n","import { Orderable } from '../../../domain/order/orderable.model';\nimport { Field } from '../../../domain/search/field.model';\n\nexport class SearchInput implements Orderable {\n constructor(\n public label: string,\n public order: number,\n public field: Field,\n public metadata?: boolean,\n public display_context_parameter?: string) {\n }\n}\n","<h2 class=\"heading-h2\" aria-label=\"Filters\">Filters</h2>\n<form class=\"global-display\">\n <div class=\"form-group\" style=\"margin-top: 13px;\">\n <label class=\"form-label\" for=\"s-jurisdiction\">Jurisdiction*</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"s-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"s-case-type\">Case type*</label>\n <select [disabled]=\"isJurisdictionSelected()\" class=\"form-control form-control-3-4 ccd-dropdown\"\n id=\"s-case-type\" name=\"case-type\" [(ngModel)]=\"selected.caseType\" aria-controls=\"search-result\"\n (change)=\"onCaseTypeIdChange()\">\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndSearchInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let searchInput of searchInputs\">\n <ccd-field-write [caseField]=\"searchInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" (keyup.enter)=\"apply()\"></ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button [disabled]=\"!isSearchableAndSearchInputsReady()\" type=\"button\" class=\"button\" (click)=\"apply()\" (keyup.enter)=\"apply()\" title=\"Apply filter\" aria-label=\"Apply filter\">Apply</button> \n <button id=\"reset\" type=\"button\" (click)=\"reset()\" class=\"button button-secondary\" title=\"Reset filter\" aria-label=\"Reset filter\">Reset</button>\n</form>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { tap } from 'rxjs/operators';\n\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { CaseState } from '../../domain/definition/case-state.model';\nimport { CaseTypeLite } from '../../domain/definition/case-type-lite.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { FieldsUtils } from '../../services/fields/fields.utils';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { SearchService } from '../../services/search/search.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { SearchInput } from './domain/search-input.model';\n\nconst JURISDICTION_LOC_STORAGE = 'search-jurisdiction';\nconst META_FIELDS_LOC_STORAGE = 'search-metadata-fields';\nconst FORM_GROUP_VALUE_LOC_STORAGE = 'search-form-group-value';\nconst CASE_TYPE_LOC_STORAGE = 'search-caseType';\n@Component({\n selector: 'ccd-search-filters',\n templateUrl: './search-filters.component.html',\n})\n\nexport class SearchFiltersComponent implements OnInit {\n public readonly PARAM_JURISDICTION = 'jurisdiction';\n public readonly PARAM_CASE_TYPE = 'case-type';\n public readonly PARAM_CASE_STATE = 'case-state';\n public caseFields: CaseField[];\n\n @Input()\n public jurisdictions: Jurisdiction[];\n\n @Input()\n public autoApply: boolean;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onJurisdiction: EventEmitter<any> = new EventEmitter();\n\n public searchInputs: SearchInput[];\n public searchInputsReady: boolean;\n\n public selected: {\n jurisdiction?: Jurisdiction,\n caseType?: CaseTypeLite,\n formGroup?: FormGroup,\n caseState?: CaseState,\n page?: number,\n metadataFields?: string[]\n };\n\n public selectedJurisdictionCaseTypes?: CaseTypeLite[];\n\n public formGroup: FormGroup = new FormGroup({});\n\n constructor(private readonly searchService: SearchService,\n private readonly orderService: OrderService,\n private readonly jurisdictionService: JurisdictionService,\n private readonly windowService: WindowService) {\n }\n\n public ngOnInit(): void {\n this.selected = {};\n const jurisdiction = this.windowService.getLocalStorage(JURISDICTION_LOC_STORAGE);\n if (this.jurisdictions.length === 1 || jurisdiction) {\n this.selected.jurisdiction = this.jurisdictions[0];\n if (jurisdiction) {\n const localStorageJurisdiction = JSON.parse(jurisdiction);\n this.selected.jurisdiction = this.jurisdictions.filter(j => j.id === localStorageJurisdiction.id)[0];\n }\n this.onJurisdictionIdChange();\n }\n\n this.selected.formGroup = this.formGroup;\n this.selected.page = 1;\n this.selected.metadataFields = this.getMetadataFields();\n this.onApply.emit({\n selected: this.selected,\n queryParams: this.getQueryParams()\n });\n\n }\n\n public reset(): void {\n this.windowService.removeLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE);\n this.windowService.removeLocalStorage(CASE_TYPE_LOC_STORAGE);\n this.windowService.removeLocalStorage(JURISDICTION_LOC_STORAGE);\n this.windowService.removeLocalStorage(META_FIELDS_LOC_STORAGE);\n this.selected = {};\n if (this.jurisdictions.length === 1) {\n this.selected.jurisdiction = this.jurisdictions[0];\n this.onJurisdictionIdChange();\n }\n this.onReset.emit();\n }\n\n public apply(): void {\n this.selected.formGroup = this.formGroup;\n this.selected.page = 1;\n this.selected.metadataFields = this.getMetadataFields();\n this.populateValuesInLocalStorage();\n this.onApply.emit({\n selected: this.selected,\n queryParams: this.getQueryParams()\n });\n this.setFocusToTop();\n }\n\n public populateValuesInLocalStorage(): void {\n this.windowService.setLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE,\n JSON.stringify(this.selected.formGroup.value));\n this.windowService.setLocalStorage(META_FIELDS_LOC_STORAGE, JSON.stringify(this.selected.metadataFields));\n this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, JSON.stringify(this.selected.jurisdiction));\n if (this.selected.caseType) {\n this.windowService.setLocalStorage(CASE_TYPE_LOC_STORAGE, JSON.stringify(this.selected.caseType));\n }\n }\n\n public getMetadataFields(): string[] {\n if (this.searchInputs) {\n return this.searchInputs\n .filter(searchInput => searchInput.field.metadata === true)\n .map(searchInput => searchInput.field.id);\n }\n }\n\n public isSearchable(): boolean {\n let result: boolean;\n result = this.selected.jurisdiction !== undefined && this.selected.jurisdiction !== null;\n result = result && this.selected.caseType !== undefined && this.selected.caseType !== null;\n return result;\n }\n\n public isSearchableAndSearchInputsReady(): boolean {\n return this.isSearchable() && this.searchInputsReady;\n }\n\n public onJurisdictionIdChange(): void {\n this.selected.caseType = null;\n this.jurisdictionService.announceSelectedJurisdiction(this.selected.jurisdiction);\n this.selectedJurisdictionCaseTypes = this.selected.jurisdiction.caseTypes;\n this.selectCaseType(this.selectedJurisdictionCaseTypes);\n this.onJurisdiction.emit(this.selected.jurisdiction);\n }\n\n public onCaseTypeIdChange(): void {\n this.formGroup = new FormGroup({});\n this.searchInputsReady = false;\n this.searchInputs = [];\n this.searchService.getSearchInputs(\n this.selected.jurisdiction.id,\n this.selected.caseType.id\n ).pipe(\n tap(() => this.searchInputsReady = true)\n ).subscribe(searchInputs => {\n this.searchInputs = searchInputs.sort(this.orderService.sortAsc);\n\n const formValue = this.windowService.getLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE);\n let formValueObject = null;\n if (formValue) {\n formValueObject = JSON.parse(formValue);\n }\n searchInputs.forEach(item => {\n if (item.field.elementPath) {\n item.field.id = item.field.id + '.' + item.field.elementPath;\n }\n item.field.label = item.label;\n if (formValueObject) {\n item.field.value = formValueObject[item.field.id];\n }\n });\n this.getCaseFields();\n }, error => {\n console.log('Search input fields request will be discarded reason: ', error.message);\n });\n }\n\n public isJurisdictionSelected(): boolean {\n return this.selected.jurisdiction === null ||\n this.selected.jurisdiction === undefined;\n }\n\n private getQueryParams() {\n // Save filters as query parameters for current route\n const queryParams = {};\n if (this.selected.jurisdiction) {\n queryParams[this.PARAM_JURISDICTION] = this.selected.jurisdiction.id;\n }\n if (this.selected.caseType) {\n queryParams[this.PARAM_CASE_TYPE] = this.selected.caseType.id;\n }\n if (this.selected.caseState) {\n queryParams[this.PARAM_CASE_STATE] = this.selected.caseState.id;\n }\n return queryParams;\n }\n\n private selectCaseType(caseTypes: CaseTypeLite[]) {\n if (caseTypes && caseTypes.length > 0) {\n this.selected.caseType = caseTypes[0];\n const caseType = this.windowService.getLocalStorage(CASE_TYPE_LOC_STORAGE);\n if (caseType) {\n const caseTypeObject = JSON.parse(caseType);\n const result = caseTypes.filter(c => c.id === caseTypeObject.id);\n if (result !== undefined && result.length > 0) {\n this.selected.caseType = result[0];\n } else {\n this.selected.caseType = caseTypes[0];\n }\n } else {\n this.selected.caseType = caseTypes[0];\n }\n this.onCaseTypeIdChange();\n }\n }\n\n private setFocusToTop() {\n window.scrollTo(0, 0);\n\n const topContainer = document.getElementById('search-result-heading__text');\n if (topContainer) {\n topContainer.focus();\n }\n }\n\n private getCaseFields(): void {\n if (this.searchInputs) {\n this.caseFields = this.searchInputs.map(item => FieldsUtils.convertToCaseField(item.field));\n }\n }\n}\n","<ccd-search-filters\n *ngIf=\"isVisible\"\n [jurisdictions]=\"jurisdictions\"\n [autoApply]=\"autoApply\"\n (onApply)=\"onWrapperApply($event)\"\n (onReset)=\"onWrapperReset($event)\"\n (onJuridiction)=\"onWrapperJurisdiction($event)\"\n></ccd-search-filters>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { READ_ACCESS } from '../../domain/case-view/access-types.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\n\n@Component({\n selector: 'ccd-search-filters-wrapper',\n templateUrl: './search-filters-wrapper.component.html',\n})\n\nexport class SearchFiltersWrapperComponent implements OnInit {\n\n @Input()\n public autoApply: boolean;\n\n @Output()\n public onApply: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onReset: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public onJurisdiction: EventEmitter<any> = new EventEmitter();\n\n public jurisdictions: Jurisdiction[];\n public isVisible: boolean;\n\n constructor(\n private readonly definitionsService: DefinitionsService,\n ) {\n }\n\n public ngOnInit(): void {\n this.isVisible = false;\n\n this.definitionsService.getJurisdictions(READ_ACCESS)\n .subscribe(jurisdictions => {\n this.isVisible = true;\n this.jurisdictions = jurisdictions;\n });\n }\n\n public onWrapperApply(value) {\n this.onApply.emit(value);\n }\n\n public onWrapperReset(value) {\n this.onReset.emit(value);\n }\n\n public onWrapperJurisdiction(value) {\n this.onJurisdiction.emit(value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ConditionalShowModule } from '../../directives/conditional-show/conditional-show.module';\nimport { DefinitionsService } from '../../services/definitions/definitions.service';\nimport { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';\nimport { OrderService } from '../../services/order/order.service';\nimport { SearchService } from '../../services/search/search.service';\nimport { WindowService } from '../../services/window/window.service';\nimport { PaletteModule } from '../palette/palette.module';\n\nimport { SearchFiltersWrapperComponent } from './search-filters-wrapper.component';\nimport { SearchFiltersComponent } from './search-filters.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n PaletteModule,\n ConditionalShowModule\n ],\n declarations: [\n SearchFiltersComponent,\n SearchFiltersWrapperComponent\n ],\n exports: [\n SearchFiltersWrapperComponent\n ],\n providers: [\n SearchService,\n OrderService,\n JurisdictionService,\n DefinitionsService,\n WindowService\n ]\n})\nexport class SearchFiltersModule {}\n","<table *ngIf=\"hasResults() || hasDrafts()\">\n <caption>\n <h2 class=\"heading-h2\" id=\"search-result-heading__text\" tabindex=\"-1\">{{ caseState ? 'Your cases' : 'Search result' }}</h2>\n\n <div class=\"govuk-warning-text pagination-limit-warning\" *ngIf=\"paginationLimitEnforced\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n The total size of the result set is {{paginationMetadata.total_results_count | number}}. Only the first 10,000 records are available for display.\n </strong>\n </div>\n\n <div *ngIf=\"(hasResults() || hasDrafts())\" class=\"pagination-top\"\n attr.aria-label=\"{{ getTotalResults() }} results have been found\" role=\"status\">\n <span class=\"text-16\" id=\"search-result-summary__text\">Showing \n <span class=\"govuk-!-font-weight-bold\">{{ getFirstResult() }}</span>\n to\n <span class=\"govuk-!-font-weight-bold\">{{ getLastResult() }}</span>\n of\n <span class=\"govuk-!-font-weight-bold\">{{ getTotalResults() }}</span> results</span>\n </div>\n <div *ngIf=\"(hasResults() || hasDrafts()) && selectionEnabled\" class=\"reset-selection\"\n attr.aria-label=\"Reset selection\">\n <span><a class=\"search-result-reset-link\" href=\"javascript:void()\" (click)=\"clearSelection()\">Reset case selection</a></span>\n </div>\n </caption>\n <thead>\n <tr scope=\"row\">\n <th *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\" [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\">\n </label>\n </div>\n </th>\n <th *ngFor=\"let col of resultView.columns\">\n <table class=\"search-result-column-header\"\n [attr.aria-label]=\"sortLabelText(col.label, isSortAscending(col))\">\n <tr>\n <th style=\"display: none;\"></th>\n <div class=\"search-result-column-label\" (click)=\"sort(col)\">{{col.label}}</div>\n <div *ngIf=\"comparator(col)\" class=\"search-result-column-sort\">\n <a (click)=\"sort(col)\" class=\"sort-widget\" [innerHTML]=\"sortWidget(col)\" href=\"javascript:void(0)\"></a>\n </div>\n </tr>\n </table>\n </th>\n <th *ngIf=\"activityEnabled()\" class=\"search-result-column-activity\" style=\"width: 110px;\"></th>\n </tr>\n </thead>\n <tbody>\n\n <!-- sorted by consumer -->\n <ng-container *ngIf=\"consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n <!-- sorted by toolkit -->\n <ng-container *ngIf=\"!consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | ccdSortSearchResult : sortParameters | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" (keyup)=\"onKeyUp($event, result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n</table>\n\n<ccd-pagination \n *ngIf=\"hasResults()\"\n (pageChange)=\"goToPage($event)\"\n [visibilityLabel]=\"hideRows ? 'hidden' : 'visible'\" \n [autoHide]=\"true\"\n [maxSize]=\"8\"\n [screenReaderPaginationLabel]=\"'Pagination'\"\n [screenReaderPageLabel]=\"page\"\n [screenReaderCurrentLabel]=\"'You\\'re on page'\"></ccd-pagination>\n\n<div *ngIf=\"!(hasResults() || hasDrafts())\" class=\"notification\"\n aria-label=\"No cases found. Try using different filters.\">\n No cases found. Try using different filters.\n</div>\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { AbstractAppConfig } from '../../../app.config';\nimport { PlaceholderService } from '../../directives/substitutor/services/placeholder.service';\nimport { DisplayMode } from '../../domain/activity/activity.model';\nimport { CaseField } from '../../domain/definition/case-field.model';\nimport { CaseState } from '../../domain/definition/case-state.model';\nimport { CaseType } from '../../domain/definition/case-type.model';\nimport { Jurisdiction } from '../../domain/definition/jurisdiction.model';\nimport { DRAFT_PREFIX } from '../../domain/draft.model';\nimport { PaginationMetadata } from '../../domain/pagination-metadata.model';\nimport { SearchResultViewColumn } from '../../domain/search/search-result-view-column.model';\nimport { SearchResultViewItem } from '../../domain/search/search-result-view-item.model';\nimport { SearchResultView } from '../../domain/search/search-result-view.model';\nimport { SearchResultViewItemComparator } from '../../domain/search/sorting/search-result-view-item-comparator';\nimport { SortOrder } from '../../domain/search/sorting/sort-order';\nimport { SortParameters } from '../../domain/search/sorting/sort-parameters';\nimport { CaseReferencePipe } from '../../pipes/case-reference/case-reference.pipe';\nimport { ActivityService } from '../../services/activity/activity.service';\nimport { BrowserService } from '../../services/browser/browser.service';\nimport { SearchResultViewItemComparatorFactory } from '../../services/search-result/sorting/search-result-view-item-comparator-factory';\n\n@Component({\n selector: 'ccd-search-result',\n templateUrl: './search-result.component.html',\n styleUrls: ['./search-result.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SearchResultComponent implements OnChanges, AfterViewInit {\n\n public static readonly PARAM_JURISDICTION = 'jurisdiction';\n public static readonly PARAM_CASE_TYPE = 'case-type';\n public static readonly PARAM_CASE_STATE = 'case-state';\n\n public ICON = DisplayMode.ICON;\n\n @Input()\n public caseLinkUrlTemplate: string;\n\n @Input()\n public jurisdiction: Jurisdiction;\n\n @Input()\n public caseType: CaseType;\n\n @Input()\n public caseState: CaseState;\n\n @Input()\n public caseFilterFG: FormGroup;\n\n @Input()\n public resultView: SearchResultView;\n\n @Input()\n public page: number;\n\n @Input()\n public paginationMetadata: PaginationMetadata;\n\n @Input()\n public metadataFields: string[];\n\n @Input()\n public selectionEnabled = false;\n\n @Input()\n public showOnlySelected = false;\n\n @Input()\n public preSelectedCases: SearchResultViewItem[] = [];\n\n @Input()\n public consumerSortingEnabled = false;\n\n @Output()\n public selection = new EventEmitter<SearchResultViewItem[]>();\n\n @Output()\n public changePage: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public clickCase: EventEmitter<any> = new EventEmitter();\n\n @Output()\n public sortHandler: EventEmitter<any> = new EventEmitter();\n\n public paginationLimitEnforced = false;\n\n public paginationPageSize: number;\n\n public hideRows: boolean;\n\n public selected: {\n init?: boolean,\n jurisdiction?: Jurisdiction,\n caseType?: CaseType,\n caseState?: CaseState,\n formGroup?: FormGroup,\n metadataFields?: string[],\n page?: number\n } = {};\n\n public sortParameters: SortParameters;\n public searchResultViewItemComparatorFactory: SearchResultViewItemComparatorFactory;\n public draftsCount: number;\n\n public consumerSortParameters: { column: string, order: SortOrder, type: string } = { column: null, order: null, type: null };\n\n public selectedCases: SearchResultViewItem[] = [];\n\n private readonly PAGINATION_MAX_ITEM_RESULT = 10000;\n\n constructor(\n searchResultViewItemComparatorFactory: SearchResultViewItemComparatorFactory,\n appConfig: AbstractAppConfig,\n private readonly activityService: ActivityService,\n private readonly caseReferencePipe: CaseReferencePipe,\n private readonly placeholderService: PlaceholderService,\n private readonly browserService: BrowserService,\n private readonly cdr: ChangeDetectorRef\n ) {\n this.searchResultViewItemComparatorFactory = searchResultViewItemComparatorFactory;\n this.paginationPageSize = appConfig.getPaginationPageSize();\n this.hideRows = false;\n }\n\n public get resultTotal(): number {\n const total = this.paginationMetadata.total_results_count;\n const maximumResultReached = total >= this.PAGINATION_MAX_ITEM_RESULT;\n this.paginationLimitEnforced = maximumResultReached;\n\n return maximumResultReached ? this.PAGINATION_MAX_ITEM_RESULT : total;\n }\n\n public ngAfterViewInit(): void {\n if (this.preSelectedCases) {\n for (const preSelectedCase of this.preSelectedCases) {\n if (this.selectedCases && !this.selectedCases.some(aCase => aCase.case_id === preSelectedCase.case_id)) {\n this.selectedCases.push(preSelectedCase);\n }\n }\n }\n this.selection.emit(this.selectedCases);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n\n if (changes['resultView']) {\n this.hideRows = false;\n\n this.sortParameters = undefined;\n // Clone `resultView` to prevent sorting the external variable\n this.resultView = {\n columns: this.resultView.columns.slice(0),\n results: this.resultView.results.slice(0),\n hasDrafts: this.resultView.hasDrafts\n };\n\n this.resultView.columns = this.resultView.columns.sort((a: SearchResultViewColumn, b: SearchResultViewColumn) => {\n return a.order - b.order;\n });\n\n this.hydrateResultView();\n this.draftsCount = this.draftsCount ? this.draftsCount : this.numberOfDrafts();\n\n this.cdr.detectChanges();\n }\n if (changes['page']) {\n this.selected.page = (changes['page']).currentValue;\n this.cdr.detectChanges();\n }\n }\n\n public clearSelection(): void {\n this.selectedCases = [];\n this.selection.emit(this.selectedCases);\n }\n\n public canBeShared(caseView: SearchResultViewItem): boolean {\n return caseView.supplementary_data && caseView.supplementary_data.hasOwnProperty('orgs_assigned_users');\n }\n\n public canAnyBeShared(): boolean {\n for (let i = 0, l = this.resultView.results.length; i < l; i++) {\n if (this.canBeShared(this.resultView.results[i])) {\n return true;\n }\n }\n return false;\n }\n\n public selectAll(): void {\n if (this.allOnPageSelected()) {\n // all cases already selected, so unselect all on this page\n this.resultView.results.forEach(c => {\n this.selectedCases.forEach((s, i) => {\n if (c.case_id === s.case_id) {\n this.selectedCases.splice(i, 1);\n }\n });\n });\n } else {\n this.resultView.results.forEach(c => {\n if (!this.isSelected(c) && this.canBeShared(c)) {\n this.selectedCases.push(c);\n }\n });\n }\n this.selection.emit(this.selectedCases);\n }\n\n public changeSelection(c: SearchResultViewItem): void {\n if (this.isSelected(c)) {\n this.selectedCases.forEach((s, i) => {\n if (c.case_id === s.case_id) {\n this.selectedCases.splice(i, 1);\n }\n });\n } else {\n if (this.canBeShared(c)) {\n this.selectedCases.push(c);\n }\n }\n this.selection.emit(this.selectedCases);\n }\n\n public isSelected(c: SearchResultViewItem): boolean {\n for (let i = 0, l = this.selectedCases.length; i < l; i++) {\n if (c.case_id === this.selectedCases[i].case_id) {\n return true;\n }\n }\n return false;\n }\n\n public allOnPageSelected(): boolean {\n let canBeSharedCount = 0;\n for (let i = 0, l = this.resultView.results.length; i < l; i++) {\n const r = this.resultView.results[i];\n if (this.canBeShared(r)) {\n canBeSharedCount ++;\n }\n if (!this.isSelected(r) && this.canBeShared(r)) {\n return false;\n }\n }\n if (canBeSharedCount === 0) {\n return false;\n }\n return true;\n }\n\n /**\n * Hydrates result view with case field definitions.\n */\n // A longer term resolution is to move this piece of logic to the backend\n public hydrateResultView(): void {\n this.resultView.results.forEach(result => {\n const caseFields = [];\n\n Object.keys(result.case_fields).forEach(fieldId => {\n\n const field = result.case_fields[fieldId];\n\n caseFields.push(Object.assign(new CaseField(), {\n id: fieldId,\n label: null,\n field_type: {},\n value: field,\n display_context: null,\n }));\n });\n\n result.hydrated_case_fields = caseFields;\n result.columns = {};\n\n this.resultView.columns.forEach(col => {\n result.columns[col.case_field_id] = this.buildCaseField(col, result);\n });\n });\n\n }\n\n public goToPage(page): void {\n this.hideRows = true;\n this.selected.init = false;\n this.selected.jurisdiction = this.jurisdiction;\n this.selected.caseType = this.caseType;\n this.selected.caseState = this.caseState;\n this.selected.formGroup = this.caseFilterFG;\n this.selected.metadataFields = this.metadataFields;\n this.selected.page = page;\n // Apply filters\n const queryParams = {};\n queryParams[SearchResultComponent.PARAM_JURISDICTION] = this.selected.jurisdiction ? this.selected.jurisdiction.id : null;\n queryParams[SearchResultComponent.PARAM_CASE_TYPE] = this.selected.caseType ? this.selected.caseType.id : null;\n queryParams[SearchResultComponent.PARAM_CASE_STATE] = this.selected.caseState ? this.selected.caseState.id : null;\n this.changePage.emit({\n selected: this.selected,\n queryParams\n });\n\n const topContainer = document.getElementById('top');\n if (topContainer) {\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur();\n }\n topContainer.focus();\n }\n }\n\n public buildCaseField(col: SearchResultViewColumn, result: SearchResultViewItem): CaseField {\n return Object.assign(new CaseField(), {\n id: col.case_field_id,\n label: col.label,\n field_type: col.case_field_type,\n value: result.case_fields[col.case_field_id],\n display_context_parameter: col.display_context_parameter,\n display_context: col.display_context,\n });\n }\n\n public getColumnsWithPrefix(col: CaseField, result: SearchResultViewItem): CaseField {\n col.value = this.draftPrefixOrGet(col, result);\n col.value = this.placeholderService.resolvePlaceholders(result.case_fields, col.value);\n return col;\n }\n\n public hasResults(): any {\n return this.resultView.results.length && this.paginationMetadata.total_pages_count;\n }\n\n public hasDrafts(): boolean {\n return this.resultView.hasDrafts();\n }\n\n public comparator(column: SearchResultViewColumn): SearchResultViewItemComparator {\n return this.searchResultViewItemComparatorFactory.createSearchResultViewItemComparator(column);\n }\n\n public sort(column: SearchResultViewColumn) {\n if (this.consumerSortingEnabled) {\n if (column.case_field_id !== this.consumerSortParameters.column) {\n this.consumerSortParameters.order = SortOrder.DESCENDING;\n } else {\n this.consumerSortParameters.order = this.consumerSortParameters.order === SortOrder.DESCENDING ?\n SortOrder.ASCENDING :\n SortOrder.DESCENDING;\n }\n this.consumerSortParameters.column = column.case_field_id;\n this.consumerSortParameters.type = column.case_field_type.type;\n this.sortHandler.emit(this.consumerSortParameters);\n } else {\n if (this.comparator(column) === undefined) {\n return;\n } else if (this.isSortAscending(column)) {\n this.sortParameters = new SortParameters(this.comparator(column), SortOrder.ASCENDING);\n } else {\n this.sortParameters = new SortParameters(this.comparator(column), SortOrder.DESCENDING);\n }\n }\n }\n\n public sortWidget(column: SearchResultViewColumn) {\n let condition = false;\n if (this.consumerSortingEnabled) {\n const isColumn = column.case_field_id === this.consumerSortParameters.column;\n const isAscending = this.consumerSortParameters.order === SortOrder.ASCENDING;\n condition = !isColumn || (isColumn && isAscending);\n } else {\n condition = this.isSortAscending(column);\n }\n\n return condition ? '▼' : '▲';\n }\n\n public activityEnabled(): boolean {\n return this.activityService.isEnabled;\n }\n\n public hyphenateIfCaseReferenceOrGet(col, result): any {\n if (col.case_field_id === '[CASE_REFERENCE]') {\n return this.caseReferencePipe.transform(result.case_fields[col.case_field_id]);\n } else {\n if (col.id) {\n if (col.id === '[CASE_REFERENCE]') {\n return this.caseReferencePipe.transform(result.case_fields[col.id]);\n } else {\n return result.case_fields[col.id];\n }\n } else {\n return result.case_fields[col.case_field_id];\n }\n }\n }\n\n public draftPrefixOrGet(col, result): any {\n return result.case_id.startsWith(DRAFT_PREFIX) ? DRAFT_PREFIX : this.hyphenateIfCaseReferenceOrGet(col, result);\n }\n\n public getFirstResult(): number {\n const currentPage = (this.selected.page ? this.selected.page : 1);\n return ((currentPage - 1) * this.paginationPageSize) + 1 + this.getDraftsCountIfNotPageOne(currentPage);\n }\n\n public getLastResult(): number {\n const currentPage = (this.selected.page ? this.selected.page : 1);\n return ((currentPage - 1) * this.paginationPageSize) + this.resultView.results.length + this.getDraftsCountIfNotPageOne(currentPage);\n }\n\n public getTotalResults(): number {\n const total = this.paginationMetadata.total_results_count + this.draftsCount;\n\n return total >= this.PAGINATION_MAX_ITEM_RESULT ? this.PAGINATION_MAX_ITEM_RESULT : total;\n }\n\n public prepareCaseLinkUrl(caseId: string): string {\n let url = this.caseLinkUrlTemplate;\n url = url.replace('jurisdiction_id', this.jurisdiction.id);\n url = url.replace('caseType_id', this.caseType.id);\n url = url.replace('case_id', caseId);\n\n return url;\n }\n\n public goToCase(caseId: string) {\n this.clickCase.emit({\n caseId\n });\n }\n\n public onKeyUp($event: KeyboardEvent, c: SearchResultViewItem): void {\n if ($event.key === 'Space') {\n if (this.browserService.isFirefox || this.browserService.isSafari || this.browserService.isIEOrEdge) {\n this.changeSelection(c);\n }\n }\n }\n\n public isSortAscending(column: SearchResultViewColumn): boolean {\n const currentSortOrder = this.currentSortOrder(column);\n\n return currentSortOrder === SortOrder.UNSORTED || currentSortOrder === SortOrder.DESCENDING;\n }\n\n public sortLabelText(label: string, isAscending: boolean): string {\n return `Sort by ${label} ${ isAscending ? 'ascending' : 'descending'}`;\n }\n\n private currentSortOrder(column: SearchResultViewColumn): SortOrder {\n\n let isAscending = true;\n let isDescending = true;\n\n if (this.comparator(column) === undefined) {\n return SortOrder.UNSORTED;\n }\n for (let i = 0; i < this.resultView.results.length - 1; i++) {\n const comparison = this.comparator(column).compare(this.resultView.results[i], this.resultView.results[i + 1]);\n isDescending = isDescending && comparison <= 0;\n isAscending = isAscending && comparison >= 0;\n if (!isAscending && !isDescending) {\n break;\n }\n }\n return isAscending ? SortOrder.ASCENDING : isDescending ? SortOrder.DESCENDING : SortOrder.UNSORTED;\n }\n\n private getDraftsCountIfNotPageOne(currentPage): number {\n return currentPage > 1 ? this.draftsCount : 0;\n }\n\n private numberOfDrafts(): number {\n return this.resultView.results.filter(_ => _.case_id.startsWith(DRAFT_PREFIX)).length;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport { LabelSubstitutorDirective } from '../../directives/substitutor/label-substitutor.directive';\nimport { LabelSubstitutorModule } from '../../directives/substitutor/label-substitutor.module';\nimport { CaseReferencePipe } from '../../pipes/case-reference/case-reference.pipe';\nimport { PipesModule } from '../../pipes/pipes.module';\nimport { BrowserService } from '../../services/browser/browser.service';\nimport { SearchResultViewItemComparatorFactory } from '../../services/search-result/sorting/search-result-view-item-comparator-factory';\nimport { ActivityModule } from '../activity/activity.module';\nimport { PaginationModule } from '../pagination/pagination.module';\nimport { PaletteModule } from '../palette/palette.module';\nimport { SearchResultComponent } from './search-result.component';\n\n@NgModule({\n imports: [\n CommonModule,\n NgxPaginationModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n LabelSubstitutorModule,\n PipesModule,\n ActivityModule,\n PaginationModule\n ],\n declarations: [\n SearchResultComponent\n ],\n exports: [\n SearchResultComponent,\n ],\n providers: [\n SearchResultViewItemComparatorFactory,\n BrowserService\n ]\n})\nexport class SearchResultModule {}\n","export class ComplexFieldOverride {\n public complex_field_element_id: string;\n public display_context: string;\n public label?: string;\n public hint_text?: string;\n public show_condition?: string;\n}\n","import { CaseField, FieldType } from '../domain/definition';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\n\nexport class CaseFieldBuilder {\n\n private readonly caseField: CaseField = new CaseField();\n public static create(): CaseFieldBuilder {\n return new CaseFieldBuilder();\n }\n\n public withACLs(acls: AccessControlList[]): CaseFieldBuilder {\n this.caseField.acls = acls;\n return this;\n }\n\n public withId(id: string): CaseFieldBuilder {\n this.caseField.id = id;\n return this;\n }\n\n public withFieldType(field_type: FieldType): CaseFieldBuilder {\n this.caseField.field_type = field_type;\n return this;\n }\n\n public withDisplayContext(display_context: string): CaseFieldBuilder {\n this.caseField.display_context = display_context;\n return this;\n }\n\n public withDisplayContextParameter(display_context_parameter: string): CaseFieldBuilder {\n this.caseField.display_context_parameter = display_context_parameter;\n return this;\n }\n\n public withHidden(hidden: boolean): CaseFieldBuilder {\n this.caseField.hidden = hidden;\n return this;\n }\n\n public withHintText(hint_text: string): CaseFieldBuilder {\n this.caseField.hint_text = hint_text;\n return this;\n }\n\n public withLabel(label: string): CaseFieldBuilder {\n this.caseField.label = label;\n return this;\n }\n\n public withOrder(order: number): CaseFieldBuilder {\n this.caseField.order = order;\n return this;\n }\n\n public withSecurityLabel(security_label: string): CaseFieldBuilder {\n this.caseField.security_label = security_label;\n return this;\n }\n\n public withShowCondition(show_condition: string): CaseFieldBuilder {\n this.caseField.show_condition = show_condition;\n return this;\n }\n\n public withShowSummaryContentOption(option: number): CaseFieldBuilder {\n this.caseField.show_summary_content_option = option;\n return this;\n }\n\n public withValue(value: any): CaseFieldBuilder {\n this.caseField.value = value;\n return this;\n }\n\n public withListValue(value: any): CaseFieldBuilder {\n this.caseField.list_items = value;\n return this;\n }\n\n public build(): CaseField {\n return this.caseField;\n }\n}\n","import { ComplexFieldOverride } from '../components/case-editor/domain/wizard-page-field-complex-override.model';\nimport { WizardPageField } from '../components/case-editor/domain/wizard-page-field.model';\nimport { WizardPage } from '../components/case-editor/domain/wizard-page.model';\nimport { ShowCondition } from '../directives/conditional-show/domain/conditional-show.model';\nimport { CaseEventTrigger } from '../domain/case-view/case-event-trigger.model';\nimport { AccessControlList } from '../domain/definition/access-control-list.model';\nimport { CaseField } from '../domain/definition/case-field.model';\nimport { FieldTypeEnum } from '../domain/definition/field-type-enum.model';\nimport { FieldType } from '../domain/definition/field-type.model';\nimport { FixedListItem } from '../domain/definition/fixed-list-item.model';\nimport { CaseFieldBuilder } from './case-field-builder';\n\nexport const textFieldType = (): FieldType => {\n return {\n id: 'Text',\n type: 'Text',\n complex_fields: []\n };\n};\n\nexport const createCaseEventTrigger = (id: string,\n name: string,\n case_id: string,\n show_summary: boolean,\n case_fields: CaseField[],\n wizard_pages = [],\n can_save_draft = false): CaseEventTrigger => {\n const eventTrigger = new CaseEventTrigger();\n\n eventTrigger.id = id;\n eventTrigger.name = name;\n eventTrigger.case_id = case_id;\n eventTrigger.show_summary = show_summary;\n eventTrigger.wizard_pages = wizard_pages;\n eventTrigger.event_token = 'test-token';\n eventTrigger.case_fields = case_fields;\n eventTrigger.can_save_draft = can_save_draft;\n return eventTrigger;\n};\n\nexport const aCaseField = (id: string, label: string, type: FieldTypeEnum, display_context: string,\n show_summary_content_option: number, typeComplexFields: CaseField[] = [],\n retain_hidden_value?: boolean, hidden?: boolean): CaseField => {\n return ({\n id: id || 'personFirstName',\n field_type: {\n id: type.toString() || 'Text',\n type: type || 'Text',\n complex_fields: typeComplexFields || []\n },\n display_context: display_context || 'OPTIONAL',\n label: label || 'First name',\n show_summary_content_option,\n retain_hidden_value: retain_hidden_value || false,\n hidden: hidden || false\n }) as CaseField;\n};\n\nexport const createWizardPage = (id: string,\n label: string,\n order: number,\n wizardPageFields: WizardPageField[] = [],\n caseFields: CaseField[] = [],\n showCondition: string,\n parsedShowCondition: ShowCondition = null): WizardPage => {\n const wizardPage = new WizardPage();\n wizardPage.id = id;\n wizardPage.label = label;\n wizardPage.order = order;\n wizardPage.wizard_page_fields = wizardPageFields;\n wizardPage.case_fields = caseFields;\n wizardPage.show_condition = showCondition;\n wizardPage.parsedShowCondition = parsedShowCondition;\n return wizardPage;\n};\n\nexport const createWizardPageField = (id: string,\n order: number,\n pageColumnNumber: number,\n complexFieldOverrides: ComplexFieldOverride[] = []): WizardPageField => {\n const wizardPageField = new WizardPageField();\n wizardPageField.case_field_id = id;\n wizardPageField.order = order;\n wizardPageField.page_column_no = pageColumnNumber;\n wizardPageField.complex_field_overrides = complexFieldOverrides;\n return wizardPageField;\n};\n\nexport const createComplexFieldOverride = (id: string,\n order: number,\n displayContext: string,\n label: string,\n hint: string,\n showCondition: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = displayContext;\n complexFieldOverride.label = label;\n complexFieldOverride.hint_text = hint;\n complexFieldOverride.show_condition = showCondition;\n return complexFieldOverride;\n};\n\nexport const createHiddenComplexFieldOverride = (id: string): ComplexFieldOverride => {\n const complexFieldOverride = new ComplexFieldOverride();\n complexFieldOverride.complex_field_element_id = id;\n complexFieldOverride.display_context = 'HIDDEN';\n return complexFieldOverride;\n};\n\nexport const createCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined,\n show_condition = undefined,\n ACLs: AccessControlList[] = undefined,\n hidden?: boolean): CaseField => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withLabel(label || 'First name')\n .withHintText(hint || 'First name hint text')\n .withShowSummaryContentOption(0)\n .withOrder(order)\n .withShowCondition(show_condition || undefined)\n .withACLs(ACLs)\n .withHidden(hidden || false)\n .build();\n};\n\nexport const newCaseField = (id: string,\n label: string,\n hint: string,\n fieldType: FieldType,\n display_context: string,\n order = undefined): CaseFieldBuilder => {\n return CaseFieldBuilder.create()\n .withId(id || 'personFirstName')\n .withFieldType(fieldType || textFieldType())\n .withDisplayContext(display_context || 'OPTIONAL')\n .withHintText(hint || 'First name hint text')\n .withLabel(label || 'First name')\n .withOrder(order)\n .withShowSummaryContentOption(0);\n};\n\nexport const createFieldType = (typeId: string,\n type: FieldTypeEnum,\n complex_fields: CaseField[] = [],\n collection_field_type: FieldType = undefined): FieldType => {\n return {\n id: typeId || 'Text',\n type: type || 'Text',\n complex_fields: complex_fields || [],\n collection_field_type: collection_field_type || undefined\n };\n};\n\nexport const createFixedListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'FixedList-' + typeId,\n type: 'FixedList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createMultiSelectListFieldType = (typeId: string,\n fixedListItems: FixedListItem[] = []): FieldType => {\n return {\n id: 'MultiSelectList-' + typeId,\n type: 'MultiSelectList',\n fixed_list_items: fixedListItems || []\n };\n};\n\nexport const createACL = (role: string, create: boolean, read: boolean, update: boolean, _delete: boolean): AccessControlList => {\n return ({\n role: role || 'roleX',\n create,\n read,\n update,\n delete: _delete\n }) as AccessControlList;\n};\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class TestRouteSnapshotBuilder {\n private parent: ActivatedRouteSnapshot = null;\n private params: object = {};\n private data: object = {};\n\n public withParent(parent: ActivatedRouteSnapshot): TestRouteSnapshotBuilder {\n this.parent = parent;\n return this;\n }\n\n public withParams(params: object): TestRouteSnapshotBuilder {\n this.params = params;\n return this;\n }\n\n public withData(data: object): TestRouteSnapshotBuilder {\n this.data = data;\n return this;\n }\n\n public build(): ActivatedRouteSnapshot {\n return {\n url: [],\n params: this.params,\n queryParams: [],\n fragment: '',\n data: this.data,\n outlet: null,\n component: null,\n routeConfig: null,\n root: null,\n parent: this.parent,\n firstChild: null,\n children: [],\n pathFromRoot: null,\n paramMap: null,\n queryParamMap: null,\n };\n }\n}\n"],"mappings":"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GACAgtB,GACA8rD,cACAC,6BACAC,yBACAC,yBACAC,qBACAC,iBACAC,sBACAC,mBACAC,iBAAeC,WAYfv5E,GACA61E,GACA4B,OAcS,oBAAA1kF,uBAAApD,EAAA,mBAAA8oF,GAAa,CAAAzlF,aAAA,CAzBtBq6D,GACAS,GACAtC,GACAU,GACA4rB,GAxGAva,GACAniB,GACAqiB,GACA54B,GACA26B,GACAe,GACArB,GACArO,GACAwK,GACAnK,GACAN,GACAJ,GACAF,GACAR,GAGAkN,GACAnB,GACA5I,GACApG,GACA0O,GACA7gB,GACAlK,GACAsS,GAGAob,GACArH,GACAF,GACAV,GACAlC,GACAR,GACAzC,GACAsB,GACA3G,GACA6B,GACAS,GACA5B,GACAjd,GACAiL,GACAxE,GACAsE,GACAtB,GAGA7K,GACApC,GACAurB,GACApQ,GACA+E,GACAW,GACA2Q,GACA/d,GACAmd,GACAb,GACAtI,GACAlG,GACAlO,GAGAyf,GACAvG,GACAhB,GACA5C,GACAvC,GACA3S,GACAwT,GACAlF,GACAS,GACA3e,GACAiD,IAA6Bv/C,QAAA,CAK7BJ,eACA8lF,gBACA7lF,eACA8lF,cACAC,sBACAhD,GACA4B,GACAjC,GACA5iF,GACA8iF,GACAD,GACAE,GACA31E,GACAgtB,GACA8rD,cACAC,6BACAC,yBACAC,yBACAC,qBACAC,iBACAC,sBACAC,mBAAgBG,EAAAF,gBAAApmF,QAAA,CAahB8M,GACA61E,GACA4B,GA/GAla,GACAniB,GACAqiB,GACA54B,GACA26B,GACAe,GACArB,GACArO,GACAwK,GACAnK,GACAN,GACAJ,GACAF,GACAR,GAGAkN,GACAnB,GACA5I,GACApG,GACA0O,GACA7gB,GACAlK,GACAsS,GAGAob,GACArH,GACAF,GACAV,GACAlC,GACAR,GACAzC,GACAsB,GACA3G,GACA6B,GACAS,GACA5B,GACAjd,GACAiL,GACAxE,GACAsE,GACAtB,GAGA7K,GACApC,GACAurB,GACApQ,GACA+E,GACAW,GACA2Q,GACA/d,GACAmd,GACAb,GACAtI,G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9C/xG,YAAUC,KAAA,EACTC,SAAU,mCACVC,YAAa,qD,mDEyFf,IAAA6xG,GAAA,W,oCAAaA,GAAgB,E,iCAAhBA,KAfAA,GAAA,KAAApzG,EAAA,kBAAAgN,UAAA,CACT0pD,GACA8pB,GACA2U,GACAtgD,GACA+rD,GACApqF,GACAuB,GACA8pB,GACAoL,GACAr4B,GACA4qF,GACA3L,IAjDOvwF,QAAA,EACPJ,eACAC,eACAyiF,GACAloE,GACAywE,GACA0gB,GACAI,GACA/D,GACApiB,GACAkE,GACAv4D,GACAmqE,GACAyU,gBACAnqB,sBACA16E,GACA6uB,QAoCS,oBAAAj6B,uBAAApD,EAAA,mBAAAozG,GAAgB,CAAA/vG,aAAA,CAjCzBi+F,GACAuI,GACAO,GACA1H,GACAuD,GACAjE,GACAkH,GACAoG,GACAuD,GACAb,GACAR,GACA2B,GACAxB,IAAuCruG,QAAA,CA9BvCJ,eACAC,eACAyiF,GACAloE,GACAywE,GACA0gB,GACAI,GACA/D,GACApiB,GACAkE,GACAv4D,GACAmqE,GACAyU,gBACAnqB,sBACA16E,GACA6uB,IAAsB95B,QAAA,CAkBtB6mG,GACApI,O,+DAiBSoR,GAAgB,E,KArD5B5vG,WAASnC,KAAA,EACRiC,QAAS,CACPJ,eACAC,eACAyiF,GACAloE,GACAywE,GACA0gB,GACAI,GACA/D,GACApiB,GACAkE,GACAv4D,GACAmqE,GACAyU,gBACAnqB,sBACA16E,GACA6uB,IAEFh6B,aAAc,CACZi+F,GACAuI,GACAO,GACA1H,GACAuD,GACAjE,GACAkH,GACAoG,GACAuD,GACAb,GACAR,GACA2B,GACAxB,IAEFpuG,QAAS,CACP6mG,GACApI,IAEFh1F,UAAW,CACT0pD,GACA8pB,GACA2U,GACAtgD,GACA+rD,GACApqF,GACAuB,GACA8pB,GACAoL,GACAr4B,GACA4qF,GACA3L,Q,WAzBA7zF,EAAA,oBAAAgiG,GAAiB,CAAAlY,EAAAC,KAHjBqgB,IAAmB,ICtCV,IAAAkJ,GAAwB,CACnC,CACE/hG,KAAM,QACNmiB,UAAWm2E,IAEb,CACEt4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"}
|