{"version":3,"sources":["webpack:///./src/infrastructure/components/query-filters/map-attributes-query-filter.ts","webpack:///./src/help/faqs/faq-group-service.js","webpack:///./src/tests/test-service.ts","webpack:///./src/location-testing/point-types/point-type-service.js","webpack:///./src/location-testing/plans/plan-coverage-type.ts","webpack:///./src/infrastructure/components/data-grid-select-all.ts","webpack:///./src/infrastructure/uploaded-files/uploaded-file-service.js","webpack:///./src/location-testing/cap-plans/cap-plan-service.ts","webpack:///./src/location-testing/point-selector-filter.ts","webpack:///./src/segmentation-templates/segment-type.ts","webpack:///./src/location-testing/plans/plan-service.ts","webpack:///./src/location-testing/remediations/remediation-user-type.ts","webpack:///./src/requests/sample-composite-options.ts","webpack:///./src/login-audit/login-audit-service.js","webpack:///./src/remediation-root-causes/remediation-root-cause-service.ts","webpack:///./src/location-testing/tasks/task-request-submission-service.ts","webpack:///./src/test-methods/test-method-helper.ts","webpack:///./src/location-testing/remediations/remediation-failed-tests-grid.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-configuration.ts","webpack:///./src/export-task-collection-templates/ui-view-export-task-collection-template.ts","webpack:///./src/infrastructure/components/query-filters/organizations-query-filter.ts","webpack:///./src/location-testing/operations-timing-options.js","webpack:///./src/location-testing/tasks/task-list-query-filters.ts","webpack:///./src/segmentation-templates/segmentation-template-segment-usages.ts","webpack:///./src/help/support/support-topic-service.js","webpack:///./src/infrastructure/components/query-filters/operations-timing-query-filter.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-service.ts","webpack:///./src/infrastructure/logger.js","webpack:///./src/test-results/test-results-grid.ts","webpack:///./src/infrastructure/aurelia-cell-renderer.ts","webpack:///./src/location-testing/operations-timing-helper.ts","webpack:///./src/location-testing/remediations/remediation-files-grid.ts","webpack:///./src/help/glossary/glossary-term-service.js","webpack:///./src/location-testing/test-method-group.ts","webpack:///./src/infrastructure/time-zone-service.js","webpack:///./src/location-testing/tasks/task-list-view-option.ts","webpack:///./src/status/status-query-filters.ts","webpack:///./src/location-testing/maps/map-summary-converter.ts","webpack:///./src/location-testing/plan-management/plan-management-service.ts","webpack:///./src/help/user-guides/user-guide-service.js","webpack:///./src/test-results/pagination-page-sizer.ts","webpack:///./src/infrastructure/components/query-filters/is-submitted-query-filter.ts","webpack:///./src/organizations/organization-service.ts","webpack:///./src/news-items/news-item-service.js","webpack:///./src/segmentation-templates/ui-segmentation-template.ts","webpack:///./src/password-requirements/password-requirements-service.js","webpack:///./src/infrastructure/components/query-filters/is-assigned-query-filter.ts","webpack:///./src/users/user-service.ts","webpack:///./src/infrastructure/components/query-filters/record-status-query-filter.ts","webpack:///./src/infrastructure/components/query-filters/confirmation-testing-query-filter.ts","webpack:///./src/infrastructure/ag-grid/ag-localstorage-helper.ts","webpack:///./src/location-testing/tasks/task-order-preference-service.ts","webpack:///./src/organizations/organization-data-type-setting.ts","webpack:///./src/location-testing/tasks/task-order.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/contracts/subscription-frequency-type.ts","webpack:///./src/location-testing/map-attributes/map-attribute-service.js","webpack:///./src/test-methods/test-method-service.js","webpack:///./src/location-testing/requests/sample-order.ts","webpack:///./src/label-templates/label-template-service.ts","webpack:///./src/label-templates/sample-label-display-only-element-manager.ts","webpack:///./src/location-testing/collection-type.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-service.ts","webpack:///./src/location-testing/maps/playback/playback-utility.js","webpack:///./src/location-testing/plan-management/ag-plan-management-grid-action-renderer.ts","webpack:///./src/infrastructure/components/datepicker-patch.js","webpack:///./src/location-testing/point-attributes/point-attribute-service.js","webpack:///./src/location-testing/maps/map-dashboard-selection-mode.ts","webpack:///./src/qualitative-results/qualitative-result-service.js","webpack:///./src/infrastructure/components/query-filters/collection-types-query-filter.ts","webpack:///./src/status/ui-certificate-contact.ts","webpack:///./src/dashboard/dashboard-service.ts","webpack:///./src/infrastructure/form-change-check-step.js","webpack:///./src/infrastructure/ag-grid/aurelia-cell-editor-comp-base.ts","webpack:///./src/infrastructure/components/query-filters/base-query-filter.ts","webpack:///./src/infrastructure/constants/organization-configuration.constants.ts","webpack:///./src/label-templates/label-template-type.ts","webpack:///./src/infrastructure/validation/validators.ts","webpack:///./src/reporting/reports/report-downloader.ts","webpack:///./src/infrastructure/ag-grid/ag-cell-renderers.ts","webpack:///./src/location-testing/tasks/task-service.ts","webpack:///./src/requests/v2/sample-segmentation-grid-col-builder.ts","webpack:///./src/infrastructure/string-utility.js","webpack:///./src/location-testing/plans/ui-schedule.ts","webpack:///./src/coa-report-styles/coa-report-style-service.ts","webpack:///./src/location-testing/remediations/remediation-service.ts","webpack:///./src/test-results/outcome-status-query-filter.ts","webpack:///./src/location-testing/points/point-risk.ts","webpack:///./src/infrastructure/ag-grid/ag-onfirstdatarendered-handler.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-list-query-filters.ts","webpack:///./src/dashboard-widgets/grid-config.ts","webpack:///./src/infrastructure/components/query-filters/map-plan-query-filter.ts","webpack:///./src/location-testing/plans/generate-task-date-selection-type.ts","webpack:///./src/location-testing/points/point-risk-comparer.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/infrastructure/number-utility.js","webpack:///./src/requests/v2/sample-segmentation-validator.ts","webpack:///./src/location-testing/cap-plans/ui-cap-plan-filters.ts","webpack:///./src/dashboard-widgets/widgets/remediation-stat-filters.ts","webpack:///./src/application-modules/application-module-id.ts","webpack:///./src/application-modules/application-module-service.js","webpack:///./src/requests/v2/ag-grid-components/ag-datemask-editor.ts","webpack:///./src/location-testing/maps/map-service.ts","webpack:///./src/infrastructure/ag-grid/ag-cell-helpers.ts","webpack:///./src/reporting/reports/report-service.ts","webpack:///./src/infrastructure/components/excel-cell-renderer.js","webpack:///./src/dashboard-widgets/widget-registry.ts","webpack:///./src/organization-sample-templates/organization-sample-template-service.js","webpack:///./src/location-testing/tasks/task-status-update-service.ts","webpack:///./src/infrastructure/components/cell-renderers/ag-bool-cell-renderer.ts","webpack:///./src/reporting/parameter-option-service.ts","webpack:///./src/location-testing/plans/task-generation-request-service.ts","webpack:///./src/test-results/test-results-query-filters.ts","webpack:///./src/location-testing/points/point-service.ts","webpack:///./src/infrastructure/application-insights-service.ts","webpack:///./src/infrastructure/components/query-filters/date-range-query-filter.ts","webpack:///./src/ams-coa-exports/ams-coa-export-service.ts","webpack:///./src/location-testing/maps/map-dashboard-view-option.ts","webpack:///./src/global-messaging/global-message-search-type.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-grid.ts","webpack:///./src/infrastructure/organization-utility.js","webpack:///./src/dashboard-widgets/dashboard-settings-service.ts","webpack:///./src/infrastructure/debounce.js","webpack:///./src/location-testing/points/point-zones.ts","webpack:///./src/infrastructure/validation/validation-error-formatter.ts","webpack:///./src/infrastructure/custom-error.ts","webpack:///./src/location-testing/maps/grids/point-test-result-grid.ts","webpack:///./src/security/login-error-message-provider.js","webpack:///./src/ams-coa-exports/create-ams-coa-export.ts","webpack:///./src/ams-coa-exports/create-ams-coa-export.html","webpack:///./src/app.js","webpack:///./src/app.html","webpack:///./src/app.scss","webpack:///./src/remediation-root-causes/remediation-root-cause-grid.ts","webpack:///./src/infrastructure/header/global-message-notifier/global-message-notification-grid.ts","webpack:///./src/organizations/organization-configuration-settings.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-header-options.ts","webpack:///./src/dashboard-widgets/dashboard-widgets-query-filters.ts","webpack:///./src/infrastructure/ag-grid/ag-grouping-helper.ts","webpack:///./src/base-styles/app.scss","webpack:///./src/location-testing/attribute-utility.ts","webpack:///./src/location-testing/plans/generate-tasks-distribution-method.ts","webpack:///./src/location-testing/plans/plan-type.ts","webpack:///./src/global-messaging/global-message-grid.ts","webpack:///./src/location-testing/maps/map-dashboard-query-filters.ts","webpack:///./src/dashboard-template-defaults/dashboard-template-default-detail.ts","webpack:///./src/dashboard-template-defaults/dashboard-template-default-detail.html","webpack:///./src/dashboard-template-defaults/dashboard-template-default-list.ts","webpack:///./src/dashboard-template-defaults/dashboard-template-default-list.html","webpack:///./src/dashboard-templates/dashboard-template-detail.ts","webpack:///./src/dashboard-templates/dashboard-template-detail.html","webpack:///./src/dashboard-templates/dashboard-template-list.ts","webpack:///./src/dashboard-templates/dashboard-template-list.html","webpack:///./src/dashboard-widgets/dashboard-widgets.ts","webpack:///./src/dashboard-widgets/dashboard-widgets.html","webpack:///./src/dashboard-widgets/dashboard-widgets.scss","webpack:///./src/dashboard-widgets/widget-filter-panel.ts","webpack:///./src/dashboard-widgets/widget-filter-panel.html","webpack:///./src/dashboard-widgets/widget-layout-editor/widget-layout-editor.ts","webpack:///./src/dashboard-widgets/widget-layout-editor/widget-layout-editor.html","webpack:///./src/dashboard-widgets/widget-layout-editor/widget-layout-editor.scss","webpack:///./src/dashboard-widgets/widget-shell.ts","webpack:///./src/dashboard-widgets/widget-shell.html","webpack:///./src/dashboard-widgets/widgets/my-remediations-widget.ts","webpack:///./src/dashboard-widgets/widgets/my-remediations-widget.html","webpack:///./src/dashboard-widgets/widgets/my-remediations-widget.scss","webpack:///./src/dashboard-widgets/widgets/my-tasks-widget.ts","webpack:///./src/dashboard-widgets/widgets/my-tasks-widget.html","webpack:///./src/dashboard-widgets/widgets/my-tasks-widget.scss","webpack:///./src/dashboard-widgets/widgets/remediation-management-widget.ts","webpack:///./src/dashboard-widgets/widgets/remediation-management-widget.html","webpack:///./src/dashboard-widgets/widgets/remediation-management-widget.scss","webpack:///./src/dashboard-widgets/widgets/request-statuses-widget.ts","webpack:///./src/dashboard-widgets/widgets/request-statuses-widget.html","webpack:///./src/dashboard-widgets/widgets/request-statuses-widget.scss","webpack:///./src/dashboard-widgets/widgets/task-management-widget.ts","webpack:///./src/dashboard-widgets/widgets/task-management-widget.html","webpack:///./src/dashboard-widgets/widgets/task-management-widget.scss","webpack:///./src/dashboard-widgets/widgets/test-results-widget.ts","webpack:///./src/dashboard-widgets/widgets/test-results-widget.html","webpack:///./src/dashboard-widgets/widgets/test-results-widget.scss","webpack:///./src/dashboard/dashboard.ts","webpack:///./src/dashboard/dashboard.html","webpack:///./src/status/custom-coa-submitter.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template.ts","webpack:///./src/infrastructure/dialogs/dialog-presenter.js","webpack:///./src/location-testing/remediations/remediation-point-test-history-grid.ts","webpack:///./src/requests/v2/sample-segmentation-grid-options.ts","webpack:///./src/security/security-service.js","webpack:///./src/infrastructure/ag-grid/ag-stateful-grid-builder.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-detail.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-detail.html","webpack:///./src/export-task-collection-templates/export-task-collection-template-list.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-list.html","webpack:///./src/export-task-collection-templates/export-task-collection-template.scss","webpack:///./src/global-messaging/global-messaging-service.ts","webpack:///./src/dashboard-templates/dashboard-template-service.ts","webpack:///./src/requests/v2/sample-segmentation-grid-col-data-factory.ts","webpack:///./src/location-testing/cap-plans/cap-plan-trigger-result-message.ts","webpack:///./src/infrastructure/http-client-configurator.js","webpack:///./src/test-results/outcome-status.ts","webpack:///./src/labs/lab-service.js","webpack:///./src/global-messaging/global-message-detail.ts","webpack:///./src/global-messaging/global-message-detail.html","webpack:///./src/global-messaging/global-message-list.ts","webpack:///./src/global-messaging/global-message-list.html","webpack:///./src/infrastructure/closest.js","webpack:///./src/location-testing/test-method-management/test-method-management-service.ts","webpack:///./src/distributions-groups/distribution-group-service.ts","webpack:///./src/help/faqs/faq-detail.js","webpack:///./src/help/faqs/faq-detail.html","webpack:///./src/help/faqs/faq-group-detail.js","webpack:///./src/help/faqs/faq-group-detail.html","webpack:///./src/help/faqs/faq-group-list.js","webpack:///./src/help/faqs/faq-group-list.html","webpack:///./src/help/faqs/faq-list.js","webpack:///./src/help/faqs/faq-list.html","webpack:///./src/help/faqs/faqs.js","webpack:///./src/help/faqs/faqs.html","webpack:///./src/help/glossary/glossary.js","webpack:///./src/help/glossary/glossary-term-detail.js","webpack:///./src/help/glossary/glossary-term-detail.html","webpack:///./src/help/glossary/glossary-term-list.js","webpack:///./src/help/glossary/glossary-term-list.html","webpack:///./src/help/glossary/glossary.html","webpack:///./src/help/help-navigation-menu.js","webpack:///./src/help/help-navigation-menu.html","webpack:///./src/help/support/support.js","webpack:///./src/help/support/support-topic-detail.js","webpack:///./src/help/support/support-topic-detail.html","webpack:///./src/help/support/support-topic-list.js","webpack:///./src/help/support/support-topic-list.html","webpack:///./src/help/support/support.html","webpack:///./src/help/user-guides/markdown-editor.js","webpack:///./src/help/user-guides/markdown-editor.html","webpack:///./src/help/user-guides/user-guide-detail.js","webpack:///./src/help/user-guides/user-guide-detail.html","webpack:///./src/help/user-guides/user-guide-list.js","webpack:///./src/help/user-guides/user-guide-list.html","webpack:///./src/location-testing/plans/task-generation-client-settings.ts","webpack:///./src/infrastructure/promise-queue.ts","webpack:///./src/help/support/support-request-service.js","webpack:///./src/infrastructure/components/accordion.js","webpack:///./src/infrastructure/components/accordion-item.js","webpack:///./src/infrastructure/components/accordion-item.html","webpack:///./src/infrastructure/components/accordion.html","webpack:///./src/infrastructure/components/content-size-change.js","webpack:///./src/infrastructure/components/data-dropdown.js","webpack:///./src/infrastructure/components/data-equalizer.js","webpack:///./src/infrastructure/components/data-grid.js","webpack:///./src/infrastructure/components/data-grid.html","webpack:///./src/infrastructure/components/data-toggler.js","webpack:///./src/infrastructure/components/datepicker.js","webpack:///./src/infrastructure/components/datepicker.html","webpack:///./src/infrastructure/components/doughnut-chart.js","webpack:///./src/infrastructure/components/doughnut-chart.html","webpack:///./src/infrastructure/components/error-tooltip.js","webpack:///./src/infrastructure/components/error-tooltip.html","webpack:///./src/infrastructure/components/filters/date-range-filter.ts","webpack:///./src/infrastructure/components/filters/date-range-filter.html","webpack:///./src/infrastructure/components/filters/filter-buttons.js","webpack:///./src/infrastructure/components/filters/filter-buttons.html","webpack:///./src/infrastructure/components/filters/map-plan-filter.ts","webpack:///./src/infrastructure/components/filters/map-plan-filter.html","webpack:///./src/infrastructure/components/filters/organization-filter.js","webpack:///./src/infrastructure/components/filters/organization-filter.html","webpack:///./src/infrastructure/components/filters/test-method-filter.js","webpack:///./src/infrastructure/components/filters/test-method-filter.html","webpack:///./src/infrastructure/components/full-calendar.js","webpack:///./src/infrastructure/components/full-calendar.html","webpack:///./src/infrastructure/components/full-height.js","webpack:///./src/infrastructure/components/index.js","webpack:///./src/infrastructure/components/info-tip.js","webpack:///./src/infrastructure/components/info-tip.html","webpack:///./src/infrastructure/components/keyhold-prevent-focus.js","webpack:///./src/infrastructure/components/mini-doughnut-chart.js","webpack:///./src/infrastructure/components/mini-doughnut-chart.html","webpack:///./src/infrastructure/components/notify-form-changes.js","webpack:///./src/infrastructure/components/record-change-list.js","webpack:///./src/infrastructure/components/record-change-list.html","webpack:///./src/infrastructure/components/required.ts","webpack:///./src/infrastructure/components/scroll-into-view.js","webpack:///./src/infrastructure/components/select2.js","webpack:///./src/infrastructure/components/select2-item-template.js","webpack:///./src/infrastructure/components/select2.html","webpack:///./src/infrastructure/components/selector.ts","webpack:///./src/infrastructure/components/selector-item-template.ts","webpack:///./src/infrastructure/components/selector.html","webpack:///./src/infrastructure/components/slider.js","webpack:///./src/infrastructure/components/slider.html","webpack:///./src/infrastructure/components/time-selector.js","webpack:///./src/infrastructure/components/time-selector.html","webpack:///./src/infrastructure/converters/array-property-map-value-converter.js","webpack:///./src/infrastructure/converters/boolean-value-converter.js","webpack:///./src/infrastructure/converters/cap-plan-test-method-format-value-converter.js","webpack:///./src/infrastructure/converters/comma-separate-value-converter.js","webpack:///./src/infrastructure/converters/currency-value-converter.js","webpack:///./src/infrastructure/converters/date-format-value-converter.js","webpack:///./src/infrastructure/converters/dictionary-value-converter.js","webpack:///./src/infrastructure/converters/filter-value-converter.js","webpack:///./src/infrastructure/converters/group-by-value-converter.js","webpack:///./src/infrastructure/converters/index.js","webpack:///./src/infrastructure/converters/json-value-converter.js","webpack:///./src/infrastructure/converters/lookup-and-map-value-converter.ts","webpack:///./src/infrastructure/converters/number-format-value-converter.js","webpack:///./src/infrastructure/converters/number-value-converter.js","webpack:///./src/infrastructure/converters/object-keys-value-converter.ts","webpack:///./src/infrastructure/converters/percent-value-converter.js","webpack:///./src/infrastructure/converters/sort-value-converter.js","webpack:///./src/infrastructure/converters/take-value-converter.js","webpack:///./src/infrastructure/converters/test-method-format-value-converter.js","webpack:///./src/infrastructure/dialogs/ag-grid-dialog.ts","webpack:///./src/infrastructure/dialogs/ag-grid-dialog.html","webpack:///./src/infrastructure/dialogs/alert.js","webpack:///./src/infrastructure/dialogs/alert.html","webpack:///./src/infrastructure/dialogs/confirmation.js","webpack:///./src/infrastructure/dialogs/confirmation.html","webpack:///./src/infrastructure/dialogs/data-grid-reorder-dialog.ts","webpack:///./src/infrastructure/dialogs/data-grid-reorder-dialog.html","webpack:///./src/infrastructure/dialogs/exportable-field-selector.ts","webpack:///./src/infrastructure/dialogs/exportable-field-selector.html","webpack:///./src/infrastructure/dialogs/label-selector.js","webpack:///./src/infrastructure/dialogs/label-selector.html","webpack:///./src/infrastructure/dialogs/name-value-item-selector.js","webpack:///./src/infrastructure/dialogs/name-value-item-selector.html","webpack:///./src/infrastructure/dialogs/user-selector.js","webpack:///./src/infrastructure/dialogs/user-selector.html","webpack:///./src/infrastructure/header/client-refresh.js","webpack:///./src/infrastructure/header/client-refresh.html","webpack:///./src/infrastructure/header/global-message-notifier/global-message-notifier.ts","webpack:///./src/infrastructure/header/global-message-notifier/global-message-notifier.html","webpack:///./src/infrastructure/header/header-account-dropdown.js","webpack:///./src/infrastructure/header/header-account-dropdown.html","webpack:///./src/infrastructure/header/header-navigation-menu.js","webpack:///./src/infrastructure/header/header-navigation-menu.html","webpack:///./src/help/faqs/faq-service.js","webpack:///./src/export-task-collection-templates/export-task-collection-template-service.ts","webpack:///./src/test-results/test-results-service.ts","webpack:///./src/location-testing/maps/grids/point-remediation-grid.ts","webpack:///./src/location-testing/test-method-management/test-method-management-grid.ts","webpack:///./src/export-task-collection-templates/export-task-collection-template-footer-options.ts","webpack:///./src/partial-test-results/partial-test-results-grid.ts","webpack:///./src/location-testing/plans/task-generation-request.ts","webpack:///./src/partial-test-results/partial-test-results-service.ts","webpack:///./src/dashboard-widgets/dashboard-preview-service.ts","webpack:///./src/label-templates/label-template-detail.ts","webpack:///./src/label-templates/label-template-detail.html","webpack:///./src/label-templates/label-template-detail.scss","webpack:///./src/label-templates/label-template-list.ts","webpack:///./src/label-templates/label-template-list.html","webpack:///./src/labs/lab-detail.ts","webpack:///./src/labs/lab-detail.html","webpack:///./src/labs/lab-list.ts","webpack:///./src/labs/lab-list.html","webpack:///./src/layout.js","webpack:///./src/layout.html","webpack:///./src/legal/privacy.ts","webpack:///./src/legal/privacy.html","webpack:///./src/legal/terms.ts","webpack:///./src/legal/terms.html","webpack:///./src/location-testing/cap-plans/cap-plan-detail.ts","webpack:///./src/location-testing/cap-plans/cap-plan-detail.html","webpack:///./src/location-testing/cap-plans/cap-plan-list.ts","webpack:///./src/location-testing/cap-plans/cap-plan-list.html","webpack:///./src/location-testing/cap-plans/components/auto-remediation.ts","webpack:///./src/location-testing/cap-plans/components/auto-remediation.html","webpack:///./src/location-testing/cap-plans/components/plan-selector.ts","webpack:///./src/location-testing/cap-plans/components/plan-selector.html","webpack:///./src/location-testing/cap-plans/components/point-room-selector.ts","webpack:///./src/location-testing/cap-plans/components/point-room-selector.html","webpack:///./src/location-testing/cap-plans/components/point-type-selector.ts","webpack:///./src/location-testing/cap-plans/components/point-type-selector.html","webpack:///./src/location-testing/cap-plans/components/related-cap-plans.ts","webpack:///./src/location-testing/cap-plans/components/related-cap-plans.html","webpack:///./src/location-testing/cap-plans/components/sample-description.ts","webpack:///./src/location-testing/cap-plans/components/sample-description.html","webpack:///./src/location-testing/cap-plans/components/submit-buttons.ts","webpack:///./src/location-testing/cap-plans/components/submit-buttons.html","webpack:///./src/location-testing/cap-plans/components/test-methods-selector.ts","webpack:///./src/location-testing/cap-plans/components/test-methods-selector.html","webpack:///./src/location-testing/cap-plans/top-bar-slot.html","webpack:///./src/location-testing/customer-test-imports/customer-test-import-detail.js","webpack:///./src/location-testing/customer-test-imports/customer-test-import-detail.html","webpack:///./src/location-testing/customer-test-imports/customer-test-import-list.js","webpack:///./src/location-testing/customer-test-imports/customer-test-import-list.html","webpack:///./src/location-testing/location-testing-navigation-menu.js","webpack:///./src/location-testing/location-testing-navigation-menu.html","webpack:///./src/location-testing/maps/map-dashboard.ts","webpack:///./src/location-testing/maps/map-dashboard.html","webpack:///./src/location-testing/maps/map-detail.ts","webpack:///./src/location-testing/maps/map-detail.html","webpack:///./src/location-testing/maps/map-image.ts","webpack:///./src/location-testing/maps/map-image.html","webpack:///./src/location-testing/maps/map-list.ts","webpack:///./src/location-testing/maps/map-list.html","webpack:///./src/location-testing/plan-management/plan-management-list.ts","webpack:///./src/location-testing/plan-management/plan-management-list.html","webpack:///./src/location-testing/plans/generate-tasks.ts","webpack:///./src/location-testing/plans/generate-tasks.html","webpack:///./src/location-testing/plans/plan-coverage-pie-chart.ts","webpack:///./src/location-testing/plans/plan-coverage-pie-chart.html","webpack:///./src/location-testing/plans/plan-detail.ts","webpack:///./src/location-testing/plans/plan-detail.html","webpack:///./src/location-testing/plans/plan-list.ts","webpack:///./src/location-testing/plans/plan-list.html","webpack:///./src/location-testing/plans/plan-point-selector.ts","webpack:///./src/location-testing/plans/plan-point-selector.html","webpack:///./src/location-testing/points/point-detail.ts","webpack:///./src/location-testing/points/point-detail.html","webpack:///./src/location-testing/points/point-list.ts","webpack:///./src/location-testing/points/point-list.html","webpack:///./src/location-testing/remediations/remediation-detail.ts","webpack:///./src/location-testing/remediations/remediation-detail.html","webpack:///./src/location-testing/remediations/remediation-list.ts","webpack:///./src/location-testing/remediations/remediation-list.html","webpack:///./src/location-testing/requests/request-detail.ts","webpack:///./src/location-testing/requests/request-detail.html","webpack:///./src/location-testing/tasks/create-vector-tasks.ts","webpack:///./src/location-testing/tasks/create-vector-tasks.html","webpack:///./src/location-testing/tasks/task-detail.ts","webpack:///./src/location-testing/tasks/task-detail.html","webpack:///./src/location-testing/tasks/task-list.ts","webpack:///./src/location-testing/tasks/task-list.html","webpack:///./src/location-testing/tasks/task-order-option.ts","webpack:///./src/location-testing/tasks/task-order-option.html","webpack:///./src/location-testing/tasks/task-status-selector-dialog.ts","webpack:///./src/location-testing/tasks/task-status-selector-dialog.html","webpack:///./src/location-testing/test-method-management/test-method-management-list.ts","webpack:///./src/location-testing/test-method-management/test-method-management-list.html","webpack:///./src/login-audit/login-audit.js","webpack:///./src/login-audit/login-audit-detail.js","webpack:///./src/login-audit/login-audit-detail.html","webpack:///./src/login-audit/login-audit.html","webpack:///./src/requests/request-detail-mode.ts","webpack:///./src/dashboard-view-categories/dashboard-view-category-service.ts","webpack:///./src/main.js","webpack:///./src/location-testing/customer-test-imports/customer-test-import-service.js","webpack:///./src/location-testing/cap-plans/ui-cap-plan.ts","webpack:///./src/news-items/news-item-detail.js","webpack:///./src/news-items/news-item-detail.html","webpack:///./src/news-items/news-item-list.js","webpack:///./src/news-items/news-item-list.html","webpack:///./src/location-testing/plans/task-distribution-method.ts","webpack:///./src/infrastructure/components/excel-cell-editor.js","webpack:///./src/infrastructure/compare-utility.js","webpack:///./src/infrastructure/string-resource-service.js","webpack:///./src/request-templates/request-template-service.ts","webpack:///./src/couriers/courier-service.ts","webpack:///./src/location-testing/plans/generate-tasks-point-zone-distribution-method.ts","webpack:///./src/organizations/organization-detail.ts","webpack:///./src/organizations/organization-detail.html","webpack:///./src/organizations/organization-list.ts","webpack:///./src/organizations/organization-list.html","webpack:///./src/organizations/settings.ts","webpack:///./src/organizations/settings.html","webpack:///./src/location-testing/maps/grids/point-plan-grid.ts","webpack:///./src/infrastructure/boolean-utility.ts","webpack:///./src/partial-test-results/partial-test-results-list.ts","webpack:///./src/partial-test-results/partial-test-results-list.html","webpack:///./src/password-requirements/password-requirements.js","webpack:///./src/password-requirements/password-requirements.html","webpack:///./src/password-requirements/zero-to-blank-value-converter.js","webpack:///./src/infrastructure/page-context.js","webpack:///./src/organizations/organization-configuration.ts","webpack:///./src/security/navigation/authorization-check-step.js","webpack:///./src/label-templates/ui-label-template-element.ts","webpack:///./src/remediation-root-causes/remediation-root-cause-list.ts","webpack:///./src/remediation-root-causes/remediation-root-cause-list.html","webpack:///./src/reporting/adhoc-reports/adhoc-field.ts","webpack:///./src/reporting/adhoc-reports/adhoc-field.html","webpack:///./src/reporting/adhoc-reports/adhoc-filter.ts","webpack:///./src/reporting/adhoc-reports/adhoc-filter.html","webpack:///./src/reporting/adhoc-reports/adhoc-report-detail.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-detail.html","webpack:///./src/reporting/adhoc-reports/adhoc-report-detail.scss","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-create.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-create.html","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-detail.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-detail.html","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-edit.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-edit.html","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-list.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-list.html","webpack:///./src/reporting/adhoc-reports/adhoc-report-subscriptions/top-bar-slot.html","webpack:///./src/reporting/adhoc-reports/draggable-field-container.ts","webpack:///./src/reporting/adhoc-reports/filters/boolean-filter.ts","webpack:///./src/reporting/adhoc-reports/filters/boolean-filter.html","webpack:///./src/reporting/adhoc-reports/filters/date-filter.ts","webpack:///./src/reporting/adhoc-reports/filters/date-filter.html","webpack:///./src/reporting/adhoc-reports/filters/number-filter.ts","webpack:///./src/reporting/adhoc-reports/filters/number-filter.html","webpack:///./src/reporting/adhoc-reports/filters/selection-filter.ts","webpack:///./src/reporting/adhoc-reports/filters/selection-filter.html","webpack:///./src/reporting/adhoc-reports/filters/text-filter.ts","webpack:///./src/reporting/adhoc-reports/filters/text-filter.html","webpack:///./src/reporting/reports/parameters/report-parameter.ts","webpack:///./src/reporting/reports/parameters/report-parameter.html","webpack:///./src/reporting/reports/report-detail.ts","webpack:///./src/reporting/reports/report-detail.html","webpack:///./src/reporting/reports/report-list.ts","webpack:///./src/reporting/reports/report-list.html","webpack:///./src/request-templates/request-template-selector.ts","webpack:///./src/request-templates/request-template-selector.html","webpack:///./src/requests/request-detail.ts","webpack:///./src/requests/request-detail-location-testing-sample-info.ts","webpack:///./src/requests/request-detail-location-testing-sample-info.html","webpack:///./src/requests/request-detail-request-info.ts","webpack:///./src/requests/request-detail-request-info.html","webpack:///./src/requests/request-detail-sample-info.ts","webpack:///./src/requests/request-detail-sample-info.html","webpack:///./src/requests/request-detail.html","webpack:///./src/requests/request-list.ts","webpack:///./src/requests/request-list.html","webpack:///./src/export-task-collection-templates/export-task-collection-template-formatting-options.ts","webpack:///./src/roles/role-detail.js","webpack:///./src/roles/role-detail.html","webpack:///./src/roles/role-list.js","webpack:///./src/roles/role-list.html","webpack:///./src/roles/role-move-users.js","webpack:///./src/roles/role-move-users.html","webpack:///./src/infrastructure/throttle.js","webpack:///./src/requests/v2/ag-grid-components/ag-datetime-editor-types.ts","webpack:///./src/security/forgot-password.js","webpack:///./src/security/forgot-password.html","webpack:///./src/security/login.js","webpack:///./src/security/login-dialog.js","webpack:///./src/security/login-dialog.html","webpack:///./src/security/login.html","webpack:///./src/security/reset-password.js","webpack:///./src/security/reset-password.html","webpack:///./src/security/unauthenticated-app.js","webpack:///./src/security/unauthenticated-app.html","webpack:///./src/segmentation-templates/segmentation-template-detail.ts","webpack:///./src/segmentation-templates/segmentation-template-detail.html","webpack:///./src/segmentation-templates/segmentation-template-list.ts","webpack:///./src/segmentation-templates/segmentation-template-list.html","webpack:///./src/specifications/specification-detail.ts","webpack:///./src/specifications/specification-detail.html","webpack:///./src/specifications/specification-list.js","webpack:///./src/specifications/specification-list.html","webpack:///./src/status/custom-coa-dialog.js","webpack:///./src/status/custom-coa-dialog.html","webpack:///./src/status/status.ts","webpack:///./src/status/status.html","webpack:///./src/location-testing/cap-plans/cap-plan-grid.ts","webpack:///./src/requests/v2/ag-grid-components/ag-datepicker-editor.ts","webpack:///./src/security/navigation/navigation-authorizer.js","webpack:///./src/requests/request-service.ts","webpack:///./src/segmentation-templates/segmentation-template-service.ts","webpack:///./src/status/result-service.ts","webpack:///./src/test-methods/test-method-list.js","webpack:///./src/test-methods/test-method-list.html","webpack:///./src/test-results/test-results-group-by-element.ts","webpack:///./src/test-results/test-results-group-by-element.html","webpack:///./src/test-results/test-results-list.ts","webpack:///./src/test-results/test-results-list.html","webpack:///./src/partial-test-results/partial-test-results-query-filters.ts","webpack:///./src/infrastructure/date-utility.js","webpack:///./src/location-testing/plan-management/plan-management-grid.ts","webpack:///./src/infrastructure/constants/localstorage.constants.ts","webpack:///./src/users/user-detail.ts","webpack:///./src/users/user-detail.html","webpack:///./src/users/user-list.ts","webpack:///./src/users/user-list.html","webpack:///./src/infrastructure/ag-grid/aurelia-cell-renderer-comp-base.ts","webpack:///./src/infrastructure/api-errors/api-errors-interceptor.js","webpack:///./src/roles/role-service.js","webpack:///./src/label-templates/ui-label-template.ts","webpack:///./src/infrastructure/ag-grid/ag-value-formatters.ts","webpack:///./src/segmentation-templates/ui-segmentation-template-segment.ts","webpack:///./src/location-testing/point-rooms/point-room-service.ts","webpack:///./src/infrastructure/foundation-validation-renderer.js","webpack:///./src/specifications/specification.ts","webpack:///./src/specifications/specification-service.ts","webpack:///./src/location-testing/plans/ui-plan-coverage.ts","webpack:///./src/dashboard/dashboard-query-filters.ts","webpack:///./src/location-testing/maps/map-list-query-filters.ts","webpack:///./src/request-defaults/request-defaults-service.ts","webpack:///./src/requests/v2/ag-grid-components/sample-segmentation-grid-preferences.ts","webpack:///./src/reporting/adhoc-reports/adhoc-report-options-service.ts","webpack:///./src/record-status.ts","webpack:///./src/location-testing/plans/plan-summary-converter.ts","webpack:///./src/location-testing/requests/sample-description-builder.ts"],"names":["MapAttributesQueryFilters","_key","mapAttributes","this","Object","assign","map","a","i","name","value","params","regexNameKey","regexValueKey","fooParams","entries","nameGroups","filter","p","test","valueGroups","length","Error","forEach","k","valueKey","substring","indexOf","push","FaqGroupService","inject","HttpClient","httpClient","includeFaqs","get","id","ids","query","join","delete","faqGroup","put","post","idOrdinalMap","patch","RequestService","statusQuery","filters","mapId","testMethodGroup","PointTypeService","buildQueryString","organizationId","PlanCoverageType","planCoverageTypes","Collected","Scheduled","CollectedAndScheduled","Unused","toPlanCoverageType","planCoverageTitle","DataGridSelectAll","dataGridItems","filterKeys","_dataGridItems","_allSelected","_canDeleteItems","_selectedDataGridItems","_filterKeys","_filteredDataGridItems","every","isSelected","dgi","isActive","filterText","filteredItems","keys","reduce","acc","curr","includes","toLowerCase","selected","items","UploadedFileService","path","files","reportProgress","fileUrls","formData","FormData","file","append","createRequest","asPut","withContent","withProgressCallback","send","CapPlanService","logger","capPlanFilters","tenantId","testMethodIds","capPlanId","queryString","testMethodId","capPlan","testId","PointSelectorFilter","pointService","roomOptions","zoneOptions","mobileOptions","pauseOptions","typeOptions","riskOptions","attributeNameOptions","reset","description","selectedRooms","selectedZones","selectedMobileValues","selectedPausedValues","selectedTypes","selectedRisks","selectedAttributes","filterCount","points","pointAttributes","Array","from","Set","room","values","v","title","zone","toString","type","risk","getRiskCaption","pointAttributeValuesMap","Map","has","group","some","s","set","pointAttributeNames","attributes","attribute","attributeNameOption","attributeValues","valueOptions","attributeFiltersApplied","mobile","isPausedPendingRemediation","attributeName","matchingAttributes","o","selectedAttribute","selectedValues","selectedValue","attributeNamesInUse","disabled","pointAttribute","create","nameOptions","pointAttributeOption","getAttributeValueSelectorOptions","option","find","index","splice","SegmentType","Text","Selection","Unknown","PlanService","queryParameters","pointId","view","planTypes","DISCRETIONARY","token","SCHEDULED","RISK_BASED_PRIORITY","ADHOC","Promise","resolve","plan","mapIds","taskTargetDateTimeStart","taskTargetDateTimeEnd","coverageType","queryParams","format","RemediationUserType","compositeOptionsLookup","defaultCompositeOptions","internalCompositeOptions","defaultCompositeOptionsV2","internalCompositeOptionsV2","LoginAuditService","minDate","maxDate","qs","encodeURIComponent","Date","toISOString","userId","RemediationRootCauseService","baseRoute","remediationRootCauseList","TaskRequestSubmissionService","dialogPresenter","router","tasks","orderCaption","t","status","showAlert","sampleId","organizationIds","externalSources","task","testMethods","testMethod","add","externalSource","size","navigateToRoute","taskIds","testMethodNameFormatting","isImpersonatingUser","isImpersonatingOrg","billCode","externalId","testMethodManagementNameFormatting","testMethodName","testMethodPopUpManagementNameFormatting","nonDefinedTestMethod","isImpersonatingUserOrOrg","AgCellDelegateHandler","baseGridOptions","columnDefs","headerName","field","width","valueFormatter","cellRenderer","defaultColDef","comparator","compareStringsInsensitive","suppressContextMenu","remediationFailedTestGridOptions","setDefaults","withAutoHeight","addStatefulness","build","emptyExportTaskCollectionTemplateConfiguration","templateName","UiViewExportTaskCollectionTemplate","organizationConfigurations","organizations","_id","_organizationConfigurations","_isActive","_organizations","_displayName","arr","sep","item","OrganizationsQueryFilters","defaultOrganizationIds","_defaultOrganizationIds","resetFilterValues","Number","TaskListQueryFilters","dateRangeQueryFilters","mapPlanQueryFilters","recordStatusQueryFilters","isAssignedQueryFilters","isSubmittedQueryFilters","collectionTypesQueryFilters","operationsTimingQueryFilters","onlyAssignedToMe","pointMobile","pointName","pointRisks","pointRooms","pointTypes","pointZones","taskStatusIds","getQueryParams","dateRangeQuery","dateRangeOverride","dateRangeOption","targetStartDate","targetEndDate","enableTimeFilter","mapPlanQuery","planId","planIds","recordStatusQuery","recordStatus","isAssignedQuery","isAssigned","isSubmittedQuery","isSubmitted","collectionTypeQuery","collectionTypes","operationsTimingQuery","operationsTimings","setFilterValues","isArray","_filterCaption","count","dateRangeCaption","SegmentationTemplateSegmentUsages","usages","u","None","split","trim","SampleLabels","RequestCoas","SupportTopicService","supportTopic","OperationsTimingQueryFilters","operationsTimingsArr","AdhocReportService","adhocReport","getConsoleFunction","logLevel","console","error","warn","info","stringifyError","HttpResponseMessage","response","stack","message","errorToString","JSON","stringify","e","stringifyState","state","enableConsoleLog","window","location","hostname","getErrorData","responseContent","data","parse","tryParse","exception","apiErrorCode","requestId","headers","httpMethod","requestMessage","method","statusCode","url","origin","baseUrl","httpRequestId","httpStatusCode","Logger","transient","ApplicationInsightsService","applicationInsightsService","log","loggerName","consoleMessage","consoleParameters","consoleFunction","errorData","logEntry","catch","trackEvent","getEmmaValue","countResultAggFunction","resultValueFormatter","formatDateToLocal","local","testResultGridColDefs","chartDataType","colId","toolPanelClass","aggFunc","valueGetter","initialHide","marryChildren","children","columnGroupShow","suppressMenu","cellClass","sortable","suppressSizeToFit","enableRowGroup","enablePivot","pinned","template","minWidth","enableValue","autoGroupColumnDef","sideBar","animateRows","statusBar","statusPanels","statusPanel","align","suppressAggFuncInHeader","enableRangeSelection","enableCharts","popupParent","document","body","customChartThemes","passFailCustomTheme","baseTheme","palette","fills","strokes","chartThemes","testResultGrid","renderAgGridCellForAurelia","aureliaTemplate","container","instance","compile","rootElement","createElement","bind","appendNodesTo","toOperationsTiming","timing","x","remediationPreFilesGridOptions","remediationPostFileGridOptions","GlossaryTermService","glossaryTerm","TestMethodGroup","getTestMethodGroups","SEROTYPE","SPECIATION","PROFILE","TimeZoneService","TaskListViewOption","StatusQueryFilters","organizationQueryFilters","poNumber","customerRequestStatus","organizationsQuery","MapSummaryConverter","mapSummaries","activeOnly","maps","m","options","ms","PlanManagementService","replaceTestMethodRequest","UserGuideService","code","userGuide","calculatePageSizes","totalCount","maxCountDivisor","multiple","Math","ceil","divisor","pageSizes","pageSize","IsSubmittedQueryFilters","_isSubmitted","submittedState","OrganizationService","startsWith","organization","names","getConfigurationValues","configuration","c","nameOrNames","NewsItemService","forDashboard","newsItem","UiSegmentationTemplate","segmentationTemplate","uiSegmentationTemplate","isArchived","rawSegments","segments","fromModel","rawChild","parentSegmentId","rawParent","childPairs","tryParseSegmentLookups","lookupMapping","sourceSegmentName","autoFillSegmentName","pairs","parent","child","organizationCaption","parsed","model","toModel","completedPairs","sourceSegment","autoFillSegment","PasswordRequirementsService","requirements","IsAssignedQueryFilters","_isAssigned","assignedState","UserService","search","user","isLocked","userRoles","RecordStatusQueryFilters","_recordStatus","ACTIVE","recordStatuses","ConfirmationTestingQueryFilters","_testMethodGroup","_confirmationTestValues","confirmationTestValues","tmg","agGridGetPreferences","preferences","agPreferences","localStorage","getItem","AG_PREFERENCES","prototype","hasOwnProperty","call","gridName","setItem","agGridSetPreferences","TaskOrderPreferenceService","storageKey","order","OrganizationDataTypeSetting","Boolean","stringToBoolean","dataType","ENABLE_BETA_FEATURES","describeOnScreenOrder","screenName","columnLabel","direction","orderByIds","idsInOrder","positions","positionOf","MAX_SAFE_INTEGER","sort","b","SubscriptionFrequencyType","subscriptionFrequencyTypes","1","Daily","2","Weekly","3","Monthly","getSubscriptionFrequencyTypes","subscriptionFrequency","minDeliveryDay","maxDeliveryDay","deliveryDayValidationErrorMessage","subscriptionFrequencyTypeValidationErrorMessage","MapAttributeService","TestMethodService","compareByZonePlanPoint","pointZone","planName","localeCompare","sortSamples","samples","taskIdOrder","taskId","compareParts","firstPart","sample","parts","first","part","LabelTemplateService","labelTemplate","SampleLabelDisplayOnlyElementManager","uiLabelTemplate","elements","margin","fontSize","lineSpacing","sampleIdElement","new","sampleTextOverride","bold","sampleDescriptionElement","collectionDateElement","positionDisplayOnlyElements","y","textAlign","CollectionType","Routine","Vector","CorrectiveAction","getCollectionTypeOptions","getCapPlanCollectionTypeOptions","toCollectionTypeTitle","collectionType","planTypeToCollectionTypes","planType","planTypeIdToCollectionTypes","planTypeId","planTypeStringToCollectionTypes","AdhocReportSubscriptionService","entity","request","generateDateRange","startDate","endDate","currentDate","moment","createPlaybackFrames","dailyResults","dailyResultGroups","date","sampleCollectionDate","pointResults","dailyResult","dailyResultGroup","g","allTestsPassed","anyTestWarned","currentPointResults","resultInfo","highlightTransition","AgPlanManagementGridActionRenderer","node","uiLevel","childrenAfterGroup","groupData","dates","$","fn","fdatepicker","UTCDate","UTC","apply","arguments","parseDate","language","valueOf","getTimezoneOffset","parseFormat","dir","part_re","match","exec","parseInt","setUTCDate","getUTCDate","Datetimepicker","moveMonth","moveYear","getUTCFullYear","getUTCMonth","getUTCHours","getUTCMinutes","getUTCSeconds","nonpunctuation","val","filtered","setters_order","setters_map","hh","d","setUTCHours","h","ii","setUTCMinutes","ss","setUTCSeconds","yyyy","setUTCFullYear","yy","setUTCMonth","getFullYear","getMonth","getDate","cnt","isNaN","months","slice","inArray","monthsShort","formatDate","M","MM","dd","mm","dateParts","seps","extend","separators","shift","PointAttributeService","MapDashboardSelectionMode","QualitativeResultService","CollectionTypesQueryFilters","collectionTypesArr","UiCertificateContact","organizationCode","organizationKey","parentOrganizationKey","companyName","address","city","postalCode","country","phoneNumber","faxNumber","contactFullName","contactEmail","contactParts","FormChangeCheckStep","DialogPresenter","navigationInstruction","next","default","prevComponent","viewModel","formChanged","showLoseChangesConfirmation","then","confirmed","cancel","AureliaCellEditorCompBase","viewCompliler","viewFactory","attached","unbind","removeNodes","detached","BaseQueryFilter","_defaultSegement","_introSegment","obj","key","undefined","routeConfig","eventLookup","navModel","eventAggregator","filterString","_setGlobalFilterDebounce","clearTimeout","setTimeout","dateRangeFilterProp","filterCountOnlyCaption","possibleArray","definedParams","removeUndefinedProperties","paramKey","prop","getOwnPropertyDescriptor","getPrototypeOf","OrganizationConfigurationConstants","ENABLE_SEGMENT_LOOKUP_MAPPINGS","LabelTemplateType","Task","Sample","Validators","usFormat","RegExp","canFormat","semicolonSeparatedEmails","emailRegex","em","handleDownload","blob","contentDispositionHeader","fileName","groups","filename","appendChild","URL","createObjectURL","href","download","click","revokeObjectURL","parseAndThrowResponse","text","errorCode","errorMessage","downloadSsrsReport","downloadUrl","postObject","pageContext","isLoading","xhr","XMLHttpRequest","responseType","onreadystatechange","readyState","getResponseHeader","Blob","open","setRequestHeader","AgMarkedCellRenderer","TaskService","ianaTimeZone","tz","guess","taskFilters","includePlan","batchSize","copiedItems","batches","idBatches","toBatches","all","action","additionalParameters","results","flattenedResults","result","assignedUserId","batchUpdateTasks","statusId","collectedDateTime","comments","dashboardQuery","printerId","fields","preserveOrder","capitalizeFirstLetter","string","charAt","toUpperCase","selectedFields","f","labelTemplateId","exportTaskCollectionTemplateId","exportTaskCollectionTemplateName","segmentColdId","segment","segmentationTemplateId","createLookupTypeSegmentationColumns","parentSegment","childSegment","isEditable","parentSegmentValues","childSegmentLookupValues","colDefs","parentColDef","editable","cellEditor","cellEditorPopup","cellEditorParams","valueSetter","newValue","childValue","segmentLookups","segmentName","matchingLookup","sl","getMatchingLookupValue","cellClassRules","childColDef","createNonLookupTypeSegmentationColumns","segmentationTemplates","st","colDef","SegmentationSampleGridColBuilder","colDataFactory","_colDataFactory","_colDefs","lvOrganizationSampleTemplates","indexedValues","sampleTypeId","col","headerCheckboxSelection","headerCheckboxSelectionFilteredOnly","checkboxSelection","minCollectionDate","maxCollectionDate","startOf","toDate","toView","collectionDate","isBetween","cellEditorSelector","component","context","dateTimeEditor","PICKER","segmentationTemplateSelectorOptions","selectorOption","getSegmentationTemplateByName","newSegments","onCellValueChanged","event","oldValue","api","oldSegmentationTemplate","newSegmentationTemplate","oldSegmentationTemplateId","newSegmentationTemplateId","currColDefs","getColumnDefs","updatedColDefs","removeUnusedSegmentationCols","newColDefs","createNewSegmentationCols","setColumnDefs","maxLength","rows","cols","areEditable","groupedLookupSegmentationTemplates","lookupParentSegment","lookupChildSegment","nonLookupSegmentationTemplates","allowInternalCompositing","lastCols","sampleTemplate","testTemplates","tt","oldValueSampleSegments","oldValueColIds","getSegmentationTemplateById","cd","endsWith","lookupSegments","getLookupSegmentationTemplateById","nonLookupSegments","getNonLookupSegmentationTemplateById","groupLookupSegments","SrtingUtility","floor","random","chars","UiSchedule","taskDistributionMethod","WEEK_BASED","skipDays","targetCollectionTimes","timeZone","_blackoutDates","_blackoutDatesView","startDateView","_scheduleMinDate","getTwentyFourHoursAgoDate","schedule","blackoutDates","cycleDurationDays","blackoutSundays","blackoutMondays","blackoutTuesdays","blackoutWednesdays","blackoutThursdays","blackoutFridays","blackoutSaturdays","today","yesterdayDate","setDate","_startDate","_startDateView","_endDate","_endDateView","endDateView","blackoutDatesView","CoAReportStyleService","coaReportStyles","getCoAReportStyles","reportStyles","rs","RemediationService","remediationFilters","assignedToMe","remediation","remediationFileDetails","remediationFile","remediationId","isPostRemediation","asPost","remediationFileId","OutcomeStatusQueryFilters","_outcomeStatus","ALL","outcomeStatus","outcomeStatuses","PointRisk","getPointRiskOptions","NOT_SPECIFIED","LOW","MEDIUM","HIGH","expandRowAtIndex","rowIndex","displayedRowCount","getDisplayedRowCount","expandRowIndex","levelOneDisplayedRow","getDisplayedRowAtIndex","setExpanded","ExportTaskCollectionTemplateListQueryFilters","organizationsQueryFilters","timeStamp","getTime","buildGridOptions","overrides","staticGrid","column","cellHeight","oneColumnSize","MapPlanQueryFilter","_mapPlanIds","_mapPlanFilterType","mpFilterType","GenerateTasksDateSelectionType","PointRiskComparer","findIndex","webpackContext","req","webpackContextResolve","__webpack_require__","module","exports","isInteger","isFinite","isSampleValid","isValid","composite","UiCapPlanFilters","isFilteringOrganization","selectedOrganizations","selectedTestMethods","recordStatusOptions","tm","STATUS_CODES","notStarted","inProgress","completed","rejected","reviewed","OPEN_STATUS_CODES","statusCodesFor","activeStatFilter","ApplicationModuleId","ApplicationModuleService","applicationModules","AgDateMaskEditor","_maskOptions","alias","inputFormat","placeholder","min","max","_charWasPressed","charPress","input","setAttribute","_inputMask","mask","focus","setSelectionRange","MapService","mapPhotoFile","panZoom","showLatestView","viewPointSize","settings","getDashboardSettings","testIds","addCellRendererParamsToColId","cellRendererParams","addCellRendererParamsToColField","colField","buildReportUrl","parameters","specialAction","ReportService","reportId","subscriptionCriteria","deliveryFormat","ExcelCellRenderer","gridOptions","gridOptionsWrapper","overrideContext","style","viewCompiler","viewTemplate","refresh","initialized","createDefaultLayoutItems","moduleId","requiredPermission","w","filterable","requiredApplicationModule","LocationTesting","compactMaxWidth","buildLayoutItemsFromTemplate","templateWidgets","metadataById","widget","widgetToken","height","OrganizationSampleTemplateService","TaskStatusUpdateService","dialogService","showTaskStatusSelectorDialog","dialogResult","output","cancelled","statusInfo","validTasks","assignedUserEmail","diff","taskNoun","haveClause","statusName","showConfirmation","whenClosed","AgBoolCellRenderer","ParameterOptionService","parameterName","TaskGenerationRequestService","settingsToPersist","getPlanSettings","pointZoneDistributionMethod","pointZoneDistributions","riskPriorities","dateSelectionType","NOT_APPLICABLE","PERCENTAGE","requestedTaskCount","TestResultsQueryFilters","outcomeStatusQueryFilters","limit","outcomeStatusQuery","PointService","attributeQuery","sampleIds","point","pointPhotoFile","getAttributesLike","partial","domHelper","isElement","HTMLElement","hasClass","cls","classList","contains","hasTrackingInfo","isOfType","nodeName","isAnchor","isButton","defaultOptions","pageTracking","enabled","getTitle","payload","instruction","config","clickTracking","element","appInsights","instrumentationKey","loaded","trackClick","trackPageView","loadAppInsights","addTelemetryInitializer","ipAddress","tags","baseData","properties","_attachPageTracker","_attachClickTracker","accountId","setAuthenticatedUserContext","clearAuthenticatedUserContext","uri","evt","delegateTarget","dimensions","di","components","getSeverityLevel","level","Critical","Information","Warning","trackError","trackTrace","telemetry","severityLevel","_convertDataToDictionary","trackException","subscribe","fragment","criteria","listener","querySelector","addEventListener","el","target","DateRangeQueryFilter","defaultOptionValue","includeAllTimeOption","excludeEmmaOptions","_querystringDateFormat","_displayDateFormat","_defaultDateRangeFilterOptions","_queryFilterDateRangeLocalStorageKey","_defaultOptionValue","caption","numericValue","displayCaption","_defaultDateRangeFilterOption","_dateRangeFilterOptions","_dateRangeOption","_dateRangeFilterOption","_enableTimeFilter","subtractDay","namedDateRangeFilterOption","dateRangeFilterOption","customDateRangeOption","momentStartDate","momentEndDate","subtract","configureDateRangeFilterOption","formattedDateRange","formatDisplayDate","AmsCoaExportService","amsCoaExport","MapDashboardViewOption","GlobalMessageSearchType","adhocReportSubscriptionGrid","subscriptionFrequencyType","dayOfWeek","deliveryDay","weekdays","lastDelivered","currentUsersTimeZone","ISO_8601","utc","clone","nextDeliveryStart","isStarted","resizable","OrganizationUtility","array","parentName","parentOrganizationName","concat","flattenOrganization","defaultSettings","maxConcurrentWidgetLoads","enableWidgetLoadTimingLogs","enableTemplateManagement","DashboardSettingsService","cachedSettingsPromise","cachedAt","now","fetchSettings","debounce","func","wait","immediate","timeout","args","later","callNow","getPointZoneOptions","ValidationErrorFormatter","apiErrorData","validationErrorMessage","defaultMessage","userErrorCode","userErrorMessage","formatValidationErrors","CustomError","setPrototypeOf","captureStackTrace","AgSampleIdCellRenderer","passed","setRowSelectable","selectable","capPlanStatusLabels","NotTriggered","PartiallyTriggered","Triggered","NoMatchingCapPlan","dateCompare","hasSpecification","confirmation","displayValue","suppressColumnVirtualisation","onFirstDataRendered","columnApi","autoSizeAllColumns","pointTestResultGrid","errorMessages","LoginErrorMessageProvider","httpResponseMessageOrApiError","CustomerTestImportDetail","validationControllerFactory","amsCoaExportService","validationController","createForCurrentScope","validateTrigger","change","ensure","required","satisfies","_","on","addObject","validate","valid","createAmsCoaExport","App","EventAggregator","DialogService","NavigationAuthorizer","SecurityService","navigationAuthorizer","securityService","organizationService","dashboardSettingsService","configure","withInterceptor","unauthenticatedStuffQueue","attachedPromise","attachedPromiseResolve","handleLogin","handleLogout","handleRouterNavigationSuccess","updateIsCurrnetUserInternal","currentYear","isCurrentUserInternal","locationTestingRouteActive","currentInstruction","addAuthorizeStep","AuthorizationCheckStep","addPreActivateStep","mapUnknownRoutes","route","redirect","PLATFORM","nav","icon","allowedUserTypes","ignorePermissions","activationStrategy","invokeLifecycle","authorize","checkConfigurationFlag","navTitle","getSettings","getEffectiveUser","partialTestResultLabs","userLoginSubscription","userLogoutSubscription","routerNavigationSuccessSubscription","baseNavItems","navigation","hasAccess","hover","addClass","removeClass","dispose","isImpersonating","logout","loginDialogVisible","reject","wasCancelled","successMessage","___CSS_LOADER_API_IMPORT___","inputRow","remediationRootCauseGridOptions","rowDrag","rowPinned","removeItem","rowToRemove","getRowNode","applyTransaction","remove","pinnedTopRowData","flex","rowDragManaged","getRowStyle","onCellEditingStopped","addIndex","setPinnedTopRowData","AgGlobalMessageActionCellRenderer","wrapText","autoHeight","hide","getRowNodeId","globalMessageNotificationGridOptions","OrganizationConfigurationSetting","emptyExportTaskCollectionTemplateHeaderOptions","cellText","DashboardWidgetsQueryFilters","widgetId","defaultDateRangeOption","_taskTargetDateRangeFormat","orgCount","includeDateRange","includeMapPlan","mapPlanIds","noun","mapPlanFilterType","_taskTargetFilterRangeCaption","formatTaskTargetFilterCaption","groupColumnDefsBy","selectedViewByOption","setRowGroup","rowGroup","cdAny","colOrColGroupDef","setGroupByColumnDefinitions","autoSortedColumnStateColId","colState","applyColumnState","defaultState","buildAttributeQuery","validIndex","GenerateTasksDistributionMethod","PlanType","approvals","approvedByUser","approvalDateTime","globalMessageGridOptions","MapDashboardQueryFilters","confirmationTestingQueryFilters","taskAssigneeIds","remediationRootCauseIds","confirmationTestingQuery","DashboardTemplateDefaultDetail","dashboardViewCategoryService","dashboardTemplateService","previewService","createNewTemplateValue","templates","templateOptions","templateWidgetItems","isWorkingUnderOrganization","savedSnapshot","selectedTemplateId","displayName","categoryId","getDashboardViewCategories","getTemplatesForCategory","categories","category","buildTemplateOptions","activeTemplate","buildSnapshot","getTemplateWidgets","widgets","currentWidgets","widgetLayoutEditor","getConfiguredWidgets","activateTemplate","showSuccessOverlay","templateId","deactivateTemplate","setPendingPreview","generate","createTemplate","newId","updateTemplate","archiveTemplate","DashboardTemplateDefaultList","dashboardTemplateDefaults","sortParam","active","getDashboardTemplateDefaults","sortDashboardTemplateDefaults","aValue","String","bValue","DashboardTemplateDetail","getOrganizationTemplatesForCategory","getOrganizationTemplateWidgets","activateOrganizationTemplate","deactivateOrganizationTemplate","createOrganizationTemplate","updateOrganizationTemplate","archiveOrganizationTemplate","DashboardTemplateList","dashboardTemplates","getOrganizationDashboardTemplates","sortDashboardTemplates","DashboardWidgets","settingsService","templateService","VM_READY_TIMEOUT_MS","layoutItems","settingsPromise","previewWidgets","takePendingPreview","getCurrentTemplateWidgets","hasApplicationModule","hasPermission","vmReady","vmReadyResolve","reload","loadWidget","gridEl","querySelectorAll","gridStack","init","queue","destroy","enqueuedAt","performance","startedAt","enqueue","vmReadyOrTimeout","contentVm","loadData","loadTimings","timeoutId","queueWaitMs","round","loadMs","WidgetFilterPanel","canApply","defaultBindingMode","twoWay","WIDGET_CATALOG","WidgetLayoutEditor","catalogOptions","selectedCatalogWidgetId","placedWidgetIds","button","closest","getAttribute","deleteWidget","itemsChanged","load","content","tileContent","buildCatalogOptions","entry","addWidget","autoPosition","removeWidget","placedId","save","WidgetShell","filtersOpen","displayMode","defaultCompactMaxWidth","resizeObserver","ResizeObserver","contentRect","cancelAnimationFrame","pendingFrame","requestAnimationFrame","updateDisplayMode","observe","bodyEl","disconnect","threshold","MyRemediationsWidget","remediationService","userService","hasLoaded","queryFilters","getCurrentUserOrganizations","statuses","getRemediationStatuses","statusIds","getRemediationCounts","getRemediations","remediationStatusIds","counts","remediations","allRemediations","filterCaption","buildFilterSummary","applyStatFilter","applyFilters","runSearch","sortRemediations","statusCodes","r","returnUrl","returnLabel","SORT_COLUMN_LABELS","operationsTiming","targetDateTime","MyTasksWidget","taskService","mapService","planService","taskStatusUpdateService","taskRequestSubmissionService","taskOrderPreferenceService","labelTemplateService","isUpdatingStatus","isExportingCsv","hasSelectedTasks","allSelected","canEditTasks","canExportLabelsPdf","getLabelTemplates","taskLabelTemplates","mapSelectorOptions","canFilterByMapPlan","getMaps","getPlans","plans","toSelectorOptions","planSelectorOptions","getTasks","upcomingCount","isUpcoming","awaitingSubmissionCount","isAwaitingSubmission","submittedCount","allTasks","persistCurrentSelection","updateSelectionState","matchesStatFilter","sortTasks","selectedTasks","selectStatus","updateTaskStatus","submitRequest","getExportableLabelsCsvFields","exportableFields","orgDefaultFields","showExportableFieldSelector","fieldSelection","exportLabelsCsv","blobUrl","link","dateString","replace","showLabelSelector","labelTemplateSelection","getTaskLabelPdfUrl","getTaskStatuses","taskListDateRangeQuery","RemediationManagementWidget","pageNumber","pageSizeOptions","totalPages","isLoadingPage","hasSelectedRemediations","isReassigning","allRemediationStatuses","canEditRemediations","savedPageSize","pageSizeStorageKey","loadRemediationPage","sortBy","sortDirection","pagedResult","selectedRemediations","showUserSelector","email","reassignRemediations","loadRemediationPageWithSpinner","RequestStatusesWidget","requestService","getRequestStatusCounts","maxValue","sum","buildDatapoint","requestStatus","label","percent","linkUrl","chartData","datapoints","ManageTasksWidget","canUnassignSelectedTasks","isAssigning","isUnassigning","getTaskManagementCounts","loadTaskPage","overdue","completedStatusId","assignTasks","tasksPlurality","unassignTasks","loadTaskPageWithSpinner","TestResultsWidget","testService","getTestResultCounts","generateLinkUrl","Dashboard","newsItemService","dashboardService","canViewPriceQuotes","canViewRequests","canViewResults","canViewAllTasks","canViewMyTasks","canViewAllRemediations","canViewMyRemediations","canViewMaps","canViewPlans","canFilter","dashboardQueryFilters","todaysDashboardQuery","testResultListQuery","refreshRequestChartData","refreshResultChartData","refreshMyTaskData","refreshTaskManagementData","refreshMyRemediationData","refreshRemediationManagementData","outcome","testResultQuery","requestStatusCounts","requestStatusCount","buildRequestStatusDatapoint","backgroundColor","generateStatusLinkUrl","requestChartLinkUrl","requestChartData","testResultCounts","testResultCount","buildTestResultDatapoint","generateTestResultLinkUrl","resultChartLinkUrl","resultChartData","getTaskCounts","taskCountsToday","taskCountsWeek","myTaskCountsToday","myTaskCountsWeek","getCriticalTaskCounts","criticalTaskCounts","criticaltaskCounts","myRemediationCounts","remediationCounts","_params","ensureSingleApplyFilterHandler","pendingRedirectAfterlogin","applyFiltersSubscription","handleApplyFilters","clearFiltersSubscription","handleClearFilters","getNewsItems","getDashboardLinks","refreshWidgetData","currentUser","newsItems","currentUserOrganizations","dashboardLinks","taskStatuses","remediationStatuses","planSummaries","taskStatusCodes","taskListQuery","mapTaskListQuery","criticalStatuses","ts","cs","remediationStatusCodes","submitCustomCertiticateForm","customCoaForm","emptyExportTaskCollectionTemplate","columns","formattingOptions","headerOptions","footerOptions","okButtonTitle","Alert","cancelButtonTitle","Confirmation","UserSelector","taskOrderCaption","ExportableFieldSelector","labelTemplateType","LabelSelector","placeholderText","captionPropertyName","valuePropertyName","NameValueItemSelector","DataGridReorderDialog","AgGridDialog","baseOptions","remediationPointTestHistoryGridOptions","setDateTimeEditor","segmentationSampleGridOptions","frameworkComponents","selectEditorComponent","getMainMenuItems","defaultItems","getId","collectionDateMenuItems","subMenu","checked","MASK","enterMovesDown","enterMovesDownAfterEdit","rowSelection","suppressRowClickSelection","enableFillHandle","fillHandleDirection","Aurelia","Router","RoleService","aurelia","roleService","applicationModuleService","startSessionExpirationChecks","setInterval","session","getCurrentSession","expiration","navigateToLogin","sessionExpired","username","password","verifyIdentityToken","setUserId","setCurrentSession","isInternal","refreshCurrentPermissions","publish","getCurrentPermissions","currentPermissions","newPassword","newPasswordConfirm","Cookies","navigateToLoginScreen","clearUserId","messageCount","parseLocalStorage","valueString","permissionCode","applicationModuleId","currentSession","isGlobalMessenger","canModifyCustomerData","impersonatedUser","getImpersonatedUser","impersonatedUserId","workingUnderOrganization","getWorkingUnderOrganization","impersonatedOrgId","atob","exp","setRoot","redirectAfterLoginFragment","navigate","isCurrentUserLoggedIn","navigateToApp","hash","getCurrentSessionUser","orgId","getApplicationModules","refreshApplicationModules","org","AgStatefulGridBuilder","_gridOptions","_minColumnStateColumnWidth","_defaultGridOptions","columnState","base","columnStateString","_columnStateLocalStorageKey","pivotState","_pivotStateLocalStorageKey","overrideInvisibleColumnWidths","applyOrder","setPivotMode","_saveColumnStateDebounce","getColumnState","isPivotMode","trimmedColumnState","sortIndex","pivot","pivotIndex","rowGrouproupIndex","rowGroupIndex","mergedDefaultColDefs","mergedGridOptions","gridKey","onGridReady","onColumnMoved","onColumnResized","onSortChanged","onColumnPivotModeChanged","onColumnPivotChanged","onColumnRowGroupChanged","loadColumnStateFromLocalStorage","saveColumnStateToLocalStorage","domLayout","ExportTaskCollectionTemplateDetail","bindingEngine","exportTaskCollectionTemplateService","canEdit","exportTaskCollectionTemplate","object","propertyName","organizationRules","organizationConfiguration","removeObject","createExportTaskCollectionTemplates","updateExportTaskCollectionTemplates","mapFieldMappingsToExportColumns","exportTaskCollectionTemplateColumns","fieldMappings","withMessage","minItems","rules","headerCellTextRules","footerCellTextRules","getExportTaskCollectionTemplate","getExportTaskCollectionTemplateColumns","setupValidation","ExportTaskCollectionTemplateList","dataGridSelectAll","headerCellTemplate","headerClass","exportTaskCollectionTemplateListQueryFilters","selectedRecordStatus","canEditExportTaskCollectionTemplates","filterDataGridItems","itemsToDelete","deleteExportTaskCollectionTemplates","dataItems","exportTaskCollectionTemplateIds","handleDeleteError","idsToDelete","selectedDataGridItems","getApiErrorMessage","getExportTaskCollectionTemplates","exportTaskCollectionTemplates","GlobalMessagingService","searchType","Default","toWidgetRequest","DashboardTemplateService","SegmentationSampleGridColDataFactory","segmenationTemplates","_segmentationTemplates","_samples","_requiredSegmentationTemplates","_lookupSegmenationTemplates","_nonLookupSegmentationTemplates","_groupedLookupSegments","groupedLookupSegments","sts","groupedLookSegments","filterSegmentationTemplatesByType","fixupSegmentNames","getRequiredSegmentationSegments","_segmentationTemplateSelectorOptions","unshift","segmentNames","n","sensitivity","segmentKeys","segmentKey","uniqueSampleSegmentKeys","matchedTemplateSegments","seg","lookupType","filteredTemplates","lst","segmentId","sameOutcomeMessages","AlreadyTriggered","NotEmmaTest","remediationPhrases","taskGenerationPhrases","describeCapPlanTriggerResult","remediationOutcome","taskGenerationOutcome","HttpClientConfigurator","clientVersion","withBaseUrl","withHeader","portalClientVersion","apiErrorsInterceptor","tryAddAuthentication","tryAddImpersonation","tryAddWorkingUnderOrganization","tryUpdateAuthentication","checkClientVersion","responseError","showClientVersionReloadDialog","OutcomeStatus","getOutcomeStatusOptions","PASS","FAIL","INCOMPLETE","LabService","searchText","lab","GlobalMessageDetail","globalMessagingService","form","isReadOnly","simplemdeEditor","handleFormChange","getGlobalMessages","globalMessage","approveGlobalMessage","createGlobalMessage","updateGlobalMessage","deleteGlobalMessage","isCurrentUserGlobalMessenger","createDateTime","loadGlobalMessage","currentUserId","editorTextarea","toolbar","insertTexts","codemirror","handleEditorChanged","togglePreview","off","toTextArea","GlobalMessageList","globalMessageService","globalMessages","setRowData","loadGlobalMessageData","rowData","globalMessageGrid","Element","matches","msMatchesSelector","webkitMatchesSelector","parentElement","parentNode","nodeType","TestMethodManagementService","organizationTestMethodIds","DistributionGroupService","FaqDetail","ValidationControllerFactory","PageContext","FaqService","faqGroupService","faqService","selectedFaqGroups","faq","faqGroupId","faqGroupName","getFaq","getFaqGroups","faqGroups","selectedFaqGroup","ValidationRules","handleNotFound","saveFaq","savedFaq","ordinal","observable","FaqGroupDetail","getFaqGroup","saveFaqGroup","FaqGroupList","CompareUtility","selectedActiveFaqGroups","faqGroupsView","setSelectedActiveFaqGroups","updateFaqGroupsView","lowerCasedFilterText","orginalOrdinal","deleteFaqGroups","faqGroupsToDelete","faqGroupIds","multipleFaqGroups","$event","detail","formElement","hasAttribute","updateFaqGroupOrdinals","faqGroupDataGridViewModel","gridApi","setSortModel","FaqList","selectedActiveFaqs","faqsView","setSelectedActiveFaqs","getFaqs","faqs","updateView","question","answer","deleteFaqs","faqId","faqsToDelete","faqIds","multipleFaqs","updateFaqOrdinals","faqDataGridViewModel","isVisible","Glossary","glossaryTermService","getGlossaryTerms","glossaryTerms","glossaryTermGroups","buildGlossaryTermGroups","glossaryTermGroupVisibilities","updateGlossaryTermGroupVisibilities","letter","gt","glossaryTermGroup","GlossaryTermDetail","getGlossaryTerm","saveGlossaryTerm","GlossaryTermList","selectedActiveGlossaryTerms","glossaryTermsView","setSelectedActiveGlossaryTerms","updateGlossaryTermsView","deleteGlossaryTerms","glossaryTermId","glossaryTermsToDelete","glossaryTermIds","multipleGlossaryTerms","HelpNavigationMenu","navItems","bindable","Support","StringResourceService","SupportRequestService","stringResourceService","supportTopicService","supportRequestService","getSupportTopics","supportTopics","getStringResources","disclaimer","selectedSupportTopics","supportFormMessage","supportRequest","supportTopicId","createSupportRequest","SupportTopicDetail","saveSupportTopic","topic","getSupportTopic","SupportTopicList","deleteSupportTopics","topics","MarkdownEditor","bindingMode","uploadedFileService","handleEditorChange","setEditorValue","editor","SimpleMDE","buildToolbar","image","createImageToolbarItem","markdownEditor","className","showFileDialog","imageFileInputElement","uploadFiles","imageUploadPath","progress","uploadPercent","total","getWrapperElement","lastChild","start","end","startPoint","getCursor","endPoint","getState","getLine","line","ch","replaceRange","getSelection","replaceSelection","setSelection","UserGuideDetail","userGuideService","htmlContent","editMode","getUserGuides","userGuides","getUserGuide","marked","StringUtility","getRandomString","saveUserGuide","UserGuideList","selectedActiveUserGuides","userGuidesView","setSelectedActiveUserGuides","updateUserGuidesView","deleteUserGuides","userGuideId","userGuidesToDelete","userGuideIds","multipleUserGuides","TaskGenerationClientSettings","clientSettings","PromiseQueue","concurrency","_pending","_activeCount","dequeue","Accordion","$accordionElement","$accordion","Foundation","multiExpand","BooleanUtility","parsePrimitive","foundation","AccordionItem","containerless","ContentSizeChangeCustomAttribute","handleSizeChange","$element","dispatchEvent","CustomEvent","eventName","bubbles","DataDropdownCustomAttribute","$dropdown","dropdown","anchorElement","$anchor","$anchors","$currentAnchor","close","DataEqualizerCustomAttribute","initializeEqualizer","$equalizer","observer","MutationObserver","childList","characterData","removeEventListener","equalizer","reInit","PropertyKeys","ALL_PROPERTIES","ColDefUtil","DataGrid","Container","ViewCompiler","BindingEngine","disableAutosizeColumns","handleMouseDown","handleMouseUp","handleMouseMove","mousePressed","scrollInterval","clearInterval","gridViewportBoundingRectangle","gridViewport","getBoundingClientRect","clientY","top","scrollTop","bottom","scrollHeight","clientHeight","bindingContext","gridDataSubscription","gridData","collectionObserver","gridDataCollectionChanged","supressSetRowData","updateGridDataSubscription","changeRecords","changeRecord","rowDataTransaction","addedCount","removed","reinitialize","initialize","suppressLoadingOverlay","suppressNoRowsOverlay","rowHeight","headerHeight","columnDef","templateMap","createCellRenderer","tooltip","tooltipField","headerTemplateMap","headerComponent","createHeaderComponent","groupTemplate","groupTemplateMap","groupRowRenderer","createGroupRenderer","headerTooltip","saveColumnState","Grid","globalEventListener","sizeColumnsToFit","au","setHeight","eventType","eGui","localSupressCellRenderRefresh","supressCellRenderRefresh","localViewCompiler","localOverrideContext","columnStateLocalStorageKey","saveColumnStateDebounce","minColumnStateColumnWidth","DataTogglerCustomAttribute","$toggler","toggler","DPGlobal","validParts","Constructor","stopPropagation","preventDefault","is","trigger","viewDate","showMode","modes","viewMode","navStep","moveHour","moveDate","fill","getHours","getMinutes","getSeconds","startViewMode","_setDate","minView","month","year","hours","minutes","seconds","nonMilitaryTime","day","substr","oldViewMode","autoclose","prevViewMode","dayMonth","startYear","Infinity","startMonth","endYear","endMonth","titleFormat","picker","toggle","todayBtn","updateNavArrows","fillMonths","prevMonth","getDaysInMonth","getUTCDay","weekStart","nextMonth","clsName","html","calendarWeeks","getDay","calWeek","onRender","todayHighlight","currDate","daysOfWeekDisabled","datesDisabled","weekEnd","empty","actual","tts","ampm","minuteStep","eq","yearCont","originalShow","show","blur","Datepicker","isAttached","ensureInitialized","updateValue","$datepicker","inputElement","forceParse","pickTime","minSelectableDate","maxSelectableDate","datepicker","setDatePickerValue","update","stringValue","checkValid","setStartDate","setEndDate","Chart","defaults","global","responsive","defaultFontFamily","DoughnutChart","applyChartData","chartCanvas","doughnutChart","getContext","animation","duration","cutoutPercentage","maintainAspectRatio","legend","display","tooltips","dp","noData","labels","datasets","borderWidth","borderColor","ErrorTooltip","tooltipContainer","Tooltip","tipText","createDateRangeFilterOption","isFuture","createDateRangeFilterOptions","DateRangeFilter","titlePropertyName","clearDateRange","clearFilterSubscription","selectedOption","defaultOption","FilterButtons","MapPlanFilter","defaultFilterType","selectedFilterType","OrganizationFilter","isFiltering","clearSelectedOrganizations","TestMethodFilter","clearSelectedTestMethods","CustomDayHeader","props","FullCalendar","eventClick","calendar","initialDate","DateUtility","stringToMoment","Calendar","calendarElement","plugins","momentPlugin","interactionPlugin","dayGridPlugin","timeGridPlugin","headerToolbar","left","center","right","initialView","slotDuration","navLinks","dayMaxEvents","dayMaxEventRows","eventMaxStack","expandRows","dayHeaderContent","arg","nowIndicator","handleWindowResize","addEventSources","render","gotoDate","changeView","removeAllEventSources","addEventSource","events","FullHeightCustomAttribute","fixedHeightOverride","headerBounds","getElementsByTagName","footerTop","elementBounds","currentTop","shrink","globalResources","InfoTip","plugin","KeyholdPreventFocusCustomAttribute","handleKeyDown","handleKeyUp","shiftKey","ctrlKey","enable","disable","tagName","activeElement","oldDisabledValue","controller","disableFocus","enableFocus","MiniDoughnutChart","fillColor","NotifyFormChangesCustomAttribute","enableDatepicker","datepickerAdded","enableSelect2","select2Added","customEvents","customEvent","srcElement","RecordChangeList","operation","RequiredCustomAttribute","requiredIndicator","createTextNode","updateIndicatorInDOM","requiredIndicatorAdded","removeChild","ScrollIntoViewCustomAttribute","firstChild","parentBounds","windowTop","childBounds","Select2","TaskQueue","taskQueue","closeDropdownOnEnterKey","$select","owningView","myView","controllers","boundProperties","bp","binding","targetProperty","queueTask","trySetDefault","groupPropertyName","groupedItems","updateSelection","keyCode","select2","selectedItems","selectedItem","isDetached","term","tag","itemValue","minimumResultsForSearch","enableCustomItems","allowClear","dropdownAutoWidth","itemTemplate","templateResult","findItemByValue","parentBindingContext","createTag","insertTag","noResults","matcher","getSelectedItems","itemToRemoveIndex","getSelectedValues","disablePlaceholder","selectedItemsBound","selectedItemBound","selectedValuesBound","selectedValueBound","finalValue","Select2ItemTemplate","TargetInstruction","processContent","compiler","resources","innerHTML","noView","targetInstruction","elementInstruction","Selector","disabledPropertyName","getSelect2Item","getSelect2Data","tokenSeparators","textContent","noResultsMessage","dispatchChangeEvent","select2Plugin","dataAdapter","current","callback","pendingElements","selectElement","SelectorItemTemplate","Slider","handleSliderChange","$slider","sliderPlugin","valueInput","setHandles","getTimeOptions","times","quarterHours","j","time","twelveHrClockOffset","TimeSelector","ArrayPropertyMapValueConverter","BooleanValueConverter","CapPlanTestMethodFormatValueConverter","cptm","testMethodBillCode","CommaSeparateValueConverter","CurrencyValueConverter","numeral","DateFormatValueConverter","defaultValue","convertToLocal","KeysValueConverter","isNullOrWhitespace","FilterValueConverter","GroupByValueConverter","objects","rv","JsonValueConverter","LookupAndMapValueConverter","keyPropertyName","NumberFormatValueConverter","NumberValueConverter","numberValue","ObjectKeysValueConverter","PercentValueConverter","decimalPlaces","toFixed","SortValueConverter","TakeValueConverter","TestMethodFormatValueConverter","defaulCsvExportParams","skipColumnGroupHeaders","skipRowGroups","allColumns","defaultExcelExportParams","ext","fileNameSuffix","createFileName","csvExportParams","excelExportParams","defaultCsvExportParams","agGridDialogRef","DialogController","isMessageHtml","columnOrders","columnOptions","directionOptions","pop","addColumnOrder","taskOrder","exportableFieldKeys","ok","labelTemplates","selectedLabelTemplate","filteredLabelTemplates","lt","updateSearchResults","matchingUsers","getUsers","firstName","lastName","ClientRefresh","clientIsCurrent","version","newClientVersion","clientIsCurrentSubscription","handleClientIsCurrent","refreshClientSubscription","handleClientRefresh","GlobalMessageNotifier","getContextMenuItems","viewBy","Read","Deleted","All","_globalMessageCount","getUserMessageCount","globalMessageCount","getUserGlobalMessageNotifications","agGridDialogModel","getMessageNotifications","agGridOptions","showAgGridDialog","globalMessageId","setDataValue","readUserMessage","setUserMessageCount","unReadUserMessage","deleteUserMessage","unDeleteUserMessage","messageActionCellRendererParams","readMessage","unReadMessage","deleteMessage","unDeleteMessage","userMessageCountChangedSubscription","handleUserMessageCountChanged","HeaderAccountDropdown","userFilterText","orgFilterText","usersAreLoading","orgsAreLoading","userView","usersView","orgsView","updateImpersonatedUser","updateWorkingUnderOrganization","updateUserSearchResults","updateOrgSearchResults","findOrganizations","startImpersonation","simplifyUser","navigateToDashboard","stopImpersonation","startWorkingUnderOrganization","organizationName","HeaderNavigationMenu","handleImpersonationStart","handleImpersonationStop","updateNavigationItems","userImpersonationStartSubscription","userImpersonationStopSubscription","ExportTaskCollectionTemplateService","TestResultService","AgPointRemediationCellRenderer","pointRemediationGrid","testMethodManagementGridOptions","canHide","emptyExportTaskCollectionTemplateFooterOptions","ignoreQuickFilter","partialTestResultGrid","getQuickFilterText","qualitativeResult","checkbox","groupSelectsChildren","TaskGenerationRequest","TaskGenerationZoneDistribution","zoneDistributions","zonePercentageCount","DISCRETE","zone1","zone2","zone3","zone4","getZoneForServer","getType","getZoneForUI","PartialTestResultService","partialTestResultListQuery","STORAGE_KEY","DashboardPreviewService","raw","LabelTemplateList","fieldNameRules","disabledForStandardMode","disabledForBatchMode","zoomLevelIndex","zoomLevels","canZoomIn","canZoomOut","revertingLabelTemplateType","allowAddRemoveElements","selectedElement","canEditLabelTemplates","labelTemplateTypeOptions","getOptions","getLabelTemplate","batchTestMethods","subscribePropertyChanges","sampleLabelFontSize","initializeDisplayOnlyElements","loadFieldOptions","uiLabelTemplateWidthChangedSubscription","propertyObserver","handleUiLabelTemplateWidthChanged","uiLabelTemplateHeightChangedSubscription","handleUiLabelTemplateHeightChanged","uiLabelTemplateTypeChangedSubscription","handleUiLabelTemplateTypeChanged","displayOnlyElementManager","oldType","clearElements","tearDownElementValidation","templateType","createDisplayOnlyElements","setupOrganizationConfigurationValidation","missingOrganizationConfiguration","tearDownOrganizationConfigurationValidation","displayOnly","stopImmediatePropagation","objectName","fieldName","oldElement","validateElement","setupElementValidation","configureFieldNameOptionsForBatchTestMethods","objectNameOptions","fieldNameOptions","taskLabel","when","mode","aggregateResult","errorElements","showErrorOverlay","saveLabelTemplate","savedLabelTemplate","selectedLabelTemplateTypes","selectedActiveLabelTemplates","uiLabelTemplatesView","setSelectedActiveLabelTemplates","updateLabelTemplatesView","uiLabelTemplates","matchSelectedLabelTemplateTypes","configuredForCaption","matchSelectedRecordStatus","filteredIsActiveValue","deleteLabelTemplates","labelTemplatesToDelete","labelTemplateIds","LabDetail","labService","getLab","isValidPostalCode","labId","saveLab","labDetailId","LabList","isInternalView","updateLabsView","labs","labsView","l","address1","address2","getAdminLabs","Layout","$filterArea","Privacy","isUserLoggedIn","navigateBack","Terms","CapPlanDetail","capPlanService","collectionTypeOptions","operationsTimingOptions","canEditCapPlans","canViewAudit","propertyDisplayNames","TestMethods","SampleDescriptionsJson","TestingDayCount","IsActive","selectedLab","labOptions","labExternalSource","sampleDescriptions","succeeded","getOrganizations","getLabs","getCapPlan","organizationOptions","loadViewFrom","formLabIdSubscription","labIdChanged","customRule","uiCapPlan","satisfiesRule","testingDayCount","validateOnBind","getCapPlanRecordChanges","recordChanges","CapPlanList","capPlanFilter","selectedCapPlans","deleteSelectedCapPlans","setQuickFilter","loadCapPlans","clear","selectedNodes","getSelectedNodes","isGridRowSelected","getCapPlans","capPlans","rowNode","bulkDeleteCapPlans","updatedCapPlanList","getTestMethods","onSelectionChanged","handleAGGridSelectionChanged","capPlanGrid","AutoRemediationCustomElement","remdiationUserType","Assigned","Approval","assignedUserFullName","toUserFullName","approvalUserId","approvalUserFullName","deactivateRoutineTaskGeneration","autoRemediation","PlanSelectorCustomElement","getOrganizationPlans","organizationPlans","planOptions","op","PointRoomSelectorCustomElement","pointRoomService","getOrganizationPointRooms","organizationPointTypes","roomTypeOptions","pt","getOrganizationPointTypes","PointTypeSelectorCustomElement","pointTypeService","pointTypeOptions","RelatedCapPlansCustomElement","relatedCapPlans","getRelatedCapPlans","SampleDescriptionCustomElement","SubmitButtonsCustomElement","submittingEvent","formSubmittedResult","submittedEvent","toEntity","createCapPlan","updateCapPlan","entityId","TestMethodsSelectorCustomElement","testMethodService","testMethodOptions","CustomerTestImportService","customerTestImportService","acceptFormats","testDataFile","testDataFileInput","saveCustomerTestImport","CustomerTestImportList","uploadDateRangeOptions","defaultUploadDateRangeOption","selectedUploadDateRangeOption","loadCustomerTestImports","updateCustomerTestImportsView","customerTestImports","customerTestImportsView","getCustomerTestImports","uploadStartDate","uploadEndDate","customerTestImport","uploadDateTime","processedDateTime","totalRecordCount","successfulRecordCount","failedRecordCount","LocationTestingNavigationMenu","routes","MapDashboard","remediationRootCauseService","testMethodGroupOptions","scale","pointZoneOptions","panZoomSettings","innerPointViewSize","pointFilterText","showFailedOnly","savePanZoomSettings","canViewAllRedmediations","pointSelectionMode","SINGLE","selectedViewOption","sidebarView","sidebarDetailViews","currentSidebarDetailView","playbackFrames","currentPlaybackFrame","isPlaying","mapDashboardQueryFilters","pointMouseDown","pointMouseMove","pointMouseUp","pointHover","pointHoverEnd","stopPlayback","isHovered","mapSvgElement","reloadData","enableDblClickZoom","disableDblClickZoom","loadPlaybackData","MULTI","setView","loadPointData","getPoints","originalPoints","dirtyPoints","originalPoint","updateMapPoints","fetchConfirmationTestResultValues","confirmationTestValueOptions","getDailyResults","togglePlayback","playInterval","pointRemediations","selectedPoint","xOriginal","yOriginal","ensurePointInView","mapContainerBounds","mapContainer","absolutePointX","absolutePointY","pan","pointBoundary","maxPointRadius","setSelectedPoint","showPointDetail","loadPointDetailData","pointTestResults","pointPlans","failedPointTests","pointHasOverdueTasks","getPointTests","getPlansByPoint","getHasOverdueTasks","pointTestResultGridOptions","pointPlanGridOptions","pointRemediationGridOptions","generatePointTestMetrics","pointTestMetrics","failedCount","passedCount","updatePointsView","DELETED","pointsView","checkFailedTest","filterOnRecordStatus","latestSample","tests","historical","ROUTINE","VECTOR_SWAB","CORRECTIVE_ACTION","acceptAndSetSingleView","loadPromise","getMap","getPlanFilterOptions","getTestMethodFilterOptions","getTaskAssigneeFilterOptions","getPointTypes","ignoreSpecificationPointTypes","getRemediationRootCauseList","pointRoomOptions","taskAssigneeOptions","remediationRootCauseOptions","rrc","loadResults","pointTestResultSelectedCount","selectedPointTestResultCapPlanTriggered","capPlanStatus","pointPlanGrid","fit","zoomEnabled","minZoom","onZoom","onPan","zoom","initializePoints","saveDashboardSettings","getZoom","getPan","pointMouseDownStartingPoint","clientX","draggingKeyPoint","draggingKeyStartingPoint","disablePan","getTranslatedPointCoordinates","selectionRubberband","draggingPointCoords","draggingOffset","planPointMouseMouse","abs","movementX","movementY","deselectOtherPoints","draggingPointsMoved","clientOffset","planPointMouseUp","selectionMouseUp","enablePan","mapSelectedViewToCollectionTypeFilter","getLatestResults","getHistoricalResults","latestResults","historicalResults","updateLatestResults","updateHistoricalResults","warningCount","totalFailedCount","currentTest","latestResult","ensureResult","historicalResult","getSelectedRows","failedTestId","triggerCapPlan","zoomIn","zoomOut","createSVGPoint","cursorPoint","matrixTransform","getScreenCTM","inverse","pixelX","pixelY","confirmationTestValueOptionsSubscription","testMethodGroupChanged","MapDetail","mapAttributeService","supportedPhotoFormatMessage","canEditMaps","fileReader","FileReader","handlePhotoLoad","getMapAttributes","usedMapAttributes","mapAttributeNames","mapAttributeValues","createMapAttribute","mapPhoto","photoUrl","valuePlaceholder","isLoadingValues","newName","originalPlaceholder","mapPhotoInput","readAsDataURL","mapPhotoDataUrl","mapAttribute","saveMap","savedMap","getMapRecordChanges","MapImage","Image","imageElement","createElementNS","setAttributeNS","src","MapList","selectedActiveMaps","mapListQueryFilters","mapsView","setSelectedActiveMaps","updateMapsView","matchSelectedOrganizations","loadMaps","userOrganizations","deleteMaps","mapsToDelete","multipleMaps","planManagementViewBySelectorOptions","replacementDescription","impactCounts","organizationCount","planCount","unassignedTaskCount","specificationCount","PlanManagementList","planManagementService","viewBySelectorOptions","_selectedViewByOption","canEditPlanManagement","getTestMethodReplacementImpactCounts","replacementTestMethods","showNameValueItemSelector","replacementTestMethodId","replaceTestMethod","loadActiveTestMethods","fetchActiveTestMethodPlans","testMethodPlans","planManagementGrid","groupByColumnDefinitions","GenerateTasks","timeZoneService","taskGenerationRequestService","planCoverage","calcualateEndDate","taskGenerationRequest","BY_QUARTER","quarterCount","BY_MONTH","monthCount","BY_WEEK","weekCount","canEditPlans","wasPausedAtLoad","showMainSection","showScheduleSection","showRiskDistributionSection","showCollectionTimesSection","showBlackoutSection","taskCountDisabled","planPointRisks","zoneDistributionMax","initSchedule","timeCaptions","mapping","handleRequestedPointCountChanged","handlePointZoneDistributionMethodChanged","scheduleMinDate","QUARTERLY_SWAB","MONTHLY_SWAB","WEEKLY_SWAB","BY_DAY","DAILY_SWAB","weekBasedTaskDistribution","SEQUENTIAL","copy","pointDistributionMethod","mapDateSelectionTypeToPointDistributionMethod","highTaskRiskPriority","percentage","riskLevels","high","mediumTaskRiskPriority","medium","lowTaskRiskPriority","low","createAllZonesForServer","tomorrow","planSettings","SINGLE_DATE","requestedPointCountSubscription","requestedPointCountZone1Subscription","requestedPointCountZone2Subscription","requestedPointCountZone3Subscription","requestedPointCountZone4Subscription","pointZoneDistributionMethodSubscription","dateSelectionTypeSubscription","quarterCountSubscription","monthCountSubscription","weekCountSubscription","startDateSubscription","generateRequestedTaskCount","showZonePercentageCounts","multiplier","getMultiplier","tasksToBeGenerated","pausedOrLocked","planTypesUsingSchedule","planTypesUsingBlackout","planPointRiskBreakdown","planPointZoneBreakdown","zones","getPlanTypes","getPlan","getTimeZones","timeZones","pausedPointCount","generatePointBreakdowns","isPaused","initializeTaskRequest","updateSections","endDateSubscription","errorMessageRequestedTaskCount","DATE_RANGE","isSame","isAfter","taskCount","zoneOrPercentErrorMessage","zoneDoesNotHaveEnoughPointsErrorMessage","zoneValue","validZoneOrPercent","planHasEnoughUniquePoints","countOrPercent","zonePointCount","zonePointMax","blackoutDate","dateToRemove","prepareTaskRequestForSubmission","submit","createAllZonesForUI","fromTaskGenerationRequest","savePlanSettings","planCoverageType","exportPlanCoveragePoints","PlanCoveragePieChart","chart","position","onClick","chartElements","_model","handleChartClick","collectedCount","scheduledCount","collectedAndScheduledCount","unusedCount","PlanDetail","pointAttributeService","taskDistributionMethodWeekBased","taskDistributionMethodEven","EVEN","taskDistributionMethodRandom","RANDOM","Name","Description","Remediation","Schedule","IsPaused","planPointSelectorViewModel","resetView","oldLabId","oldLab","loadTestMethods","planTypesUsingCollectionTimes","updateGridPoints","getPointAttributes","canEditStartDate","planLabIdChangedSubscription","handlePlanLabIdChanged","planTypeSubscription","handlePlanTypeLevelChanged","taskDistributionMethodSubscription","handleTaskDistributionMethodChanged","weekday","setHours","startTime","selectedTargetCollectionTime","bParts","aParts","targetCollectionTimeToRemove","targetCollectionTimesValidationResult","targetCollectionTimesInvalid","savePlan","updatedPlan","getPlanRecordChanges","PlanList","selectedPlanTypes","selectedPausedStates","selectedCollectionTypes","selectedActivePlans","selectedRecordStatuses","canDeletePlans","scheduleCycleDays","plansView","canGenerateTasks","pointCount","setSelectedActivePlans","updatePlansView","selectedPlanId","navigateToGenerateTasks","matchSelectedPlanTypes","matchSelectedPausedStates","remediationStatus","matchSelectedCollectionType","isFilteringPlanTypes","isFilteringPausedStates","isFilteringRecords","filterRecordStatusState","isFilteringCollectionType","ct","deletePlans","plansToDelete","multiplePlans","PlanPointSelector","pointGridConfig","isExternalFilterPresent","selectedOnly","doesExternalFilterPass","allPointsSelected","onFilterChanged","setupFilterOptions","pointGridFullHeightViewModel","updateSourcePointSelections","planPoints","gridPoints","updatePlanPoints","gridPoint","getFilteredGridPoints","convertPointAttributeSelectionsToPointAttributes","pointSummaries","pointIds","pointSummary","pp","PointDetail","canEditPoints","pointRiskOptions","getPoint","existingPointTypes","usedPointAttributes","mapPhotoUrl","otherPoints","pointAttributeValues","createPointAttribute","setupPointAttributeValidation","mapImageBoundingRectangle","mapSvg","clientWidth","dblClickZoomEnabled","beforePan","oldPan","newPan","isPanning","interval","mapImage","bringPointIntoView","onload","tearDownPointAttributeValidation","pointPhotoInput","pointPhotoDataUrl","savePoint","savedPoint","cursorpt","getPointRecordChanges","PointList","compareValues","selectedActivePoints","selectedInactivePoints","setSelectedPoints","loadPoints","pointAttributeFiltersInUse","deletePoints","handleError","selectedPoints","pointsToDelete","describeSelection","skippedNote","pluralizePoints","pointsToReactivate","reactivatePoints","actionCount","selectedCount","skippedState","skippedCount","actionTitle","multiplePoints","RemediationDetail","canViewRemediations","canSetAssignStatus","canSetApprovalStatus","currentView","views","testsFilterText","Status","updateTestsView","getRemediation","getMapTests","updateFileViews","remediationSubscription","remedationStatusChanged","testsView","testMethodDisplayName","collectedDate","isMobile","testsGridOptions","preFilesView","postFilesView","preFilesGridOptions","postFilesGridOptions","saveRemediation","savedRemediation","postFileInput","postFile","preFileInput","preFile","saveRemediationFile","filePath","deleteRemediationFile","getRemediationRecordChanges","remediationRootCauseId","failedTest","dialogTitle","getPointTestHistory","pointCellRendererParams","showPointHistoryGrid","testsGrid","fileCellRendererParams","downloadRemediationFile","preFilesGrid","postFilesGrid","RemediationList","assignedFilterOptions","assignedFilter","onlyAssignedToMeFilterOptions","onlyAssignedToMeFilter","selectedActiveRemediations","remediationsView","setSelectedActiveRemediations","updateRemediationsView","approvalUserEmail","statusCaption","remediationStatusesFilter","updateFilterDefaults","loadRemediations","getFilters","setStatusCaptions","deleteRemediations","remediationsToDelete","remediationIds","multipleRemediations","RequestDetail","requestDefaultsService","selectedSamples","_desriptionBuilderLocalStorageKey","defaultSampleDescriptionFields","getFields","canEditRequests","toggleSampleCombinationButtons","defaultDescription","sampleDescriptionFields","selectedSampleDescriptionFields","selectedSampleDescriptionFieldsCollectionChangedSubscription","selectedSampleDescriptionFieldsCollectionChanged","generateDescription","savedFieldsString","savedFields","selectedSavedFields","updateDescriptions","setAllCanCombineWithSelected","canCombineWithSelected","checkCanCombineWithSelected","enableCompositeButton","testMethodCategory","checkSampleHasQuantitativeTest","firstSelectedSample","groupedSamples","isComposite","compositeSamples","maxSamplesPerComposite","sampleParts","sampleIndex","removedSample","removeSampleValidation","compositeSample","createCompositeSample","addSampleValidation","clearSelectedSamples","samplePart","uncompositedSampleIndex","uncompositedSample","getOrganization","getConfiguration","organizationDefaultLabCodes","sampleOrderCaption","sampleOrder","testMethodExternalSources","pointRoom","taskCollectedDateTime","taskAssignedUserFullName","taskOperationsTimingCaption","getOperationsTimingCaption","taskCollectionType","captionA","captionB","getRequestDefaults","lvOrgRequestDefaults","poRequired","lvPoRequired","lvIncludePo","samplesMissingTests","TaskDetail","pointSampleDescriptions","pointSampleDescriptionValidationRules","getTestResultSummaries","failedTestResultSummaries","failedTestResultSummary","failedTestPoints","togglePointSelection","pointSampleDescription","sampleDescription","days","collectionTime","taskStatusId","assigningUserId","createTasks","tryBringPointIntoView","usersLoading","sampleSubmitted","paramsPlanId","createNew","getTask","discretionaryPlans","targetDate","targetTime","setTime","collectedTime","assignedUser","getUser","getRequests","requestDate","receiveDate","startOfTestingDate","dateTime","mins","getPaddingDateTimePart","combineDateAndTimeToUtcString","saveTask","timeString","localDateTimeString","localDateTime","utcDateString","utcTimeString","getTaskRecordChanges","TaskList","submittedFilterOptions","selectedActiveTasks","LIST","taskListQueryFilters","canUnassignTasks","canSubmitRequests","selectedOrganizationId","tasksView","setSelectedActiveTasks","setUnassignAbility","setRequestSubmissionAbility","isSelectedChanged","updateTasksView","dataGridFullHeightViewModel","calendarFullHeightViewModel","calendarViewModel","extendedProps","unix","mapName","operationsTimingCaption","pointType","pointRiskCaption","testMethodsCaption","testMethodsHoverCaption","loadFilterOptions","loadTasks","loadTaskLabelTemplates","mapIdsForPoints","pointMobileOptions","setTasks","setDates","setCaptions","loadPlanColorMap","planColorMap","calendarTasks","groupedTasks","d1","d2","len","firstTask","lastTask","taskCalendarEvents","planSummary","colorHex","existingTask","taskStatus","pointRisk","deleteTasks","handleActionError","updateTasks","deselectAll","isGridVisible","displayedIds","forEachNodeAfterFilterAndSort","tasksToActOn","inDisplayOrder","messagingOptions","getActionMessagingOptions","preActionFunction","actionData","confirmationTextFunction","toggleLoader","waitingText","showInfoOverlay","closeOverlay","actionFunction","completedText","successFunction","errorLogText","errorMessageCaption","displayOrderCaption","tasksActedOn","selectUser","selectExportableFields","bin","selectTaskLabelTemplate","isDownloadUrlValid","selectExportTaskCollectionTemplate","getExporTaskCollectionTemplate","urlLength","dialogItems","oc","multipleTasks","actionMsg","dataGridElement","offsetParent","sortedColumn","getColumn","getColDef","nextInstanceId","TaskOrderOption","TaskStatusSelectorDialog","okEnabled","disabledMessage","completedStatusOption","inProgressStatusOption","toggleOkEnabled","updateCollectedDateTime","TestMethodManagement","testMethodManagementService","actionId","actionOptions","fetchOrganizationTestMethods","tms","selectectedIds","organizationTestMethodId","hideOrganizationTestMethods","showOrganizationTestMethods","loadGridData","setCheckboxVisibility","setFilterModel","filterType","dataGridRowSelected","getImpersonatingOrganizations","onGridSelectionChanged","testMethodManagementGrid","LoginAudit","loginAuditService","dateRangeOptions","selectedDateRangeOption","updateLoginDataView","loginData","loginDataView","ld","fetchLoginAuditData","getLoginAuditData","LoginAuditDetail","loginAuditDetail","getLoginAuditDetail","notFound","RequestDetailMode","DashboardViewCategoryService","use","standardConfiguration","feature","registerHandler","FoundationValidationRenderer","LicenseManager","setLicenseKey","environment","debug","developmentLogging","testing","registerSingleton","originalErrorHandler","onerror","messageOrEvent","source","lineno","colno","reason","Guid","isGuid","appInsightsKey","registerKey","navigateToRoot","regeneratorRuntime","throttle","UiCapPlan","taskOperationsTiming","autoRemediationAssignedUserId","autoRemediationApprovalUserId","autoRemediationAssignedUserFullName","autoRemediationApprovalUserFullName","NewsItemDetail","getNewsItem","publishDate","newsItemId","saveNewsItem","NewsItemList","selectedActiveNewsItems","newsItemsView","setSelectedActiveNewsItems","updateNewsItemsView","deleteNewsItems","newsItemsToDelete","newsItemIds","TaskDistributionMethod","ExcelCellEditor","editTemplate","ValidationController","editorElement","getEditorElement","setInititalKeyStrokeValueToInputIfExists","datepickerElement","__valid","select2SelectElement","ee","select2Element","parseFloat","date1","date2","date1Number","date2Number","stringResources","RequestTemplateService","requestTemplates","drafts","rt","isDraft","requestTemplateId","requestTemplate","draftRequest","isValidForSubmission","requestTemplateIds","CourierService","couriers","getCouriers","courierData","GenerateTasksPointZoneDistributionMethod","mergeModules","modules","OrganizationDetail","testMethodFilterText","moduleFilterText","childrenFilterText","testMethodGridOptions","moduleGridOptions","childrenGridOptions","configurationGridOptions","hasErrors","allModulesSelected","modulesView","organizationView","configurations","childrenView","testMethodsView","allowStandardRequestSubmission","allowCompositing","allowPartialRequestSpecification","defaultLabCode","requestSubmissionEmailRecipients","partialTestResultEnabledLabs","enableBetaFeatures","enableSegmentLookupMappings","configurationsView","ALLOW_STANDARD_REQUEST_SUBMISSION","ALLOW_COMPOSITING","DEFAULT_LAB_CODE","labCode","REQUEST_SUBMISSION_EMAIL_RECIPIENTS","emailRecipients","DISABLE_TASK_RELATED_EMAILS","disableTaskRelatedEmails","ENABLE_SEGMENTATION","hasSegmentAccess","PARTIAL_TEST_RESULT_LABS","ALLOW_INTERNAL_COMPOSITING","ENABLE_WIDGET_DASHBOARD","enableWidgetDashboard","ENABLE_DASHBOARD_TEMPLATE_MANAGEMENT","enableDashboardTemplateManagement","updateTestMethodView","updateModuleView","updateChildrenView","configurationValues","updateConfigurationView","labCodes","labCodeSubscription","labCodesSubscription","regex","vr","am1","am2","validationResults","updateValidationIndicators","getOrganizationForSave","willRemoveApplicationModules","showRolePermissionRemovalWarning","saveOrganizationCommand","saveOrganizationConfiguration","saveOrganization","parentId","saveApplicationModules","handleSaveError","saveConfigurationValues","OrganizationList","organizationsView","Settings","organizationSettings","initializeValidationRules","getConfigurationsValues","os","setting","moduleType","organizationSettingValidationRules","saveConfigurationsValues","areValidEmails","AgPointPlanNameCellRenderer","AgPointPlanIsRemediationCellRenderer","PartialTestResultList","partialTestResultService","partialTestResultQueryFilter","getTestResults","partialTestResults","customKeyValues","loadTestResultsData","partialTestResultsGrid","currentChartRef","destroyChart","PasswordRequirements","passwordRequirementsService","passwordRequirements","canEditPasswordRequirements","getRequirements","userTopLevelOrganization","saveRequirements","ZeroToBlankValueConverter","showLoader","isLoadingCount","loaderFadedOut","overlay","autoClose","showMessageOverlay","isClosing","loaderFadeOut","OrganizationConfiguration","previousInstruction","RedirectToRoute","UiLabelTemplateElement","uiLabelTemplateElement","fontFamily","font","_objectName","_x","_y","_width","RemediationRootCauseList","canEditRemediationRootCauseList","showLoadingOverlay","sortedRowData","createRemediationRootCauseList","hideOverlay","rowDataChanged","rowNodeDataToRemove","getModel","forEachNode","onRowDataUpdated","remediationRootCauseGrid","AdhocField","disableFilter","disableOutput","disableSort","fieldKey","queryLevelItems","queryLevelItem","fieldDataType","fieldSupportsFullTextSearch","supportsFullTextSearch","fieldCaption","fieldKeyChanged","fromView","AdhocFilter","filterField","filterFieldDataTypeChangeSubscription","handleFilterFieldDataTypeChange","AdhocReportDetail","segmentationTemplateService","adhocReportOptionsService","adhocReportService","sortDirections","noValidOutputColumns","duplicateSortFieldsPresent","canSaveAdhocReports","getAdhocReportOptions","queryLevel","filterFields","outputFields","sortFields","getAdhocReport","adhocReportOptions","segmentsEnabled","getSampleSegments","sampleSegments","allQueryLevelItems","handleQueryLevelChanged","queryLevelChangedSubscription","findField","setupSegmentNameValidation","outputField","sortField","validateExecutionOnly","atLeastOneValidField","fieldsAreUnique","getSegmentationTemplateSegments","uniqueSegments","segmentOptions","s1","s2","isLast","tearDownSegmentNameValidation","details","targetIndex","sourceIndex","targetField","getFieldProperty","saveAdhocReport","getTempAdhocReportResults","reportResults","getDownloadUrl","executionOnly","rule","AdhocReportSubscriptionCreate","adhocReportSubscriptionService","createAdhocReportSubscription","adhocReportSubscription","getCurrentUserAdhocReports","userAdhocReports","activation","adhocReportId","deliveryTimeOfDay","emailTo","emailCC","emailBCC","emailSubject","emailComment","renderFormat","AdhocReportSubscriptionDetail","subsriptionFrequencyTypes","emailRegEx","subscriptionFrequencyRule","deliveryDayType","list","AdhocReportSubscriptionEdit","changeAdhocReportSubscriptionDelivery","getAdhocReportSubscription","AdhocReportSubscriptionList","subscriptions","deleteAdhocReportSubscription","loadSubscriptions","startAdhocReportSubscription","handleStartError","stopAdhocReportSubscription","handleStopError","getAdhocReportSubscriptions","DraggableFieldContainerCustomAttribute","dragula","revertOnSpill","moves","handle","sibling","accepts","BooleanFilter","operators","operator","dateRangeOperatorTypes","DateFilter","minValue","isFixedRange","getFixedMinValue","getFixedMaxValue","NumberFilter","isSelectionFilterDataType","SelectionFilter","parameterOptionService","defaultPlaceholder","getParameterOptions","loadItems","localFilterField","fieldDataTypeChangeSubscription","handleFieldDataTypeChanged","TextFilter","reloadOperators","filterFieldSupportFullTextSearchChangeSubscription","handleFilterFieldSupportFullTextSearchChange","ReportParameter","setValidValues","nullable","validValues","defaultValues","ReportDetail","reportService","validateForSubscription","currentUserOrganizationId","reportHtml","canEditReports","defaultOrganization","selectedOrganization","getReportNotDownload","report","hasSubscription","getSubscription","sub","toEmailAddress","deliveryTimeGmtOffsetMinutes","userLocalGmtOffset","hoursOffset","deliveryTime","deliveryDateTime","preparePredefinedParameters","setReportValidationRules","setSubscriptionValidationRules","canCreateSubscriptions","selectedTestMethod","nameWithCode","nameWithCodeA","nameWithCodeB","organizationParameter","labParameter","testMethodParameter","allowBlank","selectedLabs","carbonCopyList","blindCarbonCopyList","deliveryFreqency","deliveryDayOfWeek","keyValues","parameter","getReport","getParameters","createOrUpdateSubscription","deleteSubscription","showSubscriptionForm","param","prompt","ReportList","reportsView","getReports","isAdhocReport","reports","deleteAdhocReports","RequestTemplateSelector","newTemplateName","newTemplateNameUnique","templateNameLengthTooLong","organizationRequestTemplates","templateIndex","requestTemplateSelection","selectedTemplate","existingTemplate","excludedStandardSubmissionLabExternalIds","requestTemplateService","distributionGroupService","organizationSampleTemplateService","courierService","coaReportStyleService","suspendOrgChangeProcessing","suspendRequestTemplateChangeProcessing","samplesValid","handleOrganizationIdChanged","handleRequestTemplateChanged","handleRushChanged","labChanged","sampleTypeSummaryDataGridConfig","sampleTypeSummaries","orderedSamples","betaEnableRemoveButton","betaEnableCloneButton","standardSampleInfoViewModel","distributionGroups","distributionGroupOptions","dg","distributionGroupName","defaultLab","canProcessOrganizationIdChange","updateOrganizationConfigurableItems","getDistributionGroups","getOrganizationSampleTemplates","requestDefaults","organizationSampleTemplates","generateDistributionGroupOptions","selectedDistributionGroup","isDefault","distributionGroup","orgRequestDefaults","courier","coaReportStyle","emailReports","reportingServiceEmail","sortOrganizationSampleTypes","trySetDefaultLab","betaGridEnabled","setupAndBindV2SamplesGrid","enableCompositing","enablePartialRequests","getSegmentationTemplates","oldRequestTemplateId","getRequestTemplate","selectedRequestTemplate","templateData","templateJson","sampleTempates","projectName","sampledBy","notes","purpose","rush","removeSamples","addSamples","generateSampleTypeSummaries","isLabWare","previouslyAttemptedSubmission","draft","overwriteExistingDraftRequestTemplate","promptAndSaveRequestTemplate","orderedSamplesRequest","cloneWithOrderedSamples","editModeRequestInfoViewModel","isBetaGridValid","mainValid","requestInfoValid","updateRequestTemplate","draftRequests","filteredRequestTemplates","selectedOrganizationName","draftMode","fixUpSampleCollectionDates","createRequestTemplate","summaryMap","sampleType","sampleCount","masterSampleTemplate","testMethodsDisplay","testMethodsTooltip","customerSpecificName","sampleTemplateName","Standard","organizationIdChangedSubscription","requestTemplateSubscription","rushChangedSubscription","labChangedSubscription","createMode","getCoAReportStyleOptions","getRequest","coaReportStyleOptions","courierOptions","setupOrganizations","setupLabsSelectorOptions","setupRequest","subscribeToPropertyChanges","fixSampleCollectionDates","tryPopulateLocationTestingDetails","getOrganizationDetail","organizationDetail","ensureDistributionGroupOption","setupForCreation","isThisAnEditPageLoad","requestClone","sampleSegmentationGridOptions","ensureObject","draftTemplateName","gridId","requestTemplateFilters","getRequestTemplates","transformRequestTemplatesToSelectorOptions","configureWithExistingSamples","comparison","BETA_GRID_ENABLED","thisIsASubmittedRequest","sampleSegmentationGridIsEditable","columnDefiner","addSampleTemplateCol","addCollectionDateCol","addSegmentationTemplateCol","addLookupCols","addNonLookupCols","addDescriptionCol","addLastCols","updateBetaSelectionDependentButtons","sampleSegmentationGrid","selectedGridIds","rn","clonedSegments","setSelected","currentColDefs","selectedSampleIds","selectedSegmentationTemplateIds","updatedSamples","segmentationTemplateIdsToCheck","segmentationTemplateIdsToRemove","copySelectedRangeDown","showDataGridReorderDialog","columnOrder","RequestDetailLocationTestingSampleInfo","csvContent","encodedUri","encodeURI","RequestDetailRequestInfo","newRequest","oldRequest","RequestDetailSampleInfo","agGridSuppressRangeSelection","gridRenderPendingCount","pendingRefreshRowNodes","getEditorProperties","compositeOptions","setGridOptions","sampleTypeTestTemplates","metadata","which","stopEditing","clearRangeSelection","addCellRange","rowStartIndex","rowEndIndex","columnStart","columnEnd","setFocusedCell","segmentationConfiguration","keyedSegments","defer","handleChange","tearDownSegmentValidation","setupSegmentValidation","ensureSegmentColumnDefs","refreshCells","rowNodes","force","setColumnVisible","existingSegmentColumnDefs","newSegmentColumnDefs","getSegmentColumnDefs","checkSegmentColumnDefsMatch","segmentColumDefs","createSegmentColumnDef","suppressMovable","suppressKeyboardEvent","suppressKeyEvent","enableCellChangeFlash","getSegmentationTemplateName","isNumeric","handleSegmentationTemplateIdChanged","processDataFromClipboard","rowBuffer","onPasteEnd","postSort","isLabWareChanged","ost","filteredTestTemplates","organizationSampleType","setSelectedSamples","toggleButtonsDependentOnSelections","addSampleInternal","ensureNewGridFunctionAlertShown","samplesToClone","samplesToRemove","addToCollection","setupSampleValidation","tearDownSampleValidation","enableRemoveButton","enableCloneButton","samplesGridFullHeightViewModel","scrollTo","isBefore","years","segmentRules","RequestList","templateFilterText","requestFilterText","initiallyLoaded","allRequestsSelected","canDownloadRequestPdfs","canDeleteSelectedRequests","selectedView","noLabelTemplatesMessage","selectSingleRequestMessage","templateTypeOptions","selectedTemplateType","createdDateRangeOptions","defaultCreatedDateRangeOption","selectedCreatedDateRangeOption","submittedDateRangeOptions","defaultSubmittedDateRangeOption","selectedSubmittedDateRangeOption","requestTemplateGridOptions","requestGridOptions","allTemplatesSelected","selectedActiveRequestTemplates","selectedValidRequestTemplates","selectedDrafts","selectedRequests","canDownloadUnavailablePdfs","canDeleteRequestTemplates","requestTemplateGridFullHeightViewModel","requestGridFullHeightViewModel","cloneRequestTemplate","loadRequestTemplates","setSelectedRequestTemplates","handleCloneError","requestTemplatesView","createByUserId","requestsView","pdfAvailable","setSelectedRequests","updateRequestTemplatesView","typeCaption","updateRequestsView","requests","loadRequests","createdDateFrom","createdDateTo","populateAdditionalProperties","requestDateFrom","requestDateTo","requestSubmissionStatus","pdfAvailableCaption","sampleLabelTemplates","loadSampleLabelTemplates","populateCollectionDateProperties","collectionDateCaption","getCollectionDateCaption","selectedRequestTemplateIds","createRequests","confirmationHeader","deleteRequestTemplates","requestTemplatesToDelete","getExportUrl","formatMsg","getDraftExportUrl","asDraft","selectedRequestsView","selectSampleLabelTemplate","getSampleLabelPdfUrl","multipleRequestTemplates","orgSettings","configureBetaFeaturesAvailability","enableBetaGrid","emptyExportTaskCollectionTemplateFormattingOptions","alternateRowColor","columnWidth","adjustColumnsToContents","RoleDetail","role","dashboardViewCategories","permissions","isGroupSelected","canEditRoles","unselectedPermission","updateSelectedCategoryDescription","getPermissions","orgName","mapPermissions","getRole","permission","roleId","getRoleClone","saveRole","updateIsGroupSelected","dashboardViewCategoryId","selectedCategoryDescription","RoleList","roles","searchFilter","showPermissions","canViewRoles","getRoles","deleteRole","iLen","RoleMoveUsers","users","selectedRole","selectedUsers","getUsersInRole","fullName","bulkUpdateUsersRole","updateSelections","setSelectedUsers","running","AgDateTimeEditorTypes","ForgotPassword","requestIsPending","initResetPassword","Login","attemptingLogin","loadingDisclaimer","verifyAccountToken","verifyaccount","passwordExpired","login","getErrorMessage","LoginDialog","dialogController","ResetPassword","successOrPermanentFailure","passwordRequirementFailures","resetPassword","confirmPassword","requirementFailures","minPasswordLength","requireUpperCaseCount","requireNumberCount","requireSpecialCharacterCount","passwordReuseCount","UnauthenticatedApp","pipelineProvider","removeStep","SegmentationTemplateList","newSegmentNames","lookupSegmentOptions","initiallyActive","expandedView","canEditSegmentationTemplates","getImpersonatingConfiguration","getSegmentationTemplate","refreshLookupSegmentOptions","missingSegments","pair","lookupMappingError","segmentNameExists","existingNewSegmentName","sn","lookupMappingValid","validateLookupMapping","saveSegmentationTemplate","savedSegmentationTemplate","selectedSegmentationTemplateTypes","selectedActiveSegmentationTemplates","uiSegmentationTemplatesView","setSelectedActiveSegmentationTemplates","updateSegmentationTemplatesView","uiSegmentationTemplates","deleteSegmentationTemplates","segmentationTemplatesToDelete","segmentationTemplateIds","SpecificationDetail","qualitativeResultService","specificationService","specificationTypes","canViewSpecifications","canEditSpecifications","canAccessLocationTestingModule","initSpecification","canApplyRetroactively","isCreate","updateSpecificationType","conditionIsSet","specification","maxQuantitativePassCount","passingQualitativeResults","haveConditionsChanged","getQualitativeResultTypes","getSpecification","qualitativeResultTypes","existingPointRooms","organizationChanged","testMethodChanged","organizationChangeSubscription","testMethodChangeSubscription","maxQuantitativePassCountChangeSubscription","conditionPropertyChanged","minQuantitativeWarningCountChangeSubscription","passingQualitativeResultsChangeSubscription","warningQualitativeResultsChangeSubscription","combined","saveSpecification","apiErrorMessage","SpecificationList","SpecificationService","specificationFilterText","selectedSpecifications","specificationGridOptions","specificationsView","setSelectedSpecifications","getSpecifications","updateSpecificationView","specifications","deleteSpecifications","removeSpecifications","specificationsToDelete","CustomCoaDialog","contact","allFunction","ResultList","resultService","filterRequestId","filterSampleId","filterPoNumber","filterDescription","filterCustomerRequestStatus","canViewCoas","customCoaSamples","chartViewOptions","selectedChartView","groupingOptions","selectedGroupView","resultsView","mobileResultsView","donut1Data","donut2Data","donut3Data","donut4Data","donutTestData1","donutTestData2","donutTestData3","defaultColumnDefinition","columnTypes","valueFromArrayColumn","stripCompareIntegers","requestGroupGridOptions","aggFuncs","groupDisplayType","groupDefaultExpanded","groupRowRendererParams","suppressCount","padding","organizationGroupGridOptions","labGroupGridOptions","statusQueryFilters","canAddToCustomCoa","anySelected","getResults","sampleComposite","mobileResults","getCount","sc","receivedCount","processingCount","completedCount","tr","incompleteCount","passCount","failCount","rawResults","receivedDate","isPool","isCoaGenerated","updateRequestStatusCountCharts","updateTestResultCountCharts","getResultsUrl","getCertificateUrl","getCertificateContact","certContact","footerNotes","getCapPlanGridOptions","masterDetail","detailCellRendererParams","detailGridOptions","getDetailRowData","successCallback","emmaAttributes","AgDatePickerEditor","_datePickerInput","isCurrentUserImpersonating","isCurrentUserWorkingUnderOrganization","hasAccessBasedOnAllowedUserTypes","draftRequestTemplateIds","requestIds","SegmentationTemplateService","ResultService","TestMethodList","organizationTestMethods","organizationTestMethodsView","otm","quotedPrice","testResultsViewBySelectorOptions","TestResultsGroupByCustomElement","getLastDisplayedRow","cellRange","chartType","GroupedColumn","chartThemeName","chartThemeOverrides","common","filteredByListeria","currentDateRangeCaption","createRangeChart","drawChart","TestResultList","testResultService","suppressPageSizeReload","outcomeStatusOptions","testResultQueryFilter","countTestResults","testResultsCount","pageSizeSelectorOptions","testResults","testResultGridOptions","reloadPage","testCode","condition1","condition2","rowDataMap","filterAndSortListeriaResults","combineListeriaResults","columnKeys","getAllColumns","isPinnedRight","exportDataAsCsv","pageSizeSubscription","handlePageSizeChanged","PartialTestResultsQueryFilters","ex","milliseconds","isMoment","tIndex","generatePlanManagementColumnDefs","cellRendererSelector","detailColumnDefs","generatePlanManagementGridOptions","activeTestMethodPlans","LocalStorageConstants","UserDetail","noOrgSelectedRolesPlaceholderText","orgSelectedRolesPlaceholderText","rolesPlaceholderText","canEditUsers","canAssignRoles","permissionGroups","otherOrganizations","selectedOtherOrganizations","updateOtherOrganizations","updateOrganizationRoles","updatePermissionGroups","toggleRoleState","checkRoleIsUnderOrganization","organizationRoles","isOrgSelected","rolesEnabled","unlockUser","saveUser","getUserRecordChanges","UserList","selectedActiveUsers","canDeleteUsers","setSelectedActiveUsers","updateUsersView","loadUsers","usersMatchingOrganization","roleName","activeStatus","deleteUsers","usersToDelete","userIds","multipleUsers","AureliaCellRendererCompBase","httpCodesToHandle","UiLabelTemplate","sizeCaption","configuredForHoverCaption","formatDateTimeToLocal","agFormatDateToLocale","agFormatDateAndTimeToLocale","agFormatBoolean","agFormatTaskCollectionType","UiSegmentationTemplateSegment","uiSegmenationTemplate","uiSegmentationTemplateSegment","useOnSampleLabels","in","useOnRequestCoas","combine","PointRoomService","findAncestor","matchingClass","maxGenerations","currentElement","renderInstruction","unrender","formErrorElement","innerText","errorTooltip","previousElementSibling","nextElementSibling","dataGridRow","errorCount","dataGridCell","Specification","warningQualitativeResults","_type","minQuantitativeWarningCount","$this","applyOutcomesRetroactively","oldSpecification","spec1","spec2","UiPlanCoverage","nextWeek","getPlanCoverage","planCoverageResult","changeHandler","DashboardQueryFilters","MapListQueryFilters","mapAttributeQueryFilters","RequestDefaultsService","SampleSegmentationGridPreferences","AdhocReportOptionsService","RecordStatus","getRecordStatusOptions","PlanSummaryConverter","ps","mapSummary","SampleDescriptionBuilder","getField","getValue","organizationInternalId"],"mappings":"uiEAQO,IAAMA,EAAb,YAMI,0B,4FAAA,UACI,2BAJIC,KAAO,gBAMX,EAAKC,cAAgB,GAHzB,E,UANJ,O,kOAAA,M,EAAA,G,EAAA,+BAiBQC,KAAKD,cAAgB,KAjB7B,uCAoBkB,WACV,OAAOE,OAAOC,OAAP,MAAAD,OAAM,CACT,IADS,SAEND,KAAKD,cAAcI,KAAI,SAACC,EAAcC,GAAf,sBAAoC,EAAKP,KAAzC,YAAiDO,EAAjD,UAA6DD,EAAEE,UAFhF,EAGNN,KAAKD,cAAcI,KAAI,SAACC,EAAcC,GAAf,sBAAoC,EAAKP,KAAzC,YAAiDO,EAAjD,WAA8DD,EAAEG,eAxBtG,sCA4BoBC,GAAW,WACvB,GAAKA,EAAL,CAIA,IAAMC,EAAe,iCACfC,EAAgB,kCAChBC,EAAYV,OAAOW,QAAQJ,GAAQL,KAAI,gCACvCU,EAAaF,EAAUG,QAAO,SAAAC,GAAC,OAAIN,EAAaO,KAAKD,MACrDE,EAAcN,EAAUG,QAAO,SAAAC,GAAC,OAAIL,EAAcM,KAAKD,MAC7D,GAAIF,EAAWK,SAAWD,EAAYC,OAClC,MAAM,IAAIC,MAAM,yDAGpBN,EAAWO,SAAQ,SAACC,GAChB,IAAMC,EAAWD,EAAEE,UAAU,EAAGF,EAAEG,QAAQ,MAAQ,SAClD,EAAKzB,cAAc0B,KAAK,CACpBnB,KAAME,EAAOa,GAAId,MAAOC,EAAOc,WA7C/C,4BAaQ,OAAOtB,KAAKD,cAAcmB,Y,2BAblC,G,UAA+C,I,+SCJ1BQ,EADpBC,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,4DAGTC,GACT,OAAO9B,KAAK6B,WAAWE,IAAhB,yCAAsDD,M,kCAGrDE,GACR,OAAOhC,KAAK6B,WAAWE,IAAhB,0BAAuCC,M,sCAGlCC,GACZ,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,0BAA0CF,M,mCAGxCG,GACT,OAAKA,EAASL,GAGPhC,KAAK6B,WAAWS,IAAhB,0BAAuCD,EAASL,IAAMK,GAFlDrC,KAAK6B,WAAWU,KAAK,mBAAoBF,K,6CAKjCG,GACnB,OAAOxC,KAAK6B,WAAWY,MAAhB,mBAA0CD,Q,gTCtBzD,IAAqBE,EAArB,WACI,WAAoBb,I,4FAAsB,SAAtB,KAAAA,a,UADxB,O,EAAA,G,EAAA,2CAGwBc,GAChB,IAAIT,EAAQ,YAAiBS,GAAa,GAE1C,OAAO3C,KAAK6B,WAAWE,IAAhB,kCACwBG,EAAQ,IAAH,OAAOA,GAAU,OAP7D,6CAW2BU,GACnB,IAAIV,EAAQ,YAAiBU,GAAS,GACtC,OAAO5C,KAAK6B,WAAWE,IAAhB,gBAA6BG,MAb5C,wDAgBsCW,EAAeC,GAC7C,IAAIZ,EAAQ,YAAiB,CAAEW,QAAOC,oBAEtC,OAAO9C,KAAK6B,WAAWE,IAAhB,oCAAiDG,S,2BAnBhE,KAAqBQ,EAAc,aADlC,I,iCAEmC,OADfA,GAAA,O,uSCHAK,EADpBpB,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,6DAGRe,GACV,IAAIV,EAAQc,YAAiBJ,GAC7B,OAAO5C,KAAK6B,WAAWE,IAAhB,sCAAoDG,EAAQ,IAAH,OAAOA,GAAU,O,gDAG3De,GACtB,OAAOjD,KAAK6B,WAAWE,IAAhB,oDAAiEkB,S,wJChBhF,IAAKC,EAAL,6EAAKA,GACD,wBACA,wBACA,gDACA,kBAJJ,CAAKA,MAAgB,KAOd,IAAMC,EAA4C,CACrDC,UAAWF,EAAiBE,UAC5BC,UAAWH,EAAiBG,UAC5BC,sBAAuB,0BACvBC,OAAQL,EAAiBK,QAGvB,SAAUC,EAAmBC,GAC/B,MAA6B,4BAAtBA,EACDP,EAAiBO,GACjBP,EAAiBI,wB,yWCRNI,E,WAQjB,WACIC,EACAC,I,4FAAoB,SAEpB5D,KAAK6D,eAAiBF,EACtB3D,KAAK8D,cAAe,EACpB9D,KAAK+D,iBAAkB,EACvB/D,KAAKgE,uBAAyB,GAC9BhE,KAAKiE,YAAcL,EACnB5D,KAAKkE,uBAAyBlE,KAAK6D,e,mEA8CnC7D,KAAK8D,aAAe9D,KAAK6D,eAAeM,OAAM,SAAA9D,GAAC,OAAIA,EAAE+D,cACrDpE,KAAKgE,uBAAyBhE,KAAK6D,eAC9B/C,QAAO,SAACuD,GAAD,OAAgCA,EAAID,YAAcC,EAAIC,YAClEtE,KAAK+D,gBAAkB/D,KAAKgE,uBAAuB9C,QAC/ClB,KAAKgE,uBAAuBG,OAAM,SAAA9D,GAAC,OAAIA,EAAEiE,c,0CAG7BC,GAAkB,WAClC,GAAKA,GAAoC,IAAtBA,EAAWrD,QAA4C,IAA5BlB,KAAKiE,YAAY/C,OAA/D,CAKA,IAAMsD,EAAgBxE,KAAK6D,eAAe/C,QAAO,SAACT,GAC9C,OAAOJ,OAAOwE,KAAKpE,GAAGqE,QAAO,SAACC,EAAKC,GAC/B,GAAI,EAAKX,YAAYY,SAASD,GAC1B,OAAOD,GAAOtE,EAAEuE,GAAME,cAAcD,SAASN,EAAWO,qBAKpE9E,KAAKkE,uBAAyBM,OAZ1BxE,KAAKkE,uBAAyBlE,KAAK6D,iB,kCAlDvC,OAAO7D,KAAK8D,c,aAGOiB,GACnB/E,KAAK8D,aAAeiB,EAChB/E,KAAK8D,cACL9D,KAAK6D,eAAezC,SAAQ,SAACiD,GAAD,OAAgCA,EAAID,YAAa,KAC7EpE,KAAKgE,uBAAyBhE,KAAK6D,iBAGnC7D,KAAK6D,eAAezC,SAAQ,SAACiD,GAAD,OAAgCA,EAAID,YAAa,KAC7EpE,KAAKgE,uBAAyB,IAGlChE,KAAK+D,gBAAkB/D,KAAKgE,uBAAuB9C,QAC/ClB,KAAKgE,uBAAuBG,OAAM,SAAA9D,GAAC,OAAIA,EAAEiE,c,qCAK7C,OAAOtE,KAAK+D,kB,4CAIZ,OAAO/D,KAAKkE,yB,oCAIZ,OAAOlE,KAAK6D,gB,aAGSmB,GACrBhF,KAAK6D,eAAiBmB,EACtBhF,KAAKkE,uBAAyBlE,KAAK6D,iB,4CAInC,OAAO7D,KAAKgE,4B,gCAtChB,aADC,YAAa,gB,yGAGb,MAkBD,aADC,YAAa,mB,oGAGb,O,ygBChDgBiB,EADpBtD,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,6FAGJqD,EAAMC,EAAOC,G,oGAI3B,IAHIC,EAAW,GACXC,EAAW,IAAIC,S,4BAEnB,EAAiBJ,EAAjB,+CAASK,EAAe,QACpBF,EAASG,OAAO,QAASD,GACzBH,EAAS5D,KAAT,UAAiByD,EAAjB,YAAyBM,EAAKlF,O,wPAG5BN,KACD6B,WACA6D,cAAcR,GACdS,QACAC,YAAYN,GACZO,qBAAqBT,GACrBU,O,iCAEET,G,woBCdf,IAAqBU,EAArB,WACI,WAAoBlE,EAAgCmE,I,4FAAc,SAA9C,KAAAnE,aAAgC,KAAAmE,SAChDhG,KAAK6B,WAAaA,EAClB7B,KAAKgG,OAASA,E,UAHtB,O,EAAA,G,EAAA,mCAMgBC,GACR,IAAM/D,EAAQ,YAAiB+D,GAAgB,GAE/C,OAAOjG,KAAK6B,WAAWE,IAAhB,oCAC0BG,EAAQ,IAAH,OAAOA,GAAU,OAV/D,iCAcegE,EAAkBlE,GACzB,OAAOhC,KAAK6B,WAAWE,IAAhB,iBACOmE,EADP,uCAC8ClE,MAhB7D,uCAqBQ,OAAOhC,KAAK6B,WAAWE,IAAI,iDArBnC,yCA2BQmE,EACAC,EACAC,GAEA,IAAMC,EAAc,YAAiB,CAAEC,aAAcH,IAAiB,GAEtE,OAAOnG,KAAK6B,WAAWE,IAAhB,iBACOmE,EADP,uCAC8CE,EAD9C,mBAECC,EAAYnF,OAAS,IAAMmF,EAAc,OAnCzD,yCAwCuBpE,GACf,OAAOjC,KAAK6B,WAAWU,KAAK,yCAA0C,CAAEN,UAzChF,oCA4CkBiE,EAAkBK,GAC5B,OAAOvG,KAAK6B,WAAWU,KAAhB,iBACO2D,EADP,+BAEHK,KA/CZ,oCAmDkBL,EAAkBK,GAC5B,OAAOvG,KAAK6B,WAAWS,IAAhB,iBACO4D,EADP,uCAC8CK,EAAQvE,IACzDuE,KAtDZ,qCA0DmBL,EAAkBM,GAC7B,OAAOxG,KAAK6B,WAAWU,KAAhB,iBAA+B2D,EAA/B,uCAA8E,CACjFM,aA5DZ,8CAgE4BN,EAAkBlE,GACtC,OAAOhC,KAAK6B,WAAWE,IAAhB,iBACOmE,EADP,uCAC8ClE,EAD9C,yB,2BAjEf,KAAqB+D,EAAc,aADlC,I,iCAEmC,IAAkC,mBAAxB,OAAwB,IAAN,UAAM,YADjDA,GAAA,O,ywBCIrB,IAAqBU,EAArB,WAqBI,WACYC,I,4FAA0B,SAA1B,KAAAA,eAER1G,KAAK2G,YAAc,GACnB3G,KAAK4G,YAAc,GACnB5G,KAAK6G,cAAgB,GACrB7G,KAAK8G,aAAe,GACpB9G,KAAK+G,YAAc,GACnB/G,KAAKgH,YAAc,GAEnBhH,KAAKiH,qBAAuB,GAE5BjH,KAAKkH,Q,UAjCb,O,EAAA,G,EAAA,+BAqCQlH,KAAKM,KAAO,GACZN,KAAKmH,YAAc,GAEnBnH,KAAKoH,cAAgB,GACrBpH,KAAKqH,cAAgB,GACrBrH,KAAKsH,qBAAuB,GAC5BtH,KAAKuH,qBAAuB,GAC5BvH,KAAKwH,cAAgB,GACrBxH,KAAKyH,cAAgB,GACrBzH,KAAK0H,mBAAqB,GAE1B1H,KAAK2H,YAAc,IAhD3B,yCAmDuBC,GAAuD,I,EAAA,OAAtCC,EAAsC,uDAAF,GACpE7H,KAAK2G,YAAcmB,MAAMC,KAAK,IAAIC,KAAwC,QAApC,EAACJ,aAAM,EAANA,EAAQ9G,QAAO,SAAAC,GAAC,OAAe,OAAXA,EAAEkH,eAAa,QAAK,IAC1E9H,KAAI,SAAAY,GAAC,OAAIA,EAAEkH,SAAOC,UAClB/H,KAAI,SAAAgI,GAAC,MAAK,CAAEC,MAAOD,EAAG5H,MAAO4H,MAClCnI,KAAK4G,YAAckB,MAAMC,KAAK,IAAIC,KAAKJ,UAAU,IAAIzH,KAAI,SAAAY,GAAC,OAAIA,EAAEsH,SAAOH,UAAU/H,KAAI,SAAAgI,GAAC,MAAK,CAAEC,MAAOD,EAAEG,WAAY/H,MAAO4H,MACzHnI,KAAK6G,cAAgB,CAAC,CAAEuB,MAAO,MAAO7H,OAAO,GAAQ,CAAE6H,MAAO,KAAM7H,OAAO,IAC3EP,KAAK8G,aAAe,CAAC,CAAEsB,MAAO,MAAO7H,OAAO,GAAQ,CAAE6H,MAAO,KAAM7H,OAAO,IAC1EP,KAAK+G,YAAce,MAAMC,KAAK,IAAIC,KAAKJ,UAAU,IAAI9G,QAAO,SAAAC,GAAC,QAAMA,EAAEwH,QAAMpI,KAAI,SAAAY,GAAC,OAAIA,EAAEwH,SAAOL,UAAU/H,KAAI,SAAAgI,GAAC,MAAK,CAAEC,MAAOD,EAAG5H,MAAO4H,MACpInI,KAAKgH,YAAcc,MAAMC,KAAK,IAAIC,KAAKJ,UAAU,IAAIzH,KAAI,SAAAY,GAAC,OAAIA,EAAEyH,SAAON,UAAU/H,KAAI,SAAAgI,GAAC,MAAK,CAAEC,MAAO,EAAK1B,aAAa+B,eAAeN,GAAI5H,MAAO4H,MAGhJ,IAAIO,EAA0B,IAAIC,IAClCd,EAAgBzG,SAAQ,SAAAhB,GACpB,GAAIsI,EAAwBE,IAAIxI,EAAEE,MAAO,CACrC,IAAIuI,EAAQH,EAAwB3G,IAAI3B,EAAEE,MACrCuI,EAAMC,MAAK,SAAAC,GAAC,OAAIA,IAAM3I,EAAEG,UACzBsI,EAAMpH,KAAKrB,EAAEG,YAEjBmI,EAAwBM,IAAI5I,EAAEE,KAAM,CAACF,EAAEG,WAI/C,IAAI0I,EAAsBpB,EAAgBnD,QAAO,SAACwE,EAAYC,GAI1D,OAHKD,EAAWJ,MAAK,SAAA1I,GAAC,OAAIA,EAAEE,KAAKwE,gBAAkBqE,EAAU7I,KAAKwE,kBAC9DoE,EAAWzH,KAAK,CAAEnB,KAAM6I,EAAU7I,KAAMC,MAAO4I,EAAU7I,OAEtD4I,IACR,IAGHlJ,KAAKiH,qBAAuBgC,EAAoB9I,KAAI,SAAAC,GAAC,MAAK,CAAEgI,MAAOhI,EAAEE,KAAMC,MAAOH,EAAEG,UACpFP,KAAKiH,qBAAqB7F,SAAQ,SAAAgI,G,MAC1BC,EAAyE,QAAtD,EAAAX,EAAwB3G,IAAIqH,EAAoB7I,cAAM,QAAI,GAE5D6I,EACNE,aAAeD,EAAgBlJ,KAAI,SAAAgI,GAAC,MAAK,CAAEC,MAAOD,EAAG5H,MAAO4H,WAtFvF,mCA2FiBP,EAAiB2B,GAAgC,I,4BAAA,OAC1D,OAAK3B,GAIL5H,KAAK2H,cACU,QAAV,EAAC3H,KAAKM,YAAI,QAAI,IAAIY,OAAS,EAAI,EAAI,KAClB,QAAjB,EAAClB,KAAKmH,mBAAW,QAAI,IAAIjG,OAAS,EAAI,EAAI,KACf,QAA3B,EAAmB,QAAnB,EAAClB,KAAKoH,qBAAa,eAAElG,cAAM,QAAI,GAAK,EAAK,EAAI,KAClB,QAA3B,EAAmB,QAAnB,EAAClB,KAAKqH,qBAAa,eAAEnG,cAAM,QAAI,GAAK,EAAK,EAAI,KACX,QAAlC,EAA0B,QAA1B,EAAClB,KAAKsH,4BAAoB,eAAEpG,cAAM,QAAI,GAAK,EAAI,EAAI,KACjB,QAAlC,EAA0B,QAA1B,EAAClB,KAAKuH,4BAAoB,eAAErG,cAAM,QAAI,GAAK,EAAI,EAAI,KACxB,QAA3B,EAAmB,QAAnB,EAAClB,KAAKwH,qBAAa,eAAEtG,cAAM,QAAI,GAAK,EAAK,EAAI,KAClB,QAA3B,EAAmB,QAAnB,EAAClB,KAAKyH,qBAAa,eAAEvG,cAAM,QAAI,GAAK,EAAK,EAAI,IAC7CqI,EAA0B,EAAI,GAE5B3B,EAAO9G,QAAO,SAAAC,G,kCACjB,OAAmE,IAAnEA,EAAET,KAAKwE,cAActD,SAAkB,QAAV,EAAC,EAAKlB,YAAI,QAAI,IAAIwE,iBAC0C,KAA3E,QAAd,EAAC/D,EAAEoG,mBAAW,QAAI,IAAIrC,cAActD,SAAyB,QAAjB,EAAC,EAAK2F,mBAAW,QAAI,IAAIrC,iBAC9B,KAAX,QAA3B,EAAmB,QAAnB,EAAC,EAAKsC,qBAAa,eAAElG,cAAM,QAAI,IAAY,EAAKkG,cAAc0B,MAAK,SAAAX,GAAI,MAAC,OAAAA,EAAErD,iBAAyB,QAAP,EAAC/D,EAAEkH,YAAI,QAAI,IAAInD,oBACrE,KAAX,QAA3B,EAAmB,QAAnB,EAAC,EAAKuC,qBAAa,eAAEnG,cAAM,QAAI,IAAY,EAAKmG,cAAcyB,MAAK,SAAAX,GAAC,OAAIA,IAAMpH,EAAEsH,WACnC,KAAX,QAAlC,EAA0B,QAA1B,EAAC,EAAKf,4BAAoB,eAAEpG,cAAM,QAAI,IAAY,EAAKoG,qBAAqBwB,MAAK,SAAAX,GAAC,OAAIA,IAAMpH,EAAEyI,aACjD,KAAX,QAAlC,EAA0B,QAA1B,EAAC,EAAKjC,4BAAoB,eAAErG,cAAM,QAAI,IAAY,EAAKqG,qBAAqBuB,MAAK,SAAAX,GAAC,OAAIA,IAAMpH,EAAE0I,iCACxD,KAAX,QAA3B,EAAmB,QAAnB,EAAC,EAAKjC,qBAAa,eAAEtG,cAAM,QAAI,IAAY,EAAKsG,cAAcsB,MAAK,SAAAX,GAAI,MAAC,OAAAA,EAAErD,iBAAyB,QAAP,EAAC/D,EAAEwH,YAAI,QAAI,IAAIzD,oBACrE,KAAX,QAA3B,EAAmB,QAAnB,EAAC,EAAK2C,qBAAa,eAAEvG,cAAM,QAAI,IAAY,EAAKuG,cAAcqB,MAAK,SAAAX,GAAC,OAAIA,IAAMpH,EAAEyH,aAtB1E,KA7FnB,uDAuHqCkB,GAC7B,IAAIC,EAAqB3J,KAAKiH,qBAAqBnG,QAAO,SAAA8I,GAAC,OAAIA,EAAErJ,QAAUmJ,KAC3E,OAAIC,EAAmBzI,OAAS,EACZyI,EAAmB,GAClBL,aAGd,KA9Hf,yEAkIQ,IAAI5B,EAAqB1H,KAAK0H,mBAAmB5G,QAAO,SAAA+I,GAAoB,MAAC,OAAsB,QAAtB,EAAAA,EAAkBvJ,YAAI,eAAEY,QAAS,KAC9GwG,EAAqBA,EAAmB5G,QAAO,SAAA+I,GAAoB,MAAC,OAAgC,QAAhC,EAAAA,EAAkBC,sBAAc,eAAE5I,QAAS,KAE/G,IAAI2G,EAAkB,GAOtB,OANAH,EAAmBtG,SAAQ,SAAAyI,GACvBA,EAAkBC,eAAe1I,SAAQ,SAAA2I,GACrClC,EAAgBpG,KAAK,CAACnB,KAAMuJ,EAAkBvJ,KAAMC,MAAOwJ,UAI5DlC,IA5If,gDAiJQ,IAAImC,EAAsBhK,KAAK0H,mBAAmBvH,KAAI,SAAAC,GAAC,OAAIA,EAAEE,QACzD2G,EAAuBjH,KAAKiH,qBAChCA,EAAqB7F,SAAQ,SAAAwI,GACzBA,EAAEK,SAAWD,EAAoBnF,SAAW+E,EAAErJ,UAIlD,IAAI2J,EAAiB,CACjBlI,GAAI,OAAKmI,SACTC,YAAanD,EACbqC,aAAc,KACdQ,eAAgB,MAGpB9J,KAAK0H,mBAAmBjG,KAAKyI,KA/JrC,+CAkK6Bf,EAA2BO,GAChDP,EAAU7I,KAAOoJ,EAGS1J,KAAK0H,mBAAmBvH,KAAI,SAAAC,GAAC,OAAIA,EAAEE,QACzCmB,KAAKiI,GAEzB,IAAIW,EAAuBlB,EAC3BkB,EAAqBP,eAAiB,KACtCO,EAAqBf,aAAetJ,KAAKsK,iCAAiCD,EAAqB/J,MAGhEN,KAAK0H,mBAAkE5G,QAAO,SAAAV,GAAC,OAAIA,EAAE4B,KAAOqI,EAAqBrI,MACxHZ,SAAQ,SAAAyI,GAC5B,IAEIU,EAF4BV,EAAkBO,YAEXI,MAAK,SAAAZ,GAAC,OAAKA,EAAErJ,QAAqBmJ,KACrEa,IACAA,EAAON,UAAW,QApLlC,uDAwLqCQ,GAC7B,IAGIf,EAHuB1J,KAAK0H,mBAAmB+C,GAGVnK,KAEXN,KAAK0H,mBACXtG,SAAQ,SAAAyI,GAC5B,IACIU,EADuBV,EAAkBO,YACXI,MAAK,SAAAZ,GAAC,OAAKA,EAAErJ,QAAqBmJ,KAChEa,IACAA,EAAON,UAAW,MAG1BjK,KAAK0H,mBAAmBgD,OAAOD,EAAO,Q,2BAtM9C,KAAqBhE,EAAmB,aAFvC,cACA,I,iCAuB6B,OAtBTA,GAAA,O,4QChBAkE,E,WAOjB,WAAYrK,I,4FAAY,SACpBN,KAAKM,KAAOA,E,2DAQZ,MAAO,CACH,CAAE8H,MAAO,OAAQ7H,MAAOoK,EAAYC,KAAKtK,MACzC,CAAE8H,MAAO,YAAa7H,MAAOoK,EAAYE,UAAUvK,W,oCANvD,OAAON,KAAKM,U,gCAXT,EAAAwK,QAAU,IAAIH,EAAY,WAC1B,EAAAC,KAAO,IAAID,EAAY,QACvB,EAAAE,UAAY,IAAIF,EAAY,c,sVCMvC,IAAqBI,EAArB,WACI,WAAoBlJ,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAK6B,WAAaA,E,UAF1B,O,EAAA,G,EAAA,gCAKagB,GACL,IAAImI,EAAkB,CAClBnI,MAAOA,GAGPX,EAAQ,YAAiB8I,GAAiB,GAE9C,OAAOhL,KAAK6B,WAAWE,IAAhB,gCAA6CG,EAAQ,IAAH,OAAOA,GAAU,OAZlF,2CAeyBe,GACjB,OAAOjD,KAAK6B,WAAWE,IAAhB,8CACoCkB,MAjBnD,sCAqBoBgI,EAASC,GACrB,OAAOlL,KAAK6B,WAAWE,IAAhB,yCAAsDkJ,EAAtD,iBAAsEC,MAtBrF,qCA0BQ,IAAIC,EAAY,CACZ,CAAEnJ,GAAI,IAASoJ,cAAeC,MAAO,iBACrC,CAAErJ,GAAI,IAASsJ,UAAWD,MAAO,aACjC,CAAErJ,GAAI,IAASuJ,oBAAqBF,MAAO,uBAC3C,CAAErJ,GAAI,IAASwJ,MAAOH,MAAO,UAEjC,OAAOI,EAAQC,QAAQP,KAhC/B,8BAmCYnJ,GACJ,OAAOhC,KAAK6B,WAAWE,IAAhB,iCAA8CC,MApC7D,kCAuCgBC,GACR,IAAIC,EAAQD,EAAI9B,KAAI,SAAC6B,GAAD,mBAAcA,MAAMG,KAAK,KAC7C,OAAOnC,KAAK6B,WAAWO,OAAhB,iCAAiDF,MAzChE,+BA4CayJ,GACL,OAAKA,EAAK3J,GAEHhC,KAAK6B,WAAWS,IAAhB,iCAA8CqJ,EAAK3J,IAAM2J,GAF3C3L,KAAK6B,WAAWU,KAAK,yBAA0BoJ,KA7C5E,2CAkDyB3J,GACjB,OAAOhC,KAAK6B,WAAWE,IAAhB,iCAA8CC,EAA9C,sBAnDf,qCAsDmB4J,GACX,IAAIZ,EAAkB,CAClBY,OAAQA,GAGR1J,EAAQ,YAAiB8I,GAAiB,GAE9C,OAAOhL,KAAK6B,WAAWE,IAAhB,iDACuCG,EAAQ,IAAH,OAAOA,GAAU,OA9D5E,sCAmEQF,EACA6J,EACAC,GAEA,IAAMtL,EAAS,CACXqL,0BACAC,yBAEE5J,EAAQ,YAAiB1B,GAE/B,OAAOR,KAAK6B,WAAWE,IAAhB,iCACuBC,EADvB,qBACsCE,MA9ErD,+CAkFQF,EACA+J,EACAF,EACAC,GAEA,IAAME,EAAc,CAChBD,eACAF,0BACAC,wBACAG,OAAQ,OAEN5F,EAAc,YAAiB2F,GAAa,GAElD,2CAAqChK,EAArC,0BAAyDqE,Q,2BA/FjE,KAAqB0E,EAAW,aAD/B,I,iCAEmC,OADfA,GAAA,Q,0DCTrB,IAAYmB,EAAZ,2CAAYA,GACR,sBACA,sBAFJ,CAAYA,MAAmB,M,oCCA/B,4IAAMC,EACI,OADJA,EAEU,MAFVA,EAGU,MAHVA,EAIe,KAJfA,EAKS,aALTA,EAMoB,yBANpBA,EAOY,iBAPZA,EAQQ,YARRA,EASc,kBATdA,EAUc,mBAVdA,EAWQ,WAGRC,EAA0B,CAC5B,CAAEhE,MAAO+D,EAA6B5L,MAAO4L,GAC7C,CAAE/D,MAAO+D,EAAmC5L,MAAO4L,GACnD,CAAE/D,MAAO+D,EAAmC5L,MAAO4L,GACnD,CACI/D,MAAO+D,EACP5L,MAAO4L,IAITE,EAA2B,CAC7B,CAAEjE,MAAO+D,EAAkC5L,MAAO4L,GAClD,CACI/D,MAAO+D,EACP5L,MAAO4L,GAEX,CAAE/D,MAAO+D,EAAqC5L,MAAO4L,GACrD,CAAE/D,MAAO+D,EAAiC5L,MAAO4L,GACjD,CAAE/D,MAAO+D,EAAuC5L,MAAO4L,GACvD,CAAE/D,MAAO+D,EAAuC5L,MAAO4L,GACvD,CAAE/D,MAAO+D,EAAiC5L,MAAO4L,IAG/CG,EAA4B,CAC9BH,EACAA,EACAA,EACAA,GAGEI,EAA6B,CAC/BJ,EACAA,EACAA,EACAA,EACAA,EACAA,EACAA,I,qSC/CiBK,EADpB7K,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,iEAGJ4K,EAASC,GACvB,IAAIC,EAAK,GAMT,OALKF,IACDE,EAAK,WAAH,OAAcC,mBAAmB,IAAIC,KAAKJ,GAASK,iBACpDJ,IACDC,EAAK,GAAH,OAAMA,GAAN,OAAcA,EAAK,IAAM,GAAzB,mBAAuCC,mBAAmB,IAAIC,KAAKH,GAASI,iBAE3E9M,KAAK6B,WAAWE,IAAhB,qBAAqC4K,EAAK,IAAM,IAAhD,OAAsDA,M,0CAG7CI,GAChB,OAAO/M,KAAK6B,WAAWE,IAAhB,oCAAiDgL,S,oSCfhE,IAAqBC,EAArB,WAGI,WAAoBnL,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAKiN,UAAY,2C,UAJzB,O,EAAA,G,EAAA,qDAQQ,OAAOjN,KAAK6B,WAAWE,IAAI/B,KAAKiN,aARxC,qDAWmCC,GAC3B,OAAOlN,KAAK6B,WAAWS,IAAItC,KAAKiN,UAAWC,Q,2BAZnD,KAAqBF,EAA2B,aAD/C,I,iCAImC,OAHfA,GAAA,O,gjCCArB,IAAaG,EAAb,WACI,WACYC,EACAC,I,4FAAc,SADd,KAAAD,kBACA,KAAAC,S,YAHhB,S,EAAA,G,EAAA,6B,EAAA,oCAQwBC,EAAcC,GARtC,qHASaD,EAAMpM,OATnB,qDAaYoM,EAAMxE,MAAK,SAAC0E,GAAD,MAAoB,cAAbA,EAAEC,UAbhC,gCAckBzN,KAAKoN,gBAAgBM,UACvB,+BACA,qLAhBhB,4CAqBYJ,EAAMxE,MAAK,SAAC0E,GAAD,OAAOA,EAAEG,YArBhC,iCAsBkB3N,KAAKoN,gBAAgBM,UACvB,iCACA,6JAxBhB,+CA6BcE,EA7Bd,EA6BoC,IAAI5F,IAAIsF,EAAMnN,KAAI,SAACqN,GAAD,OAAOA,EAAEvK,qBACnC/B,OAAS,GA9BrC,kCA+BkBlB,KAAKoN,gBAAgBM,UACvB,oCACA,mIAjChB,0CAsCcG,EAAkB,IAAI7F,IAtCpC,+BAuC2BsF,EAvC3B,mEAwCY,IADOQ,EAvCnB,qCAwCY,GAAyC,QAApB,EAAIA,EAAKC,mBAAW,QAAI,IAA7C,+CAAWC,EAAsC,QAC7CH,EAAgBI,IAAID,EAAWE,gBAzC/C,sfA4CYL,EAAgBM,KAAO,GA5CnC,kCA6CkBnO,KAAKoN,gBAAgBM,UACvB,uCACA,0GA/ChB,0CAoDQ1N,KAAKqN,OAAOe,gBAAgB,kCAAmC,CAC3DpM,GAAI,SACJqM,QAASf,EAAMnN,KAAI,SAACqN,GAAD,OAAOA,EAAExL,MAC5BiB,eAAgB2K,EAAgB,GAChCL,iBAxDZ,wG,wKAAA,mD,2BAAA,KAAaJ,EAA4B,aADxC,I,iCAG+C,mB,OAAA,IAAf,UAAe,SACxB,OAHXA,K,0NCFPmB,EAA2B,SAC7BN,EACAO,EACAC,GAEA,OAAOD,GAAuBC,EAAvB,UACER,EAAWS,SADb,cAC2BT,EAAW1N,KADtC,cACgD0N,EAAWU,YAD3D,UAEEV,EAAWS,SAFb,cAE2BT,EAAW1N,OAG3CqO,EAAqC,SACvCX,EACAO,EACAC,GAEA,OAAOD,GAAuBC,EAAvB,UACER,EAAWS,SADb,cAC2BT,EAAWY,eADtC,cAC0DZ,EAAWU,YADrE,UAEEV,EAAWS,SAFb,cAE2BT,EAAWY,iBAK3CC,EAA0C,SAC5CC,EACAP,EACAC,GAEA,OAAOD,GAAuBC,EAAvB,UACEM,EAAqBL,SADvB,cACqCK,EAAqBxO,KAD1D,cACoEwO,EAAqBJ,YADzF,UAEEI,EAAqBL,SAFvB,cAEqCK,EAAqBxO,OAG/DyO,EAA2B,SAC7BR,EACAC,GAEA,SAAOD,IAAuBC,K,20BC9BlC,IACMQ,E,YACF,oB,4FAAA,+BAFa,yE,kPACmB,KA6B9BC,EAA+B,CACjCC,WAxBsC,CACtC,CAAEC,WAAY,YAAaC,MAAO,YAClC,CAAED,WAAY,cAAeC,MAAO,yBACpC,CACID,WAAY,YACZC,MAAO,iBACPC,MAAO,IACPC,eAAgB,KAEpB,CAAEH,WAAY,OAAQC,MAAO,QAC7B,CACID,WAAY,QACZC,MAAO,YACPG,aAAcP,GAElB,CACIG,WAAY,SACZC,MAAO,WACPE,eAAgB,KAEpB,CAAEH,WAAY,OAAQC,MAAO,SAK7BI,cAAe,CACXC,WAAY,IAAeC,2BAE/BC,qBAAqB,GAGnBC,EAAgD,IAAsBzF,OAAO8E,GAC9EY,cACAC,iBACAC,gBAAgB,iCAChBC,S,oCC7CL,kCAAO,IAAMC,EAAiD,iBAAkD,CAC5GjO,GAAI,EACJiB,eAAgB,EAChBiN,aAAc,M,wRCLGC,E,WASjB,WACInO,EACAoO,EACA9L,EACA+L,GACA,G,4FAD6B,SACY,IAAtCD,EAA2BlP,OAC1B,MAAM,IAAIC,MAAM,qGAEpB,GAA4B,IAAzBkP,EAAcnP,OACb,MAAM,IAAIC,MAAM,wFAEpBnB,KAAKsQ,IAAMtO,EACXhC,KAAKuQ,4BAA8BH,EACnCpQ,KAAKwQ,UAAYlM,EACjBtE,KAAKyQ,eAAiBJ,E,kDAItB,OAAOrQ,KAAKsQ,M,kCAGM,WAKlB,OAFAtQ,KAAK0Q,aAFQ,SAACC,GAAD,IAAMC,EAAN,uDAAU,KAAV,OACTD,EAAIjM,QAAO,SAACC,EAAKkM,EAAMxQ,GAAZ,gBAAqBsE,GAArB,OAA2BtE,EAAIuQ,EAAK,IAApC,OAAyC,EAAKH,eAAejG,MAAK,SAAAZ,GAAC,OAAIA,EAAE5H,KAAO6O,EAAK5N,kBAAgB3C,KAArG,aAA8GuQ,EAAKX,aAAnH,OAAoI,IAC/H/N,CAAKnC,KAAKuQ,6BAEvBvQ,KAAK0Q,e,+BAIZ,OAAO1Q,KAAKwQ,W,aAGIlM,GAChBtE,KAAKwQ,UAAYlM,O,kvDCxClB,IAAMwM,EAAb,YAKI,aAAiD,MAArCC,EAAqC,uDAAF,GAAE,kBAC7C,2BACKC,wBAA0BD,EAC/B,EAAKnD,gBAAL,EAA2BmD,GAHkB,E,UALrD,O,kOAAA,M,EAAA,G,EAAA,+BAYQ/Q,KAAK4N,gBAAL,EAA2B5N,KAAKgR,2BAZxC,uCAoBQ,MAAO,CACHpD,gBAAiB5N,KAAK4N,mBArBlC,0CA0BQ5N,KAAK4N,gBAAkB,KA1B/B,sCA6BoBpN,G,MACZR,KAAKiR,oBAEL,0DAA6B,CACzBrD,gBAAuC,QAAxB,EAAEpN,EAAOoN,uBAAe,eAAEzN,IAAI+Q,SAC9ClR,QAlCX,4B,MAgBQ,OAAQkR,UAA6B,QAArB,EAAClR,KAAK4N,uBAAe,eAAE1M,c,2BAhB/C,G,UAA+C,I,oCCPhC,KACX,CAAEkH,MAAO,gBAAiB7H,MAAO,gBACjC,CAAE6H,MAAO,iBAAkB7H,MAAO,iBAClC,CAAE6H,MAAO,oBAAqB7H,MAAO,oBACrC,CAAE6H,MAAO,kBAAmB7H,MAAO,oB,+kECsDhC,IAAM4Q,EAAb,YAoBI,0B,4FAAA,UACI,2BAEKC,sBAAwB,IAAI,IACjC,EAAKC,oBAAsB,IAAI,IAC/B,EAAKC,yBAA2B,IAAI,IACpC,EAAKC,uBAAyB,IAAI,IAClC,EAAKC,wBAA0B,IAAI,IACnC,EAAKC,4BAA8B,IAAI,IACvC,EAAKC,6BAA+B,IAAI,IAExC,EAAKC,kBAAmB,EACxB,EAAKC,YAAc,GACnB,EAAKC,UAAY,KACjB,EAAKC,WAAa,GAClB,EAAKC,WAAa,GAClB,EAAKC,WAAa,GAClB,EAAKC,WAAa,GAClB,EAAKC,cAAgB,GACrB,EAAK/L,cAAgB,GAnBzB,E,UApBJ,O,kOAAA,M,EAAA,G,EAAA,+BAoEQnG,KAAKoR,sBAAsBlK,QAC3BlH,KAAKqR,oBAAoBnK,QACzBlH,KAAKsR,yBAAyBpK,QAC9BlH,KAAKuR,uBAAuBrK,QAC5BlH,KAAKwR,wBAAwBtK,QAC7BlH,KAAKyR,4BAA4BvK,QACjClH,KAAK0R,6BAA6BxK,QAElClH,KAAK2R,kBAAmB,EACxB3R,KAAK4R,YAAc,GACnB5R,KAAK8R,WAAa,GAClB9R,KAAK+R,WAAa,GAClB/R,KAAKgS,WAAa,GAClBhS,KAAKiS,WAAa,GAClBjS,KAAKkS,cAAgB,GACrBlS,KAAKmG,cAAgB,KAnF7B,uCAuFQ,YACOnG,KAAKoR,sBAAsBe,iBADlC,GAEOnS,KAAKqR,oBAAoBc,iBAFhC,GAGOnS,KAAKsR,yBAAyBa,iBAHrC,GAIOnS,KAAKuR,uBAAuBY,iBAJnC,GAKOnS,KAAKwR,wBAAwBW,iBALpC,GAMOnS,KAAKyR,4BAA4BU,iBANxC,GAOOnS,KAAK0R,6BAA6BS,iBAPzC,CAQIhM,cAAenG,KAAKmG,cACpB0L,UAAW7R,KAAK6R,UAChBE,WAAY/R,KAAK+R,WACjBE,WAAYjS,KAAKiS,WACjBD,WAAYhS,KAAKgS,WACjBF,WAAY9R,KAAK8R,WACjBI,cAAelS,KAAKkS,cACpBN,YAAa5R,KAAK4R,YAClBD,iBAAkB3R,KAAK2R,qBAvGnC,sCA2GoBnR,GACZ,IAAM4R,EAAiC,CACnCC,kBAAmB7R,EAAO6R,kBAC1BC,gBAAiB9R,EAAO8R,gBACxBC,gBAAiB/R,EAAO+R,gBACxBC,cAAehS,EAAOgS,cACtBC,iBAAkBjS,EAAOiS,kBAEvBC,EAA6B,CAC/B7P,MAAOrC,EAAOqC,MACd8P,OAAQnS,EAAOmS,OACf/G,OAAQpL,EAAOoL,OACfgH,QAASpS,EAAOoS,SAEdC,EAAuC,CAAEC,aAActS,EAAOsS,cAC9DC,EAAmC,CAAEC,WAAYxS,EAAOwS,YACxDC,EAAqC,CAAEC,YAAa1S,EAAO0S,aAC3DC,EAA2C,CAC7CC,gBAAiB5S,EAAO4S,iBAEtBC,EAA+C,CACjDC,kBAAmB9S,EAAO8S,mBArBG,OAiCxB9S,GATLmR,EAxB6B,EAwB7BA,iBACAC,EAzB6B,EAyB7BA,YACAC,EA1B6B,EA0B7BA,UACAC,EA3B6B,EA2B7BA,WACAC,EA5B6B,EA4B7BA,WACAC,EA7B6B,EA6B7BA,WACAC,EA9B6B,EA8B7BA,WACAC,EA/B6B,EA+B7BA,cACA/L,EAhC6B,EAgC7BA,cAGJnG,KAAKoR,sBAAsBmC,gBAAgBnB,GAC3CpS,KAAKqR,oBAAoBkC,gBAAgBb,GACzC1S,KAAKsR,yBAAyBiC,gBAAgBV,GAC9C7S,KAAKuR,uBAAuBgC,gBAAgBR,GAC5C/S,KAAKwR,wBAAwB+B,gBAAgBN,GAC7CjT,KAAKyR,4BAA4B8B,gBAAgBJ,GACjDnT,KAAK0R,6BAA6B6B,gBAAgBF,GAElD,0DACI,CACI1B,mBACAC,cACAC,YACAC,aACAC,aACAC,aACAC,aACAC,gBACA/L,cAAe2B,MAAM0L,QAAQrN,GAAiBA,EAAgB,CAACA,IAEnEnG,MAGJA,KAAKyT,eAAL,oCAAAzT,MAAA,KAAAA,KACIA,KAAK0T,MACL,oBACA1T,KAAKoR,sBAAsBuC,oBAxKvC,4BA2CQ,OACI,EACA3T,KAAKqR,oBAAoBqC,MACzB1T,KAAKsR,yBAAyBoC,MAC9B1T,KAAKuR,uBAAuBmC,MAC5B1T,KAAKwR,wBAAwBkC,MAC7B1T,KAAKyR,4BAA4BiC,MACjC1T,KAAK0R,6BAA6BgC,MAClCxC,UAAUlR,KAAKmG,gBAAiBnG,KAAKmG,cAAcjF,SACnDgQ,UAAUlR,KAAK6R,YAAa7R,KAAK6R,UAAU3Q,SAC3CgQ,UAAUlR,KAAK+R,aAAc/R,KAAK+R,WAAW7Q,SAC7CgQ,UAAUlR,KAAKiS,aAAcjS,KAAKiS,WAAW/Q,SAC7CgQ,UAAUlR,KAAK4R,cAAe5R,KAAK4R,YAAY1Q,SAC/CgQ,UAAUlR,KAAKgS,aAAchS,KAAKgS,WAAW9Q,SAC7CgQ,UAAUlR,KAAK8R,aAAc9R,KAAK8R,WAAW5Q,SAC7CgQ,UAAUlR,KAAKkS,gBAAmBlS,KAAKkS,cAAchR,SACrDgQ,SAASlR,KAAK2R,oBA3D1B,oCAgEQ,OAAO3R,KAAKyT,oB,2BAhEpB,GAA0C,M,0UC1DrBG,E,WAOjB,WAAYtT,I,4FAAY,SACpBN,KAAKM,KAAOA,E,sDAYDuT,GACX,OAAOA,EACF/S,QAAO,SAAAgT,GAAC,OAAIA,EAAExT,OAASsT,EAAkCG,KAAKzT,QAC9DH,KAAI,SAAA2T,GAAC,OAAIA,EAAExT,QAAM6B,KAAK,OACpByR,EAAkCG,KAAKzT,S,oCAZ9C,OAAON,KAAKM,O,yBAGbuT,GAEC,OADaA,UAAU,IAAIG,MAAM,KAAK7T,KAAI,SAAAgI,GAAC,OAAIA,EAAE8L,UACpCpP,SAAS7E,KAAKM,W,gCAhBxB,EAAAyT,KAAO,IAAIH,EAAkC,QAC7C,EAAAM,aAAe,IAAIN,EAAkC,gBACrD,EAAAO,YAAc,IAAIP,EAAkC,gB,+SCC1CQ,EADpBzS,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,kEAIlB,OAAO7B,KAAK6B,WAAWE,IAAI,yB,sCAGfC,GACZ,OAAOhC,KAAK6B,WAAWE,IAAhB,8BAA2CC,M,0CAGlCC,GAChB,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,8BAA8CF,M,uCAGxCmS,GACb,OAAKA,EAAarS,GAGXhC,KAAK6B,WAAWS,IAAhB,8BAA2C+R,EAAarS,IAAMqS,GAF1DrU,KAAK6B,WAAWU,KAAK,uBAAwB8R,Q,4+BChBzD,IAAMC,EAAb,YAMI,0B,4FAAA,UACI,2BACKhB,kBAAoB,GAF7B,E,UANJ,O,kOAAA,M,EAAA,G,EAAA,+BAgBQtT,KAAKsT,kBAAoB,KAhBjC,uCAoBQ,MAAO,CACHA,kBAAmBtT,KAAKsT,qBArBpC,sCAyBoB9S,GACZ,GAAKA,EAAL,CADyC,IAOrC+T,EAFIjB,EAAsB9S,EAAtB8S,kBAGJA,IACAiB,EAAuBzM,MAAM0L,QAAQF,GAC/BA,EACA,CAACA,IAGXtT,KAAKsT,kBAAoBiB,KAvCjC,4B,MAYQ,OAAOrD,UAA+B,QAAvB,EAAClR,KAAKsT,yBAAiB,eAAEpS,c,2BAZhD,G,UACY,I,6RCJZ,IAAqBsT,EAArB,WACI,WAAoB3S,I,4FAAsB,SAAtB,KAAAA,a,UADxB,O,EAAA,G,EAAA,sCAGmBG,EAAIiK,GACf,4CAAsCjK,EAAtC,2BAA2DiK,KAJnE,mDAQQ,OAAOjM,KAAK6B,WAAWE,IACnB,6BATZ,qCAamBC,GACX,OAAOhC,KAAK6B,WAAWE,IAAhB,kCAA+CC,MAd9D,gDAiB8ByS,GACtB,OAAOzU,KAAK6B,WAAWU,KACnB,uCACAkS,KApBZ,4CAwB0BzS,GAClB,OAAOhC,KAAK6B,WAAWE,IAAhB,kCAA+CC,EAA/C,eAzBf,yCA4BuBC,GACf,IAAIC,EAAQD,EAAI9B,KAAI,SAAC6B,GAAD,mBAAcA,MAAMG,KAAK,KAC7C,OAAOnC,KAAK6B,WAAWO,OAAhB,kCAAkDF,MA9BjE,sCAiCoBuS,GACZ,OAAKA,EAAYzS,GAMVhC,KAAK6B,WAAWS,IAAhB,kCACwBmS,EAAYzS,IACvCyS,GAPOzU,KAAK6B,WAAWU,KACnB,2BACAkS,Q,2BArChB,KAAqBD,EAAkB,aADtC,I,iCAEmC,OADfA,GAAA,O,0vBCDrB,SAASE,EAAmBC,GACxB,OAAQA,GACJ,KAAK,EACD,OAAOC,QAAQC,MAEnB,KAAK,EACD,OAAOD,QAAQE,KAEnB,KAAK,EACL,QACI,OAAOF,QAAQG,MAI3B,SAASC,EAAeH,GACpB,GAAIA,aAAiBI,IAAqB,OAAOJ,EAAMK,SAEvD,GAAIL,aAAiB1T,MAAO,OAAO0T,EAAMM,MAEzC,GAAIN,EAAMO,QAAS,OAAOP,EAAMO,QAEhC,GAAqB,iBAAVP,EAAoB,OAAOA,EAEtC,IAAIQ,EAAgBR,EAAMvM,WAC1B,GAAsB,oBAAlB+M,EAAqC,OAAOA,EAEhD,IACI,OAAOC,KAAKC,UAAUV,GACxB,MAAOW,GAEL,OADAZ,QAAQC,MAAM,4BAA6BW,GACpC,4BAIf,SAASC,EAAeC,GACpB,IACI,OAAOJ,KAAKC,UAAUG,GACxB,MAAOF,GAEL,OADAZ,QAAQC,MAAM,4BAA6BW,GACpC,4BAYf,IAAIG,EAAgD,cAA7BC,OAAOC,SAASC,SAKvC,SAASC,EAAalB,GAClB,IAAKA,EAAO,MAAO,GAEnB,GAAIA,aAAiBI,IAAqB,CACtC,IAAIe,EAjBZ,SAAkBC,GACd,IACI,OAAOX,KAAKY,MAAMD,GACpB,MAAOT,GACL,OAAO,MAaeW,CAAStB,EAAMK,UACjCkB,EAAaJ,GAAmBA,EAAgBI,WAAcvB,EAAMK,SAExE,MAAO,CACHkB,UAAWA,GAAaA,EAAU9N,WAClC+N,aAAcL,GAAmBA,EAAgBK,aACjDC,UAAWzB,EAAM0B,SAAW1B,EAAM0B,QAAQxU,IAAI,qBAC9CyU,WAAY3B,EAAM4B,eAAeC,OACjCC,WAAY9B,EAAM8B,WAClBC,IAAKhB,OAAOC,SAASgB,OAAShC,EAAM4B,eAAeK,QAAUjC,EAAM4B,eAAeG,KAI1F,MAAO,CACHR,UAAWpB,EAAeH,GAC1BwB,aAAcxB,EAAMwB,aACpBC,UAAWzB,EAAMkC,cACjBP,WAAY3B,EAAM2B,WAClBG,WAAY9B,EAAMmC,eAClBJ,IAAK/B,EAAM+B,K,IAMEK,EAFpBC,a,GACAvV,YAAOC,IAAYuV,I,cAEhB,WAAYtV,EAAYuV,I,4FAA4B,SAChDpX,KAAK6B,WAAaA,EAClB7B,KAAKoX,2BAA6BA,EAClCpX,KAAKM,KAAO,G,oDAGX8U,EAASM,GACV1V,KAAKqX,IAAI,CACL1C,SAAU,EACVS,UACAM,Y,2BAIHN,EAASP,EAAOa,GACjB1V,KAAKqX,IAAI,CACL1C,SAAU,EACVS,UACAP,QACAa,Y,4BAIFN,EAASP,EAAOa,GAClB1V,KAAKqX,IAAI,CACL1C,SAAU,EACVS,UACAP,QACAa,Y,4BAI6D,6DAAJ,GAAI,IAA/Df,gBAA+D,MAApD,EAAoD,MAAjDS,eAAiD,MAAvC,GAAuC,MAAnCP,aAAmC,MAA3B,KAA2B,MAArBa,aAAqB,MAAb,KAAa,EACjE,IACI,IAAI4B,EAAa,gBAAH,OAAmBtX,KAAKM,MAEtC,GAAIqV,EAAkB,CAClB,IAAI4B,EAAiB,GAAH,OAAMD,EAAN,aAAqBlC,GACnCoC,EAAoB,CAACD,EAAgB1C,EAAOa,GAAO5U,QACnD,SAAC+P,GAAD,OAAU,MAAOA,KAEjB4G,EAAkB/C,EAAmBC,GACzC8C,EAAe,WAAf,IAAmBD,IAGvB,IAAIvB,EAAO,CACPtB,WACArU,KAAMgX,EACNlC,UACAM,MAAOA,GAASD,EAAeC,IAG/BgC,EAAY3B,EAAalB,GACzB8C,EAAW1X,OAAOC,OAAO,GAAI+V,EAAMyB,GAEvC1X,KAAK6B,WAAWU,KAAK,cAAeoV,GAAUC,OAAM,SAACpC,GACjDZ,QAAQC,MAAM,qCAAsCW,MAGxDkC,EAAUJ,WAAatX,KAAKM,KAC5BN,KAAKoX,2BAA2BS,WAC5BlD,EACAE,EACAO,EACAsC,EACAzB,EAAKP,OAEX,MAAOF,GACLZ,QAAQC,MAAM,2BAA4BW,S,8PClJhDsC,EAAe,SAACtX,EAA2B4O,GAC7C,OAAQ5O,EAAOyV,MAAQzV,EAAOyV,KAAK7G,IAAW,uBA8B5C2I,EAAyB,SAACvX,EAAwB+H,GACpD,IAAImL,EAAQ,EASZ,OARAlT,EAAO0H,OAAO9G,SAAQ,SAAC+G,GACF,iBAANA,GAAkBA,IAAMI,EAC/BmL,IACoB,iBAANvL,IACduL,GAASvL,MAIVuL,GAILsE,EAAuB,SAACxX,EAA8B+H,GACxD,MAA4B,iBAAjB/H,EAAOD,MACPC,EAAOD,MAAM+H,WAGjB9H,EAAOD,QAAUgI,EAAO,IAAM,KAGnC0P,EAAoB,SAACzX,GACvB,GAAKA,EAAOD,MAIZ,OAAO,IAAOC,EAAOD,OAAO2X,QAAQjM,OAAO,SAWzCkM,EAAkD,CACpD,CACIhJ,WAAY,eACZC,MAAO,mBACPgJ,cAAe,YAEnB,CACIjJ,WAAY,aACZC,MAAO,oBACPgJ,cAAe,YAEnB,CACIjJ,WAAY,YACZC,MAAO,mBACPgJ,cAAe,YAEnB,CACIjJ,WAAY,OACZC,MAAO,wBACPgJ,cAAe,YAEnB,CACIjJ,WAAY,cACZC,MAAO,SACPiJ,MAAO,oBACPC,eAAgB,UAChBC,QAAS,SAAC/X,GAAD,OAA4BuX,EAAuBvX,EAAQ,SACpE8O,eAAgB,SAAC9O,GAAD,OAAkCwX,EAAqBxX,EAAQ,SAC/E4X,cAAe,UAEnB,CACIjJ,WAAY,cACZC,MAAO,SACPiJ,MAAO,oBACPC,eAAgB,UAChBC,QAAS,SAAC/X,GAAD,OAA4BuX,EAAuBvX,EAAQ,UACpE8O,eAAgB,SAAC9O,GAAD,OAAkCwX,EAAqBxX,EAAQ,UAC/E4X,cAAe,UAEnB,CACIjJ,WAAY,oBACZC,MAAO,SACPiJ,MAAO,0BACPC,eAAgB,gBAChBC,QAAS,SAAC/X,GAAD,OAA4BuX,EAAuBvX,EAAQ,eACpE8O,eAAgB,SAAC9O,GAAD,OACZwX,EAAqBxX,EAAQ,eACjC4X,cAAe,UAEnB,CACIjJ,WAAY,aACZC,MAAO,2BACPgJ,cAAe,YAEnB,CACIjJ,WAAY,MACZC,MAAO,UACPoJ,YAAa,SAAChY,GAAD,OAA+BsX,EAAatX,EAAQ,YACjE4X,cAAe,YAEnB,CACIjJ,WAAY,OACZC,MAAO,WACPoJ,YAAa,SAAChY,GAAD,OAA+BsX,EAAatX,EAAQ,aACjE4X,cAAe,YAEnB,CACIjJ,WAAY,eACZC,MAAO,qBACPE,eAAgB2I,EAChBQ,aAAa,GAEjB,CACItJ,WAAY,gBACZuJ,eAAe,EACfC,SAAU,CACN,CACIxJ,WAAY,qBACZC,MAAO,oBACPgJ,cAAe,YAEnB,CACIjJ,WAAY,SACZC,MAAO,SACPE,eA1IK,SAAC9O,GAClB,QAA4B,IAAjBA,EAAOD,MACd,MAAO,GAGX,OAAQC,EAAOD,OACX,IAAK,OACD,MAAO,OACX,IAAK,QACD,MAAO,OACX,QACI,MAAO,gBAiIP,CACI4O,WAAY,YACZC,MAAO,WACPwJ,gBAAiB,OACjBR,cAAe,WACftX,OAAQ,sBAEZ,CACIqO,WAAY,sBACZC,MAAO,qBACPwJ,gBAAiB,OACjBR,cAAe,YAEnB,CACIjJ,WAAY,qBACZC,MAAO,oBACPwJ,gBAAiB,UAI7B,CACIzJ,WAAY,eACZuJ,eAAe,EACfC,SAAU,CACN,CACIxJ,WAAY,aACZC,MAAO,YACPgJ,cAAe,YAEnB,CACIjJ,WAAY,oBACZC,MAAO,mBACPwJ,gBAAiB,OACjBR,cAAe,YAEnB,CACIjJ,WAAY,aACZC,MAAO,YACPwJ,gBAAiB,OACjBR,cAAe,YAEnB,CACIjJ,WAAY,aACZC,MAAO,YACPwJ,gBAAiB,OACjBR,cAAe,YAGnB,CACIjJ,WAAY,aACZC,MAAO,YACPwJ,gBAAiB,OACjBR,cAAe,YAEnB,CACIjJ,WAAY,aACZC,MAAO,YACPwJ,gBAAiB,OACjBR,cAAe,YAEnB,CACIjJ,WAAY,WACZC,MAAO,gBACPE,eAtNO,SAAC9O,GACpB,OAAQA,EAAOD,OACX,KAAK,EACD,MAAO,MACX,KAAK,EACD,MAAO,KACX,QACI,MAAO,UAgNHqY,gBAAiB,OACjBR,cAAe,cAI3B,CACIjJ,WAAY,cACZuJ,eAAe,EACfC,SAAU,CACN,CACIxJ,WAAY,UACZC,MAAO,iBACPgJ,cAAe,YAEnB,CACIjJ,WAAY,uBACZC,MAAO,qBACPwJ,gBAAiB,OACjBR,cAAe,WACf9I,eAjLa,SAAC9O,GAC1B,GAAKA,EAAOD,MAIZ,MAAwB,qBAAjBC,EAAOD,MAA+B,oBAAsBC,EAAOD,QA8KlE,CACI4O,WAAY,2BACZC,MAAO,yBACPwJ,gBAAiB,OACjBR,cAAe,SACf9I,eAAgB2I,KAI5B,CACI9I,WAAY,eACZ0J,cAAc,EACdC,UAAW,qBACXzJ,MAAO,IACP0J,UAAU,EACVC,mBAAmB,EACnBZ,cAAe,WACfa,gBAAgB,EAChBC,aAAa,EACbC,OAAQ,QACRX,YAAa,SAAChY,GACV,GAAKA,EAAOyV,KAKZ,MAAO,CACHA,KAHazV,EAATyV,KAIJmD,SAAU,uYAYlB7J,aAAc,MAIhBN,EAA+B,CACjCC,WAAYiJ,EACZ3I,cAAe,CACX6J,SAAU,IACVC,aAAa,EACbL,gBAAgB,EAChBC,aAAa,GAEjBK,mBAAoB,CAChBF,SAAU,KAEdG,QAAS,UACTC,aAAa,EACbC,UAAW,CACPC,aAAc,CACV,CAAEC,YAAa,sCAAuCC,MAAO,QAC7D,CAAED,YAAa,2BAA4BC,MAAO,UAClD,CAAED,YAAa,+BACf,CAAEA,YAAa,+BACf,CAAEA,YAAa,4BAGvBE,yBAAyB,EACzBC,sBAAsB,EACtBC,cAAc,EACdC,YAAaC,SAASC,KACtBC,kBAAmB,CACfC,oBAAqB,CACjBC,UAAW,aACXC,QAAS,CACLC,MAAO,CAAC,UAAW,OAAQ,WAC3BC,QAAS,CAAC,UAAW,UAAW,cAI5CC,YAAa,CAAC,sBAAuB,aAAc,YAAa,aAI9DC,EAA8B,IAAsBxQ,OAAO8E,GAC5DY,cACAE,gBAAgB,yBAChBC,S,oCCjVL,+DAEM,SAAU4K,EAA2Bpa,GAA2B,MACvCP,OAAOO,EAAOD,OAAjC6Y,EAD0D,EAC1DA,SACR,GAFkE,EAChDnD,KAClB,CAIA,IAAM4E,EAAkB,aAAH,OAAgBzB,EAAhB,eACf0B,EAAY,IAAUC,SAGtB7P,EAFe4P,EAAU/Y,IAAI,KACFiZ,QAAQH,GAChB1Q,OAAO2Q,GAC1BG,EAAcf,SAASgB,cAAc,OAI3C,OAHAhQ,EAAKiQ,KAAK3a,EAAOD,OACjB2K,EAAKkQ,cAAcH,GAEZA,K,gGChBL,SAAUI,EAAmB9a,GAC/B,IAAM+a,EAAS,IAAwB9Q,MAAK,SAAC+Q,GAAD,OAAYA,EAAEhb,QAAUA,KACpE,OAAO+a,EAASA,EAAO/a,MAAQ,K,q1BCAnC,IAaM0O,EAA+B,CACjCC,WAAY,CACR,CAAEC,WAAY,WAAYC,MAAO,OAAQC,MAAO,KAChD,CACIgJ,MAAO,gBACPQ,cAAc,EACd1J,WAAY,GACZI,a,YAZR,oB,4FAAA,+BARa,oV,kPAOmB,QAkB9BiM,EAA8C,IAAsBrR,OAAO8E,GAC5EY,cACAC,iBACAC,gBAAgB,qCAChBC,QAECyL,EAA8C,IAAsBtR,OAAO8E,GAC5EY,cACAC,iBACAC,gBAAgB,sCAChBC,S,+SClCgB0L,EAFpB/Z,YAAOC,I,cAGJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,kEAIlB,OAAO7B,KACF6B,WACAE,IAFE,yB,sCAKKC,GACZ,OAAOhC,KAAK6B,WAAWE,IAAhB,8BAA2CC,M,0CAGlCC,GAChB,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,8BAA8CF,M,uCAGxCyZ,GACb,OAAKA,EAAa3Z,GAGXhC,KAAK6B,WAAWS,IAAhB,8BAA2CqZ,EAAa3Z,IAAM2Z,GAF1D3b,KAAK6B,WAAWU,KAAK,uBAAwBoZ,Q,yECzBhE,IAAKC,EAAL,2CAAKA,GACD,iCACA,sCACA,oBAHJ,CAAKA,MAAe,KAQd,SAAUC,IACZ,MAAO,CACH,CAAEtb,MAAOqb,EAAgBE,SAAU1T,MAAO,YAC1C,CAAE7H,MAAOqb,EAAgBG,WAAY3T,MAAO,cAC5C,CAAE7H,MAAOqb,EAAgBI,QAAS5T,MAAO,c,2RCV5B6T,EADpBta,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,8DAIlB,OAAO7B,KAAK6B,WAAWE,IAAhB,mB,uECVf,IAAKma,GAAL,SAAKA,GACD,cACA,sBAFJ,CAAKA,MAAkB,KAKR,O,ihECoBR,IAAMC,EAAb,YAWI,0B,4FAAA,UACI,2BAEKC,yBAA2B,IAAI,IACpC,EAAKhL,sBAAwB,IAAI,IACjC,EAAKkF,UAAY,KACjB,EAAK3I,SAAW,KAChB,EAAK0O,SAAW,KAChB,EAAKlV,YAAc,KACnB,EAAKmV,sBAAwB,KATjC,E,UAXJ,O,kOAAA,M,EAAA,G,EAAA,+BAsCQtc,KAAKoc,yBAAyBlV,QAC9BlH,KAAKoR,sBAAsBlK,QAC3BlH,KAAKsW,UAAY,KACjBtW,KAAK2N,SAAW,KAChB3N,KAAKqc,SAAW,KAChBrc,KAAKmH,YAAc,KACnBnH,KAAKsc,sBAAwB,OA5CrC,uCAgDQ,YACOtc,KAAKoc,yBAAyBjK,iBADrC,GAEOnS,KAAKoR,sBAAsBe,iBAFlC,CAGImE,UAAWtW,KAAKsW,UAChB3I,SAAU3N,KAAK2N,SACf0O,SAAUrc,KAAKqc,SACflV,YAAanH,KAAKmH,YAClB8E,OAAQjM,KAAKiM,OACbqQ,sBAAuBtc,KAAKsc,0BAxDxC,sCA4DoB9b,GACZ,IAAM4R,EAAiC,CACnCE,gBAAiB9R,EAAO8R,gBACxBC,gBAAiB/R,EAAO+R,gBACxBC,cAAehS,EAAOgS,cACtBH,kBAAmB7R,EAAO6R,mBAExBkK,EAAyC,CAAE3O,gBAAiBpN,EAAOoN,iBAP1C,OASxBpN,GADC8V,EARuB,EAQvBA,UAAW3I,EARY,EAQZA,SAAU0O,EARE,EAQFA,SAAUlV,EARR,EAQQA,YAAamV,EARrB,EAQqBA,sBAIpDtc,KAAKoc,yBAAyB7I,gBAAgBgJ,GAC9Cvc,KAAKoR,sBAAsBmC,gBAAgBnB,GAE3C,0DACI,CACIkE,YACA3I,WACA0O,WACAlV,cACAmV,yBAEJtc,MAGJA,KAAKyT,eAAL,oCAAAzT,MAAA,KAAAA,KACIA,KAAK0T,MACL,8BACA1T,KAAKoR,sBAAsBuC,oBAzFvC,4BAwBQ,OACI,EACA3T,KAAKoc,yBAAyB1I,MAC9BxC,SAASlR,KAAKsW,WAAatW,KAAKsW,UAAUpV,OAAS,GACnDgQ,UAAUlR,KAAK2N,UAAY3N,KAAK2N,SAASzM,OAAS,IAClDgQ,UAAUlR,KAAKqc,UAAYrc,KAAKqc,SAASnb,OAAS,IAClDgQ,UAAUlR,KAAKmH,aAAenH,KAAKmH,YAAYjG,OAAS,MA9BpE,oCAkCQ,OAAOlB,KAAKyT,oB,2BAlCpB,GAAwC,M,sRCtBnB+I,E,8LACQC,GAA6C,IAAjBC,IAAiB,yDAClE,IAAKD,EACD,MAAO,GAEX,IAAIE,EAAOD,EAAaD,EAAa3b,QAAO,SAAA8b,GAAC,OAAIA,EAAEtY,YAAYmY,EAE3DI,EAAU,GAUd,OATAF,EAAKvb,SAAQ,SAAA0b,GACT,IAAIvS,EAAS,CACTnC,MAAO0U,EAAGxc,KACVC,MAAOuc,EAAG9a,IAGd6a,EAAQpb,KAAK8I,MAGVsS,M,2XCbf,IAAqBE,EAArB,WACI,WAAoBlb,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAK6B,WAAaA,E,UAF1B,O,EAAA,G,EAAA,oDAMQ,OAAO7B,KAAK6B,WAAWE,IAAI,sCANnC,2DAYQuE,EACArD,GAEA,IAAM2T,EAAM,iDAAH,OAAoDtQ,EAApD,oCACLrD,EAAiB,mBAAqBA,EAAiB,IAE3D,OAAOjD,KAAK6B,WAAWE,IAAI6U,KAlBnC,wCAqBsBoG,GACd,OAAOhd,KAAK6B,WAAWS,IAAI,mCAAoC0a,Q,2BAtBvE,KAAqBD,EAAqB,aADzC,I,iCAEmC,OADfA,GAAA,O,6SCHAE,EADpBtb,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,6DAGRqb,GACV,OAAIA,EACOld,KAAK6B,WAAWE,IAAhB,iCAA8Cmb,IAElDld,KAAK6B,WAAWE,IAAI,sB,mCAGlBC,GACT,OAAOhC,KAAK6B,WAAWE,IAAhB,2BAAwCC,M,uCAGlCC,GACb,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,2BAA2CF,M,oCAGxCib,GACV,OAAKA,EAAUnb,GAGRhC,KAAK6B,WAAWS,IAAhB,2BAAwC6a,EAAUnb,IAAMmb,GAFpDnd,KAAK6B,WAAWU,KAAK,oBAAqB4a,Q,uEC1B7D,kCAAO,IAAMC,EAAqB,SAACC,GAAwD,IAApCC,EAAoC,uDAAlB,IACrE,GAAID,GAAcC,EAAiB,MAAO,CAACA,GAM3C,IAJA,IAAMC,EAAWC,KAAKC,KAAKJ,EAAaC,GAAmBA,EACrDI,EAAUH,EAAW,EAErBI,EAAY,CAACD,GACVrd,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAMud,EAAWF,EAAUrd,EACvBud,EAAWP,EAAaK,GACxBC,EAAUlc,KAAKmc,GAIvB,OAAOD,I,gwCCRJ,IAAME,EAAb,YAKI,0B,4FAAA,UACI,2BAEKC,cAAgB,EAHzB,E,UALJ,O,kOAAA,M,EAAA,G,EAAA,+BAwBQ9d,KAAK8d,cAAgB,IAxB7B,uCA4BQ,OAA6B,IAAtB9d,KAAK8d,cAA4C,IAAtB9d,KAAK8d,aACjC,CAAE5K,YAAmC,IAAtBlT,KAAK8d,cACpB,OA9Bd,sCAiCoBtd,GACZ,GAAKA,EAAL,CAIA,IAAI0S,EACJ,OAAQ1S,EAAO0S,aACX,IAAK,OACDA,EAAc,EACd,MACJ,IAAK,QACDA,EAAc,EACd,MACJ,QACIA,GAAe,EAGvB,0DAA6B,CAAEA,eAAelT,SAlDtD,kCAYQ,OAAOA,KAAK8d,cAZpB,aAe2BC,GACnB/d,KAAK8d,aAAeC,IAhB5B,4BAoBQ,OAAO7M,QAA8B,IAAvBlR,KAAK8d,mB,2BApB3B,G,UAA6C,I,koBCD7C,IAAqBE,EAArB,WACI,WAAoBnc,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAK6B,WAAaA,E,UAF1B,W,EAAA,G,EAAA,yCAKsBoc,GACd,IAAM/b,EAAQ,YAAiB,CAAE+b,eAAc,GAE/C,OAAOje,KAAK6B,WAAWE,IAAhB,wBAAqCG,MARpD,sCAWoBF,GACZ,OAAOhC,KAAK6B,WAAWE,IAAhB,wBAAqCC,MAZpD,yCAgBQ,OAAOhC,KAAK6B,WAAWE,IAAI,mBAhBnC,sDAoBQ,OAAO/B,KAAK6B,WAAWE,IAAI,iCApBnC,4CAuB0BC,GAClB,OAAOhC,KAAK6B,WAAWE,IAAhB,wBAAqCC,EAArC,cAxBf,uCA2BqBkc,GACb,OAAOle,KAAK6B,WAAWS,IAAhB,wBAAqC4b,EAAalc,IAAMkc,KA5BvE,6CA+B2BC,GAAgB,IAATnc,EAAS,uDAAJ,KAC3BE,EAAQ,YAAiB,CAAEic,UAAS,GAIxC,OAFKnc,IAAIA,EAAK,OAEPhC,KAAK6B,WAAWE,IAAhB,wBAAqCC,EAArC,yBAAwDE,EAAQ,IAAH,OAAOA,GAAU,OApC7F,8CAuC4BF,GACpB,OAAOhC,KAAK6B,WAAWE,IAAhB,wBAAqCC,EAArC,gBAxCf,8CA2C4BA,EAAIiU,GACxB,OAAOjW,KAAK6B,WAAWS,IAAhB,wBAAqCN,EAArC,kBAAyDiU,KA5CxE,+CA+C6BjU,EAAIiU,GACzB,OAAOjW,KAAK6B,WAAWS,IAAhB,wBAAqCN,EAArC,aAAoDiU,KAhDnE,6EAmDiC3V,GAnDjC,sGAoDkCN,KAAKoe,uBAAuB,CAAC9d,IApD/D,cAoDY+d,EApDZ,yBAsDepe,OAAOiI,OAAOmW,GAAevV,MAAK,SAAAwV,GAAI,MAAC,MAA2B,UAApB,QAAP,EAAAA,EAAEhe,UAAK,eAAEwE,mBAtD/D,qKAyD2ByZ,GAzD3B,6FA0DY/K,EAAU1L,MAAM0L,QAAQ+K,GA1DpC,SA2DqBve,KAAKoe,uBAAuB5K,EAAU+K,EAAc,CAACA,IA3D1E,0LA8DiCA,GACzB,IAAMJ,EAAQrW,MAAM0L,QAAQ+K,GAAeA,EAAc,CAACA,GACpDrc,EAAQ,YAAiB,CAACic,UAAQ,GAExC,OAAOne,KAAK6B,WAAWE,IAAhB,oDAAiEG,S,2BAlEhF,KAAqB8b,EAAmB,aADvC,I,iCAEmC,OADfA,GAAA,Q,mUCFAQ,EADpB7c,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,8DAGqB,6DAAJ,GAAI,IAA5B4c,oBAA4B,SACnCvc,EAAQuc,EAAe,qBAAuB,GAClD,OAAOze,KAAK6B,WAAWE,IAAhB,qBAAkCG,M,kCAGjCF,GACR,OAAOhC,KAAK6B,WAAWE,IAAhB,qBAAkCC,M,sCAG7BC,GACZ,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,qBAAqCF,M,mCAGnCwc,GACT,OAAKA,EAAS1c,GAGPhC,KAAK6B,WAAWS,IAAhB,qBAAkCoc,EAAS1c,IAAM0c,GAF7C1e,KAAK6B,WAAWU,KAAK,cAAemc,Q,uYCVlCC,E,sLAgBbC,EACAvO,G,QAEIwO,EAAyB,IAAIF,EACjCE,EAAuB7c,GAAK4c,EAAqB5c,GACjD6c,EAAuB5b,eAAiB2b,EAAqB3b,eAC7D4b,EAAuBve,KAAOse,EAAqBte,KACnDue,EAAuBC,WAAaF,EAAqBE,WACzDD,EAAuBva,SAAWsa,EAAqBta,SAEvD,IAAMya,EAA2C,QAAhC,EAAGH,EAAqBI,gBAAQ,QAAI,GAErDH,EAAuBG,SAAWD,EAC7Bje,QAAO,SAACiI,GAAD,OAAOA,EAAEzE,YAChBnE,KAAI,SAAC4I,GAAD,OAAO,IAA8BkW,UAAUlW,MAExD,IAAMmW,EAAWH,EAAYvU,MAAK,SAACzB,GAAD,OAAOA,EAAEzE,UAAiC,MAArByE,EAAEoW,mBACzD,GAAID,EAAU,CACV,IAAME,EAAYL,EAAYvU,MAAK,SAACzB,GAAD,OAAOA,EAAE/G,KAAOkd,EAASC,mBACtDE,EAAaV,EAAuBW,uBAAuBJ,EAAShX,QAC1E2W,EAAuBU,cAAgB,CACnCC,kBAAkC,QAAjB,EAAEJ,aAAS,EAATA,EAAW9e,YAAI,QAAI,KACtCmf,oBAAqBP,EAAS5e,KAC9Bof,MAAOL,EAAWlf,KAAI,SAACY,GAAD,MAAQ,CAAEmc,KAAMnc,EAAE4e,OAAQpf,MAAOQ,EAAE6e,gBAG7Df,EAAuBU,cAAgB,CAAEC,kBAAmB,KAAMC,oBAAqB,KAAMC,MAAO,IAWxG,OARAb,EAAuBX,aAAe7N,EAAc7F,MAChD,SAACZ,GAAD,OAAOA,EAAE5H,KAAO4c,EAAqB3b,kBAErC4b,EAAuBX,eACvBW,EAAuBgB,oBAAvB,UAAgDhB,EAAuBX,aAAaxP,WAApF,cAAoGmQ,EAAuBX,aAAa5d,OAE5Iue,EAAuBza,YAAa,EAE7Bya,I,6CAKmB3W,GAC1B,IACI,IAAM4X,EAASxK,KAAKY,MAAMhO,GAAU,MACpC,OAAOJ,MAAM0L,QAAQsM,GAAUA,EAAS,GAC1C,SACE,MAAO,Q,2CAMLd,EAAWhf,KAAKgf,SAAS7e,KAAI,SAAC4I,EAAG0B,GACnC,IAAMsV,EAAQhX,EAAEiX,UAKhB,OADKD,EAAM/d,KAAI+d,EAAM/d,KAAOyI,EAAQ,IAC7BsV,KARR,EAWyE,QAArB,EAAG/f,KAAKuf,qBAAa,QAAI,GAAxEC,EAXL,EAWKA,kBAAmBC,EAXxB,EAWwBA,oBAAqBC,EAX7C,EAW6CA,MAC1CO,GAAkBP,UAAS,IAAI5e,QAAO,SAACC,GAAD,OAAOA,EAAEmc,QACrD,GAAIsC,GAAqBC,GAAuBQ,EAAe/e,OAAS,EAAG,CACvE,IAAMgf,EAAgBlB,EAASxU,MAAK,SAACzB,GAAD,OAAOA,EAAEzI,OAASkf,KAChDW,EAAkBnB,EAASxU,MAAK,SAACzB,GAAD,OAAOA,EAAEzI,OAASmf,KACpDS,GAAiBC,IACjBD,EAAchY,OAASoN,KAAKC,UAAU0K,EAAe9f,KAAI,SAACY,GAAD,OAAOA,EAAEmc,SAClEiD,EAAgBhB,gBAAkC,QAAnB,EAAGe,EAAcle,UAAE,QAAI,KACtDme,EAAgBjY,OAASoN,KAAKC,UAC1B0K,EAAe9f,KAAI,SAACY,GAAD,MAAuB,CAAE4e,OAAQ5e,EAAEmc,KAAM0C,MAAO7e,EAAER,iBAI7Eye,EAAS5d,SAAQ,SAAC2H,GACdA,EAAEoW,gBAAkB,KACpBpW,EAAEb,OAAS,QAInB,MAAO,CACHlG,GAAIhC,KAAKgC,GACTiB,eAAgBjD,KAAKiD,eACrB3C,KAAMN,KAAKM,KACXwe,WAAY9e,KAAK8e,WACjBxa,SAAUtE,KAAKsE,SACf0a,iB,0TClHSoB,EADpBze,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,iEAIlB,OAAO7B,KAAK6B,WAAWE,IAAI,mC,uCAGdse,GACb,OAAOrgB,KAAK6B,WAAWU,KAAK,gCAAiC8d,Q,qyCCP9D,IAAMC,EAAb,YAKI,0B,4FAAA,UACI,2BAEKC,aAAe,EAHxB,E,UALJ,O,kOAAA,M,EAAA,G,EAAA,+BAwBQvgB,KAAKugB,aAAe,IAxB5B,uCA4BQ,OAA4B,IAArBvgB,KAAKugB,aAA0C,IAArBvgB,KAAKugB,YAChC,CAAEvN,WAAiC,IAArBhT,KAAKugB,aACnB,OA9Bd,sCAiCoB/f,GACZ,GAAKA,EAAL,CAIA,IAAIwS,EACJ,OAAQxS,EAAOwS,YACX,IAAK,OACDA,EAAa,EACb,MACJ,IAAK,QACDA,EAAa,EACb,MACJ,QACIA,GAAc,EAGtB,0DAA6B,CAAEA,cAAchT,SAlDrD,iCAYQ,OAAOA,KAAKugB,aAZpB,aAe0BC,GAClBxgB,KAAKugB,YAAcC,IAhB3B,4BAoBQ,OAAQtP,QAA6B,IAAtBlR,KAAKugB,kB,2BApB5B,G,UAA4C,I,iRCF5C,IAAqBE,EAArB,WACI,WAAoB5e,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAK6B,WAAaA,E,UAF1B,O,EAAA,G,EAAA,kCAKkE,IAArD6e,EAAqD,uDAApC,KAAM9S,EAA8B,uDAAF,GACpD1L,EAAQ,YAAiB,CACzBwe,SACA9S,oBACD,GAEH,OAAO5N,KAAK6B,WAAWE,IAAhB,gBAA6BG,MAX5C,8BAcYF,GACJ,OAAOhC,KAAK6B,WAAWE,IAAhB,gBAA6BC,MAf5C,kCAkBgBC,GACR,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,gBAAgCF,MApB/C,oDAwBQ,OAAOlC,KAAK6B,WAAWE,IAAI,iCAxBnC,+BA2Ba4e,GACL,OAAKA,EAAK3e,GAGHhC,KAAK6B,WAAWS,IAAhB,gBAA6Bqe,EAAK3e,IAAM2e,GAFpC3gB,KAAK6B,WAAWU,KAAK,SAAUoe,KA7BlD,iCAkCe3e,GACP,OAAOhC,KAAK6B,WAAWY,MAAhB,gBAA+BT,GAAM,CAAE4e,UAAU,MAnChE,0CAsCwBC,GAChB,OAAO7gB,KAAK6B,WAAWS,IAAI,cAAeue,KAvClD,2CA0CyB7e,GACjB,OAAOhC,KAAK6B,WAAWE,IAAhB,gBAA6BC,EAA7B,yB,2BA3Cf,KAAqBye,EAAW,aAD/B,I,iCAEmC,OADfA,GAAA,O,gxCCGd,IAAMK,EAAb,YAII,0B,4FAAA,UACI,2BACKC,cAAgB,IAAaC,OAFtC,E,UAJJ,O,kOAAA,M,EAAA,G,EAAA,+BAsBQhhB,KAAK+gB,cAAgB,IAAaC,SAtB1C,uCA0BQ,MAAO,CACHlO,aAAc9S,KAAK+gB,iBA3B/B,sCA+BoBvgB,GACZ,0DAA6BA,EAAQR,QAhC7C,mCAUQ,OAAOA,KAAK+gB,eAVpB,aAa4BE,GACpBjhB,KAAK+gB,cAAgBE,GAAkB,IAAaD,SAd5D,4BAkBQ,OAAQ9P,SAASlR,KAAK+gB,eAAiB/gB,KAAK+gB,gBAAkB,IAAaC,a,2BAlBnF,G,UAA8C,I,yyCCGvC,IAAME,EAAb,YAOI,0B,4FAAA,UACI,2BACKC,iBAAmB,KACxB,EAAKC,wBAA0B,GAHnC,E,UAPJ,O,kOAAA,M,EAAA,G,EAAA,+BAgCQphB,KAAKmhB,iBAAmB,KACxBnhB,KAAKohB,wBAA0B,KAjCvC,uCAqCQ,MAAO,CACHte,gBAAiB9C,KAAKmhB,iBACtBE,uBAAwBrhB,KAAKohB,2BAvCzC,sCA2CoB5gB,GACPA,GAIL,0DAA6BA,EAAQR,QAhD7C,sCAeQ,OAAOA,KAAKmhB,kBAfpB,aAkB+BG,GACvBthB,KAAKmhB,iBAAmBG,EACxBthB,KAAKohB,wBAA0B,KApBvC,4BAwBQ,OACI,EACAlQ,SAASlR,KAAK8C,iBACdoO,UAAUlR,KAAKohB,0BAA2BphB,KAAKohB,wBAAwBlgB,c,2BA3BnF,G,UACY,GAaR,aADC,YAAa,oB,2GAGb,O,kCC3BL,oFAGaqgB,EAAuB,SAA0BC,GAC1D,IAAMC,EACFnM,KAAKY,MAAMwL,aAAaC,QAAQ,IAAsBC,kBAAoB,GAW9E,OAVwB3hB,OAAO4hB,UAAUC,eAAeC,KACpDN,EACAD,EAAYQ,YAIZP,EAAcD,EAAYQ,UAAYR,EACtCE,aAAaO,QAAQ,IAAsBL,eAAgBtM,KAAKC,UAAUkM,KAGvEA,EAAcD,EAAYQ,WAGxBE,EAAuB,SAA0BV,GAC1D,IAAMC,EACFnM,KAAKY,MAAMwL,aAAaC,QAAQ,IAAsBC,kBAAoB,GAK9E,OAHAH,EAAcD,EAAYQ,UAAYR,EACtCE,aAAaO,QAAQ,IAAsBL,eAAgBtM,KAAKC,UAAUkM,IAEnEA,EAAcD,EAAYQ,Y,mRCpBrC,IAAaG,EAAb,yB,4FAAA,SACqB,KAAAC,WAAa,wB,UADlC,O,EAAA,G,EAAA,6BAIQ,IACI,MAAiD,aAA1CV,aAAaC,QAAQ3hB,KAAKoiB,YAA6B,WAAa,gBAC7E,SACE,MAAO,mBAPnB,0BAWQC,GACA,IACIX,aAAaO,QAAQjiB,KAAKoiB,WAAYC,GACxC,gB,2BAdV,KAAaF,EAA0B,aADtC,KACYA,I,gSCFQG,E,6LAuBD/hB,GACZ,OAAQA,GACJ,IAAK,OACL,IAAK,MACL,IAAK,IACL,IAAK,OACD,OAAO,EACX,IAAK,QACL,IAAK,KACL,IAAK,IACL,IAAK,QACL,KAAK,KACD,OAAO,EACX,QACI,OAAOgiB,QAAQhiB,M,mCA3BvB,OAAOP,KAAKwiB,gBAAgBxiB,KAAKO,Q,aAGpBA,GACS,YAAlBP,KAAKyiB,WACLziB,KAAKO,MAAQA,EAAQ,OAAS,W,uCAKlC,OAAOP,KAAKM,OAAS,IAAiCoiB,0B,gCAX1D,aADC,YAAa,S,0GAGb,O,qtBCTC,SAAUC,EACZC,EACAC,EACAC,GAEA,OAAKD,EAIL,UAAUD,EAAV,cAA0BC,EAA1B,aAAwD,SAAdC,EAAuB,aAAe,aAHrEF,EAQT,SAAUG,EAAqC/d,EAAYge,GAC7D,IAAMC,EAAY,IAAIta,IACtBqa,EAAW5hB,SAAQ,SAACY,EAAIyI,GACfwY,EAAUra,IAAI5G,IACfihB,EAAUja,IAAIhH,EAAIyI,MAI1B,IAAMyY,EAAa,SAACrS,GAAW,aAAuB,QAAvB,EAACoS,EAAUlhB,IAAI8O,EAAK7O,WAAG,QAAIkP,OAAOiS,kBACjE,OAAO,EAAIne,GAAOoe,MAAK,SAAChjB,EAAGijB,GAAJ,OAAUH,EAAW9iB,GAAK8iB,EAAWG,Q,kCCrBhE,IAAYC,EAAZ,+GAAYA,GACR,qBACA,uBACA,yBAHJ,CAAYA,MAAyB,KAM9B,IAAMC,EAAgF,CACzFC,EAAG,CAAEjjB,MAAO+iB,EAA0BG,MAAOrb,MAAO,SACpDsb,EAAG,CAAEnjB,MAAO+iB,EAA0BK,OAAQvb,MAAO,UACrDwb,EAAG,CAAErjB,MAAO+iB,EAA0BO,QAASzb,MAAO,YAGpD,SAAU0b,IACZ,MAAO,CACHP,EAA2B,GAC3BA,EAA2B,GAC3BA,EAA2B,IAI5B,IAAMQ,EAAkF,CAC3FP,EAAG,CACCQ,eAAgB,EAChBC,eAAgB,EAChBC,kCACI,6DACJC,gDACI,6DAERT,EAAG,CACCM,eAAgB,EAChBC,eAAgB,EAChBC,kCACI,sEACJC,gDACI,mEAERP,EAAG,CACCI,eAAgB,EAChBC,eAAgB,GAChBC,kCACI,wEACJC,gDACI,uE,yRC/CSC,EADpBziB,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,kEAIlB,OAAO7B,KAAK6B,WAAWE,IAAhB,qC,4CAGWzB,GAClB,OAAON,KAAK6B,WAAWE,IAAhB,0CAAuDzB,EAAvD,iB,oVCTM+jB,EADpB1iB,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,8DAGP+L,EAAiBhL,GAE5B,IAAIoI,EAAkB/K,OAAOC,OAAO,GAAI0C,EAAS,CAC7CgL,gBAAiB9F,MAAM0L,QAAQ5F,GAC3BA,EACA,CAACA,KAGL1L,EAAQc,YAAiBgI,GAAiB,GAE9C,OAAOhL,KACF6B,WACAE,IAFE,sBAEkBG,EAAQ,IAAH,OAAOA,GAAU,U,gkBCPjD,SAAUoiB,EAAuBlkB,EAAwBijB,G,gBAC3D,OACgB,QAAZ,EAACjjB,EAAEmkB,iBAAS,QAAI,IAAiB,QAAX,EAAAlB,EAAEkB,iBAAS,QAAI,KAC1B,QAAX,EAACnkB,EAAEokB,gBAAQ,QAAI,IAAIC,cAAwB,QAAV,EAAApB,EAAEmB,gBAAQ,QAAI,MACnC,QAAZ,EAACpkB,EAAEyR,iBAAS,QAAI,IAAI4S,cAAyB,QAAX,EAAApB,EAAExR,iBAAS,QAAI,IAMnD,SAAU6S,EACZC,EACAtC,EACAuC,GAEA,IAAM1B,EAAa,SAAC2B,GAChB,IAAMpa,EAAQma,EAAYpjB,QAAQqjB,GAClC,OAAkB,IAAXpa,EAAeyG,OAAOiS,iBAAmB1Y,GAE9Cqa,EACQ,aAAVzC,EACM,SAACjiB,EAAwBijB,GAAzB,OACIH,EAAW9iB,EAAEykB,QAAU3B,EAAWG,EAAEwB,SACxCP,EACJS,EAAY,SAACC,GAAD,OACdA,EAAOC,MAAMvgB,QAAO,SAACwgB,EAAOC,GAAR,OAAkBL,EAAaK,EAAMD,GAAS,EAAIC,EAAOD,MAEjF,OAAO,EAAIP,GAASvB,MAAK,SAAChjB,EAAGijB,GAAJ,OAAUyB,EAAaC,EAAU3kB,GAAI2kB,EAAU1B,S,0hCCpC5E,IAAqB+B,EAArB,WACI,WAAoBvjB,I,4FAAsB,SAAtB,KAAAA,a,UADxB,O,EAAA,G,EAAA,2CAI4E,IAAtDe,EAAsD,uDAA5C,GAAIsI,EAAwC,uDAAT,UACvDhJ,EAAQ,YAAiB,EAAD,GAAMU,EAAN,CAAesI,UAAQ,GAEnD,OAAOlL,KAAK6B,WAAWE,IAAhB,yBAAuCG,EAAQ,IAAH,OAAOA,GAAU,OAP5E,uCAUqBF,GACb,OAAOhC,KAAK6B,WAAWE,IAAhB,0BAAuCC,MAXtD,2CAcyBC,GACjB,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAOnC,KAAK6B,WAAWO,OAAhB,0BAA0CF,MAhBzD,wCAmBsBmjB,GACd,OAAKA,EAAcrjB,GAGZhC,KAAK6B,WAAWS,IAAhB,0BAAuC+iB,EAAcrjB,IAAMqjB,GAFvDrlB,KAAK6B,WAAWU,KAAK,mBAAoB8iB,Q,2BArB5D,KAAqBD,EAAoB,aADxC,I,iCAEmC,OADfA,GAAA,O,wQCFAE,E,WAUjB,WAAoBC,I,4FAAgC,SAAhC,KAAAA,kBAAgC,IACxCC,EAAaxlB,KAAKulB,gBAAlBC,SACRxlB,KAAKylB,OAAS,EACdzlB,KAAK0lB,SAAW5d,MAAM0L,QAAQgS,IAAaA,EAAStkB,OAASskB,EAAS,GAAGE,SAAW,EACpF1lB,KAAK2lB,YAAc,E,2EAInB3lB,KAAK4lB,gBAAkB,IAAuBC,IAAI7lB,KAAKulB,gBAAiB,QAAQ,GAChFvlB,KAAK4lB,gBAAgBE,mBAAqB,gBAC1C9lB,KAAK4lB,gBAAgBG,MAAO,EAE5B/lB,KAAKgmB,yBAA2B,IAAuBH,IACnD7lB,KAAKulB,gBACL,QACA,GAEJvlB,KAAKgmB,yBAAyBF,mBAAqB,wCAEnD9lB,KAAKimB,sBAAwB,IAAuBJ,IAAI7lB,KAAKulB,gBAAiB,QAAQ,GACtFvlB,KAAKimB,sBAAsBH,mBAAqB,oBAChD9lB,KAAKimB,sBAAsBF,MAAO,EAElC/lB,KAAKkmB,8BAELlmB,KAAKulB,gBAAgBC,SAAS/jB,KAAKzB,KAAK4lB,iBACxC5lB,KAAKulB,gBAAgBC,SAAS/jB,KAAKzB,KAAKgmB,0BACxChmB,KAAKulB,gBAAgBC,SAAS/jB,KAAKzB,KAAKimB,yB,oDAIxCjmB,KAAK4lB,gBAAgBrK,EAAIvb,KAAKylB,OAC9BzlB,KAAK4lB,gBAAgBO,EAAInmB,KAAKylB,OAC9BzlB,KAAK4lB,gBAAgBvW,MAAQrP,KAAKulB,gBAAgBlW,MAAQ,EAAIrP,KAAKylB,OACnEzlB,KAAK4lB,gBAAgBQ,UAAY,QAEjCpmB,KAAKgmB,yBAAyBzK,EAAIvb,KAAKylB,OACvCzlB,KAAKgmB,yBAAyBG,EAAInmB,KAAKylB,OAASzlB,KAAK0lB,SAAW1lB,KAAK2lB,YACrE3lB,KAAKgmB,yBAAyB3W,MAAQrP,KAAKulB,gBAAgBlW,MAAQ,EAAIrP,KAAKylB,OAE5EzlB,KAAKimB,sBAAsB1K,EAAIvb,KAAKylB,OACpCzlB,KAAKimB,sBAAsBE,EAAInmB,KAAKylB,OACpCzlB,KAAKimB,sBAAsB5W,MAAQrP,KAAKulB,gBAAgBlW,MAAQ,EAAIrP,KAAKylB,Y,iQCrDrEY,E,aAAZ,SAAYA,GACR,oBACA,kBACA,sCAHJ,CAAYA,MAAc,KAMnB,IAAMjT,EAA0D,CACnEkT,QAAS,CAAE/lB,MAAO8lB,EAAeC,QAASle,MAAO,WACjDme,OAAQ,CAAEhmB,MAAO8lB,EAAeE,OAAQne,MAAO,UAC/Coe,iBAAkB,CAAEjmB,MAAO8lB,EAAeG,iBAAkBpe,MAAO,sBAKjE,SAAUqe,IACZ,MAAO,CACHrT,EAAgBkT,QAChBlT,EAAgBmT,OAChBnT,EAAgBoT,kBAsBlB,SAAUE,IACZ,MAAO,CACHtT,EAAgBmT,OAChBnT,EAAgBoT,kBAIlB,SAAUG,EAAsBC,GAClC,OAAOA,IAAmBP,EAAeG,iBAAmBI,EAAete,WAAa,oBAGtF,SAAUue,EAA0BC,GACtC,OAAOA,IAAa,IAASxb,UA7BtB,CACH8H,EAAgBkT,SA8BdG,IAOJ,SAAUM,EAA4BC,GAExC,OANE,SAA0CF,GAC5C,OAAOD,EAA0B,IAASC,IAKnCG,CADU,IAASD,IAlDf,O,2SCRf,IAAaE,EAAb,WAGI,WAAoBrlB,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAKiN,UAAY,6B,UAJzB,O,EAAA,G,EAAA,qDAQQ,OAAOjN,KAAK6B,WAAWE,IAAI/B,KAAKiN,aARxC,iDAa+BjL,GACvB,OAAOhC,KAAK6B,WAAWE,IAAhB,UAAuB/B,KAAKiN,UAA5B,YAAyCjL,MAdxD,oDAoBQmlB,GAEA,OAAOnnB,KAAK6B,WAAWU,KACnBvC,KAAKiN,UACLka,KAxBZ,4DA6BQnlB,EACAolB,GAEA,OAAOpnB,KAAK6B,WAAWS,IAAhB,UACAtC,KAAKiN,UADL,YACkBjL,GACrBolB,KAlCZ,mDAsCiCplB,GACzB,OAAOhC,KAAK6B,WAAWS,IAAhB,UACAtC,KAAKiN,UADL,YACkBjL,EADlB,UAEH,QAzCZ,kDA6CgCA,GACxB,OAAOhC,KAAK6B,WAAWS,IAAhB,UACAtC,KAAKiN,UADL,YACkBjL,EADlB,SAEH,QAhDZ,oDAoDkCA,GAC1B,OAAOhC,KAAK6B,WAAWO,OAAhB,UACApC,KAAKiN,UADL,YACkBjL,S,2BAtDjC,KAAaklB,EAA8B,aAD1C,I,iCAImC,OAHvBA,I,+tBCLHG,GAAV,SAAUA,EAAkBC,EAAWC,GAAvC,sFACQC,EAAcC,IAAOH,GAD7B,YAGWE,EAAcD,GAHzB,gBAIQ,OAJR,SAIcC,EAJd,OAKQA,EAAcC,IAAOD,GAAavZ,IAAI,EAAG,KALjD,sBAQI,OARJ,SAQUsZ,EARV,uCAWO,SAASG,EAAqBJ,EAAWC,EAASI,GACrD,IAAKL,EAAW,MAAM,IAAInmB,MAAM,wCAEhC,IAAKomB,EAAS,MAAM,IAAIpmB,MAAM,sCAE9B,IAAIymB,EAAoB,GAL2C,uBAOnE,YAAiBP,EAAkBI,IAAOH,GAAYG,IAAOF,IAA7D,oDAASM,EAAT,QACID,EAAkBnmB,KAAK,CACnBqmB,qBAAsBD,EACtBE,aAAc,MAV6C,kFAanE,IAAKJ,GAAwC,IAAxBA,EAAazmB,OAAc,OAAO0mB,EAbY,2BAenE,IAfmE,IAenE,EAfmE,iBAe1DI,EAf0D,QAgB3DF,EAAuBL,IAAOO,EAAYF,sBAC1CG,EAAmBL,EAAkBpd,MACrC,SAAC0d,GAAD,OAAOA,EAAEJ,qBAAqBxf,aAAewf,EAAqBxf,cAElE2f,IACAA,EAAiBF,aAAaC,EAAY/c,SAAW,CACjDkd,eAAgBH,EAAYG,eAC5BC,cAAeJ,EAAYI,iBARvC,EAAwBT,EAAxB,+CAAsC,IAf6B,kFA2BnE,IAAIU,EAAsB,KA3ByC,uBA4BnE,YAAkCT,EAAkBhnB,UAApD,+CAA+D,oBAAlDqnB,GAAkD,WAC3D,GAAII,EACA,cAAkCpoB,OAAOW,QAAQqnB,EAAiBF,cAAlE,gCAAU9c,EAAV,KAAmBqd,EAAnB,KACIA,EAAWC,sBACLF,EAAoBpd,IAClBod,EAAoBpd,GAASkd,kBAChCG,EAAWH,eAExBE,EAAsBJ,EAAiBF,cApCwB,kFAuCnE,OAAOH,I,swCCjDX,IAOaY,EAAb,YACI,oB,4FAAA,+BARa,qW,UAOjB,O,kOAAA,M,EAAA,G,EAAA,4BAKShoB,GAA2B,IACpBioB,EAASjoB,EAATioB,KACR,GAAqB,IAAjBA,EAAKC,QAAe,KACZC,EAAuBF,EAAvBE,mBACFC,EAAYtT,KAAKY,MAAMZ,KAAKC,UAAUoT,EAAmB,GAAG1S,cAC3D2S,EAAU3lB,eAEjBzC,EAAM,UAAgBooB,cAEfpoB,EAAM,UAGjB,wCAAWA,Q,2BAjBnB,GAAwD,M,yNCPpDqoB,EAAQC,IAAEC,GAAGC,YAAYH,MAE7B,SAASI,IACL,OAAO,IAAIpc,KAAKA,KAAKqc,IAAIC,MAAMtc,KAAMuc,YAGlC,SAASC,EAAUxB,EAAM5b,EAAQqd,GACpC,GAAIzB,aAAgBhb,KAAM,OAAO,IAAIA,KAAKgb,EAAK0B,UAAuC,IAA3B1B,EAAK2B,qBAUhE,GATI,4BAA4BxoB,KAAK6mB,KACjC5b,EAASjM,KAAKypB,YAAY,eAE1B,gDAAgDzoB,KAAK6mB,KACrD5b,EAASjM,KAAKypB,YAAY,qBAE1B,iEAAiEzoB,KAAK6mB,KACtE5b,EAASjM,KAAKypB,YAAY,wBAE1B,wCAAwCzoB,KAAK6mB,GAAO,CACpD,IAEI1C,EAAMuE,EAFNC,EAAU,oBACV1E,EAAQ4C,EAAK+B,MAAM,sBAEvB/B,EAAO,IAAIhb,KACX,IAAK,IAAIxM,EAAI,EAAGA,EAAI4kB,EAAM/jB,OAAQb,IAG9B,OAFA8kB,EAAOwE,EAAQE,KAAK5E,EAAM5kB,IAC1BqpB,EAAMI,SAAS3E,EAAK,IACZA,EAAK,IACT,IAAK,IACD0C,EAAKkC,WAAWlC,EAAKmC,aAAeN,GACpC,MACJ,IAAK,IACD7B,EAAOoC,eAAepI,UAAUqI,UAAUnI,KAAKkI,eAAepI,UAAWgG,EAAM6B,GAC/E,MACJ,IAAK,IACD7B,EAAKkC,WAAWlC,EAAKmC,aAAqB,EAANN,GACpC,MACJ,IAAK,IACD7B,EAAOoC,eAAepI,UAAUsI,SAASpI,KAAKkI,eAAepI,UAAWgG,EAAM6B,GAI1F,OAAOT,EAAQpB,EAAKuC,iBAAkBvC,EAAKwC,cAAexC,EAAKmC,aAAcnC,EAAKyC,cAAezC,EAAK0C,gBAAiB1C,EAAK2C,iBAEhI,IAAIvF,EAAQ4C,GAAQA,EAAK+B,MAAM5pB,KAAKyqB,iBAAmB,GACvD5C,EAAO,IAAIhb,KACX,IAyCI6d,EAAKC,EAAUxF,EAzCfrF,EAAS,GACT8K,EAAgB,CAAC,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,OAAQ,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,MAC3FC,EAAc,CACdC,GAAI,SAASC,EAAG5iB,GACZ,OAAO4iB,EAAEC,YAAY7iB,IAEzB8iB,EAAG,SAASF,EAAG5iB,GACX,OAAO4iB,EAAEC,YAAY7iB,IAEzB+iB,GAAI,SAASH,EAAG5iB,GACZ,OAAO4iB,EAAEI,cAAchjB,IAE3B9H,EAAG,SAAS0qB,EAAG5iB,GACX,OAAO4iB,EAAEI,cAAchjB,IAE3BijB,GAAI,SAASL,EAAG5iB,GACZ,OAAO4iB,EAAEM,cAAcljB,IAE3BY,EAAG,SAASgiB,EAAG5iB,GACX,OAAO4iB,EAAEM,cAAcljB,IAE3BmjB,KAAM,SAASP,EAAG5iB,GACd,OAAO4iB,EAAEQ,eAAepjB,IAE5BqjB,GAAI,SAAST,EAAG5iB,GACZ,OAAO4iB,EAAEQ,eAAe,IAAOpjB,IAEnCyU,EAAG,SAASmO,EAAG5iB,GAEX,IADAA,GAAK,EACEA,EAAI,GAAGA,GAAK,GAGnB,IAFAA,GAAK,GACL4iB,EAAEU,YAAYtjB,GACP4iB,EAAEV,eAAiBliB,GACtB4iB,EAAEhB,WAAWgB,EAAEf,aAAe,GAClC,OAAOe,GAEXA,EAAG,SAASA,EAAG5iB,GACX,OAAO4iB,EAAEhB,WAAW5hB,KAQ5B,GAHA0iB,EAAW,EAAQA,EAAW,GAASA,EAAW,GAASA,EAAW,EACtEA,EAAW,GAASA,EAAW,EAC/BhD,EAAOoB,EAAQpB,EAAK6D,cAAe7D,EAAK8D,WAAY9D,EAAK+D,UAAW,EAAG,EAAG,GACtE3G,EAAM/jB,QAAU+K,EAAOgZ,MAAM/jB,OAAQ,CACrC,IADqC,eACrB2qB,EAAPxrB,GAGL,GAFAqqB,EAAMZ,SAAS7E,EAAM5kB,GAAI,IACzB8kB,EAAOlZ,EAAOgZ,MAAM5kB,GAChByrB,MAAMpB,GACN,OAAQvF,GACJ,IAAK,KACDwF,EAAW7B,IAAED,EAAMS,GAAUyC,QAAQjrB,QAAO,WACxC,IAAI8b,EAAI5c,KAAKgsB,MAAM,EAAG/G,EAAM5kB,GAAGa,QAE/B,OAAO0b,GADCqI,EAAM5kB,GAAG2rB,MAAM,EAAGpP,EAAE1b,WAGhCwpB,EAAM5B,IAAEmD,QAAQtB,EAAS,GAAI9B,EAAMS,GAAUyC,QAAU,EACvD,MACJ,IAAK,IACDpB,EAAW7B,IAAED,EAAMS,GAAU4C,aAAaprB,QAAO,WAC7C,IAAI8b,EAAI5c,KAAKgsB,MAAM,EAAG/G,EAAM5kB,GAAGa,QAE/B,OAAO0b,GADCqI,EAAM5kB,GAAG2rB,MAAM,EAAGpP,EAAE1b,WAGhCwpB,EAAM5B,IAAEmD,QAAQtB,EAAS,GAAI9B,EAAMS,GAAU4C,aAAe,EAK3D,MAAT/G,GAAgBrF,EAAM,KACN,MAAZmF,EAAM5kB,IAA+B,KAAjByf,EAAM,KAC1BA,EAAM,GAAS,GAEF,OAAbmF,EAAM5kB,IAAgC,KAAjByf,EAAM,KAC3BA,EAAM,IAAU,KAGxBA,EAAOqF,GAAQuF,GAhCVrqB,EAAI,EAAGwrB,EAAM5f,EAAOgZ,MAAM/jB,OAAQb,EAAIwrB,EAAKxrB,IAAK,EAAzCwrB,EAAPxrB,GAkCT,IAAK,IAAW0I,EAAP1I,EAAI,EAAMA,EAAIuqB,EAAc1pB,OAAQb,KACzC0I,EAAI6hB,EAAcvqB,MACTyf,IAAWgM,MAAMhM,EAAO/W,KAC7B8hB,EAAY9hB,GAAG8e,EAAM/H,EAAO/W,IAGxC,OAAO8e,EAGJ,SAASsE,EAAWtE,EAAM5b,EAAQqd,GACrC,GAAY,MAARzB,EACA,MAAO,GAEX,IAAI6C,EAAM,CACNO,EAAGpD,EAAKyC,cACRjqB,EAAGwnB,EAAK0C,gBACRxhB,EAAG8e,EAAK2C,gBACRO,EAAGlD,EAAKmC,aACRpN,EAAGiL,EAAKwC,cAAgB,EACxB+B,EAAGvD,EAAMS,GAAU4C,YAAYrE,EAAKwC,eACpCgC,GAAIxD,EAAMS,GAAUyC,OAAOlE,EAAKwC,eAChCmB,GAAI3D,EAAKuC,iBAAiB9hB,WAAW/G,UAAU,GAC/C+pB,KAAMzD,EAAKuC,iBACXhqB,EAAGynB,EAAKyC,eAAiB,GAAK,KAAO,MAI5B,GAATI,EAAIO,EACJP,EAAII,GAAK,IAETJ,EAAII,GAAM7e,EAAOgZ,MAAMpgB,SAAS,MAAQ6lB,EAAIO,EAAI,GAC5CP,EAAIO,EAAI,GACRP,EAAIO,EACRP,EAAII,IAAMJ,EAAII,GAAK,GAAK,IAAM,IAAMJ,EAAII,IAG5CJ,EAAIQ,IAAMR,EAAIrqB,EAAI,GAAK,IAAM,IAAMqqB,EAAIrqB,EACvCqqB,EAAIU,IAAMV,EAAI3hB,EAAI,GAAK,IAAM,IAAM2hB,EAAI3hB,EACvC2hB,EAAI4B,IAAM5B,EAAIK,EAAI,GAAK,IAAM,IAAML,EAAIK,EACvCL,EAAI6B,IAAM7B,EAAI9N,EAAI,GAAK,IAAM,IAAM8N,EAAI9N,EAGvC,IAFA,IAAI4P,EAAY,GACZC,EAAO3D,IAAE4D,OAAO,GAAIzgB,EAAO0gB,YACtBtsB,EAAI,EAAGwrB,EAAM5f,EAAOgZ,MAAM/jB,OAAQb,EAAIwrB,EAAKxrB,IAC5CosB,EAAKvrB,QACLsrB,EAAU/qB,KAAKgrB,EAAKG,SAExBJ,EAAU/qB,KAAKipB,EAAIze,EAAOgZ,MAAM5kB,KAEpC,OAAOmsB,EAAUrqB,KAAK,M,yRC3KL0qB,EADpBlrB,YAAOC,I,cAEJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,oEAIlB,OAAO7B,KAAK6B,WAAWE,IAAhB,uC,8CAGazB,GACpB,OAAON,KAAK6B,WAAWE,IAAhB,4CAAyDzB,EAAzD,iB,uECdf,IAAKwsB,GAAL,SAAKA,GACD,uBACA,qBAFJ,CAAKA,MAAyB,KAKf,O,yRCAMC,EAFpBprB,YAAOC,I,cAGJ,WAAYC,I,4FAAY,SACpB7B,KAAK6B,WAAaA,E,2EAKlB,OAAO7B,KACF6B,WACAE,IAFE,4B,0+BCHR,IAAMirB,EAAb,YAMI,0B,4FAAA,UACI,2BACK5Z,gBAAkB,GAF3B,E,UANJ,O,kOAAA,M,EAAA,G,EAAA,+BAgBQpT,KAAKoT,gBAAkB,KAhB/B,uCAoBQ,MAAO,CACHA,gBAAiBpT,KAAKoT,mBArBlC,sCAyBoB5S,GACZ,GAAKA,EAAL,CADuC,IAOnCysB,EAFI7Z,EAAoB5S,EAApB4S,gBAGJA,IACA6Z,EAAqBnlB,MAAM0L,QAAQJ,GAC7BA,EACA,CAACA,IAGXpT,KAAKoT,gBAAkB6Z,KAvC/B,4B,MAYQ,OAAO/b,UAA6B,QAArB,EAAClR,KAAKoT,uBAAe,eAAElS,c,2BAZ9C,G,UACY,I,oPCPL,IAAMgsB,EAAb,yB,4FAAA,S,UAAA,O,EAAA,G,EAAA,kCAgCQ,MAAM,IAAI/rB,MAAM,6BAhCxB,mCAmCiBgmB,GACTnnB,KAAKmtB,iBAAmBhG,EAAOgG,iBAC/BntB,KAAKotB,gBAAkBjG,EAAOiG,gBAC9BptB,KAAKqtB,sBAAwBlG,EAAOkG,sBACpCrtB,KAAKstB,YAAcnG,EAAOmG,YAC1BttB,KAAKutB,QAAUpG,EAAOoG,QACtBvtB,KAAKwtB,KAAOrG,EAAOqG,KACnBxtB,KAAK0V,MAAQyR,EAAOzR,MACpB1V,KAAKytB,WAAatG,EAAOsG,WACzBztB,KAAK0tB,QAAUvG,EAAOuG,QACtB1tB,KAAK2tB,YAAcxG,EAAOwG,YAC1B3tB,KAAK4tB,UAAYzG,EAAOyG,UACxB5tB,KAAK6tB,gBAAkB1G,EAAO0G,gBAC9B7tB,KAAK8tB,aAAe3G,EAAO2G,eAhDnC,kCAgBQ,IAAIC,EAAyB,GAY7B,OAXAA,EAAatsB,KAAKzB,KAAKstB,aACnBttB,KAAK6tB,iBACLE,EAAatsB,KAAb,YAAuBzB,KAAK6tB,kBAE5B7tB,KAAKutB,SAAWvtB,KAAKwtB,MAAQxtB,KAAK0V,OAAS1V,KAAKytB,aAChDM,EAAatsB,KAAb,YAAuBzB,KAAKutB,UAC5BQ,EAAatsB,KAAb,YAAuBzB,KAAKwtB,OAC5BO,EAAatsB,KAAb,YAAuBzB,KAAK0V,QAC5BqY,EAAatsB,KAAb,YAAuBzB,KAAKytB,cAGzBM,EAAa5rB,KAAK,S,2BA5BjC,M,6PCCA,IAAqBse,EAArB,WACI,WAAoB5e,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAK6B,WAAaA,E,UAF1B,O,EAAA,G,EAAA,2CAMQ,OAAO7B,KAAK6B,WAAWE,IAAI,wB,2BANnC,KAAqB0e,EAAW,aAD/B,I,iCAEmC,OADfA,GAAA,O,yRCAAuN,EADpBrsB,YAAOssB,I,cAEJ,WAAY7gB,I,4FAAiB,SACzBpN,KAAKoN,gBAAkBA,E,mDAGvB8gB,EAAuBC,GACvB,OAAID,GACAA,EAAsBviB,MACtBuiB,EAAsBviB,KAAKyiB,SAC3BF,EAAsBviB,KAAKyiB,QAAQC,eACnCH,EAAsBviB,KAAKyiB,QAAQC,cAAcC,WACjDJ,EAAsBviB,KAAKyiB,QAAQC,cAAcC,UAAUC,YAEpDvuB,KAAKoN,gBACPohB,8BACAC,MAAK,SAAAC,GACF,OAAIA,EACOP,IAEAA,EAAKQ,YAGjBR,S,4SCtBZ,IAAeS,EAAtB,WAMI,WAAYxV,I,4FAAgB,SACxBpZ,KAAK8a,UAAY,IAAUC,SAC3B/a,KAAK6uB,cAAgB7uB,KAAK8a,UAAU/Y,IAAI,KACxC,IAAM+sB,EAAc9uB,KAAK6uB,cAAc7T,QAAnB,oBAAwC5B,EAAxC,gBACpBpZ,KAAKkL,KAAO4jB,EAAY3kB,OAAOnK,KAAK8a,WACpC9a,KAAKib,YAAcf,SAASgB,cAAc,O,UAXlD,O,EAAA,G,EAAA,4BAcU1a,GACFR,KAAKkL,KAAKiQ,KAAK3a,GACfR,KAAKkL,KAAKkQ,cAAcpb,KAAKib,aAC7Bjb,KAAKkL,KAAK6jB,aAjBlB,uCAoBsBvuB,MApBtB,iCAyBQ,MAAM,IAAIW,MAAM,6BAzBxB,gCA6BQ,OAAO,IA7Bf,yCAiCQ,MAAO,SAjCf,4CAqCQ,OAAO,IArCf,yCAyCQ,OAAO,IAzCf,+JAyDQ,OAAOnB,KAAKib,cAzDpB,gCA6DQjb,KAAKkL,KAAK8jB,SACVhvB,KAAKkL,KAAK+jB,cACVjvB,KAAKkL,KAAKgkB,gB,2BA/DlB,M,2lBCJO,IAAeC,EAAtB,yB,4FAAA,SACY,KAAAC,iBAAmB,SACnB,KAAAC,cAAgB,U,UAF5B,O,EAAA,G,EAAA,iDAKsCC,GAC9B,IAAK,IAAIC,KAAOD,OACKE,IAAbF,EAAIC,WACGD,EAAIC,GAInB,OAAOD,IAZf,qDAe0CG,G,cAC5BC,EACkE,QADvD,EACsC,QADtC,EAC2B,QAD3B,EACgB,QADhB,EACQ,QADR,EACbD,aAAW,EAAXA,EAAaE,gBAAQ,eAAEtiB,cAAM,eAAEyN,iBAAS,eAAEwT,iBAAS,eAAEsB,uBAAe,eAAEF,YAC1E,QACIA,GACAA,EAAY,kBACZA,EAAY,iBAAiBxuB,OAAS,KArBlD,yCA6BiCquB,GACzB,IAAMM,EAAenO,aAAaC,QAAQ4N,GAC1C,OAAOM,GAAgBA,EAAa3uB,OAAS,EACvCoU,KAAKY,MAAM2Z,GACX,OAjCd,yCAoCiCN,EAAaD,GAAQ,WAC1CtvB,KAAK8vB,0BACLC,aAAa/vB,KAAK8vB,0BAGtB9vB,KAAK8vB,yBAA2BE,YAAW,WACvC,EAAKF,yBAA2B,KAChCpO,aAAaO,QAAQsN,EAAKja,KAAKC,UAAU+Z,MAC1C,OA5CX,uCAgDQ3nB,EACAsoB,EACA3d,GAEA,IAAM4d,EAAyB,QAAH,OAAWvoB,EAAX,kBAAgD,IAAhBA,EAAoB,GAAK,IAAzD,KACtBgM,EAAmB,GAAH,OAAMsc,EAAN,gBAAiC3d,GAEvD,OAAK2d,GAAwB3d,EAM7B,UAAUtS,KAAKqvB,cAAf,YAAgC1b,EAAhC,YAAoDuc,GALzCvoB,EAAc,EAAd,UACE3H,KAAKqvB,cADP,YACwBa,GACzBlwB,KAAKovB,mBA1DvB,2DAgEmDe,GAC3C,OAAKA,EAIEroB,MAAM0L,QAAQ2c,GAAiBA,EAAgB,CAACA,GAH5C,OAlEnB,6CAwEqC3vB,EAAa8uB,GAC1C,IAAMc,EAAgBpwB,KAAKqwB,0BAA0B7vB,GACrDP,OAAOwE,KAAK2rB,GAAehvB,SAAQ,SAACkvB,GAChC,IAIQ/nB,EAJFgoB,EACFtwB,OAAOuwB,yBAAyBvwB,OAAOwwB,eAAenB,GAAMgB,IAC5DrwB,OAAOuwB,yBAAyBlB,EAAKgB,GACzC,GAAIC,EAWA,OATiBA,EAAKxuB,KAAOwuB,EAAKvnB,MAI9BT,EAAO,EAFKgoB,EAAKxuB,IAAIoZ,KAAKmU,EACZvtB,KAGdwuB,EAAKhwB,QACLgI,EAAO,EAAOgoB,EAAKhwB,QAEfgI,GACJ,IAAK,UACD+mB,EAAIgB,GAAwC,SAA5BF,EAAcE,GAC9B,MACJ,IAAK,SACDhB,EAAIgB,GAAYpf,OAAOkf,EAAcE,IACrC,MACJ,QACIhB,EAAIgB,GAAYF,EAAcE,Y,2BAjGtD,M,oECAO,IAAeI,EAAtB,c,4FAAA,UACoB,EAAAhO,qBAAuB,qBACvB,EAAAiO,+BAAiC,+B,0PCFhCC,E,WAOjB,WAAYtwB,I,4FAAY,SACpBN,KAAKM,KAAOA,E,2DAQZ,MAAO,CACH,CAAE8H,MAAO,OAAQ7H,MAAOqwB,EAAkBC,KAAKvwB,MAC/C,CAAE8H,MAAO,SAAU7H,MAAOqwB,EAAkBE,OAAOxwB,W,oCANvD,OAAON,KAAKM,U,gCAXT,EAAAwK,QAAU,IAAI8lB,EAAkB,WAChC,EAAAC,KAAO,IAAID,EAAkB,QAC7B,EAAAE,OAAS,IAAIF,EAAkB,W,gSCHZG,E,8LACDtD,GACrB,IAAKA,EACD,OAAO,EAGX,IAAMuD,EAAW,IAAIC,OAAO,6BACtBC,EAAY,IAAID,OAClB,wEAEJ,QAAID,EAAShwB,KAAKysB,MAGdyD,EAAUlwB,KAAKysB,K,qCAMD0D,GAClB,IAAKA,EACD,OAAO,EAGX,IAAMC,EACF,sIAGJ,OAFuBD,EAAyBnd,MAAM,QAEhC7P,OAAM,SAACktB,GAAD,OAAQD,EAAWpwB,KAAKqwB,U,gvGCpB5D,SAASC,EAAeC,EAAYC,G,UAE1BC,EAC6D,QADrD,EAC2C,QAD3C,EACmC,QADnC,EADM,EAAG,gBAAH,cAED5H,KAAK2H,UAAyB,eAAEE,cAAM,eAAEC,gBAAQ,QAAI,KAEnEvxB,EAAI8Z,SAASgB,cAAc,KAC/BhB,SAASC,KAAKyX,YAAYxxB,GAC1B,IAAIwW,EAAMhB,OAAOic,IAAIC,gBAAgBP,GACrCnxB,EAAE2xB,KAAOnb,EACTxW,EAAE4xB,SAAWP,EACbrxB,EAAE6xB,QACFrc,OAAOic,IAAIK,gBAAgBtb,GAG/B,SAASub,EAAsBZ,GAC3B,IAAMnkB,EAAkB,IAAU2N,SAAShZ,IAAI,KACzCiE,EAAS,IAAU+U,SAAShZ,IAAI,KACtCwvB,EAAKa,OACA3D,MAAK,SAACpL,GACH,IADQ,EACK/N,KAAKY,MAAMmN,IACkB,GAAlChN,EAFA,EAEAA,aAAcjB,EAFd,EAEcA,QACtB,MAAM,IAAI,IAAYA,EAASiB,MAElCuB,OAAM,SAACpC,GAAkB,IACd6c,EAAc7c,EAAd6c,UACRrsB,EAAO6O,MACH,2BACA,iEAGJ,IAAMyd,EACFD,GAA2B,MAAdA,EACP,0IACA,oEACVjlB,EAAgBM,UAAU,2BAA4B4kB,MAI3D,SAAeC,EAAtB,kC,iDAAO,WAAkCC,GAAlC,sGAAuDC,EAAvD,+BAAyE,MACtEC,EAAc,IAAU3X,SAAShZ,IAAI,MAE/B4wB,WAAY,GAElBC,EAAM,IAAIC,gBACZC,aAAe,OACnBF,EAAIG,mBAAqB,WACrB,GAAuB,IAAnBH,EAAII,WAAkB,CACtB,IAAMzqB,EAAOqqB,EAAIK,kBAAkB,gBAC7BzB,EAA2BoB,EAAIK,kBAAkB,uBACjD1B,EAAO,IAAI2B,KAAK,CAACN,EAAI1d,UAAW,CAAE3M,SAGxC,GADAmqB,EAAYC,WAAY,EACL,MAAfC,EAAInlB,OAGJ,YAFA6jB,EAAeC,EAAMC,GAIzBW,EAAsBZ,KAIX,OAAfkB,GACAG,EAAIO,KAAK,OAAQX,GAAa,GAC9BI,EAAIQ,iBAAiB,eAAgB,oBACrCR,EAAI9sB,KAAKwP,KAAKC,UAAUkd,MAExBG,EAAIO,KAAK,MAAOX,GAAa,GAC7BI,EAAI9sB,QA7BL,4C,00CCzCP,IACMutB,E,YACF,oB,4FAAA,+BAFmB,sD,4RAMd7yB,GACDA,EAAM,OAAa,IAEnB,wCAAWA,Q,8BARgB,M,gpDCKnC,IAAqB8yB,EAArB,WAGI,WAAoBzxB,I,4FAAsB,SAAtB,KAAAA,aAChB7B,KAAKuzB,aAAgB,IAAeC,GAAGC,Q,YAJ/C,S,EAAA,G,EAAA,gCAOaC,EAAaxoB,EAAMyoB,GACxB,IAAI3oB,EAAkB0oB,EACtB1oB,EAAgBE,KAAOA,EACvBF,EAAgB2oB,YAAcA,EAE9B,IAAIzxB,EAAQ,YAAiB8I,GAAiB,GAE9C,OAAOhL,KAAK6B,WAAWE,IAAhB,gCAA8CG,EAAQ,IAAH,OAAOA,GAAU,OAdnF,8BAiBYF,EAAI2xB,GACR,OAAO3zB,KAAK6B,WAAWE,IAAhB,iCAA8CC,GAA9C,OAAoD2xB,EAAc,oBAAsB,OAlBvG,wCAsBQ,MAAO,CACH,CAAE3xB,GAAI,EAAGkb,KAAM,aAAc5c,KAAM,eACnC,CAAE0B,GAAI,EAAGkb,KAAM,aAAc5c,KAAM,eACnC,CAAE0B,GAAI,EAAGkb,KAAM,YAAa5c,KAAM,aAClC,CAAE0B,GAAI,EAAGkb,KAAM,iBAAkB5c,KAAM,uBA1BnD,gCA8BiB0E,EAAY4uB,GAIrB,IAHA,IAAIC,EAAc,EAAI7uB,GAClB8uB,EAAiB,GAEdD,EAAY3yB,QACf4yB,EAAQryB,KAAKoyB,EAAYnpB,OAAO,EAAGkpB,IAEvC,OAAOE,IArCf,kCAwCgB7xB,GAAa,WACjB8xB,EAAY/zB,KAAKg0B,UAAU/xB,EAAK,KACpC,OAAOwJ,EAAQwoB,IAAIF,EAAU5zB,KAAI,SAAA8B,GAC7B,IAAIC,EAAQD,EAAI9B,KAAI,SAAA6B,GAAE,mBAAUA,MAAMG,KAAK,KAC3C,OAAO,EAAKN,WAAWO,OAAhB,iCAAiDF,UA5CpE,+B,EAAA,oCAgD2BgyB,EAAQjyB,GAhDnC,kIAgDkDkyB,EAhDlD,+BAgDyE,GAC7DJ,EAAY/zB,KAAKg0B,UAAU/xB,EAAK,KAjD5C,SAkD4BwJ,EAAQwoB,IAAIF,EAAU5zB,KAAI,SAAA8B,GAC1C,IAAIgU,EAAO,EAAH,CAAKhU,OAAQkyB,GACrB,OAAO,EAAKtyB,WAAWS,IAAhB,8CAA2D4xB,GAAUje,OApDxF,OAwDQ,IANIme,EAlDZ,OAuDYC,EAAmB,GAvD/B,4BAwDQ,EAAmBD,EAAnB,+CAASE,EAAT,QACID,EAAiB5yB,KAAjB,MAAA4yB,EAAgB,EAASC,IAzDrC,kQA2DeD,GA3Df,6E,wKAAA,kFA8DgBpyB,EAAesyB,GACvB,OAAOv0B,KAAKw0B,iBAAiB,SAAUvyB,EAAK,CAAEsyB,qBA/DtD,oCAkEkBtyB,GACV,OAAOjC,KAAKw0B,iBAAiB,WAAYvyB,KAnEjD,uCAsEqBA,EAAewyB,EAAUC,EAAmBC,GACzD,OAAO30B,KAAKw0B,iBAAiB,gBAAiBvyB,EAAK,CAAEwyB,WAAUC,oBAAmBC,eAvE1F,oCA0EkBC,GACV,IAAM1yB,EAAQ,YAAiB0yB,GAAgB,GAC/C,OAAO50B,KAAK6B,WAAWE,IAAhB,uCAAqDG,EAAQ,IAAH,OAAOA,GAAU,OA5E1F,4CA+E0B0L,GAClB,IAAI1L,EAAQ,YAAiB,CAEzBe,eAAgB2K,IACjB,GACH,OAAO5N,KAAK6B,WAAWE,IAAhB,+CAA6DG,EAAQ,IAAH,OAAOA,GAAU,OApFlG,8CAuF4BA,GAOpB,IAAMmE,EAAc,YAAiBnE,GAAO,GAC5C,OAAOlC,KAAK6B,WAAWE,IAAhB,+CAA6DsE,EAAc,IAAH,OAAOA,GAAgB,OA/F9G,+BAkGayH,GACL,OAAKA,EAAK9L,GAGHhC,KAAK6B,WAAWS,IAAhB,iCAA8CwL,EAAK9L,IAAM8L,GAFrD9N,KAAK6B,WAAWU,KAAK,yBAA0BuL,KApGlE,kCAyGgBR,GACR,OAAOtN,KAAK6B,WAAWU,KAAK,8BAA+B+K,KA1GnE,2CA6GyBtL,GACjB,OAAOhC,KAAK6B,WAAWE,IAAhB,iCAA8CC,EAA9C,sBA9Gf,kCAiHgBqM,EAASwmB,GACjB,IAAIzN,EAAU,CACVnlB,IAAKoM,EACLwmB,UAAWA,EACXtB,aAAcvzB,KAAKuzB,cAGvB,OAAOvzB,KAAK6B,WAAWU,KAAK,uCAAwC6kB,KAxH5E,sCA4HoB/Y,EAASymB,GAA6B,IAArBC,EAAqB,wDAClD,SAASC,EAAsBC,GAC3B,OAAOA,EAAOC,OAAO,GAAGC,cAAgBF,EAAOjJ,MAAM,GAGzD,IAAIoJ,EAAiB,GACrBN,EAAO1zB,SAAQ,SAAAi0B,GAAC,OAAID,EAAe3zB,KAAKuzB,EAAsBK,OAE9D,IAAIjO,EAAU,CACVnlB,IAAKoM,EACL+mB,eAAgBA,EAChB7B,aAAcvzB,KAAKuzB,aACnBwB,iBAGA7yB,EAAQ,YAAiBklB,GAAS,GAEtC,OAAOpnB,KAAK6B,WAAWE,IAAhB,kDAAgEG,EAAQ,IAAH,OAAOA,GAAU,OA7IrG,mDAgJiCmM,GACzB,IAAI+Y,EAAU,CACVnlB,IAAKoM,GAGLnM,EAAQ,YAAiBklB,GAAS,GAEtC,OAAOpnB,KAAK6B,WAAWE,IAAhB,8DAA4EG,EAAQ,IAAH,OAAOA,GAAU,OAvJjH,yCA2JuBmM,EAASinB,GAAsC,IAArBP,EAAqB,wDAC1D7yB,EAAQ,YAAiB,CACzBmM,QAASA,EACTinB,kBACA/B,aAAcvzB,KAAKuzB,aACnBwB,kBACD,GACH,qDAAgD7yB,EAAQ,IAAH,OAAOA,GAAU,MAlK9E,qDAsKQmM,EACAknB,EACAC,GACA,IAAMnvB,EAAc,YAChB,CACIgI,UACAknB,iCACAC,mCACAjC,aAAcvzB,KAAKuzB,eACpB,GAEP,2EAAqEltB,Q,2BAjL7E,KAAqBitB,EAAW,aAD/B,I,iCAImC,OAHfA,GAAA,Q,kjCCiBrB,IAAMmC,EAAgB,SAACC,GAAD,wBACPA,EAAQp1B,KADD,YACSo1B,EAAQC,yBAejCC,EAAsC,SACxCC,EACAC,EACAC,GAEA,IAAMC,EAAsB1gB,KAAKY,MAAM2f,EAAc3tB,QAC/C+tB,EAA2B3gB,KAAKY,MAAM4f,EAAa5tB,QAEzD,GAAI2tB,EAAc1W,kBAAoB6W,EAAoB90B,OACtD,MAAM,IAAI,IAAY,gEAAiE,GAE3F,IAAK40B,EAAa3W,kBAAoB8W,EAAyB/0B,OAC3D,MAAM,IAAI,IAAY,4DAA6D,GAGvF,IAAMg1B,EAAoB,GAEpBC,EAAuB,CACzB9d,MAAOod,EAAcI,GACrB1mB,WAAY0mB,EAAcv1B,KAC1B81B,SAAU,SAAC51B,GAAD,OACNq1B,EAAcF,yBAA2Bn1B,EAAOyV,KAAK0f,wBACrDI,GACJM,WAAY,yBACZC,iBAAiB,EACjBC,iBAAkB,CACdruB,OAAQ8tB,GAEZxd,YAAa,SAAChY,GAAD,OACTA,EAAOyV,KAAK+I,SAAWxe,EAAOyV,KAAK+I,SAAS6W,EAAcv1B,MAAQ,MACtEk2B,YAAa,SAACh2B,GAAU,IACZi2B,EAAaj2B,EAAbi2B,SACFC,EA7Ca,SAACC,EAAiCC,GAC7D,IAAMC,EAAiBF,EAAensB,MAAK,SAACssB,GAAD,OAAQA,EAAGnX,SAAWiX,KACjE,IAAKC,EACD,MAAM,IAAI,IAAJ,iCAA0CD,EAA1C,eAAoE,GAG9E,OAAOC,EAAejX,MAuCKmX,CACfd,EACAQ,EAASnuB,YAMb,OAHA9H,EAAOyV,KAAK+I,SAAS6W,EAAcv1B,MAAQm2B,EAASnuB,WACpD9H,EAAOyV,KAAK+I,SAAS8W,EAAax1B,MAAQo2B,EAAWpuB,YAE9C,GAEX0uB,eAAgB,CACZ,gBAAiB,SAACx2B,GAAD,OACbq1B,EAAcF,yBAA2Bn1B,EAAOyV,KAAK0f,wBACzD,2BAA4B,kBAAM,KAGpCsB,EAAsB,CACxB5e,MAAOod,EAAcK,GACrB3mB,WAAY2mB,EAAax1B,KACzB81B,SAAU,SAAC51B,GAAD,OACNs1B,EAAaH,yBAA2Bn1B,EAAOyV,KAAK0f,wBACpDI,GACJvd,YAAa,SAAChY,GAAD,OACTA,EAAOyV,KAAK+I,SAAWxe,EAAOyV,KAAK+I,SAAS8W,EAAax1B,MAAQ,MACrEk2B,YAAa,SAACh2B,GAGV,OAFAA,EAAOyV,KAAK+I,SAAS8W,EAAax1B,MAAQE,EAAOi2B,SAASnuB,YAEnD,GAEX0uB,eAAgB,CACZ,gBAAiB,SAACx2B,GAAD,OACbs1B,EAAaH,yBAA2Bn1B,EAAOyV,KAAK0f,wBACxD,0BAA2B,kBAAM,KAOzC,OAHAO,EAAQz0B,KAAK00B,GACbD,EAAQz0B,KAAKw1B,GAENf,GAGLgB,EAAyC,SAC3CC,EACApB,GAEA,IAAMG,EAAoB,GAiC1B,OAhCAiB,EAAsB/1B,SAAQ,SAACg2B,GAC3BA,WAAIpY,SAAS5d,SAAQ,SAACs0B,GAClB,IAAM2B,EAAiB,CACnBhf,MAAOod,EAAcC,GACrBvmB,WAAYumB,EAAQp1B,KACpB81B,SAAU,SAAC51B,GAAD,OACN42B,EAAGp1B,KAAOxB,EAAOyV,KAAK0f,wBAA0BI,GACpDO,iBAAiB,EACjB9d,YAAa,SAAChY,GACV,OAAO42B,EAAGp1B,KAAOxB,EAAOyV,KAAK0f,wBACvBn1B,EAAOyV,KAAK+I,SACRxe,EAAOyV,KAAK+I,SAAS0W,EAAQp1B,MAEjC,MAEVk2B,YAAa,SAACh2B,GACV,OAAI42B,EAAGp1B,KAAOxB,EAAOyV,KAAK0f,yBAI1Bn1B,EAAOyV,KAAK+I,SAAS0W,EAAQp1B,MAAQE,EAAOi2B,SAASnuB,YAC9C,IAEX0uB,eAAgB,CACZ,gBAAiB,SAACx2B,GAAD,OAAY42B,EAAGp1B,KAAOxB,EAAOyV,KAAK0f,0BAI3DO,EAAQz0B,KAAK41B,SAIdnB,GAGEoB,EAAb,WAII,WAAYC,I,4FAAoD,SAC5Dv3B,KAAKw3B,gBAAkBD,EACvBv3B,KAAKy3B,SAAW,G,UANxB,O,EAAA,G,EAAA,4CAcQC,EACA3B,GAEA,IAAM4B,EAAgB,IAAIhvB,IACtB+uB,aAA6B,EAA7BA,EAA+Bv3B,KAAI,SAACyJ,GAAD,MAAO,CAACA,EAAEguB,aAAchuB,EAAEzC,iBAG3D0wB,EAAc,CAChB1oB,WAAY,kBACZkJ,MAAO,kBACPyf,yBAAyB,EACzBC,qCAAqC,EACrCC,mBAAmB,EACnB5B,SAAUL,EACVM,WAAY,yBACZC,iBAAiB,EACjBC,iBAAkB,CACdruB,OAAQ,EAAIyvB,EAAczvB,WAE9BsQ,YAAa,SAAChY,GAAD,OAA+Bm3B,EAAc51B,IAAIvB,EAAOyV,KAAK2hB,eAC1EpB,YAAa,SAACh2B,GAOV,OANAm3B,EAAcv2B,SAAQ,SAAC+G,EAAG9G,GAClB8G,IAAM3H,EAAOi2B,WACbj2B,EAAOyV,KAAK2hB,aAAev2B,OAI5B,GAEX21B,eAAgB,CACZ,eAAgB,SAACx2B,GAAD,OAAaA,EAAOyV,KAAK2hB,gBAMjD,OAFA53B,KAAKy3B,SAASh2B,KAAKo2B,GAEZ73B,OAlDf,2CAqDgC+1B,GACxB,IACMkC,EAAoB,IAAIprB,KAAK,KAAM,EAAG,GACtCqrB,EAAoB,IAAO,IAAIrrB,MAAQsrB,QAAQ,OAAOlqB,IAAI,EAAG,QAAQmqB,SACrEP,EAAc,CAChB1oB,WAAY,kBACZkJ,MAAO,kBACP+d,SAAUL,EACVO,iBAAiB,EACjB9d,YAAa,SAAChY,GAAD,OAAY,IAAY63B,OAAO73B,EAAOyV,KAAKqiB,iBACxD9B,YAAa,SAACh2B,GACV,IAAIqnB,EAAO,IAAOrnB,EAAOi2B,SAVd,sBAeX,OAJAj2B,EAAOyV,KAAKqiB,eAAiBzQ,EAAK0Q,UAAUN,EAAmBC,GACzDrQ,EAAKuQ,SACL,MAEC,GAEX7B,iBAAkB,CACd2B,qBAEJM,mBAAoB,SAACh4B,GAIjB,MAAO,CACHi4B,UAJgBj4B,EAAZk4B,QACAlX,YAIYmX,iBAAmB,IAAsBC,OAC/C,IACA,MAGlB5B,eAAgB,CACZ,eAAgB,SAACx2B,GAAD,OAAaA,EAAOyV,KAAKqiB,kBAMjD,OAFAt4B,KAAKk2B,QAAQz0B,KAAKo2B,GAEX73B,OA5Ff,iDA+FsC+1B,GAAmB,WAC3C8B,EAAc,CAChB1oB,WAAY,wBACZkJ,MAAO,wBACP+d,SAAUL,EACVM,WAAY,yBACZC,iBAAiB,EACjBC,iBAAkB,CACdruB,OAAQ,EACDlI,KAAKw3B,gBAAgBqB,oCAAoC14B,KAAI,SAACob,GAAD,OAAOA,EAAEnT,WAGjFoQ,YAAa,SAAChY,GACV,IAAMs4B,EACF,EAAKtB,gBAAgBqB,oCAAoCruB,MACrD,SAAC+Q,GAAD,OAAOA,EAAEhb,QAAUC,EAAOyV,KAAK0f,0BAGvC,OAAOmD,aAAc,EAAdA,EAAgBv4B,QAAS2Q,OAAO4nB,aAAc,EAAdA,EAAgBv4B,OAAS,EAC1Du4B,EAAe1wB,MACf,MAEVouB,YAAa,SAACh2B,GACV,IAAM0P,EAAe1P,EAAOi2B,SAEtB7X,EACF,EAAK4Y,gBAAgBuB,8BAA8B7oB,GACjDylB,EAAyB/W,aAAoB,EAApBA,EAAsB5c,GAE/Cg3B,EAAc,GAUpB,OATApa,WAAsBI,SAAS5d,SAAQ,SAAC2H,GAAD,OAAQiwB,EAAYjwB,EAAEzI,MAAQ,QAErEE,EAAOyV,KAAK0f,uBAAyBA,EACrCn1B,EAAOyV,KAAK+I,SAAWga,EAEnBrD,IACAn1B,EAAOyV,KAAK9O,YAAc,OAGvB,GAEX8xB,mBAAoB,SAACC,GAAgC,IACzCC,EAA4BD,EAA5BC,SAAU1C,EAAkByC,EAAlBzC,SAAU2C,EAAQF,EAARE,IAC5B,GAAID,IAAa1C,EAAjB,CAIA,IAAM4C,EACF,EAAK7B,gBAAgBuB,8BAA8BI,GACjDG,EACF,EAAK9B,gBAAgBuB,8BAA8BtC,GACjD8C,EAA4BF,aAAuB,EAAvBA,EAAyBr3B,GACrDw3B,EAA4BF,aAAuB,EAAvBA,EAAyBt3B,GAErDy3B,EAAcL,EAAIM,gBAClBC,EAA2B,EAAKC,6BAClCL,EACAE,GAGEI,EAAuB,EAAKC,0BAC9BN,EACAC,EACA1D,GAGJ4D,EAAejvB,OAAf,MAAAivB,EAAc,CAAQA,EAAez4B,OAAS,EAAG,GAAnC,SAAyC24B,KACvDT,EAAIW,cAAcJ,MAM1B,OAFA35B,KAAKk2B,QAAQz0B,KAAKo2B,GAEX73B,OAxKf,wCA2K6B+1B,GACrB,IAAMsB,EAAiB,CACnBloB,WAAY,qBACZC,MAAO,cACPgnB,SAAU,SAAC51B,GAAD,OACLA,EAAOyV,KAAK0f,wBAA0BI,GAC3CM,WAAY,wBACZC,iBAAiB,EACjBC,iBAAkB,CACdyD,UAAW,IACXC,KAAM,GACNC,KAAM,IAEVlD,eAAgB,CACZ,gBAAiB,SAACx2B,GAAD,OAAYA,EAAOyV,KAAK0f,wBACzC,eAAgB,SAACn1B,GAAD,OACXA,EAAOyV,KAAK0f,yBAA2Bn1B,EAAOyV,KAAK9O,eAMhE,OAFAnH,KAAKk2B,QAAQz0B,KAAK41B,GAEXr3B,OAjMf,oCAoMyBm6B,GACjB,IAAK,IAAI5K,KAAOvvB,KAAKw3B,gBAAgB4C,mCAAoC,QACrE,EAAAp6B,KAAKy3B,UAASh2B,KAAd,UACOm0B,EACC51B,KAAKw3B,gBAAgB6C,oBAAoB9K,GACzCvvB,KAAKw3B,gBAAgB8C,mBAAmB/K,GACxC4K,KAKZ,OAAOn6B,OA/Mf,uCAkN4Bm6B,GAAoB,MAQxC,OAPA,EAAAn6B,KAAKy3B,UAASh2B,KAAd,UACOy1B,EACCl3B,KAAKw3B,gBAAgB+C,+BACrBJ,KAIDn6B,OA1Nf,kCA8NQ03B,EACAyC,EACAK,GAAiC,MAK3BC,EAAqB,CACvB,CACItrB,WAAY,YACZC,MAAO,YACPgnB,SAAU+D,EACV9D,WAAY,yBACZC,iBAAiB,EACjBC,iBAAkB,CACdruB,OAXYsyB,EAAwB,YACtC,KADsC,EACR,MAClC,MAYF,CACIrrB,WAAY,eACZinB,UAAU,EACV5d,YAAa,SAAChY,GACV,IAAMk6B,EAAiBhD,aAA6B,EAA7BA,EAA+BltB,MAClD,SAAC4sB,GAAD,OAAQA,EAAGQ,eAAiBp3B,EAAOyV,KAAK2hB,gBAG5C,OAAO8C,EACqBA,EAAeC,cA9WpCx6B,KAAI,SAACy6B,GAAD,gBAAWA,EAAG5sB,WAAWkP,SAAQ/a,KAAK,MA+W3C,QAOlB,OAFA,EAAAnC,KAAKk2B,SAAQz0B,KAAb,QAAqBg5B,GAEdz6B,OAjQf,mDAqQQ21B,EACA8D,G,QAEMoB,EAEL,QAF2B,EAAG76B,KAAKw3B,gBAAgB7S,QAAQna,MACxD,SAACzB,GAAD,OAAOA,EAAE4sB,yBAA2BA,YACvC,eAAE3W,SAEH,GAAI6b,GAA0B56B,OAAOwE,KAAKo2B,GAAwB35B,OAC9D,OAAOu4B,EAEX,IAAMqB,EACkD,QADpC,EAAG96B,KAAKw3B,gBACvBuD,4BAA4BpF,UAAuB,eAClD3W,SAAS7e,KAAI,SAACirB,GAAD,OAAQqK,EAAcrK,MAEzC,OAAOqO,EAAY34B,QAAO,SAACk6B,GAAD,QAASF,aAAc,EAAdA,EAAgBj2B,SAASm2B,EAAE,aAnRtE,gDAuRQrF,EACA8D,EACAU,GAEA,IAAKxE,EACD,MAAO,GAOX,GAJwB8D,EAAYjvB,MAAK,SAAC+Q,GAAD,OACrCA,EAAC,MAAU0f,SAAX,WAAwBtF,OAIxB,MAAO,GAGX,IAAMkE,EAAuB,GACvBqB,EACFl7B,KAAKw3B,gBAAgB2D,kCAAkCxF,GACrDyF,EACFp7B,KAAKw3B,gBAAgB6D,qCAAqC1F,GAE9D,GAAIuF,GAAkBA,EAAelc,SAAS9d,OAAQ,CAClD,IAAMwwB,EAAS1xB,KAAKw3B,gBAAgB8D,oBAAoBJ,EAAelc,UACvE,IAAK,IAAIkJ,KAAKwJ,EAAQ,CAClB,IAAM/R,EAAS3f,KAAKw3B,gBAAgB6C,oBAAoBnS,EAAGwJ,GACrD9R,EAAQ5f,KAAKw3B,gBAAgB8C,mBAAmBpS,EAAGwJ,GACzDmI,EAAWp4B,KAAX,MAAAo4B,EAAU,EAASjE,EAAoCjW,EAAQC,EAAOua,MAU9E,OANIiB,GAAqBA,EAAkBpc,SAAS9d,QAChD24B,EAAWp4B,KAAX,MAAAo4B,EAAU,EACH3C,EAAuC,CAACkE,GAAoBjB,KAIhEN,IA5Tf,8BAUQ,OAAO75B,KAAKy3B,c,2BAVpB,M,8OC9JqB8D,E,8LAUb,IAJ+D,IAA5Cr6B,EAA4C,uDAAnCsc,KAAKge,MAAsB,EAAhBhe,KAAKie,UAAgB,EACxDl7B,EAAQ,GACRm7B,EAAQ,uCAEHr7B,EAAI,EAAGA,EAAIa,EAAQb,IACxBE,GAASm7B,EAAMle,KAAKge,MAAMhe,KAAKie,SAAWC,EAAMx6B,SAEpD,OAAOX,M,yXCNMo7B,E,WAsBjB,c,4FAAA,SACI37B,KAAK47B,uBAAyB,IAAuBC,WACrD77B,KAAK87B,SAAW,EAChB97B,KAAK+7B,sBAAwB,GAC7B/7B,KAAKg8B,SAAW,wBAChBh8B,KAAKi8B,eAAiB,GACtBj8B,KAAKk8B,mBAAqB,GAE1Bl8B,KAAKm8B,cAAgB,IAAItvB,KACzB7M,KAAKo8B,iBAAmBp8B,KAAKq8B,4B,0DAqEzB,WACAC,EAAW,GAWf,OAVAr8B,OAAOwE,KAAKzE,MAAMoB,SAAQ,SAAAC,GACF,MAAhBA,EAAE6zB,OAAO,KACToH,EAASj7B,GAAK,EAAKA,OAI3Bi7B,EAAQ,UAAgBt8B,KAAKsnB,UAC7BgV,EAAQ,QAAct8B,KAAKunB,QAC3B+U,EAAQ,cAAoBt8B,KAAKu8B,cAE1BD,I,mCAGEnV,GACJA,IAGLnnB,KAAKg8B,SAAW7U,EAAO6U,SACvBh8B,KAAKsnB,UAAYH,EAAOG,UACxBtnB,KAAKunB,QAAUJ,EAAOI,QACtBvnB,KAAKw8B,kBAAoBrV,EAAOqV,kBAChCx8B,KAAK+7B,sBAAwB5U,EAAO4U,sBACpC/7B,KAAK87B,SAAW3U,EAAO2U,SACvB97B,KAAKu8B,cAAgBpV,EAAOoV,cAC5Bv8B,KAAK47B,uBAAyBzU,EAAOyU,uBACrC57B,KAAKy8B,gBAAkBtV,EAAOsV,gBAC9Bz8B,KAAK08B,gBAAkBvV,EAAOuV,gBAC9B18B,KAAK28B,iBAAmBxV,EAAOwV,iBAC/B38B,KAAK48B,mBAAqBzV,EAAOyV,mBACjC58B,KAAK68B,kBAAoB1V,EAAO0V,kBAChC78B,KAAK88B,gBAAkB3V,EAAO2V,gBAC9B98B,KAAK+8B,kBAAoB5V,EAAO4V,qB,kDAIhC,IAAIC,EAAQ,IAAInwB,KACZowB,EAAgB,IAAIpwB,KAGxB,OAFAowB,EAAcC,QAAQF,EAAMpR,UAAY,GAEjCqR,I,gCA1GP,OAAOj9B,KAAKm9B,Y,aAGK7V,GACjBtnB,KAAKm9B,WAAa7V,EACdA,IACAtnB,KAAKo9B,eAAiB,IAAIvwB,KAAKya,M,oCAKnC,OAAOtnB,KAAKo9B,gB,aAGSjB,GACrBn8B,KAAKo9B,eAAiBjB,EACtBn8B,KAAKm9B,WAAa,IAAOhB,GAAelwB,OAAO,gB,8BAI/C,OAAOjM,KAAKq9B,U,aAGG9V,GACfvnB,KAAKq9B,SAAW9V,EACZA,IACAvnB,KAAKs9B,aAAe,IAAIzwB,KAAK0a,M,kCAKjC,OAAOvnB,KAAKs9B,c,aAGOC,GACnBv9B,KAAKs9B,aAAeC,EACpBv9B,KAAKq9B,SAAW,IAAOE,GAAatxB,OAAO,gB,oCAI3C,OAAOjM,KAAKi8B,gB,aAGSM,GACrBv8B,KAAKi8B,eAAiBM,GAClBA,aAAa,EAAbA,EAAer7B,UACflB,KAAKk8B,mBAAqBK,EAAcp8B,KAAI,SAAA4qB,GAAC,OAAI,IAAIle,KAAJ,UAAYke,GAAZ,OAAgBA,EAAEkQ,SAAS,KAAO,GAAK,Y,wCAK5F,OAAOj7B,KAAKk8B,oB,aAGasB,GACzBx9B,KAAKk8B,mBAAqBsB,GACtBA,aAAiB,EAAjBA,EAAmBt8B,UACnBlB,KAAKi8B,eAAiBuB,EAAkBr9B,KAAI,SAAA4qB,GAAC,OAAI,IAAOA,GAAG9e,OAAO,oB,sCAKtE,OAAOjM,KAAKo8B,sB,moBClGpB,IAAqBqB,EAArB,WAGI,WAAY57B,I,4FAAsB,SAC9B7B,KAAK6B,WAAaA,E,UAJ1B,W,EAAA,G,EAAA,kLAQoC7B,KAAK6B,WAAWE,IAAI,qBARxD,cAQY27B,EARZ,yBASeA,GATf,qRAagD,QADbA,EAZnC,+BAYuE,MAZvE,gCAa8D19B,KAAK29B,qBAbnE,8CAa0FD,EAb1F,cAaYE,EAbZ,uBAeeA,EAAaz9B,KAAI,SAAA09B,GAAE,MAAK,CAC3Bz1B,MAAOy1B,EAAG77B,GACVzB,MAAOs9B,EAAG77B,QAjBtB,iG,2BAAA,KAAqBy7B,EAAqB,aADzC,I,iCAI2B,OAHPA,GAAA,Q,+TCCrB,IAAqBK,EAArB,WACI,WAAoBj8B,I,4FAAsB,SAAtB,KAAAA,a,UADxB,O,EAAA,G,EAAA,uCAGoBk8B,EAAoB7yB,EAAe4H,GAC/C,IAAI9H,EAAkB+yB,EAElB7yB,IAAMF,EAAgBE,KAAOA,GAE7B4H,IAAc9H,EAAgB8H,aAAeA,GAEjD,IAAI5Q,EAAQ,YAAiB8I,GAAiB,GAE9C,OAAOhL,KAAK6B,WAAWE,IAAhB,uCAAoDG,EAAQ,IAAH,OAAOA,GAAU,OAZzF,qCAemBF,GACX,OAAOhC,KAAK6B,WAAWE,IAAhB,wCAAqDC,MAhBpE,yCAmBuBC,GACf,IAAIC,EAAQD,EAAI9B,KAAI,SAAC6B,GAAD,mBAAcA,MAAMG,KAAK,KAC7C,OAAOnC,KAAK6B,WAAWO,OAAhB,wCAAwDF,MArBvE,2CAwByBD,EAAesyB,GAChC,OAAOv0B,KAAK6B,WAAWS,IAAI,yCAA0C,CAAEL,MAAKsyB,qBAzBpF,2CA4ByB3mB,EAAiBowB,GAClC,IAAI97B,EAAQ,YACR,CAEIe,eAAgB2K,EAChBowB,eAAgBA,IAEpB,GAEJ,OAAOh+B,KAAK6B,WAAWE,IAAhB,8CACoCG,EAAQ,IAAH,OAAOA,GAAU,OAtCzE,sCA0CoB+7B,GACZ,OAAKA,EAAYj8B,GAGVhC,KAAK6B,WAAWS,IAAhB,wCAAqD27B,EAAYj8B,IAAMi8B,GAFnEj+B,KAAK6B,WAAWU,KAAK,gCAAiC07B,KA5CzE,+CAkDQ,MAAO,CACH,CAAEj8B,GAAI,EAAGkb,KAAM,aAAc5c,KAAM,eACnC,CAAE0B,GAAI,EAAGkb,KAAM,aAAc5c,KAAM,eACnC,CAAE0B,GAAI,EAAGkb,KAAM,YAAa5c,KAAM,aAClC,CAAE0B,GAAI,EAAGkb,KAAM,WAAY5c,KAAM,YACjC,CAAE0B,GAAI,EAAGkb,KAAM,WAAY5c,KAAM,eAvD7C,0CA2DwB49B,EAAwBC,GACxC,IAAKD,EAAuBE,cACxB,KAAM,oDAEV,IAAM94B,EAAW,IAAIC,SAMrB,OALAD,EAASG,OAAO,gBAAiBy4B,EAAuBE,eACxD94B,EAASG,OAAO,oBAAqBy4B,EAAuBG,mBAExDF,GAAiB74B,EAASG,OAAO,OAAQ04B,GAEtCn+B,KAAK6B,WACP6D,cADE,wCAEkCw4B,EAAuBE,cAFzD,WAIFE,SACA14B,YAAYN,GACZQ,SA3Eb,4CA8E0B9D,EAAIu8B,GACtB,OAAOv+B,KAAK6B,WAAWO,OAAhB,wCAC8BJ,EAD9B,kBAC0Cu8B,MAhFzD,kDAoFgCv8B,GACxB,OAAOhC,KAAK6B,WAAWE,IAAhB,wCAAqDC,EAArD,sBArFf,0CAwFwBiJ,GAChB,OAAOjL,KAAK6B,WAAWE,IAAhB,2BAAwCkJ,EAAxC,kB,2BAzFf,KAAqB6yB,EAAkB,aADtC,I,iCAEmC,OADfA,GAAA,O,4xCCEd,IAAMU,EAAb,YAMI,0B,4FAAA,UACI,2BACKC,eAAiB,IAAcC,IAFxC,E,UANJ,O,kOAAA,M,EAAA,G,EAAA,+BAwBQ1+B,KAAKy+B,eAAiB,IAAcC,MAxB5C,uCA4BQ,MAAO,CACHC,cAAe3+B,KAAKy+B,kBA7BhC,sCAiCoBj+B,GACZ,0DAA6BA,EAAQR,QAlC7C,oCAYQ,OAAOA,KAAKy+B,gBAZpB,aAe6BG,GACrB5+B,KAAKy+B,eAAiBG,GAAmB,IAAcF,MAhB/D,4BAoBQ,OAAOxtB,SAASlR,KAAKy+B,gBAAkBz+B,KAAKy+B,iBAAmB,IAAcC,U,2BApBrF,GACY,M,kCCRZ,IAAKG,EASC,SAAUC,IACZ,MAAO,CACH,CAAEv+B,MAAOs+B,EAAUE,cAAe32B,MAAO,iBACzC,CAAE7H,MAAOs+B,EAAUG,IAAK52B,MAAO,OAC/B,CAAE7H,MAAOs+B,EAAUI,OAAQ72B,MAAO,UAClC,CAAE7H,MAAOs+B,EAAUK,KAAM92B,MAAO,SAdxC,2CAAKy2B,GACD,+BACA,YACA,kBACA,cAJJ,CAAKA,MAAS,KAOC,O,kCCPf,sCAAMM,EAAmB,SAAC3+B,EAAgC4+B,GACtD,IAAMC,EAAoB7+B,EAAO44B,IAAIkG,uBACrC,GAA0B,IAAtBD,EAAJ,CAGID,EAAWC,IACXD,EAAW,GAGf,IAAMG,EAAuC,IAAtBF,EAA0B,EAAID,EAErDpP,YAAW,W,MACDwP,EAAuBh/B,EAAO44B,IAAIqG,uBAAuBF,GAC/DC,EAAqBE,aAAY,IAEU,QAAvC,EAAAF,EAAqB7W,0BAAkB,eAAEznB,QAAS,GAClDs+B,EAAqB7W,mBAAmB,GAAG9f,OAE3C22B,EAAqB7W,mBAAmB,GAAG+W,aAAY,KAE5D,M,4pDCdA,IAAMC,EAAb,YAKI,0B,4FAAA,UACI,2BACKC,0BAA4B,IAAI,IAFzC,E,UALJ,O,kOAAA,M,EAAA,G,EAAA,+BAWQ5/B,KAAK4/B,0BAA0B14B,UAXvC,uCAmBQ,O,+VAAA,IACOlH,KAAK4/B,0BAA0BztB,iBADtC,CAEI0tB,UAAWriB,KAAKge,OAAO,IAAI3uB,MAAQizB,UAAY,SArB3D,sCAyBoBt/B,GACZ,0DAA6BA,EAAQR,QA1B7C,4BAeQ,OAAOA,KAAK4/B,0BAA0BlsB,W,2BAf9C,GAAkE,M,geCJ5D,SAAUqsB,EAAiBC,GAC7B,O,+VAAA,EACIC,YAAY,EACZC,OAAQ,GACRC,WAAY,QACZ1a,OAAQ,EACR2a,cAAe,KACZJ,K,gwCCDJ,IAAMK,EAAb,YAMI,0B,4FAAA,UACI,2BAEKC,YAAc,GACnB,EAAKC,mBAAqB,MAJ9B,E,UANJ,O,kOAAA,M,EAAA,G,EAAA,+BAuDQvgC,KAAKsgC,YAAc,GACnBtgC,KAAKugC,mBAAqB,QAxDlC,uCA4DQ,MAAO,CACH30B,OAAQ5L,KAAK4L,OACbgH,QAAS5S,KAAK4S,WA9D1B,sCAkEoBpS,GACPA,IAMDA,EAAOqC,QACPrC,EAAOoL,OAAS9D,MAAM0L,QAAQhT,EAAOqC,OAASrC,EAAOqC,MAAQ,CAACrC,EAAOqC,QAErErC,EAAOmS,SACPnS,EAAOoS,QAAU9K,MAAM0L,QAAQhT,EAAOmS,QAAUnS,EAAOmS,OAAS,CAACnS,EAAOmS,SAG5E,0DAA6BnS,EAAQR,SAhF7C,wCAgBQ,OAAOA,KAAKugC,oBAhBpB,aAmBiCC,GACzBxgC,KAAKugC,mBAAqBC,EAC1BxgC,KAAKsgC,YAAc,KArB3B,6BAyBQ,MAAmC,QAA5BtgC,KAAKugC,mBAA+BvgC,KAAKsgC,YAAc,IAzBtE,aA4BsBr+B,GACdjC,KAAKugC,mBAAqB,MAC1BvgC,KAAKsgC,YAAcr+B,GAAO,KA9BlC,8BAkCQ,MAAmC,SAA5BjC,KAAKugC,mBAAgCvgC,KAAKsgC,YAAc,IAlCvE,aAqCuBr+B,GACfjC,KAAKugC,mBAAqB,OAC1BvgC,KAAKsgC,YAAcr+B,GAAO,KAvClC,iCA2CQ,OAAOjC,KAAKsgC,aA3CpB,aA8C0Br+B,GAClBjC,KAAKsgC,YAAcr+B,GAAO,KA/ClC,4BAmDQ,OAAQiP,SAASlR,KAAKsgC,YAAYp/B,a,2BAnD1C,G,UAAwC,I,kCCVxC,IAAKu/B,GAAL,SAAKA,GACD,2BACA,yBACA,yBACA,qBACA,mBACA,iBANJ,CAAKA,MAA8B,KASpB,O,0QCNMC,E,0LACItgC,EAAcijB,GAC/B,GAAU,OAANjjB,EACA,OAAQ,EAEZ,GAAU,OAANijB,EACA,OAAO,EAEX,IAAIxG,EAA4B,cAKhC,OAHaA,EAAQ8jB,WAAU,SAAAplB,GAAC,OAAIA,EAAEhb,QAAUH,KACnCyc,EAAQ8jB,WAAU,SAAAplB,GAAC,OAAIA,EAAEhb,QAAU8iB,S,+DCdxD,IAAIljB,EAAM,CACT,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,gBAAiB,OACjB,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,O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","file":"app.0a74959344ca2067cec4.chunk.js","sourcesContent":["import Attribute from 'location-testing/attribute';\r\nimport { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface MapAttributesQuery {\r\n mapAttributes: any;\r\n}\r\n\r\nexport class MapAttributesQueryFilters extends BaseQueryFilter\r\n implements QueryFiltered {\r\n\r\n private _key = 'mapAttributes';\r\n mapAttributes: Attribute[];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.mapAttributes = [];\r\n }\r\n\r\n public get count(): number {\r\n return this.mapAttributes.length;\r\n }\r\n\r\n reset(): void {\r\n this.mapAttributes = [];\r\n }\r\n\r\n getQueryParams(): MapAttributesQuery {\r\n return Object.assign(\r\n {},\r\n ...this.mapAttributes.map((a: Attribute, i: number) => ({ [`${this._key}[${i}].name`]: a.name })),\r\n ...this.mapAttributes.map((a: Attribute, i: number) => ({ [`${this._key}[${i}].value`]: a.value })),\r\n );\r\n }\r\n\r\n setFilterValues(params: any): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const regexNameKey = /mapAttributes\\[[0-9]+\\].name/gm;\r\n const regexValueKey = /mapAttributes\\[[0-9]+\\].value/gm;\r\n const fooParams = Object.entries(params).map(([k]) => k);\r\n const nameGroups = fooParams.filter(p => regexNameKey.test(p));\r\n const valueGroups = fooParams.filter(p => regexValueKey.test(p));\r\n if (nameGroups.length !== valueGroups.length) {\r\n throw new Error('The map attribute name and value params do not match.');\r\n }\r\n\r\n nameGroups.forEach((k: string) => {\r\n const valueKey = k.substring(0, k.indexOf('.')) + '.value';\r\n this.mapAttributes.push({\r\n name: params[k], value: params[valueKey]\r\n });\r\n })\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class FaqGroupService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getFaqGroups(includeFaqs) {\r\n return this.httpClient.get(`help/faq-groups/?includeFaqs=${!!includeFaqs}`);\r\n }\r\n\r\n getFaqGroup(id) {\r\n return this.httpClient.get(`help/faq-groups/${id}`);\r\n }\r\n\r\n deleteFaqGroups(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`help/faq-groups?${query}`);\r\n }\r\n\r\n saveFaqGroup(faqGroup) {\r\n if (!faqGroup.id)\r\n return this.httpClient.post('help/faq-groups/', faqGroup);\r\n\r\n return this.httpClient.put(`help/faq-groups/${faqGroup.id}`, faqGroup);\r\n }\r\n\r\n updateFaqGroupOrdinals(idOrdinalMap) {\r\n return this.httpClient.patch(`help/faq-groups/`, idOrdinalMap);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport { StatusQuery } from 'status/status-query-filters';\r\nimport TestFilters from './test-filters';\r\nimport TestResultSummary from './test-result-summary';\r\n\r\n@autoinject\r\nexport default class RequestService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getTestResultCounts(statusQuery: StatusQuery): Promise {\r\n var query = buildQueryString(statusQuery, true);\r\n\r\n return this.httpClient.get(\r\n `tests/all/result-counts/${query ? `?${query}` : ''}`,\r\n ) as any as Promise;\r\n }\r\n\r\n getTestResultSummaries(filters: TestFilters): Promise {\r\n var query = buildQueryString(filters, true);\r\n return this.httpClient.get(`tests?${query}`) as any as Promise;\r\n }\r\n\r\n fetchConfirmationTestResultValues(mapId: number, testMethodGroup: string): Promise {\r\n var query = buildQueryString({ mapId, testMethodGroup });\r\n\r\n return this.httpClient.get(`tests/confirmation-values?${query}`) as unknown as Promise<\r\n string[]\r\n >;\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\n\r\n@inject(HttpClient)\r\nexport default class PointTypeService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getPointTypes(filters) {\r\n var query = buildQueryString(filters);\r\n return this.httpClient.get(`location-testing/point-types${(query ? `?${query}` : '')}`);\r\n }\r\n\r\n getOrganizationPointTypes(organizationId) {\r\n return this.httpClient.get(`location-testing/point-types/organization/${organizationId}`);\r\n }\r\n}\r\n","enum PlanCoverageType {\r\n Collected = 'Collected',\r\n Scheduled = 'Scheduled',\r\n CollectedAndScheduled = 'CollectedAndScheduled',\r\n Unused = 'Unused',\r\n}\r\n\r\nexport const planCoverageTypes: Record = {\r\n Collected: PlanCoverageType.Collected,\r\n Scheduled: PlanCoverageType.Scheduled,\r\n CollectedAndScheduled: 'Collected and Scheduled',\r\n Unused: PlanCoverageType.Unused,\r\n};\r\n\r\nexport function toPlanCoverageType(planCoverageTitle: string): PlanCoverageType {\r\n return planCoverageTitle !== 'Collected and Scheduled' \r\n ? PlanCoverageType[planCoverageTitle] \r\n : PlanCoverageType.CollectedAndScheduled;\r\n}\r\n\r\n","import { computedFrom } from 'aurelia-framework';\r\nimport DataGridSelectAllItem from './data-grid-select-all-item';\r\n\r\n/*\r\n* NOTE: The values you pass into _filterKeys\r\n* do not currently support TS get() (TODO).\r\n* Map your filter keys to the underlying field name.\r\n* e.g. use '_name' for 'name' when name is 'public get name()'\r\n*/\r\nexport default class DataGridSelectAll {\r\n private _allSelected: boolean;\r\n private _dataGridItems: DataGridSelectAllItem[];\r\n private _canDeleteItems: boolean;\r\n private _selectedDataGridItems: DataGridSelectAllItem[];\r\n private _filteredDataGridItems: DataGridSelectAllItem[];\r\n private _filterKeys: string[];\r\n\r\n constructor(\r\n dataGridItems: DataGridSelectAllItem[],\r\n filterKeys: string[]\r\n ) {\r\n this._dataGridItems = dataGridItems;\r\n this._allSelected = false;\r\n this._canDeleteItems = false;\r\n this._selectedDataGridItems = [];\r\n this._filterKeys = filterKeys;\r\n this._filteredDataGridItems = this._dataGridItems;\r\n }\r\n\r\n @computedFrom('_allSelected')\r\n public get allSelected() {\r\n return this._allSelected;\r\n }\r\n\r\n public set allSelected(selected: boolean) {\r\n this._allSelected = selected;\r\n if (this._allSelected) {\r\n this._dataGridItems.forEach((dgi: DataGridSelectAllItem) => dgi.isSelected = true);\r\n this._selectedDataGridItems = this._dataGridItems;\r\n\r\n } else {\r\n this._dataGridItems.forEach((dgi: DataGridSelectAllItem) => dgi.isSelected = false);\r\n this._selectedDataGridItems = [];\r\n }\r\n\r\n this._canDeleteItems = this._selectedDataGridItems.length &&\r\n this._selectedDataGridItems.every(i => i.isActive);\r\n }\r\n\r\n @computedFrom('_canDeleteItems')\r\n public get canDeleteItems() {\r\n return this._canDeleteItems;\r\n }\r\n\r\n public get filteredDataGridItems() {\r\n return this._filteredDataGridItems;\r\n }\r\n\r\n public get dataGridItems() {\r\n return this._dataGridItems;\r\n }\r\n\r\n public set dataGridItems(items: DataGridSelectAllItem[]) {\r\n this._dataGridItems = items;\r\n this._filteredDataGridItems = this._dataGridItems;\r\n }\r\n\r\n public get selectedDataGridItems() {\r\n return this._selectedDataGridItems;\r\n }\r\n\r\n isSelectedChanged() {\r\n this._allSelected = this._dataGridItems.every(i => i.isSelected);\r\n this._selectedDataGridItems = this._dataGridItems\r\n .filter((dgi: DataGridSelectAllItem) => dgi.isSelected && dgi.isActive);\r\n this._canDeleteItems = this._selectedDataGridItems.length &&\r\n this._selectedDataGridItems.every(i => i.isActive);\r\n }\r\n\r\n filterDataGridItems(filterText: string) {\r\n if (!filterText || filterText.length === 0 || this._filterKeys.length === 0) {\r\n this._filteredDataGridItems = this._dataGridItems;\r\n return;\r\n }\r\n\r\n const filteredItems = this._dataGridItems.filter((i) => {\r\n return Object.keys(i).reduce((acc, curr) => {\r\n if (this._filterKeys.includes(curr)) {\r\n return acc || i[curr].toLowerCase().includes(filterText.toLowerCase());\r\n }\r\n });\r\n });\r\n\r\n this._filteredDataGridItems = filteredItems;\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class UploadedFileService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n async uploadFiles(path, files, reportProgress) {\r\n var fileUrls = [];\r\n var formData = new FormData();\r\n\r\n for (let file of files) {\r\n formData.append('files', file);\r\n fileUrls.push(`${path}/${file.name}`);\r\n }\r\n\r\n await this\r\n .httpClient\r\n .createRequest(path)\r\n .asPut()\r\n .withContent(formData)\r\n .withProgressCallback(reportProgress)\r\n .send();\r\n \r\n return fileUrls;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-dependency-injection';\r\nimport { buildQueryString } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport TestMethod from 'test-methods/test-method';\r\nimport Logger from '../../infrastructure/logger';\r\nimport CapPlanFilters from './cap-plan-filters';\r\nimport CapPlan from './contracts/cap-plan';\r\nimport { CapPlanListItem } from './contracts/cap-plan-list-item';\r\nimport { CapPlanTriggerResult } from './contracts/cap-plan-trigger-result';\r\nimport { RelatedCapPlan } from './contracts/related-cap-plan';\r\n\r\n@autoinject\r\nexport default class CapPlanService {\r\n constructor(private httpClient: HttpClient, private logger: Logger) {\r\n this.httpClient = httpClient;\r\n this.logger = logger;\r\n }\r\n\r\n getCapPlans(capPlanFilters: CapPlanFilters): Promise {\r\n const query = buildQueryString(capPlanFilters, true);\r\n\r\n return this.httpClient.get(\r\n `location-testing/cap-plans${query ? `?${query}` : ''}`,\r\n ) as any as Promise;\r\n }\r\n\r\n getCapPlan(tenantId: number, id: number): Promise {\r\n return this.httpClient.get(\r\n `tenant/${tenantId}/location-testing/cap-plans/${id}`,\r\n ) as any as Promise;\r\n }\r\n\r\n getTestMethods(): Promise {\r\n return this.httpClient.get('location-testing/cap-plans/all/test-methods') as any as Promise<\r\n TestMethod[]\r\n >;\r\n }\r\n\r\n getRelatedCapPlans(\r\n tenantId: number,\r\n testMethodIds: number[],\r\n capPlanId: number,\r\n ): Promise {\r\n const queryString = buildQueryString({ testMethodId: testMethodIds }, true);\r\n\r\n return this.httpClient.get(\r\n `tenant/${tenantId}/location-testing/cap-plans/${capPlanId}/related${\r\n queryString.length ? '?' + queryString : ''\r\n }`,\r\n ) as any as Promise;\r\n }\r\n\r\n bulkDeleteCapPlans(ids: number[]) {\r\n return this.httpClient.post('location-testing/cap-plans/bulk-delete', { ids });\r\n }\r\n\r\n createCapPlan(tenantId: number, capPlan: CapPlan): Promise {\r\n return this.httpClient.post(\r\n `tenant/${tenantId}/location-testing/cap-plans`,\r\n capPlan,\r\n ) as any as Promise;\r\n }\r\n\r\n updateCapPlan(tenantId: number, capPlan: CapPlan): Promise {\r\n return this.httpClient.put(\r\n `tenant/${tenantId}/location-testing/cap-plans/${capPlan.id}`,\r\n capPlan,\r\n ) as any as Promise;\r\n }\r\n\r\n triggerCapPlan(tenantId: number, testId: number): Promise {\r\n return this.httpClient.post(`tenant/${tenantId}/location-testing/cap-plans/trigger`, {\r\n testId,\r\n }) as any as Promise;\r\n }\r\n\r\n getCapPlanRecordChanges(tenantId: number, id: number) {\r\n return this.httpClient.get(\r\n `tenant/${tenantId}/location-testing/cap-plans/${id}/record-changes`,\r\n );\r\n }\r\n}\r\n","import { autoinject, transient } from 'aurelia-framework';\r\nimport { Guid } from 'guid-typescript';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport Point from './points/point';\r\nimport PointAttribute from './points/point-attribute';\r\nimport PointService from './points/point-service';\r\n\r\ninterface PointAttributeOptions {\r\n id: Guid;\r\n nameOptions: SelectorOption[];\r\n valueOptions: SelectorOption[];\r\n selectedValues: string[];\r\n}\r\n\r\n@transient()\r\n@autoinject\r\nexport default class PointSelectorFilter {\r\n name: string;\r\n description: string;\r\n selectedRooms: string[];\r\n selectedZones: number[];\r\n selectedMobileValues: boolean[];\r\n selectedPausedValues: boolean[];\r\n selectedTypes: string[];\r\n selectedRisks: string[];\r\n selectedAttributes: PointAttribute[]; // these also have the properties defined in the PointAttributeOptions interface grafted in\r\n\r\n filterCount: number;\r\n \r\n roomOptions: SelectorOption[];\r\n zoneOptions: SelectorOption[];\r\n mobileOptions: SelectorOption[];\r\n pauseOptions: SelectorOption[];\r\n typeOptions: SelectorOption[];\r\n riskOptions: SelectorOption[];\r\n attributeNameOptions: SelectorOption[];\r\n\r\n constructor(\r\n private pointService: PointService\r\n ) {\r\n this.roomOptions = [];\r\n this.zoneOptions = [];\r\n this.mobileOptions = [];\r\n this.pauseOptions = [];\r\n this.typeOptions = [];\r\n this.riskOptions = [];\r\n\r\n this.attributeNameOptions = [];\r\n\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.name = '';\r\n this.description = '';\r\n \r\n this.selectedRooms = [];\r\n this.selectedZones = [];\r\n this.selectedMobileValues = [];\r\n this.selectedPausedValues = [];\r\n this.selectedTypes = [];\r\n this.selectedRisks = [];\r\n this.selectedAttributes = [];\r\n\r\n this.filterCount = 0;\r\n }\r\n\r\n setupFilterOptions(points: Point[], pointAttributes: PointAttribute[] = []) {\r\n this.roomOptions = Array.from(new Set((points?.filter(p => p.room !== null) ?? [])\r\n .map(p => p.room)).values())\r\n .map(v => ({ title: v, value: v })) as SelectorOption[];\r\n this.zoneOptions = Array.from(new Set((points ?? []).map(p => p.zone)).values()).map(v => ({ title: v.toString(), value: v })) as SelectorOption[];\r\n this.mobileOptions = [{ title: 'Yes', value: true }, { title: 'No', value: false }] as unknown[] as SelectorOption[];\r\n this.pauseOptions = [{ title: 'Yes', value: true }, { title: 'No', value: false }] as unknown[] as SelectorOption[];\r\n this.typeOptions = Array.from(new Set((points ?? []).filter(p => !!p.type).map(p => p.type)).values()).map(v => ({ title: v, value: v })) as SelectorOption[];\r\n this.riskOptions = Array.from(new Set((points ?? []).map(p => p.risk)).values()).map(v => ({ title: this.pointService.getRiskCaption(v), value: v })) as SelectorOption[];\r\n\r\n // determine list of in-use values for each attribute name\r\n let pointAttributeValuesMap = new Map();\r\n pointAttributes.forEach(a => {\r\n if (pointAttributeValuesMap.has(a.name)) {\r\n let group = pointAttributeValuesMap.get(a.name) as string[];\r\n if (!group.some(s => s === a.value))\r\n group.push(a.value);\r\n } else\r\n pointAttributeValuesMap.set(a.name, [a.value]);\r\n });\r\n\r\n // determine unique list of in-use attribute names\r\n let pointAttributeNames = pointAttributes.reduce((attributes, attribute) => {\r\n if (!attributes.some(a => a.name.toLowerCase() === attribute.name.toLowerCase()))\r\n attributes.push({ name: attribute.name, value: attribute.name });\r\n\r\n return attributes;\r\n }, []);\r\n\r\n // create the corresponding options for attribute names and values\r\n this.attributeNameOptions = pointAttributeNames.map(a => ({ title: a.name, value: a.value })) as SelectorOption[];\r\n this.attributeNameOptions.forEach(attributeNameOption => {\r\n let attributeValues = (pointAttributeValuesMap.get(attributeNameOption.value) ?? []) as string[];\r\n \r\n let pointAttribute = attributeNameOption as any;\r\n pointAttribute.valueOptions = attributeValues.map(v => ({ title: v, value: v})) as SelectorOption[];\r\n });\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n applyFilters(points: Point[], attributeFiltersApplied: boolean): Point[] {\r\n if (!points)\r\n return [];\r\n\r\n // NOTE: point attribute filters are not performed client-side\r\n this.filterCount =\r\n ((this.name ?? '').length > 0 ? 1 : 0) +\r\n ((this.description ?? '').length > 0 ? 1 : 0) +\r\n ((this.selectedRooms?.length ?? 0) > 0 ? 1 : 0) +\r\n ((this.selectedZones?.length ?? 0) > 0 ? 1 : 0) +\r\n ((this.selectedMobileValues?.length ?? 0) > 0 ? 1 : 0) + \r\n ((this.selectedPausedValues?.length ?? 0) > 0 ? 1 : 0) +\r\n ((this.selectedTypes?.length ?? 0) > 0 ? 1 : 0) +\r\n ((this.selectedRisks?.length ?? 0) > 0 ? 1 : 0) +\r\n (attributeFiltersApplied ? 1 : 0);\r\n\r\n return points.filter(p =>\r\n p.name.toLowerCase().indexOf((this.name ?? '').toLowerCase()) !== -1 &&\r\n (p.description ?? '').toLowerCase().indexOf((this.description ?? '').toLowerCase()) !== -1 &&\r\n ((this.selectedRooms?.length ?? 0) === 0 || this.selectedRooms.some(v => v.toLowerCase() === (p.room ?? '').toLowerCase())) &&\r\n ((this.selectedZones?.length ?? 0) === 0 || this.selectedZones.some(v => v === p.zone)) &&\r\n ((this.selectedMobileValues?.length ?? 0) === 0 || this.selectedMobileValues.some(v => v === p.mobile)) &&\r\n ((this.selectedPausedValues?.length ?? 0) === 0 || this.selectedPausedValues.some(v => v === p.isPausedPendingRemediation)) &&\r\n ((this.selectedTypes?.length ?? 0) === 0 || this.selectedTypes.some(v => v.toLowerCase() === (p.type ?? '').toLowerCase())) &&\r\n ((this.selectedRisks?.length ?? 0) === 0 || this.selectedRisks.some(v => v === p.risk))\r\n );\r\n }\r\n\r\n getAttributeValueSelectorOptions(attributeName: string): SelectorOption[] {\r\n let matchingAttributes = this.attributeNameOptions.filter(o => o.value === attributeName);\r\n if (matchingAttributes.length > 0) {\r\n let attribute = matchingAttributes[0] as any;\r\n return attribute.valueOptions as SelectorOption[];\r\n }\r\n \r\n return [];\r\n }\r\n\r\n convertPointAttributeSelectionsToPointAttributes(): PointAttribute[] {\r\n let selectedAttributes = this.selectedAttributes.filter(selectedAttribute => selectedAttribute.name?.length > 0) as (PointAttribute & PointAttributeOptions)[];\r\n selectedAttributes = selectedAttributes.filter(selectedAttribute => selectedAttribute.selectedValues?.length > 0);\r\n\r\n let pointAttributes = [];\r\n selectedAttributes.forEach(selectedAttribute => {\r\n selectedAttribute.selectedValues.forEach(selectedValue => {\r\n pointAttributes.push({name: selectedAttribute.name, value: selectedValue });\r\n });\r\n })\r\n\r\n return pointAttributes as PointAttribute[];\r\n }\r\n\r\n addPointAttributeFilter() {\r\n // determine attribute name options not in use\r\n let attributeNamesInUse = this.selectedAttributes.map(a => a.name);\r\n let attributeNameOptions = this.attributeNameOptions;\r\n attributeNameOptions.forEach(o => {\r\n o.disabled = attributeNamesInUse.includes( (o.value) as string);\r\n });\r\n\r\n // graft in properties used for filtering\r\n let pointAttribute = {\r\n id: Guid.create(),\r\n nameOptions: attributeNameOptions,\r\n valueOptions: null, // this is determined after a selection is made\r\n selectedValues: null\r\n } as PointAttributeOptions;\r\n\r\n this.selectedAttributes.push(pointAttribute as unknown as PointAttribute);\r\n }\r\n\r\n informAttributeNameInUse(attribute: PointAttribute, attributeName: string) {\r\n attribute.name = attributeName;\r\n\r\n // get the set of attribute names now in use and consider new one\r\n let attributeNamesInUse = this.selectedAttributes.map(a => a.name);\r\n attributeNamesInUse.push(attributeName);\r\n\r\n let pointAttributeOption = attribute as PointAttribute &PointAttributeOptions;\r\n pointAttributeOption.selectedValues = null;\r\n pointAttributeOption.valueOptions = this.getAttributeValueSelectorOptions(pointAttributeOption.name);\r\n\r\n // exclude this option as choice for the other attributes\r\n let otherSelectedAttributes = (this.selectedAttributes as (PointAttribute & PointAttributeOptions)[]).filter(a => a.id !== pointAttributeOption.id);\r\n otherSelectedAttributes.forEach(selectedAttribute => {\r\n let pointAttributeNameOptions = selectedAttribute.nameOptions as SelectorOption[];\r\n\r\n let option = pointAttributeNameOptions.find(o => (o.value as string) === attributeName);\r\n if (option)\r\n option.disabled = true;\r\n });\r\n }\r\n\r\n informAttributeNameNoLongerInUse(index: number) {\r\n let pointAttributeOption = this.selectedAttributes[index] as PointAttribute & PointAttributeOptions;\r\n\r\n // get the attribute name option that we are adding back\r\n let attributeName = pointAttributeOption.name;\r\n\r\n let otherSelectedAttributes = this.selectedAttributes as (PointAttribute & PointAttributeOptions)[];\r\n otherSelectedAttributes.forEach(selectedAttribute => {\r\n let attributeNameOptions = selectedAttribute.nameOptions as SelectorOption[];\r\n let option = attributeNameOptions.find(o => (o.value as string) === attributeName);\r\n if (option)\r\n option.disabled = false;\r\n });\r\n\r\n this.selectedAttributes.splice(index, 1)\r\n }\r\n}\r\n","export default class SegmentType {\r\n static Unknown = new SegmentType('Unknown');\r\n static Text = new SegmentType('Text');\r\n static Selection = new SegmentType('Selection');\r\n\r\n name: string;\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n toString() {\r\n return this.name;\r\n }\r\n\r\n static getOptions() {\r\n return [\r\n { title: 'Text', value: SegmentType.Text.name },\r\n { title: 'Selection', value: SegmentType.Selection.name },\r\n ];\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport TestMethod from 'test-methods/test-method';\r\nimport OrganizationPlan from './organization-plan';\r\nimport PlanCoverage from './plan-coverage';\r\nimport PlanType from './plan-type';\r\n\r\n@autoinject\r\nexport default class PlanService {\r\n constructor(private httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getPlans(mapId: number[]) {\r\n let queryParameters = {\r\n mapId: mapId,\r\n };\r\n\r\n var query = buildQueryString(queryParameters, true);\r\n\r\n return this.httpClient.get(`location-testing/plans${query ? `?${query}` : ''}`);\r\n }\r\n\r\n getOrganizationPlans(organizationId: number): Promise {\r\n return this.httpClient.get(\r\n `location-testing/plans/organization/${organizationId}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getPlansByPoint(pointId, view) {\r\n return this.httpClient.get(`location-testing/plans?pointId=${pointId}&view=${view}`);\r\n }\r\n\r\n getPlanTypes() {\r\n let planTypes = [\r\n { id: PlanType.DISCRETIONARY, token: 'Discretionary' },\r\n { id: PlanType.SCHEDULED, token: 'Scheduled' },\r\n { id: PlanType.RISK_BASED_PRIORITY, token: 'Risk Based Priority' },\r\n { id: PlanType.ADHOC, token: 'Adhoc' },\r\n ];\r\n return Promise.resolve(planTypes);\r\n }\r\n\r\n getPlan(id): Promise {\r\n return this.httpClient.get(`location-testing/plans/${id}`);\r\n }\r\n\r\n deletePlans(ids) {\r\n var query = ids.map((id) => `id=${id}`).join('&');\r\n return this.httpClient.delete(`location-testing/plans?${query}`);\r\n }\r\n\r\n savePlan(plan) {\r\n if (!plan.id) return this.httpClient.post('location-testing/plans', plan);\r\n\r\n return this.httpClient.put(`location-testing/plans/${plan.id}`, plan);\r\n }\r\n\r\n getPlanRecordChanges(id) {\r\n return this.httpClient.get(`location-testing/plans/${id}/record-changes`);\r\n }\r\n\r\n getTestMethods(mapIds: number[]): TestMethod[] {\r\n let queryParameters = {\r\n mapIds: mapIds,\r\n };\r\n\r\n var query = buildQueryString(queryParameters, true);\r\n\r\n return this.httpClient.get(\r\n `location-testing/plans/all/test-methods${query ? `?${query}` : ''}`,\r\n ) as unknown as TestMethod[];\r\n }\r\n\r\n getPlanCoverage(\r\n id: number,\r\n taskTargetDateTimeStart: string,\r\n taskTargetDateTimeEnd: string,\r\n ): Promise {\r\n const params = {\r\n taskTargetDateTimeStart,\r\n taskTargetDateTimeEnd,\r\n };\r\n const query = buildQueryString(params);\r\n\r\n return this.httpClient.get(\r\n `location-testing/plans/${id}/coverage?${query}`,\r\n ) as unknown as Promise;\r\n }\r\n exportPlanCoveragePoints(\r\n id: number,\r\n coverageType: string,\r\n taskTargetDateTimeStart: string,\r\n taskTargetDateTimeEnd: string,\r\n ): string {\r\n const queryParams = {\r\n coverageType,\r\n taskTargetDateTimeStart,\r\n taskTargetDateTimeEnd,\r\n format: 'CSV',\r\n };\r\n const queryString = buildQueryString(queryParams, true);\r\n\r\n return `api/location-testing/plans/${id}/points-export?${queryString}`;\r\n }\r\n}\r\n","export enum RemediationUserType {\r\n Assigned = 'Assigned',\r\n Approval = 'Approval'\r\n}\r\n","const compositeOptionsLookup: Record = {\r\n None: 'None',\r\n TwoToThree: '2-3',\r\n FourToFive: '4-5',\r\n GreaterThanFive: '>5',\r\n LcsSample: 'LCS Sample',\r\n EnviroMonitorProgram: 'Enviro Monitor Program',\r\n LabAirPlates: 'Lab Air Plates',\r\n PtSample: 'PT Sample',\r\n LcsQualitative: 'LCS Qualitative',\r\n WaterTableTest: 'Water Table Test',\r\n Training: 'Training',\r\n};\r\n\r\nconst defaultCompositeOptions = [\r\n { title: compositeOptionsLookup.None, value: compositeOptionsLookup.None },\r\n { title: compositeOptionsLookup.TwoToThree, value: compositeOptionsLookup.TwoToThree },\r\n { title: compositeOptionsLookup.FourToFive, value: compositeOptionsLookup.FourToFive },\r\n {\r\n title: compositeOptionsLookup.GreaterThanFive,\r\n value: compositeOptionsLookup.GreaterThanFive,\r\n },\r\n];\r\n\r\nconst internalCompositeOptions = [\r\n { title: compositeOptionsLookup.LcsSample, value: compositeOptionsLookup.LcsSample },\r\n {\r\n title: compositeOptionsLookup.EnviroMonitorProgram,\r\n value: compositeOptionsLookup.EnviroMonitorProgram,\r\n },\r\n { title: compositeOptionsLookup.LabAirPlates, value: compositeOptionsLookup.LabAirPlates },\r\n { title: compositeOptionsLookup.PtSample, value: compositeOptionsLookup.PtSample },\r\n { title: compositeOptionsLookup.LcsQualitative, value: compositeOptionsLookup.LcsQualitative },\r\n { title: compositeOptionsLookup.WaterTableTest, value: compositeOptionsLookup.WaterTableTest },\r\n { title: compositeOptionsLookup.Training, value: compositeOptionsLookup.Training },\r\n];\r\n\r\nconst defaultCompositeOptionsV2 = [\r\n compositeOptionsLookup.None,\r\n compositeOptionsLookup.TwoToThree,\r\n compositeOptionsLookup.FourToFive,\r\n compositeOptionsLookup.GreaterThanFive,\r\n];\r\n\r\nconst internalCompositeOptionsV2 = [\r\n compositeOptionsLookup.LcsSample,\r\n compositeOptionsLookup.EnviroMonitorProgram,\r\n compositeOptionsLookup.LabAirPlates,\r\n compositeOptionsLookup.PtSample,\r\n compositeOptionsLookup.LcsQualitative,\r\n compositeOptionsLookup.WaterTableTest,\r\n compositeOptionsLookup.Training,\r\n];\r\n\r\nexport {\r\n defaultCompositeOptions,\r\n defaultCompositeOptionsV2,\r\n internalCompositeOptions,\r\n internalCompositeOptionsV2,\r\n};\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class LoginAuditService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getLoginAuditData(minDate, maxDate) {\r\n var qs = '';\r\n if(!!minDate)\r\n qs = `minDate=${encodeURIComponent(new Date(minDate).toISOString())}`;\r\n if(!!maxDate)\r\n qs = `${qs}${(!!qs ? '&' : '')}maxDate=${encodeURIComponent(new Date(maxDate).toISOString())}`;\r\n\r\n return this.httpClient.get(`login-audit${(!!qs ? '?' : '')}${qs}`);\r\n }\r\n\r\n getLoginAuditDetail(userId) {\r\n return this.httpClient.get(`login-audit/detail?userId=${userId}`);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport RemediationRootCause from './remediation-root-cause';\r\n\r\n@autoinject\r\nexport default class RemediationRootCauseService {\r\n private baseRoute: string;\r\n\r\n constructor(private httpClient: HttpClient) {\r\n this.baseRoute = 'location-testing/remediation-root-causes';\r\n }\r\n\r\n getRemediationRootCauseList(): Promise {\r\n return this.httpClient.get(this.baseRoute) as unknown as Promise;\r\n }\r\n\r\n createRemediationRootCauseList(remediationRootCauseList: RemediationRootCause[]) {\r\n return this.httpClient.put(this.baseRoute, remediationRootCauseList);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\n\r\n@autoinject\r\nexport class TaskRequestSubmissionService {\r\n constructor(\r\n private dialogPresenter: DialogPresenter,\r\n private router: Router,\r\n ) {}\r\n\r\n // tasks should be in the caller's on-screen order; orderCaption describes that order so the\r\n // request screen can offer it as a sample order option.\r\n async submitRequest(tasks: any[], orderCaption?: string): Promise {\r\n if (!tasks.length) {\r\n return;\r\n }\r\n\r\n if (tasks.some((t) => t.status !== 'Completed')) {\r\n await this.dialogPresenter.showAlert(\r\n 'Some tasks are not completed',\r\n 'Some of the selected tasks have not been completed and therefore cannot be added to a request. Please mark those tasks as Completed or unselect them before submitting a request.',\r\n );\r\n return;\r\n }\r\n\r\n if (tasks.some((t) => t.sampleId)) {\r\n await this.dialogPresenter.showAlert(\r\n 'Some tasks have been submitted',\r\n 'Some of the selected tasks have had their samples submitted and therefore cannot be added to a request. Please unselect them before submitting a request.',\r\n );\r\n return;\r\n }\r\n\r\n const organizationIds = [...new Set(tasks.map((t) => t.organizationId))];\r\n if (organizationIds.length > 1) {\r\n await this.dialogPresenter.showAlert(\r\n 'Tasks From Multiple Organizations',\r\n 'Some of the selected tasks belong to different organizations and therefore cannot be combined into the same request submission.',\r\n );\r\n return;\r\n }\r\n\r\n const externalSources = new Set();\r\n for (const task of tasks) {\r\n for (const testMethod of task.testMethods ?? []) {\r\n externalSources.add(testMethod.externalSource);\r\n }\r\n }\r\n if (externalSources.size > 1) {\r\n await this.dialogPresenter.showAlert(\r\n 'Tasks With Incompatible Test Methods',\r\n 'Some of the selected tasks have test methods that cannot be combined into the same request submission.',\r\n );\r\n return;\r\n }\r\n\r\n this.router.navigateToRoute('location-testing-request-detail', {\r\n id: 'create',\r\n taskIds: tasks.map((t) => t.id),\r\n organizationId: organizationIds[0],\r\n orderCaption,\r\n });\r\n }\r\n}\r\n","import { ManageTestMethodDataRow } from 'location-testing/test-method-management/manage-test-method-data-row';\r\nimport TestMethod from './test-method';\r\n\r\nconst testMethodNameFormatting = (\r\n testMethod: TestMethod,\r\n isImpersonatingUser: boolean,\r\n isImpersonatingOrg: boolean,\r\n): string => {\r\n return isImpersonatingUser || isImpersonatingOrg\r\n ? `${testMethod.billCode} - ${testMethod.name} - ${testMethod.externalId}`\r\n : `${testMethod.billCode} - ${testMethod.name}`;\r\n};\r\n\r\nconst testMethodManagementNameFormatting = (\r\n testMethod: ManageTestMethodDataRow,\r\n isImpersonatingUser: boolean,\r\n isImpersonatingOrg: boolean,\r\n): string => {\r\n return isImpersonatingUser || isImpersonatingOrg\r\n ? `${testMethod.billCode} - ${testMethod.testMethodName} - ${testMethod.externalId}`\r\n : `${testMethod.billCode} - ${testMethod.testMethodName}`;\r\n};\r\n\r\n// This method evaluates each object is a TestMethods, but are treated like plain js object\r\n// Used for the pop up on plan management\r\nconst testMethodPopUpManagementNameFormatting = (\r\n nonDefinedTestMethod: any,\r\n isImpersonatingUser: boolean,\r\n isImpersonatingOrg: boolean,\r\n): string => {\r\n return isImpersonatingUser || isImpersonatingOrg\r\n ? `${nonDefinedTestMethod.billCode} - ${nonDefinedTestMethod.name} - ${nonDefinedTestMethod.externalId}`\r\n : `${nonDefinedTestMethod.billCode} - ${nonDefinedTestMethod.name}`;\r\n};\r\n\r\nconst isImpersonatingUserOrOrg = (\r\n isImpersonatingUser: boolean,\r\n isImpersonatingOrg: boolean,\r\n): boolean => {\r\n return isImpersonatingUser || isImpersonatingOrg ? true : false;\r\n};\r\n\r\nexport {\r\n testMethodNameFormatting,\r\n isImpersonatingUserOrOrg,\r\n testMethodManagementNameFormatting,\r\n testMethodPopUpManagementNameFormatting,\r\n};\r\n","import { ColDef, ColGroupDef, GridOptions } from 'ag-grid-community';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport {\r\n agFormatBoolean,\r\n agFormatDateAndTimeToLocale,\r\n} from 'infrastructure/ag-grid/ag-value-formatters';\r\nimport { AureliaCellRendererCompBase } from 'infrastructure/ag-grid/aurelia-cell-renderer-comp-base';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\n\r\nconst template = '${data.pointName}';\r\nclass AgCellDelegateHandler extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(template);\r\n }\r\n}\r\n\r\nconst colDefs: (ColDef | ColGroupDef)[] = [\r\n { headerName: 'Sample Id', field: 'sampleId' },\r\n { headerName: 'Test Method', field: 'testMethodDisplayName' },\r\n {\r\n headerName: 'Collected',\r\n field: 'collectionDate',\r\n width: 150,\r\n valueFormatter: agFormatDateAndTimeToLocale,\r\n },\r\n { headerName: 'Room', field: 'room' },\r\n {\r\n headerName: 'Point',\r\n field: 'pointName',\r\n cellRenderer: AgCellDelegateHandler,\r\n },\r\n {\r\n headerName: 'Mobile',\r\n field: 'isMobile',\r\n valueFormatter: agFormatBoolean,\r\n },\r\n { headerName: 'Zone', field: 'zone' },\r\n];\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: colDefs,\r\n defaultColDef: {\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n },\r\n suppressContextMenu: true,\r\n};\r\n\r\nconst remediationFailedTestGridOptions: GridOptions = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .withAutoHeight()\r\n .addStatefulness('remediation-failed-tests-grid')\r\n .build();\r\n\r\nexport { remediationFailedTestGridOptions };\r\n","export interface ExportTaskCollectionTemplateConfiguration {\r\n id: number;\r\n organizationId: number;\r\n templateName: string;\r\n}\r\n\r\nexport const emptyExportTaskCollectionTemplateConfiguration = (): ExportTaskCollectionTemplateConfiguration => ({\r\n id: 0,\r\n organizationId: 0,\r\n templateName: '',\r\n});\r\n","import DataGridSelectAllItem from 'infrastructure/components/data-grid-select-all-item';\r\nimport Organization from 'organizations/organization';\r\nimport { ExportTaskCollectionTemplateConfiguration } from './export-task-collection-template-configuration';\r\n\r\nexport default class UiViewExportTaskCollectionTemplate implements DataGridSelectAllItem {\r\n private _id: number;\r\n private _displayName: string;\r\n private _isActive;\r\n private _organizationConfigurations: ExportTaskCollectionTemplateConfiguration[];\r\n private _organizations: Organization[];\r\n\r\n isSelected: boolean;\r\n\r\n constructor(\r\n id: number,\r\n organizationConfigurations: ExportTaskCollectionTemplateConfiguration[],\r\n isActive: boolean,\r\n organizations: Organization[]) {\r\n if(organizationConfigurations.length === 0){\r\n throw new Error('There must be at least one organizationConfiguration for each UiViewExportTaskCollectionTemplate.');\r\n }\r\n if(organizations.length === 0) {\r\n throw new Error('There must be at least one organization for each UiViewExportTaskCollectionTemplate.');\r\n }\r\n this._id = id;\r\n this._organizationConfigurations = organizationConfigurations;\r\n this._isActive = isActive;\r\n this._organizations = organizations;\r\n }\r\n\r\n public get id() {\r\n return this._id;\r\n }\r\n\r\n public get displayName() {\r\n const join = (arr, sep=', ') => \r\n arr.reduce((acc, item, i) => `${acc}${i ? sep :''}${this._organizations.find(o => o.id === item.organizationId).name} (${item.templateName})`, ''); \r\n this._displayName = join(this._organizationConfigurations);\r\n \r\n return this._displayName;\r\n }\r\n\r\n public get isActive() {\r\n return this._isActive;\r\n }\r\n\r\n public set isActive(isActive: boolean) {\r\n this._isActive = isActive;\r\n }\r\n}\r\n","import { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface OrganizationsQuery {\r\n organizationIds: number[];\r\n}\r\n\r\nexport class OrganizationsQueryFilters extends BaseQueryFilter\r\n implements QueryFiltered {\r\n organizationIds: number[];\r\n private _defaultOrganizationIds: number[];\r\n\r\n constructor(defaultOrganizationIds: number[] = []) {\r\n super();\r\n this._defaultOrganizationIds = defaultOrganizationIds;\r\n this.organizationIds = [...defaultOrganizationIds];\r\n }\r\n\r\n reset(): void {\r\n this.organizationIds = [...this._defaultOrganizationIds];\r\n }\r\n\r\n public get count() {\r\n return (Number(!!this.organizationIds?.length));\r\n }\r\n\r\n getQueryParams(): OrganizationsQuery {\r\n return {\r\n organizationIds: this.organizationIds,\r\n };\r\n }\r\n\r\n resetFilterValues(): void {\r\n this.organizationIds = [];\r\n }\r\n\r\n setFilterValues(params: OrganizationsQuery): void {\r\n this.resetFilterValues();\r\n\r\n super.setQueryFilteredValues({\r\n organizationIds: params.organizationIds?.map(Number)\r\n }, this);\r\n }\r\n}\r\n","export default [\r\n { title: 'Not Specified', value: 'NotSpecified' },\r\n { title: 'Pre Operations', value: 'PreOperations' },\r\n { title: 'During Operations', value: 'DuringOperations' },\r\n { title: 'Post Operations', value: 'PostOperations' },\r\n];\r\n","import { BaseQueryFilter } from 'infrastructure/components/query-filters/base-query-filter';\r\nimport {\r\n CollectionTypeQuery,\r\n CollectionTypesQueryFilters,\r\n} from 'infrastructure/components/query-filters/collection-types-query-filter';\r\nimport {\r\n DateRangeQuery,\r\n DateRangeQueryFilter,\r\n} from 'infrastructure/components/query-filters/date-range-query-filter';\r\nimport {\r\n IsAssignedQuery,\r\n IsAssignedQueryFilters,\r\n} from 'infrastructure/components/query-filters/is-assigned-query-filter';\r\nimport {\r\n IsSubmittedQuery,\r\n IsSubmittedQueryFilters,\r\n} from 'infrastructure/components/query-filters/is-submitted-query-filter';\r\nimport {\r\n MapPlanQuery,\r\n MapPlanQueryFilter,\r\n} from 'infrastructure/components/query-filters/map-plan-query-filter';\r\nimport {\r\n OperationsTimingQuery,\r\n OperationsTimingQueryFilters,\r\n} from 'infrastructure/components/query-filters/operations-timing-query-filter';\r\nimport { QueryFiltered } from 'infrastructure/components/query-filters/query-filtered';\r\nimport {\r\n RecordStatusQuery,\r\n RecordStatusQueryFilters,\r\n} from 'infrastructure/components/query-filters/record-status-query-filter';\r\nimport CollectionType from 'location-testing/collection-type';\r\nimport RecordStatus from 'record-status';\r\n\r\nexport interface TaskListQuery {\r\n dateRangeOption?: string;\r\n targetStartDate: string;\r\n targetEndDate: string;\r\n dateRangeOverride?: boolean;\r\n enableTimeFilter?: boolean;\r\n mapId?: number;\r\n planId?: number;\r\n mapIds: number[];\r\n planIds: number[];\r\n recordStatus?: RecordStatus;\r\n isAssigned?: string;\r\n isSubmitted?: string;\r\n onlyAssignedToMe?: boolean;\r\n pointMobile?: any[];\r\n pointName?: string;\r\n pointRisks?: string[];\r\n pointRooms?: string[];\r\n pointTypes?: string[];\r\n pointZones?: string[];\r\n taskStatusIds?: number[];\r\n testMethodIds?: number[];\r\n collectionTypes?: CollectionType[];\r\n operationsTimings?: string[];\r\n}\r\nexport class TaskListQueryFilters extends BaseQueryFilter implements QueryFiltered {\r\n private _filterCaption: string;\r\n dateRangeQueryFilters: DateRangeQueryFilter;\r\n mapPlanQueryFilters: MapPlanQueryFilter;\r\n recordStatusQueryFilters: RecordStatusQueryFilters;\r\n isAssignedQueryFilters: IsAssignedQueryFilters;\r\n isSubmittedQueryFilters: IsSubmittedQueryFilters;\r\n collectionTypesQueryFilters: CollectionTypesQueryFilters;\r\n operationsTimingQueryFilters: OperationsTimingQueryFilters;\r\n\r\n onlyAssignedToMe: boolean;\r\n pointMobile: any[];\r\n pointName: string;\r\n pointRisks: string[];\r\n pointRooms: string[];\r\n pointTypes: string[];\r\n pointZones: string[];\r\n taskStatusIds: number[];\r\n testMethodIds: number[];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.dateRangeQueryFilters = new DateRangeQueryFilter();\r\n this.mapPlanQueryFilters = new MapPlanQueryFilter();\r\n this.recordStatusQueryFilters = new RecordStatusQueryFilters();\r\n this.isAssignedQueryFilters = new IsAssignedQueryFilters();\r\n this.isSubmittedQueryFilters = new IsSubmittedQueryFilters();\r\n this.collectionTypesQueryFilters = new CollectionTypesQueryFilters();\r\n this.operationsTimingQueryFilters = new OperationsTimingQueryFilters();\r\n\r\n this.onlyAssignedToMe = false;\r\n this.pointMobile = [];\r\n this.pointName = null;\r\n this.pointRisks = [];\r\n this.pointRooms = [];\r\n this.pointTypes = [];\r\n this.pointZones = [];\r\n this.taskStatusIds = [];\r\n this.testMethodIds = [];\r\n }\r\n\r\n public get count(): number {\r\n return (\r\n 0 +\r\n this.mapPlanQueryFilters.count +\r\n this.recordStatusQueryFilters.count +\r\n this.isAssignedQueryFilters.count +\r\n this.isSubmittedQueryFilters.count +\r\n this.collectionTypesQueryFilters.count +\r\n this.operationsTimingQueryFilters.count +\r\n Number(!!(this.testMethodIds && this.testMethodIds.length)) +\r\n Number(!!(this.pointName && this.pointName.length)) +\r\n Number(!!(this.pointRooms && this.pointRooms.length)) +\r\n Number(!!(this.pointZones && this.pointZones.length)) +\r\n Number(!!(this.pointMobile && this.pointMobile.length)) +\r\n Number(!!(this.pointTypes && this.pointTypes.length)) +\r\n Number(!!(this.pointRisks && this.pointRisks.length)) +\r\n Number(!!(this.taskStatusIds && !!this.taskStatusIds.length)) +\r\n Number(!!this.onlyAssignedToMe)\r\n );\r\n }\r\n\r\n public get filterCaption(): string {\r\n return this._filterCaption;\r\n }\r\n\r\n reset(): void {\r\n this.dateRangeQueryFilters.reset();\r\n this.mapPlanQueryFilters.reset();\r\n this.recordStatusQueryFilters.reset();\r\n this.isAssignedQueryFilters.reset();\r\n this.isSubmittedQueryFilters.reset();\r\n this.collectionTypesQueryFilters.reset();\r\n this.operationsTimingQueryFilters.reset();\r\n\r\n this.onlyAssignedToMe = false;\r\n this.pointMobile = [];\r\n this.pointRisks = [];\r\n this.pointRooms = [];\r\n this.pointTypes = [];\r\n this.pointZones = [];\r\n this.taskStatusIds = [];\r\n this.testMethodIds = [];\r\n }\r\n\r\n getQueryParams(): TaskListQuery {\r\n return {\r\n ...this.dateRangeQueryFilters.getQueryParams(),\r\n ...this.mapPlanQueryFilters.getQueryParams(),\r\n ...this.recordStatusQueryFilters.getQueryParams(),\r\n ...this.isAssignedQueryFilters.getQueryParams(),\r\n ...this.isSubmittedQueryFilters.getQueryParams(),\r\n ...this.collectionTypesQueryFilters.getQueryParams(),\r\n ...this.operationsTimingQueryFilters.getQueryParams(),\r\n testMethodIds: this.testMethodIds,\r\n pointName: this.pointName,\r\n pointRooms: this.pointRooms,\r\n pointZones: this.pointZones,\r\n pointTypes: this.pointTypes,\r\n pointRisks: this.pointRisks,\r\n taskStatusIds: this.taskStatusIds,\r\n pointMobile: this.pointMobile,\r\n onlyAssignedToMe: this.onlyAssignedToMe,\r\n };\r\n }\r\n\r\n setFilterValues(params: TaskListQuery): void {\r\n const dateRangeQuery: DateRangeQuery = {\r\n dateRangeOverride: params.dateRangeOverride,\r\n dateRangeOption: params.dateRangeOption,\r\n targetStartDate: params.targetStartDate,\r\n targetEndDate: params.targetEndDate,\r\n enableTimeFilter: params.enableTimeFilter,\r\n };\r\n const mapPlanQuery: MapPlanQuery = {\r\n mapId: params.mapId,\r\n planId: params.planId,\r\n mapIds: params.mapIds,\r\n planIds: params.planIds,\r\n };\r\n const recordStatusQuery: RecordStatusQuery = { recordStatus: params.recordStatus };\r\n const isAssignedQuery: IsAssignedQuery = { isAssigned: params.isAssigned };\r\n const isSubmittedQuery: IsSubmittedQuery = { isSubmitted: params.isSubmitted };\r\n const collectionTypeQuery: CollectionTypeQuery = {\r\n collectionTypes: params.collectionTypes,\r\n };\r\n const operationsTimingQuery: OperationsTimingQuery = {\r\n operationsTimings: params.operationsTimings,\r\n };\r\n const {\r\n onlyAssignedToMe,\r\n pointMobile,\r\n pointName,\r\n pointRisks,\r\n pointRooms,\r\n pointTypes,\r\n pointZones,\r\n taskStatusIds,\r\n testMethodIds,\r\n } = { ...params };\r\n\r\n this.dateRangeQueryFilters.setFilterValues(dateRangeQuery);\r\n this.mapPlanQueryFilters.setFilterValues(mapPlanQuery);\r\n this.recordStatusQueryFilters.setFilterValues(recordStatusQuery);\r\n this.isAssignedQueryFilters.setFilterValues(isAssignedQuery);\r\n this.isSubmittedQueryFilters.setFilterValues(isSubmittedQuery);\r\n this.collectionTypesQueryFilters.setFilterValues(collectionTypeQuery);\r\n this.operationsTimingQueryFilters.setFilterValues(operationsTimingQuery);\r\n\r\n super.setQueryFilteredValues(\r\n {\r\n onlyAssignedToMe,\r\n pointMobile,\r\n pointName,\r\n pointRisks,\r\n pointRooms,\r\n pointTypes,\r\n pointZones,\r\n taskStatusIds,\r\n testMethodIds: Array.isArray(testMethodIds) ? testMethodIds : [testMethodIds],\r\n },\r\n this,\r\n );\r\n\r\n this._filterCaption = super.getFilterCaption(\r\n this.count,\r\n 'Target Date Range',\r\n this.dateRangeQueryFilters.dateRangeCaption,\r\n );\r\n }\r\n}\r\n","export default class SegmentationTemplateSegmentUsages {\r\n static None = new SegmentationTemplateSegmentUsages('None');\r\n static SampleLabels = new SegmentationTemplateSegmentUsages('SampleLabels');\r\n static RequestCoas = new SegmentationTemplateSegmentUsages('RequestCoas');\r\n\r\n name: string;\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n toString() {\r\n return this.name;\r\n }\r\n\r\n in(usages: string) {\r\n let names = (usages ?? '').split(',').map(v => v.trim());\r\n return names.includes(this.name);\r\n }\r\n\r\n static combine(usages: SegmentationTemplateSegmentUsages[]) {\r\n return usages\r\n .filter(u => u.name !== SegmentationTemplateSegmentUsages.None.name)\r\n .map(u => u.name).join(', ')\r\n || SegmentationTemplateSegmentUsages.None.name;\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class SupportTopicService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getSupportTopics() {\r\n return this.httpClient.get('help/support-topics');\r\n }\r\n\r\n getSupportTopic(id) {\r\n return this.httpClient.get(`help/support-topics/${id}`);\r\n }\r\n\r\n deleteSupportTopics(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`help/support-topics?${query}`);\r\n }\r\n\r\n saveSupportTopic(supportTopic) {\r\n if (!supportTopic.id)\r\n return this.httpClient.post('help/support-topics/', supportTopic);\r\n\r\n return this.httpClient.put(`help/support-topics/${supportTopic.id}`, supportTopic);\r\n }\r\n}\r\n","import { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface OperationsTimingQuery {\r\n operationsTimings: string[];\r\n}\r\n\r\n/* eslint-disable brace-style */\r\nexport class OperationsTimingQueryFilters\r\n extends BaseQueryFilter\r\n implements QueryFiltered\r\n{\r\n operationsTimings: string[];\r\n\r\n constructor() {\r\n super();\r\n this.operationsTimings = [];\r\n }\r\n\r\n public get count() {\r\n return Number(!!this.operationsTimings?.length);\r\n }\r\n\r\n reset(): void {\r\n this.operationsTimings = [];\r\n }\r\n\r\n getQueryParams(): OperationsTimingQuery {\r\n return {\r\n operationsTimings: this.operationsTimings,\r\n };\r\n }\r\n\r\n setFilterValues(params: OperationsTimingQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const { operationsTimings } = params;\r\n\r\n let operationsTimingsArr: string[];\r\n if (operationsTimings) {\r\n operationsTimingsArr = Array.isArray(operationsTimings)\r\n ? operationsTimings\r\n : [operationsTimings];\r\n }\r\n\r\n this.operationsTimings = operationsTimingsArr;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport AdhocReportInfo from './contracts/adhoc-report-info';\r\n\r\n@autoinject\r\nexport default class AdhocReportService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getDownloadUrl(id, format) {\r\n return `api/reporting/adhoc-reports/${id}/results?format=${format}`;\r\n }\r\n\r\n getCurrentUserAdhocReports(): Promise {\r\n return this.httpClient.get(\r\n 'reporting/adhoc-reports',\r\n ) as unknown as Promise;\r\n }\r\n\r\n getAdhocReport(id) {\r\n return this.httpClient.get(`reporting/adhoc-reports/${id}`);\r\n }\r\n\r\n getTempAdhocReportResults(adhocReport) {\r\n return this.httpClient.post(\r\n 'reporting/adhoc-reports/temp/results',\r\n adhocReport,\r\n );\r\n }\r\n\r\n getAdhocReportResults(id) {\r\n return this.httpClient.get(`reporting/adhoc-reports/${id}/results`);\r\n }\r\n\r\n deleteAdhocReports(ids) {\r\n var query = ids.map((id) => `id=${id}`).join('&');\r\n return this.httpClient.delete(`reporting/adhoc-reports?${query}`);\r\n }\r\n\r\n saveAdhocReport(adhocReport) {\r\n if (!adhocReport.id)\r\n return this.httpClient.post(\r\n 'reporting/adhoc-reports/',\r\n adhocReport,\r\n );\r\n\r\n return this.httpClient.put(\r\n `reporting/adhoc-reports/${adhocReport.id}`,\r\n adhocReport,\r\n );\r\n }\r\n}\r\n","import { inject, transient } from 'aurelia-framework';\r\nimport { HttpClient, HttpResponseMessage } from 'aurelia-http-client';\r\nimport ApplicationInsightsService from './application-insights-service';\r\n\r\nfunction getConsoleFunction(logLevel) {\r\n switch (logLevel) {\r\n case 4:\r\n return console.error;\r\n\r\n case 3:\r\n return console.warn;\r\n\r\n case 2:\r\n default:\r\n return console.info;\r\n }\r\n}\r\n\r\nfunction stringifyError(error) {\r\n if (error instanceof HttpResponseMessage) return error.response;\r\n\r\n if (error instanceof Error) return error.stack;\r\n\r\n if (error.message) return error.message;\r\n\r\n if (typeof error === 'string') return error;\r\n\r\n var errorToString = error.toString();\r\n if (errorToString !== '[object Object]') return errorToString;\r\n\r\n try {\r\n return JSON.stringify(error);\r\n } catch (e) {\r\n console.error('Error stringifying error.', e);\r\n return '[cannot stringify error]';\r\n }\r\n}\r\n\r\nfunction stringifyState(state) {\r\n try {\r\n return JSON.stringify(state);\r\n } catch (e) {\r\n console.error('Error stringifying state.', e);\r\n return '\"cannot stringify state\"';\r\n }\r\n}\r\n\r\nfunction tryParse(data) {\r\n try {\r\n return JSON.parse(data);\r\n } catch (e) {\r\n return null;\r\n }\r\n}\r\n\r\nvar enableConsoleLog = window.location.hostname === 'localhost';\r\n\r\n// Log levels in used in web-client: info = 2, warn = 3, error = 4\r\n// These values come from Microsoft.Extensions.Logging.LogLevel\r\n\r\nfunction getErrorData(error) {\r\n if (!error) return {};\r\n\r\n if (error instanceof HttpResponseMessage) {\r\n let responseContent = tryParse(error.response);\r\n let exception = (responseContent && responseContent.exception) || error.response;\r\n\r\n return {\r\n exception: exception && exception.toString(),\r\n apiErrorCode: responseContent && responseContent.apiErrorCode,\r\n requestId: error.headers && error.headers.get('x-http-request-id'),\r\n httpMethod: error.requestMessage.method,\r\n statusCode: error.statusCode,\r\n url: window.location.origin + error.requestMessage.baseUrl + error.requestMessage.url,\r\n };\r\n }\r\n\r\n return {\r\n exception: stringifyError(error),\r\n apiErrorCode: error.apiErrorCode,\r\n requestId: error.httpRequestId,\r\n httpMethod: error.httpMethod,\r\n statusCode: error.httpStatusCode,\r\n url: error.url,\r\n };\r\n}\r\n\r\n@transient()\r\n@inject(HttpClient, ApplicationInsightsService)\r\nexport default class Logger {\r\n constructor(httpClient, applicationInsightsService) {\r\n this.httpClient = httpClient;\r\n this.applicationInsightsService = applicationInsightsService;\r\n this.name = '';\r\n }\r\n\r\n info(message, state) {\r\n this.log({\r\n logLevel: 2,\r\n message,\r\n state,\r\n });\r\n }\r\n\r\n warn(message, error, state) {\r\n this.log({\r\n logLevel: 3,\r\n message,\r\n error,\r\n state,\r\n });\r\n }\r\n\r\n error(message, error, state) {\r\n this.log({\r\n logLevel: 4,\r\n message,\r\n error,\r\n state,\r\n });\r\n }\r\n\r\n log({ logLevel = 2, message = '', error = null, state = null } = {}) {\r\n try {\r\n var loggerName = `[web-client] ${this.name}`;\r\n\r\n if (enableConsoleLog) {\r\n var consoleMessage = `${loggerName}: ${message}`;\r\n var consoleParameters = [consoleMessage, error, state].filter(\r\n (item) => typeof item !== 'undefined' && item !== null,\r\n );\r\n var consoleFunction = getConsoleFunction(logLevel);\r\n consoleFunction(...consoleParameters);\r\n }\r\n\r\n var data = {\r\n logLevel,\r\n name: loggerName,\r\n message,\r\n state: state && stringifyState(state),\r\n };\r\n\r\n var errorData = getErrorData(error);\r\n var logEntry = Object.assign({}, data, errorData);\r\n\r\n this.httpClient.post('log-entries', logEntry).catch((e) => {\r\n console.error('Error posting log entry to server.', e);\r\n });\r\n\r\n errorData.loggerName = this.name;\r\n this.applicationInsightsService.trackEvent(\r\n logLevel,\r\n error,\r\n message,\r\n errorData,\r\n data.state,\r\n );\r\n } catch (e) {\r\n console.error('Error logging in logger.', e);\r\n }\r\n }\r\n}\r\n","import {\r\n ColDef,\r\n ColGroupDef,\r\n GridOptions,\r\n IAggFuncParams,\r\n ValueFormatterParams,\r\n ValueGetterParams,\r\n} from 'ag-grid-community';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport moment from 'moment';\r\nimport { renderAgGridCellForAurelia } from '../infrastructure/aurelia-cell-renderer';\r\n\r\nconst getEmmaValue = (params: ValueGetterParams, field: string) => {\r\n return (params.data && params.data[field]) || 'Standard Submission';\r\n};\r\n\r\nconst formatIsMobile = (params: ValueFormatterParams): string => {\r\n switch (params.value) {\r\n case true:\r\n return 'Yes';\r\n case false:\r\n return 'No';\r\n default:\r\n return 'Blank';\r\n }\r\n};\r\n\r\nconst formatResult = (params: ValueFormatterParams): string => {\r\n if (typeof params.value === 'undefined') {\r\n return '';\r\n }\r\n\r\n switch (params.value) {\r\n case 'True':\r\n return 'Pass';\r\n case 'False':\r\n return 'Fail';\r\n default:\r\n return 'Incomplete';\r\n }\r\n};\r\n\r\n// This gets called BEFORE valueFormatter\r\nconst countResultAggFunction = (params: IAggFuncParams, type?: string): number => {\r\n let count = 0;\r\n params.values.forEach((v) => {\r\n if (typeof v === 'string' && v === type) {\r\n count++;\r\n } else if (typeof v === 'number') {\r\n count += v;\r\n }\r\n });\r\n\r\n return count;\r\n};\r\n\r\n// This gets called AFTER aggFunc\r\nconst resultValueFormatter = (params: ValueFormatterParams, type?: string): string => {\r\n if (typeof params.value === 'number') {\r\n return params.value.toString();\r\n }\r\n\r\n return params.value === type ? '1' : '0';\r\n};\r\n\r\nconst formatDateToLocal = (params: ValueFormatterParams): string => {\r\n if (!params.value) {\r\n return;\r\n }\r\n\r\n return moment(params.value).local().format('L LT');\r\n};\r\n\r\nconst formatCollectionType = (params: ValueFormatterParams): string => {\r\n if (!params.value) {\r\n return;\r\n }\r\n\r\n return params.value === 'CorrectiveAction' ? 'Corrective Action' : params.value;\r\n};\r\n\r\nconst testResultGridColDefs: (ColDef | ColGroupDef)[] = [\r\n {\r\n headerName: 'Organization',\r\n field: 'organizationCode',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Request Id',\r\n field: 'requestExternalId',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Sample Id',\r\n field: 'sampleExternalId',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Test',\r\n field: 'testMethodDescription',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'count(Pass)',\r\n field: 'result',\r\n colId: 'result-count-pass',\r\n toolPanelClass: 'tp-pass',\r\n aggFunc: (params: IAggFuncParams) => countResultAggFunction(params, 'True'),\r\n valueFormatter: (params: ValueFormatterParams) => resultValueFormatter(params, 'True'),\r\n chartDataType: 'series',\r\n },\r\n {\r\n headerName: 'count(Fail)',\r\n field: 'result',\r\n colId: 'result-count-fail',\r\n toolPanelClass: 'tp-fail',\r\n aggFunc: (params: IAggFuncParams) => countResultAggFunction(params, 'False'),\r\n valueFormatter: (params: ValueFormatterParams) => resultValueFormatter(params, 'False'),\r\n chartDataType: 'series',\r\n },\r\n {\r\n headerName: 'count(Incomplete)',\r\n field: 'result',\r\n colId: 'result-count-incomplete',\r\n toolPanelClass: 'tp-incomplete',\r\n aggFunc: (params: IAggFuncParams) => countResultAggFunction(params, 'Incomplete'),\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n resultValueFormatter(params, 'Incomplete'),\r\n chartDataType: 'series',\r\n },\r\n {\r\n headerName: 'Root Cause',\r\n field: 'remediationRootCauseName',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Map',\r\n field: 'mapName',\r\n valueGetter: (params: ValueGetterParams) => getEmmaValue(params, 'mapName'),\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Plan',\r\n field: 'planName',\r\n valueGetter: (params: ValueGetterParams) => getEmmaValue(params, 'planName'),\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Test Created',\r\n field: 'testCreateDateTime',\r\n valueFormatter: formatDateToLocal,\r\n initialHide: true,\r\n },\r\n {\r\n headerName: 'Sample Detail',\r\n marryChildren: true,\r\n children: [\r\n {\r\n headerName: 'Sample Description',\r\n field: 'sampleDescription',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Result',\r\n field: 'result',\r\n valueFormatter: formatResult,\r\n },\r\n {\r\n headerName: 'Test Code',\r\n field: 'testCode',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n filter: 'agTextColumnFilter',\r\n },\r\n {\r\n headerName: 'Quantitative Result',\r\n field: 'quantitativeResult',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Qualitative Result',\r\n field: 'qualitativeResult',\r\n columnGroupShow: 'open',\r\n },\r\n ],\r\n },\r\n {\r\n headerName: 'Point Detail',\r\n marryChildren: true,\r\n children: [\r\n {\r\n headerName: 'Point Name',\r\n field: 'pointName',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Point Description',\r\n field: 'pointDescription',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Point Zone',\r\n field: 'pointZone',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Point Room',\r\n field: 'pointRoom',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n\r\n {\r\n headerName: 'Point Type',\r\n field: 'pointType',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Point Risk',\r\n field: 'pointRisk',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Mobility',\r\n field: 'pointIsMobile',\r\n valueFormatter: formatIsMobile,\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n },\r\n ],\r\n },\r\n {\r\n headerName: 'Task Detail',\r\n marryChildren: true,\r\n children: [\r\n {\r\n headerName: 'Task Id',\r\n field: 'taskInternalId',\r\n chartDataType: 'excluded',\r\n },\r\n {\r\n headerName: 'Task Collection Type',\r\n field: 'taskCollectionType',\r\n columnGroupShow: 'open',\r\n chartDataType: 'category',\r\n valueFormatter: formatCollectionType,\r\n },\r\n {\r\n headerName: 'Task Collection DateTime',\r\n field: 'taskCollectionDateTime',\r\n columnGroupShow: 'open',\r\n chartDataType: 'series',\r\n valueFormatter: formatDateToLocal,\r\n },\r\n ],\r\n },\r\n {\r\n headerName: 'View in EMMA',\r\n suppressMenu: true,\r\n cellClass: 'medium-text-center',\r\n width: 120,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n chartDataType: 'excluded',\r\n enableRowGroup: false,\r\n enablePivot: false,\r\n pinned: 'right',\r\n valueGetter: (params: ValueGetterParams) => {\r\n if (!params.data) {\r\n return;\r\n }\r\n const { data } = params;\r\n\r\n return {\r\n data,\r\n template: `\r\n \r\n `,\r\n };\r\n },\r\n cellRenderer: renderAgGridCellForAurelia,\r\n },\r\n];\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: testResultGridColDefs,\r\n defaultColDef: {\r\n minWidth: 100,\r\n enableValue: true,\r\n enableRowGroup: true,\r\n enablePivot: true,\r\n },\r\n autoGroupColumnDef: {\r\n minWidth: 200,\r\n },\r\n sideBar: 'columns',\r\n animateRows: true,\r\n statusBar: {\r\n statusPanels: [\r\n { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' },\r\n { statusPanel: 'agTotalRowCountComponent', align: 'center' },\r\n { statusPanel: 'agFilteredRowCountComponent' },\r\n { statusPanel: 'agSelectedRowCountComponent' },\r\n { statusPanel: 'agAggregationComponent' },\r\n ],\r\n },\r\n suppressAggFuncInHeader: true,\r\n enableRangeSelection: true,\r\n enableCharts: true,\r\n popupParent: document.body,\r\n customChartThemes: {\r\n passFailCustomTheme: {\r\n baseTheme: 'ag-default',\r\n palette: {\r\n fills: ['#25d925', '#c00', '#9fd0cb'],\r\n strokes: ['#24d824', '#cc0000', '#9ed1cc'],\r\n },\r\n },\r\n },\r\n chartThemes: ['passFailCustomTheme', 'ag-default', 'ag-pastel', 'ag-vivid'],\r\n};\r\n\r\n// Don't set autoHeight as it squishes the column side bar when low row counts\r\nconst testResultGrid: GridOptions = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .addStatefulness('raw-test-results-grid')\r\n .build();\r\n\r\nexport { testResultGrid, testResultGridColDefs };\r\n","import { ICellRendererParams } from 'ag-grid-community';\r\nimport { Container, ViewCompiler } from 'aurelia-framework';\r\n\r\nexport function renderAgGridCellForAurelia(params: ICellRendererParams): HTMLElement {\r\n const { template, data } = Object(params.value);\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const aureliaTemplate = ``;\r\n const container = Container.instance;\r\n const viewCompiler = container.get(ViewCompiler);\r\n const viewFactory = viewCompiler.compile(aureliaTemplate);\r\n const view = viewFactory.create(container);\r\n const rootElement = document.createElement('div');\r\n view.bind(params.value);\r\n view.appendNodesTo(rootElement);\r\n\r\n return rootElement;\r\n}\r\n","import operationsTimingOptions from './operations-timing-options';\r\n\r\nexport function toOperationsTiming(value: string): string {\r\n const timing = operationsTimingOptions.find((x: any) => x.value === value);\r\n return timing ? timing.value : '';\r\n}\r\n","import { GridOptions } from 'ag-grid-community';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport { AureliaCellRendererCompBase } from 'infrastructure/ag-grid/aurelia-cell-renderer-comp-base';\r\n\r\nconst template = `\r\n \r\n `;\r\nclass AgCellDelegateHandler extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(template);\r\n }\r\n}\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: [\r\n { headerName: 'Filename', field: 'name', width: 450 },\r\n {\r\n colId: 'fileActionCol',\r\n suppressMenu: true,\r\n headerName: '',\r\n cellRenderer: AgCellDelegateHandler,\r\n },\r\n ],\r\n};\r\n\r\nconst remediationPreFilesGridOptions: GridOptions = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .withAutoHeight()\r\n .addStatefulness('remediation-detail-pre-files-grid')\r\n .build();\r\n\r\nconst remediationPostFileGridOptions: GridOptions = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .withAutoHeight()\r\n .addStatefulness('remediation-detail-post-files-grid')\r\n .build();\r\n\r\nexport { remediationPostFileGridOptions, remediationPreFilesGridOptions };\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\n\r\nexport default class GlossaryTermService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getGlossaryTerms() {\r\n return this\r\n .httpClient\r\n .get(`help/glossary-terms`);\r\n }\r\n\r\n getGlossaryTerm(id) {\r\n return this.httpClient.get(`help/glossary-terms/${id}`);\r\n }\r\n\r\n deleteGlossaryTerms(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`help/glossary-terms?${query}`);\r\n }\r\n\r\n saveGlossaryTerm(glossaryTerm) {\r\n if (!glossaryTerm.id)\r\n return this.httpClient.post('help/glossary-terms/', glossaryTerm);\r\n\r\n return this.httpClient.put(`help/glossary-terms/${glossaryTerm.id}`, glossaryTerm);\r\n }\r\n}\r\n","import SelectorOption from 'infrastructure/selector-option';\r\n\r\nenum TestMethodGroup {\r\n SEROTYPE = 'Salmonella Serotype',\r\n SPECIATION = 'Listeria Speciation Id',\r\n PROFILE = 'Profile',\r\n}\r\n\r\nexport default TestMethodGroup;\r\n\r\nexport function getTestMethodGroups(): SelectorOption[] {\r\n return [\r\n { value: TestMethodGroup.SEROTYPE, title: 'Serotype' },\r\n { value: TestMethodGroup.SPECIATION, title: 'Speciation' },\r\n { value: TestMethodGroup.PROFILE, title: 'Profile' },\r\n ];\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class TimeZoneService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getTimeZones() {\r\n return this.httpClient.get(`time-zones`);\r\n }\r\n}\r\n","enum TaskListViewOption {\r\n LIST = 'list',\r\n CALENDAR = 'calendar'\r\n}\r\n\r\nexport default TaskListViewOption;\r\n","import { BaseQueryFilter } from 'infrastructure/components/query-filters/base-query-filter';\r\nimport {\r\n DateRangeQuery,\r\n DateRangeQueryFilter,\r\n} from 'infrastructure/components/query-filters/date-range-query-filter';\r\nimport {\r\n OrganizationsQuery,\r\n OrganizationsQueryFilters,\r\n} from 'infrastructure/components/query-filters/organizations-query-filter';\r\nimport { QueryFiltered } from 'infrastructure/components/query-filters/query-filtered';\r\n\r\nexport interface StatusQuery {\r\n organizationIds: number[];\r\n dateRangeOption?: string;\r\n targetStartDate: string;\r\n targetEndDate: string;\r\n dateRangeOverride?: boolean;\r\n requestId?: string;\r\n sampleId?: string;\r\n poNumber?: string;\r\n description?: string;\r\n format?: string;\r\n customerRequestStatus?: string;\r\n}\r\n\r\nexport class StatusQueryFilters extends BaseQueryFilter implements QueryFiltered {\r\n private _filterCaption: string;\r\n organizationQueryFilters: OrganizationsQueryFilters;\r\n dateRangeQueryFilters: DateRangeQueryFilter;\r\n requestId: string;\r\n sampleId: string;\r\n poNumber: string;\r\n description: string;\r\n format: string;\r\n customerRequestStatus: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.organizationQueryFilters = new OrganizationsQueryFilters();\r\n this.dateRangeQueryFilters = new DateRangeQueryFilter();\r\n this.requestId = null;\r\n this.sampleId = null;\r\n this.poNumber = null;\r\n this.description = null;\r\n this.customerRequestStatus = null;\r\n }\r\n\r\n public get count(): number {\r\n return (\r\n 0 +\r\n this.organizationQueryFilters.count +\r\n Number(!!this.requestId && this.requestId.length > 0) +\r\n Number(!!(this.sampleId && this.sampleId.length > 0)) +\r\n Number(!!(this.poNumber && this.poNumber.length > 0)) +\r\n Number(!!(this.description && this.description.length > 0))\r\n );\r\n }\r\n public get filterCaption(): string {\r\n return this._filterCaption;\r\n }\r\n\r\n reset(): void {\r\n this.organizationQueryFilters.reset();\r\n this.dateRangeQueryFilters.reset();\r\n this.requestId = null;\r\n this.sampleId = null;\r\n this.poNumber = null;\r\n this.description = null;\r\n this.customerRequestStatus = null;\r\n }\r\n\r\n getQueryParams(): StatusQuery {\r\n return {\r\n ...this.organizationQueryFilters.getQueryParams(),\r\n ...this.dateRangeQueryFilters.getQueryParams(),\r\n requestId: this.requestId,\r\n sampleId: this.sampleId,\r\n poNumber: this.poNumber,\r\n description: this.description,\r\n format: this.format,\r\n customerRequestStatus: this.customerRequestStatus,\r\n };\r\n }\r\n\r\n setFilterValues(params: StatusQuery): void {\r\n const dateRangeQuery: DateRangeQuery = {\r\n dateRangeOption: params.dateRangeOption,\r\n targetStartDate: params.targetStartDate,\r\n targetEndDate: params.targetEndDate,\r\n dateRangeOverride: params.dateRangeOverride,\r\n };\r\n const organizationsQuery: OrganizationsQuery = { organizationIds: params.organizationIds };\r\n const { requestId, sampleId, poNumber, description, customerRequestStatus } = {\r\n ...params,\r\n };\r\n\r\n this.organizationQueryFilters.setFilterValues(organizationsQuery);\r\n this.dateRangeQueryFilters.setFilterValues(dateRangeQuery);\r\n\r\n super.setQueryFilteredValues(\r\n {\r\n requestId,\r\n sampleId,\r\n poNumber,\r\n description,\r\n customerRequestStatus,\r\n },\r\n this,\r\n );\r\n\r\n this._filterCaption = super.getFilterCaption(\r\n this.count,\r\n 'Request Creation Date Range',\r\n this.dateRangeQueryFilters.dateRangeCaption,\r\n );\r\n }\r\n}\r\n","import SelectorOption from 'infrastructure/selector-option';\r\nimport MapSummary from 'location-testing/maps/map-summary';\r\n\r\nexport default class MapSummaryConverter {\r\n static toSelectorOptions(mapSummaries: MapSummary[], activeOnly = true): SelectorOption[] {\r\n if (!mapSummaries)\r\n return [];\r\n\r\n let maps = activeOnly ? mapSummaries.filter(m => m.isActive) : mapSummaries;\r\n\r\n let options = [];\r\n maps.forEach(ms => {\r\n let option = {\r\n title: ms.name,\r\n value: ms.id\r\n } as unknown as SelectorOption;\r\n\r\n options.push(option);\r\n });\r\n\r\n return options;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { ActiveTestMethodPlans } from './contracts/active-test-method-plans';\r\nimport { ReplaceTestMethodRequest } from './contracts/replace-test-method-request';\r\nimport { TestMethodReplacemantImpactCounts } from './contracts/test-method-replacement-impact-counts';\r\n\r\n@autoinject\r\nexport default class PlanManagementService {\r\n constructor(private httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n fetchActiveTestMethodPlans(): Promise {\r\n return this.httpClient.get('location-testing/plan-management') as any as Promise<\r\n ActiveTestMethodPlans[]\r\n >;\r\n }\r\n\r\n getTestMethodReplacementImpactCounts(\r\n testMethodId: number,\r\n organizationId?: number,\r\n ): Promise {\r\n const url = `location-testing/plan-management/test-methods/${testMethodId}/replacement-impact-count${\r\n organizationId ? '?organizationId=' + organizationId : ''\r\n }`;\r\n return this.httpClient.get(url) as any as Promise;\r\n }\r\n\r\n replaceTestMethod(replaceTestMethodRequest: ReplaceTestMethodRequest) {\r\n return this.httpClient.put('location-testing/plan-management', replaceTestMethodRequest);\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class UserGuideService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getUserGuides(code) {\r\n if (code)\r\n return this.httpClient.get(`help/user-guides/?code=${code}`);\r\n\r\n return this.httpClient.get('help/user-guides');\r\n }\r\n\r\n getUserGuide(id) {\r\n return this.httpClient.get(`help/user-guides/${id}`);\r\n }\r\n\r\n deleteUserGuides(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`help/user-guides?${query}`);\r\n }\r\n\r\n saveUserGuide(userGuide) {\r\n if (!userGuide.id)\r\n return this.httpClient.post('help/user-guides/', userGuide);\r\n\r\n return this.httpClient.put(`help/user-guides/${userGuide.id}`, userGuide);\r\n }\r\n}\r\n","// refactor this to a custom component if another similar use case arises\r\nexport const calculatePageSizes = (totalCount: number, maxCountDivisor = 1000): number[] => {\r\n if (totalCount <= maxCountDivisor) return [maxCountDivisor];\r\n\r\n const multiple = Math.ceil(totalCount / maxCountDivisor) * maxCountDivisor;\r\n const divisor = multiple / 4;\r\n\r\n const pageSizes = [divisor];\r\n for (let i = 2; i < 5; i++) {\r\n const pageSize = divisor * i;\r\n if (pageSize - totalCount < divisor) {\r\n pageSizes.push(pageSize);\r\n }\r\n }\r\n\r\n return pageSizes;\r\n};\r\n","import { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface IsSubmittedQuery {\r\n isSubmitted: any;\r\n}\r\n\r\nexport class IsSubmittedQueryFilters extends BaseQueryFilter\r\n implements IsSubmittedQuery, QueryFiltered {\r\n\r\n private _isSubmitted: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this._isSubmitted = -1;\r\n }\r\n\r\n public get isSubmitted(): any {\r\n return this._isSubmitted;\r\n }\r\n\r\n public set isSubmitted(submittedState: any) {\r\n this._isSubmitted = submittedState;\r\n }\r\n\r\n public get count(): number {\r\n return Number(this._isSubmitted !== -1);\r\n }\r\n\r\n reset(): void {\r\n this._isSubmitted = -1;\r\n }\r\n\r\n getQueryParams(): IsSubmittedQuery {\r\n return this._isSubmitted === 0 || this._isSubmitted === 1\r\n ? { isSubmitted: this._isSubmitted === 1 }\r\n : null;\r\n }\r\n\r\n setFilterValues(params: IsSubmittedQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n let isSubmitted: number;\r\n switch (params.isSubmitted) {\r\n case 'true':\r\n isSubmitted = 1;\r\n break;\r\n case 'false':\r\n isSubmitted = 0;\r\n break;\r\n default:\r\n isSubmitted = -1;\r\n }\r\n\r\n super.setQueryFilteredValues({ isSubmitted }, this);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport Organization from './organization';\r\n\r\n@autoinject\r\nexport default class OrganizationService {\r\n constructor(private httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n findOrganizations(startsWith: string) {\r\n const query = buildQueryString({ startsWith }, true);\r\n\r\n return this.httpClient.get(`organizations?${query}`);\r\n }\r\n\r\n getOrganization(id) {\r\n return this.httpClient.get(`organizations/${id}`);\r\n }\r\n\r\n getOrganizations(): any {\r\n return this.httpClient.get('organizations');\r\n }\r\n\r\n getImpersonatingOrganizations(): Promise {\r\n return this.httpClient.get('organizations/impersonating') as any as Promise\r\n }\r\n\r\n getOrganizationDetail(id) {\r\n return this.httpClient.get(`organizations/${id}/detail`);\r\n }\r\n\r\n saveOrganization(organization) {\r\n return this.httpClient.put(`organizations/${organization.id}`, organization);\r\n }\r\n\r\n getConfigurationValues(names, id = null) {\r\n var query = buildQueryString({ names }, true);\r\n\r\n if (!id) id = 'all';\r\n\r\n return this.httpClient.get(`organizations/${id}/configuration${query ? `?${query}` : ''}`);\r\n }\r\n\r\n getConfigurationsValues(id: number): any {\r\n return this.httpClient.get(`organizations/${id}/settings`);\r\n }\r\n\r\n saveConfigurationValues(id, data) {\r\n return this.httpClient.put(`organizations/${id}/configuration`, data);\r\n }\r\n\r\n saveConfigurationsValues(id, data) {\r\n return this.httpClient.put(`organizations/${id}/settings`, data);\r\n }\r\n\r\n async checkConfigurationFlag(name) {\r\n let configuration = await this.getConfigurationValues([name]);\r\n\r\n return Object.values(configuration).some(c => c[name]?.toLowerCase() === 'true');\r\n }\r\n\r\n async getConfiguration(nameOrNames) {\r\n let isArray = Array.isArray(nameOrNames);\r\n return await this.getConfigurationValues(isArray ? nameOrNames : [nameOrNames]);\r\n }\r\n\r\n getImpersonatingConfiguration(nameOrNames) {\r\n const names = Array.isArray(nameOrNames) ? nameOrNames : [nameOrNames];\r\n const query = buildQueryString({names}, true);\r\n \r\n return this.httpClient.get(`organizations/impersonating/configuration?${query}`);\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class NewsItemService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getNewsItems({ forDashboard = true } = {}) {\r\n var query = forDashboard ? '?forDashboard=true' : '';\r\n return this.httpClient.get(`news-items/${query}`);\r\n }\r\n\r\n getNewsItem(id) {\r\n return this.httpClient.get(`news-items/${id}`);\r\n }\r\n\r\n deleteNewsItems(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`news-items?${query}`);\r\n }\r\n\r\n saveNewsItem(newsItem) {\r\n if (!newsItem.id)\r\n return this.httpClient.post('news-items/', newsItem);\r\n\r\n return this.httpClient.put(`news-items/${newsItem.id}`, newsItem);\r\n }\r\n}\r\n","import SegmentLookup from './segment-lookup';\r\nimport SegmentationTemplate from './segmentation-template';\r\nimport UiSegmentationTemplateSegment from './ui-segmentation-template-segment';\r\n\r\nexport interface LookupPair {\r\n code: string;\r\n value: string;\r\n}\r\n\r\nexport interface LookupMapping {\r\n sourceSegmentName: string | null;\r\n autoFillSegmentName: string | null;\r\n pairs: LookupPair[];\r\n}\r\n\r\nexport default class UiSegmentationTemplate {\r\n id: number;\r\n organizationId: number;\r\n name: string;\r\n isArchived: boolean;\r\n isActive: boolean;\r\n\r\n segments: UiSegmentationTemplateSegment[];\r\n lookupMapping: LookupMapping;\r\n\r\n organization: any;\r\n organizationCaption: string;\r\n\r\n isSelected: boolean;\r\n\r\n static fromModel(\r\n segmentationTemplate: SegmentationTemplate,\r\n organizations: any[],\r\n ): UiSegmentationTemplate {\r\n let uiSegmentationTemplate = new UiSegmentationTemplate();\r\n uiSegmentationTemplate.id = segmentationTemplate.id;\r\n uiSegmentationTemplate.organizationId = segmentationTemplate.organizationId;\r\n uiSegmentationTemplate.name = segmentationTemplate.name;\r\n uiSegmentationTemplate.isArchived = segmentationTemplate.isArchived;\r\n uiSegmentationTemplate.isActive = segmentationTemplate.isActive;\r\n\r\n const rawSegments = segmentationTemplate.segments ?? [];\r\n\r\n uiSegmentationTemplate.segments = rawSegments\r\n .filter((s) => s.isActive)\r\n .map((s) => UiSegmentationTemplateSegment.fromModel(s));\r\n\r\n const rawChild = rawSegments.find((s) => s.isActive && s.parentSegmentId != null);\r\n if (rawChild) {\r\n const rawParent = rawSegments.find((s) => s.id === rawChild.parentSegmentId);\r\n const childPairs = UiSegmentationTemplate.tryParseSegmentLookups(rawChild.values);\r\n uiSegmentationTemplate.lookupMapping = {\r\n sourceSegmentName: rawParent?.name ?? null,\r\n autoFillSegmentName: rawChild.name,\r\n pairs: childPairs.map((p) => ({ code: p.parent, value: p.child })),\r\n };\r\n } else {\r\n uiSegmentationTemplate.lookupMapping = { sourceSegmentName: null, autoFillSegmentName: null, pairs: [] };\r\n }\r\n\r\n uiSegmentationTemplate.organization = organizations.find(\r\n (o) => o.id === segmentationTemplate.organizationId,\r\n );\r\n if (uiSegmentationTemplate.organization)\r\n uiSegmentationTemplate.organizationCaption = `${uiSegmentationTemplate.organization.externalId} - ${uiSegmentationTemplate.organization.name}`;\r\n\r\n uiSegmentationTemplate.isSelected = false;\r\n\r\n return uiSegmentationTemplate;\r\n }\r\n\r\n // Malformed Values JSON should degrade to an empty pairs list rather than\r\n // fail the whole template load.\r\n static tryParseSegmentLookups(values: string): SegmentLookup[] {\r\n try {\r\n const parsed = JSON.parse(values || '[]');\r\n return Array.isArray(parsed) ? parsed : [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n toModel(): SegmentationTemplate {\r\n\r\n const segments = this.segments.map((s, index) => {\r\n const model = s.toModel();\r\n // Assign a negative temporary id to any that don't have one. \r\n // This way, we can resolve parent/child relationships later\r\n // for the segment to sement mapping\r\n if (!model.id) model.id = -(index + 1); \r\n return model;\r\n });\r\n\r\n const { sourceSegmentName, autoFillSegmentName, pairs } = this.lookupMapping ?? {};\r\n const completedPairs = (pairs ?? []).filter((p) => p.code);\r\n if (sourceSegmentName && autoFillSegmentName && completedPairs.length > 0) {\r\n const sourceSegment = segments.find((s) => s.name === sourceSegmentName);\r\n const autoFillSegment = segments.find((s) => s.name === autoFillSegmentName);\r\n if (sourceSegment && autoFillSegment) {\r\n sourceSegment.values = JSON.stringify(completedPairs.map((p) => p.code));\r\n autoFillSegment.parentSegmentId = sourceSegment.id ?? null;\r\n autoFillSegment.values = JSON.stringify(\r\n completedPairs.map((p): SegmentLookup => ({ parent: p.code, child: p.value })),\r\n );\r\n }\r\n } else {\r\n segments.forEach((s) => {\r\n s.parentSegmentId = null;\r\n s.values = null;\r\n });\r\n }\r\n\r\n return {\r\n id: this.id,\r\n organizationId: this.organizationId,\r\n name: this.name,\r\n isArchived: this.isArchived,\r\n isActive: this.isActive,\r\n segments,\r\n };\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class PasswordRequirementsService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getRequirements() {\r\n return this.httpClient.get('password-requirements/current');\r\n }\r\n\r\n saveRequirements(requirements) {\r\n return this.httpClient.post('password-requirements/current', requirements);\r\n }\r\n}\r\n","import { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface IsAssignedQuery {\r\n isAssigned: any;\r\n}\r\n\r\nexport class IsAssignedQueryFilters extends BaseQueryFilter\r\n implements IsAssignedQuery, QueryFiltered {\r\n\r\n private _isAssigned: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this._isAssigned = -1;\r\n }\r\n\r\n public get isAssigned(): any {\r\n return this._isAssigned;\r\n }\r\n\r\n public set isAssigned(assignedState: any) {\r\n this._isAssigned = assignedState;\r\n }\r\n\r\n public get count(): number {\r\n return (Number(this._isAssigned !== -1));\r\n }\r\n\r\n reset(): void {\r\n this._isAssigned = -1;\r\n }\r\n\r\n getQueryParams(): IsAssignedQuery {\r\n return this._isAssigned === 0 || this._isAssigned === 1\r\n ? { isAssigned: this._isAssigned === 0 ? false : true }\r\n : null;\r\n }\r\n\r\n setFilterValues(params: IsAssignedQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n let isAssigned: number;\r\n switch (params.isAssigned) {\r\n case 'true':\r\n isAssigned = 1;\r\n break;\r\n case 'false':\r\n isAssigned = 0;\r\n break\r\n default:\r\n isAssigned = -1;\r\n }\r\n\r\n super.setQueryFilteredValues({ isAssigned }, this);\r\n }\r\n}\r\n","import { autoinject, buildQueryString } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport Organization from 'organizations/organization';\r\n\r\n@autoinject\r\nexport default class UserService {\r\n constructor(private httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getUsers(search: string = null, organizationIds: number[] = []) {\r\n var query = buildQueryString({\r\n search,\r\n organizationIds\r\n }, true);\r\n\r\n return this.httpClient.get(`users?${query}`);\r\n }\r\n\r\n getUser(id: number) {\r\n return this.httpClient.get(`users/${id}`);\r\n }\r\n\r\n deleteUsers(ids: number[]) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`users?${query}`);\r\n }\r\n\r\n getCurrentUserOrganizations(): Promise {\r\n return this.httpClient.get('users/current/organizations') as any as Promise;\r\n }\r\n\r\n saveUser(user: any) {\r\n if (!user.id)\r\n return this.httpClient.post('users/', user);\r\n\r\n return this.httpClient.put(`users/${user.id}`, user);\r\n }\r\n\r\n unlockUser(id: number) {\r\n return this.httpClient.patch(`users/${id}`, { isLocked: false });\r\n }\r\n\r\n bulkUpdateUsersRole(userRoles) {\r\n return this.httpClient.put('users/roles', userRoles);\r\n }\r\n\r\n getUserRecordChanges(id: number) {\r\n return this.httpClient.get(`users/${id}/record-changes`);\r\n }\r\n}\r\n","import RecordStatus from 'record-status';\r\nimport { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface RecordStatusQuery {\r\n recordStatus: RecordStatus;\r\n}\r\n\r\nexport class RecordStatusQueryFilters extends BaseQueryFilter\r\n implements RecordStatusQuery, QueryFiltered {\r\n private _recordStatus: RecordStatus;\r\n\r\n constructor() {\r\n super();\r\n this._recordStatus = RecordStatus.ACTIVE;\r\n }\r\n\r\n public get recordStatus() {\r\n return this._recordStatus;\r\n }\r\n\r\n public set recordStatus(recordStatuses: RecordStatus) {\r\n this._recordStatus = recordStatuses || RecordStatus.ACTIVE;\r\n }\r\n\r\n public get count(): number {\r\n return (Number(!!this._recordStatus && this._recordStatus !== RecordStatus.ACTIVE));\r\n }\r\n\r\n reset(): void {\r\n this._recordStatus = RecordStatus.ACTIVE;\r\n }\r\n\r\n getQueryParams(): RecordStatusQuery {\r\n return {\r\n recordStatus: this._recordStatus,\r\n };\r\n }\r\n\r\n setFilterValues(params: RecordStatusQuery): void {\r\n super.setQueryFilteredValues(params, this);\r\n }\r\n}\r\n","import { computedFrom } from 'aurelia-framework';\r\nimport TestMethodGroup from 'location-testing/test-method-group';\r\nimport { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface ConfirmationTestingQuery {\r\n testMethodGroup: TestMethodGroup;\r\n confirmationTestValues: string[];\r\n}\r\n\r\n/* eslint-disable brace-style */\r\nexport class ConfirmationTestingQueryFilters\r\n extends BaseQueryFilter\r\n implements QueryFiltered\r\n{\r\n private _testMethodGroup: TestMethodGroup;\r\n private _confirmationTestValues: string[];\r\n\r\n constructor() {\r\n super();\r\n this._testMethodGroup = null;\r\n this._confirmationTestValues = [];\r\n }\r\n\r\n @computedFrom('_testMethodGroup')\r\n public get testMethodGroup() {\r\n return this._testMethodGroup;\r\n }\r\n\r\n public set testMethodGroup(tmg: TestMethodGroup) {\r\n this._testMethodGroup = tmg;\r\n this._confirmationTestValues = [];\r\n }\r\n\r\n public get count(): number {\r\n return (\r\n 0 +\r\n Number(!!this.testMethodGroup) +\r\n Number(!!(this._confirmationTestValues && this._confirmationTestValues.length))\r\n );\r\n }\r\n\r\n reset(): void {\r\n this._testMethodGroup = null;\r\n this._confirmationTestValues = [];\r\n }\r\n\r\n getQueryParams(): ConfirmationTestingQuery {\r\n return {\r\n testMethodGroup: this._testMethodGroup,\r\n confirmationTestValues: this._confirmationTestValues,\r\n };\r\n }\r\n\r\n setFilterValues(params: ConfirmationTestingQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n super.setQueryFilteredValues(params, this);\r\n }\r\n}\r\n","import { LocalStorageConstants } from 'infrastructure/constants/localstorage.constants';\r\nimport AgPreferences from './ag-preferences';\r\n\r\nexport const agGridGetPreferences = (preferences: T): T => {\r\n const agPreferences =\r\n JSON.parse(localStorage.getItem(LocalStorageConstants.AG_PREFERENCES)) || {};\r\n const hasTPreferences = Object.prototype.hasOwnProperty.call(\r\n agPreferences,\r\n preferences.gridName,\r\n );\r\n\r\n if (!hasTPreferences) {\r\n agPreferences[preferences.gridName] = preferences;\r\n localStorage.setItem(LocalStorageConstants.AG_PREFERENCES, JSON.stringify(agPreferences));\r\n }\r\n\r\n return agPreferences[preferences.gridName];\r\n};\r\n\r\nexport const agGridSetPreferences = (preferences: T): T => {\r\n const agPreferences =\r\n JSON.parse(localStorage.getItem(LocalStorageConstants.AG_PREFERENCES)) || {};\r\n\r\n agPreferences[preferences.gridName] = preferences;\r\n localStorage.setItem(LocalStorageConstants.AG_PREFERENCES, JSON.stringify(agPreferences));\r\n\r\n return agPreferences[preferences.gridName];\r\n};\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { TaskOrder } from './task-order';\r\n\r\n// Shared by the label PDF dialog, the label CSV dialog and the request screen, so whichever one\r\n// the user changed last becomes the default for the others. Remembered per browser only.\r\n@autoinject\r\nexport class TaskOrderPreferenceService {\r\n private readonly storageKey = 'task-order-preference';\r\n\r\n get(): TaskOrder {\r\n try {\r\n return localStorage.getItem(this.storageKey) === 'onScreen' ? 'onScreen' : 'zonePlanPoint';\r\n } catch {\r\n return 'zonePlanPoint';\r\n }\r\n }\r\n\r\n set(order: TaskOrder): void {\r\n try {\r\n localStorage.setItem(this.storageKey, order);\r\n } catch {\r\n // Storage unavailable (private window, blocked site data) - the choice just isn't remembered.\r\n }\r\n }\r\n}\r\n","import { computedFrom } from 'aurelia-binding';\r\nimport { OrganizationConfigurationSetting } from './organization-configuration-settings';\r\nimport OrganizationSetting from './organization-setting';\r\n\r\nexport default class OrganizationDataTypeSetting implements OrganizationSetting {\r\n name: string;\r\n displayName: string;\r\n description: string;\r\n value: string;\r\n moduleType: string;\r\n dataType: string;\r\n\r\n @computedFrom('value')\r\n get booleanValue(): boolean {\r\n return this.stringToBoolean(this.value);\r\n }\r\n\r\n set booleanValue(value: boolean) {\r\n if (this.dataType === 'Boolean') {\r\n this.value = value ? 'True' : 'False';\r\n }\r\n }\r\n\r\n get usesLocalStorage(): boolean {\r\n return this.name === OrganizationConfigurationSetting.ENABLE_BETA_FEATURES;\r\n }\r\n\r\n stringToBoolean(value: string) {\r\n switch (value) {\r\n case 'true':\r\n case 'yes':\r\n case '1':\r\n case 'True':\r\n return true;\r\n case 'false':\r\n case 'no':\r\n case '0':\r\n case 'False':\r\n case null:\r\n return false;\r\n default:\r\n return Boolean(value);\r\n }\r\n }\r\n}\r\n","// How task labels (PDF/CSV) and request samples are ordered. 'zonePlanPoint' is the long-standing\r\n// default - labels and request samples share it so they always line up. 'onScreen' follows the\r\n// order of the list the user came from instead.\r\nexport type TaskOrder = 'zonePlanPoint' | 'onScreen';\r\n\r\n// e.g. \"Task Management · Due Date, ascending\", or just the screen name when it isn't sorted.\r\nexport function describeOnScreenOrder(\r\n screenName: string,\r\n columnLabel?: string,\r\n direction?: string,\r\n): string {\r\n if (!columnLabel) {\r\n return screenName;\r\n }\r\n\r\n return `${screenName} · ${columnLabel}, ${direction === 'desc' ? 'descending' : 'ascending'}`;\r\n}\r\n\r\n// Returns items ordered to match idsInOrder. Items whose id isn't listed go last, keeping their\r\n// relative order.\r\nexport function orderByIds(items: T[], idsInOrder: number[]): T[] {\r\n const positions = new Map();\r\n idsInOrder.forEach((id, index) => {\r\n if (!positions.has(id)) {\r\n positions.set(id, index);\r\n }\r\n });\r\n\r\n const positionOf = (item: T) => positions.get(item.id) ?? Number.MAX_SAFE_INTEGER;\r\n return [...items].sort((a, b) => positionOf(a) - positionOf(b));\r\n}\r\n","import SelectorOption from 'infrastructure/selector-option';\r\nexport interface SubscriptionFrequency {\r\n minDeliveryDay: number;\r\n maxDeliveryDay: number;\r\n deliveryDayValidationErrorMessage: string;\r\n subscriptionFrequencyTypeValidationErrorMessage: string;\r\n}\r\n\r\nexport enum SubscriptionFrequencyType {\r\n Daily = 1,\r\n Weekly = 2,\r\n Monthly = 3,\r\n}\r\n\r\nexport const subscriptionFrequencyTypes: Record = {\r\n 1: { value: SubscriptionFrequencyType.Daily, title: 'Daily' },\r\n 2: { value: SubscriptionFrequencyType.Weekly, title: 'Weekly' },\r\n 3: { value: SubscriptionFrequencyType.Monthly, title: 'Monthly' },\r\n};\r\n\r\nexport function getSubscriptionFrequencyTypes(): SelectorOption[] {\r\n return [\r\n subscriptionFrequencyTypes[1],\r\n subscriptionFrequencyTypes[2],\r\n subscriptionFrequencyTypes[3],\r\n ];\r\n}\r\n\r\nexport const subscriptionFrequency: Record = {\r\n 1: {\r\n minDeliveryDay: 0,\r\n maxDeliveryDay: 0,\r\n deliveryDayValidationErrorMessage:\r\n 'The delivery day for a daily subscription must be zero(0).',\r\n subscriptionFrequencyTypeValidationErrorMessage:\r\n 'A daily subscription must have a delivery day of zero(0).',\r\n },\r\n 2: {\r\n minDeliveryDay: 1,\r\n maxDeliveryDay: 7,\r\n deliveryDayValidationErrorMessage:\r\n 'The delivery day for a weekly subscription must be between 1 and 7.',\r\n subscriptionFrequencyTypeValidationErrorMessage:\r\n 'A weekly subscription must have a delivery day between 1 and 7.',\r\n },\r\n 3: {\r\n minDeliveryDay: 1,\r\n maxDeliveryDay: 31,\r\n deliveryDayValidationErrorMessage:\r\n 'The delivery day for a monthly subscription must be between 1 and 31.',\r\n subscriptionFrequencyTypeValidationErrorMessage:\r\n 'A monthly subscription must have a delivery day between 1 and 31.',\r\n },\r\n};\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class MapAttributeService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getMapAttributes() {\r\n return this.httpClient.get(`location-testing/map-attributes`);\r\n }\r\n\r\n getMapAttributeValues(name) {\r\n return this.httpClient.get(`location-testing/map-attributes/${name}/values`);\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\n\r\n@inject(HttpClient)\r\nexport default class TestMethodService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getTestMethods(organizationIds, filters) {\r\n\r\n var queryParameters = Object.assign({}, filters, {\r\n organizationIds: Array.isArray(organizationIds) ?\r\n organizationIds :\r\n [organizationIds]\r\n });\r\n\r\n var query = buildQueryString(queryParameters, true);\r\n\r\n return this\r\n .httpClient\r\n .get(`test-methods${(query ? `?${query}` : '')}`);\r\n }\r\n}\r\n","import { TaskOrder } from '../tasks/task-order';\r\n\r\nexport interface OrderableSamplePart {\r\n taskId: number;\r\n pointZone: number;\r\n planName?: string;\r\n pointName: string;\r\n}\r\n\r\nexport interface OrderableSample {\r\n parts: OrderableSamplePart[];\r\n}\r\n\r\n// The long-standing request order (and the order task labels default to): zone, then plan name,\r\n// then sample point name.\r\nexport function compareByZonePlanPoint(a: OrderableSamplePart, b: OrderableSamplePart): number {\r\n return (\r\n (a.pointZone ?? 0) - (b.pointZone ?? 0) ||\r\n (a.planName ?? '').localeCompare(b.planName ?? '') ||\r\n (a.pointName ?? '').localeCompare(b.pointName ?? '')\r\n );\r\n}\r\n\r\n// Sorts request samples by the chosen order. Composites are placed by whichever of their parts\r\n// comes first in that order. taskIdOrder is the on-screen order the tasks were sent in.\r\nexport function sortSamples(\r\n samples: T[],\r\n order: TaskOrder,\r\n taskIdOrder: number[],\r\n): T[] {\r\n const positionOf = (taskId: number) => {\r\n const index = taskIdOrder.indexOf(taskId);\r\n return index === -1 ? Number.MAX_SAFE_INTEGER : index;\r\n };\r\n const compareParts =\r\n order === 'onScreen'\r\n ? (a: OrderableSamplePart, b: OrderableSamplePart) =>\r\n positionOf(a.taskId) - positionOf(b.taskId)\r\n : compareByZonePlanPoint;\r\n const firstPart = (sample: T) =>\r\n sample.parts.reduce((first, part) => (compareParts(part, first) < 0 ? part : first));\r\n\r\n return [...samples].sort((a, b) => compareParts(firstPart(a), firstPart(b)));\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport LabelTemplate from './label-template';\r\n\r\n@autoinject\r\nexport default class LabelTemplateService {\r\n constructor(private httpClient: HttpClient) {\r\n }\r\n\r\n getLabelTemplates(filters = {}, view: 'Default' | 'Selector' = 'Default') {\r\n var query = buildQueryString({ ...filters, view }, true);\r\n\r\n return this.httpClient.get(`label-templates${(query ? `?${query}` : '')}`) as any as Promise;\r\n }\r\n\r\n getLabelTemplate(id: number) {\r\n return this.httpClient.get(`label-templates/${id}`) as any as Promise;\r\n }\r\n\r\n deleteLabelTemplates(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`label-templates?${query}`);\r\n }\r\n\r\n saveLabelTemplate(labelTemplate: LabelTemplate): Promise {\r\n if (!labelTemplate.id)\r\n return this.httpClient.post('label-templates/', labelTemplate) as any as Promise;\r\n\r\n return this.httpClient.put(`label-templates/${labelTemplate.id}`, labelTemplate) as any as Promise;\r\n }\r\n}\r\n","import DisplayOnlyElementManager from './display-only-element-manager';\r\nimport UiLabelTemplate from './ui-label-template';\r\nimport UiLabelTemplateElement from './ui-label-template-element';\r\n\r\nexport default class SampleLabelDisplayOnlyElementManager implements DisplayOnlyElementManager {\r\n sampleIdElement: UiLabelTemplateElement;\r\n sampleDescriptionElement: UiLabelTemplateElement;\r\n collectionDateElement: UiLabelTemplateElement;\r\n testCodesElement: UiLabelTemplateElement;\r\n\r\n margin: number;\r\n fontSize: number;\r\n lineSpacing: number;\r\n\r\n constructor(private uiLabelTemplate: UiLabelTemplate) {\r\n const { elements } = this.uiLabelTemplate;\r\n this.margin = 6;\r\n this.fontSize = Array.isArray(elements) && elements.length ? elements[0].fontSize : 7;\r\n this.lineSpacing = 3;\r\n }\r\n\r\n createDisplayOnlyElements() {\r\n this.sampleIdElement = UiLabelTemplateElement.new(this.uiLabelTemplate, 'text', true);\r\n this.sampleIdElement.sampleTextOverride = '12-123456-001';\r\n this.sampleIdElement.bold = true;\r\n\r\n this.sampleDescriptionElement = UiLabelTemplateElement.new(\r\n this.uiLabelTemplate,\r\n 'text',\r\n true,\r\n );\r\n this.sampleDescriptionElement.sampleTextOverride = 'This is an example sample description';\r\n\r\n this.collectionDateElement = UiLabelTemplateElement.new(this.uiLabelTemplate, 'text', true);\r\n this.collectionDateElement.sampleTextOverride = '6/18/2021 8:00 AM';\r\n this.collectionDateElement.bold = true;\r\n\r\n this.positionDisplayOnlyElements();\r\n\r\n this.uiLabelTemplate.elements.push(this.sampleIdElement);\r\n this.uiLabelTemplate.elements.push(this.sampleDescriptionElement);\r\n this.uiLabelTemplate.elements.push(this.collectionDateElement);\r\n }\r\n\r\n positionDisplayOnlyElements() {\r\n this.sampleIdElement.x = this.margin;\r\n this.sampleIdElement.y = this.margin;\r\n this.sampleIdElement.width = this.uiLabelTemplate.width - 2 * this.margin;\r\n this.sampleIdElement.textAlign = 'right';\r\n\r\n this.sampleDescriptionElement.x = this.margin;\r\n this.sampleDescriptionElement.y = this.margin + this.fontSize + this.lineSpacing;\r\n this.sampleDescriptionElement.width = this.uiLabelTemplate.width - 2 * this.margin;\r\n\r\n this.collectionDateElement.x = this.margin;\r\n this.collectionDateElement.y = this.margin;\r\n this.collectionDateElement.width = this.uiLabelTemplate.width - 2 * this.margin;\r\n }\r\n}\r\n","import SelectorOption from 'infrastructure/selector-option';\r\nimport PlanType from './plans/plan-type';\r\n\r\nexport enum CollectionType {\r\n Routine = 'Routine',\r\n Vector = 'Vector',\r\n CorrectiveAction = 'CorrectiveAction'\r\n}\r\n\r\nexport const collectionTypes: Record = {\r\n Routine: { value: CollectionType.Routine, title: 'Routine' },\r\n Vector: { value: CollectionType.Vector, title: 'Vector' },\r\n CorrectiveAction: { value: CollectionType.CorrectiveAction, title: 'Corrective Action' }\r\n};\r\n\r\nexport default CollectionType;\r\n\r\nexport function getCollectionTypeOptions(): SelectorOption[] {\r\n return [\r\n collectionTypes.Routine,\r\n collectionTypes.Vector,\r\n collectionTypes.CorrectiveAction\r\n ];\r\n}\r\n\r\nexport function getScheduledCollectionTypeFilterOptions(): SelectorOption[] {\r\n return [\r\n collectionTypes.Routine\r\n ]\r\n}\r\n\r\nexport function getAdhocCollectionTypeOptions(): SelectorOption[] {\r\n return getCollectionTypeOptions();\r\n}\r\n\r\nexport function getDiscretionaryCollectionTypeOptions(): SelectorOption[] {\r\n return getCollectionTypeOptions();\r\n}\r\n\r\nexport function getPriorityRiskBasedCollectionTypeOptions(): SelectorOption[] {\r\n return getCollectionTypeOptions();\r\n}\r\n\r\nexport function getCapPlanCollectionTypeOptions(): SelectorOption[] {\r\n return [\r\n collectionTypes.Vector,\r\n collectionTypes.CorrectiveAction,\r\n ];\r\n}\r\n\r\nexport function toCollectionTypeTitle(collectionType: CollectionType): string {\r\n return collectionType !== CollectionType.CorrectiveAction ? collectionType.toString() : 'Corrective Action';\r\n}\r\n\r\nexport function planTypeToCollectionTypes(planType: PlanType): SelectorOption[] {\r\n return planType === PlanType.SCHEDULED\r\n ? getScheduledCollectionTypeFilterOptions()\r\n : getCollectionTypeOptions();\r\n}\r\n\r\nexport function planTypeStringToCollectionTypes(planType: string): SelectorOption[] {\r\n return planTypeToCollectionTypes(PlanType[planType]);\r\n}\r\n\r\nexport function planTypeIdToCollectionTypes(planTypeId: number): SelectorOption[] {\r\n const planType = PlanType[planTypeId];\r\n return planTypeStringToCollectionTypes(planType);\r\n}\r\n\r\nexport function selectorOptionToCollectionType(selectorOption: SelectorOption): CollectionType {\r\n if (!Object.getOwnPropertyDescriptor(collectionTypes, selectorOption.value)) {\r\n throw new Error('The SelectorOption is not of type CollectionType.');\r\n }\r\n\r\n return collectionTypes[selectorOption.value];\r\n}\r\n\r\nexport function collectionTypesToSelectorOptions(cts: CollectionType[]): SelectorOption[] {\r\n\r\n const selectorOptions: SelectorOption[] = [];\r\n if (cts) {\r\n if (!Array.isArray(cts)) {\r\n throw new Error('The collection types passed are not an array.');\r\n }\r\n cts.forEach((ct: CollectionType) => {\r\n selectorOptions.push(collectionTypes[ct]);\r\n });\r\n }\r\n\r\n return selectorOptions;\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient, HttpResponseMessage } from 'aurelia-http-client';\r\nimport { AdhocReportSubscription } from './contracts/adhoc-report-subscription';\r\nimport { SubscriptionFrequencyType } from './contracts/subscription-frequency-type';\r\n\r\n\r\n@autoinject\r\nexport class AdhocReportSubscriptionService {\r\n private baseRoute: string;\r\n\r\n constructor(private httpClient: HttpClient) {\r\n this.baseRoute = 'adhoc-report-subscriptions';\r\n }\r\n\r\n getAdhocReportSubscriptions(): Promise> {\r\n return this.httpClient.get(this.baseRoute) as unknown as Promise<\r\n Readonly\r\n >;\r\n }\r\n\r\n getAdhocReportSubscription(id: number): Promise {\r\n return this.httpClient.get(`${this.baseRoute}/${id}`) as unknown as Promise<\r\n Readonly\r\n >;\r\n }\r\n\r\n createAdhocReportSubscription(\r\n entity: AdhocReportSubscription,\r\n ): Promise {\r\n return this.httpClient.post(\r\n this.baseRoute,\r\n entity,\r\n ) as unknown as Promise;\r\n }\r\n\r\n changeAdhocReportSubscriptionDelivery(\r\n id: number,\r\n request: AdhocReportSubscription,\r\n ): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}`,\r\n request,\r\n ) as unknown as Promise;\r\n }\r\n\r\n startAdhocReportSubscription(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/start`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n stopAdhocReportSubscription(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/stop`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n deleteAdhocReportSubscription(id: number): Promise {\r\n return this.httpClient.delete(\r\n `${this.baseRoute}/${id}`,\r\n ) as unknown as Promise;\r\n }\r\n}\r\n","import moment from 'moment';\r\n\r\nfunction* generateDateRange(startDate, endDate) {\r\n var currentDate = moment(startDate);\r\n\r\n while (currentDate < endDate) {\r\n yield currentDate;\r\n currentDate = moment(currentDate).add(1, 'd');\r\n }\r\n\r\n yield endDate;\r\n}\r\n\r\nexport function createPlaybackFrames(startDate, endDate, dailyResults) {\r\n if (!startDate) throw new Error('The startDate parameter is required.');\r\n\r\n if (!endDate) throw new Error('The endDate parameter is required.');\r\n\r\n var dailyResultGroups = [];\r\n\r\n for (let date of generateDateRange(moment(startDate), moment(endDate)))\r\n dailyResultGroups.push({\r\n sampleCollectionDate: date,\r\n pointResults: {},\r\n });\r\n\r\n if (!dailyResults || dailyResults.length === 0) return dailyResultGroups;\r\n\r\n for (let dailyResult of dailyResults) {\r\n let sampleCollectionDate = moment(dailyResult.sampleCollectionDate);\r\n let dailyResultGroup = dailyResultGroups.find(\r\n (g) => g.sampleCollectionDate.toString() === sampleCollectionDate.toString(),\r\n );\r\n if (dailyResultGroup)\r\n dailyResultGroup.pointResults[dailyResult.pointId] = {\r\n allTestsPassed: dailyResult.allTestsPassed,\r\n anyTestWarned: dailyResult.anyTestWarned,\r\n };\r\n }\r\n\r\n let currentPointResults = null;\r\n for (let [i, dailyResultGroup] of dailyResultGroups.entries()) {\r\n if (currentPointResults)\r\n for (let [pointId, resultInfo] of Object.entries(dailyResultGroup.pointResults))\r\n resultInfo.highlightTransition =\r\n (!currentPointResults[pointId] ||\r\n currentPointResults[pointId].allTestsPassed) &&\r\n !resultInfo.allTestsPassed;\r\n\r\n currentPointResults = dailyResultGroup.pointResults;\r\n }\r\n\r\n return dailyResultGroups;\r\n}\r\n","import { AgPromise, ICellRendererParams } from 'ag-grid-community';\r\nimport { AureliaCellRendererCompBase } from 'infrastructure/ag-grid/aurelia-cell-renderer-comp-base';\r\n\r\nconst template = `\r\n
\r\n \r\n
`;\r\n\r\nexport class AgPlanManagementGridActionRenderer extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(template);\r\n }\r\n\r\n init(params: ICellRendererParams): void | AgPromise {\r\n const { node } = params;\r\n if (node.uiLevel === 0) {\r\n const { childrenAfterGroup } = node;\r\n const groupData = JSON.parse(JSON.stringify(childrenAfterGroup[0].data));\r\n delete groupData.organizationId;\r\n\r\n params['groupData'] = groupData;\r\n } else {\r\n delete params['groupData'];\r\n }\r\n\r\n super.init(params);\r\n }\r\n}\r\n","\r\nimport $ from 'jquery';\r\n\r\nlet dates = $.fn.fdatepicker.dates;\r\n\r\nfunction UTCDate() {\r\n return new Date(Date.UTC.apply(Date, arguments));\r\n}\r\n\r\nexport function parseDate(date, format, language) {\r\n if (date instanceof Date) return new Date(date.valueOf() - date.getTimezoneOffset() * 60000);\r\n if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}$/.test(date)) {\r\n format = this.parseFormat('yyyy-mm-dd');\r\n }\r\n if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}$/.test(date)) {\r\n format = this.parseFormat('yyyy-mm-dd hh:ii');\r\n }\r\n if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}[Z]{0,1}$/.test(date)) {\r\n format = this.parseFormat('yyyy-mm-dd hh:ii:ss');\r\n }\r\n if (/^[-+]\\d+[dmwy]([\\s,]+[-+]\\d+[dmwy])*$/.test(date)) {\r\n let part_re = /([-+]\\d+)([dmwy])/,\r\n parts = date.match(/([-+]\\d+)([dmwy])/g),\r\n part, dir;\r\n date = new Date();\r\n for (var i = 0; i < parts.length; i++) {\r\n part = part_re.exec(parts[i]);\r\n dir = parseInt(part[1]);\r\n switch (part[2]) {\r\n case 'd':\r\n date.setUTCDate(date.getUTCDate() + dir);\r\n break;\r\n case 'm':\r\n date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);\r\n break;\r\n case 'w':\r\n date.setUTCDate(date.getUTCDate() + dir * 7);\r\n break;\r\n case 'y':\r\n date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);\r\n break;\r\n }\r\n }\r\n return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n }\r\n let parts = date && date.match(this.nonpunctuation) || [];\r\n date = new Date();\r\n let parsed = {};\r\n let setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'];\r\n let setters_map = {\r\n hh: function(d, v) {\r\n return d.setUTCHours(v);\r\n },\r\n h: function(d, v) {\r\n return d.setUTCHours(v);\r\n },\r\n ii: function(d, v) {\r\n return d.setUTCMinutes(v);\r\n },\r\n i: function(d, v) {\r\n return d.setUTCMinutes(v);\r\n },\r\n ss: function(d, v) {\r\n return d.setUTCSeconds(v);\r\n },\r\n s: function(d, v) {\r\n return d.setUTCSeconds(v);\r\n },\r\n yyyy: function(d, v) {\r\n return d.setUTCFullYear(v);\r\n },\r\n yy: function(d, v) {\r\n return d.setUTCFullYear(2000 + v);\r\n },\r\n m: function(d, v) {\r\n v -= 1;\r\n while (v < 0) v += 12;\r\n v %= 12;\r\n d.setUTCMonth(v);\r\n while (d.getUTCMonth() != v)\r\n d.setUTCDate(d.getUTCDate() - 1);\r\n return d;\r\n },\r\n d: function(d, v) {\r\n return d.setUTCDate(v);\r\n }\r\n };\r\n \r\n let val, filtered, part;\r\n setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\r\n setters_map['dd'] = setters_map['d'];\r\n date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); //date.getHours(), date.getMinutes(), date.getSeconds());\r\n if (parts.length == format.parts.length) {\r\n for (let i = 0, cnt = format.parts.length; i < cnt; i++) {\r\n val = parseInt(parts[i], 10);\r\n part = format.parts[i];\r\n if (isNaN(val)) {\r\n switch (part) {\r\n case 'MM':\r\n filtered = $(dates[language].months).filter(function() {\r\n var m = this.slice(0, parts[i].length),\r\n p = parts[i].slice(0, m.length);\r\n return m == p;\r\n });\r\n val = $.inArray(filtered[0], dates[language].months) + 1;\r\n break;\r\n case 'M':\r\n filtered = $(dates[language].monthsShort).filter(function() {\r\n var m = this.slice(0, parts[i].length),\r\n p = parts[i].slice(0, m.length);\r\n return m == p;\r\n });\r\n val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (part === 'a' && parsed['hh']) {\r\n if (parts[i] == 'AM' && parsed['hh'] === 12)\r\n parsed['hh'] = 0;\r\n\r\n if (parts[i] === 'PM' && parsed['hh'] !== 12)\r\n parsed['hh'] += 12;\r\n }\r\n\r\n parsed[part] = val;\r\n }\r\n for (let i = 0, s; i < setters_order.length; i++) {\r\n s = setters_order[i];\r\n if (s in parsed && !isNaN(parsed[s]))\r\n setters_map[s](date, parsed[s])\r\n }\r\n }\r\n return date;\r\n}\r\n\r\nexport function formatDate(date, format, language) {\r\n if (date == null) {\r\n return ''; //''; //'';\r\n }\r\n var val = {\r\n h: date.getUTCHours(),\r\n i: date.getUTCMinutes(),\r\n s: date.getUTCSeconds(),\r\n d: date.getUTCDate(),\r\n m: date.getUTCMonth() + 1,\r\n M: dates[language].monthsShort[date.getUTCMonth()],\r\n MM: dates[language].months[date.getUTCMonth()],\r\n yy: date.getUTCFullYear().toString().substring(2),\r\n yyyy: date.getUTCFullYear(),\r\n a: date.getUTCHours() >= 12 ? 'PM' : 'AM'\r\n };\r\n\r\n // adjust the date to render w/o military time\r\n if (val.h == 0)\r\n val.hh = 12;\r\n else {\r\n val.hh = (format.parts.includes('a') && val.h > 12) ?\r\n val.h - 12 : \r\n val.h;\r\n val.hh = (val.hh < 10 ? '0' : '') + val.hh;\r\n }\r\n\r\n val.ii = (val.i < 10 ? '0' : '') + val.i;\r\n val.ss = (val.s < 10 ? '0' : '') + val.s;\r\n val.dd = (val.d < 10 ? '0' : '') + val.d;\r\n val.mm = (val.m < 10 ? '0' : '') + val.m;\r\n var dateParts = [],\r\n seps = $.extend([], format.separators);\r\n for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\r\n if (seps.length)\r\n dateParts.push(seps.shift())\r\n \r\n dateParts.push(val[format.parts[i]]);\r\n }\r\n return dateParts.join('');\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class PointAttributeService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getPointAttributes() {\r\n return this.httpClient.get(`location-testing/point-attributes`);\r\n }\r\n\r\n getPointAttributeValues(name) {\r\n return this.httpClient.get(`location-testing/point-attributes/${name}/values`);\r\n }\r\n}\r\n","enum MapDashboardSelectionMode {\r\n SINGLE = 1,\r\n MULTI = 2\r\n}\r\n\r\nexport default MapDashboardSelectionMode;\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\n\r\nexport default class QualitativeResultService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getQualitativeResultTypes() {\r\n\r\n return this\r\n .httpClient\r\n .get(`qualitative-results`);\r\n }\r\n \r\n}\r\n","import CollectionType from 'location-testing/collection-type';\r\nimport { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface CollectionTypeQuery {\r\n collectionTypes: CollectionType[];\r\n}\r\n\r\n/* eslint-disable brace-style */\r\nexport class CollectionTypesQueryFilters\r\n extends BaseQueryFilter\r\n implements QueryFiltered\r\n{\r\n collectionTypes: CollectionType[];\r\n\r\n constructor() {\r\n super();\r\n this.collectionTypes = [];\r\n }\r\n\r\n public get count() {\r\n return Number(!!this.collectionTypes?.length);\r\n }\r\n\r\n reset(): void {\r\n this.collectionTypes = [];\r\n }\r\n\r\n getQueryParams(): CollectionTypeQuery {\r\n return {\r\n collectionTypes: this.collectionTypes,\r\n };\r\n }\r\n\r\n setFilterValues(params: CollectionTypeQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const { collectionTypes } = params;\r\n\r\n let collectionTypesArr: CollectionType[];\r\n if (collectionTypes) {\r\n collectionTypesArr = Array.isArray(collectionTypes)\r\n ? collectionTypes\r\n : [collectionTypes];\r\n }\r\n\r\n this.collectionTypes = collectionTypesArr;\r\n }\r\n}\r\n","import { UiViewModel } from 'infrastructure/ui-view-model';\r\nimport { CertificateContact } from './certificate-contact';\r\n\r\nexport class UiCertificateContact implements CertificateContact, UiViewModel {\r\n organizationCode: string;\r\n organizationKey: string;\r\n parentOrganizationKey: string;\r\n companyName: string;\r\n address: string;\r\n city: string;\r\n state: string;\r\n postalCode: string;\r\n country: string;\r\n phoneNumber: string;\r\n faxNumber: string;\r\n contactFullName: string;\r\n contactEmail: string;\r\n\r\n public get fullContact(): string {\r\n let contactParts: string[] = [];\r\n contactParts.push(this.companyName);\r\n if (this.contactFullName) {\r\n contactParts.push(`, ${this.contactFullName}`);\r\n }\r\n if (this.address && this.city && this.state && this.postalCode) {\r\n contactParts.push(`, ${this.address}`);\r\n contactParts.push(`, ${this.city}`);\r\n contactParts.push(`, ${this.state}`);\r\n contactParts.push(`, ${this.postalCode}`);\r\n }\r\n\r\n return contactParts.join('');\r\n }\r\n\r\n toEntity() {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n loadViewFrom(entity: CertificateContact): void {\r\n this.organizationCode = entity.organizationCode;\r\n this.organizationKey = entity.organizationKey;\r\n this.parentOrganizationKey = entity.parentOrganizationKey;\r\n this.companyName = entity.companyName;\r\n this.address = entity.address;\r\n this.city = entity.city;\r\n this.state = entity.state;\r\n this.postalCode = entity.postalCode;\r\n this.country = entity.country;\r\n this.phoneNumber = entity.phoneNumber;\r\n this.faxNumber = entity.faxNumber;\r\n this.contactFullName = entity.contactFullName;\r\n this.contactEmail = entity.contactEmail;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@autoinject\r\nexport default class UserService {\r\n constructor(private httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getDashboardLinks() {\r\n return this.httpClient.get('dashboard/links');\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport DialogPresenter from './dialogs/dialog-presenter';\r\n\r\n@inject(DialogPresenter)\r\nexport default class FormChangeCheckStep {\r\n constructor(dialogPresenter) {\r\n this.dialogPresenter = dialogPresenter;\r\n }\r\n\r\n run(navigationInstruction, next) {\r\n if (navigationInstruction &&\r\n navigationInstruction.plan &&\r\n navigationInstruction.plan.default &&\r\n navigationInstruction.plan.default.prevComponent &&\r\n navigationInstruction.plan.default.prevComponent.viewModel &&\r\n navigationInstruction.plan.default.prevComponent.viewModel.formChanged\r\n ) {\r\n return this.dialogPresenter\r\n .showLoseChangesConfirmation()\r\n .then(confirmed => {\r\n if (confirmed)\r\n return next();\r\n else\r\n return next.cancel();\r\n });\r\n } else {\r\n return next();\r\n }\r\n }\r\n}\r\n","import { AgPromise, IAfterGuiAttachedParams, ICellEditorParams } from 'ag-grid-community';\r\nimport { Container, View, ViewCompiler } from 'aurelia-framework';\r\nimport { IAureliaCellEditorComp } from './i-aurelia-cell-editor-comp';\r\n\r\nexport abstract class AureliaCellEditorCompBase implements IAureliaCellEditorComp {\r\n container: Container;\r\n viewCompliler: ViewCompiler;\r\n view: View;\r\n rootElement: HTMLElement;\r\n\r\n constructor(template: string) {\r\n this.container = Container.instance;\r\n this.viewCompliler = this.container.get(ViewCompiler);\r\n const viewFactory = this.viewCompliler.compile(``);\r\n this.view = viewFactory.create(this.container);\r\n this.rootElement = document.createElement('div');\r\n }\r\n\r\n init?(params: ICellEditorParams): void | AgPromise {\r\n this.view.bind(params);\r\n this.view.appendNodesTo(this.rootElement);\r\n this.view.attached();\r\n }\r\n\r\n afterGuiAttached?(params?: IAfterGuiAttachedParams): void {\r\n return;\r\n }\r\n\r\n getValue() {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n isPopup?(): boolean {\r\n return true;\r\n }\r\n\r\n getPopupPosition?(): string {\r\n return 'over';\r\n }\r\n\r\n isCancelBeforeStart?(): boolean {\r\n return false;\r\n }\r\n\r\n isCancelAfterEnd?(): boolean {\r\n return false;\r\n }\r\n\r\n focusIn?(): void {\r\n return;\r\n }\r\n\r\n focusOut?(): void {\r\n return;\r\n }\r\n\r\n getFrameworkComponentInstance?() {\r\n return;\r\n }\r\n\r\n getGui(): HTMLElement {\r\n return this.rootElement;\r\n }\r\n\r\n destroy?(): void {\r\n this.view.unbind();\r\n this.view.removeNodes();\r\n this.view.detached();\r\n }\r\n}\r\n","export abstract class BaseQueryFilter {\r\n private _defaultSegement = 'Filter';\r\n private _introSegment = 'Viewing';\r\n private _setGlobalFilterDebounce: any;\r\n\r\n private removeUndefinedProperties(obj: any): any {\r\n for (let key in obj) {\r\n if (obj[key] === undefined) {\r\n delete obj[key];\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n public ensureSingleApplyFilterHandler(routeConfig: any): boolean {\r\n const eventLookup =\r\n routeConfig?.navModel?.router?.container?.viewModel?.eventAggregator?.eventLookup;\r\n if (\r\n eventLookup &&\r\n eventLookup['filters.apply'] &&\r\n eventLookup['filters.apply'].length > 1\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected getPersistedFilter(key: string): any {\r\n const filterString = localStorage.getItem(key);\r\n return filterString && filterString.length > 0\r\n ? JSON.parse(filterString)\r\n : null;\r\n }\r\n\r\n protected setPersistedFilter(key: string, obj: any): void {\r\n if (this._setGlobalFilterDebounce) {\r\n clearTimeout(this._setGlobalFilterDebounce);\r\n }\r\n\r\n this._setGlobalFilterDebounce = setTimeout(() => {\r\n this._setGlobalFilterDebounce = null;\r\n localStorage.setItem(key, JSON.stringify(obj));\r\n }, 1000);\r\n }\r\n\r\n protected getFilterCaption(\r\n filterCount: number,\r\n dateRangeFilterProp?: string,\r\n dateRangeOption?: string,\r\n ): string {\r\n const filterCountOnlyCaption = `with ${filterCount} filter${filterCount === 1 ? '' : 's'}.`;\r\n const dateRangeCaption = `${dateRangeFilterProp} for ${dateRangeOption}`;\r\n\r\n if (!dateRangeFilterProp || !dateRangeOption) {\r\n return filterCount > 0\r\n ? `${this._introSegment} ${filterCountOnlyCaption}`\r\n : this._defaultSegement;\r\n }\r\n\r\n return `${this._introSegment} ${dateRangeCaption} ${filterCountOnlyCaption}`;\r\n }\r\n\r\n protected formatSingleOrMultipleOrNothingArray(possibleArray: any) {\r\n if (!possibleArray) {\r\n return null;\r\n }\r\n\r\n return Array.isArray(possibleArray) ? possibleArray : [possibleArray];\r\n }\r\n\r\n protected setQueryFilteredValues(params: any, obj: any): void {\r\n const definedParams = this.removeUndefinedProperties(params);\r\n Object.keys(definedParams).forEach((paramKey) => {\r\n const prop =\r\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), paramKey) ||\r\n Object.getOwnPropertyDescriptor(obj, paramKey);\r\n if (prop) {\r\n let type: string;\r\n const canSet = !!prop.get && prop.set;\r\n if (canSet) {\r\n const get = prop.get.bind(obj);\r\n const value = get();\r\n type = typeof value;\r\n }\r\n if (prop.value) {\r\n type = typeof prop.value;\r\n }\r\n switch (type) {\r\n case 'boolean':\r\n obj[paramKey] = definedParams[paramKey] === 'true' ? true : false;\r\n break;\r\n case 'number':\r\n obj[paramKey] = Number(definedParams[paramKey]);\r\n break;\r\n default:\r\n obj[paramKey] = definedParams[paramKey];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export abstract class OrganizationConfigurationConstants {\r\n static readonly ENABLE_BETA_FEATURES = 'enableBetaFeatures';\r\n static readonly ENABLE_SEGMENT_LOOKUP_MAPPINGS = 'enableSegmentLookupMappings';\r\n}\r\n","export default class LabelTemplateType {\r\n static Unknown = new LabelTemplateType('Unknown');\r\n static Task = new LabelTemplateType('Task');\r\n static Sample = new LabelTemplateType('Sample');\r\n\r\n name: string;\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n toString() {\r\n return this.name;\r\n }\r\n\r\n static getOptions() {\r\n return [\r\n { title: 'Task', value: LabelTemplateType.Task.name },\r\n { title: 'Sample', value: LabelTemplateType.Sample.name }\r\n ];\r\n }\r\n}\r\n","export default abstract class Validators {\r\n static isValidPostalCode(postalCode: string): boolean {\r\n if (!postalCode) {\r\n return false;\r\n }\r\n\r\n const usFormat = new RegExp(/(^\\d{5}$)|(^\\d{5}-\\d{4}$)/);\r\n const canFormat = new RegExp(\r\n /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i,\r\n );\r\n if (usFormat.test(postalCode)) {\r\n return true;\r\n }\r\n if (canFormat.test(postalCode)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static areValidEmails(semicolonSeparatedEmails: string): boolean {\r\n if (!semicolonSeparatedEmails) {\r\n return true;\r\n }\r\n\r\n const emailRegex =\r\n /^[a-zA-Z0-9.!#$%&'*+=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\r\n const emailAddresses = semicolonSeparatedEmails.split(/[;,]/);\r\n\r\n return emailAddresses.every((em) => emailRegex.test(em));\r\n }\r\n}\r\n","import { Container } from 'aurelia-framework';\r\nimport { CustomError } from 'infrastructure/custom-error';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\n\r\n// NOTE: Try/Catch does not pick up server side errors.\r\n// TODO: Combine this w/ submitCustomCerificateForm?\r\nfunction handleDownload(blob: Blob, contentDispositionHeader: string) {\r\n const regExpFileName = /filename=(?.*)/;\r\n const fileName: string | null =\r\n regExpFileName.exec(contentDispositionHeader)?.groups?.filename ?? null;\r\n\r\n let a = document.createElement('a');\r\n document.body.appendChild(a);\r\n let url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nfunction parseAndThrowResponse(blob: Blob) {\r\n const dialogPresenter = Container.instance.get(DialogPresenter);\r\n const logger = Container.instance.get(Logger);\r\n blob.text()\r\n .then((b) => {\r\n const data = JSON.parse(b);\r\n const { apiErrorCode, message } = data || {};\r\n throw new CustomError(message, apiErrorCode);\r\n })\r\n .catch((e: CustomError) => {\r\n const { errorCode } = e;\r\n logger.error(\r\n 'Error downloading report',\r\n 'A server side error occured while trying to download a report',\r\n );\r\n\r\n const errorMessage =\r\n errorCode && errorCode === 705\r\n ? 'The maximum number of rows supported by this version of Excel is 65536. Please adjust the parameters in order to return fewer results.'\r\n : 'An unexpected error occured. Please try again or contact support.';\r\n dialogPresenter.showAlert('Error Downloading Report', errorMessage);\r\n });\r\n}\r\n\r\nexport async function downloadSsrsReport(downloadUrl: string, postObject: any = null) {\r\n const pageContext = Container.instance.get(PageContext);\r\n\r\n pageContext.isLoading = true;\r\n\r\n const xhr = new XMLHttpRequest();\r\n xhr.responseType = 'blob';\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === 4) {\r\n const type = xhr.getResponseHeader('Content-Type');\r\n const contentDispositionHeader = xhr.getResponseHeader('Content-Disposition');\r\n const blob = new Blob([xhr.response], { type });\r\n\r\n pageContext.isLoading = false;\r\n if (xhr.status === 200) {\r\n handleDownload(blob, contentDispositionHeader);\r\n\r\n return;\r\n }\r\n parseAndThrowResponse(blob);\r\n }\r\n };\r\n\r\n if (postObject !== null) {\r\n xhr.open('POST', downloadUrl, true);\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n xhr.send(JSON.stringify(postObject));\r\n } else {\r\n xhr.open('GET', downloadUrl, true);\r\n xhr.send();\r\n }\r\n}\r\n","import { AgPromise, ICellRendererParams } from 'ag-grid-community';\r\nimport marked from 'marked';\r\nimport { AureliaCellRendererCompBase } from './aurelia-cell-renderer-comp-base';\r\n\r\n//TODO: Refactor to support custom property name. (data.*)\r\nconst markedTemplate = '
';\r\nclass AgMarkedCellRenderer extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(markedTemplate);\r\n }\r\n\r\n init(params: ICellRendererParams): void | AgPromise {\r\n params['marked'] = marked;\r\n\r\n super.init(params);\r\n }\r\n}\r\n\r\nexport { AgMarkedCellRenderer };\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport { DashboardQuery } from 'dashboard/dashboard-query-filters';\r\nimport moment from 'moment';\r\nimport 'moment-timezone';\r\nimport Task from './task';\r\nimport { TaskCounts } from './task-counts';\r\nimport { TaskManagementCounts } from './task-management-counts';\r\n\r\n@autoinject\r\nexport default class TaskService {\r\n ianaTimeZone: any;\r\n\r\n constructor(private httpClient: HttpClient) {\r\n this.ianaTimeZone = (moment as any).tz.guess();\r\n }\r\n\r\n getTasks(taskFilters, view, includePlan?: boolean) {\r\n var queryParameters = taskFilters;\r\n queryParameters.view = view;\r\n queryParameters.includePlan = includePlan;\r\n\r\n var query = buildQueryString(queryParameters, true);\r\n\r\n return this.httpClient.get(`location-testing/tasks${(query ? `?${query}` : '')}`);\r\n }\r\n\r\n getTask(id, includePlan?: boolean) {\r\n return this.httpClient.get(`location-testing/tasks/${id}${(includePlan ? '?includePlan=true' : '')}`);\r\n }\r\n\r\n getTaskStatuses() {\r\n return [\r\n { id: 1, code: 'NotStarted', name: 'Not Started' },\r\n { id: 2, code: 'InProgress', name: 'In Progress' },\r\n { id: 3, code: 'Completed', name: 'Completed' },\r\n { id: 4, code: 'DidNotComplete', name: 'Did Not Complete' },\r\n ];\r\n }\r\n\r\n toBatches(items: T[], batchSize) {\r\n var copiedItems = [...items];\r\n var batches: T[][] = [];\r\n\r\n while (copiedItems.length)\r\n batches.push(copiedItems.splice(0, batchSize));\r\n\r\n return batches;\r\n }\r\n\r\n deleteTasks(ids: number[]) {\r\n var idBatches = this.toBatches(ids, 200);\r\n return Promise.all(idBatches.map(ids => {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`location-testing/tasks?${query}`);\r\n }));\r\n }\r\n\r\n async batchUpdateTasks(action, ids: number[], additionalParameters = {}) {\r\n var idBatches = this.toBatches(ids, 200);\r\n var results = await Promise.all(idBatches.map(ids => {\r\n var data = { ids, ...additionalParameters };\r\n return this.httpClient.put(`location-testing/tasks/batch?action=${action}`, data) as any as any[];\r\n }));\r\n\r\n var flattenedResults = [];\r\n for (let result of results)\r\n flattenedResults.push(...result);\r\n\r\n return flattenedResults;\r\n }\r\n\r\n assignTasks(ids: number[], assignedUserId) {\r\n return this.batchUpdateTasks('assign', ids, { assignedUserId });\r\n }\r\n\r\n unassignTasks(ids: number[]) {\r\n return this.batchUpdateTasks('unassign', ids);\r\n }\r\n\r\n updateTaskStatus(ids: number[], statusId, collectedDateTime, comments) {\r\n return this.batchUpdateTasks('update-status', ids, { statusId, collectedDateTime, comments });\r\n }\r\n\r\n getTaskCounts(dashboardQuery: DashboardQuery): Promise {\r\n const query = buildQueryString(dashboardQuery, true);\r\n return this.httpClient.get(`location-testing/task-counts/${(query ? `?${query}` : '')}`) as unknown as Promise;\r\n }\r\n\r\n getCriticalTaskCounts(organizationIds) {\r\n var query = buildQueryString({\r\n // Map organization IDs to multiple 'organizationId' query string variables.\r\n organizationId: organizationIds\r\n }, true);\r\n return this.httpClient.get(`location-testing/task-counts/critical${(query ? `?${query}` : '')}`);\r\n }\r\n\r\n getTaskManagementCounts(query: {\r\n organizationIds?: number[];\r\n mapIds?: number[];\r\n planIds?: number[];\r\n targetStartDate?: string;\r\n targetEndDate?: string;\r\n }): Promise {\r\n const queryString = buildQueryString(query, true);\r\n return this.httpClient.get(`location-testing/task-counts/overview${(queryString ? `?${queryString}` : '')}`) as unknown as Promise;\r\n }\r\n\r\n saveTask(task) {\r\n if (!task.id)\r\n return this.httpClient.post('location-testing/tasks', task);\r\n\r\n return this.httpClient.put(`location-testing/tasks/${task.id}`, task);\r\n }\r\n\r\n createTasks(tasks: Task[]) {\r\n return this.httpClient.post('location-testing/tasks/bulk', tasks);\r\n }\r\n\r\n getTaskRecordChanges(id) {\r\n return this.httpClient.get(`location-testing/tasks/${id}/record-changes`);\r\n }\r\n\r\n printLabels(taskIds, printerId) {\r\n var request = {\r\n ids: taskIds,\r\n printerId: printerId,\r\n ianaTimeZone: this.ianaTimeZone\r\n }\r\n\r\n return this.httpClient.post('location-testing/tasks/print-labels/', request);\r\n }\r\n\r\n // preserveOrder: rows follow the order of taskIds instead of the default Zone -> Plan -> Point.\r\n exportLabelsCsv(taskIds, fields, preserveOrder = false) {\r\n function capitalizeFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n\r\n let selectedFields = [];\r\n fields.forEach(f => selectedFields.push(capitalizeFirstLetter(f)));\r\n\r\n var request = {\r\n ids: taskIds,\r\n selectedFields: selectedFields,\r\n ianaTimeZone: this.ianaTimeZone,\r\n preserveOrder\r\n }\r\n\r\n var query = buildQueryString(request, true);\r\n\r\n return this.httpClient.get(`location-testing/tasks/export-labels-csv${(query ? `?${query}` : '')}`);\r\n }\r\n\r\n getExportableLabelsCsvFields(taskIds) {\r\n var request = {\r\n ids: taskIds\r\n }\r\n\r\n var query = buildQueryString(request, true);\r\n\r\n return this.httpClient.get(`location-testing/tasks/export-labels-csv?fields=true${(query ? `&${query}` : '')}`);\r\n }\r\n\r\n // preserveOrder: labels follow the order of taskIds instead of the default Zone -> Plan -> Point.\r\n getTaskLabelPdfUrl(taskIds, labelTemplateId, preserveOrder = false) {\r\n var query = buildQueryString({\r\n taskIds: taskIds,\r\n labelTemplateId,\r\n ianaTimeZone: this.ianaTimeZone,\r\n preserveOrder\r\n }, true);\r\n return `api/location-testing/tasks/labels-pdf${(query ? `?${query}` : '')}`;\r\n }\r\n\r\n getExporTaskCollectionTemplate(\r\n taskIds: number[],\r\n exportTaskCollectionTemplateId: number,\r\n exportTaskCollectionTemplateName: string) {\r\n const queryString = buildQueryString(\r\n { \r\n taskIds, \r\n exportTaskCollectionTemplateId, \r\n exportTaskCollectionTemplateName,\r\n ianaTimeZone: this.ianaTimeZone\r\n }, true);\r\n\r\n return `api/location-testing/tasks/export-task-collection-template?${queryString}`;\r\n }\r\n}\r\n","import {\r\n CellClassParams,\r\n CellValueChangedEvent,\r\n ColDef,\r\n EditableCallbackParams,\r\n ICellEditorParams,\r\n IRichCellEditorParams,\r\n ValueGetterParams,\r\n ValueSetterParams,\r\n} from 'ag-grid-community';\r\nimport { CustomError } from 'infrastructure/custom-error';\r\nimport DateUtility from 'infrastructure/date-utility.js';\r\nimport LvOrganizationSampleTemplate from 'lab-vantage/lv-organization-sample-type';\r\nimport LvTestTemplate from 'lab-vantage/lv-test-template';\r\nimport moment from 'moment';\r\nimport {\r\n defaultCompositeOptionsV2,\r\n internalCompositeOptionsV2,\r\n} from 'requests/sample-composite-options';\r\nimport SegmentLookup from 'segmentation-templates/segment-lookup';\r\nimport SegmentationTemplate from 'segmentation-templates/segmentation-template';\r\nimport SegmentationTemplateSegment from 'segmentation-templates/segmentation-template-segment';\r\nimport { AgDateMaskEditor } from './ag-grid-components/ag-datemask-editor';\r\nimport { AgDatePickerEditor } from './ag-grid-components/ag-datepicker-editor';\r\nimport { AgDateTimeEditorTypes } from './ag-grid-components/ag-datetime-editor-types';\r\nimport { SampleSegmentationGridPreferences } from './ag-grid-components/sample-segmentation-grid-preferences';\r\nimport SegmentationSampleGridColDataFactory from './sample-segmentation-grid-col-data-factory';\r\n\r\nconst segmentColdId = (segment: SegmentationTemplateSegment): string =>\r\n `segment_${segment.name}_${segment.segmentationTemplateId}`;\r\n\r\nconst getMatchingLookupValue = (segmentLookups: SegmentLookup[], segmentName: string): string => {\r\n const matchingLookup = segmentLookups.find((sl) => sl.parent === segmentName);\r\n if (!matchingLookup) {\r\n throw new CustomError(`No matching lookup for ${segmentName} was found.`, 2);\r\n }\r\n\r\n return matchingLookup.child;\r\n};\r\n\r\nconst formatTestMethodNames = (lvTestTemplates: LvTestTemplate[]): string => {\r\n return lvTestTemplates.map((tt) => `${tt.testMethod.code}`).join(', ');\r\n};\r\n\r\nconst createLookupTypeSegmentationColumns = (\r\n parentSegment: SegmentationTemplateSegment,\r\n childSegment: SegmentationTemplateSegment,\r\n isEditable: boolean,\r\n): ColDef[] => {\r\n const parentSegmentValues = JSON.parse(parentSegment.values) as string[];\r\n const childSegmentLookupValues = JSON.parse(childSegment.values) as SegmentLookup[];\r\n\r\n if (parentSegment.parentSegmentId || !parentSegmentValues.length) {\r\n throw new CustomError('A lookup segmentation template column requires a valid parent', 1);\r\n }\r\n if (!childSegment.parentSegmentId || !childSegmentLookupValues.length) {\r\n throw new CustomError('A lookup segmentation template col requires a valid child', 1);\r\n }\r\n\r\n const colDefs: ColDef[] = [];\r\n\r\n const parentColDef: ColDef = {\r\n colId: segmentColdId(parentSegment),\r\n headerName: parentSegment.name,\r\n editable: (params: EditableCallbackParams | CellClassParams) =>\r\n parentSegment.segmentationTemplateId === params.data.segmentationTemplateId &&\r\n isEditable,\r\n cellEditor: 'agRichSelectCellEditor',\r\n cellEditorPopup: true,\r\n cellEditorParams: {\r\n values: parentSegmentValues,\r\n },\r\n valueGetter: (params) =>\r\n params.data.segments ? params.data.segments[parentSegment.name] : null,\r\n valueSetter: (params) => {\r\n const { newValue } = params;\r\n const childValue = getMatchingLookupValue(\r\n childSegmentLookupValues,\r\n newValue.toString(),\r\n );\r\n\r\n params.data.segments[parentSegment.name] = newValue.toString();\r\n params.data.segments[childSegment.name] = childValue.toString();\r\n\r\n return true;\r\n },\r\n cellClassRules: {\r\n 'disabled-cell': (params) =>\r\n parentSegment.segmentationTemplateId !== params.data.segmentationTemplateId,\r\n 'segmentation-parent-cell': () => true,\r\n },\r\n };\r\n const childColDef: ColDef = {\r\n colId: segmentColdId(childSegment),\r\n headerName: childSegment.name,\r\n editable: (params: EditableCallbackParams | CellClassParams) =>\r\n childSegment.segmentationTemplateId === params.data.segmentationTemplateId &&\r\n isEditable,\r\n valueGetter: (params) =>\r\n params.data.segments ? params.data.segments[childSegment.name] : null,\r\n valueSetter: (params) => {\r\n params.data.segments[childSegment.name] = params.newValue.toString();\r\n\r\n return true;\r\n },\r\n cellClassRules: {\r\n 'disabled-cell': (params) =>\r\n childSegment.segmentationTemplateId !== params.data.segmentationTemplateId,\r\n 'segmentation-child-cell': () => true,\r\n },\r\n };\r\n\r\n colDefs.push(parentColDef);\r\n colDefs.push(childColDef);\r\n\r\n return colDefs;\r\n};\r\n\r\nconst createNonLookupTypeSegmentationColumns = (\r\n segmentationTemplates: SegmentationTemplate[],\r\n isEditable: boolean,\r\n): ColDef[] => {\r\n const colDefs: ColDef[] = [];\r\n segmentationTemplates.forEach((st) => {\r\n st?.segments.forEach((segment: SegmentationTemplateSegment) => {\r\n const colDef: ColDef = {\r\n colId: segmentColdId(segment),\r\n headerName: segment.name,\r\n editable: (params: EditableCallbackParams) =>\r\n st.id === params.data.segmentationTemplateId && isEditable,\r\n cellEditorPopup: true,\r\n valueGetter: (params: ValueGetterParams) => {\r\n return st.id === params.data.segmentationTemplateId\r\n ? params.data.segments\r\n ? params.data.segments[segment.name]\r\n : null\r\n : null;\r\n },\r\n valueSetter: (params) => {\r\n if (st.id !== params.data.segmentationTemplateId) {\r\n return false;\r\n }\r\n\r\n params.data.segments[segment.name] = params.newValue.toString();\r\n return true;\r\n },\r\n cellClassRules: {\r\n 'disabled-cell': (params) => st.id !== params.data.segmentationTemplateId,\r\n },\r\n };\r\n\r\n colDefs.push(colDef);\r\n });\r\n });\r\n\r\n return colDefs;\r\n};\r\n\r\nexport class SegmentationSampleGridColBuilder {\r\n private _colDataFactory: SegmentationSampleGridColDataFactory;\r\n private _colDefs: ColDef[];\r\n\r\n constructor(colDataFactory: SegmentationSampleGridColDataFactory) {\r\n this._colDataFactory = colDataFactory;\r\n this._colDefs = [];\r\n }\r\n\r\n public get colDefs(): ColDef[] {\r\n return this._colDefs;\r\n }\r\n\r\n public addSampleTemplateCol(\r\n lvOrganizationSampleTemplates: LvOrganizationSampleTemplate[],\r\n isEditable: boolean,\r\n ) {\r\n const indexedValues = new Map(\r\n lvOrganizationSampleTemplates?.map((o) => [o.sampleTypeId, o.description]),\r\n );\r\n\r\n const col: ColDef = {\r\n headerName: 'Sample Template',\r\n colId: 'sample_template',\r\n headerCheckboxSelection: true,\r\n headerCheckboxSelectionFilteredOnly: true,\r\n checkboxSelection: true,\r\n editable: isEditable,\r\n cellEditor: 'agRichSelectCellEditor',\r\n cellEditorPopup: true,\r\n cellEditorParams: {\r\n values: [...indexedValues.values()],\r\n } as IRichCellEditorParams,\r\n valueGetter: (params: ValueGetterParams) => indexedValues.get(params.data.sampleTypeId),\r\n valueSetter: (params: ValueSetterParams) => {\r\n indexedValues.forEach((v, k) => {\r\n if (v === params.newValue) {\r\n params.data.sampleTypeId = k;\r\n }\r\n });\r\n\r\n return true;\r\n },\r\n cellClassRules: {\r\n 'invalid-cell': (params) => !params.data.sampleTypeId,\r\n },\r\n };\r\n\r\n this._colDefs.push(col);\r\n\r\n return this;\r\n }\r\n\r\n public addCollectionDateCol(isEditable: boolean) {\r\n const dateFormat = 'MM/DD/YYYY HH:mm A';\r\n const minCollectionDate = new Date(1950, 0, 1);\r\n const maxCollectionDate = moment(new Date()).startOf('day').add(2, 'days').toDate();\r\n const col: ColDef = {\r\n headerName: 'Collection Date',\r\n colId: 'collection_date',\r\n editable: isEditable,\r\n cellEditorPopup: true,\r\n valueGetter: (params) => DateUtility.toView(params.data.collectionDate),\r\n valueSetter: (params) => {\r\n let date = moment(params.newValue, dateFormat);\r\n params.data.collectionDate = date.isBetween(minCollectionDate, maxCollectionDate)\r\n ? date.toDate()\r\n : null;\r\n\r\n return true;\r\n },\r\n cellEditorParams: {\r\n maxCollectionDate,\r\n },\r\n cellEditorSelector: (params: ICellEditorParams) => {\r\n const { context } = params;\r\n const { preferences }: { preferences: SampleSegmentationGridPreferences } = context;\r\n\r\n return {\r\n component:\r\n preferences.dateTimeEditor === AgDateTimeEditorTypes.PICKER\r\n ? AgDatePickerEditor\r\n : AgDateMaskEditor,\r\n };\r\n },\r\n cellClassRules: {\r\n 'invalid-cell': (params) => !params.data.collectionDate,\r\n },\r\n };\r\n\r\n this.colDefs.push(col);\r\n\r\n return this;\r\n }\r\n\r\n public addSegmentationTemplateCol(isEditable: boolean) {\r\n const col: ColDef = {\r\n headerName: 'Segmentation Template',\r\n colId: 'segmentation_template',\r\n editable: isEditable,\r\n cellEditor: 'agRichSelectCellEditor',\r\n cellEditorPopup: true,\r\n cellEditorParams: {\r\n values: [\r\n ...this._colDataFactory.segmentationTemplateSelectorOptions.map((x) => x.title),\r\n ],\r\n } as IRichCellEditorParams,\r\n valueGetter: (params: ValueGetterParams) => {\r\n const selectorOption =\r\n this._colDataFactory.segmentationTemplateSelectorOptions.find(\r\n (x) => x.value === params.data.segmentationTemplateId,\r\n );\r\n\r\n return selectorOption?.value && Number(selectorOption?.value) > 0\r\n ? selectorOption.title\r\n : null;\r\n },\r\n valueSetter: (params: ValueSetterParams) => {\r\n const templateName = params.newValue;\r\n\r\n const segmentationTemplate =\r\n this._colDataFactory.getSegmentationTemplateByName(templateName);\r\n const segmentationTemplateId = segmentationTemplate?.id;\r\n\r\n const newSegments = {};\r\n segmentationTemplate?.segments.forEach((s) => (newSegments[s.name] = null));\r\n\r\n params.data.segmentationTemplateId = segmentationTemplateId;\r\n params.data.segments = newSegments;\r\n\r\n if (segmentationTemplateId) {\r\n params.data.description = null;\r\n }\r\n\r\n return true;\r\n },\r\n onCellValueChanged: (event: CellValueChangedEvent) => {\r\n const { oldValue, newValue, api } = event;\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n\r\n const oldSegmentationTemplate =\r\n this._colDataFactory.getSegmentationTemplateByName(oldValue);\r\n const newSegmentationTemplate =\r\n this._colDataFactory.getSegmentationTemplateByName(newValue);\r\n const oldSegmentationTemplateId = oldSegmentationTemplate?.id;\r\n const newSegmentationTemplateId = newSegmentationTemplate?.id;\r\n\r\n const currColDefs = api.getColumnDefs();\r\n const updatedColDefs: ColDef[] = this.removeUnusedSegmentationCols(\r\n oldSegmentationTemplateId,\r\n currColDefs,\r\n );\r\n\r\n const newColDefs: ColDef[] = this.createNewSegmentationCols(\r\n newSegmentationTemplateId,\r\n currColDefs,\r\n isEditable,\r\n );\r\n\r\n updatedColDefs.splice(updatedColDefs.length - 3, 0, ...newColDefs);\r\n api.setColumnDefs(updatedColDefs);\r\n },\r\n };\r\n\r\n this.colDefs.push(col);\r\n\r\n return this;\r\n }\r\n\r\n public addDescriptionCol(isEditable: boolean) {\r\n const colDef: ColDef = {\r\n headerName: 'Sample Description',\r\n field: 'description',\r\n editable: (params: EditableCallbackParams | CellClassParams) =>\r\n !params.data.segmentationTemplateId && isEditable,\r\n cellEditor: 'agLargeTextCellEditor',\r\n cellEditorPopup: true,\r\n cellEditorParams: {\r\n maxLength: 265,\r\n rows: 10,\r\n cols: 50,\r\n },\r\n cellClassRules: {\r\n 'disabled-cell': (params) => params.data.segmentationTemplateId,\r\n 'invalid-cell': (params) =>\r\n !params.data.segmentationTemplateId && !params.data.description,\r\n },\r\n };\r\n\r\n this.colDefs.push(colDef);\r\n\r\n return this;\r\n }\r\n\r\n public addLookupCols(areEditable: boolean) {\r\n for (let key in this._colDataFactory.groupedLookupSegmentationTemplates) {\r\n this._colDefs.push(\r\n ...createLookupTypeSegmentationColumns(\r\n this._colDataFactory.lookupParentSegment(key),\r\n this._colDataFactory.lookupChildSegment(key),\r\n areEditable,\r\n ),\r\n );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public addNonLookupCols(areEditable: boolean) {\r\n this._colDefs.push(\r\n ...createNonLookupTypeSegmentationColumns(\r\n this._colDataFactory.nonLookupSegmentationTemplates,\r\n areEditable,\r\n ),\r\n );\r\n\r\n return this;\r\n }\r\n\r\n public addLastCols(\r\n lvOrganizationSampleTemplates: LvOrganizationSampleTemplate[],\r\n areEditable: boolean,\r\n allowInternalCompositing: boolean,\r\n ) {\r\n const compositeValues = allowInternalCompositing\r\n ? [...defaultCompositeOptionsV2, ...internalCompositeOptionsV2]\r\n : defaultCompositeOptionsV2;\r\n const lastCols: ColDef[] = [\r\n {\r\n headerName: 'Composite',\r\n field: 'composite',\r\n editable: areEditable,\r\n cellEditor: 'agRichSelectCellEditor',\r\n cellEditorPopup: true,\r\n cellEditorParams: {\r\n values: compositeValues,\r\n } as IRichCellEditorParams,\r\n },\r\n {\r\n headerName: 'Test Methods',\r\n editable: false,\r\n valueGetter: (params: ValueGetterParams) => {\r\n const sampleTemplate = lvOrganizationSampleTemplates?.find(\r\n (st) => st.sampleTypeId === params.data.sampleTypeId,\r\n );\r\n\r\n return sampleTemplate\r\n ? formatTestMethodNames(sampleTemplate.testTemplates)\r\n : null;\r\n },\r\n },\r\n ];\r\n\r\n this.colDefs.push(...lastCols);\r\n\r\n return this;\r\n }\r\n\r\n private removeUnusedSegmentationCols(\r\n segmentationTemplateId: number,\r\n currColDefs: ColDef[],\r\n ): ColDef[] {\r\n const oldValueSampleSegments = this._colDataFactory.samples.find(\r\n (s) => s.segmentationTemplateId === segmentationTemplateId,\r\n )?.segments;\r\n\r\n if (oldValueSampleSegments && Object.keys(oldValueSampleSegments).length) {\r\n return currColDefs;\r\n }\r\n const oldValueColIds = this._colDataFactory\r\n .getSegmentationTemplateById(segmentationTemplateId)\r\n ?.segments.map((ss) => segmentColdId(ss));\r\n\r\n return currColDefs.filter((cd) => !oldValueColIds?.includes(cd['colId']));\r\n }\r\n\r\n private createNewSegmentationCols(\r\n segmentationTemplateId: number,\r\n currColDefs: ColDef[],\r\n areEditable: boolean,\r\n ): ColDef[] {\r\n if (!segmentationTemplateId) {\r\n return [];\r\n }\r\n\r\n const newColDefExists = currColDefs.find((x) =>\r\n x['colId'].endsWith(`_${segmentationTemplateId}`),\r\n );\r\n\r\n if (newColDefExists) {\r\n return [];\r\n }\r\n\r\n const newColDefs: ColDef[] = [];\r\n const lookupSegments =\r\n this._colDataFactory.getLookupSegmentationTemplateById(segmentationTemplateId);\r\n const nonLookupSegments =\r\n this._colDataFactory.getNonLookupSegmentationTemplateById(segmentationTemplateId);\r\n\r\n if (lookupSegments && lookupSegments.segments.length) {\r\n const groups = this._colDataFactory.groupLookupSegments(lookupSegments.segments);\r\n for (let g in groups) {\r\n const parent = this._colDataFactory.lookupParentSegment(g, groups);\r\n const child = this._colDataFactory.lookupChildSegment(g, groups);\r\n newColDefs.push(...createLookupTypeSegmentationColumns(parent, child, areEditable));\r\n }\r\n }\r\n\r\n if (nonLookupSegments && nonLookupSegments.segments.length) {\r\n newColDefs.push(\r\n ...createNonLookupTypeSegmentationColumns([nonLookupSegments], areEditable),\r\n );\r\n }\r\n\r\n return newColDefs;\r\n }\r\n}\r\n\r\nexport {\r\n SegmentationSampleGridColDataFactory,\r\n createLookupTypeSegmentationColumns,\r\n createNonLookupTypeSegmentationColumns,\r\n};\r\n","export default class SrtingUtility {\r\n /**\r\n *\r\n * @param {Number} [length='random between 5 and 10'] - Length of string to generate.\r\n * @returns {string} - A random string with the length specified.\r\n */\r\n static getRandomString(length = Math.floor(Math.random() * 6) + 5) {\r\n var value = '';\r\n var chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\n for (var i = 0; i < length; i++)\r\n value += chars[Math.floor(Math.random() * chars.length)];\r\n\r\n return value;\r\n }\r\n};\r\n","import { UiViewModel } from 'infrastructure/ui-view-model';\r\nimport Schedule from 'location-testing/plans/schedule';\r\nimport moment from 'moment';\r\nimport TargetCollectionTimes from './target-collection-times';\r\nimport TaskDistributionMethod from './task-distribution-method';\r\n\r\n\r\nexport default class UiSchedule implements Schedule, UiViewModel {\r\n private _startDate: string;\r\n private _startDateView: Date;\r\n private _endDate: string;\r\n private _endDateView: Date;\r\n private _blackoutDates: string[];\r\n private _blackoutDatesView: Date[];\r\n private _scheduleMinDate: Date;\r\n\r\n cycleDurationDays: number;\r\n targetCollectionTimes: TargetCollectionTimes[];\r\n skipDays: number;\r\n taskDistributionMethod: string;\r\n blackoutSundays: boolean;\r\n blackoutMondays: boolean;\r\n blackoutTuesdays: boolean;\r\n blackoutWednesdays: boolean;\r\n blackoutThursdays: boolean;\r\n blackoutFridays: boolean;\r\n blackoutSaturdays: boolean;\r\n timeZone: string;\r\n\r\n constructor() {\r\n this.taskDistributionMethod = TaskDistributionMethod.WEEK_BASED;\r\n this.skipDays = 0;\r\n this.targetCollectionTimes = [];\r\n this.timeZone = 'Pacific Standard Time';\r\n this._blackoutDates = [];\r\n this._blackoutDatesView = [];\r\n\r\n this.startDateView = new Date();\r\n this._scheduleMinDate = this.getTwentyFourHoursAgoDate();\r\n }\r\n\r\n public get startDate() {\r\n return this._startDate;\r\n }\r\n\r\n public set startDate(startDate: string) {\r\n this._startDate = startDate;\r\n if (startDate) {\r\n this._startDateView = new Date(startDate);\r\n }\r\n }\r\n\r\n public get startDateView() {\r\n return this._startDateView;\r\n }\r\n\r\n public set startDateView(startDateView: Date) {\r\n this._startDateView = startDateView;\r\n this._startDate = moment(startDateView).format('YYYY-MM-DD');\r\n }\r\n\r\n public get endDate() {\r\n return this._endDate;\r\n }\r\n\r\n public set endDate(endDate: string) {\r\n this._endDate = endDate;\r\n if (endDate) {\r\n this._endDateView = new Date(endDate);\r\n }\r\n }\r\n\r\n public get endDateView() {\r\n return this._endDateView;\r\n }\r\n\r\n public set endDateView(endDateView: Date) {\r\n this._endDateView = endDateView;\r\n this._endDate = moment(endDateView).format('YYYY-MM-DD');\r\n }\r\n\r\n public get blackoutDates() {\r\n return this._blackoutDates;\r\n }\r\n\r\n public set blackoutDates(blackoutDates: string[]) {\r\n this._blackoutDates = blackoutDates;\r\n if (blackoutDates?.length) {\r\n this._blackoutDatesView = blackoutDates.map(d => new Date(`${d}${d.endsWith('Z') ? '' : 'Z'}`));\r\n }\r\n }\r\n\r\n public get blackoutDatesView() {\r\n return this._blackoutDatesView;\r\n }\r\n\r\n public set blackoutDatesView(blackoutDatesView: Date[]) {\r\n this._blackoutDatesView = blackoutDatesView;\r\n if (blackoutDatesView?.length) {\r\n this._blackoutDates = blackoutDatesView.map(d => moment(d).format('YYYY-MM-DD'));\r\n }\r\n }\r\n\r\n public get scheduleMinDate(): Date {\r\n return this._scheduleMinDate;\r\n }\r\n\r\n toEntity(): any {\r\n let schedule = {};\r\n Object.keys(this).forEach(k => {\r\n if (k.charAt(0) !== '_') {\r\n schedule[k] = this[k];\r\n }\r\n });\r\n\r\n schedule['startDate'] = this.startDate;\r\n schedule['endDate'] = this.endDate;\r\n schedule['blackoutDates'] = this.blackoutDates;\r\n\r\n return schedule;\r\n }\r\n\r\n loadViewFrom(entity: any): void {\r\n if (!entity) {\r\n return;\r\n }\r\n this.timeZone = entity.timeZone;\r\n this.startDate = entity.startDate;\r\n this.endDate = entity.endDate;\r\n this.cycleDurationDays = entity.cycleDurationDays;\r\n this.targetCollectionTimes = entity.targetCollectionTimes;\r\n this.skipDays = entity.skipDays;\r\n this.blackoutDates = entity.blackoutDates;\r\n this.taskDistributionMethod = entity.taskDistributionMethod;\r\n this.blackoutSundays = entity.blackoutSundays;\r\n this.blackoutMondays = entity.blackoutMondays;\r\n this.blackoutTuesdays = entity.blackoutTuesdays;\r\n this.blackoutWednesdays = entity.blackoutWednesdays;\r\n this.blackoutThursdays = entity.blackoutThursdays;\r\n this.blackoutFridays = entity.blackoutFridays;\r\n this.blackoutSaturdays = entity.blackoutSaturdays;\r\n }\r\n\r\n private getTwentyFourHoursAgoDate(): Date {\r\n let today = new Date();\r\n let yesterdayDate = new Date();\r\n yesterdayDate.setDate(today.getDate() - 1);\r\n\r\n return yesterdayDate;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport CoAReportStyle from './coa-report-style';\r\n\r\n@autoinject\r\nexport default class CoAReportStyleService {\r\n httpClient: HttpClient;\r\n\r\n constructor(httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n async getCoAReportStyles(): Promise {\r\n let coaReportStyles = await this.httpClient.get('coa-report-styles');\r\n return coaReportStyles as unknown as CoAReportStyle[];\r\n }\r\n\r\n async getCoAReportStyleOptions(coaReportStyles: CoAReportStyle[] = null): Promise {\r\n let reportStyles = (coaReportStyles === null) ? await this.getCoAReportStyles() : coaReportStyles;\r\n\r\n return reportStyles.map(rs => ({\r\n title: rs.id,\r\n value: rs.id\r\n }));\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport RecordStatus from 'record-status';\r\nimport { PointTestHistory } from './point-test-history';\r\n\r\n@autoinject\r\nexport default class RemediationService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getRemediations(remediationFilters, view?: string, recordStatus?: RecordStatus) {\r\n var queryParameters = remediationFilters;\r\n\r\n if (view) queryParameters.view = view;\r\n\r\n if (recordStatus) queryParameters.recordStatus = recordStatus;\r\n\r\n var query = buildQueryString(queryParameters, true);\r\n\r\n return this.httpClient.get(`location-testing/remediations${query ? `?${query}` : ''}`);\r\n }\r\n\r\n getRemediation(id) {\r\n return this.httpClient.get(`location-testing/remediations/${id}`);\r\n }\r\n\r\n deleteRemediations(ids) {\r\n var query = ids.map((id) => `id=${id}`).join('&');\r\n return this.httpClient.delete(`location-testing/remediations?${query}`);\r\n }\r\n\r\n reassignRemediations(ids: number[], assignedUserId: number) {\r\n return this.httpClient.put('location-testing/remediations/reassign', { ids, assignedUserId });\r\n }\r\n\r\n getRemediationCounts(organizationIds, assignedToMe) {\r\n var query = buildQueryString(\r\n {\r\n // Map organization IDs to multiple 'organizationId' query string variables.\r\n organizationId: organizationIds,\r\n assignedToMe: !!assignedToMe,\r\n },\r\n true,\r\n );\r\n return this.httpClient.get(\r\n `location-testing/remediation-counts/${query ? `?${query}` : ''}`,\r\n );\r\n }\r\n\r\n saveRemediation(remediation) {\r\n if (!remediation.id)\r\n return this.httpClient.post('location-testing/remediations', remediation);\r\n\r\n return this.httpClient.put(`location-testing/remediations/${remediation.id}`, remediation);\r\n }\r\n\r\n getRemediationStatuses() {\r\n return [\r\n { id: 1, code: 'NotStarted', name: 'Not Started' },\r\n { id: 2, code: 'InProgress', name: 'In Progress' },\r\n { id: 3, code: 'Completed', name: 'Completed' },\r\n { id: 4, code: 'Reviewed', name: 'Reviewed' },\r\n { id: 5, code: 'Rejected', name: 'Rejected' },\r\n ];\r\n }\r\n\r\n saveRemediationFile(remediationFileDetails, remediationFile) {\r\n if (!remediationFileDetails.remediationId)\r\n throw 'Remediation must be saved before creating a file.';\r\n\r\n const formData = new FormData();\r\n formData.append('remediationId', remediationFileDetails.remediationId);\r\n formData.append('isPostRemediation', remediationFileDetails.isPostRemediation);\r\n\r\n if (remediationFile) formData.append('file', remediationFile);\r\n\r\n return this.httpClient\r\n .createRequest(\r\n `location-testing/remediations/${remediationFileDetails.remediationId}/files`,\r\n )\r\n .asPost()\r\n .withContent(formData)\r\n .send();\r\n }\r\n\r\n deleteRemediationFile(id, remediationFileId) {\r\n return this.httpClient.delete(\r\n `location-testing/remediations/${id}/files/${remediationFileId}`,\r\n );\r\n }\r\n\r\n getRemediationRecordChanges(id) {\r\n return this.httpClient.get(`location-testing/remediations/${id}/record-changes`);\r\n }\r\n\r\n getPointTestHistory(pointId: number): Promise {\r\n return this.httpClient.get(`reporting/points/${pointId}/history`) as unknown as Promise<\r\n PointTestHistory[]\r\n >;\r\n }\r\n}\r\n","import { BaseQueryFilter } from '../infrastructure/components/query-filters/base-query-filter';\r\nimport { QueryFiltered } from '../infrastructure/components/query-filters/query-filtered';\r\nimport OutcomeStatus from './outcome-status';\r\n\r\nexport interface OutcomeStatusQuery {\r\n outcomeStatus: OutcomeStatus;\r\n}\r\n\r\n/* eslint-disable brace-style */\r\nexport class OutcomeStatusQueryFilters\r\n extends BaseQueryFilter\r\n implements OutcomeStatusQuery, QueryFiltered\r\n{\r\n private _outcomeStatus: OutcomeStatus;\r\n\r\n constructor() {\r\n super();\r\n this._outcomeStatus = OutcomeStatus.ALL;\r\n }\r\n\r\n public get outcomeStatus() {\r\n return this._outcomeStatus;\r\n }\r\n\r\n public set outcomeStatus(outcomeStatuses: OutcomeStatus) {\r\n this._outcomeStatus = outcomeStatuses || OutcomeStatus.ALL;\r\n }\r\n\r\n public get count(): number {\r\n return Number(!!this._outcomeStatus && this._outcomeStatus !== OutcomeStatus.ALL);\r\n }\r\n\r\n reset(): void {\r\n this._outcomeStatus = OutcomeStatus.ALL;\r\n }\r\n\r\n getQueryParams(): OutcomeStatusQuery {\r\n return {\r\n outcomeStatus: this._outcomeStatus,\r\n };\r\n }\r\n\r\n setFilterValues(params: OutcomeStatusQuery): void {\r\n super.setQueryFilteredValues(params, this);\r\n }\r\n}\r\n","import SelectorOption from 'infrastructure/selector-option';\r\n\r\nenum PointRisk {\r\n NOT_SPECIFIED = 'NotSpecified',\r\n LOW = 'Low',\r\n MEDIUM = 'Medium',\r\n HIGH = 'High'\r\n}\r\n\r\nexport default PointRisk;\r\n\r\nexport function getPointRiskOptions() {\r\n return [\r\n { value: PointRisk.NOT_SPECIFIED, title: 'Not Specified' },\r\n { value: PointRisk.LOW, title: 'Low' },\r\n { value: PointRisk.MEDIUM, title: 'Medium' },\r\n { value: PointRisk.HIGH, title: 'High' }\r\n ] as SelectorOption[]\r\n}\r\n","import { FirstDataRenderedEvent } from 'ag-grid-community';\r\n\r\nconst expandRowAtIndex = (params: FirstDataRenderedEvent, rowIndex: number) => {\r\n const displayedRowCount = params.api.getDisplayedRowCount();\r\n if (displayedRowCount === 0) {\r\n return;\r\n }\r\n if (rowIndex > displayedRowCount) {\r\n rowIndex = 1;\r\n }\r\n\r\n const expandRowIndex = displayedRowCount === 1 ? 0 : rowIndex;\r\n\r\n setTimeout(() => {\r\n const levelOneDisplayedRow = params.api.getDisplayedRowAtIndex(expandRowIndex);\r\n levelOneDisplayedRow.setExpanded(true);\r\n if (\r\n levelOneDisplayedRow.childrenAfterGroup?.length > 0 &&\r\n levelOneDisplayedRow.childrenAfterGroup[0].group\r\n ) {\r\n levelOneDisplayedRow.childrenAfterGroup[0].setExpanded(true);\r\n }\r\n }, 0);\r\n};\r\n\r\nexport { expandRowAtIndex };\r\n","import { BaseQueryFilter } from 'infrastructure/components/query-filters/base-query-filter';\r\nimport { OrganizationsQueryFilters } from 'infrastructure/components/query-filters/organizations-query-filter';\r\nimport { QueryFiltered } from 'infrastructure/components/query-filters/query-filtered';\r\n\r\nexport interface ExportTaskCollectionTemplateListQuery {\r\n organizationIds: number[];\r\n timeStamp?: number;\r\n}\r\nexport class ExportTaskCollectionTemplateListQueryFilters extends BaseQueryFilter\r\n implements QueryFiltered {\r\n\r\n organizationsQueryFilters: OrganizationsQueryFilters;\r\n\r\n constructor() {\r\n super();\r\n this.organizationsQueryFilters = new OrganizationsQueryFilters();\r\n }\r\n\r\n reset(): void {\r\n this.organizationsQueryFilters.reset();\r\n }\r\n\r\n public get count() {\r\n return this.organizationsQueryFilters.count;\r\n }\r\n\r\n getQueryParams(): ExportTaskCollectionTemplateListQuery {\r\n return {\r\n ...this.organizationsQueryFilters.getQueryParams(),\r\n timeStamp: Math.floor((new Date()).getTime() / 1000),\r\n };\r\n }\r\n\r\n setFilterValues(params: ExportTaskCollectionTemplateListQuery): void {\r\n super.setQueryFilteredValues(params, this);\r\n }\r\n}\r\n","import { GridStackOptions } from 'gridstack';\r\n\r\n// GridStack 7.x responsive API (oneColumnSize et al). When the frontend\r\n// toolchain is upgraded and gridstack moves to v10+, replace with columnOpts.\r\nexport function buildGridOptions(overrides?: Partial): GridStackOptions {\r\n return {\r\n staticGrid: true,\r\n column: 12,\r\n cellHeight: '12rem',\r\n margin: 8,\r\n oneColumnSize: 768,\r\n ...overrides,\r\n };\r\n}\r\n","import { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface MapPlanQuery {\r\n mapId?: number;\r\n planId?: number;\r\n mapIds: number[];\r\n planIds: number[];\r\n}\r\n\r\nexport class MapPlanQueryFilter extends BaseQueryFilter\r\n implements MapPlanQuery, QueryFiltered {\r\n\r\n private _mapPlanIds: number[];\r\n private _mapPlanFilterType: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this._mapPlanIds = [];\r\n this._mapPlanFilterType = 'map';\r\n }\r\n mapId: number;\r\n planId: number;\r\n\r\n public get mapPlanFilterType() {\r\n return this._mapPlanFilterType;\r\n }\r\n\r\n public set mapPlanFilterType(mpFilterType: string) {\r\n this._mapPlanFilterType = mpFilterType;\r\n this._mapPlanIds = [];\r\n }\r\n\r\n public get mapIds() {\r\n return this._mapPlanFilterType === 'map' ? this._mapPlanIds : [];\r\n }\r\n\r\n public set mapIds(ids: number[]) {\r\n this._mapPlanFilterType = 'map';\r\n this._mapPlanIds = ids || [];\r\n }\r\n\r\n public get planIds() {\r\n return this._mapPlanFilterType === 'plan' ? this._mapPlanIds : [];\r\n }\r\n\r\n public set planIds(ids: number[]) {\r\n this._mapPlanFilterType = 'plan';\r\n this._mapPlanIds = ids || [];\r\n }\r\n\r\n public get mapPlanIds() {\r\n return this._mapPlanIds;\r\n }\r\n\r\n public set mapPlanIds(ids: number[]) {\r\n this._mapPlanIds = ids || [];\r\n }\r\n\r\n public get count(): number {\r\n return (Number(!!this._mapPlanIds.length));\r\n }\r\n\r\n reset(): void {\r\n this._mapPlanIds = [];\r\n this._mapPlanFilterType = 'map';\r\n }\r\n\r\n getQueryParams(): MapPlanQuery {\r\n return {\r\n mapIds: this.mapIds,\r\n planIds: this.planIds,\r\n };\r\n }\r\n\r\n setFilterValues(params: MapPlanQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n // NOTE: multiple mapId or plansId may be specified via the query string.\r\n // if planId is specified (contrained), it takes precedence over the mapId \r\n if (params.mapId) {\r\n params.mapIds = Array.isArray(params.mapId) ? params.mapId : [params.mapId];\r\n }\r\n if (params.planId) {\r\n params.planIds = Array.isArray(params.planId) ? params.planId : [params.planId];\r\n }\r\n\r\n super.setQueryFilteredValues(params, this);\r\n }\r\n}\r\n","enum GenerateTasksDateSelectionType {\r\n SINGLE_DATE = 'SingleDate',\r\n DATE_RANGE = 'DateRange',\r\n BY_QUARTER = 'ByQuarter',\r\n BY_MONTH = 'ByMonth',\r\n BY_WEEK = 'ByWeek',\r\n BY_DAY = 'ByDay',\r\n}\r\n\r\nexport default GenerateTasksDateSelectionType;\r\n","import PointRisk, { getPointRiskOptions } from './point-risk';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\n\r\nexport default class PointRiskComparer {\r\n static compareValues(a: PointRisk, b: PointRisk) {\r\n if (a === null)\r\n return -1;\r\n\r\n if (b === null)\r\n return 1;\r\n\r\n let options: SelectorOption[] = getPointRiskOptions();\r\n\r\n let aIndex = options.findIndex(x => x.value === a);\r\n let bIndex = options.findIndex(x => x.value === b);\r\n\r\n return aIndex - bIndex;\r\n }\r\n}\r\n","var map = {\n\t\"./af\": \"K/tc\",\n\t\"./af.js\": \"K/tc\",\n\t\"./ar\": \"jnO4\",\n\t\"./ar-dz\": \"o1bE\",\n\t\"./ar-dz.js\": \"o1bE\",\n\t\"./ar-kw\": \"Qj4J\",\n\t\"./ar-kw.js\": \"Qj4J\",\n\t\"./ar-ly\": \"HP3h\",\n\t\"./ar-ly.js\": \"HP3h\",\n\t\"./ar-ma\": \"CoRJ\",\n\t\"./ar-ma.js\": \"CoRJ\",\n\t\"./ar-sa\": \"gjCT\",\n\t\"./ar-sa.js\": \"gjCT\",\n\t\"./ar-tn\": \"bYM6\",\n\t\"./ar-tn.js\": \"bYM6\",\n\t\"./ar.js\": \"jnO4\",\n\t\"./az\": \"SFxW\",\n\t\"./az.js\": \"SFxW\",\n\t\"./be\": \"H8ED\",\n\t\"./be.js\": \"H8ED\",\n\t\"./bg\": \"hKrs\",\n\t\"./bg.js\": \"hKrs\",\n\t\"./bn\": \"kEOa\",\n\t\"./bn.js\": \"kEOa\",\n\t\"./bo\": \"0mo+\",\n\t\"./bo.js\": \"0mo+\",\n\t\"./br\": \"aIdf\",\n\t\"./br.js\": \"aIdf\",\n\t\"./bs\": \"JVSJ\",\n\t\"./bs.js\": \"JVSJ\",\n\t\"./ca\": \"1xZ4\",\n\t\"./ca.js\": \"1xZ4\",\n\t\"./cs\": \"PA2r\",\n\t\"./cs.js\": \"PA2r\",\n\t\"./cv\": \"A+xa\",\n\t\"./cv.js\": \"A+xa\",\n\t\"./cy\": \"l5ep\",\n\t\"./cy.js\": \"l5ep\",\n\t\"./da\": \"DxQv\",\n\t\"./da.js\": \"DxQv\",\n\t\"./de\": \"tGlX\",\n\t\"./de-at\": \"s+uk\",\n\t\"./de-at.js\": \"s+uk\",\n\t\"./de-ch\": \"u3GI\",\n\t\"./de-ch.js\": \"u3GI\",\n\t\"./de.js\": \"tGlX\",\n\t\"./dv\": \"WYrj\",\n\t\"./dv.js\": \"WYrj\",\n\t\"./el\": \"jUeY\",\n\t\"./el.js\": \"jUeY\",\n\t\"./en-au\": \"Dmvi\",\n\t\"./en-au.js\": \"Dmvi\",\n\t\"./en-ca\": \"OIYi\",\n\t\"./en-ca.js\": \"OIYi\",\n\t\"./en-gb\": \"Oaa7\",\n\t\"./en-gb.js\": \"Oaa7\",\n\t\"./en-ie\": \"4dOw\",\n\t\"./en-ie.js\": \"4dOw\",\n\t\"./en-nz\": \"b1Dy\",\n\t\"./en-nz.js\": \"b1Dy\",\n\t\"./eo\": \"Zduo\",\n\t\"./eo.js\": \"Zduo\",\n\t\"./es\": \"iYuL\",\n\t\"./es-do\": \"CjzT\",\n\t\"./es-do.js\": \"CjzT\",\n\t\"./es.js\": \"iYuL\",\n\t\"./et\": \"7BjC\",\n\t\"./et.js\": \"7BjC\",\n\t\"./eu\": \"D/JM\",\n\t\"./eu.js\": \"D/JM\",\n\t\"./fa\": \"jfSC\",\n\t\"./fa.js\": \"jfSC\",\n\t\"./fi\": \"gekB\",\n\t\"./fi.js\": \"gekB\",\n\t\"./fo\": \"ByF4\",\n\t\"./fo.js\": \"ByF4\",\n\t\"./fr\": \"nyYc\",\n\t\"./fr-ca\": \"2fjn\",\n\t\"./fr-ca.js\": \"2fjn\",\n\t\"./fr-ch\": \"Dkky\",\n\t\"./fr-ch.js\": \"Dkky\",\n\t\"./fr.js\": \"nyYc\",\n\t\"./fy\": \"cRix\",\n\t\"./fy.js\": \"cRix\",\n\t\"./gd\": \"9rRi\",\n\t\"./gd.js\": \"9rRi\",\n\t\"./gl\": \"iEDd\",\n\t\"./gl.js\": \"iEDd\",\n\t\"./gom-latn\": \"DKr+\",\n\t\"./gom-latn.js\": \"DKr+\",\n\t\"./he\": \"x6pH\",\n\t\"./he.js\": \"x6pH\",\n\t\"./hi\": \"3E1r\",\n\t\"./hi.js\": \"3E1r\",\n\t\"./hr\": \"S6ln\",\n\t\"./hr.js\": \"S6ln\",\n\t\"./hu\": \"WxRl\",\n\t\"./hu.js\": \"WxRl\",\n\t\"./hy-am\": \"1rYy\",\n\t\"./hy-am.js\": \"1rYy\",\n\t\"./id\": \"UDhR\",\n\t\"./id.js\": \"UDhR\",\n\t\"./is\": \"BVg3\",\n\t\"./is.js\": \"BVg3\",\n\t\"./it\": \"bpih\",\n\t\"./it.js\": \"bpih\",\n\t\"./ja\": \"B55N\",\n\t\"./ja.js\": \"B55N\",\n\t\"./jv\": \"tUCv\",\n\t\"./jv.js\": \"tUCv\",\n\t\"./ka\": \"IBtZ\",\n\t\"./ka.js\": \"IBtZ\",\n\t\"./kk\": \"bXm7\",\n\t\"./kk.js\": \"bXm7\",\n\t\"./km\": \"6B0Y\",\n\t\"./km.js\": \"6B0Y\",\n\t\"./kn\": \"PpIw\",\n\t\"./kn.js\": \"PpIw\",\n\t\"./ko\": \"Ivi+\",\n\t\"./ko.js\": \"Ivi+\",\n\t\"./ky\": \"lgnt\",\n\t\"./ky.js\": \"lgnt\",\n\t\"./lb\": \"RAwQ\",\n\t\"./lb.js\": \"RAwQ\",\n\t\"./lo\": \"sp3z\",\n\t\"./lo.js\": \"sp3z\",\n\t\"./lt\": \"JvlW\",\n\t\"./lt.js\": \"JvlW\",\n\t\"./lv\": \"uXwI\",\n\t\"./lv.js\": \"uXwI\",\n\t\"./me\": \"KTz0\",\n\t\"./me.js\": \"KTz0\",\n\t\"./mi\": \"aIsn\",\n\t\"./mi.js\": \"aIsn\",\n\t\"./mk\": \"aQkU\",\n\t\"./mk.js\": \"aQkU\",\n\t\"./ml\": \"AvvY\",\n\t\"./ml.js\": \"AvvY\",\n\t\"./mr\": \"Ob0Z\",\n\t\"./mr.js\": \"Ob0Z\",\n\t\"./ms\": \"6+QB\",\n\t\"./ms-my\": \"ZAMP\",\n\t\"./ms-my.js\": \"ZAMP\",\n\t\"./ms.js\": \"6+QB\",\n\t\"./my\": \"honF\",\n\t\"./my.js\": \"honF\",\n\t\"./nb\": \"bOMt\",\n\t\"./nb.js\": \"bOMt\",\n\t\"./ne\": \"OjkT\",\n\t\"./ne.js\": \"OjkT\",\n\t\"./nl\": \"+s0g\",\n\t\"./nl-be\": \"2ykv\",\n\t\"./nl-be.js\": \"2ykv\",\n\t\"./nl.js\": \"+s0g\",\n\t\"./nn\": \"uEye\",\n\t\"./nn.js\": \"uEye\",\n\t\"./pa-in\": \"8/+R\",\n\t\"./pa-in.js\": \"8/+R\",\n\t\"./pl\": \"jVdC\",\n\t\"./pl.js\": \"jVdC\",\n\t\"./pt\": \"8mBD\",\n\t\"./pt-br\": \"0tRk\",\n\t\"./pt-br.js\": \"0tRk\",\n\t\"./pt.js\": \"8mBD\",\n\t\"./ro\": \"lyxo\",\n\t\"./ro.js\": \"lyxo\",\n\t\"./ru\": \"lXzo\",\n\t\"./ru.js\": \"lXzo\",\n\t\"./sd\": \"Z4QM\",\n\t\"./sd.js\": \"Z4QM\",\n\t\"./se\": \"//9w\",\n\t\"./se.js\": \"//9w\",\n\t\"./si\": \"7aV9\",\n\t\"./si.js\": \"7aV9\",\n\t\"./sk\": \"e+ae\",\n\t\"./sk.js\": \"e+ae\",\n\t\"./sl\": \"gVVK\",\n\t\"./sl.js\": \"gVVK\",\n\t\"./sq\": \"yPMs\",\n\t\"./sq.js\": \"yPMs\",\n\t\"./sr\": \"zx6S\",\n\t\"./sr-cyrl\": \"E+lV\",\n\t\"./sr-cyrl.js\": \"E+lV\",\n\t\"./sr.js\": \"zx6S\",\n\t\"./ss\": \"Ur1D\",\n\t\"./ss.js\": \"Ur1D\",\n\t\"./sv\": \"X709\",\n\t\"./sv.js\": \"X709\",\n\t\"./sw\": \"dNwA\",\n\t\"./sw.js\": \"dNwA\",\n\t\"./ta\": \"PeUW\",\n\t\"./ta.js\": \"PeUW\",\n\t\"./te\": \"XLvN\",\n\t\"./te.js\": \"XLvN\",\n\t\"./tet\": \"V2x9\",\n\t\"./tet.js\": \"V2x9\",\n\t\"./th\": \"EOgW\",\n\t\"./th.js\": \"EOgW\",\n\t\"./tl-ph\": \"Dzi0\",\n\t\"./tl-ph.js\": \"Dzi0\",\n\t\"./tlh\": \"z3Vd\",\n\t\"./tlh.js\": \"z3Vd\",\n\t\"./tr\": \"DoHr\",\n\t\"./tr.js\": \"DoHr\",\n\t\"./tzl\": \"z1FC\",\n\t\"./tzl.js\": \"z1FC\",\n\t\"./tzm\": \"wQk9\",\n\t\"./tzm-latn\": \"tT3J\",\n\t\"./tzm-latn.js\": \"tT3J\",\n\t\"./tzm.js\": \"wQk9\",\n\t\"./uk\": \"raLr\",\n\t\"./uk.js\": \"raLr\",\n\t\"./ur\": \"UpQW\",\n\t\"./ur.js\": \"UpQW\",\n\t\"./uz\": \"Loxo\",\n\t\"./uz-latn\": \"AQ68\",\n\t\"./uz-latn.js\": \"AQ68\",\n\t\"./uz.js\": \"Loxo\",\n\t\"./vi\": \"KSF8\",\n\t\"./vi.js\": \"KSF8\",\n\t\"./x-pseudo\": \"/X5v\",\n\t\"./x-pseudo.js\": \"/X5v\",\n\t\"./yo\": \"fzPg\",\n\t\"./yo.js\": \"fzPg\",\n\t\"./zh-cn\": \"XDpg\",\n\t\"./zh-cn.js\": \"XDpg\",\n\t\"./zh-hk\": \"SatO\",\n\t\"./zh-hk.js\": \"SatO\",\n\t\"./zh-tw\": \"kOpN\",\n\t\"./zh-tw.js\": \"kOpN\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"RnhZ\";","Number.isInteger = Number.isInteger || function (value) {\r\n return typeof value === \"number\"\r\n && isFinite(value)\r\n && Math.floor(value) === value;\r\n};\r\n\r\nexport default class NumberUtility {\r\n\r\n};\r\n","import moment from 'moment';\r\nimport Sample from 'requests/sample';\r\n\r\nexport const isSampleValid = (sample: Sample): boolean => {\r\n const isValid = sample.sampleTypeId !== null && moment(sample.collectionDate).isValid() && sample.composite !== null;\r\n\r\n return sample.segmentationTemplateId ? isValid : isValid && sample.description !== null;\r\n};\r\n\r\n","import Organization from 'organizations/organization';\r\nimport RecordStatus, { getRecordStatusOptions } from 'record-status';\r\nimport TestMethod from 'test-methods/test-method';\r\nimport CapPlanFilters from './cap-plan-filters';\r\n\r\nexport class UiCapPlanFilters implements CapPlanFilters {\r\n public isFilteringOrganization: boolean;\r\n\r\n public organizations: Organization[];\r\n public testMethods: TestMethod[];\r\n public recordStatusOptions: any;\r\n\r\n public selectedOrganizations: Organization[];\r\n public selectedTestMethods: TestMethod[];\r\n public recordStatus?: string;\r\n\r\n constructor() {\r\n this.isFilteringOrganization = false;\r\n this.organizations = [];\r\n this.selectedOrganizations = [];\r\n this.testMethods = [];\r\n this.selectedTestMethods = [];\r\n this.recordStatusOptions = getRecordStatusOptions();\r\n this.recordStatus = RecordStatus.ACTIVE;\r\n }\r\n\r\n get organizationIds(): number[] {\r\n return this.selectedOrganizations.map(o => o.organizationId);\r\n }\r\n\r\n get testMethodIds(): number[] {\r\n return this.selectedTestMethods.map(tm => tm.id);\r\n }\r\n\r\n get orgFilterCaption(): string {\r\n return this.selectedOrganizations.length\r\n ? this.selectedOrganizations.map(o => o.name).join(', ')\r\n : 'All Organizations';\r\n }\r\n\r\n get testMethodFilterCaption(): string {\r\n return this.selectedTestMethods.length\r\n ? this.selectedTestMethods.map(tm => tm.billCode).join(', ')\r\n : '';\r\n }\r\n\r\n apply() {\r\n this.isFilteringOrganization = true;\r\n }\r\n\r\n clear() {\r\n this.isFilteringOrganization = false;\r\n this.selectedOrganizations = [];\r\n this.selectedTestMethods = [];\r\n this.recordStatus = RecordStatus.ACTIVE;\r\n }\r\n\r\n toModel(): CapPlanFilters {\r\n return {\r\n organizationIds: this.organizationIds,\r\n testMethodIds: this.testMethodIds,\r\n recordStatus: this.recordStatus,\r\n };\r\n }\r\n}\r\n","// Stat tile filters shared by the My Remediations and Remediation Management widgets.\r\nexport type RemediationStatFilter = 'notStarted' | 'inProgress' | 'completed' | 'rejected' | 'reviewed';\r\n\r\nexport const STATUS_CODES: Record = {\r\n notStarted: 'NotStarted',\r\n inProgress: 'InProgress',\r\n completed: 'Completed',\r\n rejected: 'Rejected',\r\n reviewed: 'Reviewed',\r\n};\r\n\r\n// Reviewed is a permanently closed state (approval user's sign-off, nothing left to act on), so\r\n// it's left out of the unfiltered list and only shown through its own tile - mirrors how My Tasks\r\n// only shows submitted tasks through the Submitted tile.\r\nexport const OPEN_STATUS_CODES = ['NotStarted', 'InProgress', 'Completed', 'Rejected'];\r\n\r\n// The status codes a widget's list shows: the active tile's status, or every open status.\r\nexport function statusCodesFor(activeStatFilter: RemediationStatFilter | null): string[] {\r\n return activeStatFilter ? [STATUS_CODES[activeStatFilter]] : OPEN_STATUS_CODES;\r\n}\r\n","// Mirrors dbo.ApplicationModule lookup data (FSNS.Portal.Database\\Scripts\\Data\\LookupData\\dbo.ApplicationModule.sql)\r\nexport enum ApplicationModuleId {\r\n Standard = 1,\r\n LocationTesting = 3,\r\n Pricing = 4,\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class ApplicationModuleService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getApplicationModules(organizationId) {\r\n return this\r\n .httpClient\r\n .get(`application-modules${(organizationId ? `?organizationId=${organizationId}` : '')}`);\r\n }\r\n\r\n saveApplicationModules(organizationId, applicationModules) {\r\n return this\r\n .httpClient\r\n .put(`application-modules?organizationId=${organizationId}`, applicationModules);\r\n }\r\n}\r\n","import { ICellEditorComp, ICellEditorParams } from 'ag-grid-community';\r\nimport InputMask from 'inputmask';\r\n\r\nexport class AgDateMaskEditor implements ICellEditorComp {\r\n private value: any;\r\n private input!: HTMLInputElement;\r\n private _inputMask: InputMask;\r\n private _maskOptions: any;\r\n private _charWasPressed: boolean;\r\n\r\n constructor() {\r\n this._maskOptions = {\r\n alias: 'datetime',\r\n inputFormat: 'mm/dd/yyyy hh:MM TT',\r\n placeholder: '*',\r\n min: '01/01/1960 12:00 AM',\r\n max: '12/31/2050 11:59 PM',\r\n };\r\n }\r\n\r\n init(params: ICellEditorParams): void {\r\n this._charWasPressed = params.charPress?.length > 0;\r\n this.value = params.charPress || params.value;\r\n\r\n this.input = document.createElement('input');\r\n this.input.type = 'text';\r\n this.input.value = this.value;\r\n this.input.setAttribute('data-cy', 'ag-popup-editor-input');\r\n this._inputMask = new InputMask(this._maskOptions).mask(this.input);\r\n }\r\n\r\n getGui() {\r\n return this.input;\r\n }\r\n\r\n afterGuiAttached() {\r\n this.input.focus();\r\n if (this._charWasPressed) {\r\n this.input.setSelectionRange(20, 20);\r\n }\r\n }\r\n\r\n isCancelAfterEnd(): boolean {\r\n const isValid = this._inputMask.isValid(this.input.value, this._maskOptions);\r\n if (!isValid) {\r\n this.input.value = null;\r\n }\r\n\r\n return !isValid;\r\n }\r\n\r\n getValue() {\r\n return this.input.value;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport Logger from '../../infrastructure/logger';\r\n\r\n@autoinject\r\nexport default class MapService {\r\n constructor(private httpClient: HttpClient, private logger: Logger) {\r\n this.httpClient = httpClient;\r\n this.logger = logger;\r\n }\r\n\r\n getMaps(queryParams: Record) {\r\n const query = buildQueryString(queryParams);\r\n\r\n return this.httpClient.get(`location-testing/maps${query ? `?${query}` : ''}`);\r\n }\r\n\r\n getMap(id) {\r\n return this.httpClient.get(`location-testing/maps/${id}`);\r\n }\r\n\r\n deleteMaps(ids) {\r\n var query = ids.map((id) => `id=${id}`).join('&');\r\n return this.httpClient.delete(`location-testing/maps?${query}`);\r\n }\r\n\r\n saveMap(map, mapPhotoFile) {\r\n var formData = new FormData();\r\n\r\n if (map.id) formData.append('id', map.id);\r\n\r\n if (mapPhotoFile) formData.append('photo', mapPhotoFile);\r\n\r\n formData.append('name', map.name);\r\n formData.append('description', map.description || '');\r\n formData.append('isActive', map.isActive);\r\n formData.append('organizationId', map.organizationId);\r\n\r\n for (var i = 0; i < map.attributes.length; i++) {\r\n formData.append(`attributes[${i}].name`, map.attributes[i].name);\r\n formData.append(`attributes[${i}].value`, map.attributes[i].value);\r\n }\r\n\r\n if (!map.id)\r\n return this.httpClient\r\n .createRequest('location-testing/maps/')\r\n .asPost()\r\n .withContent(formData)\r\n .send();\r\n\r\n return this.httpClient\r\n .createRequest(`location-testing/maps/${map.id}`)\r\n .asPut()\r\n .withContent(formData)\r\n .send();\r\n }\r\n\r\n updateMapPoints(mapId, points) {\r\n return this.httpClient.patch(`location-testing/maps/${mapId}`, points);\r\n }\r\n\r\n getMapRecordChanges(id) {\r\n return this.httpClient.get(`location-testing/maps/${id}/record-changes`);\r\n }\r\n\r\n getLatestResults(id, filters) {\r\n var query = buildQueryString(filters, true);\r\n return this.httpClient.get(\r\n `location-testing/maps/${id}/latest-results${query ? `?${query}` : ''}`,\r\n );\r\n }\r\n\r\n getHistoricalResults(id, filters) {\r\n var query = buildQueryString(filters, true);\r\n return this.httpClient.get(\r\n `location-testing/maps/${id}/historical-results${query ? `?${query}` : ''}`,\r\n );\r\n }\r\n\r\n getDailyResults(id, filters) {\r\n var query = buildQueryString(filters, true);\r\n return this.httpClient.get(\r\n `location-testing/maps/${id}/daily-results${query ? `?${query}` : ''}`,\r\n );\r\n }\r\n\r\n getPlanFilterOptions(id: number): Promise {\r\n return this.httpClient.get(\r\n `location-testing/maps/${id}/plan-filter-options`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getTestMethodFilterOptions(id: number): Promise {\r\n return this.httpClient.get(\r\n `location-testing/maps/${id}/test-method-filter-options`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getTaskAssigneeFilterOptions(id: number): Promise {\r\n return this.httpClient.get(\r\n `location-testing/maps/${id}/task-assignee-filter-options`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getDashboardSettings() {\r\n try {\r\n return JSON.parse(localStorage.getItem('mapDashboardSettings'));\r\n } catch (error) {\r\n this.logger.warn('Failed to parse local storage value for \"mapDashboardSettings\".');\r\n return null;\r\n }\r\n }\r\n\r\n saveDashboardSettings({\r\n panZoom,\r\n showLatestView: showLatestView,\r\n viewPointSize: viewPointSize,\r\n }: any) {\r\n var settings = this.getDashboardSettings() || {};\r\n\r\n settings.showLatestView =\r\n typeof showLatestView === 'boolean' ? showLatestView : settings.showLatestView;\r\n settings.viewPointSize = viewPointSize || settings.viewPointSize;\r\n\r\n if (panZoom) settings.panZoom = Object.assign(settings.panZoom || {}, panZoom);\r\n\r\n localStorage.setItem('mapDashboardSettings', JSON.stringify(settings));\r\n }\r\n\r\n getMapTests(id, testIds) {\r\n var query = testIds.map((testId) => `testId=${testId}`).join('&');\r\n return this.httpClient.get(`location-testing/maps/${id}/tests?${query}`);\r\n }\r\n}\r\n","import { ColDef, ColGroupDef } from 'ag-grid-community';\r\n\r\nconst addCellRendererParamsToColId = (\r\n colDefs: (ColDef | ColGroupDef)[],\r\n colId: string,\r\n cellRendererParams: any,\r\n): void => {\r\n colDefs.forEach((cd: ColDef) => {\r\n if (cd.colId === colId) {\r\n cd.cellRendererParams = cellRendererParams;\r\n }\r\n });\r\n};\r\n\r\nconst addCellRendererParamsToColField = (\r\n colDefs: (ColDef | ColGroupDef)[],\r\n colField: string,\r\n cellRendererParams: any,\r\n): void => {\r\n colDefs.forEach((cd: ColDef) => {\r\n if (cd.field === colField) {\r\n cd.cellRendererParams = cellRendererParams;\r\n }\r\n });\r\n};\r\n\r\nexport { addCellRendererParamsToColField, addCellRendererParamsToColId };\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\nfunction buildReportUrl(id, format, parameters, specialAction = null) {\r\n var action = specialAction ? `/${specialAction}` : '';\r\n var url = `reporting/reports/${id}${action}?format=`;\r\n\r\n if (format) url += `${encodeURIComponent(format)}`;\r\n\r\n if (parameters) {\r\n Object.keys(parameters).forEach(function (key) {\r\n const values = parameters[key];\r\n if (!values) return;\r\n\r\n for (let value of values)\r\n if (value !== null && typeof value !== 'undefined')\r\n url += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\r\n });\r\n }\r\n\r\n return url;\r\n}\r\n\r\n@autoinject\r\nexport default class ReportService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getReports() {\r\n return this.httpClient.get('reporting/reports');\r\n }\r\n\r\n getReportNotDownload(id: number) {\r\n return this.httpClient.get(`reporting/reports/${id}`);\r\n }\r\n\r\n getReport(id, format = null, parameters = null) {\r\n var url = buildReportUrl(id, format, parameters);\r\n return this.httpClient.get(url);\r\n }\r\n\r\n async getSubscription(reportId) {\r\n return this.httpClient.get(`reporting/reports/${reportId}/subscription`);\r\n }\r\n\r\n async createOrUpdateSubscription(id, subscriptionCriteria, parameters) {\r\n var format = subscriptionCriteria.deliveryFormat || 'pdf';\r\n var url = buildReportUrl(id, format, parameters, 'subscription');\r\n\r\n subscriptionCriteria.reportId = id;\r\n return this.httpClient.post(url, subscriptionCriteria);\r\n }\r\n\r\n async deleteSubscription(reportId) {\r\n return this.httpClient.delete(`reporting/reports/${reportId}/subscription`);\r\n }\r\n\r\n getDownloadUrl(id, format, parameters) {\r\n return 'api/' + buildReportUrl(id, format, parameters);\r\n }\r\n}\r\n","export default class ExcelCellRenderer {\r\n init(params) {\r\n let gridOptions = params.api.gridOptionsWrapper.gridOptions;\r\n\r\n this.overrideContext = gridOptions.overrideContext;\r\n\r\n this.rootElement = document.createElement('div');\r\n this.rootElement.style.width = '100%';\r\n\r\n let viewFactory = gridOptions.viewCompiler.compile(``);\r\n this.view = viewFactory.create(gridOptions.container);\r\n\r\n this.refresh(params);\r\n this.initialized = true;\r\n }\r\n\r\n getGui() {\r\n return this.rootElement;\r\n }\r\n\r\n refresh(params) {\r\n if (this.initialized)\r\n return;\r\n\r\n this.view.bind(params, this.overrideContext);\r\n this.view.appendNodesTo(this.rootElement);\r\n this.view.attached();\r\n }\r\n\r\n destroy() {\r\n this.view.unbind();\r\n this.view.removeNodes();\r\n this.view.detached();\r\n }\r\n}\r\n","import { PLATFORM } from 'aurelia-framework';\r\nimport { WidgetLayoutItem } from './widget-layout-item';\r\nimport { ApplicationModuleId } from '../application-modules/application-module-id';\r\n\r\nexport interface DashboardTemplateWidget {\r\n widgetToken: string;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport function createDefaultLayoutItems(): WidgetLayoutItem[] {\r\n return [\r\n {\r\n id: 'request-statuses',\r\n title: 'Request Statuses',\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/widgets/request-statuses-widget'),\r\n requiredPermission: 'ViewRequests',\r\n x: 0,\r\n y: 0,\r\n w: 6,\r\n h: 2,\r\n state: 'pending',\r\n filterable: true,\r\n },\r\n {\r\n id: 'test-results',\r\n title: 'Test Results',\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/widgets/test-results-widget'),\r\n requiredPermission: 'ViewResults',\r\n x: 6,\r\n y: 0,\r\n w: 6,\r\n h: 2,\r\n state: 'pending',\r\n filterable: true,\r\n },\r\n {\r\n id: 'my-tasks',\r\n title: 'My Tasks',\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/widgets/my-tasks-widget'),\r\n requiredPermission: 'ViewMyTasks',\r\n requiredApplicationModule: ApplicationModuleId.LocationTesting,\r\n x: 0,\r\n y: 2,\r\n w: 3,\r\n h: 3,\r\n compactMaxWidth: 420,\r\n state: 'pending',\r\n filterable: true,\r\n },\r\n {\r\n id: 'task-management',\r\n title: 'Task Management',\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/widgets/task-management-widget'),\r\n requiredPermission: 'ViewAllTasks',\r\n requiredApplicationModule: ApplicationModuleId.LocationTesting,\r\n x: 3,\r\n y: 2,\r\n w: 3,\r\n h: 3,\r\n // Widgets with five stat tiles need more room before leaving compact mode.\r\n compactMaxWidth: 640,\r\n state: 'pending',\r\n filterable: true,\r\n },\r\n {\r\n id: 'my-remediations',\r\n title: 'My Remediations',\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/widgets/my-remediations-widget'),\r\n requiredPermission: 'ViewMyRemediations',\r\n requiredApplicationModule: ApplicationModuleId.LocationTesting,\r\n x: 6,\r\n y: 2,\r\n w: 3,\r\n h: 3,\r\n compactMaxWidth: 640,\r\n state: 'pending',\r\n filterable: true,\r\n },\r\n {\r\n id: 'all-remediations',\r\n title: 'Remediation Management',\r\n moduleId: PLATFORM.moduleName(\r\n 'dashboard-widgets/widgets/remediation-management-widget',\r\n ),\r\n requiredPermission: 'ViewAllRemediations',\r\n requiredApplicationModule: ApplicationModuleId.LocationTesting,\r\n x: 9,\r\n y: 2,\r\n w: 3,\r\n h: 3,\r\n compactMaxWidth: 640,\r\n state: 'pending',\r\n filterable: true,\r\n },\r\n ];\r\n}\r\n\r\n// Builds the layout from a resolved template: only the widgets the template placed are shown\r\n// (in the positions it specified), not merged with the hardcoded default set. Render/gating\r\n// metadata (title, moduleId, permissions) still comes from the same registry below, keyed by id.\r\nexport function buildLayoutItemsFromTemplate(\r\n templateWidgets: DashboardTemplateWidget[],\r\n): WidgetLayoutItem[] {\r\n const metadataById = new Map(createDefaultLayoutItems().map((item) => [item.id, item]));\r\n\r\n return (\r\n templateWidgets\r\n // Drop any widgetToken we no longer have render/gating metadata for (e.g. a widget type\r\n // removed or renamed since the template was built) — the DB can't drive rendering on its\r\n // own, since it doesn't know how to compose a widget, only where to place one.\r\n .filter((widget) => metadataById.has(widget.widgetToken))\r\n .map((widget) => ({\r\n ...metadataById.get(widget.widgetToken),\r\n x: widget.x,\r\n y: widget.y,\r\n w: widget.width,\r\n h: widget.height,\r\n }))\r\n );\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\n\r\n@inject(HttpClient)\r\nexport default class OrganizationSampleTemplateService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getOrganizationSampleTemplates(organizationId) {\r\n return this.httpClient.get(`organization-sample-templates?organizationIds=${organizationId}`);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { DialogService } from 'aurelia-dialog';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport TaskStatusSelectorDialog from './task-status-selector-dialog';\r\n\r\nexport interface TaskStatusSelection {\r\n statusName: string;\r\n statusId: string;\r\n collectedDateTime: string;\r\n comments: string;\r\n}\r\n\r\nexport interface TaskStatusSelectionResult {\r\n cancelled: boolean;\r\n statusInfo?: TaskStatusSelection;\r\n tasks?: any[];\r\n}\r\n\r\n@autoinject\r\nexport class TaskStatusUpdateService {\r\n constructor(\r\n private dialogService: DialogService,\r\n private dialogPresenter: DialogPresenter,\r\n ) {}\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n async selectStatus(tasks: any[]): Promise {\r\n const dialogResult = (await this.showTaskStatusSelectorDialog(tasks)) as any;\r\n if (!dialogResult || !dialogResult.output) {\r\n return { cancelled: true };\r\n }\r\n\r\n const statusInfo: TaskStatusSelection = dialogResult.output;\r\n\r\n if (statusInfo.statusId === 'InProgress' || statusInfo.statusId === 'Completed') {\r\n const validTasks = tasks.filter((t) => !!t.assignedUserEmail);\r\n const diff = tasks.length - validTasks.length;\r\n const taskNoun = diff > 1 ? 'tasks' : 'task';\r\n const haveClause = diff > 1 ? 'they have' : 'it has';\r\n\r\n if (validTasks.length === 0) {\r\n await this.dialogPresenter.showAlert(\r\n 'No Valid Tasks Selected',\r\n `The selected ${taskNoun} cannot be updated to status ${statusInfo.statusName} because ${haveClause} no assigned user.`,\r\n );\r\n return { cancelled: true };\r\n }\r\n\r\n if (validTasks.length < tasks.length) {\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Not All Selected Tasks Valid',\r\n `${diff} ${taskNoun} cannot be updated to status ${statusInfo.statusName} because ${haveClause} no assigned user. Do you want to continue updating the other task(s)?`,\r\n );\r\n if (!confirmed) {\r\n return { cancelled: true };\r\n }\r\n\r\n return { cancelled: false, statusInfo, tasks: validTasks };\r\n }\r\n }\r\n\r\n return { cancelled: false, statusInfo, tasks };\r\n }\r\n\r\n private showTaskStatusSelectorDialog(tasks: any[]) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: TaskStatusSelectorDialog,\r\n model: { tasks },\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n}\r\n","import { ICellRendererParams } from 'ag-grid-community';\r\n\r\nexport const AgBoolCellRenderer = (params: ICellRendererParams) => {\r\n const { value }: { value: boolean } = params;\r\n if (typeof value !== 'boolean') {\r\n throw new Error('AgBoolRenderer requires a cell value of type boolean');\r\n }\r\n\r\n return value ? '' : '';\r\n};\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@autoinject\r\nexport default class ParameterOptionService {\r\n constructor(\r\n private httpClient: HttpClient\r\n ) {\r\n }\r\n\r\n getParameterOptions(parameterName) {\r\n return this.httpClient.get(`reporting/parameter-options?parameterName=${parameterName}`);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport TaskGenerationRequest from './task-generation-request';\r\nimport Logger from '../../infrastructure/logger';\r\nimport TaskGenerationClientSettings from './task-generation-client-settings';\r\nimport GenerateTasksPointZoneDistributionMethod from './generate-tasks-point-zone-distribution-method';\r\n\r\n@autoinject\r\nexport default class TaskGenerationRequestService {\r\n constructor(\r\n private httpClient: HttpClient,\r\n private logger: Logger\r\n ) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n submit(request: TaskGenerationRequest) {\r\n return this.httpClient.post('location-testing/task-generation-requests', request);\r\n }\r\n\r\n getPlanSettings(planId: number): TaskGenerationClientSettings {\r\n let storageKey = `${'taskGenerationPlanSettings'}-${planId}`;\r\n\r\n try {\r\n return JSON.parse(localStorage.getItem(storageKey)) as TaskGenerationClientSettings;\r\n } catch (error) {\r\n this.logger.warn(`Failed to parse local storage value for '${storageKey}'.`);\r\n return null;\r\n }\r\n }\r\n\r\n savePlanSettings(planId: number, settingsToPersist: TaskGenerationClientSettings) {\r\n var settings = (this.getPlanSettings(planId) || {}) as TaskGenerationClientSettings;\r\n\r\n settings.pointZoneDistributionMethod = settingsToPersist.pointZoneDistributionMethod;\r\n settings.pointZoneDistributions = settingsToPersist.pointZoneDistributions;\r\n settings.riskPriorities = settingsToPersist.riskPriorities;\r\n settings.dateSelectionType = settingsToPersist.dateSelectionType;\r\n\r\n if(settingsToPersist.pointZoneDistributionMethod === GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE ||\r\n settingsToPersist.pointZoneDistributionMethod === GenerateTasksPointZoneDistributionMethod.PERCENTAGE){\r\n settings.requestedTaskCount = settingsToPersist.requestedTaskCount;\r\n } else {\r\n delete settings.requestedTaskCount;\r\n }\r\n\r\n let storageKey = `${'taskGenerationPlanSettings'}-${planId}`;\r\n localStorage.setItem(storageKey, JSON.stringify(settings));\r\n }\r\n}\r\n\r\n","import { BaseQueryFilter } from '../infrastructure/components/query-filters/base-query-filter';\r\nimport {\r\n DateRangeQuery,\r\n DateRangeQueryFilter,\r\n} from '../infrastructure/components/query-filters/date-range-query-filter';\r\nimport { QueryFiltered } from '../infrastructure/components/query-filters/query-filtered';\r\nimport OutcomeStatus from './outcome-status';\r\nimport { OutcomeStatusQuery, OutcomeStatusQueryFilters } from './outcome-status-query-filter';\r\n\r\nexport interface TestResultListQuery {\r\n dateRangeOption?: string;\r\n targetStartDate: string;\r\n targetEndDate: string;\r\n dateRangeOverride?: boolean;\r\n enableTimeFilter?: boolean;\r\n outcomeStatus?: OutcomeStatus;\r\n pointZones?: number[];\r\n limit?: number;\r\n}\r\n\r\n/* eslint-disable brace-style */\r\nexport class TestResultsQueryFilters\r\n extends BaseQueryFilter\r\n implements QueryFiltered\r\n{\r\n private _filterCaption: string;\r\n dateRangeQueryFilters: DateRangeQueryFilter;\r\n outcomeStatusQueryFilters: OutcomeStatusQueryFilters;\r\n pointZones?: number[];\r\n limit?: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.dateRangeQueryFilters = new DateRangeQueryFilter();\r\n this.outcomeStatusQueryFilters = new OutcomeStatusQueryFilters();\r\n this.pointZones = [];\r\n }\r\n\r\n public get count(): number {\r\n return (\r\n 0 +\r\n this.outcomeStatusQueryFilters.count +\r\n Number(!!(this.pointZones && this.pointZones.length))\r\n );\r\n }\r\n\r\n public get filterCaption(): string {\r\n return this._filterCaption;\r\n }\r\n\r\n reset(): void {\r\n this.dateRangeQueryFilters.reset();\r\n this.outcomeStatusQueryFilters.reset();\r\n\r\n this.pointZones = [];\r\n this.limit = null;\r\n }\r\n\r\n getQueryParams(): TestResultListQuery {\r\n return {\r\n ...this.dateRangeQueryFilters.getQueryParams(),\r\n ...this.outcomeStatusQueryFilters.getQueryParams(),\r\n pointZones: this.pointZones,\r\n limit: this.limit,\r\n };\r\n }\r\n\r\n setFilterValues(params: TestResultListQuery): void {\r\n const dateRangeQuery: DateRangeQuery = {\r\n dateRangeOverride: params.dateRangeOverride,\r\n dateRangeOption: params.dateRangeOption,\r\n targetStartDate: params.targetStartDate,\r\n targetEndDate: params.targetEndDate,\r\n enableTimeFilter: params.enableTimeFilter,\r\n };\r\n const outcomeStatusQuery: OutcomeStatusQuery = { outcomeStatus: params.outcomeStatus };\r\n const { pointZones, limit } = { ...params };\r\n\r\n this.dateRangeQueryFilters.setFilterValues(dateRangeQuery);\r\n this.outcomeStatusQueryFilters.setFilterValues(outcomeStatusQuery);\r\n\r\n super.setQueryFilteredValues({ pointZones, limit }, this);\r\n\r\n this._filterCaption = super.getFilterCaption(\r\n this.count,\r\n 'Target Date Range',\r\n this.dateRangeQueryFilters.dateRangeCaption,\r\n );\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport { PointTestResult } from 'location-testing/maps/grids/point-test-result';\r\nimport { buildAttributeQuery } from '../attribute-utility';\r\nimport PointFilters from './point-filters';\r\n\r\n@autoinject\r\nexport default class PointService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getPoints(filters: PointFilters, view: 'summary' = null): Promise {\r\n let attributeQuery = buildAttributeQuery(filters.pointAttributes, 'pointAttributes');\r\n let { ids, organizationIds, mapIds, pointId, planIds, sampleIds, recordStatus } = filters;\r\n let query = buildQueryString(\r\n { ids, organizationIds, mapIds, pointId, planIds, sampleIds, recordStatus },\r\n true,\r\n );\r\n\r\n let url = `location-testing/points?${query}&view=${view || ''}&${attributeQuery}`;\r\n return this.httpClient.get(url) as any as Promise;\r\n }\r\n\r\n getPoint(id): Promise {\r\n return this.httpClient.get(`location-testing/points/${id}`) as any;\r\n }\r\n\r\n deletePoints(ids) {\r\n var query = ids.map((id) => `id=${id}`).join('&');\r\n return this.httpClient.delete(`location-testing/points?${query}`);\r\n }\r\n\r\n reactivatePoints(ids: number[]) {\r\n return this.httpClient.post('location-testing/points/reactivate', ids);\r\n }\r\n\r\n savePoint(point, pointPhotoFile): Promise {\r\n var formData = new FormData();\r\n\r\n if (point.id) formData.append('id', point.id);\r\n\r\n if (pointPhotoFile) formData.append('photo', pointPhotoFile);\r\n\r\n formData.append('name', point.name);\r\n formData.append('description', point.description || '');\r\n formData.append('room', point.room || '');\r\n formData.append('zone', point.zone);\r\n formData.append('mobile', point.mobile);\r\n formData.append('type', point.type || '');\r\n formData.append('risk', point.risk);\r\n formData.append('isActive', point.isActive);\r\n formData.append('mapId', point.mapId);\r\n formData.append('x', point.x);\r\n formData.append('y', point.y);\r\n\r\n for (var i = 0; i < point.attributes.length; i++) {\r\n formData.append(`attributes[${i}].name`, point.attributes[i].name);\r\n formData.append(`attributes[${i}].value`, point.attributes[i].value);\r\n }\r\n\r\n if (!point.id)\r\n return this.httpClient\r\n .createRequest('location-testing/points/')\r\n .asPost()\r\n .withContent(formData)\r\n .send();\r\n\r\n return this.httpClient\r\n .createRequest(`location-testing/points/${point.id}`)\r\n .asPut()\r\n .withContent(formData)\r\n .send();\r\n }\r\n\r\n getPointRecordChanges(id): Promise {\r\n return this.httpClient.get(\r\n `location-testing/points/${id}/record-changes`,\r\n ) as any as Promise;\r\n }\r\n\r\n getPointTests(id: number, filters): Promise {\r\n var query = buildQueryString(filters, true);\r\n\r\n return this.httpClient.get(\r\n `location-testing/points/${id}/tests${query ? `?${query}` : ''}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getHasOverdueTasks(id): Promise {\r\n return this.httpClient.get(`location-testing/points/${id}/has-overdue-tasks`);\r\n }\r\n\r\n getRiskCaption(risk) {\r\n switch (risk) {\r\n case 'NotSpecified':\r\n return 'Not Specified';\r\n\r\n case 'Low':\r\n case 'Medium':\r\n case 'High':\r\n default:\r\n return risk;\r\n }\r\n }\r\n}\r\n","import { ApplicationInsights, SeverityLevel, IExceptionTelemetry, ITraceTelemetry } from '@microsoft/applicationinsights-web';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport ApplicationInsightsErrorData from './application-insights-error-data';\r\n\r\nvar trackingAttributeKey = 'data-appinsights';\r\n\r\nfunction getAttributesLike(partial, attributes) {\r\n const results = [];\r\n for (let x = 0; x < attributes.length; ++x) {\r\n if (attributes[x].name.indexOf(partial) >= 0) {\r\n results.push(attributes[x]);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\nconst domHelper = {\r\n isElement: function (e) {\r\n return e instanceof HTMLElement;\r\n },\r\n hasClass: function (cls) {\r\n return function (e) {\r\n return domHelper.isElement(e) && e.classList.contains(cls);\r\n };\r\n },\r\n hasTrackingInfo: function (e) {\r\n return domHelper.isElement(e) && (getAttributesLike(trackingAttributeKey, e.attributes).length > 0);\r\n },\r\n isOfType: function (e, type) {\r\n return domHelper.isElement(e) &&\r\n e.nodeName.toLowerCase() === type.toLowerCase();\r\n },\r\n isAnchor: function (e) {\r\n return domHelper.isOfType(e, 'a');\r\n },\r\n isButton: function (e) {\r\n return domHelper.isOfType(e, 'button');\r\n }\r\n};\r\n\r\nconst defaultOptions = {\r\n pageTracking: {\r\n enabled: true,\r\n getTitle: function (payload) {\r\n return payload.instruction.config.title;\r\n }\r\n },\r\n clickTracking: {\r\n enabled: true,\r\n filter: function (element) {\r\n return domHelper.isElement(element); // && (criteria.isAnchor(element) || criteria.isButton(element));\r\n }\r\n }\r\n};\r\n\r\nconst delegate = function (criteria, listener) {\r\n return function (evt) {\r\n let el = evt.target;\r\n\r\n if (criteria && !criteria(el)) \r\n return;\r\n \r\n evt.delegateTarget = el;\r\n listener.call(this, evt);\r\n };\r\n};\r\n\r\n// NOTE: https://github.com/microsoft/ApplicationInsights-JS\r\n\r\n@autoinject\r\nexport default class ApplicationInsightsService {\r\n private loaded: boolean;\r\n private appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: ''\r\n }\r\n });\r\n\r\n private options: any;\r\n\r\n constructor(private eventAggregator: EventAggregator) {\r\n this.loaded = false;\r\n this.options = defaultOptions;\r\n\r\n this.trackClick = this.trackClick.bind(this);\r\n this.trackPageView = this.trackPageView.bind(this);\r\n }\r\n\r\n registerKey(key: string) {\r\n if (!key || this.loaded)\r\n return;\r\n\r\n this.appInsights.config.instrumentationKey = key;\r\n this.appInsights.loadAppInsights();\r\n\r\n this.appInsights.addTelemetryInitializer((item) => {\r\n const ipAddress = item.tags && item.tags['ai.location.ip'];\r\n if (ipAddress) {\r\n item.baseData.properties = {\r\n ...item.baseData.properties,\r\n 'client-ip': ipAddress\r\n };\r\n }\r\n }); \r\n\r\n this._attachPageTracker();\r\n this._attachClickTracker();\r\n\r\n this.loaded = true;\r\n }\r\n\r\n setUserId(userId: string, accountId: string) {\r\n if (!this.loaded)\r\n return;\r\n\r\n this.appInsights.setAuthenticatedUserContext(userId, accountId, true);\r\n }\r\n\r\n clearUserId() {\r\n if (!this.loaded)\r\n return;\r\n\r\n this.appInsights.clearAuthenticatedUserContext();\r\n }\r\n\r\n trackPageView(name?: string, uri?: string) {\r\n if (!this.loaded)\r\n return;\r\n\r\n this.appInsights.trackPageView({ name, uri });\r\n }\r\n\r\n trackClick(evt) {\r\n if (!this.loaded)\r\n return;\r\n\r\n if (!evt || !evt.delegateTarget || !domHelper.hasTrackingInfo(evt.delegateTarget))\r\n return;\r\n\r\n const dimensions = {};\r\n const element = evt.delegateTarget;\r\n const matches = getAttributesLike(trackingAttributeKey, element.attributes);\r\n matches.forEach(match => {\r\n var dataItems = match.value.split(';');\r\n dataItems.forEach(di => {\r\n var components = di.split(':');\r\n dimensions[components[0].toLowerCase()] = components[1];\r\n });\r\n });\r\n\r\n this.appInsights.trackEvent({ name: 'click', properties: dimensions });\r\n }\r\n\r\n trackEvent(logLevel: number, error: Error, message: string, data: ApplicationInsightsErrorData, state: string) {\r\n function getSeverityLevel(logLevel: number): SeverityLevel {\r\n let level: SeverityLevel = SeverityLevel.Critical;\r\n \r\n switch (logLevel) {\r\n case 2:\r\n level = SeverityLevel.Information\r\n break;\r\n case 3:\r\n level = SeverityLevel.Warning;\r\n break;\r\n case 4:\r\n level = SeverityLevel.Error;\r\n break;\r\n default:\r\n level = SeverityLevel.Warning;\r\n }\r\n\r\n return level;\r\n }\r\n\r\n if (!this.loaded)\r\n return;\r\n\r\n if (error)\r\n this.trackError(error, message, getSeverityLevel(logLevel), data, state);\r\n else\r\n this.trackTrace(message, getSeverityLevel(logLevel), data, state)\r\n }\r\n\r\n trackError(error: Error, message: string, level: SeverityLevel, errorData: ApplicationInsightsErrorData, state: string) {\r\n if (!this.loaded)\r\n return;\r\n\r\n let telemetry: IExceptionTelemetry = {};\r\n telemetry.exception = error ?? new Error(message);\r\n telemetry.severityLevel = level;\r\n\r\n telemetry.properties = this._convertDataToDictionary(errorData);\r\n\r\n if (error && message) \r\n telemetry.properties['message'] = message;\r\n\r\n if (state)\r\n telemetry.properties['state'] = state;\r\n\r\n this.appInsights.trackException(telemetry);\r\n }\r\n\r\n trackTrace(message: string, level: SeverityLevel, errorData: ApplicationInsightsErrorData, state: string) {\r\n if (!this.loaded)\r\n return;\r\n\r\n let telemetry: ITraceTelemetry = {\r\n message: message,\r\n severityLevel: level \r\n };\r\n\r\n let properties = this._convertDataToDictionary(errorData);\r\n\r\n if (state)\r\n properties['state'] = state;\r\n\r\n this.appInsights.trackTrace(telemetry, properties); \r\n }\r\n\r\n _attachPageTracker() {\r\n if (!this.options.pageTracking.enabled)\r\n return;\r\n\r\n this.eventAggregator.subscribe('router:navigation:success', payload => {\r\n this.trackPageView(\r\n payload.instruction.fragment,\r\n this.options.pageTracking.getTitle(payload)\r\n );\r\n });\r\n }\r\n\r\n _attachClickTracker() {\r\n if (!this.options.clickTracking.enabled)\r\n return;\r\n\r\n document.querySelector('body').addEventListener(\r\n 'click',\r\n delegate(this.options.clickTracking.filter, this.trackClick),\r\n false\r\n );\r\n }\r\n\r\n _convertDataToDictionary(errorData: ApplicationInsightsErrorData) {\r\n let properties = {};\r\n\r\n if (errorData.loggerName)\r\n properties['loggerName'] = errorData.loggerName;\r\n\r\n if (errorData.apiErrorCode)\r\n properties['apiErrorCode'] = errorData.apiErrorCode;\r\n\r\n if (errorData.exception)\r\n properties['exception'] = errorData.exception;\r\n\r\n if (errorData.httpMethod)\r\n properties['httpMethod'] = errorData.httpMethod;\r\n\r\n if (errorData.requestId)\r\n properties['requestId'] = errorData.requestId;\r\n\r\n if (errorData.statusCode)\r\n properties['statusCode'] = errorData.statusCode;\r\n\r\n if (errorData.url)\r\n properties['url'] = errorData.url;\r\n\r\n return properties;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { createDateRangeFilterOption } from '../filters/date-range-filter';\r\nimport DateRangeFilterOption from '../filters/date-range-filter-option';\r\nimport { BaseQueryFilter } from './base-query-filter';\r\nimport { QueryFiltered } from './query-filtered';\r\n\r\nexport interface DateRangeQuery {\r\n dateRangeOption: string;\r\n targetStartDate: string;\r\n targetEndDate: string;\r\n dateRangeOverride?: boolean;\r\n enableTimeFilter?: boolean;\r\n}\r\n\r\nexport type DateRangeQueryFilterOptionValue =\r\n | 'today'\r\n | 'last7Days'\r\n | 'last30Days'\r\n | 'custom'\r\n | 'next1Days'\r\n | 'next5Days'\r\n | 'next6Days'\r\n | 'next7Days'\r\n | 'next30Days'\r\n | 'next60Days'\r\n | 'next90Days'\r\n | 'next120Days'\r\n | 'allTime';\r\n\r\nexport class DateRangeQueryFilter extends BaseQueryFilter implements QueryFiltered {\r\n private _queryFilterDateRangeLocalStorageKey: string;\r\n private _defaultOptionValue: DateRangeQueryFilterOptionValue;\r\n private _querystringDateFormat = 'YYYY-MM-DDTHH:mm:ss.SSS[Z]';\r\n private _displayDateFormat = 'MM/DD/YYYY';\r\n private _defaultDateRangeFilterOption: DateRangeFilterOption;\r\n private _defaultDateRangeFilterOptions: DateRangeFilterOption[] = [\r\n createDateRangeFilterOption('last7Days', 'Last 7 Days', 7, false),\r\n createDateRangeFilterOption('last30Days', 'Last 30 Days', 30, false),\r\n createDateRangeFilterOption('custom', 'Specific Range'),\r\n createDateRangeFilterOption('today', 'Today', 0, true),\r\n createDateRangeFilterOption('next1Days', 'Today and Tomorrow (Emma)', 1, true),\r\n createDateRangeFilterOption('next5Days', 'Next 5 Days (Emma)', 5, true),\r\n createDateRangeFilterOption('next6Days', 'Next 6 Days (Emma)', 6, true),\r\n createDateRangeFilterOption('next7Days', 'Next 7 Days (Emma)', 7, true),\r\n createDateRangeFilterOption('next30Days', 'Next 30 Days (Emma)', 30, true),\r\n createDateRangeFilterOption('next60Days', 'Next 60 Days (Emma)', 60, true),\r\n createDateRangeFilterOption('next90Days', 'Next 90 Days (Emma)', 90, true),\r\n createDateRangeFilterOption('next120Days', 'Next 120 Days (Emma)', 120, true),\r\n ];\r\n private _dateRangeOption: string;\r\n private _dateRangeFilterOption: DateRangeFilterOption;\r\n private _dateRangeFilterOptions: DateRangeFilterOption[];\r\n private _enableTimeFilter: boolean;\r\n\r\n constructor(\r\n storageKey = 'query-filter.date-range',\r\n defaultOptionValue: DateRangeQueryFilterOptionValue = 'today',\r\n includeAllTimeOption = false,\r\n excludeEmmaOptions = false,\r\n ) {\r\n super();\r\n\r\n this._queryFilterDateRangeLocalStorageKey = storageKey;\r\n this._defaultOptionValue = defaultOptionValue;\r\n\r\n if (excludeEmmaOptions) {\r\n this._defaultDateRangeFilterOptions = this._defaultDateRangeFilterOptions.filter(\r\n (o) => !o.caption.includes('(Emma)'),\r\n );\r\n }\r\n\r\n if (includeAllTimeOption) {\r\n this._defaultDateRangeFilterOptions = [\r\n {\r\n value: 'allTime',\r\n caption: 'All Time',\r\n numericValue: 0,\r\n startDate: null,\r\n endDate: null,\r\n },\r\n ...this._defaultDateRangeFilterOptions,\r\n ];\r\n }\r\n\r\n // Tags the baked-in default option for display in the dropdown (e.g. \"Today (Default)\")\r\n // without touching `caption` itself, which the applied-filter summary bar also reads.\r\n this._defaultDateRangeFilterOptions.forEach((o) => {\r\n o.displayCaption = o.value === this._defaultOptionValue ? `${o.caption} (Default)` : o.caption;\r\n });\r\n\r\n this._defaultDateRangeFilterOption =\r\n (this._queryFilterDateRangeLocalStorageKey &&\r\n super.getPersistedFilter(this._queryFilterDateRangeLocalStorageKey)) ||\r\n this._defaultDateRangeFilterOptions.find((o) => o.value === this._defaultOptionValue);\r\n\r\n this._dateRangeFilterOptions = this._defaultDateRangeFilterOptions;\r\n this._dateRangeOption = this._defaultDateRangeFilterOption.value;\r\n this._dateRangeFilterOption = this._defaultDateRangeFilterOption;\r\n this._enableTimeFilter = false;\r\n }\r\n\r\n public get defaultDateRangeFilterOption() {\r\n return this._defaultDateRangeFilterOption;\r\n }\r\n\r\n public get dateRangeOption() {\r\n return this._dateRangeOption;\r\n }\r\n\r\n public get dateRangeFilterOption() {\r\n return this._dateRangeFilterOption;\r\n }\r\n\r\n public set dateRangeFilterOption(option: DateRangeFilterOption) {\r\n const dateRangeFilterOption = this._dateRangeFilterOptions.find(\r\n (o: DateRangeFilterOption) => o.value === option.value,\r\n );\r\n if (!dateRangeFilterOption) {\r\n throw new Error(`The dateRangeFilterOption of ${option.value} is not valid.`);\r\n }\r\n if (dateRangeFilterOption.value === 'custom') {\r\n dateRangeFilterOption.startDate = null;\r\n dateRangeFilterOption.endDate = null;\r\n }\r\n\r\n this._dateRangeOption = dateRangeFilterOption.value;\r\n this._dateRangeFilterOption = dateRangeFilterOption;\r\n }\r\n\r\n public get dateRangeFilterOptions(): DateRangeFilterOption[] {\r\n return this._dateRangeFilterOptions;\r\n }\r\n\r\n public get dateRangeCaption(): string {\r\n if (this._dateRangeOption !== 'custom') {\r\n return this._dateRangeFilterOption.caption;\r\n }\r\n\r\n return this.formattedDateRange;\r\n }\r\n\r\n public get formattedDateRange(): string {\r\n const startDate = this.formatDisplayDate(this._dateRangeFilterOption.startDate) || '*';\r\n const endDate = this.formatDisplayDate(this._dateRangeFilterOption.endDate) || '*';\r\n\r\n return `( ${startDate} - ${endDate} )`;\r\n }\r\n\r\n public get enableTimeFilter(): boolean {\r\n return this._enableTimeFilter;\r\n }\r\n\r\n private formatDisplayDate(date: Date) {\r\n return date ? moment(date).format(this._displayDateFormat) : null;\r\n }\r\n\r\n public formatDate(date: Date, endDate?: boolean): string {\r\n return date\r\n ? this._enableTimeFilter\r\n ? moment(date).format()\r\n : endDate\r\n ? moment(date).startOf('day').add(1, 'days').format()\r\n : moment(date).startOf('day').format()\r\n : null;\r\n }\r\n\r\n private configureDateRangeFilterOption(\r\n dateRangeOption: string,\r\n targetStartDate: string,\r\n targetEndDate: string,\r\n subtractDay?: boolean,\r\n ): DateRangeFilterOption {\r\n //We must support named date ranges to keep in sync\r\n //support named ranges first if not found bail out to default\r\n //otherwise everything is custom\r\n if (dateRangeOption && dateRangeOption !== 'custom') {\r\n const namedDateRangeFilterOption = this._dateRangeFilterOptions.find(\r\n (o) => o.value === dateRangeOption,\r\n );\r\n if (!namedDateRangeFilterOption) {\r\n return;\r\n }\r\n this.dateRangeFilterOption = namedDateRangeFilterOption;\r\n return;\r\n }\r\n\r\n const customDateRangeOption = this._dateRangeFilterOptions.find(\r\n (o) => o.value === 'custom',\r\n );\r\n const momentStartDate = moment(targetStartDate, this._querystringDateFormat);\r\n const momentEndDate = subtractDay\r\n ? moment(targetEndDate, this._querystringDateFormat).subtract(1, 'days')\r\n : moment(targetEndDate, this._querystringDateFormat);\r\n if (momentStartDate.isValid()) {\r\n customDateRangeOption.startDate = momentStartDate.toDate();\r\n }\r\n if (momentEndDate.isValid()) {\r\n customDateRangeOption.endDate = momentEndDate.toDate();\r\n }\r\n\r\n this._dateRangeOption = customDateRangeOption.value;\r\n this._dateRangeFilterOption = customDateRangeOption;\r\n }\r\n\r\n public get count(): number {\r\n return Number(this._dateRangeFilterOption !== this._defaultDateRangeFilterOption);\r\n }\r\n\r\n reset(): void {\r\n this._defaultDateRangeFilterOption = this._defaultDateRangeFilterOptions.find(\r\n (o) => o.value === this._defaultOptionValue,\r\n );\r\n this._dateRangeOption = this._defaultDateRangeFilterOption.value;\r\n this._dateRangeFilterOption = this._defaultDateRangeFilterOption;\r\n this._enableTimeFilter = false;\r\n\r\n if (this._queryFilterDateRangeLocalStorageKey) {\r\n super.setPersistedFilter(\r\n this._queryFilterDateRangeLocalStorageKey,\r\n this._dateRangeFilterOption,\r\n );\r\n }\r\n }\r\n\r\n getQueryParams(): DateRangeQuery {\r\n return {\r\n targetStartDate: this.formatDate(this._dateRangeFilterOption.startDate),\r\n targetEndDate: this.formatDate(this._dateRangeFilterOption.endDate, true),\r\n dateRangeOption: this._dateRangeOption,\r\n enableTimeFilter: this._enableTimeFilter,\r\n };\r\n }\r\n\r\n setFilterValues(params: DateRangeQuery): void {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const {\r\n dateRangeOption,\r\n targetStartDate,\r\n targetEndDate,\r\n dateRangeOverride,\r\n enableTimeFilter,\r\n } = params;\r\n this._enableTimeFilter = enableTimeFilter;\r\n\r\n //(1) Do nothing - defaults apply\r\n if (!dateRangeOption && !dateRangeOverride) {\r\n return;\r\n }\r\n\r\n //(2) Override global settings for this request\r\n if (dateRangeOverride || !this._queryFilterDateRangeLocalStorageKey) {\r\n this.configureDateRangeFilterOption(\r\n dateRangeOption,\r\n targetStartDate,\r\n targetEndDate,\r\n true,\r\n );\r\n return;\r\n }\r\n\r\n //(3) Set Global\r\n // The end date needs to be rolled back for custom dates...\r\n // as it was incremented up for the query/server\r\n this.configureDateRangeFilterOption(dateRangeOption, targetStartDate, targetEndDate, true);\r\n super.setPersistedFilter(\r\n this._queryFilterDateRangeLocalStorageKey,\r\n this._dateRangeFilterOption,\r\n );\r\n }\r\n\r\n persistCurrentSelection(): void {\r\n if (!this._queryFilterDateRangeLocalStorageKey) {\r\n return;\r\n }\r\n\r\n super.setPersistedFilter(\r\n this._queryFilterDateRangeLocalStorageKey,\r\n this._dateRangeFilterOption,\r\n );\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport AmsCoaExport from './ams-coa-export';\r\n\r\n@autoinject\r\nexport default class AmsCoaExportService {\r\n constructor(\r\n private httpClient: HttpClient) {\r\n }\r\n\r\n createAmsCoaExport(amsCoaExport: AmsCoaExport) {\r\n return this.httpClient.post('ams-coa-exports', amsCoaExport);\r\n }\r\n}\r\n","enum MapDashboardViewOption {\r\n ALL = 'all',\r\n ROUTINE = 'routine',\r\n VECTOR_SWAB = 'vectorSwab',\r\n CORRECTIVE_ACTION = 'correctiveActionSwab'\r\n}\r\n\r\nexport default MapDashboardViewOption;\r\n","export enum GlobalMessageSearchType {\r\n Default = 'Default',\r\n Read = 'Read',\r\n Deleted = 'Deleted',\r\n All = 'All',\r\n}\r\n","import {\r\n GridOptions,\r\n ValueFormatterParams,\r\n ValueGetterParams,\r\n} from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport moment from 'moment';\r\nimport 'moment-timezone';\r\nimport { findIana } from 'windows-iana';\r\nimport { SubscriptionFrequencyType } from './contracts/subscription-frequency-type';\r\n\r\nconst getWeekday = (dayOfWeek: number): string => {\r\n const weekdays = new Array(7);\r\n weekdays[0] = 'Sunday';\r\n weekdays[1] = 'Monday';\r\n weekdays[2] = 'Tuesday';\r\n weekdays[3] = 'Wednesday';\r\n weekdays[4] = 'Thursday';\r\n weekdays[5] = 'Friday';\r\n weekdays[6] = 'Saturday';\r\n\r\n return weekdays[dayOfWeek - 1];\r\n};\r\n\r\nconst formatDayOfMonth = (deliveryDay: number): string => {\r\n return deliveryDay >= 28 ? `${deliveryDay} or last day of month.` : deliveryDay.toString();\r\n};\r\n\r\nconst formatSubscriptionFreqencyType = (params: ValueFormatterParams): string => {\r\n return SubscriptionFrequencyType[params.value];\r\n};\r\n\r\nconst formatDeliveryDay = (params: ValueGetterParams): string => {\r\n switch (params.data.subscriptionFrequencyType) {\r\n case SubscriptionFrequencyType.Daily:\r\n return 'Every Day';\r\n case SubscriptionFrequencyType.Weekly:\r\n return getWeekday(params.data.deliveryDay) + 's';\r\n case SubscriptionFrequencyType.Monthly:\r\n return formatDayOfMonth(params.data.deliveryDay);\r\n }\r\n};\r\n\r\nconst formatIsStarted = (params: ValueFormatterParams): string => {\r\n return params.value ? 'Yes' : 'No';\r\n};\r\n\r\nconst formatLastDeliveryDate = (params: ValueGetterParams): string => {\r\n const { timeZone, lastDelivered } = params.data;\r\n const tz = findIana(timeZone);\r\n const currentUsersTimeZone = tz.length ? tz[0] : '';\r\n const isValid = moment(lastDelivered, moment.ISO_8601).isValid();\r\n\r\n return isValid\r\n ? (moment.utc(lastDelivered).clone() as any).tz(currentUsersTimeZone).format('llll')\r\n : 'Never Delivered';\r\n};\r\n\r\nconst formatNextDeliveryDate = (params: ValueGetterParams): string => {\r\n const { timeZone, nextDeliveryStart, isStarted } = params.data;\r\n if (!isStarted) {\r\n return '';\r\n }\r\n\r\n const tz = findIana(timeZone);\r\n const currentUsersTimeZone = tz.length ? tz[0] : '';\r\n const isValid = moment(nextDeliveryStart, moment.ISO_8601).isValid();\r\n\r\n return isValid\r\n ? (moment.utc(nextDeliveryStart).clone() as any).tz(currentUsersTimeZone).format('llll')\r\n : 'Error';\r\n};\r\n\r\nexport const adhocReportSubscriptionGrid: Readonly = {\r\n columnDefs: [\r\n {\r\n headerName: 'Report',\r\n field: 'adhocReportName',\r\n },\r\n {\r\n headerName: 'Frequency',\r\n field: 'subscriptionFrequencyType',\r\n valueFormatter: formatSubscriptionFreqencyType,\r\n },\r\n {\r\n headerName: 'Delivery Day',\r\n field: 'deliveryDay',\r\n valueGetter: formatDeliveryDay,\r\n },\r\n {\r\n headerName: 'Delivery Time of Day',\r\n field: 'deliveryTimeOfDay',\r\n },\r\n {\r\n headerName: 'Time Zone',\r\n field: 'timeZone',\r\n },\r\n {\r\n headerName: 'Started',\r\n field: 'isStarted',\r\n valueFormatter: formatIsStarted,\r\n },\r\n {\r\n headerName: 'Last Delivery Date',\r\n field: 'lastDelivered',\r\n valueGetter: formatLastDeliveryDate,\r\n },\r\n {\r\n headerName: 'Next Delivery Date',\r\n field: 'nextDeliveryStart',\r\n valueGetter: formatNextDeliveryDate,\r\n },\r\n {\r\n suppressMenu: true,\r\n template: `\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n `,\r\n cellClass: 'medium-text-right',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true, suppressMenu: true },\r\n};\r\n","export default class OrganizationUtility {\r\n static flattenOrganization(array, parentName) {\r\n var result = [];\r\n array.forEach(function (node) {\r\n node.parentOrganizationName = parentName;\r\n result.push(node);\r\n if (Array.isArray(node.children)) {\r\n\r\n result = result.concat(OrganizationUtility.flattenOrganization(node.children, node.name));\r\n }\r\n });\r\n return result;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport Logger from 'infrastructure/logger';\r\n\r\nexport interface DashboardSettings {\r\n maxConcurrentWidgetLoads: number;\r\n enableWidgetLoadTimingLogs: boolean;\r\n enableTemplateManagement: boolean;\r\n}\r\n\r\nconst defaultSettings: DashboardSettings = {\r\n maxConcurrentWidgetLoads: 6,\r\n enableWidgetLoadTimingLogs: false,\r\n enableTemplateManagement: false,\r\n};\r\n\r\nconst CACHE_TTL_MS = 5 * 60 * 1000;\r\n\r\n@autoinject\r\nexport default class DashboardSettingsService {\r\n private cachedSettingsPromise: Promise | null = null;\r\n private cachedAt = 0;\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n private logger: Logger,\r\n ) {\r\n this.logger.name = 'dashboard-settings-service';\r\n }\r\n\r\n // Called on every dashboard page load plus once per nav item whenever the settings nav group\r\n // renders (see NavigationAuthorizer.hasAccess), so this is cached for a few minutes rather than\r\n // hitting the server every time. Caching the in-flight promise (not just the resolved value)\r\n // also dedupes concurrent callers into a single request.\r\n getSettings(): Promise {\r\n if (!this.cachedSettingsPromise || Date.now() - this.cachedAt >= CACHE_TTL_MS) {\r\n this.cachedAt = Date.now();\r\n this.cachedSettingsPromise = this.fetchSettings();\r\n }\r\n return this.cachedSettingsPromise;\r\n }\r\n\r\n private async fetchSettings(): Promise {\r\n try {\r\n const settings = (await this.httpClient.get(\r\n 'dashboard/settings',\r\n )) as unknown as DashboardSettings;\r\n\r\n return {\r\n ...settings,\r\n maxConcurrentWidgetLoads: Math.max(\r\n 1,\r\n settings.maxConcurrentWidgetLoads || defaultSettings.maxConcurrentWidgetLoads,\r\n ),\r\n };\r\n } catch (error) {\r\n this.logger.warn('Failed to load dashboard settings; using defaults.', error);\r\n this.cachedSettingsPromise = null; // don't let a failure stick around for the full TTL\r\n return { ...defaultSettings };\r\n }\r\n }\r\n}\r\n","export default function debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n};\r\n","import SelectorOption from 'infrastructure/selector-option';\r\n\r\nexport default function getPointZoneOptions(): SelectorOption[] {\r\n return [\r\n { title: '1', value: 1 },\r\n { title: '2', value: 2 },\r\n { title: '3', value: 3 },\r\n { title: '4', value: 4 },\r\n ];\r\n}\r\n","import { CustomError } from 'infrastructure/custom-error';\r\n\r\nexport default abstract class ValidationErrorFormatter {\r\n private static formatValidationErrors(apiErrorData: any): string {\r\n const validationErrorMessage: string[] = [];\r\n for (let i = 0; i < apiErrorData.length; i++) {\r\n validationErrorMessage.push(apiErrorData[i].errorMessage);\r\n }\r\n\r\n return validationErrorMessage.join(', ');\r\n }\r\n\r\n public static format(defaultMessage: string, error: any): string {\r\n let { apiErrorCode, apiErrorData, errorCode, message } = error;\r\n const userErrorCode = errorCode || apiErrorData?.apiErrorCode || apiErrorCode;\r\n let userErrorMessage =\r\n (error instanceof CustomError && message) || apiErrorData?.message || defaultMessage;\r\n\r\n if (userErrorCode === 400) {\r\n userErrorMessage = this.formatValidationErrors(apiErrorData);\r\n }\r\n\r\n return userErrorMessage;\r\n }\r\n}\r\n","export class CustomError extends Error {\r\n errorCode: number;\r\n constructor(message: string, errorCode: number) {\r\n super(message);\r\n Object.setPrototypeOf(this, CustomError.prototype);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, CustomError);\r\n }\r\n this.errorCode = errorCode;\r\n }\r\n}\r\n\r\n//TODO: Define CustomError Codes\r\n// 1 : Exception\r\n// 4 : Client side validation\r\n// ? : ?\r\n","import {\r\n AgPromise,\r\n ColDef,\r\n ColGroupDef,\r\n GridOptions,\r\n ICellRendererParams,\r\n RowNode,\r\n ValueFormatterParams,\r\n} from 'ag-grid-community';\r\nimport { ValueGetterParams } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport { agFormatDateToLocale } from 'infrastructure/ag-grid/ag-value-formatters';\r\nimport { AureliaCellRendererCompBase } from 'infrastructure/ag-grid/aurelia-cell-renderer-comp-base';\r\nimport CompareUtility from '../../../infrastructure/compare-utility';\r\nimport { PointTestResult, PointTestResultCapPlanStatus } from './point-test-result';\r\n\r\nconst sampleLinkTemplate =\r\n '${data.sampleExternalId}';\r\nclass AgSampleIdCellRenderer extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(sampleLinkTemplate);\r\n }\r\n\r\n init(params: ICellRendererParams): void | AgPromise {\r\n const { data, node }: { data: PointTestResult; node: RowNode } = params;\r\n if (data.testId > 0 && data.passed === false) {\r\n node.setRowSelectable(true);\r\n node.selectable = true;\r\n } else {\r\n node.setRowSelectable(false);\r\n node.selectable = false;\r\n }\r\n\r\n super.init(params);\r\n }\r\n}\r\n\r\nconst formatTestResult = (params: ValueGetterParams): string => {\r\n const { confirmation, displayValue } = params.data;\r\n return confirmation?.length ? confirmation : displayValue;\r\n};\r\n\r\nconst formatOutcome = (params: ValueFormatterParams): string => {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const { passed, hasSpecification } = params.data;\r\n if (passed) return 'Pass';\r\n\r\n if (passed === null) {\r\n return hasSpecification ? 'Incomplete' : 'Spec Required';\r\n }\r\n\r\n return 'Fail';\r\n};\r\n\r\nconst capPlanStatusLabels: Record = {\r\n NotTriggered: 'Not triggered',\r\n PartiallyTriggered: 'Partially triggered',\r\n Triggered: 'Triggered',\r\n NoMatchingCapPlan: 'No matching CAP plan',\r\n};\r\n\r\nconst formatCapPlanStatus = (params: ValueFormatterParams): string =>\r\n capPlanStatusLabels[params.value as PointTestResultCapPlanStatus] ?? '';\r\n\r\nconst columnDefs: (ColDef | ColGroupDef)[] = [\r\n {\r\n headerName: 'Sample ID',\r\n field: 'sampleExternalId',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n headerCheckboxSelection: true,\r\n headerCheckboxSelectionFilteredOnly: true,\r\n checkboxSelection: true,\r\n cellRenderer: AgSampleIdCellRenderer,\r\n },\r\n {\r\n headerName: 'Collection Date',\r\n field: 'sampleCollectionDate',\r\n comparator: CompareUtility.dateCompare,\r\n sort: 'desc',\r\n valueFormatter: agFormatDateToLocale,\r\n },\r\n {\r\n headerName: 'Test Method',\r\n field: 'testMethodDisplayName',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n },\r\n {\r\n headerName: 'Pass/Fail',\r\n field: 'passed',\r\n valueFormatter: formatOutcome,\r\n },\r\n {\r\n headerName: 'Result',\r\n field: 'displayValue',\r\n valueGetter: formatTestResult,\r\n minWidth: 75,\r\n },\r\n {\r\n headerName: 'CAP Plan',\r\n field: 'capPlanStatus',\r\n valueFormatter: formatCapPlanStatus,\r\n },\r\n {\r\n headerName: 'Plan Name',\r\n field: 'planName',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n },\r\n {\r\n headerName: 'Collection Type',\r\n field: 'collectionType',\r\n },\r\n];\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: columnDefs,\r\n suppressContextMenu: true,\r\n suppressColumnVirtualisation: true,\r\n onFirstDataRendered(event) {\r\n event.columnApi.autoSizeAllColumns();\r\n },\r\n};\r\n\r\nconst pointTestResultGrid = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .withAutoHeight()\r\n .addStatefulness('map-point-test-result-grid')\r\n .build();\r\n\r\nexport { pointTestResultGrid };\r\n","var errorMessages = new Map([\r\n [300, 'Your password has expired.'], // PasswordExpired\r\n [301, 'Your account is currently locked. Please contact your system administrator.'], // UserLockedOut\r\n [302, 'You have exceeded the maximum number of allowed login attempts. Your account has been locked. Please contact your system administrator.'], // ExceededAllowedFailedLoginAttempts\r\n [303, 'Due to your recent inactivity, your account will need to be verified before you can log in again. An email has been sent to you containing instructions as to how to proceed.'], // ExceededMaxDaysAllowedBetweenLogins\r\n [304, 'Due to your recent inactivity, you need to verify your account by using the login URL sent to you via email. Another email has been sent to you with a new login URL, please disregard any previous login URLs sent via email.'], // IdentityVerificationTokenMissing\r\n [305, 'The account verification token specified in the URL does not match the one that was generated for you. Another email has been sent to you with a new login URL, please disregard any previous login URLs sent via email.'], // IdentityVerificationTokenDoesNotMatch\r\n [306, 'The account verification token generated for you has expired. Another email has been sent to you with a new login URL, please disregard any previous login URLs sent via email.'], // IdentityVerificationTokenExpired\r\n [308, 'You must specify both username and password.'], // NoUsernameAndOrPasswordProvided\r\n [310, 'The specified account is not active. Please contact your system administrator.'], // UserNotActive\r\n [311, 'The specified account does not have access to any part of the application. Please contact your system administrator.'], // NoOrganizationApplicationModules\r\n [312, 'The specified account does not have access to any organizations. Please contact your system administrator.'], // NoOverseerOrganizations\r\n]);\r\n\r\nexport default class LoginErrorMessageProvider {\r\n static getErrorMessage(httpResponseMessageOrApiError) {\r\n var apiErrorCode = httpResponseMessageOrApiError.apiErrorCode;\r\n if (apiErrorCode && errorMessages.has(apiErrorCode))\r\n return errorMessages.get(apiErrorCode);\r\n \r\n if (httpResponseMessageOrApiError.statusCode === 401)\r\n return 'Invalid credentials.';\r\n\r\n return 'An unexpected error occurred. Please try again.';\r\n }\r\n};\r\n","import { autoinject, inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules, ValidationController } from 'aurelia-validation';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport AmsCoaExportService from './ams-coa-export-service';\r\nimport AmsCoaExport from './ams-coa-export';\r\nimport moment from 'moment';\r\n\r\n@autoinject\r\nexport class CustomerTestImportDetail {\r\n minCollectionDate: Date;\r\n maxCollectionDate: Date;\r\n validationController: ValidationController;\r\n formChanged: boolean;\r\n\r\n constructor(\r\n private router: Router,\r\n validationControllerFactory: ValidationControllerFactory,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private amsCoaExportService: AmsCoaExportService) {\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.logger.name = 'customer-test-import-detail';\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n }\r\n\r\n activate() {\r\n ValidationRules\r\n .ensure('minCollectionDate').required()\r\n .ensure('maxCollectionDate').required().satisfies(_ => this.minCollectionDate?.getTime() < this.maxCollectionDate?.getTime())\r\n .on(this);\r\n\r\n this.validationController.addObject(this);\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n async createAmsCoaExport() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.amsCoaExportService.createAmsCoaExport({\r\n minCollectionDate: moment(this.minCollectionDate).startOf('day').format('YYYY-MM-DD') + 'T00:00:00Z',\r\n maxCollectionDate: moment(this.maxCollectionDate).startOf('day').add(1, 'days').format('YYYY-MM-DD') + 'T00:00:00Z'\r\n });\r\n\r\n this.formChanged = false;\r\n await this.dialogPresenter.showAlert('AMS CoA Export Created', 'The requested export has been created. Once the export has been fully processed, you will receive an email with access to the exported file.');\r\n this.router.navigateToRoute('dashboard');\r\n } catch (error) {\r\n this.logger.error('Error uploading test data file.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Test Data File',\r\n 'There was an error uploading the test data file. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { DialogService } from 'aurelia-dialog';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { inject, PLATFORM } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { activationStrategy } from 'aurelia-router';\r\nimport 'foundation-datepicker-js';\r\nimport 'foundation-sites';\r\nimport $ from 'jquery';\r\nimport 'select2';\r\nimport DashboardSettingsService from './dashboard-widgets/dashboard-settings-service';\r\nimport FormChangeCheckStep from './infrastructure/form-change-check-step';\r\nimport OrganizationService from './organizations/organization-service';\r\nimport AuthorizationCheckStep from './security/navigation/authorization-check-step';\r\nimport NavigationAuthorizer from './security/navigation/navigation-authorizer';\r\nimport SecurityService from './security/security-service';\r\n\r\n@inject(\r\n HttpClient,\r\n EventAggregator,\r\n DialogService,\r\n NavigationAuthorizer,\r\n SecurityService,\r\n OrganizationService,\r\n DashboardSettingsService,\r\n)\r\nexport class App {\r\n constructor(\r\n httpClient,\r\n eventAggregator,\r\n dialogService,\r\n navigationAuthorizer,\r\n securityService,\r\n organizationService,\r\n dashboardSettingsService,\r\n ) {\r\n this.httpClient = httpClient;\r\n this.httpClient.configure((config) => config.withInterceptor(this));\r\n\r\n this.eventAggregator = eventAggregator;\r\n this.dialogService = dialogService;\r\n this.navigationAuthorizer = navigationAuthorizer;\r\n this.unauthenticatedStuffQueue = [];\r\n this.attachedPromise = new Promise((resolve) => {\r\n this.attachedPromiseResolve = resolve;\r\n });\r\n\r\n this.securityService = securityService;\r\n this.organizationService = organizationService;\r\n this.dashboardSettingsService = dashboardSettingsService;\r\n\r\n this.handleLogin = this.handleLogin.bind(this);\r\n this.handleLogout = this.handleLogout.bind(this);\r\n this.handleRouterNavigationSuccess = this.handleRouterNavigationSuccess.bind(this);\r\n this.updateIsCurrnetUserInternal();\r\n this.currentYear = new Date().getFullYear();\r\n }\r\n\r\n updateIsCurrnetUserInternal() {\r\n this.isCurrentUserInternal = this.securityService.isCurrentUserInternal();\r\n }\r\n\r\n handleLogin() {\r\n this.updateIsCurrnetUserInternal();\r\n }\r\n\r\n handleLogout() {\r\n this.updateIsCurrnetUserInternal();\r\n }\r\n\r\n handleRouterNavigationSuccess() {\r\n this.locationTestingRouteActive =\r\n this.router &&\r\n this.router.currentInstruction &&\r\n this.router.currentInstruction.fragment.toLowerCase().startsWith('/location-testing');\r\n }\r\n\r\n configureRouter(config, router) {\r\n this.router = router;\r\n\r\n config.addAuthorizeStep(AuthorizationCheckStep);\r\n config.addPreActivateStep(FormChangeCheckStep);\r\n\r\n config.mapUnknownRoutes((instruction) => {\r\n return { route: '', redirect: 'dashboard' };\r\n });\r\n\r\n config.map([\r\n // Dashboard\r\n {\r\n route: ['', 'dashboard'],\r\n name: 'dashboard',\r\n moduleId: PLATFORM.moduleName('dashboard/dashboard'),\r\n title: 'Dashboard',\r\n nav: true,\r\n icon: 'television',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n\r\n // Dashboard Widgets\r\n {\r\n route: ['dashboard-widgets'],\r\n name: 'dashboard-widgets',\r\n // Reached only via the 'dashboard' route's redirect (or a direct URL) once an org's\r\n // enableWidgetDashboard flag is on - no separate nav entry.\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/dashboard-widgets'),\r\n title: 'Dashboard Widgets',\r\n nav: false,\r\n icon: 'television',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n authorize: () =>\r\n this.organizationService.checkConfigurationFlag('enableWidgetDashboard'),\r\n },\r\n {\r\n // Same moduleId as dashboard-widgets - only this route name unlocks reading\r\n // DashboardPreviewService's pending (unsaved) layout, see dashboard-widgets.ts.\r\n // Deliberately not gated by enableWidgetDashboard: admins need to preview a\r\n // template before that flag is ever turned on for an org.\r\n route: ['dashboard-widgets/preview'],\r\n name: 'dashboard-widgets-preview',\r\n moduleId: PLATFORM.moduleName('dashboard-widgets/dashboard-widgets'),\r\n title: 'Dashboard Preview',\r\n nav: false,\r\n icon: 'television',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n\r\n // Requests\r\n {\r\n route: 'requests/:id',\r\n name: 'request-detail',\r\n moduleId: PLATFORM.moduleName('requests/request-detail'),\r\n title: 'Request Detail',\r\n href: '/requests/create',\r\n requiredPermission: 'EditRequests',\r\n },\r\n {\r\n route: 'requests',\r\n name: 'request-list',\r\n moduleId: PLATFORM.moduleName('requests/request-list'),\r\n title: 'Requests',\r\n nav: true,\r\n navTitle: 'Requests',\r\n href: '/requests',\r\n icon: 'flask',\r\n requiredPermission: 'EditRequests',\r\n authorize: () =>\r\n this.organizationService.checkConfigurationFlag(\r\n 'allowStandardRequestSubmission',\r\n ),\r\n },\r\n\r\n // Legal\r\n {\r\n route: 'privacy',\r\n name: 'privacy',\r\n moduleId: PLATFORM.moduleName('legal/privacy'),\r\n title: 'Privacy Policy',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n },\r\n {\r\n route: 'terms',\r\n name: 'terms',\r\n moduleId: PLATFORM.moduleName('legal/terms'),\r\n title: 'Terms of Use',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n },\r\n\r\n // Location Testing\r\n {\r\n route: 'location-testing/maps',\r\n name: 'map-list',\r\n moduleId: PLATFORM.moduleName('location-testing/maps/map-list'),\r\n title: 'Maps',\r\n nav: true,\r\n icon: 'emma',\r\n requiredPermission: 'ViewMaps',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n {\r\n route: 'location-testing/maps/:id',\r\n name: 'map-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/maps/map-detail'),\r\n title: 'Map Detail',\r\n requiredPermission: 'ViewMaps',\r\n },\r\n {\r\n route: 'location-testing/maps/:id/dashboard',\r\n name: 'map-dashboard',\r\n moduleId: PLATFORM.moduleName('location-testing/maps/map-dashboard'),\r\n title: 'Map Dashboard',\r\n requiredPermission: 'ViewMaps',\r\n group: 'location-testing',\r\n icon: 'map-o',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n {\r\n route: 'location-testing/points',\r\n name: 'point-list',\r\n moduleId: PLATFORM.moduleName('location-testing/points/point-list'),\r\n title: 'Sample Points',\r\n requiredPermission: 'ViewPoints',\r\n group: 'location-testing',\r\n icon: 'map-pin',\r\n },\r\n {\r\n route: 'location-testing/points/:id',\r\n name: 'point-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/points/point-detail'),\r\n title: 'Sample Point Detail',\r\n requiredPermission: 'EditPoints',\r\n },\r\n {\r\n route: 'location-testing/plans',\r\n name: 'plan-list',\r\n moduleId: PLATFORM.moduleName('location-testing/plans/plan-list'),\r\n title: 'Plans',\r\n requiredPermission: 'ViewPlans',\r\n group: 'location-testing',\r\n icon: 'clipboard',\r\n },\r\n {\r\n route: 'location-testing/plans/:id',\r\n name: 'plan-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/plans/plan-detail'),\r\n title: 'Plan Detail',\r\n requiredPermission: 'EditPlans',\r\n },\r\n {\r\n route: 'location-testing/plans/:id/generate-tasks',\r\n name: 'plan-generate-tasks',\r\n moduleId: PLATFORM.moduleName('location-testing/plans/generate-tasks'),\r\n title: 'Generate Tasks',\r\n requiredPermission: 'EditPlans',\r\n },\r\n\r\n {\r\n route: 'location-testing/remediations',\r\n name: 'remediation-list',\r\n moduleId: PLATFORM.moduleName('location-testing/remediations/remediation-list'),\r\n title: 'Remediations',\r\n group: 'location-testing',\r\n icon: 'exclamation-triangle',\r\n requiredPermission: 'ViewAllRemediations,ViewMyRemediations',\r\n },\r\n {\r\n route: 'location-testing/remediations/:id',\r\n name: 'remediation-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/remediations/remediation-detail'),\r\n title: 'Remediation Detail',\r\n requiredPermission: 'EditRemediations',\r\n },\r\n {\r\n route: 'location-testing/tasks',\r\n name: 'task-list',\r\n moduleId: PLATFORM.moduleName('location-testing/tasks/task-list'),\r\n title: 'Tasks',\r\n requiredPermission: 'ViewAllTasks,ViewMyTasks',\r\n group: 'location-testing',\r\n icon: 'tasks',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n {\r\n route: 'location-testing/tasks/:id',\r\n name: 'task-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/tasks/task-detail'),\r\n title: 'Task Detail',\r\n requiredPermission: 'EditTasks',\r\n },\r\n {\r\n route: 'location-testing/tasks/create-vector-tasks',\r\n name: 'create-vector-tasks',\r\n moduleId: PLATFORM.moduleName('location-testing/tasks/create-vector-tasks'),\r\n title: 'Create Vector Tasks',\r\n requiredPermission: 'EditTasks',\r\n },\r\n {\r\n route: 'location-testing/cap-plans',\r\n name: 'cap-plan-list',\r\n moduleId: PLATFORM.moduleName('location-testing/cap-plans/cap-plan-list'),\r\n title: 'CAP Plans',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewCapPlans',\r\n },\r\n {\r\n route: 'tenant/:tenantId/location-testing/cap-plans/:id?',\r\n name: 'cap-plan-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/cap-plans/cap-plan-detail'),\r\n title: 'CAP Plan Detail',\r\n requiredPermission: 'EditCapPlans',\r\n },\r\n {\r\n route: 'location-testing/customer-test-imports',\r\n name: 'customer-test-import-list',\r\n moduleId: PLATFORM.moduleName(\r\n 'location-testing/customer-test-imports/customer-test-import-list',\r\n ),\r\n title: 'Test Data Imports',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewCustomerTestImports',\r\n },\r\n {\r\n route: 'location-testing/customer-test-imports/create',\r\n name: 'customer-test-import-detail',\r\n moduleId: PLATFORM.moduleName(\r\n 'location-testing/customer-test-imports/customer-test-import-detail',\r\n ),\r\n title: 'Import Test Data',\r\n requiredPermission: 'UploadCustomerTestData',\r\n },\r\n {\r\n route: 'location-testing/requests/create',\r\n name: 'location-testing-request-detail',\r\n moduleId: PLATFORM.moduleName('location-testing/requests/request-detail'),\r\n title: 'Create Request',\r\n requiredPermission: 'EditRequests',\r\n },\r\n\r\n // Status\r\n {\r\n route: 'status',\r\n name: 'status',\r\n moduleId: PLATFORM.moduleName('status/status'),\r\n title: 'Status',\r\n nav: true,\r\n icon: 'check-circle',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewResults',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n\r\n // Reports\r\n {\r\n route: 'reporting/reports',\r\n name: 'report-list',\r\n moduleId: PLATFORM.moduleName('reporting/reports/report-list'),\r\n title: 'Built-In Reports',\r\n nav: true,\r\n icon: 'bar-chart',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewReports',\r\n },\r\n {\r\n route: 'adhoc-report-subscription-list',\r\n name: 'adhoc-report-list',\r\n moduleId: PLATFORM.moduleName(\r\n 'reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-list',\r\n ),\r\n title: 'Ad-Hoc Reports',\r\n nav: true,\r\n icon: 'pie-chart',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewReports',\r\n },\r\n {\r\n route: 'reporting/reports/:id',\r\n name: 'report-detail',\r\n moduleId: PLATFORM.moduleName('reporting/reports/report-detail'),\r\n title: 'Report Detail',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewReports',\r\n },\r\n {\r\n route: 'reporting/adhoc-reports/:id',\r\n name: 'adhoc-report-detail',\r\n moduleId: PLATFORM.moduleName('reporting/adhoc-reports/adhoc-report-detail'),\r\n title: 'Ad-hoc Report Detail',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'RunAdhocReports',\r\n },\r\n {\r\n route: 'reporting/adhoc-reports/adhoc-report-subscriptions',\r\n name: 'adhoc-report-subscription-list',\r\n moduleId: PLATFORM.moduleName(\r\n 'reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-list',\r\n ),\r\n title: 'Ad-hoc Report Subscriptions',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'RunAdhocReports',\r\n },\r\n {\r\n route: 'reporting/adhoc-reports/adhoc-report-subscriptions/:id',\r\n name: 'edit-adhoc-report-subscription',\r\n moduleId: PLATFORM.moduleName(\r\n 'reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-edit',\r\n ),\r\n title: 'Edit Report Subscription',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'RunAdhocReports',\r\n },\r\n {\r\n route: 'reporting/adhoc-reports/adhoc-report-subscription',\r\n name: 'create-adhoc-report-subscription',\r\n moduleId: PLATFORM.moduleName(\r\n 'reporting/adhoc-reports/adhoc-report-subscriptions/adhoc-report-subscription-create',\r\n ),\r\n title: 'Create Report Subscription',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'RunAdhocReports',\r\n },\r\n\r\n // Settings\r\n {\r\n route: 'settings',\r\n name: 'settings',\r\n moduleId: PLATFORM.moduleName('organizations/settings'),\r\n title: 'Settings',\r\n nav: true,\r\n group: 'settings',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewOrganizationSettings',\r\n },\r\n {\r\n route: 'roles',\r\n name: 'role-list',\r\n moduleId: PLATFORM.moduleName('roles/role-list'),\r\n title: 'Manage Roles',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewRoles',\r\n },\r\n {\r\n route: 'roles/:id',\r\n name: 'role-detail',\r\n moduleId: PLATFORM.moduleName('roles/role-detail'),\r\n title: 'Role Detail',\r\n requiredPermission: 'EditRoles',\r\n },\r\n {\r\n route: 'location-testing/plan-management',\r\n name: 'plan-management',\r\n moduleId: PLATFORM.moduleName(\r\n 'location-testing/plan-management/plan-management-list',\r\n ),\r\n title: 'Plan Management',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewPlanManagement',\r\n },\r\n {\r\n route: 'roles/:id/users',\r\n name: 'role-move-users',\r\n moduleId: PLATFORM.moduleName('roles/role-move-users'),\r\n title: 'Reassign User Roles',\r\n requiredPermission: 'AssignRoles',\r\n },\r\n\r\n {\r\n route: 'organizations',\r\n name: 'organization-list',\r\n moduleId: PLATFORM.moduleName('organizations/organization-list'),\r\n title: 'Manage Organizations',\r\n nav: true,\r\n group: 'settings',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'organizations/:id',\r\n name: 'organization-detail',\r\n moduleId: PLATFORM.moduleName('organizations/organization-detail'),\r\n title: 'Organization Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n\r\n {\r\n route: 'test-methods',\r\n name: 'test-method-list',\r\n moduleId: PLATFORM.moduleName('test-methods/test-method-list'),\r\n title: 'Latest Price Quotes',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewPriceQuotes',\r\n },\r\n {\r\n route: 'location-testing/test-method-management',\r\n name: 'test-method-management',\r\n moduleId: PLATFORM.moduleName(\r\n 'location-testing/test-method-management/test-method-management-list',\r\n ),\r\n title: 'Test Method Management',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewTestMethodManagement',\r\n },\r\n\r\n {\r\n route: 'specifications',\r\n name: 'specification-list',\r\n moduleId: PLATFORM.moduleName('specifications/specification-list'),\r\n title: 'Manage Specifications',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewSpecifications',\r\n },\r\n {\r\n route: 'specifications/:id',\r\n name: 'specification-detail',\r\n moduleId: PLATFORM.moduleName('specifications/specification-detail'),\r\n title: 'Specification Detail',\r\n requiredPermission: 'EditSpecifications',\r\n },\r\n {\r\n route: 'remediation-root-causes',\r\n name: 'remediation-root-cause-list',\r\n moduleId: PLATFORM.moduleName(\r\n 'remediation-root-causes/remediation-root-cause-list',\r\n ),\r\n title: 'Manage Remediation Root Causes',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewAllRemediations',\r\n },\r\n\r\n {\r\n route: 'password-requirements',\r\n name: 'password-requirements',\r\n moduleId: PLATFORM.moduleName('password-requirements/password-requirements'),\r\n title: 'Password Requirements',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewPasswordRequirements',\r\n },\r\n {\r\n route: 'users',\r\n name: 'user-list',\r\n moduleId: PLATFORM.moduleName('users/user-list'),\r\n title: 'Manage Users',\r\n allowedUserTypes: 'both',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewUsers',\r\n },\r\n {\r\n route: 'users/:id',\r\n name: 'user-detail',\r\n moduleId: PLATFORM.moduleName('users/user-detail'),\r\n title: 'User Detail',\r\n allowedUserTypes: 'both',\r\n requiredPermission: 'ViewUsers',\r\n },\r\n {\r\n route: 'login-audit',\r\n name: 'login-audit',\r\n moduleId: PLATFORM.moduleName('login-audit/login-audit'),\r\n title: 'User Login Audit',\r\n nav: true,\r\n group: 'settings',\r\n requiredPermission: 'ViewUserLogins',\r\n },\r\n {\r\n route: 'login-audit/user/:id',\r\n name: 'login-audit/user',\r\n moduleId: PLATFORM.moduleName('login-audit/login-audit-detail'),\r\n title: 'Login Audit User Detail',\r\n requiredPermission: 'ViewUserLogins',\r\n },\r\n {\r\n route: 'labs',\r\n name: 'lab-list',\r\n moduleId: PLATFORM.moduleName('labs/lab-list'),\r\n title: 'Labs',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n nav: true,\r\n group: 'settings',\r\n },\r\n {\r\n route: 'labs/:id',\r\n name: 'lab-detail',\r\n moduleId: PLATFORM.moduleName('labs/lab-detail'),\r\n title: 'Lab Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'global-messaging',\r\n name: 'global-message-list',\r\n moduleId: PLATFORM.moduleName('global-messaging/global-message-list'),\r\n title: 'Global Messages',\r\n allowedUserTypes: 'globalMessenger',\r\n nav: true,\r\n group: 'settings',\r\n },\r\n {\r\n route: 'global-messaging/:id',\r\n name: 'global-message-detail',\r\n moduleId: PLATFORM.moduleName('global-messaging/global-message-detail'),\r\n title: 'Global Message Detail',\r\n allowedUserTypes: 'globalMessenger',\r\n },\r\n {\r\n route: 'news-items',\r\n name: 'news-item-list',\r\n moduleId: PLATFORM.moduleName('news-items/news-item-list'),\r\n title: 'News Items',\r\n allowedUserTypes: 'internal',\r\n nav: true,\r\n group: 'settings',\r\n },\r\n {\r\n route: 'news-items/:id',\r\n name: 'news-item-detail',\r\n moduleId: PLATFORM.moduleName('news-items/news-item-detail'),\r\n title: 'News Item Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n\r\n {\r\n route: 'label-templates',\r\n name: 'label-template-list',\r\n moduleId: PLATFORM.moduleName('label-templates/label-template-list'),\r\n title: 'Label Templates',\r\n requiredPermission: 'ViewLabelTemplates',\r\n nav: true,\r\n group: 'settings',\r\n },\r\n {\r\n route: 'label-templates/:id',\r\n name: 'label-template-detail',\r\n moduleId: PLATFORM.moduleName('label-templates/label-template-detail'),\r\n title: 'Label Template Detail',\r\n requiredPermission: 'EditLabelTemplates',\r\n },\r\n\r\n {\r\n route: 'export-task-collection-templates',\r\n name: 'export-task-collection-template-list',\r\n moduleId: PLATFORM.moduleName(\r\n 'export-task-collection-templates/export-task-collection-template-list',\r\n ),\r\n title: 'Export Task Collection Templates',\r\n requiredPermission: 'ViewExportTaskCollectionTemplates',\r\n nav: true,\r\n group: 'settings',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n {\r\n route: 'export-task-collection-templates/:id',\r\n name: 'export-task-collection-template-detail',\r\n moduleId: PLATFORM.moduleName(\r\n 'export-task-collection-templates/export-task-collection-template-detail',\r\n ),\r\n title: 'Export Task Collection Template Detail',\r\n requiredPermission: 'EditExportTaskCollectionTemplates',\r\n },\r\n\r\n {\r\n route: 'segmentation-templates',\r\n name: 'segmentation-template-list',\r\n moduleId: PLATFORM.moduleName('segmentation-templates/segmentation-template-list'),\r\n title: 'Segmentation Templates',\r\n requiredPermission: 'ViewSegmentationTemplates',\r\n nav: true,\r\n group: 'settings',\r\n authorize: () =>\r\n this.organizationService.checkConfigurationFlag('hasSegmentAccess'),\r\n },\r\n {\r\n route: 'segmentation-templates/:id',\r\n name: 'segmentation-template-detail',\r\n moduleId: PLATFORM.moduleName(\r\n 'segmentation-templates/segmentation-template-detail',\r\n ),\r\n title: 'Segmentation Template Detail',\r\n requiredPermission: 'EditSegmentationTemplates',\r\n },\r\n\r\n // Dashboard Template Defaults\r\n {\r\n route: 'dashboard-template-defaults',\r\n name: 'dashboard-template-default-list',\r\n moduleId: PLATFORM.moduleName(\r\n 'dashboard-template-defaults/dashboard-template-default-list',\r\n ),\r\n title: 'Manage Dashboard Template Defaults',\r\n nav: true,\r\n group: 'settings',\r\n allowedUserTypes: 'internal',\r\n // Rollout gate, independent of allowedUserTypes - see\r\n // DashboardTemplateManagementFeatureGateAttribute for why this can't just be a\r\n // permission (HasAllPermissions roles bypass those entirely).\r\n authorize: async () =>\r\n (await this.dashboardSettingsService.getSettings()).enableTemplateManagement,\r\n },\r\n {\r\n route: 'dashboard-template-defaults/:id',\r\n name: 'dashboard-template-default-detail',\r\n moduleId: PLATFORM.moduleName(\r\n 'dashboard-template-defaults/dashboard-template-default-detail',\r\n ),\r\n title: 'Dashboard Template Default Detail',\r\n allowedUserTypes: 'internal',\r\n authorize: async () =>\r\n (await this.dashboardSettingsService.getSettings()).enableTemplateManagement,\r\n },\r\n\r\n // Dashboard Templates (org self-service)\r\n {\r\n route: 'dashboard-templates',\r\n name: 'dashboard-template-list',\r\n moduleId: PLATFORM.moduleName('dashboard-templates/dashboard-template-list'),\r\n title: 'Dashboard Templates',\r\n requiredPermission: 'ViewDashboardTemplates',\r\n nav: true,\r\n group: 'settings',\r\n // Per-org rollout gate - see OrganizationDashboardTemplateManagementFeatureGate for\r\n // why this can't just be the permission (HasAllPermissions roles bypass those).\r\n authorize: () =>\r\n this.organizationService.checkConfigurationFlag(\r\n 'enableDashboardTemplateManagement',\r\n ),\r\n },\r\n {\r\n route: 'dashboard-templates/:id',\r\n name: 'dashboard-template-detail',\r\n moduleId: PLATFORM.moduleName('dashboard-templates/dashboard-template-detail'),\r\n title: 'Dashboard Template Detail',\r\n requiredPermission: 'ViewDashboardTemplates',\r\n authorize: () =>\r\n this.organizationService.checkConfigurationFlag(\r\n 'enableDashboardTemplateManagement',\r\n ),\r\n },\r\n\r\n // Help Pages\r\n {\r\n route: 'help/glossary',\r\n name: 'glossary',\r\n moduleId: PLATFORM.moduleName('help/glossary/glossary'),\r\n title: 'Glossary',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'external',\r\n ignorePermissions: true,\r\n icon: 'book',\r\n },\r\n {\r\n route: 'help/glossary-terms',\r\n name: 'glossary-term-list',\r\n moduleId: PLATFORM.moduleName('help/glossary/glossary-term-list'),\r\n title: 'Manage Glossary Terms',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'internal',\r\n icon: 'book',\r\n },\r\n {\r\n route: 'help/glossary-terms/:id',\r\n name: 'glossary-term-detail',\r\n moduleId: PLATFORM.moduleName('help/glossary/glossary-term-detail'),\r\n title: 'Glossary Term Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'help/user-guides',\r\n name: 'user-guide-list',\r\n moduleId: PLATFORM.moduleName('help/user-guides/user-guide-list'),\r\n title: 'Guides',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n icon: 'file-text-o',\r\n },\r\n {\r\n route: 'help/user-guides/:id',\r\n name: 'user-guide-detail',\r\n moduleId: PLATFORM.moduleName('help/user-guides/user-guide-detail'),\r\n title: 'Guide',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n },\r\n {\r\n route: 'help/help-pages/:code',\r\n name: 'help-page-detail',\r\n moduleId: PLATFORM.moduleName('help/user-guides/user-guide-detail'),\r\n title: 'Help Page',\r\n allowedUserTypes: 'both',\r\n ignorePermissions: true,\r\n },\r\n // {\r\n // route: 'help/videos',\r\n // name: 'video-list',\r\n // moduleId: PLATFORM.moduleName('help/videos/video-list'),\r\n // title: 'Videos',\r\n // nav: true,\r\n // group: 'help',\r\n // allowedUserTypes: 'both',\r\n // ignorePermissions: true,\r\n // icon: 'play-circle',\r\n // },\r\n // {\r\n // route: 'help/videos/:id',\r\n // name: 'video-detail',\r\n // moduleId: PLATFORM.moduleName('help/videos/video-detail'),\r\n // title: 'Video',\r\n // allowedUserTypes: 'both',\r\n // ignorePermissions: true,\r\n // },\r\n {\r\n route: 'help/support',\r\n name: 'support',\r\n moduleId: PLATFORM.moduleName('help/support/support'),\r\n title: 'Support',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'external',\r\n ignorePermissions: true,\r\n icon: 'envelope-o',\r\n },\r\n {\r\n route: 'help/support-topics',\r\n name: 'support-topic-list',\r\n moduleId: PLATFORM.moduleName('help/support/support-topic-list'),\r\n title: 'Manage Support Topics',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'internal',\r\n icon: 'envelope-o',\r\n },\r\n {\r\n route: 'help/support-topics/:id',\r\n name: 'support-topic-detail',\r\n moduleId: PLATFORM.moduleName('help/support/support-topic-detail'),\r\n title: 'Support Topic Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'help/faq-groups',\r\n name: 'faq-group-list',\r\n moduleId: PLATFORM.moduleName('help/faqs/faq-group-list'),\r\n title: 'Manage FAQ Groups',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'internal',\r\n icon: 'question-circle-o',\r\n },\r\n {\r\n route: 'help/faq-groups/:id',\r\n name: 'faq-group-detail',\r\n moduleId: PLATFORM.moduleName('help/faqs/faq-group-detail'),\r\n title: 'FAQ Group Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'help/faq-groups/:id/faqs',\r\n name: 'faq-list',\r\n moduleId: PLATFORM.moduleName('help/faqs/faq-list'),\r\n title: 'Manage FAQs',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'help/faqs/:id',\r\n name: 'faq-detail',\r\n moduleId: PLATFORM.moduleName('help/faqs/faq-detail'),\r\n title: 'FAQ Detail',\r\n allowedUserTypes: 'internal',\r\n },\r\n {\r\n route: 'help/faqs',\r\n name: 'faqs',\r\n moduleId: PLATFORM.moduleName('help/faqs/faqs'),\r\n title: 'FAQs',\r\n nav: true,\r\n group: 'help',\r\n allowedUserTypes: 'external',\r\n ignorePermissions: true,\r\n icon: 'question-circle-o',\r\n },\r\n\r\n // AMS CoA Exports\r\n {\r\n route: 'ams-coa-exports/create',\r\n name: 'ams-coa-export-create',\r\n moduleId: PLATFORM.moduleName('ams-coa-exports/create-ams-coa-export'),\r\n title: 'AMS CoA Export',\r\n nav: true,\r\n group: 'settings',\r\n allowedUserTypes: 'internal',\r\n icon: 'file-export',\r\n },\r\n\r\n // Test Results\r\n {\r\n route: 'test-results/test-results-list',\r\n name: 'test-results-list',\r\n moduleId: PLATFORM.moduleName('test-results/test-results-list'),\r\n title: 'Test Results',\r\n nav: true,\r\n icon: 'thermometer-half',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewResults',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n },\r\n\r\n // Partial Test Results\r\n {\r\n route: 'partial-test-results/partial-test-results-list',\r\n name: 'partial-test-results-list',\r\n moduleId: PLATFORM.moduleName('partial-test-results/partial-test-results-list'),\r\n title: 'Partial Test Results',\r\n nav: true,\r\n icon: 'list-alt',\r\n allowedUserTypes: 'external',\r\n requiredPermission: 'ViewPartialResults',\r\n activationStrategy: activationStrategy.invokeLifecycle,\r\n authorize: async () => {\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n const { partialTestResultLabs } =\r\n await this.organizationService.getConfigurationValues(\r\n ['partialTestResultLabs'],\r\n organizationId,\r\n );\r\n\r\n return partialTestResultLabs?.length > 0;\r\n },\r\n },\r\n ]);\r\n }\r\n\r\n attached() {\r\n this.userLoginSubscription = this.eventAggregator.subscribe('user.login', this.handleLogin);\r\n this.userLogoutSubscription = this.eventAggregator.subscribe(\r\n 'user.logout',\r\n this.handleLogout,\r\n );\r\n this.routerNavigationSuccessSubscription = this.eventAggregator.subscribe(\r\n 'router:navigation:success',\r\n this.handleRouterNavigationSuccess,\r\n );\r\n\r\n (async () => {\r\n this.baseNavItems = [];\r\n\r\n for (let item of this.router.navigation)\r\n if (!item.config.group && (await this.navigationAuthorizer.hasAccess(item.config)))\r\n this.baseNavItems.push(item);\r\n\r\n this.handleRouterNavigationSuccess();\r\n\r\n this.attachedPromiseResolve();\r\n\r\n // Activate off canvas menu on hover.\r\n $(() => {\r\n $('.off-canvas.position-left li').hover(\r\n () => $('.off-canvas.position-left').addClass('is-transition-push is-open'),\r\n () => $('.off-canvas.position-left').removeClass('is-transition-push is-open'),\r\n );\r\n });\r\n })();\r\n }\r\n\r\n detached() {\r\n this.userLoginSubscription && this.userLoginSubscription.dispose();\r\n this.userLogoutSubscription && this.userLogoutSubscription.dispose();\r\n this.routerNavigationSuccessSubscription &&\r\n this.routerNavigationSuccessSubscription.dispose();\r\n }\r\n\r\n responseError(message) {\r\n if (message.statusCode !== 401 || message.requestMessage.url === 'sessions/') throw message;\r\n\r\n if (this.securityService.isImpersonating()) {\r\n this.securityService.logout(true);\r\n throw message;\r\n }\r\n\r\n if (this.loginDialogVisible)\r\n return new Promise((resolve, reject) => {\r\n this.unauthenticatedStuffQueue.push({\r\n message,\r\n resolve,\r\n reject,\r\n });\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n this.unauthenticatedStuffQueue.push({ message, resolve, reject });\r\n this.loginDialogVisible = true;\r\n\r\n // The dialog must wait until the app's template has been attached.\r\n // If it doesn't wait then, when the app template loads, the dialog will be removed.\r\n this.attachedPromise.then(() => {\r\n this.dialogService\r\n .open({\r\n viewModel: PLATFORM.moduleName('security/login-dialog'),\r\n })\r\n .whenClosed((response) => {\r\n this.loginDialogVisible = false;\r\n\r\n if (response.wasCancelled) {\r\n while (this.unauthenticatedStuffQueue.length) {\r\n let item = this.unauthenticatedStuffQueue.shift();\r\n item.reject(item.message);\r\n }\r\n } else {\r\n while (this.unauthenticatedStuffQueue.length) {\r\n let item = this.unauthenticatedStuffQueue.shift();\r\n this.httpClient\r\n .send(item.message.requestMessage)\r\n .then((successMessage) => {\r\n item.resolve(successMessage);\r\n })\r\n .catch((errorMessage) => {\r\n item.reject(errorMessage);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".client-refresh{line-height:50px;padding:0 0.5rem;text-align:center !important}.client-refresh .circle{width:2rem;height:2rem;border-radius:50%;line-height:2rem;font-size:1em !important;cursor:pointer}.client-refresh .circle-active{color:#fff;box-shadow:0px 0px 1px 1px #0000001a;background-color:#c00}.client-refresh .circle-inactive{color:#ababad}.client-refresh .pulse{animation:pulse-animation 2s infinite}@keyframes pulse-animation{0%{box-shadow:0 0 0 0px rgba(0,0,0,0.2)}100%{box-shadow:0 0 0 20px rgba(0,0,0,0)}}.secondary-header{border-top:solid 1px #b1b1b1;background:#d5d5d6}.secondary-header .columns:first-of-type{margin-left:-10px}.secondary-header button.page-action,.secondary-header .button.page-action{vertical-align:top;margin-bottom:0 !important;padding:0 10px 0 40px;margin:0 !important;text-align:left;color:#2e2e2e;text-transform:none;font-size:0.6875rem;border:none;position:relative;height:3.125rem;line-height:normal !important}.secondary-header button.page-action:hover,.secondary-header button.page-action:active,.secondary-header button.page-action:focus,.secondary-header .button.page-action:hover,.secondary-header .button.page-action:active,.secondary-header .button.page-action:focus{background:#dedede}.secondary-header button.page-action:hover i.fa,.secondary-header button.page-action:active i.fa,.secondary-header button.page-action:focus i.fa,.secondary-header .button.page-action:hover i.fa,.secondary-header .button.page-action:active i.fa,.secondary-header .button.page-action:focus i.fa{color:#cc2350}.secondary-header button.page-action i.fa,.secondary-header .button.page-action i.fa{display:inline-block;color:#8f1838;font-size:1.25rem;position:absolute;top:0;left:10px;margin-right:3px;height:3.125rem;width:1.5rem;line-height:3.125rem;text-align:center;float:left}.top-bar .separator,.secondary-header .separator,.fixed-secondary-header .separator{width:1px;height:30px;background:#bbbdc5;display:inline-block;position:relative;top:11px;margin-left:6px}label.is-invalid-label i.fa{color:#db2121}label i.fa{font-size:9px;position:relative;top:-1px;color:#585858}.select2-results__option .small{font-size:13px;padding:3px 0 5px 0;color:#666}.select2-results__option--highlighted .small{color:#fff}data-grid input[type='text']{height:2.4375rem !important}data-grid .select2-container{margin:0}data-grid datepicker i.fa.fa-calendar{font-size:13px;top:13px !important}data-grid .ag-cell.row-actions{text-align:left}data-grid .row-actions-flex{display:flex;flex-wrap:wrap;row-gap:10px;column-gap:1em;opacity:0;transition:ease all 0.25s}data-grid .row-actions-flex:hover{opacity:1}data-grid .row-actions-flex>*{display:flex}data-grid error-tooltip span.has-tip.error-tip{right:3px;top:-4px}data-grid .blank-segment-cell{background-color:#666}.form .row .columns.icon datepicker .fa,.form .row .columns.icon .is-invalid-input+.fa{top:0 !important}.fixed-secondary-header info-tip{display:inline-block;vertical-align:top;position:relative}.fixed-secondary-header info-tip i.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;color:#585858;font-size:1.25rem;position:absolute;top:0;left:10px;margin-right:3px;height:3.125rem;width:1.5rem;line-height:3.125rem;text-align:center;float:left}input.keyhold-active{background:#fff;cursor:crosshair}select2.keyhold-active,datepicker.keyhold-active{cursor:crosshair}select2.keyhold-active input,select2.keyhold-active .select2-selection,datepicker.keyhold-active input,datepicker.keyhold-active .select2-selection{cursor:crosshair}date-range-filter datepicker i.fa.fa-calendar{display:none}input[type='checkbox'],input[type='radio']{-webkit-appearance:none;background-color:#fff;border:1px solid #cacece;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05);padding:0;height:1.25rem;width:1.25rem;display:inline-block;margin:0;position:relative}input[type='checkbox']active,input[type='checkbox']:checked:active,input[type='radio']active,input[type='radio']:checked:active{box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px 1px 3px rgba(0,0,0,0.1)}input[type='checkbox']:checked,input[type='radio']:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05),inset 15px 10px -12px rgba(255,255,255,0.1)}input[type='checkbox']:checked:after,input[type='radio']:checked:after{font-family:FontAwesome;content:'\\\\f00c';position:absolute;top:0;left:2px;color:#cc2350;text-align:center;font-size:0.875rem;height:0.875rem;width:0.875rem}input[type='radio']{border-radius:0.625rem}input[type='radio']:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05),inset 15px 10px -12px rgba(255,255,255,0.1)}input[type='radio']:checked:after{content:'';position:absolute;top:4px;left:4px;background:#cc2350;text-align:center;height:0.625rem;width:0.625rem;border-radius:0.3125rem}input[type='radio']+label{vertical-align:text-bottom;margin-bottom:6px}.top-bar .radio-options{margin-left:10px;position:relative;top:4px}.top-bar input[type='radio']+label{vertical-align:text-bottom;margin-bottom:3px}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import {\r\n CellEditingStoppedEvent,\r\n ColDef,\r\n ColGroupDef,\r\n GridOptions,\r\n ValueFormatterParams,\r\n ValueGetterParams,\r\n} from 'ag-grid-community';\r\nimport { renderAgGridCellForAurelia } from 'infrastructure/aurelia-cell-renderer';\r\n\r\nlet inputRow: any = {};\r\n\r\nconst addNewItem = (params: CellEditingStoppedEvent) => {\r\n if (params.rowPinned !== 'top') {\r\n return;\r\n }\r\n\r\n inputRow.id = 0;\r\n params.api.applyTransaction({ add: [inputRow], addIndex: 0 });\r\n inputRow = {};\r\n params.api.setPinnedTopRowData([inputRow]);\r\n};\r\n\r\nconst removeItem = (params: ValueGetterParams) => {\r\n const { node } = params;\r\n const rowToRemove = params.api.getRowNode(node.id);\r\n\r\n params.api.applyTransaction({\r\n remove: [rowToRemove?.data],\r\n });\r\n};\r\n\r\nconst columnDefs: (ColDef | ColGroupDef)[] = [\r\n {\r\n field: 'name',\r\n headerName: 'Name',\r\n rowDrag: true,\r\n editable: true,\r\n },\r\n {\r\n field: 'id',\r\n headerName: '',\r\n sortable: false,\r\n valueGetter: (params: ValueGetterParams) => {\r\n if (!params.data || params.node.rowPinned === 'top') {\r\n return;\r\n }\r\n\r\n const { data } = params;\r\n data.removeItem = () => removeItem(params);\r\n\r\n return {\r\n data,\r\n template: `\r\n
\r\n \r\n \r\n \r\n
\r\n `,\r\n };\r\n },\r\n cellRenderer: renderAgGridCellForAurelia,\r\n },\r\n];\r\n\r\nexport const remediationRootCauseGridOptions: GridOptions = {\r\n columnDefs,\r\n pinnedTopRowData: [inputRow],\r\n defaultColDef: {\r\n flex: 1,\r\n sortable: true,\r\n filter: false,\r\n valueFormatter: (params: ValueFormatterParams) => {\r\n const { node } = params;\r\n\r\n return node.rowPinned === 'top' ? 'Add Root Cause...' : undefined;\r\n },\r\n },\r\n rowDragManaged: true,\r\n animateRows: true,\r\n getRowStyle: ({ node }) =>\r\n node.rowPinned ? { 'font-weight': 'bold', 'font-style': 'italic' } : {},\r\n onCellEditingStopped: addNewItem,\r\n};\r\n","import { ColDef, ColGroupDef, GridOptions } from 'ag-grid-community';\r\nimport { AgMarkedCellRenderer } from 'infrastructure/ag-grid/ag-cell-renderers';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport { agFormatDateAndTimeToLocale } from 'infrastructure/ag-grid/ag-value-formatters';\r\nimport { AureliaCellRendererCompBase } from 'infrastructure/ag-grid/aurelia-cell-renderer-comp-base';\r\n\r\nconst template = `\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n`;\r\n\r\nclass AgGlobalMessageActionCellRenderer extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(template);\r\n }\r\n}\r\n\r\nconst colDefs: (ColDef | ColGroupDef)[] = [\r\n { headerName: 'Title', field: 'title' },\r\n {\r\n headerName: 'Published Date',\r\n field: 'publishDateTime',\r\n sort: 'desc',\r\n valueFormatter: agFormatDateAndTimeToLocale,\r\n },\r\n {\r\n headerName: 'Message',\r\n field: 'message',\r\n flex: 3,\r\n wrapText: true,\r\n autoHeight: true,\r\n cellRenderer: AgMarkedCellRenderer,\r\n },\r\n { field: 'isRead', hide: true },\r\n { field: 'isDeleted', hide: true },\r\n {\r\n colId: 'messageActionCol',\r\n flex: 0.75,\r\n cellRenderer: AgGlobalMessageActionCellRenderer,\r\n },\r\n];\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: colDefs,\r\n defaultColDef: {\r\n enableValue: false,\r\n },\r\n getRowNodeId: function (data) {\r\n return data.id;\r\n },\r\n};\r\n\r\nconst globalMessageNotificationGridOptions: GridOptions = AgStatefulGridBuilder.create(\r\n baseGridOptions,\r\n)\r\n .setDefaults()\r\n .build();\r\n\r\nexport { globalMessageNotificationGridOptions };\r\n","export abstract class OrganizationConfigurationSetting {\r\n static readonly ENABLE_BETA_FEATURES = 'enableBetaFeatures';\r\n}\r\n","export interface ExportTaskCollectionTemplateHeaderOptions {\r\n cellText: string[];\r\n}\r\n\r\nexport const emptyExportTaskCollectionTemplateHeaderOptions = (): ExportTaskCollectionTemplateHeaderOptions => ({\r\n cellText: [],\r\n});\r\n","import { computedFrom } from 'aurelia-framework';\r\nimport { BaseQueryFilter } from 'infrastructure/components/query-filters/base-query-filter';\r\nimport {\r\n DateRangeQuery,\r\n DateRangeQueryFilter,\r\n DateRangeQueryFilterOptionValue,\r\n} from 'infrastructure/components/query-filters/date-range-query-filter';\r\nimport {\r\n MapPlanQuery,\r\n MapPlanQueryFilter,\r\n} from 'infrastructure/components/query-filters/map-plan-query-filter';\r\nimport {\r\n OrganizationsQuery,\r\n OrganizationsQueryFilters,\r\n} from 'infrastructure/components/query-filters/organizations-query-filter';\r\nimport { QueryFiltered } from 'infrastructure/components/query-filters/query-filtered';\r\nimport moment from 'moment';\r\n\r\nexport interface DashboardWidgetQuery {\r\n dateRangeOption?: string;\r\n targetStartDate: string;\r\n targetEndDate: string;\r\n dateRangeOverride?: boolean;\r\n organizationIds: number[];\r\n mapId?: number;\r\n planId?: number;\r\n mapIds: number[];\r\n planIds: number[];\r\n onlyAssignedToMe: boolean;\r\n}\r\n\r\nexport class DashboardWidgetsQueryFilters\r\n extends BaseQueryFilter\r\n implements QueryFiltered {\r\n private _filterCaption: string;\r\n private _taskTargetFilterRangeCaption: string;\r\n private _taskTargetDateRangeFormat = 'MMMM D';\r\n\r\n dateRangeQueryFilters: DateRangeQueryFilter;\r\n mapPlanQueryFilters: MapPlanQueryFilter;\r\n organizationQueryFilters: OrganizationsQueryFilters;\r\n onlyAssignedToMe: boolean;\r\n\r\n constructor(\r\n widgetId: string,\r\n defaultDateRangeOption: DateRangeQueryFilterOptionValue = 'today',\r\n includeAllTimeOption = false,\r\n excludeEmmaOptions = false,\r\n defaultOrganizationIds: number[] = [],\r\n ) {\r\n super();\r\n\r\n this.dateRangeQueryFilters = new DateRangeQueryFilter(\r\n widgetId ? `query-filter.date-range.${widgetId}` : null,\r\n defaultDateRangeOption,\r\n includeAllTimeOption,\r\n excludeEmmaOptions,\r\n );\r\n this.mapPlanQueryFilters = new MapPlanQueryFilter();\r\n this.organizationQueryFilters = new OrganizationsQueryFilters(defaultOrganizationIds);\r\n this.onlyAssignedToMe = false;\r\n }\r\n\r\n public get filterCaption(): string {\r\n return this._filterCaption;\r\n }\r\n\r\n public get taskTargetFilterRangeCaption(): string {\r\n return this._taskTargetFilterRangeCaption;\r\n }\r\n\r\n // Selecting 'Specific Range' blanks both dates (DateRangeQueryFilter's own UX for \"you just\r\n // picked this, now choose dates\"), but nothing stops Apply from firing with both still null —\r\n // which backend queries treat as fully unbounded (the same null-bounds mechanism 'allTime'\r\n // formalizes). Widgets that don't offer 'allTime' would silently allow the same unbounded query\r\n // by accident. Widgets that DO offer it just don't bind this — an intentional unbounded query is\r\n // fine, an accidental one isn't.\r\n @computedFrom(\r\n 'dateRangeQueryFilters.dateRangeOption',\r\n 'dateRangeQueryFilters.dateRangeFilterOption.startDate',\r\n 'dateRangeQueryFilters.dateRangeFilterOption.endDate',\r\n )\r\n public get hasIncompleteCustomDateRange(): boolean {\r\n return (\r\n this.dateRangeQueryFilters.dateRangeOption === 'custom' &&\r\n (!this.dateRangeQueryFilters.dateRangeFilterOption.startDate ||\r\n !this.dateRangeQueryFilters.dateRangeFilterOption.endDate)\r\n );\r\n }\r\n\r\n public get count(): number {\r\n return (\r\n 0 +\r\n this.mapPlanQueryFilters.count +\r\n this.organizationQueryFilters.count +\r\n Number(!!this.onlyAssignedToMe)\r\n );\r\n }\r\n\r\n reset(): void {\r\n this.dateRangeQueryFilters.reset();\r\n this.mapPlanQueryFilters.reset();\r\n this.organizationQueryFilters.reset();\r\n this.onlyAssignedToMe = false;\r\n }\r\n\r\n // Title-bar summary of the widget-shell filter panel's own state — always shown, including\r\n // the default state, so the bar always tells the user what scope the widget's data reflects.\r\n // includeDateRange/includeMapPlan are opt-in per widget, since both sub-filters always exist on\r\n // this class (e.g. date range defaults to 'today') even for widgets whose panel never exposes a\r\n // control for them — showing those defaults would describe a filter the user can't see or change.\r\n buildFilterSummary(options: { includeDateRange?: boolean; includeMapPlan?: boolean } = {}): string {\r\n const parts: string[] = [];\r\n\r\n const orgCount = this.organizationQueryFilters.organizationIds.length;\r\n parts.push(\r\n orgCount > 0 ? `${orgCount} Organization${orgCount === 1 ? '' : 's'}` : 'All Organizations',\r\n );\r\n\r\n if (options.includeDateRange) {\r\n parts.push(this.dateRangeQueryFilters.dateRangeCaption);\r\n }\r\n\r\n if (options.includeMapPlan) {\r\n const count = this.mapPlanQueryFilters.mapPlanIds.length;\r\n const noun = this.mapPlanQueryFilters.mapPlanFilterType === 'plan' ? 'Plan' : 'Map';\r\n parts.push(count > 0 ? `${count} ${noun}${count === 1 ? '' : 's'}` : `All ${noun}s`);\r\n }\r\n\r\n return parts.join(' · ');\r\n }\r\n\r\n getQueryParams(): DashboardWidgetQuery {\r\n return {\r\n ...this.dateRangeQueryFilters.getQueryParams(),\r\n ...this.mapPlanQueryFilters.getQueryParams(),\r\n ...this.organizationQueryFilters.getQueryParams(),\r\n onlyAssignedToMe: this.onlyAssignedToMe,\r\n };\r\n }\r\n\r\n formatTaskTargetFilterCaption(): void {\r\n const startDate = moment(\r\n this.dateRangeQueryFilters.dateRangeFilterOption.startDate,\r\n ).isValid()\r\n ? moment(this.dateRangeQueryFilters.dateRangeFilterOption.startDate).format(\r\n this._taskTargetDateRangeFormat,\r\n )\r\n : '*';\r\n const endDate = moment(this.dateRangeQueryFilters.dateRangeFilterOption.endDate).isValid()\r\n ? moment(this.dateRangeQueryFilters.dateRangeFilterOption.endDate).format(\r\n this._taskTargetDateRangeFormat,\r\n )\r\n : '*';\r\n this._taskTargetFilterRangeCaption = `${startDate} through ${endDate}`;\r\n }\r\n\r\n setFilterValues(params: DashboardWidgetQuery): void {\r\n const dateRangeQuery: DateRangeQuery = {\r\n dateRangeOverride: params.dateRangeOverride,\r\n dateRangeOption: params.dateRangeOption,\r\n targetStartDate: params.targetStartDate,\r\n targetEndDate: params.targetEndDate,\r\n };\r\n const mapPlanQuery: MapPlanQuery = {\r\n mapId: params.mapId,\r\n planId: params.planId,\r\n mapIds: params.mapIds,\r\n planIds: params.planIds,\r\n };\r\n const organizationsQuery: OrganizationsQuery = { organizationIds: params.organizationIds };\r\n const { onlyAssignedToMe } = { ...params };\r\n\r\n this.dateRangeQueryFilters.setFilterValues(dateRangeQuery);\r\n this.mapPlanQueryFilters.setFilterValues(mapPlanQuery);\r\n this.organizationQueryFilters.setFilterValues(organizationsQuery);\r\n\r\n super.setQueryFilteredValues({ onlyAssignedToMe }, this);\r\n\r\n this._filterCaption = super.getFilterCaption(\r\n this.count,\r\n 'Task Target and Request Creation Date Range',\r\n this.dateRangeQueryFilters.dateRangeCaption,\r\n );\r\n this.formatTaskTargetFilterCaption();\r\n }\r\n}\r\n","import { ColDef, ColGroupDef, GridOptions } from 'ag-grid-community';\r\nimport { ColumnState } from 'ag-grid-community/dist/lib/main';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\n\r\nconst isColGroupDefGuard = (\r\n colOrColGroupDef: ColDef | ColGroupDef,\r\n): colOrColGroupDef is ColGroupDef => {\r\n return Object.keys(colOrColGroupDef).includes('children');\r\n};\r\n\r\n/*\r\n * This can theorically support multiple column groups, hence the foreach loops.\r\n * The drawback of the foreach loop is that it doesn't check if a selector option value is present in the col defs\r\n * TODO: Create separate unit test to match generateColumnsDefs w/ testResultsViewBySelectorOptions\r\n */\r\nconst groupColumnDefsBy = (\r\n selectedViewByOption: SelectorOption,\r\n colDefs: (ColDef | ColGroupDef)[],\r\n): (ColDef | ColGroupDef)[] => {\r\n const setRowGroup = (cd: ColDef): void => {\r\n cd.rowGroup = cd.field === selectedViewByOption.value;\r\n };\r\n\r\n colDefs.forEach((cdAny: ColDef | ColGroupDef, i: number) => {\r\n if (isColGroupDefGuard(cdAny)) {\r\n cdAny.children.forEach((cd: ColDef) => {\r\n setRowGroup(cd);\r\n });\r\n } else {\r\n setRowGroup(cdAny);\r\n }\r\n });\r\n\r\n return colDefs;\r\n};\r\n\r\nconst setGroupByColumnDefinitions = (\r\n gridOptions: GridOptions,\r\n selectedViewByOption: SelectorOption,\r\n colDefs: (ColDef | ColGroupDef)[],\r\n autoSortedColumnStateColId: string,\r\n): void => {\r\n const columnDefs = groupColumnDefsBy(selectedViewByOption, colDefs);\r\n const colState: ColumnState = {\r\n colId: autoSortedColumnStateColId || 'ag-Grid-AutoColumn',\r\n sort: 'asc',\r\n };\r\n gridOptions.api?.setColumnDefs(columnDefs);\r\n gridOptions.columnApi?.applyColumnState({\r\n state: [colState],\r\n defaultState: { sort: null },\r\n });\r\n};\r\n\r\nexport { setGroupByColumnDefinitions };\r\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.push([module.id, \"@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600,700);\"]);\nexports.push([module.id, \"@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css);\"]);\n// Module\nexports.push([module.id, \"/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=\\\"button\\\"],[type=\\\"reset\\\"],[type=\\\"submit\\\"]{-webkit-appearance:button}button::-moz-focus-inner,[type=\\\"button\\\"]::-moz-focus-inner,[type=\\\"reset\\\"]::-moz-focus-inner,[type=\\\"submit\\\"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=\\\"button\\\"]:-moz-focusring,[type=\\\"reset\\\"]:-moz-focusring,[type=\\\"submit\\\"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=\\\"checkbox\\\"],[type=\\\"radio\\\"]{box-sizing:border-box;padding:0}[type=\\\"number\\\"]::-webkit-inner-spin-button,[type=\\\"number\\\"]::-webkit-outer-spin-button{height:auto}[type=\\\"search\\\"]{-webkit-appearance:textfield;outline-offset:-2px}[type=\\\"search\\\"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.foundation-mq{font-family:\\\"small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em\\\"}html{box-sizing:border-box;font-size:100%}*,*::before,*::after{box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:\\\"Raleway\\\",sans-serif;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{box-sizing:border-box;width:100%;border-radius:0}.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}button{padding:0;appearance:none;border:0;border-radius:0;background:transparent;line-height:1;cursor:auto}[data-whatinput='mouse'] button{outline:0}pre{overflow:auto}button,input,optgroup,select,textarea{font-family:inherit}.is-visible{display:block !important}.is-hidden{display:none !important}.row{max-width:100%;margin-right:auto;margin-left:auto}.row::before,.row::after{display:table;content:' ';flex-basis:0;order:1}.row::after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-right:0;padding-left:0}.row .row{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.row .row{margin-right:-1.875rem;margin-left:-1.875rem}}@media print, screen and (min-width: 64em){.row .row{margin-right:-1.875rem;margin-left:-1.875rem}}@media screen and (min-width: 75em){.row .row{margin-right:-1.875rem;margin-left:-1.875rem}}.row .row.collapse{margin-right:0;margin-left:0}.row.expanded{max-width:none}.row.expanded .row{margin-right:auto;margin-left:auto}.row:not(.expanded) .row{max-width:none}.row.gutter-small>.column,.row.gutter-small>.columns{padding-right:.625rem;padding-left:.625rem}.row.gutter-medium>.column,.row.gutter-medium>.columns{padding-right:1.875rem;padding-left:1.875rem}.column,.columns{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.column,.columns{padding-right:1.875rem;padding-left:1.875rem}}.column,.columns,.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:left;clear:none}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:right}.column.end:last-child:last-child,.end.columns:last-child:last-child{float:left}.column.row.row,.row.row.columns{float:none}.row .column.row.row,.row .row.row.columns{margin-right:0;margin-left:0;padding-right:0;padding-left:0}.small-1{width:8.33333%}.small-push-1{position:relative;left:8.33333%}.small-pull-1{position:relative;left:-8.33333%}.small-offset-0{margin-left:0%}.small-2{width:16.66667%}.small-push-2{position:relative;left:16.66667%}.small-pull-2{position:relative;left:-16.66667%}.small-offset-1{margin-left:8.33333%}.small-3{width:25%}.small-push-3{position:relative;left:25%}.small-pull-3{position:relative;left:-25%}.small-offset-2{margin-left:16.66667%}.small-4{width:33.33333%}.small-push-4{position:relative;left:33.33333%}.small-pull-4{position:relative;left:-33.33333%}.small-offset-3{margin-left:25%}.small-5{width:41.66667%}.small-push-5{position:relative;left:41.66667%}.small-pull-5{position:relative;left:-41.66667%}.small-offset-4{margin-left:33.33333%}.small-6{width:50%}.small-push-6{position:relative;left:50%}.small-pull-6{position:relative;left:-50%}.small-offset-5{margin-left:41.66667%}.small-7{width:58.33333%}.small-push-7{position:relative;left:58.33333%}.small-pull-7{position:relative;left:-58.33333%}.small-offset-6{margin-left:50%}.small-8{width:66.66667%}.small-push-8{position:relative;left:66.66667%}.small-pull-8{position:relative;left:-66.66667%}.small-offset-7{margin-left:58.33333%}.small-9{width:75%}.small-push-9{position:relative;left:75%}.small-pull-9{position:relative;left:-75%}.small-offset-8{margin-left:66.66667%}.small-10{width:83.33333%}.small-push-10{position:relative;left:83.33333%}.small-pull-10{position:relative;left:-83.33333%}.small-offset-9{margin-left:75%}.small-11{width:91.66667%}.small-push-11{position:relative;left:91.66667%}.small-pull-11{position:relative;left:-91.66667%}.small-offset-10{margin-left:83.33333%}.small-12{width:100%}.small-offset-11{margin-left:91.66667%}.small-up-1>.column,.small-up-1>.columns{float:left;width:100%}.small-up-1>.column:nth-of-type(1n),.small-up-1>.columns:nth-of-type(1n){clear:none}.small-up-1>.column:nth-of-type(1n+1),.small-up-1>.columns:nth-of-type(1n+1){clear:both}.small-up-1>.column:last-child,.small-up-1>.columns:last-child{float:left}.small-up-2>.column,.small-up-2>.columns{float:left;width:50%}.small-up-2>.column:nth-of-type(1n),.small-up-2>.columns:nth-of-type(1n){clear:none}.small-up-2>.column:nth-of-type(2n+1),.small-up-2>.columns:nth-of-type(2n+1){clear:both}.small-up-2>.column:last-child,.small-up-2>.columns:last-child{float:left}.small-up-3>.column,.small-up-3>.columns{float:left;width:33.33333%}.small-up-3>.column:nth-of-type(1n),.small-up-3>.columns:nth-of-type(1n){clear:none}.small-up-3>.column:nth-of-type(3n+1),.small-up-3>.columns:nth-of-type(3n+1){clear:both}.small-up-3>.column:last-child,.small-up-3>.columns:last-child{float:left}.small-up-4>.column,.small-up-4>.columns{float:left;width:25%}.small-up-4>.column:nth-of-type(1n),.small-up-4>.columns:nth-of-type(1n){clear:none}.small-up-4>.column:nth-of-type(4n+1),.small-up-4>.columns:nth-of-type(4n+1){clear:both}.small-up-4>.column:last-child,.small-up-4>.columns:last-child{float:left}.small-up-5>.column,.small-up-5>.columns{float:left;width:20%}.small-up-5>.column:nth-of-type(1n),.small-up-5>.columns:nth-of-type(1n){clear:none}.small-up-5>.column:nth-of-type(5n+1),.small-up-5>.columns:nth-of-type(5n+1){clear:both}.small-up-5>.column:last-child,.small-up-5>.columns:last-child{float:left}.small-up-6>.column,.small-up-6>.columns{float:left;width:16.66667%}.small-up-6>.column:nth-of-type(1n),.small-up-6>.columns:nth-of-type(1n){clear:none}.small-up-6>.column:nth-of-type(6n+1),.small-up-6>.columns:nth-of-type(6n+1){clear:both}.small-up-6>.column:last-child,.small-up-6>.columns:last-child{float:left}.small-up-7>.column,.small-up-7>.columns{float:left;width:14.28571%}.small-up-7>.column:nth-of-type(1n),.small-up-7>.columns:nth-of-type(1n){clear:none}.small-up-7>.column:nth-of-type(7n+1),.small-up-7>.columns:nth-of-type(7n+1){clear:both}.small-up-7>.column:last-child,.small-up-7>.columns:last-child{float:left}.small-up-8>.column,.small-up-8>.columns{float:left;width:12.5%}.small-up-8>.column:nth-of-type(1n),.small-up-8>.columns:nth-of-type(1n){clear:none}.small-up-8>.column:nth-of-type(8n+1),.small-up-8>.columns:nth-of-type(8n+1){clear:both}.small-up-8>.column:last-child,.small-up-8>.columns:last-child{float:left}.small-collapse>.column,.small-collapse>.columns{padding-right:0;padding-left:0}.small-collapse .row{margin-right:0;margin-left:0}.expanded.row .small-collapse.row{margin-right:0;margin-left:0}.small-uncollapse>.column,.small-uncollapse>.columns{padding-right:.625rem;padding-left:.625rem}.small-centered{margin-right:auto;margin-left:auto}.small-centered,.small-centered:last-child:not(:first-child){float:none;clear:both}.small-uncentered,.small-push-0,.small-pull-0{position:static;margin-right:0;margin-left:0}.small-uncentered,.small-uncentered:last-child:not(:first-child),.small-push-0,.small-push-0:last-child:not(:first-child),.small-pull-0,.small-pull-0:last-child:not(:first-child){float:left;clear:none}.small-uncentered:last-child:not(:first-child),.small-push-0:last-child:not(:first-child),.small-pull-0:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.medium-1{width:8.33333%}.medium-push-1{position:relative;left:8.33333%}.medium-pull-1{position:relative;left:-8.33333%}.medium-offset-0{margin-left:0%}.medium-2{width:16.66667%}.medium-push-2{position:relative;left:16.66667%}.medium-pull-2{position:relative;left:-16.66667%}.medium-offset-1{margin-left:8.33333%}.medium-3{width:25%}.medium-push-3{position:relative;left:25%}.medium-pull-3{position:relative;left:-25%}.medium-offset-2{margin-left:16.66667%}.medium-4{width:33.33333%}.medium-push-4{position:relative;left:33.33333%}.medium-pull-4{position:relative;left:-33.33333%}.medium-offset-3{margin-left:25%}.medium-5{width:41.66667%}.medium-push-5{position:relative;left:41.66667%}.medium-pull-5{position:relative;left:-41.66667%}.medium-offset-4{margin-left:33.33333%}.medium-6{width:50%}.medium-push-6{position:relative;left:50%}.medium-pull-6{position:relative;left:-50%}.medium-offset-5{margin-left:41.66667%}.medium-7{width:58.33333%}.medium-push-7{position:relative;left:58.33333%}.medium-pull-7{position:relative;left:-58.33333%}.medium-offset-6{margin-left:50%}.medium-8{width:66.66667%}.medium-push-8{position:relative;left:66.66667%}.medium-pull-8{position:relative;left:-66.66667%}.medium-offset-7{margin-left:58.33333%}.medium-9{width:75%}.medium-push-9{position:relative;left:75%}.medium-pull-9{position:relative;left:-75%}.medium-offset-8{margin-left:66.66667%}.medium-10{width:83.33333%}.medium-push-10{position:relative;left:83.33333%}.medium-pull-10{position:relative;left:-83.33333%}.medium-offset-9{margin-left:75%}.medium-11{width:91.66667%}.medium-push-11{position:relative;left:91.66667%}.medium-pull-11{position:relative;left:-91.66667%}.medium-offset-10{margin-left:83.33333%}.medium-12{width:100%}.medium-offset-11{margin-left:91.66667%}.medium-up-1>.column,.medium-up-1>.columns{float:left;width:100%}.medium-up-1>.column:nth-of-type(1n),.medium-up-1>.columns:nth-of-type(1n){clear:none}.medium-up-1>.column:nth-of-type(1n+1),.medium-up-1>.columns:nth-of-type(1n+1){clear:both}.medium-up-1>.column:last-child,.medium-up-1>.columns:last-child{float:left}.medium-up-2>.column,.medium-up-2>.columns{float:left;width:50%}.medium-up-2>.column:nth-of-type(1n),.medium-up-2>.columns:nth-of-type(1n){clear:none}.medium-up-2>.column:nth-of-type(2n+1),.medium-up-2>.columns:nth-of-type(2n+1){clear:both}.medium-up-2>.column:last-child,.medium-up-2>.columns:last-child{float:left}.medium-up-3>.column,.medium-up-3>.columns{float:left;width:33.33333%}.medium-up-3>.column:nth-of-type(1n),.medium-up-3>.columns:nth-of-type(1n){clear:none}.medium-up-3>.column:nth-of-type(3n+1),.medium-up-3>.columns:nth-of-type(3n+1){clear:both}.medium-up-3>.column:last-child,.medium-up-3>.columns:last-child{float:left}.medium-up-4>.column,.medium-up-4>.columns{float:left;width:25%}.medium-up-4>.column:nth-of-type(1n),.medium-up-4>.columns:nth-of-type(1n){clear:none}.medium-up-4>.column:nth-of-type(4n+1),.medium-up-4>.columns:nth-of-type(4n+1){clear:both}.medium-up-4>.column:last-child,.medium-up-4>.columns:last-child{float:left}.medium-up-5>.column,.medium-up-5>.columns{float:left;width:20%}.medium-up-5>.column:nth-of-type(1n),.medium-up-5>.columns:nth-of-type(1n){clear:none}.medium-up-5>.column:nth-of-type(5n+1),.medium-up-5>.columns:nth-of-type(5n+1){clear:both}.medium-up-5>.column:last-child,.medium-up-5>.columns:last-child{float:left}.medium-up-6>.column,.medium-up-6>.columns{float:left;width:16.66667%}.medium-up-6>.column:nth-of-type(1n),.medium-up-6>.columns:nth-of-type(1n){clear:none}.medium-up-6>.column:nth-of-type(6n+1),.medium-up-6>.columns:nth-of-type(6n+1){clear:both}.medium-up-6>.column:last-child,.medium-up-6>.columns:last-child{float:left}.medium-up-7>.column,.medium-up-7>.columns{float:left;width:14.28571%}.medium-up-7>.column:nth-of-type(1n),.medium-up-7>.columns:nth-of-type(1n){clear:none}.medium-up-7>.column:nth-of-type(7n+1),.medium-up-7>.columns:nth-of-type(7n+1){clear:both}.medium-up-7>.column:last-child,.medium-up-7>.columns:last-child{float:left}.medium-up-8>.column,.medium-up-8>.columns{float:left;width:12.5%}.medium-up-8>.column:nth-of-type(1n),.medium-up-8>.columns:nth-of-type(1n){clear:none}.medium-up-8>.column:nth-of-type(8n+1),.medium-up-8>.columns:nth-of-type(8n+1){clear:both}.medium-up-8>.column:last-child,.medium-up-8>.columns:last-child{float:left}.medium-collapse>.column,.medium-collapse>.columns{padding-right:0;padding-left:0}.medium-collapse .row{margin-right:0;margin-left:0}.expanded.row .medium-collapse.row{margin-right:0;margin-left:0}.medium-uncollapse>.column,.medium-uncollapse>.columns{padding-right:1.875rem;padding-left:1.875rem}.medium-centered{margin-right:auto;margin-left:auto}.medium-centered,.medium-centered:last-child:not(:first-child){float:none;clear:both}.medium-uncentered,.medium-push-0,.medium-pull-0{position:static;margin-right:0;margin-left:0}.medium-uncentered,.medium-uncentered:last-child:not(:first-child),.medium-push-0,.medium-push-0:last-child:not(:first-child),.medium-pull-0,.medium-pull-0:last-child:not(:first-child){float:left;clear:none}.medium-uncentered:last-child:not(:first-child),.medium-push-0:last-child:not(:first-child),.medium-pull-0:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.large-1{width:8.33333%}.large-push-1{position:relative;left:8.33333%}.large-pull-1{position:relative;left:-8.33333%}.large-offset-0{margin-left:0%}.large-2{width:16.66667%}.large-push-2{position:relative;left:16.66667%}.large-pull-2{position:relative;left:-16.66667%}.large-offset-1{margin-left:8.33333%}.large-3{width:25%}.large-push-3{position:relative;left:25%}.large-pull-3{position:relative;left:-25%}.large-offset-2{margin-left:16.66667%}.large-4{width:33.33333%}.large-push-4{position:relative;left:33.33333%}.large-pull-4{position:relative;left:-33.33333%}.large-offset-3{margin-left:25%}.large-5{width:41.66667%}.large-push-5{position:relative;left:41.66667%}.large-pull-5{position:relative;left:-41.66667%}.large-offset-4{margin-left:33.33333%}.large-6{width:50%}.large-push-6{position:relative;left:50%}.large-pull-6{position:relative;left:-50%}.large-offset-5{margin-left:41.66667%}.large-7{width:58.33333%}.large-push-7{position:relative;left:58.33333%}.large-pull-7{position:relative;left:-58.33333%}.large-offset-6{margin-left:50%}.large-8{width:66.66667%}.large-push-8{position:relative;left:66.66667%}.large-pull-8{position:relative;left:-66.66667%}.large-offset-7{margin-left:58.33333%}.large-9{width:75%}.large-push-9{position:relative;left:75%}.large-pull-9{position:relative;left:-75%}.large-offset-8{margin-left:66.66667%}.large-10{width:83.33333%}.large-push-10{position:relative;left:83.33333%}.large-pull-10{position:relative;left:-83.33333%}.large-offset-9{margin-left:75%}.large-11{width:91.66667%}.large-push-11{position:relative;left:91.66667%}.large-pull-11{position:relative;left:-91.66667%}.large-offset-10{margin-left:83.33333%}.large-12{width:100%}.large-offset-11{margin-left:91.66667%}.large-up-1>.column,.large-up-1>.columns{float:left;width:100%}.large-up-1>.column:nth-of-type(1n),.large-up-1>.columns:nth-of-type(1n){clear:none}.large-up-1>.column:nth-of-type(1n+1),.large-up-1>.columns:nth-of-type(1n+1){clear:both}.large-up-1>.column:last-child,.large-up-1>.columns:last-child{float:left}.large-up-2>.column,.large-up-2>.columns{float:left;width:50%}.large-up-2>.column:nth-of-type(1n),.large-up-2>.columns:nth-of-type(1n){clear:none}.large-up-2>.column:nth-of-type(2n+1),.large-up-2>.columns:nth-of-type(2n+1){clear:both}.large-up-2>.column:last-child,.large-up-2>.columns:last-child{float:left}.large-up-3>.column,.large-up-3>.columns{float:left;width:33.33333%}.large-up-3>.column:nth-of-type(1n),.large-up-3>.columns:nth-of-type(1n){clear:none}.large-up-3>.column:nth-of-type(3n+1),.large-up-3>.columns:nth-of-type(3n+1){clear:both}.large-up-3>.column:last-child,.large-up-3>.columns:last-child{float:left}.large-up-4>.column,.large-up-4>.columns{float:left;width:25%}.large-up-4>.column:nth-of-type(1n),.large-up-4>.columns:nth-of-type(1n){clear:none}.large-up-4>.column:nth-of-type(4n+1),.large-up-4>.columns:nth-of-type(4n+1){clear:both}.large-up-4>.column:last-child,.large-up-4>.columns:last-child{float:left}.large-up-5>.column,.large-up-5>.columns{float:left;width:20%}.large-up-5>.column:nth-of-type(1n),.large-up-5>.columns:nth-of-type(1n){clear:none}.large-up-5>.column:nth-of-type(5n+1),.large-up-5>.columns:nth-of-type(5n+1){clear:both}.large-up-5>.column:last-child,.large-up-5>.columns:last-child{float:left}.large-up-6>.column,.large-up-6>.columns{float:left;width:16.66667%}.large-up-6>.column:nth-of-type(1n),.large-up-6>.columns:nth-of-type(1n){clear:none}.large-up-6>.column:nth-of-type(6n+1),.large-up-6>.columns:nth-of-type(6n+1){clear:both}.large-up-6>.column:last-child,.large-up-6>.columns:last-child{float:left}.large-up-7>.column,.large-up-7>.columns{float:left;width:14.28571%}.large-up-7>.column:nth-of-type(1n),.large-up-7>.columns:nth-of-type(1n){clear:none}.large-up-7>.column:nth-of-type(7n+1),.large-up-7>.columns:nth-of-type(7n+1){clear:both}.large-up-7>.column:last-child,.large-up-7>.columns:last-child{float:left}.large-up-8>.column,.large-up-8>.columns{float:left;width:12.5%}.large-up-8>.column:nth-of-type(1n),.large-up-8>.columns:nth-of-type(1n){clear:none}.large-up-8>.column:nth-of-type(8n+1),.large-up-8>.columns:nth-of-type(8n+1){clear:both}.large-up-8>.column:last-child,.large-up-8>.columns:last-child{float:left}.large-collapse>.column,.large-collapse>.columns{padding-right:0;padding-left:0}.large-collapse .row{margin-right:0;margin-left:0}.expanded.row .large-collapse.row{margin-right:0;margin-left:0}.large-uncollapse>.column,.large-uncollapse>.columns{padding-right:1.875rem;padding-left:1.875rem}.large-centered{margin-right:auto;margin-left:auto}.large-centered,.large-centered:last-child:not(:first-child){float:none;clear:both}.large-uncentered,.large-push-0,.large-pull-0{position:static;margin-right:0;margin-left:0}.large-uncentered,.large-uncentered:last-child:not(:first-child),.large-push-0,.large-push-0:last-child:not(:first-child),.large-pull-0,.large-pull-0:last-child:not(:first-child){float:left;clear:none}.large-uncentered:last-child:not(:first-child),.large-push-0:last-child:not(:first-child),.large-pull-0:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.xlarge-1{width:8.33333%}.xlarge-push-1{position:relative;left:8.33333%}.xlarge-pull-1{position:relative;left:-8.33333%}.xlarge-offset-0{margin-left:0%}.xlarge-2{width:16.66667%}.xlarge-push-2{position:relative;left:16.66667%}.xlarge-pull-2{position:relative;left:-16.66667%}.xlarge-offset-1{margin-left:8.33333%}.xlarge-3{width:25%}.xlarge-push-3{position:relative;left:25%}.xlarge-pull-3{position:relative;left:-25%}.xlarge-offset-2{margin-left:16.66667%}.xlarge-4{width:33.33333%}.xlarge-push-4{position:relative;left:33.33333%}.xlarge-pull-4{position:relative;left:-33.33333%}.xlarge-offset-3{margin-left:25%}.xlarge-5{width:41.66667%}.xlarge-push-5{position:relative;left:41.66667%}.xlarge-pull-5{position:relative;left:-41.66667%}.xlarge-offset-4{margin-left:33.33333%}.xlarge-6{width:50%}.xlarge-push-6{position:relative;left:50%}.xlarge-pull-6{position:relative;left:-50%}.xlarge-offset-5{margin-left:41.66667%}.xlarge-7{width:58.33333%}.xlarge-push-7{position:relative;left:58.33333%}.xlarge-pull-7{position:relative;left:-58.33333%}.xlarge-offset-6{margin-left:50%}.xlarge-8{width:66.66667%}.xlarge-push-8{position:relative;left:66.66667%}.xlarge-pull-8{position:relative;left:-66.66667%}.xlarge-offset-7{margin-left:58.33333%}.xlarge-9{width:75%}.xlarge-push-9{position:relative;left:75%}.xlarge-pull-9{position:relative;left:-75%}.xlarge-offset-8{margin-left:66.66667%}.xlarge-10{width:83.33333%}.xlarge-push-10{position:relative;left:83.33333%}.xlarge-pull-10{position:relative;left:-83.33333%}.xlarge-offset-9{margin-left:75%}.xlarge-11{width:91.66667%}.xlarge-push-11{position:relative;left:91.66667%}.xlarge-pull-11{position:relative;left:-91.66667%}.xlarge-offset-10{margin-left:83.33333%}.xlarge-12{width:100%}.xlarge-offset-11{margin-left:91.66667%}.xlarge-up-1>.column,.xlarge-up-1>.columns{float:left;width:100%}.xlarge-up-1>.column:nth-of-type(1n),.xlarge-up-1>.columns:nth-of-type(1n){clear:none}.xlarge-up-1>.column:nth-of-type(1n+1),.xlarge-up-1>.columns:nth-of-type(1n+1){clear:both}.xlarge-up-1>.column:last-child,.xlarge-up-1>.columns:last-child{float:left}.xlarge-up-2>.column,.xlarge-up-2>.columns{float:left;width:50%}.xlarge-up-2>.column:nth-of-type(1n),.xlarge-up-2>.columns:nth-of-type(1n){clear:none}.xlarge-up-2>.column:nth-of-type(2n+1),.xlarge-up-2>.columns:nth-of-type(2n+1){clear:both}.xlarge-up-2>.column:last-child,.xlarge-up-2>.columns:last-child{float:left}.xlarge-up-3>.column,.xlarge-up-3>.columns{float:left;width:33.33333%}.xlarge-up-3>.column:nth-of-type(1n),.xlarge-up-3>.columns:nth-of-type(1n){clear:none}.xlarge-up-3>.column:nth-of-type(3n+1),.xlarge-up-3>.columns:nth-of-type(3n+1){clear:both}.xlarge-up-3>.column:last-child,.xlarge-up-3>.columns:last-child{float:left}.xlarge-up-4>.column,.xlarge-up-4>.columns{float:left;width:25%}.xlarge-up-4>.column:nth-of-type(1n),.xlarge-up-4>.columns:nth-of-type(1n){clear:none}.xlarge-up-4>.column:nth-of-type(4n+1),.xlarge-up-4>.columns:nth-of-type(4n+1){clear:both}.xlarge-up-4>.column:last-child,.xlarge-up-4>.columns:last-child{float:left}.xlarge-up-5>.column,.xlarge-up-5>.columns{float:left;width:20%}.xlarge-up-5>.column:nth-of-type(1n),.xlarge-up-5>.columns:nth-of-type(1n){clear:none}.xlarge-up-5>.column:nth-of-type(5n+1),.xlarge-up-5>.columns:nth-of-type(5n+1){clear:both}.xlarge-up-5>.column:last-child,.xlarge-up-5>.columns:last-child{float:left}.xlarge-up-6>.column,.xlarge-up-6>.columns{float:left;width:16.66667%}.xlarge-up-6>.column:nth-of-type(1n),.xlarge-up-6>.columns:nth-of-type(1n){clear:none}.xlarge-up-6>.column:nth-of-type(6n+1),.xlarge-up-6>.columns:nth-of-type(6n+1){clear:both}.xlarge-up-6>.column:last-child,.xlarge-up-6>.columns:last-child{float:left}.xlarge-up-7>.column,.xlarge-up-7>.columns{float:left;width:14.28571%}.xlarge-up-7>.column:nth-of-type(1n),.xlarge-up-7>.columns:nth-of-type(1n){clear:none}.xlarge-up-7>.column:nth-of-type(7n+1),.xlarge-up-7>.columns:nth-of-type(7n+1){clear:both}.xlarge-up-7>.column:last-child,.xlarge-up-7>.columns:last-child{float:left}.xlarge-up-8>.column,.xlarge-up-8>.columns{float:left;width:12.5%}.xlarge-up-8>.column:nth-of-type(1n),.xlarge-up-8>.columns:nth-of-type(1n){clear:none}.xlarge-up-8>.column:nth-of-type(8n+1),.xlarge-up-8>.columns:nth-of-type(8n+1){clear:both}.xlarge-up-8>.column:last-child,.xlarge-up-8>.columns:last-child{float:left}.xlarge-collapse>.column,.xlarge-collapse>.columns{padding-right:0;padding-left:0}.xlarge-collapse .row{margin-right:0;margin-left:0}.expanded.row .xlarge-collapse.row{margin-right:0;margin-left:0}.xlarge-uncollapse>.column,.xlarge-uncollapse>.columns{padding-right:1.875rem;padding-left:1.875rem}.xlarge-centered{margin-right:auto;margin-left:auto}.xlarge-centered,.xlarge-centered:last-child:not(:first-child){float:none;clear:both}.xlarge-uncentered,.xlarge-push-0,.xlarge-pull-0{position:static;margin-right:0;margin-left:0}.xlarge-uncentered,.xlarge-uncentered:last-child:not(:first-child),.xlarge-push-0,.xlarge-push-0:last-child:not(:first-child),.xlarge-pull-0,.xlarge-pull-0:last-child:not(:first-child){float:left;clear:none}.xlarge-uncentered:last-child:not(:first-child),.xlarge-push-0:last-child:not(:first-child),.xlarge-pull-0:last-child:not(:first-child){float:right}}.column-block{margin-bottom:1.25rem}.column-block>:last-child{margin-bottom:0}@media print, screen and (min-width: 40em){.column-block{margin-bottom:3.75rem}.column-block>:last-child{margin-bottom:0}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:80%;line-height:inherit}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-family:\\\"Raleway\\\",sans-serif;font-style:normal;font-weight:normal;color:inherit;text-rendering:optimizeLegibility}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small{line-height:0;color:#cacaca}h1,.h1{font-size:1.5rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h2,.h2{font-size:1.25rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h3,.h3{font-size:1.1875rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h4,.h4{font-size:1.125rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h5,.h5{font-size:1.0625rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h6,.h6{font-size:1rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}@media print, screen and (min-width: 40em){h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:1.9375rem}h4,.h4{font-size:1.5625rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}}a{line-height:inherit;color:#8f1838;text-decoration:none;cursor:pointer}a:hover,a:focus{color:#cc2350}a img{border:0}hr{clear:both;max-width:100%;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}ul,ol,dl{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{margin-left:1.25rem;list-style-type:disc}ol{margin-left:1.25rem}ul ul,ol ul,ul ol,ol ol{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:bold}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}cite{display:block;font-size:.8125rem;color:#8a8a8a}cite:before{content:\\\"— \\\"}abbr,abbr[title]{border-bottom:1px dotted #0a0a0a;cursor:help;text-decoration:none}figure{margin:0}code{padding:.125rem .3125rem .0625rem;border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,\\\"Liberation Mono\\\",Courier,monospace;font-weight:normal;color:#0a0a0a}kbd{margin:0;padding:.125rem .25rem 0;background-color:#e6e6e6;font-family:Consolas,\\\"Liberation Mono\\\",Courier,monospace;color:#0a0a0a}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:normal;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}ul.no-bullet,ol.no-bullet{margin-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media print, screen and (min-width: 40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print, screen and (min-width: 64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}@media screen and (min-width: 75em){.xlarge-text-left{text-align:left}.xlarge-text-right{text-align:right}.xlarge-text-center{text-align:center}.xlarge-text-justify{text-align:justify}}.show-for-print{display:none !important}@media print{*{background:transparent !important;box-shadow:none !important;color:black !important;text-shadow:none !important}.show-for-print{display:block !important}.hide-for-print{display:none !important}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:\\\" (\\\" attr(href) \\\")\\\"}.ir a:after,a[href^='javascript:']:after,a[href^='#']:after{content:''}abbr[title]:after{content:\\\" (\\\" attr(title) \\\")\\\"}pre,blockquote{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem 0;padding:0.85em 1em;border:1px solid transparent;border-radius:0;transition:background-color 0.25s ease-out,color 0.25s ease-out;font-family:inherit;font-size:0.9rem;-webkit-appearance:none;line-height:1;text-align:center;cursor:pointer;background-color:#1779ba;color:#fefefe}[data-whatinput='mouse'] .button{outline:0}.button:hover,.button:focus{background-color:#14679e;color:#fefefe}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button.primary,.form-block .article .button,.article .button{background-color:#1779ba;color:#fefefe}.button.primary:hover,.article .button:hover,.button.primary:focus,.article .button:focus{background-color:#126195;color:#fefefe}.button.secondary{background-color:#767676;color:#fefefe}.button.secondary:hover,.button.secondary:focus{background-color:#5e5e5e;color:#fefefe}.button.success{background-color:#3adb76;color:#0a0a0a}.button.success:hover,.button.success:focus{background-color:#22bb5b;color:#0a0a0a}.button.warning{background-color:#ffae00;color:#0a0a0a}.button.warning:hover,.button.warning:focus{background-color:#cc8b00;color:#0a0a0a}.button.alert{background-color:#db2121;color:#fefefe}.button.alert:hover,.button.alert:focus{background-color:#af1a1a;color:#fefefe}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.disabled,.button.disabled:hover,.button.disabled:focus,.button[disabled],.button[disabled]:hover,.button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button.disabled.primary,.article .button.disabled,.button[disabled].primary,.article .button[disabled]{opacity:.25;cursor:not-allowed}.button.disabled.primary,.article .button.disabled,.button.disabled.primary:hover,.article .button.disabled:hover,.button.disabled.primary:focus,.article .button.disabled:focus,.button[disabled].primary,.article .button[disabled],.button[disabled].primary:hover,.article .button[disabled]:hover,.button[disabled].primary:focus,.article .button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button.disabled.secondary,.button[disabled].secondary{opacity:.25;cursor:not-allowed}.button.disabled.secondary,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#767676;color:#fefefe}.button.disabled.success,.button[disabled].success{opacity:.25;cursor:not-allowed}.button.disabled.success,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#3adb76;color:#0a0a0a}.button.disabled.warning,.button[disabled].warning{opacity:.25;cursor:not-allowed}.button.disabled.warning,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#ffae00;color:#0a0a0a}.button.disabled.alert,.button[disabled].alert{opacity:.25;cursor:not-allowed}.button.disabled.alert,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#db2121;color:#fefefe}.button.hollow{border:1px solid #1779ba;color:#1779ba}.button.hollow,.button.hollow:hover,.button.hollow:focus{background-color:transparent}.button.hollow.disabled,.button.hollow.disabled:hover,.button.hollow.disabled:focus,.button.hollow[disabled],.button.hollow[disabled]:hover,.button.hollow[disabled]:focus{background-color:transparent}.button.hollow:hover,.button.hollow:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow:hover.disabled,.button.hollow:hover[disabled],.button.hollow:focus.disabled,.button.hollow:focus[disabled]{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary,.article .button.hollow{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary:hover,.article .button.hollow:hover,.button.hollow.primary:focus,.article .button.hollow:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.primary:hover.disabled,.article .button.hollow:hover.disabled,.button.hollow.primary:hover[disabled],.article .button.hollow:hover[disabled],.button.hollow.primary:focus.disabled,.article .button.hollow:focus.disabled,.button.hollow.primary:focus[disabled],.article .button.hollow:focus[disabled]{border:1px solid #1779ba;color:#1779ba}.button.hollow.secondary{border:1px solid #767676;color:#767676}.button.hollow.secondary:hover,.button.hollow.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button.hollow.secondary:hover.disabled,.button.hollow.secondary:hover[disabled],.button.hollow.secondary:focus.disabled,.button.hollow.secondary:focus[disabled]{border:1px solid #767676;color:#767676}.button.hollow.success{border:1px solid #3adb76;color:#3adb76}.button.hollow.success:hover,.button.hollow.success:focus{border-color:#157539;color:#157539}.button.hollow.success:hover.disabled,.button.hollow.success:hover[disabled],.button.hollow.success:focus.disabled,.button.hollow.success:focus[disabled]{border:1px solid #3adb76;color:#3adb76}.button.hollow.warning{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:hover,.button.hollow.warning:focus{border-color:#805700;color:#805700}.button.hollow.warning:hover.disabled,.button.hollow.warning:hover[disabled],.button.hollow.warning:focus.disabled,.button.hollow.warning:focus[disabled]{border:1px solid #ffae00;color:#ffae00}.button.hollow.alert{border:1px solid #db2121;color:#db2121}.button.hollow.alert:hover,.button.hollow.alert:focus{border-color:#6e1111;color:#6e1111}.button.hollow.alert:hover.disabled,.button.hollow.alert:hover[disabled],.button.hollow.alert:focus.disabled,.button.hollow.alert:focus[disabled]{border:1px solid #db2121;color:#db2121}.button.clear{border:1px solid #1779ba;color:#1779ba}.button.clear,.button.clear:hover,.button.clear:focus{background-color:transparent}.button.clear.disabled,.button.clear.disabled:hover,.button.clear.disabled:focus,.button.clear[disabled],.button.clear[disabled]:hover,.button.clear[disabled]:focus{background-color:transparent}.button.clear:hover,.button.clear:focus{border-color:#0c3d5d;color:#0c3d5d}.button.clear:hover.disabled,.button.clear:hover[disabled],.button.clear:focus.disabled,.button.clear:focus[disabled]{border:1px solid #1779ba;color:#1779ba}.button.clear,.button.clear.disabled,.button.clear[disabled],.button.clear:hover,.button.clear:hover.disabled,.button.clear:hover[disabled],.button.clear:focus,.button.clear:focus.disabled,.button.clear:focus[disabled]{border-color:transparent}.button.clear.primary,.article .button.clear{border:1px solid #1779ba;color:#1779ba}.button.clear.primary:hover,.article .button.clear:hover,.button.clear.primary:focus,.article .button.clear:focus{border-color:#0c3d5d;color:#0c3d5d}.button.clear.primary:hover.disabled,.article .button.clear:hover.disabled,.button.clear.primary:hover[disabled],.article .button.clear:hover[disabled],.button.clear.primary:focus.disabled,.article .button.clear:focus.disabled,.button.clear.primary:focus[disabled],.article .button.clear:focus[disabled]{border:1px solid #1779ba;color:#1779ba}.button.clear.primary,.article .button.clear,.button.clear.primary.disabled,.article .button.clear.disabled,.button.clear.primary[disabled],.article .button.clear[disabled],.button.clear.primary:hover,.article .button.clear:hover,.button.clear.primary:hover.disabled,.article .button.clear:hover.disabled,.button.clear.primary:hover[disabled],.article .button.clear:hover[disabled],.button.clear.primary:focus,.article .button.clear:focus,.button.clear.primary:focus.disabled,.article .button.clear:focus.disabled,.button.clear.primary:focus[disabled],.article .button.clear:focus[disabled]{border-color:transparent}.button.clear.secondary{border:1px solid #767676;color:#767676}.button.clear.secondary:hover,.button.clear.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button.clear.secondary:hover.disabled,.button.clear.secondary:hover[disabled],.button.clear.secondary:focus.disabled,.button.clear.secondary:focus[disabled]{border:1px solid #767676;color:#767676}.button.clear.secondary,.button.clear.secondary.disabled,.button.clear.secondary[disabled],.button.clear.secondary:hover,.button.clear.secondary:hover.disabled,.button.clear.secondary:hover[disabled],.button.clear.secondary:focus,.button.clear.secondary:focus.disabled,.button.clear.secondary:focus[disabled]{border-color:transparent}.button.clear.success{border:1px solid #3adb76;color:#3adb76}.button.clear.success:hover,.button.clear.success:focus{border-color:#157539;color:#157539}.button.clear.success:hover.disabled,.button.clear.success:hover[disabled],.button.clear.success:focus.disabled,.button.clear.success:focus[disabled]{border:1px solid #3adb76;color:#3adb76}.button.clear.success,.button.clear.success.disabled,.button.clear.success[disabled],.button.clear.success:hover,.button.clear.success:hover.disabled,.button.clear.success:hover[disabled],.button.clear.success:focus,.button.clear.success:focus.disabled,.button.clear.success:focus[disabled]{border-color:transparent}.button.clear.warning{border:1px solid #ffae00;color:#ffae00}.button.clear.warning:hover,.button.clear.warning:focus{border-color:#805700;color:#805700}.button.clear.warning:hover.disabled,.button.clear.warning:hover[disabled],.button.clear.warning:focus.disabled,.button.clear.warning:focus[disabled]{border:1px solid #ffae00;color:#ffae00}.button.clear.warning,.button.clear.warning.disabled,.button.clear.warning[disabled],.button.clear.warning:hover,.button.clear.warning:hover.disabled,.button.clear.warning:hover[disabled],.button.clear.warning:focus,.button.clear.warning:focus.disabled,.button.clear.warning:focus[disabled]{border-color:transparent}.button.clear.alert{border:1px solid #db2121;color:#db2121}.button.clear.alert:hover,.button.clear.alert:focus{border-color:#6e1111;color:#6e1111}.button.clear.alert:hover.disabled,.button.clear.alert:hover[disabled],.button.clear.alert:focus.disabled,.button.clear.alert:focus[disabled]{border:1px solid #db2121;color:#db2121}.button.clear.alert,.button.clear.alert.disabled,.button.clear.alert[disabled],.button.clear.alert:hover,.button.clear.alert:hover.disabled,.button.clear.alert:hover[disabled],.button.clear.alert:focus,.button.clear.alert:focus.disabled,.button.clear.alert:focus[disabled]{border-color:transparent}.button.dropdown::after{display:block;width:0;height:0;border:inset .4em;content:'';border-bottom-width:0;border-top-style:solid;border-color:#fefefe transparent transparent;position:relative;top:0.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.hollow::after,.button.dropdown.clear::after{border-top-color:#1779ba}.button.dropdown.hollow.primary::after,.article .button.dropdown.hollow::after,.button.dropdown.clear.primary::after,.article .button.dropdown.clear::after{border-top-color:#1779ba}.button.dropdown.hollow.secondary::after,.button.dropdown.clear.secondary::after{border-top-color:#767676}.button.dropdown.hollow.success::after,.button.dropdown.clear.success::after{border-top-color:#3adb76}.button.dropdown.hollow.warning::after,.button.dropdown.clear.warning::after{border-top-color:#ffae00}.button.dropdown.hollow.alert::after,.button.dropdown.clear.alert::after{border-top-color:#db2121}.button.arrow-only::after{top:-0.1em;float:none;margin-left:0}a.button:hover,a.button:focus{text-decoration:none}[type='text'],[type='password'],[type='date'],[type='datetime'],[type='datetime-local'],[type='month'],[type='week'],[type='email'],[type='number'],[type='search'],[type='tel'],[type='time'],[type='url'],[type='color'],textarea{display:block;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #d5d5d6;border-radius:0;background-color:#fefefe;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#2e2e2e;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;appearance:none}[type='text']:focus,[type='password']:focus,[type='date']:focus,[type='datetime']:focus,[type='datetime-local']:focus,[type='month']:focus,[type='week']:focus,[type='email']:focus,[type='number']:focus,[type='search']:focus,[type='tel']:focus,[type='time']:focus,[type='url']:focus,[type='color']:focus,textarea:focus{outline:none;border:1px solid #8a8a8a;background-color:#fcfcfc;box-shadow:0 0 5px #cacaca;transition:box-shadow 0.5s,border-color 0.25s ease-in-out}textarea{max-width:100%}textarea[rows]{height:auto}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type='submit'],[type='button']{appearance:none;border-radius:0}input[type='search']{box-sizing:border-box}::placeholder{color:#cacaca}[type='file'],[type='checkbox'],[type='radio']{margin:0 0 1rem}[type='checkbox']+label,[type='radio']+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type='checkbox']+label[for],[type='radio']+label[for]{cursor:pointer}label>[type='checkbox'],label>[type='radio']{margin-right:.5rem}[type='file']{width:100%}label{display:block;margin:0;font-size:.6875rem;font-weight:normal;line-height:1.8;color:#2e2e2e}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:flex;width:100%;margin-bottom:1rem;align-items:stretch}.input-group>:first-child,.input-group>:first-child.input-group-button>*{border-radius:0 0 0 0}.input-group>:last-child,.input-group>:last-child.input-group-button>*{border-radius:0 0 0 0}.input-group-label,.input-group-field,.input-group-button,.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{margin:0;white-space:nowrap}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;display:flex;flex:0 0 auto;align-items:center}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;flex:1 1 0px;min-width:0}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;display:flex;flex:0 0 auto}.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{align-self:stretch;height:auto;padding-top:0;padding-bottom:0;font-size:1rem}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;appearance:none;border:1px solid #d5d5d6;border-radius:0;background-color:#fefefe;font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#2e2e2e;background-image:url(\\\"data:image/svg+xml;utf8,\\\");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;transition:box-shadow 0.5s,border-color 0.25s ease-in-out}@media screen and (min-width: 0\\\\0){select{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==\\\")}}select:focus{outline:none;border:1px solid #8a8a8a;background-color:#fcfcfc;box-shadow:0 0 5px #cacaca;transition:box-shadow 0.5s,border-color 0.25s ease-in-out}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}.is-invalid-input:not(:focus){border-color:#db2121;background-color:#fbe8e8}.is-invalid-input:not(:focus)::placeholder{color:#db2121}.is-invalid-label{color:#db2121}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:bold;color:#db2121}.form-error.is-visible{display:block}.callout{position:relative;margin:0 0 1rem 0;padding:0.5rem 1rem;border:1px solid rgba(10,10,10,0.25);border-radius:0;background-color:#fefefe;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary,.article .callout.button{background-color:#1779ba;color:#fefefe}.callout.secondary{background-color:#767676;color:#fefefe}.callout.success{background-color:#3adb76;color:#0a0a0a}.callout.warning{background-color:#ffae00;color:#0a0a0a}.callout.alert{background-color:#db2121;color:#fefefe}.callout.small{padding-top:.5rem;padding-right:.5rem;padding-bottom:.5rem;padding-left:.5rem}.callout.large{padding-top:3rem;padding-right:3rem;padding-bottom:3rem;padding-left:3rem}.button-group{margin-bottom:1rem;display:flex;flex-wrap:nowrap;align-items:stretch}.button-group::before,.button-group::after{display:table;content:' ';flex-basis:0;order:1}.button-group::after{clear:both}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:0.9rem;flex:0 0 auto}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded .button{flex:1 1 0px}.button-group.primary .button,.article .button-group.button .button{background-color:#1779ba;color:#fefefe}.button-group.primary .button:hover,.article .button-group.button .button:hover,.button-group.primary .button:focus,.article .button-group.button .button:focus{background-color:#126195;color:#fefefe}.button-group.secondary .button{background-color:#767676;color:#fefefe}.button-group.secondary .button:hover,.button-group.secondary .button:focus{background-color:#5e5e5e;color:#fefefe}.button-group.success .button{background-color:#3adb76;color:#0a0a0a}.button-group.success .button:hover,.button-group.success .button:focus{background-color:#22bb5b;color:#0a0a0a}.button-group.warning .button{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:hover,.button-group.warning .button:focus{background-color:#cc8b00;color:#0a0a0a}.button-group.alert .button{background-color:#db2121;color:#fefefe}.button-group.alert .button:hover,.button-group.alert .button:focus{background-color:#af1a1a;color:#fefefe}.button-group.stacked,.button-group.stacked-for-small,.button-group.stacked-for-medium{flex-wrap:wrap}.button-group.stacked .button,.button-group.stacked-for-small .button,.button-group.stacked-for-medium .button{flex:0 0 100%}.button-group.stacked .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked-for-medium .button:last-child{margin-bottom:0}.button-group.stacked.expanded .button,.button-group.stacked-for-small.expanded .button,.button-group.stacked-for-medium.expanded .button{flex:1 1 0px}@media print, screen and (min-width: 40em){.button-group.stacked-for-small .button{flex:0 0 auto;margin-bottom:0}}@media print, screen and (min-width: 64em){.button-group.stacked-for-medium .button{flex:0 0 auto;margin-bottom:0}}@media screen and (max-width: 39.99875em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}@media screen and (max-width: 63.99875em){.button-group.stacked-for-medium.expanded{display:block}.button-group.stacked-for-medium.expanded .button{display:block;margin-right:0}}.close-button{position:absolute;color:#8a8a8a;cursor:pointer}[data-whatinput='mouse'] .close-button{outline:0}.close-button:hover,.close-button:focus{color:#0a0a0a}.close-button.small{right:0.66rem;top:0.33em;font-size:1.5em;line-height:1}.close-button,.close-button.medium{right:1rem;top:0.5rem;font-size:2em;line-height:1}.accordion{margin-left:0;background:#fefefe;list-style-type:none}.accordion[disabled] .accordion-title{cursor:not-allowed}.accordion-item:first-child>:first-child{border-radius:0 0 0 0}.accordion-item:last-child>:last-child{border-radius:0 0 0 0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #e6e6e6;border-bottom:0;font-size:.75rem;line-height:1;color:#8f1838}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #e6e6e6;border-radius:0 0 0 0}.accordion-title:hover,.accordion-title:focus{background-color:#e6e6e6}.accordion-title::before{position:absolute;top:50%;right:1rem;margin-top:-0.5rem;content:'+'}.is-active>.accordion-title::before{content:'\\\\2013'}.accordion-content{display:none;padding:1rem;border:1px solid #e6e6e6;border-bottom:0;background-color:#fefefe;color:#0a0a0a}:last-child>.accordion-content:last-child{border-bottom:1px solid #e6e6e6}.menu{padding:0;margin:0;list-style:none;position:relative;display:flex;flex-wrap:wrap}[data-whatinput='mouse'] .menu li{outline:0}.menu a,.menu .button{line-height:1;text-decoration:none;display:block;padding:0.7rem 1rem}.menu input,.menu select,.menu a,.menu button{margin-bottom:0}.menu input{display:inline-block}.menu,.menu.horizontal{flex-wrap:wrap;flex-direction:row}.menu.vertical{flex-wrap:nowrap;flex-direction:column}.menu.expanded li{flex:1 1 0px}.menu.simple{align-items:center}.menu.simple li+li{margin-left:1rem}.menu.simple a{padding:0}@media print, screen and (min-width: 40em){.menu.medium-horizontal{flex-wrap:wrap;flex-direction:row}.menu.medium-vertical{flex-wrap:nowrap;flex-direction:column}.menu.medium-expanded li{flex:1 1 0px}.menu.medium-simple li{flex:1 1 0px}}@media print, screen and (min-width: 64em){.menu.large-horizontal{flex-wrap:wrap;flex-direction:row}.menu.large-vertical{flex-wrap:nowrap;flex-direction:column}.menu.large-expanded li{flex:1 1 0px}.menu.large-simple li{flex:1 1 0px}}@media screen and (min-width: 75em){.menu.xlarge-horizontal{flex-wrap:wrap;flex-direction:row}.menu.xlarge-vertical{flex-wrap:nowrap;flex-direction:column}.menu.xlarge-expanded li{flex:1 1 0px}.menu.xlarge-simple li{flex:1 1 0px}}.menu.nested{margin-right:0;margin-left:1rem}.menu.icons a{display:flex}.menu.icon-top a,.menu.icon-right a,.menu.icon-bottom a,.menu.icon-left a{display:flex}.menu.icon-left li a{flex-flow:row nowrap}.menu.icon-left li a img,.menu.icon-left li a i,.menu.icon-left li a svg{margin-right:.25rem}.menu.icon-right li a{flex-flow:row nowrap}.menu.icon-right li a img,.menu.icon-right li a i,.menu.icon-right li a svg{margin-left:.25rem}.menu.icon-top li a{flex-flow:column nowrap}.menu.icon-top li a img,.menu.icon-top li a i,.menu.icon-top li a svg{align-self:stretch;margin-bottom:.25rem;text-align:center}.menu.icon-bottom li a{flex-flow:column nowrap}.menu.icon-bottom li a img,.menu.icon-bottom li a i,.menu.icon-bottom li a svg{align-self:stretch;margin-bottom:.25rem;text-align:center}.menu .is-active>a{background:#414244;color:#fefefe}.menu .active>a{background:#414244;color:#fefefe}.menu.align-left{justify-content:flex-start}.menu.align-right li{display:flex;justify-content:flex-end}.menu.align-right li .submenu li{justify-content:flex-start}.menu.align-right.vertical li{display:block;text-align:right}.menu.align-right.vertical li .submenu li{text-align:right}.menu.align-right .nested{margin-right:1rem;margin-left:0}.menu.align-center li{display:flex;justify-content:center}.menu.align-center li .submenu li{justify-content:flex-start}.menu .menu-text{padding:0.7rem 1rem;font-weight:bold;line-height:1;color:inherit}.menu-centered>.menu{justify-content:center}.menu-centered>.menu li{display:flex;justify-content:center}.menu-centered>.menu li .submenu li{justify-content:flex-start}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:''}.menu-icon:hover::after{background:#cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:''}.menu-icon.dark:hover::after{background:#8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{transition:height 0.5s}.drilldown a{padding:0.7rem 1rem;background:#fefefe}.drilldown .is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;transition:transform 0.15s linear}.drilldown .is-drilldown-submenu.is-active{z-index:1;display:block;transform:translateX(-100%)}.drilldown .is-drilldown-submenu.is-closing{transform:translateX(100%)}.drilldown .is-drilldown-submenu a{padding:0.7rem 1rem}.drilldown .nested.is-drilldown-submenu{margin-right:0;margin-left:0}.drilldown .drilldown-submenu-cover-previous{min-height:100%}.drilldown .is-drilldown-submenu-parent>a{position:relative}.drilldown .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;position:absolute;top:50%;margin-top:-6px;right:1rem}.drilldown.align-left .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #ababad;right:1rem;left:auto}.drilldown.align-right .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #ababad transparent transparent;right:auto;left:1rem}.drilldown .js-drilldown-back>a::before{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;display:inline-block;vertical-align:middle;margin-right:0.75rem}.dropdown-pane{position:absolute;z-index:10;display:none;width:300px;padding:1rem;visibility:hidden;border:0;border-radius:0;background-color:#55565a;font-size:1rem}.dropdown-pane.is-opening{display:block}.dropdown-pane.is-open{display:block;visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#ababad transparent transparent;right:5px;left:auto;margin-top:-3px}[data-whatinput='mouse'] .dropdown.menu a{outline:0}.dropdown.menu>li>a{background:#55565a;padding:0.7rem 1rem}.dropdown.menu>li.is-active>a{background:rgba(0,0,0,0);color:#1779ba}.no-js .dropdown.menu ul{display:none}.dropdown.menu .nested.is-dropdown-submenu{margin-right:0;margin-left:0}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a::after{right:14px}.dropdown.menu.vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #ababad transparent transparent;right:auto;left:5px}.dropdown.menu.vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #ababad}@media print, screen and (min-width: 40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#ababad transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a::after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #ababad transparent transparent;right:auto;left:5px}.dropdown.menu.medium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #ababad}}@media print, screen and (min-width: 64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#ababad transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a::after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #ababad transparent transparent;right:auto;left:5px}.dropdown.menu.large-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #ababad}}@media screen and (min-width: 75em){.dropdown.menu.xlarge-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.xlarge-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.xlarge-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.xlarge-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#ababad transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.xlarge-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.xlarge-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.xlarge-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.xlarge-vertical>li>a::after{right:14px}.dropdown.menu.xlarge-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #ababad transparent transparent;right:auto;left:5px}.dropdown.menu.xlarge-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #ababad}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a::after{position:absolute;top:50%;right:5px;left:auto;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:0;background:#55565a}.dropdown .is-dropdown-submenu a{padding:0.7rem 1rem}.is-dropdown-submenu .is-dropdown-submenu-parent>a::after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #ababad transparent transparent;right:auto;left:5px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #ababad}.is-dropdown-submenu .is-dropdown-submenu{margin-top:0}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;transition:opacity .5s ease,visibility .5s ease;background:rgba(254,254,254,0.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:12;transition:transform .5s ease;backface-visibility:hidden;background:#55565a}[data-whatinput='mouse'] .off-canvas{outline:0}.off-canvas.is-transition-push{z-index:12}.off-canvas.is-closed{visibility:hidden}.off-canvas.is-transition-overlap{z-index:13}.off-canvas.is-transition-overlap.is-open{box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas.is-open{transform:translate(0, 0)}.off-canvas-absolute{position:absolute;z-index:12;transition:transform .5s ease;backface-visibility:hidden;background:#55565a}[data-whatinput='mouse'] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-push{z-index:12}.off-canvas-absolute.is-closed{visibility:hidden}.off-canvas-absolute.is-transition-overlap{z-index:13}.off-canvas-absolute.is-transition-overlap.is-open{box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas-absolute.is-open{transform:translate(0, 0)}.position-left{top:0;left:0;height:100%;overflow-y:auto;width:250px;transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left{transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open{transform:translate(0, 0)}.off-canvas-content.is-open-left.has-transition-push{transform:translateX(250px)}.position-left.is-transition-push{box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25)}.position-right{top:0;right:0;height:100%;overflow-y:auto;width:250px;transform:translateX(250px)}.off-canvas-content .off-canvas.position-right{transform:translateX(250px)}.off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open{transform:translate(0, 0)}.off-canvas-content.is-open-right.has-transition-push{transform:translateX(-250px)}.position-right.is-transition-push{box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25)}.position-top{top:0;left:0;width:100%;overflow-x:auto;height:250px;transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top{transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open{transform:translate(0, 0)}.off-canvas-content.is-open-top.has-transition-push{transform:translateY(250px)}.position-top.is-transition-push{box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25)}.position-bottom{bottom:0;left:0;width:100%;overflow-x:auto;height:250px;transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom{transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open{transform:translate(0, 0)}.off-canvas-content.is-open-bottom.has-transition-push{transform:translateY(-250px)}.position-bottom.is-transition-push{box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25)}.off-canvas-content{transform:none;transition:transform .5s ease;backface-visibility:hidden}.off-canvas-content.has-transition-push{transform:translate(0, 0)}.off-canvas-content .off-canvas.is-open{transform:translate(0, 0)}@media print, screen and (min-width: 40em){.position-left.reveal-for-medium{transform:none;z-index:12;transition:none;visibility:visible}.position-left.reveal-for-medium .close-button{display:none}.off-canvas-content .position-left.reveal-for-medium{transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-medium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{transform:none;z-index:12;transition:none;visibility:visible}.position-right.reveal-for-medium .close-button{display:none}.off-canvas-content .position-right.reveal-for-medium{transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-medium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{transform:none;z-index:12;transition:none;visibility:visible}.position-top.reveal-for-medium .close-button{display:none}.off-canvas-content .position-top.reveal-for-medium{transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-medium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{transform:none;z-index:12;transition:none;visibility:visible}.position-bottom.reveal-for-medium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-medium{transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-medium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 64em){.position-left.reveal-for-large{transform:none;z-index:12;transition:none;visibility:visible}.position-left.reveal-for-large .close-button{display:none}.off-canvas-content .position-left.reveal-for-large{transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-large ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-large{transform:none;z-index:12;transition:none;visibility:visible}.position-right.reveal-for-large .close-button{display:none}.off-canvas-content .position-right.reveal-for-large{transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-large ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-large{transform:none;z-index:12;transition:none;visibility:visible}.position-top.reveal-for-large .close-button{display:none}.off-canvas-content .position-top.reveal-for-large{transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-large ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{transform:none;z-index:12;transition:none;visibility:visible}.position-bottom.reveal-for-large .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-large{transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-large ~ .off-canvas-content{margin-bottom:250px}}@media screen and (min-width: 75em){.position-left.reveal-for-xlarge{transform:none;z-index:12;transition:none;visibility:visible}.position-left.reveal-for-xlarge .close-button{display:none}.off-canvas-content .position-left.reveal-for-xlarge{transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-xlarge ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-xlarge{transform:none;z-index:12;transition:none;visibility:visible}.position-right.reveal-for-xlarge .close-button{display:none}.off-canvas-content .position-right.reveal-for-xlarge{transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-xlarge ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-xlarge{transform:none;z-index:12;transition:none;visibility:visible}.position-top.reveal-for-xlarge .close-button{display:none}.off-canvas-content .position-top.reveal-for-xlarge{transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-xlarge ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-xlarge{transform:none;z-index:12;transition:none;visibility:visible}.position-bottom.reveal-for-xlarge .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-xlarge{transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-xlarge ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 40em){.off-canvas.in-canvas-for-medium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;transition:none}.off-canvas.in-canvas-for-medium.position-left,.off-canvas.in-canvas-for-medium.position-right,.off-canvas.in-canvas-for-medium.position-top,.off-canvas.in-canvas-for-medium.position-bottom{box-shadow:none;transform:none}.off-canvas.in-canvas-for-medium .close-button{display:none}}@media print, screen and (min-width: 64em){.off-canvas.in-canvas-for-large{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;transition:none}.off-canvas.in-canvas-for-large.position-left,.off-canvas.in-canvas-for-large.position-right,.off-canvas.in-canvas-for-large.position-top,.off-canvas.in-canvas-for-large.position-bottom{box-shadow:none;transform:none}.off-canvas.in-canvas-for-large .close-button{display:none}}@media screen and (min-width: 75em){.off-canvas.in-canvas-for-xlarge{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;transition:none}.off-canvas.in-canvas-for-xlarge.position-left,.off-canvas.in-canvas-for-xlarge.position-right,.off-canvas.in-canvas-for-xlarge.position-top,.off-canvas.in-canvas-for-xlarge.position-bottom{box-shadow:none;transform:none}.off-canvas.in-canvas-for-xlarge .close-button{display:none}}.pagination{margin-left:0;margin-bottom:1rem}.pagination::before,.pagination::after{display:table;content:' ';flex-basis:0;order:1}.pagination::after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:last-child,.pagination li:first-child{display:inline-block}@media print, screen and (min-width: 40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#1779ba;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis::after{padding:.1875rem .625rem;content:'\\\\2026';color:#0a0a0a}.pagination-previous a::before,.pagination-previous.disabled::before{display:inline-block;margin-right:0.5rem;content:'\\\\00ab'}.pagination-next a::after,.pagination-next.disabled::after{display:inline-block;margin-left:0.5rem;content:'\\\\00bb'}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#cacaca}.progress.primary .progress-meter,.article .progress.button .progress-meter{background-color:#1779ba}.progress.secondary .progress-meter{background-color:#767676}.progress.success .progress-meter{background-color:#3adb76}.progress.warning .progress-meter{background-color:#ffae00}.progress.alert .progress-meter{background-color:#db2121}.progress-meter{position:relative;display:block;width:0%;height:100%;background-color:#1779ba}.progress-meter-text{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);margin:0;font-size:0.75rem;font-weight:bold;color:#fefefe;white-space:nowrap}.slider{position:relative;height:.35rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#676767;cursor:pointer;user-select:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.35rem;background-color:#e6e6e6;transition:all 0.2s ease-in-out}.slider-fill.is-dragging{transition:all 0s linear}.slider-handle{position:absolute;top:50%;transform:translateY(-50%);left:0;z-index:1;display:inline-block;width:1rem;height:1rem;border-radius:0;background-color:#cc2350;transition:all 0.2s ease-in-out;touch-action:manipulation}[data-whatinput='mouse'] .slider-handle{outline:0}.slider-handle:hover{background-color:#ad1e44}.slider-handle.is-dragging{transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;transform:scale(1, -1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1rem;height:1rem;transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:bold;color:#fefefe;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#cacaca;transition:all 0.25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle::after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;transform:translate3d(0, 0, 0);border-radius:0;background:#fefefe;transition:all 0.25s ease-out;content:''}input:checked ~ .switch-paddle{background:#1779ba}input:checked ~ .switch-paddle::after{left:2.25rem}[data-whatinput='mouse'] input:focus ~ .switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle::after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked ~ .switch-paddle::after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle::after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked ~ .switch-paddle::after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle::after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked ~ .switch-paddle::after{left:2.75rem}table{border-collapse:collapse;width:100%;margin-bottom:1rem;border-radius:0}thead,tbody,tfoot{border:0;background-color:#fefefe}caption{padding:1rem;font-weight:bold}thead{background:#fff;color:#8f1838}tfoot{background:#f1f1f1;color:#0a0a0a}thead tr,tfoot tr{background:transparent}thead th,thead td,tfoot th,tfoot td{padding:1rem;font-weight:bold;text-align:left}tbody th,tbody td{padding:1rem}tbody tr{border-bottom:0;border-bottom:0;background-color:#fefefe}table.striped tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}@media screen and (max-width: 63.99875em){table.stack thead{display:none}table.stack tfoot{display:none}table.stack tr,table.stack th,table.stack td{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#fafafa}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f8f7}table.hover.striped tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.tabs{margin:0;border:1px solid #e6e6e6;background:#e6e6e6;list-style-type:none}.tabs::before,.tabs::after{display:table;content:' ';flex-basis:0;order:1}.tabs::after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:transparent}.tabs.primary,.article .tabs.button{background:#1779ba}.tabs.primary>li>a,.article .tabs.button>li>a{color:#fefefe}.tabs.primary>li>a:hover,.article .tabs.button>li>a:hover,.tabs.primary>li>a:focus,.article .tabs.button>li>a:focus{background:#1673b1}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#2e2e2e}[data-whatinput='mouse'] .tabs-title>a{outline:0}.tabs-title>a:hover{background:#fff;color:#282828}.tabs-title>a:focus,.tabs-title>a[aria-selected='true']{background:#fefefe;color:#8f1838}.tabs-content{border:1px solid #e6e6e6;border-top:0;background:#fefefe;color:#0a0a0a;transition:all 0.5s ease}.tabs-content.vertical{border:1px solid #e6e6e6;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel.is-active{display:block}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe;display:flex;justify-content:flex-start;align-items:center}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left,.title-bar-right{flex:1 1 0px}.title-bar-right{text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:bold}.has-tip{position:relative;display:inline-block;border-bottom:none;font-weight:bold;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:0.5rem 0.75rem;border-radius:0;background-color:#2e2e2e;font-size:.75rem;color:#fefefe}.tooltip::before{position:absolute}.tooltip.bottom::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #2e2e2e;bottom:100%}.tooltip.bottom.align-center::before{left:50%;transform:translateX(-50%)}.tooltip.top::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-bottom-width:0;border-top-style:solid;border-color:#2e2e2e transparent transparent;top:100%;bottom:auto}.tooltip.top.align-center::before{left:50%;transform:translateX(-50%)}.tooltip.left::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #2e2e2e;left:100%}.tooltip.left.align-center::before{bottom:auto;top:50%;transform:translateY(-50%)}.tooltip.right::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #2e2e2e transparent transparent;right:100%;left:auto}.tooltip.right.align-center::before{bottom:auto;top:50%;transform:translateY(-50%)}.tooltip.align-top::before{bottom:auto;top:10%}.tooltip.align-bottom::before{bottom:10%;top:auto}.tooltip.align-left::before{left:10%;right:auto}.tooltip.align-right::before{left:auto;right:10%}.top-bar{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;padding:.5rem;flex-wrap:wrap}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{flex:0 0 100%;max-width:100%}@media print, screen and (min-width: 40em){.top-bar{flex-wrap:nowrap}.top-bar .top-bar-left{flex:1 1 auto;margin-right:auto}.top-bar .top-bar-right{flex:0 1 auto;margin-left:auto}}@media screen and (max-width: 63.99875em){.top-bar.stacked-for-medium{flex-wrap:wrap}.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{flex:0 0 100%;max-width:100%}}@media screen and (max-width: 74.99875em){.top-bar.stacked-for-large{flex-wrap:wrap}.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{flex:0 0 100%;max-width:100%}}@media screen and (max-width: 89.99875em){.top-bar.stacked-for-xlarge{flex-wrap:wrap}.top-bar.stacked-for-xlarge .top-bar-left,.top-bar.stacked-for-xlarge .top-bar-right{flex:0 0 100%;max-width:100%}}.top-bar-title{flex:0 0 auto;margin:0.5rem 1rem 0.5rem 0}.top-bar-left,.top-bar-right{flex:0 0 auto}.hide{display:none !important}.invisible{visibility:hidden}@media screen and (max-width: 39.99875em){.hide-for-small-only{display:none !important}}@media screen and (max-width: 0em), screen and (min-width: 40em){.show-for-small-only{display:none !important}}@media print, screen and (min-width: 40em){.hide-for-medium{display:none !important}}@media screen and (max-width: 39.99875em){.show-for-medium{display:none !important}}@media screen and (min-width: 40em) and (max-width: 63.99875em){.hide-for-medium-only{display:none !important}}@media screen and (max-width: 39.99875em), screen and (min-width: 64em){.show-for-medium-only{display:none !important}}@media print, screen and (min-width: 64em){.hide-for-large{display:none !important}}@media screen and (max-width: 63.99875em){.show-for-large{display:none !important}}@media screen and (min-width: 64em) and (max-width: 74.99875em){.hide-for-large-only{display:none !important}}@media screen and (max-width: 63.99875em), screen and (min-width: 75em){.show-for-large-only{display:none !important}}@media screen and (min-width: 75em){.hide-for-xlarge{display:none !important}}@media screen and (max-width: 74.99875em){.show-for-xlarge{display:none !important}}@media screen and (min-width: 75em) and (max-width: 89.99875em){.hide-for-xlarge-only{display:none !important}}@media screen and (max-width: 74.99875em), screen and (min-width: 90em){.show-for-xlarge-only{display:none !important}}.show-for-sr,.show-on-focus{position:absolute !important;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.show-on-focus:active,.show-on-focus:focus{position:static !important;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.show-for-landscape,.hide-for-portrait{display:block !important}@media screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:block !important}}@media screen and (orientation: portrait){.show-for-landscape,.hide-for-portrait{display:none !important}}.hide-for-landscape,.show-for-portrait{display:none !important}@media screen and (orientation: landscape){.hide-for-landscape,.show-for-portrait{display:none !important}}@media screen and (orientation: portrait){.hide-for-landscape,.show-for-portrait{display:block !important}}.float-left{float:left !important}.float-right{float:right !important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix::before,.clearfix::after{display:table;content:' ';flex-basis:0;order:1}.clearfix::after{clear:both}.responsive-embed,.flex-video{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.responsive-embed iframe,.responsive-embed object,.responsive-embed embed,.responsive-embed video,.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{position:absolute;top:0;left:0;width:100%;height:100%}.responsive-embed.widescreen,.flex-video.widescreen{padding-bottom:56.25%}.slide-in-down.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:translateY(-100%);transition-property:transform, opacity;backface-visibility:hidden}.slide-in-down.mui-enter.mui-enter-active{transform:translateY(0)}.slide-in-left.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:translateX(-100%);transition-property:transform, opacity;backface-visibility:hidden}.slide-in-left.mui-enter.mui-enter-active{transform:translateX(0)}.slide-in-up.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:translateY(100%);transition-property:transform, opacity;backface-visibility:hidden}.slide-in-up.mui-enter.mui-enter-active{transform:translateY(0)}.slide-in-right.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:translateX(100%);transition-property:transform, opacity;backface-visibility:hidden}.slide-in-right.mui-enter.mui-enter-active{transform:translateX(0)}.slide-out-down.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:translateY(0);transition-property:transform, opacity;backface-visibility:hidden}.slide-out-down.mui-leave.mui-leave-active{transform:translateY(100%)}.slide-out-right.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:translateX(0);transition-property:transform, opacity;backface-visibility:hidden}.slide-out-right.mui-leave.mui-leave-active{transform:translateX(100%)}.slide-out-up.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:translateY(0);transition-property:transform, opacity;backface-visibility:hidden}.slide-out-up.mui-leave.mui-leave-active{transform:translateY(-100%)}.slide-out-left.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:translateX(0);transition-property:transform, opacity;backface-visibility:hidden}.slide-out-left.mui-leave.mui-leave-active{transform:translateX(-100%)}.fade-in.mui-enter{transition-duration:500ms;transition-timing-function:linear;opacity:0;transition-property:opacity}.fade-in.mui-enter.mui-enter-active{opacity:1}.fade-out.mui-leave{transition-duration:500ms;transition-timing-function:linear;opacity:1;transition-property:opacity}.fade-out.mui-leave.mui-leave-active{opacity:0}.hinge-in-from-top.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotateX(-90deg);transform-origin:top;transition-property:transform, opacity;opacity:0}.hinge-in-from-top.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-right.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotateY(-90deg);transform-origin:right;transition-property:transform, opacity;opacity:0}.hinge-in-from-right.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-bottom.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotateX(90deg);transform-origin:bottom;transition-property:transform, opacity;opacity:0}.hinge-in-from-bottom.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-left.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotateY(90deg);transform-origin:left;transition-property:transform, opacity;opacity:0}.hinge-in-from-left.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-middle-x.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotateX(-90deg);transform-origin:center;transition-property:transform, opacity;opacity:0}.hinge-in-from-middle-x.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-middle-y.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotateY(-90deg);transform-origin:center;transition-property:transform, opacity;opacity:0}.hinge-in-from-middle-y.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-out-from-top.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:top;transition-property:transform, opacity;opacity:1}.hinge-out-from-top.mui-leave.mui-leave-active{transform:perspective(2000px) rotateX(90deg);opacity:0}.hinge-out-from-right.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:right;transition-property:transform, opacity;opacity:1}.hinge-out-from-right.mui-leave.mui-leave-active{transform:perspective(2000px) rotateY(90deg);opacity:0}.hinge-out-from-bottom.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:bottom;transition-property:transform, opacity;opacity:1}.hinge-out-from-bottom.mui-leave.mui-leave-active{transform:perspective(2000px) rotateX(-90deg);opacity:0}.hinge-out-from-left.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:left;transition-property:transform, opacity;opacity:1}.hinge-out-from-left.mui-leave.mui-leave-active{transform:perspective(2000px) rotateY(-90deg);opacity:0}.hinge-out-from-middle-x.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:center;transition-property:transform, opacity;opacity:1}.hinge-out-from-middle-x.mui-leave.mui-leave-active{transform:perspective(2000px) rotateX(90deg);opacity:0}.hinge-out-from-middle-y.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:center;transition-property:transform, opacity;opacity:1}.hinge-out-from-middle-y.mui-leave.mui-leave-active{transform:perspective(2000px) rotateY(90deg);opacity:0}.scale-in-up.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:scale(.5);transition-property:transform, opacity;opacity:0}.scale-in-up.mui-enter.mui-enter-active{transform:scale(1);opacity:1}.scale-in-down.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:scale(1.5);transition-property:transform, opacity;opacity:0}.scale-in-down.mui-enter.mui-enter-active{transform:scale(1);opacity:1}.scale-out-up.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:scale(1);transition-property:transform, opacity;opacity:1}.scale-out-up.mui-leave.mui-leave-active{transform:scale(1.5);opacity:0}.scale-out-down.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:scale(1);transition-property:transform, opacity;opacity:1}.scale-out-down.mui-leave.mui-leave-active{transform:scale(.5);opacity:0}.spin-in.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:rotate(-.75turn);transition-property:transform, opacity;opacity:0}.spin-in.mui-enter.mui-enter-active{transform:rotate(0);opacity:1}.spin-out.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:rotate(0);transition-property:transform, opacity;opacity:1}.spin-out.mui-leave.mui-leave-active{transform:rotate(.75turn);opacity:0}.spin-in-ccw.mui-enter{transition-duration:500ms;transition-timing-function:linear;transform:rotate(.75turn);transition-property:transform, opacity;opacity:0}.spin-in-ccw.mui-enter.mui-enter-active{transform:rotate(0);opacity:1}.spin-out-ccw.mui-leave{transition-duration:500ms;transition-timing-function:linear;transform:rotate(0);transition-property:transform, opacity;opacity:1}.spin-out-ccw.mui-leave.mui-leave-active{transform:rotate(-.75turn);opacity:0}.slow{transition-duration:750ms !important}.fast{transition-duration:250ms !important}.linear{transition-timing-function:linear !important}.ease{transition-timing-function:ease !important}.ease-in{transition-timing-function:ease-in !important}.ease-out{transition-timing-function:ease-out !important}.ease-in-out{transition-timing-function:ease-in-out !important}.bounce-in{transition-timing-function:cubic-bezier(0.485, 0.155, 0.24, 1.245) !important}.bounce-out{transition-timing-function:cubic-bezier(0.485, 0.155, 0.515, 0.845) !important}.bounce-in-out{transition-timing-function:cubic-bezier(0.76, -0.245, 0.24, 1.245) !important}.short-delay{transition-delay:300ms !important}.long-delay{transition-delay:700ms !important}.shake{animation-name:shake-7}@keyframes shake-7{0%,10%,20%,30%,40%,50%,60%,70%,80%,90%{transform:translateX(7%)}5%,15%,25%,35%,45%,55%,65%,75%,85%,95%{transform:translateX(-7%)}}.spin-cw{animation-name:spin-cw-1turn}@keyframes spin-cw-1turn{0%{transform:rotate(-1turn)}100%{transform:rotate(0)}}.spin-ccw{animation-name:spin-ccw-1turn}@keyframes spin-ccw-1turn{0%{transform:rotate(0)}100%{transform:rotate(-1turn)}}.wiggle{animation-name:wiggle-7deg}@keyframes wiggle-7deg{40%,50%,60%{transform:rotate(7deg)}35%,45%,55%,65%{transform:rotate(-7deg)}0%,30%,70%,100%{transform:rotate(0)}}.shake,.spin-cw,.spin-ccw,.wiggle{animation-duration:500ms}.infinite{animation-iteration-count:infinite}.slow{animation-duration:750ms !important}.fast{animation-duration:250ms !important}.linear{animation-timing-function:linear !important}.ease{animation-timing-function:ease !important}.ease-in{animation-timing-function:ease-in !important}.ease-out{animation-timing-function:ease-out !important}.ease-in-out{animation-timing-function:ease-in-out !important}.bounce-in{animation-timing-function:cubic-bezier(0.485, 0.155, 0.24, 1.245) !important}.bounce-out{animation-timing-function:cubic-bezier(0.485, 0.155, 0.515, 0.845) !important}.bounce-in-out{animation-timing-function:cubic-bezier(0.76, -0.245, 0.24, 1.245) !important}.short-delay{animation-delay:300ms !important}.long-delay{animation-delay:700ms !important}body{background:#fff}datagrid .ag-row.row-actions.actions-persistent,datagrid tbody tr td.row-actions.actions-persistent,table.table .ag-row.row-actions.actions-persistent,table.table tbody tr td.row-actions.actions-persistent{border-left:1px solid #efefef !important}datagrid .ag-row.row-actions.actions-persistent button,datagrid tbody tr td.row-actions.actions-persistent button,table.table .ag-row.row-actions.actions-persistent button,table.table tbody tr td.row-actions.actions-persistent button{opacity:1 !important}@media print, screen and (min-width: 40em){.no-navigation .page-content{padding-left:0}.no-navigation header,.no-navigation .top-bar{left:0}}.no-navigation .page-content{padding-bottom:1.25rem;margin-bottom:0}ul.no-margin{margin-bottom:0 !important}.nowrap{white-space:nowrap}.page-content{background:#fefefe;padding-bottom:1px}.hover-pointer:hover{cursor:pointer}html,body{height:100%;min-height:320px}.off-canvas-content{min-height:500px}.contain{max-width:1600px;margin:0 auto}.row.tight{padding-left:25px;padding-right:25px}@media screen and (max-width: 39.99875em){.row.tight{padding-left:5px;padding-right:5px}}.row.tight>.columns{padding:5px}.page-content{position:relative;padding-bottom:3rem;padding-top:6.25rem;padding-left:3.125rem}@media screen and (max-width: 39.99875em){.page-content{padding-top:0;margin-bottom:55px}}@media screen and (max-width: 39.99875em){.page-content{padding-left:0}}.point-detail{padding-left:1.75rem;padding-right:1.75rem}@media screen and (max-width: 39.99875em){.point-detail{padding-left:0;padding-right:0}}.legal-text{font-size:.8125rem}.legal-text a{font-size:.8125rem;margin:0;text-decoration:underline}button,.button{transition:ease all .25s}.button.clear,button.clear{border:2px solid #fff;background:none transparent;text-transform:uppercase;transition:ease all .25s;color:#fff}.button.clear:hover,.button.clear:active,.button.clear:focus,button.clear:hover,button.clear:active,button.clear:focus{background:#fff;color:#2e2e2e}.button.clear.maroon,button.clear.maroon{color:#8f1838;border:2px solid #8f1838;padding:.85em 1em;display:inline-block;font-size:.75rem}.button.primary,.form-block .article .button,.article .button,button.primary,.form-block .article button.button,.article button.button{background:#8f1838;text-transform:uppercase;font-size:.75rem;color:#fff;margin:0 0 1rem;padding:.85em 1em;border:2px solid #8f1838}.button.primary:hover,.article .button:hover,.button.primary:active,.article .button:active,.button.primary:focus,.article .button:focus,button.primary:hover,.article button.button:hover,button.primary:active,.article button.button:active,button.primary:focus,.article button.button:focus{background:#ae1e44;border:2px solid #ae1e44}.button.primary.large,.article .button.large,button.primary.large,.article button.large.button{font-size:.875rem}.button.primary.clear,.article .button.clear,button.primary.clear,.article button.clear.button{color:#8f1838;border:2px solid #8f1838;background:none transparent}.button.primary.clear:hover,.article .button.clear:hover,.button.primary.clear:active,.article .button.clear:active,.button.primary.clear:focus,.article .button.clear:focus,button.primary.clear:hover,.article button.clear.button:hover,button.primary.clear:active,.article button.clear.button:active,button.primary.clear:focus,.article button.clear.button:focus{background:#ae1e44;border:2px solid #ae1e44;color:#fff}.button.secondary,button.secondary{background:#919194;text-transform:uppercase;font-size:.75rem;color:#fff;margin:0 0 1rem;padding:.85em 1em;border:2px solid #919194}.button.secondary.large,button.secondary.large{font-size:.875rem}.button.secondary.clear,button.secondary.clear{color:#919194;border:2px solid #919194;background:none transparent}.button.secondary.clear:hover,.button.secondary.clear:active,.button.secondary.clear:focus,button.secondary.clear:hover,button.secondary.clear:active,button.secondary.clear:focus{background:#919194;color:#fff}button:disabled,button.disabled,button[disabled],.button:disabled,.button.disabled,.button[disabled],article .button:disabled,article .button.disabled,article .button[disabled],article button:disabled,article button.disabled,article button[disabled]{cursor:not-allowed;opacity:.35}button:disabled.primary,.article button.button:disabled,button.disabled.primary,.article button.disabled.button,button[disabled].primary,.article button.button[disabled],.button:disabled.primary,.article .button:disabled,.button.disabled.primary,.article .button.disabled,.button[disabled].primary,.article .button[disabled],article .button:disabled.primary,article .article .button:disabled,.article article .button:disabled,article .button.disabled.primary,article .article .button.disabled,.article article .button.disabled,article .button[disabled].primary,article .article .button[disabled],.article article .button[disabled],article button:disabled.primary,article .article button.button:disabled,.article article button.button:disabled,article button.disabled.primary,article .article button.disabled.button,.article article button.disabled.button,article button[disabled].primary,article .article button.button[disabled],.article article button.button[disabled]{background:#8f1838 !important;border:2px solid #8f1838 !important}button:disabled.primary.clear,.article button.button:disabled.clear,button.disabled.primary.clear,.article button.disabled.clear.button,button[disabled].primary.clear,.article button.button[disabled].clear,.button:disabled.primary.clear,.article .button:disabled.clear,.button.disabled.primary.clear,.article .button.disabled.clear,.button[disabled].primary.clear,.article .button[disabled].clear,article .button:disabled.primary.clear,article .article .button:disabled.clear,.article article .button:disabled.clear,article .button.disabled.primary.clear,article .article .button.disabled.clear,.article article .button.disabled.clear,article .button[disabled].primary.clear,article .article .button[disabled].clear,.article article .button[disabled].clear,article button:disabled.primary.clear,article .article button.button:disabled.clear,.article article button.button:disabled.clear,article button.disabled.primary.clear,article .article button.disabled.clear.button,.article article button.disabled.clear.button,article button[disabled].primary.clear,article .article button.button[disabled].clear,.article article button.button[disabled].clear{background:#fff !important;color:#8f1838 !important}.off-canvas .filter-buttons .columns{padding:5px}.off-canvas .apply-filters,.off-canvas .clear-filters{display:block;width:100%;margin-bottom:0;padding-left:1rem;padding-right:1rem;text-align:center;padding-top:.5rem !important;padding-bottom:0.5rem !important}.off-canvas .apply-filters .fa,.off-canvas .clear-filters .fa{margin-right:2px}.off-canvas .clear-filters{border:2px solid #919194;background:none transparent}.off-canvas .clear-filters:hover,.off-canvas .clear-filters:focus,.off-canvas .clear-filters:active{background:#919194}.sidebar a.site-detail-edit{padding:0 20px 0 29px;text-align:left;color:#2e2e2e;text-transform:none;font-size:.6875rem;border:none;position:relative;height:2.4375rem;line-height:normal !important;margin:.5rem 0 0 0;position:relative;top:-8px;margin-top:.75rem;display:block}.sidebar a.site-detail-edit .fa{color:#8f1838;font-size:1.25rem;position:absolute;top:4px;left:0;margin-right:3px;width:1.5rem;text-align:center;float:left;display:inline-block}.sidebar a.site-detail-edit:hover .fa,.sidebar a.site-detail-edit:active .fa,.sidebar a.site-detail-edit:focus .fa{color:#cc2350}button.icon-form-spacing,.button.icon-form-spacing{background:none transparent;margin:1.625rem 0 0 0;padding:0 10px 0 40px;transition:ease all .25s;text-align:left;color:#2e2e2e;text-transform:none;font-size:.6875rem;border:none;position:relative;line-height:normal !important}button.icon-form-spacing i.fa,.button.icon-form-spacing i.fa{transition:ease all .25s;color:#8f1838 !important;font-size:1.25rem;position:absolute;top:0;left:10px;margin-right:3px;width:1.5rem;height:auto !important;line-height:normal;text-align:center;float:left;margin-top:-.375rem}button.icon-form-spacing:hover,button.icon-form-spacing:active,button.icon-form-spacing:focus,.button.icon-form-spacing:hover,.button.icon-form-spacing:active,.button.icon-form-spacing:focus{background:none transparent !important}button.icon-form-spacing:hover i.fa,button.icon-form-spacing:active i.fa,button.icon-form-spacing:focus i.fa,.button.icon-form-spacing:hover i.fa,.button.icon-form-spacing:active i.fa,.button.icon-form-spacing:focus i.fa{color:#cc2350 !important}@media screen and (max-width: 39.99875em){.off-canvas-wrapper{position:relative;min-height:100%}}.off-canvas.is-closed{visibility:visible}.off-canvas{background:#55565a;overflow:hidden;width:180px;transform:translateX(-130px);z-index:999}.off-canvas .menu label,.off-canvas .accordion label{color:#c7c7c7;font-size:0.6875rem}.off-canvas .menu a,.off-canvas .menu label.sidebar-checkbox-label,.off-canvas .accordion a,.off-canvas .accordion label.sidebar-checkbox-label{padding:0;font-size:0.75rem;color:#c7c7c7;background:none transparent}.off-canvas .menu a:hover,.off-canvas .menu label.sidebar-checkbox-label:hover,.off-canvas .accordion a:hover,.off-canvas .accordion label.sidebar-checkbox-label:hover{color:#fff}.off-canvas .menu a:hover .fa,.off-canvas .menu label.sidebar-checkbox-label:hover .fa,.off-canvas .accordion a:hover .fa,.off-canvas .accordion label.sidebar-checkbox-label:hover .fa{color:#fff;background:#2e2e2e}@media screen and (max-width: 39.99875em){.off-canvas .menu a:hover,.off-canvas .menu label.sidebar-checkbox-label:hover,.off-canvas .accordion a:hover,.off-canvas .accordion label.sidebar-checkbox-label:hover{background:#2e2e2e}}.off-canvas.position-right{transform:translateX(180px)}.off-canvas .menu li.menu-trigger{background:#414244;height:3.125rem}.off-canvas .menu li button{width:100%;line-height:3.125rem;height:3.125rem;overflow:hidden;padding:0;text-align:right;background:#414244;display:block}@media screen and (min-width: 64em){.off-canvas .menu li button{opacity:0.5}}.off-canvas .menu li .text{width:130px;display:inline-block;padding:0 1rem;position:relative;line-height:1rem;padding-top:19px;float:left}@media screen and (max-width: 39.99875em){.off-canvas .menu li .text .desktop{display:none}}.off-canvas .menu li .fa{font-size:1.5rem;height:3.125rem;width:3.125rem;line-height:3.125rem;text-align:center;color:#ababad}.off-canvas .menu li .fa.fa-emma{background:url(../images/emmasprite-alt.svg) no-repeat center 0 !important;display:inline-block;overflow:hidden}@media screen and (max-width: 39.99875em){.off-canvas .menu li .fa.fa-emma{display:block;height:24px;background:url(../images/emmasprite-alt.svg) no-repeat center -16px !important;background-size:auto 120px !important}}.off-canvas .menu li.active{background:none transparent}.off-canvas .menu li.active a{color:#fff}.off-canvas .menu li.active .fa{background:#cc2350;color:#fff}.off-canvas .menu li.active:hover .fa{background:#cc2350}.off-canvas .menu li:hover .fa.fa-emma{background:#2e2e2e url(../images/emmasprite-alt.svg) no-repeat center -50px !important}@media screen and (max-width: 39.99875em){.off-canvas .menu li:hover .fa.fa-emma{display:block;height:24px;background:#2e2e2e url(../images/emmasprite-alt.svg) no-repeat center -76px !important;background-size:auto 120px !important}}.off-canvas .menu li.active .fa.fa-emma{background:#cc2350 url(../images/emmasprite-alt.svg) no-repeat center -50px !important}@media screen and (max-width: 39.99875em){.off-canvas .menu li.active .fa.fa-emma{display:block;height:24px;background:#cc2350 url(../images/emmasprite-alt.svg) no-repeat center -76px !important;background-size:auto 120px !important}}@media screen and (max-width: 39.99875em){.off-canvas{position:fixed;bottom:0;right:0;left:0;top:auto;width:100%;height:auto;transform:translateX(0)}.off-canvas .menu.vertical{flex-direction:row}.off-canvas .menu li{float:left;text-align:center;width:20%;padding:0}.off-canvas .menu li .emma-logo{margin:0 auto;background:url(../images/emmasprite.svg) no-repeat 0 center !important;height:24px;width:24px;position:relative;display:block}.off-canvas .menu li .emma-logo-alt{margin:0 auto;background:url(../images/emmasprite-alt.svg) no-repeat 0 center !important;height:24px;width:32px;position:relative;display:block}.off-canvas .menu li.active a{background:#cc2350}.off-canvas .menu li.menu-trigger{display:none}.off-canvas .menu li a{width:100%;padding:8px 0 23px;position:relative;display:block;line-height:normal}.off-canvas .menu li a .fa{display:block;text-align:center;width:auto;height:auto;line-height:normal;font-size:1.5rem}.off-canvas .menu li a .text{font-size:0.5625rem;padding:0;width:auto;position:absolute;bottom:8px;left:0;right:0;top:auto;height:auto}}.off-canvas .accordion{background:#55565a !important}.off-canvas .accordion a.accordion-title{outline:none;background:#55565a !important;padding:1rem 1rem 1rem 2rem;font-size:0.8125rem;border:none}.off-canvas .accordion a.accordion-title:active,.off-canvas .accordion a.accordion-title:focus,.off-canvas .accordion a.accordion-title:hover{background:#55565a !important}.off-canvas .accordion a.accordion-title:before{font-family:'FontAwesome';content:'\\\\f078';right:auto;left:1rem;font-size:0.625rem;top:1.5rem}.off-canvas .accordion .accordion-item.is-active a.accordion-title{color:#fff}.off-canvas .accordion .accordion-item.is-active a.accordion-title:before{font-family:'FontAwesome';content:'\\\\f077 ';right:auto;left:1rem;font-size:0.625rem;top:1.5rem}.off-canvas .accordion .accordion-content{background:#2e2e2e;color:#fff;font-size:0.75rem;border:none;padding-top:1rem;padding-bottom:1rem}.off-canvas .accordion .accordion-content .input-icon{position:relative}.off-canvas .accordion .accordion-content .input-icon .fa{color:#ababad;position:absolute;left:0.625rem;top:0.625rem}.off-canvas .accordion .accordion-content .input-icon input{padding-left:1.75rem}.off-canvas .accordion .accordion-content .menu li{text-align:left;display:block !important;float:none;position:relative;width:100%}.off-canvas .accordion .accordion-content .menu li label.sidebar-checkbox-label{padding:0.5rem 0;text-transform:none;line-height:normal;padding-left:1rem;font-size:0.75rem}.off-canvas .accordion .accordion-content .menu li label,.off-canvas .accordion .accordion-content .menu li input{margin-bottom:0}.off-canvas .accordion .accordion-content .menu li input[type='checkbox']{-webkit-appearance:none;background-color:#fff;position:absolute;left:0;top:0.5rem;border:1px solid #cacece;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05);padding:0;height:0.875rem;width:0.875rem;display:inline-block;margin:0}.off-canvas .accordion .accordion-content .menu li input[type='checkbox']active,.off-canvas .accordion .accordion-content .menu li input[type='checkbox']:checked:active{box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px 1px 3px rgba(0,0,0,0.1)}.off-canvas .accordion .accordion-content .menu li input[type='checkbox']:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05),inset 15px 10px -12px rgba(255,255,255,0.1)}.off-canvas .accordion .accordion-content .menu li input[type='checkbox']:checked+label{color:#fff;font-weight:bold}.off-canvas .accordion .accordion-content .menu li input[type='checkbox']:checked:after{font-family:FontAwesome;content:'\\\\f00c';position:absolute;top:-1px;left:0;color:#cc2350;text-align:center;font-size:0.8125rem;height:0.8125rem;width:0.8125rem}.off-canvas .accordion .accordion-content input[type='search']{width:100% !important}.off-canvas .accordion .accordion-content .select2-container,.off-canvas .accordion .accordion-content .select2-container .select2-search--inline .select2-search__field{font-size:0.75rem !important}.off-canvas .accordion .accordion-content .sidebar-select2{font-size:0.75rem !important}.off-canvas .accordion .accordion-content .select2-container,.off-canvas .accordion .accordion-content input[type='text'],.off-canvas .accordion .accordion-content .select2-container .select2-selection--single{margin-bottom:0.75rem;font-size:0.75rem;height:2rem;line-height:normal}.off-canvas .accordion .accordion-content .select2-container .select2-selection--single .select2-selection__rendered{line-height:2rem}.off-canvas .accordion .accordion-content .select2-container .select2-search--inline .select2-search__field{height:1.5rem;min-height:1.5rem}.off-canvas .accordion .accordion-content .select2-container--default .select2-selection--multiple .select2-selection__choice{color:#0a0a0a;font-size:0.75rem;max-width:100%;text-overflow:ellipsis;overflow:hidden}.off-canvas .accordion .accordion-content .select2-selection__rendered{padding-right:8px}.off-canvas .accordion .accordion-content .select2-container--default .select2-selection--multiple .select2-selection__choice{padding:0 6px}.off-canvas .accordion .accordion-content .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{font-size:1rem;top:0}.off-canvas .accordion .accordion-content .select2-container .select2-search--inline .select2-search__field{margin-top:4px}.off-canvas .global-filter{padding:5px}.off-canvas .global-filter fieldset.global-filter-title{border:2px groove #c7c7c7;font-size:0.8125rem}.off-canvas .global-filter fieldset.global-filter-title legend.global-filter-legend{margin-left:calc(1rem - 5px);color:#c7c7c7}.off-canvas .global-filter .accordion a.accordion-title{padding-left:calc(2rem - 5px);line-height:1rem}.off-canvas .global-filter .accordion a.accordion-title:before{left:calc(1rem - 5px)}.off-canvas .global-filter .accordion .accordion-item.is-active a.accordion-title:before{left:calc(1rem - 5px)}.off-canvas-content{padding-left:3.125rem}@media screen and (max-width: 39.99875em){.off-canvas-content{padding-left:0}}.off-canvas.position-right{width:250px;transform:translateX(250px)}@media screen and (max-width: 39.99875em){.off-canvas.position-right{position:fixed;bottom:0;right:-250px;left:auto;top:0;width:250px;height:auto}}.off-canvas.position-right.is-open{transform:translateX(0)}@media screen and (max-width: 39.99875em){.off-canvas.position-right.is-open{transform:translateX(-250px)}}.off-canvas.position-right.is-open ~ .off-canvas-content{transform:translateX(-250px)}.off-canvas-wrapper.right-is-open .off-canvas.position-left{transform:translateX(-250px) !important}.off-canvas-scroll{max-height:100vh;overflow:hidden;overflow-y:auto}header{background:#fff;left:3.125rem;right:0;z-index:10;max-width:100%;margin-right:auto;margin-left:auto;position:fixed}@media print, screen and (min-width: 40em){header{height:3.125rem}}header::before,header::after{display:table;content:' ';flex-basis:0;order:1}header::after{clear:both}@media screen and (max-width: 39.99875em){header{height:auto;position:static}}header .section{color:#8f1838;text-transform:uppercase;letter-spacing:4px;font-size:.625rem;font-weight:600;padding-top:1.0625rem;white-space:nowrap;text-overflow:ellipsis}header .section,header .logo,header .user-options{width:33.33333%;float:left;padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){header .section,header .logo,header .user-options{padding-right:1.875rem;padding-left:1.875rem}}header .section,header .section:last-child:not(:first-child),header .logo,header .logo:last-child:not(:first-child),header .user-options,header .user-options:last-child:not(:first-child){float:left;clear:none}header .section:last-child:not(:first-child),header .logo:last-child:not(:first-child),header .user-options:last-child:not(:first-child){float:right}header .user-options{padding-right:1.375rem}@media print, screen and (min-width: 64em){header .user-options{padding-right:1.875rem}}header .logo{text-align:center}header .logo a{display:block;margin:0 auto;width:100px}@media print, screen and (min-width: 40em){header .logo a{padding-top:.675rem}}header .logo a img{width:100px}header .logo.emma a{width:146px}header .logo.emma a img{width:146px;margin-top:-8px;margin-bottom:-4px}@media screen and (max-width: 39.99875em){header .section{width:100%;float:left;padding-right:.625rem;padding-left:.625rem;text-align:center;padding-bottom:.35rem;padding-top:.35rem;background:#8f1838;color:#fff}}@media screen and (max-width: 39.99875em) and (min-width: 40em){header .section{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (max-width: 39.99875em){header .section,header .section:last-child:not(:first-child){float:left;clear:none}header .section:last-child:not(:first-child){float:right}header .logo{width:41.66667%;float:left;padding-right:.625rem;padding-left:.625rem;padding-top:.625rem;padding-bottom:.625rem}}@media screen and (max-width: 39.99875em) and (min-width: 40em){header .logo{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (max-width: 39.99875em){header .logo,header .logo:last-child:not(:first-child){float:left;clear:none}header .logo:last-child:not(:first-child){float:right}header .logo a{text-align:left;margin:0}header .user-options{padding-top:0;width:58.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (max-width: 39.99875em) and (min-width: 64em){header .user-options{padding-bottom:.625rem}}@media screen and (max-width: 39.99875em) and (min-width: 40em){header .user-options{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (max-width: 39.99875em){header .user-options,header .user-options:last-child:not(:first-child){float:left;clear:none}header .user-options:last-child:not(:first-child){float:right}}header h1{color:#8f1838;font-family:Raleway;margin:0;font-weight:300;text-transform:uppercase;letter-spacing:4px;font-size:.625rem;padding:0;font-weight:600}@media screen and (max-width: 39.99875em){header h1{color:#fff}}header .dropdown.menu{display:inline-block;width:auto;text-align:left;float:right}header .dropdown.menu>li:hover,header .dropdown.menu>li:active{cursor:pointer}header .dropdown.menu>li:hover .fa,header .dropdown.menu>li:active .fa{color:#8f1838}header .dropdown.menu>li.is-dropdown-submenu-parent a{padding:0 .5rem}@media print, screen and (min-width: 64em){header .dropdown.menu>li.is-dropdown-submenu-parent a{padding:0 .5rem}}header .dropdown.menu>li>a{height:3.125rem;line-height:55px}header .dropdown.menu.account>li>a{padding-right:1.625rem;white-space:nowrap;color:#8f1838;text-transform:uppercase;letter-spacing:1px;font-size:.625rem;font-weight:600;line-height:60px}@inlude breakpoint (large){header .dropdown.menu.account>li>a{line-height:3.125rem}}header .dropdown.menu.account>li>a .fa{font-size:1.5rem}header .dropdown.menu.account>li>a strong{line-height:3.125rem;text-transform:none;font-size:.9375rem;letter-spacing:normal;display:block;font-weight:400;color:#2e2e2e}@media print, screen and (min-width: 64em){header .dropdown.menu.account.browsing-as>li>a{line-height:.9375rem;padding-top:.75rem}header .dropdown.menu.account.browsing-as>li>a strong{line-height:.9375rem}}header .dropdown.menu.admin>li>a:after,header .dropdown.menu.help>li>a:after{display:none}header .dropdown.menu .fa{color:#ababad;font-size:1.375rem}header .dropdown.menu a.active .fa{color:#cc2350 !important}header .dropdown.menu .submenu.is-dropdown-submenu{color:#fff;padding:0;line-height:normal;font-size:.8125rem;z-index:9999}@media print, screen and (min-width: 40em){header .dropdown.menu .submenu.is-dropdown-submenu{top:3.125rem}}header .dropdown.menu .submenu.is-dropdown-submenu li{padding:0;margin:0;font-family:Raleway}header .dropdown.menu .submenu.is-dropdown-submenu li a{padding:0;margin:0;font-family:Raleway;color:#fff;text-align:left !important;float:none;display:block;padding:1rem;line-height:1.25}header .dropdown.menu .submenu.is-dropdown-submenu li a:hover,header .dropdown.menu .submenu.is-dropdown-submenu li a:active{background:#47484c}header .dropdown.menu .submenu.is-dropdown-submenu li a.active{background:#8f1838}button.account{background:none transparent;color:#8f1838;padding:0 1.625rem 0 0;margin:0;outline:none;height:3.125rem;font-weight:600;white-space:nowrap;text-align:left;overflow:hidden;text-transform:uppercase;letter-spacing:1px;font-size:.625rem;line-height:.9375rem;position:relative;max-width:70%}button.account .fa.fa-user{color:#ababad;font-size:1.375rem}button.account .account-truncate{display:block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}button.account strong{display:inline;color:#0a0a0a;font-weight:400;font-size:.9375rem;text-transform:none;letter-spacing:normal}button.account:after{position:absolute;display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#ababad transparent transparent;right:5px;left:auto;top:50%;margin-top:-3px}button.account:hover,button.account:active,button.account:focus{background:none transparent;color:#8f1838}button.account:hover:after,button.account:active:after,button.account:focus:after{border-color:#cc2350 transparent transparent}#impersonation-dropdown.dropdown-pane{background:#55565a;color:#fff;padding:0}#impersonation-dropdown.dropdown-pane input{box-shadow:none}#impersonation-dropdown.dropdown-pane.is-open{left:auto !important;right:0 !important}@media screen and (max-width: 39.99875em){#impersonation-dropdown.dropdown-pane.is-open{width:100%;max-width:100%}}#impersonation-dropdown.dropdown-pane label{color:#c7c7c7;font-size:.6875rem}#impersonation-dropdown.dropdown-pane .matches{background:#616367;padding:1rem 0 0;border-top:1px solid #2e2e2e}#impersonation-dropdown.dropdown-pane .matches ul,#impersonation-dropdown.dropdown-pane .matches li{list-style-type:none;margin:0}#impersonation-dropdown.dropdown-pane .matches label{padding-left:1rem}#impersonation-dropdown.dropdown-pane .matches li{border-top:1px solid #505155;font-size:.8125rem}#impersonation-dropdown.dropdown-pane .matches li:first-child{border-top:none}#impersonation-dropdown.dropdown-pane .matches li strong{font-size:.9375rem;display:block}#impersonation-dropdown.dropdown-pane .matches a{padding:.375rem 1rem;color:#fff;display:block}#impersonation-dropdown.dropdown-pane .matches a:hover,#impersonation-dropdown.dropdown-pane .matches a:focus,#impersonation-dropdown.dropdown-pane .matches a:active{background:#8f1838;color:#fff}#impersonation-dropdown.dropdown-pane .logout{padding:1rem;border-bottom:1px solid #2e2e2e}#impersonation-dropdown.dropdown-pane .logout .button,#impersonation-dropdown.dropdown-pane .logout button{padding:.375rem 1rem;text-align:center;font-size:.8125rem;display:block;width:100%;margin:0}#impersonation-dropdown.dropdown-pane .impersonating{position:relative;padding:1rem;border-bottom:1px solid #2e2e2e;background:#616367}#impersonation-dropdown.dropdown-pane .impersonating button{padding-top:.375rem;padding-bottom:.375rem;position:absolute;right:1rem;top:2rem}#impersonation-dropdown.dropdown-pane .impersonating p{font-size:.8125rem;margin:0}#impersonation-dropdown.dropdown-pane .impersonating p strong{font-size:.9375rem;display:block}#impersonation-dropdown.dropdown-pane .impersonate{padding:1rem;position:relative;border-bottom:solid 1px #2e2e2e}#impersonation-dropdown.dropdown-pane .impersonate .pad-for-button{padding-right:3.125rem}#impersonation-dropdown.dropdown-pane .impersonate .pad-for-button input{margin:0}#impersonation-dropdown.dropdown-pane .impersonate .pad-for-button button{height:2.3125rem;width:2.3125rem;margin:0;border:1px solid #ababad;text-align:center;padding:0;color:#ababad;position:absolute;right:1rem;bottom:1rem;font-size:.8125rem;margin-bottom:1px}#impersonation-dropdown.dropdown-pane .impersonate .pad-for-button button:hover,#impersonation-dropdown.dropdown-pane .impersonate .pad-for-button button:active,#impersonation-dropdown.dropdown-pane .impersonate .pad-for-button button:focus{color:#fff;background:#cc2350;border:1px solid #cc2350}.match-container{height:200px;background:#616367 url(../images/loader-dark.gif) no-repeat center center;overflow:hidden;overflow-y:auto}.match-container ul{min-height:200px;background:#616367}.top-bar{height:3.125rem;overflow:hidden;clear:both;position:fixed;top:3.125rem;left:3.125rem;right:0;z-index:9;padding:0;border-bottom:1px solid #d5d5d6}@media screen and (max-width: 39.99875em){.top-bar{padding-left:0 !important;padding-right:0}}.top-bar .row{width:100%}@media screen and (max-width: 39.99875em){.top-bar .row{padding-left:0 !important;padding-right:0}}.top-bar .row .columns{padding-right:0;padding-left:0;padding-left:20px;padding-right:25px}@media screen and (max-width: 39.99875em){.top-bar .row .columns{padding-left:0 !important;padding-right:0}}.top-bar button,.top-bar .button{height:2rem;width:2rem;font-size:0.75rem;text-transform:uppercase}@media screen and (max-width: 39.99875em){.top-bar{height:auto;position:static}}.top-bar .input-sentence{white-space:no-wrap;display:block;overflow:hidden;font-size:0.8125rem}.top-bar .input-sentence input,.top-bar .input-sentence select{width:auto;margin:0 2px;display:inline-block}.top-bar .input-sentence input{max-width:80px}@media screen and (max-width: 39.99875em){.top-bar .input-sentence{margin-bottom:0.5rem}}.top-bar button,.top-bar .button{background:#8f1838;padding:0 1.5rem;color:#fff;width:auto}.top-bar button:hover,.top-bar button:active,.top-bar button:focus,.top-bar .button:hover,.top-bar .button:active,.top-bar .button:focus{background:#cc2350}.top-bar button.go{border:1px solid #8f1838;background:none transparent;color:#8f1838;height:2rem;width:2rem;position:relative;padding:0;top:-2px;transition:ease all 0.25s}.top-bar button.go:focus,.top-bar button.go:active,.top-bar button.go:hover{color:#fff;background:#8f1838}.top-bar button,.top-bar .button{border:1px solid #8f1838;background:none transparent;color:#8f1838;padding:0 1.5rem;color:#8f1838;width:auto}.top-bar button:hover,.top-bar button:active,.top-bar button:focus,.top-bar .button:hover,.top-bar .button:active,.top-bar .button:focus{background:#8f1838;color:#fff}.top-bar input,.top-bar select{height:2rem;line-height:2rem}.top-bar button.page-action,.top-bar .button.page-action{vertical-align:top;margin-bottom:0 !important;padding:0 10px 0 40px;margin:0 !important;text-align:left;color:#2e2e2e;text-transform:none;font-size:0.6875rem;border:none;position:relative;height:3.125rem;line-height:normal !important}@media screen and (max-width: 39.99875em){.top-bar button.page-action,.top-bar .button.page-action{padding-right:10px;padding-left:25px !important;margin:0 !important}.top-bar button.page-action i.fa,.top-bar .button.page-action i.fa{font-size:1rem !important;left:0 !important}}.top-bar button.page-action.filter,.top-bar .button.page-action.filter{font-size:0.875rem}@media print, screen and (min-width: 40em){.top-bar button.page-action,.top-bar .button.page-action{margin-right:-4px !important}}.top-bar button.page-action:hover,.top-bar button.page-action:active,.top-bar button.page-action:focus,.top-bar button.page-action.active,.top-bar .button.page-action:hover,.top-bar .button.page-action:active,.top-bar .button.page-action:focus,.top-bar .button.page-action.active{background:#dedede}.top-bar button.page-action i.fa,.top-bar .button.page-action i.fa{color:#8f1838;font-size:1.25rem;position:absolute;top:0;left:10px;margin-right:3px;height:3.125rem;width:1.5rem;line-height:3.125rem;text-align:center;float:left}.top-bar button.page-action:hover .fa,.top-bar button.page-action:active .fa,.top-bar button.page-action:focus .fa,.top-bar button.page-action.active .fa,.top-bar .button.page-action:hover .fa,.top-bar .button.page-action:active .fa,.top-bar .button.page-action:focus .fa,.top-bar .button.page-action.active .fa{color:#cc2350}.top-bar-left,.top-bar-right{list-style-type:none;margin:0;padding:0}.top-bar-left li,.top-bar-right li{float:left;line-height:3.125rem}.top-bar-left li a,.top-bar-right li a{vertical-align:center;font-size:0.6875rem;font-weight:600;color:#2e2e2e;padding:0 15px;height:3.125rem;line-height:3.125rem;display:inline-block;float:left;overflow:hidden}.top-bar-left li a .fa,.top-bar-right li a .fa{color:#8f1838;font-size:1.25rem;position:relative;top:3px;margin-right:3px}.top-bar-left li a:hover,.top-bar-right li a:hover{background:#e1e1e1}.top-bar-left li a:hover .fa,.top-bar-right li a:hover .fa{color:#cc2350}.top-bar-left li.filters,.top-bar-right li.filters{font-size:0.875rem}.top-bar-left li.filters .fa,.top-bar-right li.filters .fa{color:#ababad;font-size:1.25rem;position:relative;top:1px;margin-right:3px}.top-bar .button.page-action{overflow:hidden;height:3.125rem;display:inline-block;width:auto;padding-top:0.755rem}.top-bar .button.page-action.single-line{padding-top:0;line-height:52px !important}@media screen and (max-width: 39.99875em){.top-bar .has-active-state .button.page-action,.top-bar .has-active-state button.page-action{background:none transparent !important}}.top-bar-flex-item-group{display:flex;justify-items:flex-start;align-items:center;font-size:0.875rem;padding:0 5px;margin-right:1rem;min-width:15%}.top-bar-flex-item-group .top-bar-flex-item-label{text-align:center}@media screen and (min-width: 40em) and (max-width: 63.99875em){.top-bar-flex-item-group .top-bar-flex-item-label{font-size:0.6875rem}}.login-checkbox{margin-top:1rem}.login-checkbox label{font-weight:600}.login,ux-dialog-body{background:#fff;min-height:100vh;width:100%;display:table}.login .login-helpers,ux-dialog-body .login-helpers{margin-top:.5rem}.login .login-helpers a,ux-dialog-body .login-helpers a{display:inline-block;height:3.125rem;padding-top:.6875rem !important;padding:0 20px 0 50px;margin:0 !important;text-align:left;color:#2e2e2e;text-transform:none;font-size:.6875rem;border:none;position:relative;height:3.125rem;line-height:normal !important}@media screen and (max-width: 39.99875em){.login .login-helpers a,ux-dialog-body .login-helpers a{margin:0 !important}.login .login-helpers a i.fa,ux-dialog-body .login-helpers a i.fa{font-size:1rem !important}}.login .login-helpers a.filter,ux-dialog-body .login-helpers a.filter{font-size:.875rem}@media print, screen and (min-width: 40em){.login .login-helpers a,ux-dialog-body .login-helpers a{margin-right:-4px !important}}.login .login-helpers a i.fa,ux-dialog-body .login-helpers a i.fa{color:#8f1838;font-size:1.25rem;position:absolute;top:0;left:20px;margin-right:3px;height:3.125rem;width:1.5rem;line-height:3.125rem;text-align:center;float:left}.login .login-helpers a:hover .fa,.login .login-helpers a:active .fa,.login .login-helpers a:focus .fa,.login .login-helpers a.active .fa,ux-dialog-body .login-helpers a:hover .fa,ux-dialog-body .login-helpers a:active .fa,ux-dialog-body .login-helpers a:focus .fa,ux-dialog-body .login-helpers a.active .fa{color:#cc2350}.login .shaded,.login .dialog-content,ux-dialog-body .shaded,ux-dialog-body .dialog-content{background:#f5f5f5;padding:1.5rem;text-align:left;max-width:550px;margin:0 auto}.login .shaded h2,.login .dialog-content h2,ux-dialog-body .shaded h2,ux-dialog-body .dialog-content h2{margin-bottom:1.5rem;padding-bottom:0}.login .shaded h2:before,.login .shaded h2:after,.login .dialog-content h2:before,.login .dialog-content h2:after,ux-dialog-body .shaded h2:before,ux-dialog-body .shaded h2:after,ux-dialog-body .dialog-content h2:before,ux-dialog-body .dialog-content h2:after{display:none}.login .shaded input,.login .dialog-content input,ux-dialog-body .shaded input,ux-dialog-body .dialog-content input{margin-bottom:.5rem}.login .shaded button,.login .dialog-content button,ux-dialog-body .shaded button,ux-dialog-body .dialog-content button{display:block;width:100%;margin-top:1.5rem}.login .shaded button+button,.login .dialog-content button+button,ux-dialog-body .shaded button+button,ux-dialog-body .dialog-content button+button{margin-top:0 !important}.login .dialog-content,ux-dialog-body .dialog-content{background:none transparent;padding:0}.login h1,.login h2,ux-dialog-body h1,ux-dialog-body h2{color:#55565a}.login h1,ux-dialog-body h1{font-size:2.25rem;text-transform:none;letter-spacing:normal;font-weight:300;max-width:500px;margin:0 auto 1.5rem;line-height:normal}@media screen and (max-width: 39.99875em){.login h1,ux-dialog-body h1{font-size:1.75rem}}.login h2,ux-dialog-body h2{position:relative;font-size:1.25rem;padding-bottom:1.5rem;margin-bottom:2rem;margin-top:-.5rem}@media screen and (max-width: 39.99875em){.login h2,ux-dialog-body h2{font-size:1rem}}.login h2:before,ux-dialog-body h2:before{position:absolute;content:'';bottom:0px;left:50%;margin-left:-25px;width:50px;height:1px;background-color:#4c4c4c}.login h2:after,ux-dialog-body h2:after{position:absolute;content:'';bottom:-5px;left:50%;margin-left:-12px;width:24px;height:1px;background-color:#4c4c4c}@media screen and (max-width: 39.99875em){.login,ux-dialog-body{display:block;padding-top:4rem}}.login .login-page,ux-dialog-body .login-page{display:table-cell;padding-top:3rem;padding-bottom:3rem;vertical-align:middle}@media screen and (max-width: 39.99875em){.login .login-page,ux-dialog-body .login-page{display:block;margin:0 auto}}.login img.logo,ux-dialog-body img.logo{width:6.25rem;text-align:center;margin-bottom:1.5rem}.login-block{width:100%;float:left;padding-right:.625rem;padding-left:.625rem;text-align:center}@media print, screen and (min-width: 40em){.login-block{padding-right:1.875rem;padding-left:1.875rem}}.login-block,.login-block:last-child:not(:first-child){float:left;clear:none}.login-block:last-child:not(:first-child){float:right}.login-block:last-child:last-child{float:left}@media print, screen and (min-width: 40em){.login-block{width:66.66667%;float:left;padding-right:.625rem;padding-left:.625rem;margin-left:16.66667%}}@media print, screen and (min-width: 40em) and (min-width: 40em){.login-block{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.login-block,.login-block:last-child:not(:first-child){float:left;clear:none}.login-block:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.login-block{width:50%;float:left;padding-right:.625rem;padding-left:.625rem;margin-left:25%}}@media print, screen and (min-width: 64em) and (min-width: 40em){.login-block{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.login-block,.login-block:last-child:not(:first-child){float:left;clear:none}.login-block:last-child:not(:first-child){float:right}}.link-grid{background:#e6e6e6;font-size:.8125rem}.link-grid.border-dark{border-top:1px solid #2e2e2e}.link-grid+.link-grid{border-top:1px solid #d5d5d6}.link-grid+.link-grid.border-dark{border-top:1px solid #a7a8aa}.link-grid.quickstart{position:relative}.link-grid.resources{padding-bottom:.5rem;padding-top:1.5rem}.link-grid.resources a .fa{position:absolute;left:1.5rem;top:2px;margin-right:3px}.link-grid.resources strong,.link-grid.resources .fa{font-size:1rem}.link-grid.resources a{padding:0 1.5rem 1rem 3rem;position:relative;display:inline-block}.link-grid.resources h2{margin-top:-1.5rem}.link-grid.resources strong{transition:ease all .25s}.link-grid h2{padding:1.25rem 0 0 0;font-size:1.5rem;margin-bottom:0;line-height:normal;padding-left:2rem;padding-right:2rem}@media screen and (max-width: 39.99875em){.link-grid h2{padding-left:0;padding-right:0;padding-top:.75rem;padding-bottom:.75rem}}.link-grid p{padding-left:2rem;padding-right:2rem}@media screen and (max-width: 39.99875em){.link-grid p{padding-left:0;padding-right:0}}.link-grid .row .column:nth-child(odd),.link-grid .row .columns:nth-child(odd){background:#e1e1e1}.link-grid .row .column:nth-child(even),.link-grid .row .columns:nth-child(even){background:#e6e6e6}@media print, screen and (min-width: 40em){.link-grid .row .column:nth-child(1),.link-grid .row .columns:nth-child(1),.link-grid .row .column:nth-child(3),.link-grid .row .columns:nth-child(3),.link-grid .row .column:nth-child(6),.link-grid .row .columns:nth-child(6),.link-grid .row .column:nth-child(8),.link-grid .row .columns:nth-child(8),.link-grid .row .column:nth-child(9),.link-grid .row .columns:nth-child(9),.link-grid .row .column:nth-child(11),.link-grid .row .columns:nth-child(11),.link-grid .row .column:nth-child(14),.link-grid .row .columns:nth-child(14),.link-grid .row .column:nth-child(16),.link-grid .row .columns:nth-child(16),.link-grid .row .column:nth-child(17),.link-grid .row .columns:nth-child(17),.link-grid .row .column:nth-child(19),.link-grid .row .columns:nth-child(19){background:#e1e1e1}.link-grid .row .column:nth-child(2),.link-grid .row .columns:nth-child(2),.link-grid .row .column:nth-child(4),.link-grid .row .columns:nth-child(4),.link-grid .row .column:nth-child(5),.link-grid .row .columns:nth-child(5),.link-grid .row .column:nth-child(7),.link-grid .row .columns:nth-child(7),.link-grid .row .column:nth-child(10),.link-grid .row .columns:nth-child(10),.link-grid .row .column:nth-child(12),.link-grid .row .columns:nth-child(12),.link-grid .row .column:nth-child(13),.link-grid .row .columns:nth-child(13),.link-grid .row .column:nth-child(15),.link-grid .row .columns:nth-child(15),.link-grid .row .column:nth-child(18),.link-grid .row .columns:nth-child(18),.link-grid .row .column:nth-child(20),.link-grid .row .columns:nth-child(20){background:#e6e6e6}}.link-grid .row .column.highlight,.link-grid .row .highlight.columns{background:#bb1f49}.link-grid .row .column.highlight a,.link-grid .row .highlight.columns a{border:1px solid #8f1838}.link-grid .row .column.highlight a strong,.link-grid .row .highlight.columns a strong{color:#fff}.link-grid .title{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.link-grid .title{padding-right:1.875rem;padding-left:1.875rem}}.link-grid .title,.link-grid .title:last-child:not(:first-child){float:left;clear:none}.link-grid .title:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.link-grid .title{width:25%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.link-grid .title{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.link-grid .title,.link-grid .title:last-child:not(:first-child){float:left;clear:none}.link-grid .title:last-child:not(:first-child){float:right}}@media screen and (max-width: 39.99875em){.link-grid .title{text-align:center}.link-grid .title h2{font-size:1.25rem}}.link-grid .grid{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.link-grid .grid{padding-right:1.875rem;padding-left:1.875rem}}.link-grid .grid,.link-grid .grid:last-child:not(:first-child){float:left;clear:none}.link-grid .grid:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.link-grid .grid{width:75%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.link-grid .grid{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.link-grid .grid,.link-grid .grid:last-child:not(:first-child){float:left;clear:none}.link-grid .grid:last-child:not(:first-child){float:right}}.link-grid.dark{background:#6e6f74}.link-grid.dark h2{color:#fff}.link-grid.dark .row .column:nth-child(odd),.link-grid.dark .row .columns:nth-child(odd){background:#696a6f}.link-grid.dark .row .column:nth-child(even),.link-grid.dark .row .columns:nth-child(even){background:#6e6f74}@media print, screen and (min-width: 40em){.link-grid.dark .row .column:nth-child(1),.link-grid.dark .row .columns:nth-child(1),.link-grid.dark .row .column:nth-child(3),.link-grid.dark .row .columns:nth-child(3),.link-grid.dark .row .column:nth-child(6),.link-grid.dark .row .columns:nth-child(6),.link-grid.dark .row .column:nth-child(8),.link-grid.dark .row .columns:nth-child(8),.link-grid.dark .row .column:nth-child(9),.link-grid.dark .row .columns:nth-child(9),.link-grid.dark .row .column:nth-child(11),.link-grid.dark .row .columns:nth-child(11),.link-grid.dark .row .column:nth-child(14),.link-grid.dark .row .columns:nth-child(14),.link-grid.dark .row .column:nth-child(16),.link-grid.dark .row .columns:nth-child(16),.link-grid.dark .row .column:nth-child(17),.link-grid.dark .row .columns:nth-child(17),.link-grid.dark .row .column:nth-child(19),.link-grid.dark .row .columns:nth-child(19){background:#696a6f}.link-grid.dark .row .column:nth-child(2),.link-grid.dark .row .columns:nth-child(2),.link-grid.dark .row .column:nth-child(4),.link-grid.dark .row .columns:nth-child(4),.link-grid.dark .row .column:nth-child(5),.link-grid.dark .row .columns:nth-child(5),.link-grid.dark .row .column:nth-child(7),.link-grid.dark .row .columns:nth-child(7),.link-grid.dark .row .column:nth-child(10),.link-grid.dark .row .columns:nth-child(10),.link-grid.dark .row .column:nth-child(12),.link-grid.dark .row .columns:nth-child(12),.link-grid.dark .row .column:nth-child(13),.link-grid.dark .row .columns:nth-child(13),.link-grid.dark .row .column:nth-child(15),.link-grid.dark .row .columns:nth-child(15),.link-grid.dark .row .column:nth-child(18),.link-grid.dark .row .columns:nth-child(18),.link-grid.dark .row .column:nth-child(20),.link-grid.dark .row .columns:nth-child(20){background:#6e6f74}}.link-grid.dark .row a{color:#fff}.link-grid.dark .row a strong{color:#fff}.link-grid.mono{background:#e6e6e6}.link-grid.mono .row .column,.link-grid.mono .row .columns{background:#e6e6e6}.link-grid.mono .row a:hover,.link-grid.mono .row a:active,.link-grid.mono .row a:focus{background:#e6e6e6}.link-grid.mono .row a:hover strong,.link-grid.mono .row a:active strong,.link-grid.mono .row a:focus strong{color:#2e2e2e;color:#8f1838}.link-grid .image{position:relative;display:none;overflow:hidden;margin:-1.5rem -1.5rem 1.5rem -1.5rem;background-repeat:no-repeat;background-position:center center}.link-grid.count strong{font-size:3rem}.link-grid a{padding:1.5rem;display:block;color:#55565a}@media screen and (max-width: 39.99875em){.link-grid a{padding:1rem}}.link-grid a .fa{font-size:1.5rem;display:block;margin-bottom:.25rem}.link-grid a strong{color:#2e2e2e;display:block;font-weight:500;font-size:1.125rem;line-height:normal}@media screen and (max-width: 39.99875em){.link-grid a strong{font-size:1rem}}.link-grid a:hover{background:#8f1838;color:#fff}.link-grid a:hover strong{color:#fff}.link-grid a .byline{display:block;margin-top:.75rem}.media-grid{padding:0}.media-grid>.column,.media-grid>.columns{padding:0 5px !important;text-align:left;margin-bottom:0 !important}.media-grid>.column a,.media-grid>.columns a{display:block}.media-grid .media-block{padding:1rem 0;display:block}.media-grid .media-block .button{padding-top:.25rem;padding-bottom:.25rem;display:inline-block;margin:1rem auto 0 auto}.media-grid a:hover .media-image img,.media-grid a:active .media-image img,.media-grid a:focus .media-image img{width:120%;left:-10%;top:-10%}.media-grid .media-image{width:100%;padding-top:55%;overflow:hidden;display:block;position:relative;background:#0a0a0a}.media-grid .media-image img{width:100%;max-width:none;position:absolute;left:0;top:0;width:100%;transition:ease .5s all}.media-grid .media-title{display:block;margin-bottom:.5rem;line-height:1.2;font-size:.875rem}.media-grid .media-description{display:block;font-size:.625rem;opacity:.8;padding-right:1rem}.search-options .medium-text-right .select2,.search-options .text-right .select2,.search-options .large-text-right .select2{text-align:left}.medium-text-right .select2,.text-right .select2,.large-text-right .select2{text-align:left}input[type=\\\"text\\\"].inline,input[type=\\\"number\\\"].inline{width:auto !important;min-width:1px !important;display:inline-block;margin-right:.25rem;margin-bottom:0}input[type=\\\"text\\\"].inline.small,input[type=\\\"number\\\"].inline.small{width:70px !important}input[type=\\\"text\\\"].header-input,input[type=\\\"number\\\"].header-input{margin-top:.275rem;margin-bottom:0}input[type=\\\"number\\\"]{width:70px !important}input[type=\\\"number\\\"].inline{width:70px !important}.row.shaded{background:#f5f5f5;padding-top:1.25rem;border-top:1px solid #d5d5d6}select.inline{width:auto;display:inline-block;margin:0}.form-rule{border-bottom:1px solid #a6a6a6;margin:.5rem 0 1rem -1.5rem}.row .submit-buttons{padding-bottom:1.5rem}.row .submit-buttons p{font-size:.8125rem;line-height:normal;color:#454547}@media screen and (max-width: 39.99875em){.row .submit-buttons{text-align:center;padding:.75rem 10px 2rem !important}.row .submit-buttons button,.row .submit-buttons .button{display:block;width:100%}}.row .submit-buttons button{margin-right:5px}@media screen and (max-width: 39.99875em){.row .submit-buttons button{display:block;width:100%;margin:0 auto .75rem}}.label{font-size:.6875rem;margin-bottom:0}label,.label{text-transform:uppercase;margin-bottom:.125rem}input[type='text']{padding-top:.25rem;padding-bottom:.25rem}select{padding-top:0;padding-bottom:0}.form button.margin{margin-top:.5rem !important}.form>.row button{margin-bottom:0}.form>.row+.row{margin-top:0}.form>.row.match+.row{margin-top:0rem}a.email-reset{margin-top:2px;display:inline-block}a.email-reset .fa{margin-right:5px;font-size:1rem;padding:.25rem 0}.form label input[type=\\\"checkbox\\\"].inline{top:5px;margin-right:3px}.form label input[type=\\\"checkbox\\\"]{-webkit-appearance:none;background-color:#fff;border:1px solid #cacece;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05);padding:0;height:1.25rem;width:1.25rem;display:inline-block;margin:0;position:relative}.form label input[type=\\\"checkbox\\\"]active,.form label input[type=\\\"checkbox\\\"]:checked:active{box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px 1px 3px rgba(0,0,0,0.1)}.form label input[type=\\\"checkbox\\\"]:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05),inset 15px 10px -12px rgba(255,255,255,0.1)}.form label input[type=\\\"checkbox\\\"]:checked:after{font-family:FontAwesome;content:\\\"\\\\f00c\\\";position:absolute;top:0;left:2px;color:#cc2350;text-align:center;font-size:.875rem;height:.875rem;width:.875rem}.form label input[type=\\\"checkbox\\\"]:disabled{background:#ebebeb}label.is-invalid-label+datepicker input{border:1px solid #db2121 !important}.form .row .columns{padding:0 5px 5px 5px !important}.form .row .columns p{font-size:.9375rem;margin-bottom:.75rem}@media print, screen and (min-width: 64em){.form .row .columns p{margin-bottom:0}}.form .row .columns.icon{position:relative}.form .row .columns.icon input{padding-left:2rem}.form .row .columns.icon .fa{position:absolute;left:.875rem;bottom:.375rem;z-index:6;color:#ababad;display:block;height:2.4375rem;line-height:2.4375rem}.form .row .columns.icon datepicker .fa,.form .row .columns.icon .is-invalid-input+.fa{bottom:auto !important;top:1.25rem !important}.form .row input,.form .row select,.form .row textarea{margin-bottom:.25rem}.form-block{border-top:1px solid #d5d5d6}.form-block p .description{display:block;font-size:.675rem}.form-block .select2{font-size:1rem !important}.form-block.shaded,.form-block.no-border{border-top:none !important}.form-block.shaded+.search-options{border-top:1px solid #d5d5d6}.form-block+.form-block.shaded{border-top:1px solid #d5d5d6 !important}.form-block+.form-block.shaded.audit{border-top:1px solid #b9aa9d !important}.form-block.audit{border-top:1px solid #b9aa9d !important}.form-block .form .row+ul{margin-top:1.5rem !important}.form-block{padding-top:1.5rem;font-size:.8125rem}@media print, screen and (min-width: 40em){.form-block{padding-top:0 !important}}.form-block.last{border-top:1px solid #d5d5d6 !important}.form-block .form-id{font-size:1.25rem;color:#8f1838;margin-bottom:0;display:block}@media screen and (max-width: 39.99875em){.form-block .form-id{text-align:center}}.form-block .form-id span{color:#55565a;font-size:1rem}.form-block .form-id button{float:right;color:#ababad;font-size:1.375rem;line-height:1.25rem}.form-block .form-id button:hover,.form-block .form-id button:active,.form-block .form-id button:focus{color:#cc2350}.form-block.shaded{background:#f5f5f5}.form-block.shaded.audit{background:#f3f0ee}.form-block .title{padding-top:1.25rem;width:100%;float:left;padding-right:.625rem;padding-left:.625rem}@media screen and (max-width: 39.99875em){.form-block .title{padding-top:0}}@media print, screen and (min-width: 40em){.form-block .title{padding-right:1.875rem;padding-left:1.875rem}}.form-block .title,.form-block .title:last-child:not(:first-child){float:left;clear:none}.form-block .title:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.form-block .title{width:33.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block .title{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block .title,.form-block .title:last-child:not(:first-child){float:left;clear:none}.form-block .title:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block .title{width:16.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block .title{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block .title,.form-block .title:last-child:not(:first-child){float:left;clear:none}.form-block .title:last-child:not(:first-child){float:right}}@media screen and (max-width: 39.99875em){.form-block .title{text-align:center}}.form-block .form{width:100%;float:left;padding-right:.625rem;padding-left:.625rem;padding-top:1.25rem !important;padding-bottom:1.1875rem}.form-block .form.submit{padding-left:5px;padding-top:1.5rem !important}@media screen and (max-width: 39.99875em){.form-block .form.submit{text-align:center;padding:.75rem 10px 2rem !important}}.form-block .form.submit button{margin-right:5px}@media screen and (max-width: 39.99875em){.form-block .form.submit button{display:block;width:100%;margin:0 auto .75rem}}@media print, screen and (min-width: 40em){.form-block .form{padding-right:1.875rem;padding-left:1.875rem}}.form-block .form,.form-block .form:last-child:not(:first-child){float:left;clear:none}.form-block .form:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.form-block .form{width:66.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block .form{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block .form,.form-block .form:last-child:not(:first-child){float:left;clear:none}.form-block .form:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block .form{width:83.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block .form{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block .form,.form-block .form:last-child:not(:first-child){float:left;clear:none}.form-block .form:last-child:not(:first-child){float:right}}@media screen and (max-width: 39.99875em){.form-block .form{padding-top:.75rem !important;padding-right:5px}}.form-block .form .row{padding-right:25px}.form-block .form .row.table-results{padding-right:0}.form-block .form .row.table-results .columns:last-child{padding-right:0 !important}.form-block .form .row.table-results table thead tr th,.form-block .form .row.table-results table tbody tr td{padding-left:1rem !important}@media screen and (max-width: 39.99875em){.form-block .form .row{padding-right:10px;padding-left:5px}}.form-block .form .row .columns{padding:0 5px 5px 5px !important}.form-block .form .row .columns.icon{position:relative}.form-block .form .row .columns.icon input{padding-left:2rem}.form-block .form .row .columns.icon input:focus+.fa{color:#cc2350}.form-block .form .row .columns.icon .fa{position:absolute;left:.875rem;bottom:.625rem;z-index:6;color:#ababad;display:block;height:2.4375rem;line-height:2.4375rem}.form-block .form .row.no-format{margin-left:0;margin-right:0;padding:0 !important}.form-block .form .row.no-format .columns{padding:0 !important}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns{width:50%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block .form.auto-format .columns{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns,.form-block .form.auto-format .columns:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns{width:33.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block .form.auto-format .columns{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns,.form-block .form.auto-format .columns:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns{width:25%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block .form.auto-format .columns{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns,.form-block .form.auto-format .columns:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns.full{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block .form.auto-format .columns.full{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns.full,.form-block .form.auto-format .columns.full:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.full:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns.full{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block .form.auto-format .columns.full{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns.full,.form-block .form.auto-format .columns.full:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.full:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns.full{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block .form.auto-format .columns.full{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns.full,.form-block .form.auto-format .columns.full:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.full:last-child:not(:first-child){float:right}}@media screen and (max-width: 39.99875em){.form-block .form.auto-format .columns.submit{padding-top:1rem !important}}.form-block .form.auto-format .columns.submit button{margin:5px !important}@media screen and (max-width: 39.99875em){.form-block .form.auto-format .columns.submit button{display:block;margin:0 auto .75rem !important;width:100%}.form-block .form.auto-format .columns.submit button:last-child{margin-bottom:0 !important}}.form-block .form.auto-format .columns.submit button:first-child{margin-left:0 !important}.form-block .form.auto-format .columns.submit button:last-child{margin-right:0 !important}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns.double{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block .form.auto-format .columns.double{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns.double,.form-block .form.auto-format .columns.double:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.double:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns.double{width:66.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block .form.auto-format .columns.double{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns.double,.form-block .form.auto-format .columns.double:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.double:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns.double{width:50%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block .form.auto-format .columns.double{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns.double,.form-block .form.auto-format .columns.double:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.double:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns.triple{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block .form.auto-format .columns.triple{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block .form.auto-format .columns.triple,.form-block .form.auto-format .columns.triple:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.triple:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns.triple{width:75%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block .form.auto-format .columns.triple{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block .form.auto-format .columns.triple,.form-block .form.auto-format .columns.triple:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.triple:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns.triple{width:75%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block .form.auto-format .columns.triple{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block .form.auto-format .columns.triple,.form-block .form.auto-format .columns.triple:last-child:not(:first-child){float:left;clear:none}.form-block .form.auto-format .columns.triple:last-child:not(:first-child){float:right}}.form-block .form.auto-format .columns:last-child:last-child:last-child{float:left}.form-block .form.help .column,.form-block .form.help .columns{margin-bottom:1.5rem}@media print, screen and (min-width: 40em){.form-block .form.help .column,.form-block .form.help .columns{padding-right:20px !important}}.form-block .form.help .column a,.form-block .form.help .columns a{color:#0a0a0a;padding-left:1.125rem;position:relative;margin-bottom:.25rem}.form-block .form.help.user-guide a:before{font-family:\\\"FontAwesome\\\";display:block;content:\\\"\\\\f0f6\\\";font-weight:normal;position:absolute;left:0;top:0;color:#8f1838}.form-block .form.help.videos .media-title{color:#0a0a0a;padding-left:1.125rem;position:relative;margin-bottom:.25rem}.form-block .form.help.videos .media-title:before{font-family:\\\"FontAwesome\\\";display:block;content:\\\"\\\\f144 \\\";font-weight:normal;position:absolute;left:0;top:0;color:#8f1838}@media print, screen and (min-width: 40em){.form-block .form.help.videos{margin-left:-5px}}.form-block .form.help.videos a{padding-left:0}.form-block h2{font-size:1.25rem;margin-bottom:0;line-height:normal}.form-block h2 .fa{font-size:1.5rem;margin-right:.25rem}.form-block h3{font-size:1.25rem}.form-block p{font-size:.8125rem;line-height:normal;color:#848487}.form-block p a{display:inline-block;margin-top:.25rem;font-size:.875rem;transition:ease all .25s}.form.article p a{margin-top:0}.form-block.adhoc .title{padding-top:1.25rem;text-align:center;width:100%;float:left;padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 64em){.form-block.adhoc .title{text-align:left}}@media print, screen and (min-width: 40em){.form-block.adhoc .title{padding-right:1.875rem;padding-left:1.875rem}}.form-block.adhoc .title,.form-block.adhoc .title:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .title:last-child:not(:first-child){float:right}@media print, screen and (min-width: 64em){.form-block.adhoc .title{width:16.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block.adhoc .title{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block.adhoc .title,.form-block.adhoc .title:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .title:last-child:not(:first-child){float:right}}@media screen and (max-width: 39.99875em){.form-block.adhoc .title{padding-top:0}}.form-block.adhoc .form{width:100%;float:left;padding-right:.625rem;padding-left:.625rem;padding-top:.75rem;padding-right:5px}@media print, screen and (min-width: 40em){.form-block.adhoc .form{padding-right:1.875rem;padding-left:1.875rem}}.form-block.adhoc .form,.form-block.adhoc .form:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.form-block.adhoc .form{width:100%;float:left;padding-right:.625rem;padding-left:.625rem;padding-left:50px !important}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block.adhoc .form{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block.adhoc .form,.form-block.adhoc .form:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){.form-block.adhoc .form{width:83.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){.form-block.adhoc .form{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){.form-block.adhoc .form,.form-block.adhoc .form:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form:last-child:not(:first-child){float:right}}.form-block.adhoc .form .row.adhoc-item,.form-block.adhoc .form .row.output-item{border-bottom:1px solid #d5d5d6;padding-top:.75rem;padding-bottom:.4375rem !important;font-size:1rem;padding-right:60px !important;position:relative;clear:both}.form-block.adhoc .form .row.adhoc-item .options,.form-block.adhoc .form .row.output-item .options{top:2rem}@media print, screen and (min-width: 40em){.form-block.adhoc .form .row.adhoc-item .options,.form-block.adhoc .form .row.output-item .options{top:.75rem}}@media print, screen and (min-width: 64em){.form-block.adhoc .form .row.adhoc-item .options,.form-block.adhoc .form .row.output-item .options{top:0rem}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .row.adhoc-item label,.form-block.adhoc .form .row.output-item label{display:none}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .row.adhoc-item:first-child label,.form-block.adhoc .form .row.output-item:first-child label{display:block}}.form-block.adhoc .form .row.adhoc-item:first-child .options,.form-block.adhoc .form .row.output-item:first-child .options{top:1.25rem}.form-block.adhoc .form .row.adhoc-item:last-child,.form-block.adhoc .form .row.output-item:last-child{border-bottom:none;padding-bottom:0}.form-block.adhoc .form .row.adhoc-item:first-child,.form-block.adhoc .form .row.output-item:first-child{padding-top:0}@media print, screen and (min-width: 64em){.form-block.adhoc .form .row.adhoc-item,.form-block.adhoc .form .row.output-item{border-bottom:none;padding-top:0;padding-bottom:0}}.form-block.adhoc .form .row.adhoc-item+.row.adhoc-item,.form-block.adhoc .form .row.output-item+.row.adhoc-item{margin-top:0}.form-block.adhoc .form .row.adhoc-item .options,.form-block.adhoc .form .row.output-item .options{position:absolute;right:30px;font-size:1.25rem;line-height:2.4375rem;opacity:1}.form-block.adhoc .form .row.adhoc-item .options button,.form-block.adhoc .form .row.output-item .options button{color:#8f1838}.form-block.adhoc .form .row.adhoc-item .options button:hover,.form-block.adhoc .form .row.adhoc-item .options button:active,.form-block.adhoc .form .row.output-item .options button:hover,.form-block.adhoc .form .row.output-item .options button:active{color:#cc2350}.form-block.adhoc .form .row.adhoc-item .options button.gray,.form-block.adhoc .form .row.output-item .options button.gray{color:#ababad;margin-right:5px}@media print, screen and (min-width: 64em){.form-block.adhoc .form .row.adhoc-item .options,.form-block.adhoc .form .row.output-item .options{opacity:0}}.form-block.adhoc .form .row.adhoc-item:hover .options,.form-block.adhoc .form .row.output-item:hover .options{opacity:1;transition:ease all .25s}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.field{width:33.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block.adhoc .form .columns.field{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.field,.form-block.adhoc .form .columns.field:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.field:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block.adhoc .form .columns.field{width:25%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block.adhoc .form .columns.field{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block.adhoc .form .columns.field,.form-block.adhoc .form .columns.field:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.field:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.operator{width:25%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block.adhoc .form .columns.operator{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.operator,.form-block.adhoc .form .columns.operator:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.operator:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block.adhoc .form .columns.operator{width:16.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block.adhoc .form .columns.operator{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block.adhoc .form .columns.operator,.form-block.adhoc .form .columns.operator:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.operator:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.value{width:41.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.form-block.adhoc .form .columns.value{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.value,.form-block.adhoc .form .columns.value:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.value:last-child:not(:first-child){float:right}}@media screen and (min-width: 75em){.form-block.adhoc .form .columns.value{width:58.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media screen and (min-width: 75em) and (min-width: 40em){.form-block.adhoc .form .columns.value{padding-right:1.875rem;padding-left:1.875rem}}@media screen and (min-width: 75em){.form-block.adhoc .form .columns.value,.form-block.adhoc .form .columns.value:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.value:last-child:not(:first-child){float:right}}.form-block.adhoc .form .columns.value .row{margin-left:-5px}@media screen and (max-width: 39.99875em){.form-block.adhoc .form .columns.value .row{margin-left:-10px;margin-right:-15px !important}}.form-block.adhoc .form .columns.value .row .columns{padding-bottom:0 !important}.form-block.adhoc .form .columns.value .row .columns.icon .fa{bottom:.375rem}.form-block.adhoc .form .columns.value.date-range .row .columns{width:41.66667%;float:left;padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.value.date-range .row .columns{padding-right:1.875rem;padding-left:1.875rem}}.form-block.adhoc .form .columns.value.date-range .row .columns,.form-block.adhoc .form .columns.value.date-range .row .columns:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.value.date-range .row .columns:last-child:not(:first-child){float:right}.form-block.adhoc .form .columns.value.date-range .row .columns.operator{width:16.66667%;float:left;padding-right:.625rem;padding-left:.625rem;text-align:center;line-height:2.4375rem}@media print, screen and (min-width: 40em){.form-block.adhoc .form .columns.value.date-range .row .columns.operator{padding-right:1.875rem;padding-left:1.875rem}}.form-block.adhoc .form .columns.value.date-range .row .columns.operator,.form-block.adhoc .form .columns.value.date-range .row .columns.operator:last-child:not(:first-child){float:left;clear:none}.form-block.adhoc .form .columns.value.date-range .row .columns.operator:last-child:not(:first-child){float:right}.form-block.adhoc .form .columns:last-child:last-child:last-child{float:left}.form-block.adhoc .form .row.output-item{padding-right:90px !important}.form-block.row .columns.form.search-options{position:relative !important}.form-block.row .columns.form.search-options .columns.pad-for-button{padding-right:50px !important}.form-block.row .columns.form.search-options .columns.pad-for-button button.go{top:1px !important;text-align:center !important}.form-block.row .columns.form.search-options .columns.pad-for-button button.go .fa{position:relative;top:-2px;left:auto;right:auto;bottom:auto;color:#8f1838}textarea.tall{min-height:200px}.form-block .form.auto-format .form-error{margin-bottom:.25rem}.error-tip{background:#db2121;height:1rem;width:1rem;text-align:center;border-radius:.5rem;line-height:.875rem;overflow:hidden;float:right;right:-8px;top:50%;position:relative;margin-top:-1.375rem}.error-tip i.fa{color:#fff !important;font-weight:normal;font-size:.5rem !important}.tooltip{font-weight:600;line-height:1.4}.page-content .datepicker-close{margin-right:10px !important}.page-content .input-icon{position:relative}.page-content .input-icon .fa{color:#ababad;position:absolute;left:.625rem;top:.8125rem}.page-content .input-icon input{padding-left:1.75rem}.page-content .input-icon input:focus+.fa,.page-content .input-icon textarea:focus+.fa{color:#cc2350}.file-upload{background:#f5f5f5;margin-left:-1.5rem;padding:1rem 1.5rem}.file-upload input,.file-upload button{display:inline-block;width:auto;margin:0}.file-upload label{margin-bottom:.25rem}.file-upload button.primary,.file-upload .article button.button,.article .file-upload button.button{padding-top:.5rem !important;padding-button:.5rem !important;top:.25rem;position:relative}.shaded .file-upload{padding-top:0;padding-bottom:0}a.icon-link{line-height:1px;display:inline-block;margin:.5rem 0 0 0}.matches-panel{background:#eee;padding:1rem 0 0;margin-bottom:1rem}.matches-panel label{margin-left:1rem;margin-bottom:.125rem}.matches-panel ul{max-height:148px;overflow-y:auto}.matches-panel ul,.matches-panel li{list-style-type:none;margin:0;padding:0}.matches-panel li{border-bottom:1px solid #cdcdcd}.matches-panel li:last-child{border-bottom:0}.matches-panel li a{padding:.375rem 1rem;display:block}.matches-panel li a:hover,.matches-panel li a:active,.matches-panel li a:focus,.matches-panel li a.active{background:#8f1838;color:#fff}.form.h2-check{clear:both !important;padding:.5rem 0 1rem 0 !important;float:none !important}.form.h2-check label{font-size:1.25rem;margin-bottom:0;line-height:normal;text-transform:none}.form.h2-check label input[type=\\\"checkbox\\\"]{position:relative;top:3px}.form p.sample-info{font-weight:600}p.h2-label{font-weight:700;text-transform:uppercase;letter-spacing:2px;font-size:.5625rem;color:#8f1838}.form-block .title p.sample-id{font-size:.875rem}.form-block .title p.sample-id .highlight{color:#8f1838;font-weight:700;display:block;margin-top:.25rem}.form-block .title p.sample-id .highlight button i{color:#8f1838}.form-block .title p.sample-id .highlight button:hover i,.form-block .title p.sample-id .highlight button:active i,.form-block .title p.sample-id .highlight button:focus i{color:#cc2350}.action-space-holder{display:inline-block;width:27px}.sample-request-info table,.sample-request-info p{margin-bottom:.5rem !important}.dashboard .analytics{padding-bottom:0}.analytic-toggler{background:#4f4449;padding-top:.5rem;padding-bottom:.5rem}.analytic-toggler button{color:#fff;font-size:.6875rem;text-transform:uppercase}.analytic-toggler button .fa{font-size:1rem;margin-right:3px;position:relative;top:.125rem}.analytics{padding-top:1.5rem;padding-bottom:1rem;position:relative;background:#4f4449;background:-moz-linear-gradient(top, #4f4449 0%, #65414d 100%);background:-webkit-linear-gradient(top, #4f4449 0%, #65414d 100%);background:linear-gradient(to bottom, #4f4449 0%, #65414d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4f4449', endColorstr='#65414d',GradientType=0 )}.analytics.collapsible{padding-top:0;display:none}.analytics.collapsible.expanded{display:block}.analytics.video{color:#fff}.analytics.video p{font-size:.875rem;opacity:.8}.analytics p.ghost{margin-bottom:0 !important;font-size:.8125rem;color:#fff;opacity:.6;font-style:italic;padding:0 2rem !important}@media screen and (max-width: 39.99875em){.analytics .transparent{padding-bottom:2rem !important}}.analytics>.row>.columns{padding-top:.25rem;padding-bottom:0}.analytics h2{color:#fff;font-family:Raleway;font-weight:300;position:relative;font-size:1.25rem;margin-bottom:1rem}.analytics h2 .ghost{opacity:.7}.analytics h2 .small{font-size:.875rem}.analytics h2 button{font-size:1rem;color:rgba(255,255,255,0.35);position:absolute;right:0;top:50%;margin-top:-.5rem;cursor:pointer}.analytics h2 button:focus,.analytics h2 button:active,.analytics h2 button:hover{color:#fff}.analytics canvas{z-index:4;position:relative}.analytics .chart-box{padding:1rem;background:rgba(255,255,255,0.1);position:relative}@media screen and (max-width: 39.99875em){.analytics .chart-box.has-arrrow{margin-bottom:2rem}}.analytics .chart-box.has-arrow:after{position:absolute;right:-2rem;top:0;bottom:0;background:url(../images/chart-arrow.png) no-repeat left center;content:\\\"\\\";width:2rem}@media screen and (max-width: 39.99875em){.analytics .chart-box.has-arrow:after{position:absolute;right:0;bottom:-2rem;top:auto;left:0;background:url(../images/chart-arrow-down.png) no-repeat top center;content:\\\"\\\";height:2rem;width:auto}}.analytics .chart-box.transparent,.analytics .chart-box.detail{background:transparent;padding-bottom:0}.analytics .row.count .columns{color:#fff;font-size:.75rem;text-align:center;line-height:normal;padding:.5rem 0;text-align:center}.analytics .row.count .columns>a{color:#fff;display:block;border-radius:3rem;border:1px solid #543c44;height:4rem;width:4rem;margin:0 auto .75rem;animation-name:fade-0-to-1;animation-duration:2s}@keyframes fade-0-to-1{0%{opacity:0}100%{opacity:1}}.analytics .row.count .columns .submitted{background:#79686d}.analytics .row.count .columns .received{background:#cc2350}.analytics .row.count .columns .received:focus,.analytics .row.count .columns .received:active,.analytics .row.count .columns .received:hover{background:#d60039}.analytics .row.count .columns .processing{background:#9fd0cb}.analytics .row.count .columns .completed{background:#25d925}.analytics .row.count strong{font-size:1.5rem;line-height:4rem;font-weight:300;font-family:arial;margin:0}.analytics .chart{position:relative}.analytics .chart-title{color:#fff;font-size:.625rem;text-transform:uppercase;font-weight:700;padding:0 2rem 0 0;margin-bottom:.75rem;letter-spacing:4px;position:relative}.analytics .doughnut-inner{animation-name:fade-0-to-1;animation-duration:2s;text-align:center;position:absolute;color:#fff;left:50%;top:50%;z-index:2;margin-left:-50px;margin-top:-40px;height:auto;width:100px}@keyframes fade-0-to-1{0%{opacity:0}100%{opacity:1}}.analytics .doughnut-inner p{line-height:normal;margin:0;text-align:center}.analytics .doughnut-inner strong{display:block;font-size:2.5rem;font-family:Arial, sans-serif;margin-bottom:-.375rem}.analytics .doughnut-inner span{font-size:12px}.analytics .row.legend{margin-bottom:-1rem;position:relative;top:-2rem}@media print, screen and (min-width: 40em){.analytics .row.legend{margin-top:0;top:0;margin-bottom:1.5rem}}.analytics .row.legend .columns{text-align:center}.analytics .row.legend ul{list-style-type:none;margin:1rem auto 0;padding:0}.analytics .row.legend ul li{white-space:nowrap;padding:0 1rem;display:inline;color:#fff;font-size:.75rem}.analytics .row.legend ul li span{display:inline-block;height:.75rem;width:1rem;border:1px solid #543c44;position:relative;margin-right:3px;top:1px}.analytics .split-analytics>.columns:first-child{border-right:1px solid #332c2f}.analytics .split-analytics .chart-box.summary{margin-bottom:1rem}@media print, screen and (min-width: 40em){.analytics .split-analytics .chart-box.transparent{margin-left:-2rem !important;margin-right:-1rem}}@media screen and (max-width: 39.99875em){.analytics .split-analytics .has-arrow:after{position:absolute;right:0;bottom:-2rem;top:auto;left:0;background:url(../images/chart-arrow-down.png) no-repeat top center;content:\\\"\\\";height:2rem;width:auto}}@media print, screen and (min-width: 64em){.analytics .sidebar-description.columns{padding-left:0}}.analytics .sidebar-description.columns p{font-size:.8125rem}#barChartMobile{display:block}#barChart{display:none}@media print, screen and (min-width: 64em){#barChartMobile{display:none}#barChart{display:block}}.chart-box .chart-error{margin-bottom:0}.filter-bar{position:relative;text-align:center;background:#342b2f}button,.button{cursor:pointer}button.filters{position:absolute;right:0;top:0;color:#2e2e2e;white-space:nowrap;line-height:3.125rem;z-index:5;font-style:italic;font-size:.875rem}button.filters .fa{transition:ease all .25s;margin-left:.5rem;color:#ababad;position:relative;top:2px;height:3.125rem;width:3.125rem;background:#55565a;display:inline-block;line-height:3.125rem;font-size:1.5rem}button.filters:hover .fa,button.filters:active .fa,button.filters:focus .fa{background:#2e2e2e}.js-off-canvas-overlay{z-index:40;background:rgba(0,0,0,0.5)}.off-canvas.position-right .key-pair .small-2{position:relative}.off-canvas.position-right .key-pair .small-2 button{display:block;width:100%;text-align:center;color:#cc2350;font-size:1rem;margin-top:28px}.off-canvas.position-right .key-pair .small-2 button:hover,.off-canvas.position-right .key-pair .small-2 button:active,.off-canvas.position-right .key-pair .small-2 button:focus{color:#df436d}.off-canvas.position-right .key-pair .small-5{padding-right:10px}.off-canvas.position-right .accordion .accordion-content .select2-container{height:auto !important}.progress{height:12px;overflow:hidden;margin-bottom:.75rem}.progress.large{height:2rem}.progress-meter{border:1px solid #543c44;-webkit-animation:progress 2s ease;-moz-animation:progress 2s ease;-o-animation:progress 2s ease;animation:progress 2s ease}.received .progress-meter{background:#cc2350}.completed .progress-meter,.negative .progress-meter{background:#25d925}.processing .progress-meter{background:#9fd0cb}.submitted .progress-meter{background:#7d7377}.processing .progress-meter{background:#9fd0cb}.positive .progress-meter{background:#c00}.progress-title{color:#fff;font-size:.5625rem;text-transform:uppercase;font-weight:300;padding:0;margin-bottom:.25rem;letter-spacing:1px}.progress-title strong{letter-spacing:normal;font-size:1rem;font-family:arial, sans-serif}@-webkit-keyframes progress{0%{margin-left:-100%}100%{margin-left:0}}@-moz-keyframes progress{0%{margin-left:-100%}100%{margin-left:0}}@-o-keyframes progress{0%{margin-left:-100%}100%{margin-left:0}}@keyframes progress{0%{margin-left:-100%}100%{margin-left:0}}@media print, screen and (min-width: 40em){.sample-summary .table-summary{padding-right:25px}}@media print, screen and (min-width: 40em){table.fixed{table-layout:fixed !important}}table.table.multi-sample{border-top:1px solid #d5d5d6}table.table.single-sample tbody tr,table.table.single-sample tbody tr td{border:none !important}table.table tbody tr td{vertical-align:middle}table.table tbody tr td a{font-size:0.8125rem !important}@media print, screen and (min-width: 64em){table.table tbody tr td.fixed-large{width:33% !important}table.table tbody tr td.fixed-small{width:20% !important}}.range-to{line-height:24px;display:block;padding:0.25rem 0}.options-label{display:none}.form .row table.table input,.form .row table.table select,.form .row table.table textarea,.form .row table.table .select2-container{margin-bottom:0 !important}table.table input[type='number'].inline,table.table input[type='text'].inline{height:1.75rem !important;line-height:normal !important;margin-bottom:0;padding-top:0 !important;padding-bottom:0 !important}table.table tbody tr:hover .button:disabled,table.table tbody tr:hover .button.disabled,table.table tbody tr:hover .button[disabled],table.table tbody tr:hover button:disabled,table.table tbody tr:hover button.disabled,table.table tbody tr:hover button[disabled]{opacity:0.35 !important}table.table tbody tr:hover .button:disabled:hover,table.table tbody tr:hover .button:disabled:active,table.table tbody tr:hover .button:disabled:focus,table.table tbody tr:hover .button.disabled:hover,table.table tbody tr:hover .button.disabled:active,table.table tbody tr:hover .button.disabled:focus,table.table tbody tr:hover .button[disabled]:hover,table.table tbody tr:hover .button[disabled]:active,table.table tbody tr:hover .button[disabled]:focus,table.table tbody tr:hover button:disabled:hover,table.table tbody tr:hover button:disabled:active,table.table tbody tr:hover button:disabled:focus,table.table tbody tr:hover button.disabled:hover,table.table tbody tr:hover button.disabled:active,table.table tbody tr:hover button.disabled:focus,table.table tbody tr:hover button[disabled]:hover,table.table tbody tr:hover button[disabled]:active,table.table tbody tr:hover button[disabled]:focus{opacity:0.35 !important;color:#8f1838}table.table tbody tr td.row-actions button .fa{color:#8f1838}table.table .row-actions{position:relative;left:0;right:0;border-left:none !important;width:1%;white-space:nowrap}table.table .row-actions button{padding:0;font-size:1.25rem;line-height:1.25rem;margin:0 10px 0 0}@media print, screen and (min-width: 64em){table.table .row-actions button{opacity:0}table.table .row-actions button .fa{color:#8f1838}table.table .row-actions button:hover .fa,table.table .row-actions button:active .fa,table.table .row-actions button:focus .fa{color:#cc2350}}@media print, screen and (min-width: 64em){table.table .row-actions button{margin:2px 0 0 10px}table.table tr:hover td{background:#fbfafa;font-weight:600}table.table tr:hover td a{font-weight:600}table.table tr:hover .row-actions button{opacity:1;transition:ease all 0.25s}table.table tr:hover .row-actions button .fa{color:#8f1838}table.table tr:hover .row-actions button:hover .fa,table.table tr:hover .row-actions button:active .fa,table.table tr:hover .row-actions button:focus .fa{color:#cc2350}table.table.no-drill tr{cursor:default !important}}table.table.readonly th,table.table.readonly td{background:#fff !important;cursor:default}table.table.readonly th:hover,table.table.readonly th:active,table.table.readonly th:focus,table.table.readonly td:hover,table.table.readonly td:active,table.table.readonly td:focus{background:#fff !important;cursor:default}table.table tr.child td{background:#fff !important;cursor:default}table.table tr.child td:hover,table.table tr.child td:active,table.table tr.child td:focus{background:#fff !important;cursor:default}.stacktable.large-only{display:table}.stacktable.small-only{display:none}.st-key{width:auto !important}.st-key .options-label{display:none}@media screen and (max-width: 39.99875em){.st-key .options-label{display:block;font-weight:normal;margin-top:0.375rem;color:#0a0a0a}}.st-val{width:70% !important}@media (max-width: 1025px){table.stacktable tr.group-head.hide-for-large{border-top:2px solid #55565a}.stacktable tr.group-head th.st-head-row{background:#f3f3f3;padding-left:4rem}}@media screen and (max-width: 1025px) and (max-width: 39.99875em){.stacktable tr.group-head th.st-head-row{padding-left:2.625rem !important}}@media (max-width: 1025px){.stacktable tr.group-head th.st-head-row label:after{display:none}table.stacktable tr:first-child{display:none}}@media print and (max-width: 1025px), screen and (max-width: 1025px) and (min-width: 64em){table.stacktable tr:first-child{display:table-row}}@media (max-width: 1025px){table.stacktable tr.group-head .st-head-row{color:#87898e;min-height:1.4375rem;font-size:0.8125rem;letter-spacing:normal;text-align:left;text-transform:none}table.stacktable tr.group-head .st-head-row label{width:1.5rem;position:absolute;left:2rem;top:0.875rem}}@media screen and (max-width: 1025px) and (max-width: 39.99875em){table.stacktable tr.group-head .st-head-row label{left:0.625rem;top:0.625rem}}@media (max-width: 1025px){table.stacktable tr.group-head .st-head-row a{display:inline-block;padding:0 0.5rem;color:#55565a;font-weight:600}table.stacktable tr.group-head .st-head-row a .fa{color:#8f1838;font-size:0.9375rem;display:inline-block;margin-right:2px}}@media screen and (max-width: 1025px) and (max-width: 39.99875em){table.stacktable tr.group-head .st-head-row a:first-of-type{margin-left:-24px}}@media (max-width: 1025px){table.stacktable tr.group-head .st-head-row span.number{font-size:0.9375rem;color:#55565a;margin-right:1rem}.stacktable tr th.st-head-row{border-top:1px solid #2e2e2e;background:#fafafa}.stacktable tr th.st-head-row label{text-align:left}.stacktable tr th.st-head-row label:after{content:'Select the following item.';text-transform:none;letter-spacing:normal;font-size:0.75rem;color:#5f6063;position:relative;left:7px;top:-5px}.stacktable.large-only{display:none}.stacktable.small-only{display:table}.st-val{text-align:left}}table.table{border-collapse:collapse;clear:both}table.table tr th.st-head-row{border-bottom:1px solid #d5d5d6}table.table tr th.st-head-row:after{display:none}table.table thead tr:hover th{background:#fff}table.table thead tr,table.table tbody tr{border-bottom:1px solid #d5d5d6}table.table thead tr td p.note,table.table tbody tr td p.note{margin:0;font-style:italic;color:#0a0a0a !important}table.table thead tr th,table.table thead tr td,table.table tbody tr th,table.table tbody tr td{font-size:0.8125rem;border-left:1px solid #efefef}table.table thead tr th a,table.table thead tr td a,table.table tbody tr th a,table.table tbody tr td a{font-size:0.6875rem}table.table thead tr th .fa,table.table thead tr td .fa,table.table tbody tr th .fa,table.table tbody tr td .fa{color:#55565a}table.table thead tr th:first-child,table.table thead tr td:first-child,table.table tbody tr th:first-child,table.table tbody tr td:first-child{padding-left:2rem;border-left:none !important}table.table thead tr th:last-child,table.table thead tr td:last-child,table.table tbody tr th:last-child,table.table tbody tr td:last-child{padding-right:2rem}@media screen and (max-width: 39.99875em){table.table thead tr th,table.table thead tr td,table.table tbody tr th,table.table tbody tr td{padding:0.625rem !important}}table.table thead tr th.end-group,table.table thead tr td.end-group,table.table tbody tr th.end-group,table.table tbody tr td.end-group{border-right:1px solid #a7a8aa}@media screen and (max-width: 39.99875em){table.table thead tr th.end-group,table.table thead tr td.end-group,table.table tbody tr th.end-group,table.table tbody tr td.end-group{border-right:none}}table.table thead tr td.st-key,table.table tbody tr td.st-key{font-weight:700;text-transform:uppercase;letter-spacing:2px;font-size:0.5625rem;color:#8f1838}table.table thead tr th,table.table tbody tr th{position:relative;font-weight:700;text-transform:uppercase;letter-spacing:2px;font-size:0.5625rem;border-bottom:1px solid #55565a;padding-right:30px}table.table thead tr th input,table.table tbody tr th input{margin-bottom:0}table.table thead tr th:hover:after,table.table tbody tr th:hover:after{opacity:0.75}table.table thead tr th:after,table.table tbody tr th:after{position:absolute;right:8px;top:50%;margin-top:-10px;display:block;font-size:0.8125rem;color:#55565a;opacity:0.35;text-align:center;content:'\\\\f0dc';width:19px;height:19px;font-family:FontAwesome}table.table thead tr th.sorting-none:after,table.table tbody tr th.sorting-none:after{display:none !important}table.table thead tr th.sorting-asc:after,table.table tbody tr th.sorting-asc:after{content:'\\\\f0de';opacity:1;color:#cc2350}table.table thead tr th.sorting-desc:after,table.table tbody tr th.sorting-desc:after{content:'\\\\f0dd';opacity:1;color:#cc2350}table.table thead tr th.checkbox,table.table tbody tr th.checkbox{width:2rem;padding-top:0;padding-bottom:0}table.table thead tr th.checkbox:after,table.table tbody tr th.checkbox:after{display:none}@media screen and (max-width: 39.99875em){table.table thead tr th span.row-actions,table.table tbody tr th span.row-actions{clear:both;display:block;margin-left:1rem}}table.table tbody tr td .item-options a{display:inline-block;padding:0.5rem 0.75rem 0 0;color:#55565a;font-weight:600;font-size:0.6875rem}table.table tbody tr td .item-options a .fa{color:#8f1838;font-size:0.9375rem;display:inline-block;margin-right:2px}table.table tbody tr:hover td{border-left:1px solid #eae6e2}table.table tbody tr.highlight td{background:#f7f5f4;color:#0a0a0a;font-weight:600;border-left:1px solid #e4ded9}@media screen and (max-width: 39.99875em){table.table tbody tr.highlight td{background:#fff;color:#55565a;font-weight:400;border-left:1px solid #d5d5d6}}table.table tbody tr.group-head{position:relative}table.table tbody tr.group-head td{background:#f3f3f3;color:#87898e;font-weight:700;border-color:#e1e1e1}table.table tbody tr.group-head td.st-key{text-transform:uppercase;letter-spacing:2px;font-size:0.5625rem;color:#8f1838;text-indent:-5000px}table.table tbody tr.group-head td span{color:#e1e1e1}table.table tbody tr.group-head td span.number{font-size:0.9375rem;color:#55565a;margin-right:1rem}table.table tbody tr.group-head td a{display:inline-block;padding:0 0.5rem;color:#55565a;font-weight:600}table.table tbody tr.group-head td a .fa{color:#8f1838;font-size:0.9375rem;display:inline-block;margin-right:2px}@media screen and (max-width: 39.99875em){table.table tbody tr.group-head td a:first-of-type{margin-left:-20px}}table.table input[type='text'],table.table input[type='email'],table.table input[type='num'],table.table input[type='password']{margin-bottom:0}table.table label{margin:3px 0 0 0;padding:0;line-height:normal}table.table label+input{margin-top:0.125rem !important}table.table label input[type='checkbox'],table.table label input[type='radio']{-webkit-appearance:none;background-color:#fff;border:1px solid #cacece;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05);padding:0;height:1.25rem;width:1.25rem;display:inline-block;margin:0;position:relative}table.table label input[type='checkbox']active,table.table label input[type='checkbox']:checked:active,table.table label input[type='radio']active,table.table label input[type='radio']:checked:active{box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px 1px 3px rgba(0,0,0,0.1)}table.table label input[type='checkbox']:checked,table.table label input[type='radio']:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05),inset 15px 10px -12px rgba(255,255,255,0.1)}table.table label input[type='checkbox']:checked:after,table.table label input[type='radio']:checked:after{font-family:FontAwesome;content:'\\\\f00c';position:absolute;top:0;left:2px;color:#cc2350;text-align:center;font-size:0.875rem;height:0.875rem;width:0.875rem}table.table label input[type='radio']{border-radius:0.625rem}table.table label input[type='radio']:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05),inset 15px 10px -12px rgba(255,255,255,0.1)}table.table label input[type='radio']:checked:after{content:'';position:absolute;top:4px;left:4px;background:#cc2350;text-align:center;height:0.625rem;width:0.625rem;border-radius:0.3125rem}.data-options{margin-top:1rem;margin-bottom:1rem}@media print, screen and (min-width: 64em){.data-options{margin-top:0;margin-bottom:0}}.data-options.form{margin-bottom:1rem}.data-options label{line-height:normal !important;margin-bottom:0.5rem !important}@media print, screen and (min-width: 64em){.data-options label{line-height:2.4375rem !important;margin-bottom:0 !important}}.data-options label i.fa{display:none !important}@media print, screen and (min-width: 64em){.data-options label i.fa{display:inline-block !important}}.data-options .fa{color:#ababad;margin-right:2px;position:relative;top:2px}.data-options button{padding:0 20px 0 29px;text-align:left;color:#2e2e2e;text-transform:none;font-size:0.6875rem;border:none;position:relative;height:2.4375rem;line-height:normal !important;margin:0 !important;position:relative;top:-8px;margin-top:0.75rem}.data-options button .fa{color:#8f1838;font-size:1.25rem;position:absolute;top:2px;left:0;margin-right:3px;height:2.4375rem;width:1.5rem;line-height:2.4375rem;text-align:center;float:left}@media print, screen and (min-width: 40em){.data-options select+.page-action{margin-left:0.25rem !important}}@media print, screen and (min-width: 64em){.data-options{margin-top:1.5rem}}.data-options label{line-height:2.4375rem;margin-bottom:0;white-space:nowrap}@media print, screen and (min-width: 64em){.data-options label{display:inline-block;margin-right:0.5rem}}.data-options select{width:auto}@media screen and (max-width: 39.99875em){.data-options select{display:block;width:100%}}.data-options i.fa{font-size:1.25rem}.search-options{background:#f5f5f5;padding-top:1rem}.search-options .pad-for-button{padding-right:50px !important;position:relative}.search-options button.go{height:2.3125rem;width:2.3125rem;margin:0;border:1px solid #8f1838;text-align:center;padding:0;color:#8f1838;position:absolute;right:0;top:5px;font-size:0.8125rem}.search-options button.go .fa{color:#8f1838;top:0;left:0;width:2.3125rem;text-align:center}@media screen and (max-width: 39.99875em){.search-options button.go{right:5px}}.search-options .search{position:relative}.search-options .search input{padding-left:2rem}.search-options .search .fa{position:absolute;left:0.9375rem;height:2.4375rem;line-height:2.4375rem;top:3px;z-index:8;color:#55565a}.search-options .search:focus+.fa,.search-options .search:active+.fa{color:#cc2350}.search-options.clear{background:none transparent;padding:0}.search-options.clear .search .fa{top:0;left:0.9375rem;height:2.4375rem;line-height:2.4375rem;font-size:1rem}table.mobile-table tbody.mobile-row{border-bottom:2px solid #55565a}table.mobile-table tbody.highlight tr td{background:#f7f5f4;color:#0a0a0a;font-weight:600;border-left:1px solid #e4ded9}table.mobile-table tr{vertical-align:top}table.mobile-table tr td{padding-left:1rem !important}table.mobile-table tr td strong{font-weight:700;text-transform:uppercase;letter-spacing:2px;font-size:0.5625rem;color:#8f1838}@media print, screen and (min-width: 64em){table.mobile-table{display:none}}table.mobile-table .new-data-row,table.mobile-table .group-head{border-top:2px solid #55565a}table.mobile-table .group-head+.new-data-row{border-top:1px solid #e6e6e6}table.desktop-table{display:none}@media print, screen and (min-width: 64em){table.desktop-table{display:table}}table.stacktable{margin-bottom:0}table.stacktable tbody tr.group-head .st-key{display:none}table.stacktable tbody tr.group-head:first-child{display:none}table.stacktable.basic tr.group-head th.st-key,table.stacktable.basic tr.group-head td.st-key{display:table-cell}table.stacktable.basic tr.group-head th.st-head-row{padding-left:0.625rem !important}.report-html table:not([class]){margin:initial;padding:initial}.report-html table:not([class]) thead:not([class]),.report-html table:not([class]) tbody:not([class]){margin:initial;padding:initial}.report-html table:not([class]) thead:not([class]) tr:not([class]),.report-html table:not([class]) tbody:not([class]) tr:not([class]){margin:initial;padding:initial}.report-html table:not([class]) thead:not([class]) tr:not([class]) th:not([class]),.report-html table:not([class]) thead:not([class]) tr:not([class]) td:not([class]),.report-html table:not([class]) tbody:not([class]) tr:not([class]) th:not([class]),.report-html table:not([class]) tbody:not([class]) tr:not([class]) td:not([class]){margin:initial;padding:initial}p.intro{font-size:.875rem;max-width:60rem;margin:0 auto;text-align:center;margin-bottom:.5rem;color:#55565a}.article-standalone{padding-top:1.25rem;padding-bottom:1.25rem}.article-standalone .last-modified{opacity:.85;font-size:.8125rem;font-style:italic}.article-standalone.legal h2{border-bottom:1px solid #0a0a0a;display:inline-block}.article-standalone.legal a{text-decoration:underline;font-weight:700}p.attention{font-weight:600;color:#55565a;position:relative;padding-left:1rem}p.attention:before{font-family:'FontAwesome';color:#db2121;content:\\\"\\\\f05a\\\";font-weight:normal;margin-right:.25rem;margin-left:-1rem}h2+p.attention{margin-top:1rem}.text-block{padding:1.5rem 0}.text-block.secondary{font-size:.8125rem}@media print, screen and (min-width: 64em){.text-block.secondary{font-size:.875rem}}.form-block .article,.article{font-size:.875rem}.form-block .article p,.article p{line-height:1.75;color:#0a0a0a;font-size:.875rem}.form-block .article a,.article a{font-size:.875rem}.form-block .article strong,.article strong{color:#0a0a0a}.form-block .article .callout,.article .callout{background:#f3f0ee;padding:1.5rem}@media screen and (max-width: 39.99875em){.form-block .article .callout,.article .callout{padding:1rem}}.form-block .article h1,.article h1{color:#8f1838;font-size:1.5rem;line-height:1.2}.form-block .article h2,.form-block .article h3,.form-block .article h4,.form-block .article h5,.form-block .article h6,.article h2,.article h3,.article h4,.article h5,.article h6{margin-bottom:0}.form-block .article h2,.article h2{font-size:1.25rem;margin-bottom:.5rem}.form-block .article h3,.article h3{font-size:1rem;color:#8f1838;font-weight:600}.form-block .article h4,.article h4{font-size:.875rem;font-weight:600}.form-block .article h5,.article h5{font-size:.875rem}.form-block .article img,.article img{margin:0 auto;display:block}.form-block .article img.float-left,.form-block .article img.float-right,.article img.float-left,.article img.float-right{float:none;margin-left:0;margin-right:0;min-width:100%;margin-bottom:1rem}@media print, screen and (min-width: 64em){.form-block .article img.float-left,.article img.float-left{float:left;margin:0 1.5rem 1.5rem 0;min-width:0}}@media print, screen and (min-width: 64em){.form-block .article img.float-right,.article img.float-right{float:right;margin:0 0 1.5rem 1.5rem;min-width:0}}.float-right{margin:0 0 1.5rem 1.5rem}.float-left{margin:0 1.5rem 1.5rem 0}.chart-error,.chart-message{text-align:center;color:#fff;font-size:.875rem;line-height:normal;margin-bottom:1.5rem}.chart-error i.fa,.chart-message i.fa{font-size:.75rem}.chart-error span,.chart-message span{display:block;font-size:.75rem}@media print, screen and (min-width: 40em){.chart-message{text-align:left}}p.margin-top{margin-top:1.5rem}.form-block .legal-text{color:#55565a;position:relative}.form-block .legal-text a{margin:0;font-size:.8125rem}.form-block h2+.legal-text{margin-top:1rem}footer{background:#2e2e2e;color:#aeaeae;padding-top:.625rem;z-index:20;position:fixed;bottom:0;right:0;left:3.125rem;font-size:.5625rem}footer span.legal-links{float:none;padding:0 10px 0 0;display:inline-block;margin-top:.25rem;text-align:left}footer span.legal-links a{display:block}@media print, screen and (min-width: 64em){footer span.legal-links{float:right;margin-top:.125rem}footer span.legal-links a{line-height:28px;display:inline-block;padding-left:.5rem;padding-right:.5rem}footer span.legal-links a:first-of-type{border-right:1px solid #616161}}@media screen and (max-width: 39.99875em){footer{display:none}}footer .button,footer button{float:right;font-size:.75rem;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:.625rem}@media print, screen and (min-width: 64em){footer{font-size:.75rem}}footer a{color:#aeaeae}footer a:hover,footer a:focus,footer a:active{color:#fff}footer .iso{display:inline-block;width:auto;font-size:.5625rem;margin-top:.25rem}@media print, screen and (min-width: 40em){footer .iso img{height:.9375rem;width:.9375rem;margin-right:.5rem}}@media print, screen and (min-width: 64em){footer .iso img{height:1.25rem;width:1.25rem;margin-top:.125rem}}@media print, screen and (min-width: 64em){footer .iso img{margin-top:0}}footer img,footer span{float:left}footer img{margin-right:10px}footer span{position:relative;top:-2px}footer span.iso-desktop{display:block}footer span.iso-mobile{display:none}@media screen and (max-width: 39.99875em){footer span.iso-desktop{display:none}footer span.iso-mobile{display:block}}footer .copyright{display:none;clear:both;background:#000;padding-top:.375rem;padding-bottom:.375rem;text-align:center;font-size:.5625rem}.tasks{padding-bottom:1rem;padding-top:1.5rem;background:#fff;background:-moz-linear-gradient(top, #fff 0%, #fff 100%);background:-webkit-linear-gradient(top, #fff 0%, #fff 100%);background:linear-gradient(to bottom, #fff 0%, #fff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#fff',GradientType=0 )}.tasks ul{margin-bottom:1.5rem !important}@media print, screen and (min-width: 64em){.tasks ul{margin-bottom:0 !important}}@media screen and (max-width: 39.99875em){.tasks .remediation{width:100%}}@media screen and (min-width: 40em) and (max-width: 63.99875em){.tasks .remediation{width:100%}}.tasks .task-count{list-style-type:none;width:160px;margin:0 auto;text-align:left}@media screen and (max-width: 39.99875em){.tasks .task-count{width:100%;text-align:center}}.tasks .task-count li{font-size:.875rem;padding:0 1rem;animation-name:fade-0-to-1;animation-duration:2s;padding-bottom:.5rem}@keyframes fade-0-to-1{0%{opacity:0}100%{opacity:1}}.tasks>.row .column,.tasks>.row .columns{border-right:1px solid #d5d5d6}.tasks>.row .column:last-child,.tasks>.row .columns:last-child{border-right:none}.tasks>.row .column .columns,.tasks>.row .columns .columns{border-right:none}@media screen and (max-width: 39.99875em){.tasks>.row .column:nth-child(2),.tasks>.row .columns:nth-child(2){border-right:none}}.tasks strong{height:2.5rem;width:2.5rem;line-height:2.5rem;border-radius:1.25rem;text-align:center;color:#fff;display:inline-block;margin-right:5px;font-size:1.25rem;font-family:Arial;display:block;margin:0 auto .25rem}.tasks strong.incomplete,.tasks strong.unassigned{background:#c00}.tasks strong.completed{background:#25d925}.tasks strong.assigned{background:#9fd0cb}@media print, screen and (min-width: 40em){.tasks strong{display:inline-block;margin:0 .25rem 0 0}}.tasks h2{color:#2e2e2e;font-weight:400;font-family:Raleway;font-weight:300;position:relative;font-size:1.25rem;margin-bottom:1rem}@media screen and (max-width: 39.99875em){.tasks h2{font-size:1rem}}.tasks h3{font-size:.675rem;text-transform:uppercase;letter-spacing:2px;color:#8f1838;font-weight:700;margin-bottom:.75rem}.tasks a{font-weight:300;font-size:3rem;color:#2e2e2e;width:6rem;height:6rem;border-radius:3rem;border:1px solid red;display:block;margin:0 auto;line-height:6rem;font-family:arial}@media screen and (min-width: 1024px) and (max-width: 1300px){.tasks strong{display:block;margin:0 auto .25rem}.tasks li{text-align:center;width:100%;font-size:.75rem !important}.task-count{width:auto !important}}@media screen and (max-width: 860px){.tasks strong{display:block;margin:0 auto .25rem}.tasks li{text-align:center;width:100%;font-size:.75rem !important}.task-count{width:auto !important}}.remediation{border-top:1px solid #d5d5d6}.remediation h2{margin-top:1.5rem}@media print, screen and (min-width: 64em){.remediation{border-top:none;margin-top:0}.remediation h2{margin-top:0}}.tasks.dashboard-tasks .row .row .column,.tasks.dashboard-tasks .row .row .columns{border:none;padding-bottom:.75rem;font-size:.75rem}.tasks.dashboard-tasks h2{margin:0 auto;text-align:center}.tasks.dashboard-tasks h3{border-bottom:1px solid #d5d5d6;padding-bottom:.5rem;margin-bottom:.75rem;margin-top:1rem}@media screen and (max-width: 1300px){.tasks.dashboard-tasks strong{display:block;margin-bottom:.25rem;margin:0 auto .25rem auto}.tasks.dashboard-tasks .row .row .column,.tasks.dashboard-tasks .row .row .columns{text-align:center}}.row.map-header .row{margin:0 !important}.fixed-secondary-header{background:#d5d5d6;top:calc($f-block-height + $f-block-height);left:0;right:0;z-index:10}@media print, screen and (min-width: 40em){.fixed-secondary-header{left:3.125rem;position:fixed}.fixed-secondary-header .columns:first-of-type{margin-left:-10px}}.fixed-secondary-header button.page-action,.fixed-secondary-header .button.page-action{vertical-align:top;margin-bottom:0 !important;padding:0 10px 0 40px;margin:0 !important;text-align:left;color:#2e2e2e;text-transform:none;font-size:0.6875rem;border:none;position:relative;height:3.125rem;line-height:normal !important}.fixed-secondary-header button.page-action:hover i.fa,.fixed-secondary-header button.page-action:active i.fa,.fixed-secondary-header button.page-action:focus i.fa,.fixed-secondary-header .button.page-action:hover i.fa,.fixed-secondary-header .button.page-action:active i.fa,.fixed-secondary-header .button.page-action:focus i.fa{color:#cc2350}.fixed-secondary-header button.page-action i.fa,.fixed-secondary-header .button.page-action i.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;color:#8f1838;font-size:1.25rem;position:absolute;top:0;left:10px;margin-right:3px;height:3.125rem;width:1.5rem;line-height:3.125rem;text-align:center;float:left}@media print, screen and (min-width: 40em){.fixed-secondary-header-offset{height:3.125rem}}.map-header{padding-top:0 !important;padding-bottom:0 !important;overflow:visible;height:auto;text-align:center;position:relative;z-index:10;background:#4f4449;background:-moz-linear-gradient(top, #4f4449 0%, #65414d 100%);background:-webkit-linear-gradient(top, #4f4449 0%, #65414d 100%);background:linear-gradient(to bottom, #4f4449 0%, #65414d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4f4449', endColorstr='#65414d',GradientType=0 );background:silver}@media screen and (min-width: 87.1875em){.map-header{height:3.125rem;text-align:left}}.map-header .actions{display:block;width:100%;margin:0}@media print, screen and (min-width: 40em){.map-header .actions{display:inline-block;width:calc(100% - 390px);margin-left:30px;vertical-align:top}}@media print, screen and (min-width: 40em){.map-header .filters{position:relative}}.map-header button.page-action.filter .fa{left:12px !important}.map-header button.page-action,.map-header .button.page-action{padding:0 10px 0 40px;margin:12px 0 !important;text-align:left;color:#2e2e2e;text-transform:none;font-size:0.6875rem;border:none;position:relative;line-height:normal !important}@media screen and (max-width: 39.99875em){.map-header button.page-action,.map-header .button.page-action{padding-right:10px}.map-header button.page-action i.fa,.map-header .button.page-action i.fa{font-size:1rem !important;left:0 !important}}.map-header button.page-action.filter,.map-header .button.page-action.filter{font-size:0.875rem}@media print, screen and (min-width: 40em){.map-header button.page-action,.map-header .button.page-action{margin-right:-4px !important}}.map-header button.page-action i.fa,.map-header .button.page-action i.fa{color:#8f1838;font-size:1.25rem;position:absolute;top:0;left:10px;margin-right:3px;width:1.5rem;text-align:center;float:left}.map-header button.page-action:hover .fa,.map-header button.page-action:active .fa,.map-header button.page-action:focus .fa,.map-header button.page-action.active .fa,.map-header .button.page-action:hover .fa,.map-header .button.page-action:active .fa,.map-header .button.page-action:focus .fa,.map-header .button.page-action.active .fa{color:#cc2350}.map-header .radio-options{display:inline-block;position:relative;top:6px;margin-left:12px}.map-header .radio-options label{margin-bottom:4px}.map-header input[type='checkbox'].failed-only{top:5px;margin-right:5px}.map-header button.page-action,.map-header .button.page-action{line-height:3.125rem}.map-header h2{margin:0;color:#fff;font-size:1.25rem}@media screen and (max-width: 39.99875em){.analytics.map{height:300px !important}}.map-options button.page-action{height:3.125rem;line-height:3.125rem;margin-right:2px !important;padding:0}.map-options button.page-action .fa{margin-top:-3px !important}.map-options button.page-action .fa{position:static !important}.map-options button.page-action .fa{color:#676767 !important}.map-options button.page-action:hover .fa,.map-options button.page-action:active .fa{color:#cc2350 !important}.map{padding-top:0;padding-bottom:0;overflow:hidden;background:#4f4449;background:-moz-linear-gradient(top, #4f4449 0%, #65414d 100%);background:-webkit-linear-gradient(top, #4f4449 0%, #65414d 100%);background:linear-gradient(to bottom, #4f4449 0%, #65414d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4f4449', endColorstr='#65414d',GradientType=0 )}.map .test-points{list-style-type:none;position:absolute;top:0;left:0;padding:0;margin:0;z-index:7;top:0;left:0}.map .test-points li{cursor:pointer;text-align:center;font-family:Arial, sans-serif;font-weight:400;font-size:1rem;position:absolute}.map .test-points li .historic-pass,.map .test-points li .historic-fail{display:block;height:42px;width:21px;display:block;border-radius:21px 0 0 21px;overflow:hidden;border:1px solid #55565a;-webkit-box-shadow:2px 2px 10px 0px rgba(0,0,0,0.45);-moz-box-shadow:2px 2px 10px 0px rgba(0,0,0,0.45);box-shadow:2px 2px 10px 0px rgba(0,0,0,0.45)}.map .test-points li .historic-pass .historic,.map .test-points li .historic-fail .historic{display:block;height:44px;width:44px;background:#00ee00}.map .test-points li .historic-fail .historic{background:#ee0000}.map .test-points li .icon-holder{border:1px solid #55565a;-webkit-box-shadow:2px 2px 10px 0px rgba(0,0,0,0.45);-moz-box-shadow:2px 2px 10px 0px rgba(0,0,0,0.45);box-shadow:2px 2px 10px 0px rgba(0,0,0,0.45);border-radius:50%;display:block;position:absolute;top:5px;left:5px}.map .test-points li .icon{width:28px;height:28px;line-height:28px;border-radius:14px;background:blue;display:block;border:3px solid #fff}.map .test-points li .icon:after{position:absolute;z-index:8;font-family:FontAwesome;font-size:14px;line-height:21px;left:0;right:0;text-align:center;color:#fff}.map .test-points li .icon.pass{background:#00cc00}.map .test-points li .icon.pass:after{content:'\\\\f00c';line-height:22px}.map .test-points li .icon.fail{background:#cc0000}.map .test-points li .icon.fail:after{content:'\\\\f00d'}.map .test-points li.active:before{display:block;color:#8f1838;content:'\\\\f041';font-size:2.75rem;height:3rem;width:3rem;line-height:3rem;font-family:FontAwesome;position:absolute;z-index:50;left:50%;top:50%;text-align:center;margin-top:-2.625rem;margin-left:-14px}.map .map-padding{position:relative}.map .map-container{background:rgba(255,255,255,0.1);position:absolute;width:100%;overflow:hidden;left:0;right:0}.sidebar{border-left:1px solid #d5d5d6}.sidebar .back{font-size:0.8125rem}.sidebar{background:#f5f5f5}.sidebar ul.sites>li:hover,.sidebar ul.sites>li.is-active{background:#eeebe8;cursor:pointer}.sidebar ul.sites>li.is-point-hovered{background:#d9d1ca !important}.sidebar .map-search{position:relative;background:#f0f0f0;padding:0.75rem 1rem;border-bottom:1px solid #d5d5d6;margin-bottom:0}.sidebar .map-search input{padding-left:2rem}.sidebar .map-search input:focus+.fa{color:#cc2350 !important}.sidebar .map-search .fa{height:2.4375rem;position:absolute;top:0.75rem;left:1.5rem;line-height:2.4375rem}.sidebar .map-search input{margin-bottom:0}.sidebar ul{list-style-type:none;margin:0;padding:0}.sidebar ul ul{min-height:1px;margin-top:0.25rem;line-height:normal}.sidebar ul ul li{min-height:1px;padding:0;margin:0 0 0.25rem 0;border:none;font-size:0.75rem}.sidebar ul ul li .fa{color:#ababad;margin-right:3px}.sidebar li{position:relative;min-height:40px;padding:1rem 1rem 1rem 70px;margin-bottom:0;border-bottom:1px solid #d5d5d6}.sidebar li:last-child{margin-bottom:none;border-bottom:none}.sidebar.map .photo{position:absolute;left:1rem;top:1.5rem;height:40px;width:40px;border-radius:20px;overflow:hidden}.sidebar.map .photo .photo-placeholder{display:block;width:100%;height:100%;line-height:40px;text-align:center;font-size:1.125rem;background:#d9d1ca;color:#8a8a8a}.sidebar.map strong{text-transform:uppercase;color:#8f1838;font-size:0.625rem;letter-spacing:4px;font-weight:600}.sidebar.map .description{font-size:0.8125rem;line-height:normal;color:#848487}#heatmapContainer{margin:0 auto}#heatmapContainer img{height:2279px;width:3428px;margin-top:-700px;margin-left:-1000px;max-width:none}.sidebar .site-detail{padding:1.5rem;font-size:0.8125rem}.sidebar .site-detail div.secondary{text-align:left !important;margin:0 0 1rem}.sidebar .site-detail div.secondary ul{text-align:left;max-width:100%;margin-right:auto;margin-left:auto}.sidebar .site-detail div.secondary ul::before,.sidebar .site-detail div.secondary ul::after{display:table;content:' ';flex-basis:0;order:1}.sidebar .site-detail div.secondary ul::after{clear:both}.sidebar .site-detail div.secondary ul li{width:100%;float:left;padding-right:.625rem;padding-left:.625rem;position:relative;text-align:left;padding:0 0.5rem 0 25px !important}@media print, screen and (min-width: 40em){.sidebar .site-detail div.secondary ul li{padding-right:1.875rem;padding-left:1.875rem}}.sidebar .site-detail div.secondary ul li,.sidebar .site-detail div.secondary ul li:last-child:not(:first-child){float:left;clear:none}.sidebar .site-detail div.secondary ul li:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){.sidebar .site-detail div.secondary ul li{width:50%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){.sidebar .site-detail div.secondary ul li{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){.sidebar .site-detail div.secondary ul li,.sidebar .site-detail div.secondary ul li:last-child:not(:first-child){float:left;clear:none}.sidebar .site-detail div.secondary ul li:last-child:not(:first-child){float:right}}.sidebar .site-detail div.secondary ul li .fa{text-align:center;width:20px;position:absolute;top:0;left:0}.sidebar .site-detail div.primary,.sidebar .site-detail .article div.button,.article .sidebar .site-detail div.button{padding-bottom:1.5rem !important;margin:0}.sidebar .site-detail div.primary ul li,.sidebar .site-detail .article div.button ul li,.article .sidebar .site-detail div.button ul li{margin-bottom:0.25rem}.sidebar .site-detail div.primary .chart,.sidebar .site-detail .article div.button .chart,.article .sidebar .site-detail div.button .chart{margin-top:1.25rem}.sidebar .site-detail div.primary .primary-links .columns,.sidebar .site-detail .article div.button .primary-links .columns,.article .sidebar .site-detail div.button .primary-links .columns{text-align:center;line-height:normal}.sidebar .site-detail div.primary .progress,.sidebar .site-detail .article div.button .progress,.article .sidebar .site-detail div.button .progress{height:8px !important;overflow:hidden}.sidebar .site-detail div.primary .progress-title,.sidebar .site-detail .article div.button .progress-title,.article .sidebar .site-detail div.button .progress-title{color:#2e2e2e;font-size:0.625rem;font-weight:600}.sidebar .site-detail div.primary .progress-title strong,.sidebar .site-detail .article div.button .progress-title strong,.article .sidebar .site-detail div.button .progress-title strong{color:#2e2e2e;letter-spacing:normal}.sidebar .site-detail div.primary ul li.site-status strong,.sidebar .site-detail .article div.button ul li.site-status strong,.article .sidebar .site-detail div.button ul li.site-status strong{font-size:0.9375rem !important}.sidebar .site-detail div.primary ul li strong,.sidebar .site-detail .article div.button ul li strong,.article .sidebar .site-detail div.button ul li strong{font-weight:bold;text-transform:none;letter-spacing:normal;color:#2e2e2e}.sidebar .site-detail div.primary ul li.pass .fa,.sidebar .site-detail .article div.button ul li.pass .fa,.article .sidebar .site-detail div.button ul li.pass .fa{color:#00cc00}.sidebar .site-detail div.primary ul li.fail map- .fa,.sidebar .site-detail .article div.button ul li.fail map- .fa,.article .sidebar .site-detail div.button ul li.fail map- .fa{color:#cc0000}.sidebar .site-detail button{display:block;width:100%;margin-bottom:0.75rem}.sidebar .site-detail strong{font-size:0.8125rem;letter-spacing:3px}.sidebar .site-detail .description{margin:0 0 1.5rem}.sidebar .site-detail .fa{color:#ababad;margin-right:3px;font-size:0.9375rem;display:inline-block;width:20px}.sidebar .site-detail ul li{border:none;padding:0;margin:0 0 0.5rem 0;line-height:normal;font-size:0.75rem;min-height:1px}@media screen and (max-width: 39.99875em){.map-header .columns{padding-top:15px}}.map-header .columns .map-options-primary .exit .fa{color:#55565a}.map-header .columns .map-options-primary .exit:hover .fa,.map-header .columns .map-options-primary .exit:active .fa,.map-header .columns .map-options-primary .exit:focus .fa{color:#cc2350}.map-header .columns .map-options-primary .play-toggle .fa{margin-top:-3px}@media screen and (max-width: 39.99875em){.map-header .columns .map-options button.page-action{height:auto !important;line-height:normal !important}}@media print, screen and (min-width: 64em){.map-header .columns .map-options button.page-action{margin-top:0 !important}}.map-header .columns .radio-options label{text-transform:initial}.map-header .columns input[type='radio']+label{margin-bottom:3px}.map-header .columns button.page-action{height:3.125rem !important;line-height:3.125rem !important}@media print, screen and (min-width: 64em){.map-header .columns button.page-action{line-height:3.125rem !important;height:3.125rem !important}}.map-header .columns button.page-action .fa{top:50%;margin-top:-10px}.map-header .columns .separator{width:1px;height:30px;background:#2e2e2e;display:inline-block;position:relative;top:6px;margin-left:6px;margin-right:8px}.point-map{position:relative;overflow:hidden;height:60vh;margin-left:-1.5rem;border:1px solid #55565a}.point-map img{height:2279px;width:3428px;margin-top:-700px;margin-left:-1000px;max-width:none}.point-map.point-map-small{height:60vh}.point-map-header{overflow:visible;background:silver;height:auto;margin-left:-1.5rem;padding:0.75rem 1rem}.point-map-header button.page-action{font-size:1.25rem;margin-bottom:0;margin-right:3px}.point-map-header button.page-action .fa{color:#2e2e2e}.point-map-header button.page-action:hover .fa,.point-map-header button.page-action:active .fa,.point-map-header button.page-action:focus .fa{color:#cc2350}@media screen and (max-width: 39.99875em){.point-map-header,.point-map{margin-left:0;margin-right:5px}}.point-map-form-spacing{margin:1rem 0 0}.map-main{height:300px;overflow:hidden}@media print, screen and (min-width: 40em){.map-main{position:absolute;top:0;bottom:0;height:100vh;overflow:hidden}.map-main img{height:100%}}@media print, screen and (min-width: 40em){.map-main-container{position:fixed;top:0;bottom:0;left:0;right:0}}.map-main-container .map.sidebar{margin-bottom:-3rem}@media print, screen and (min-width: 40em){.map-main-container .map.sidebar{position:absolute;right:0;top:calc(3.125rem * 3);bottom:48px;z-index:10;margin-bottom:0}}@media print, screen and (min-width: 40em){.map-main-container .map.sidebar .sites{max-height:calc(100vh - (3.125rem * 3) - 112px);overflow-y:auto}}@media print, screen and (min-width: 40em){.map-main-container .map.sidebar.detail-sidebar{max-height:calc(100vh - (3.125rem * 3));overflow-y:auto}}@media print, screen and (min-width: 40em){.map-main-container .map.sidebar.detail-sidebar .point-image{margin-left:-30px;margin-right:-30px}}.map-main-container .map.sidebar.detail-sidebar .table-scroller{border-left:1px solid #e2e2e3;border-bottom:1px solid #e2e2e3}.map-main-container .map.sidebar.detail-sidebar .table-scroller table tr:last-child{border-bottom:none}.map-options-container{white-space:nowrap;margin:0 auto}.map-options-container .map-options,.map-options-container .map-options-primary{display:inline-block}.map-options-primary{margin-right:10px;margin-left:10px}@media print, screen and (min-width: 40em){.map-options-primary{margin-left:-10px;float:left}}.map-options-primary button,.map-options-primary .button{padding-left:25px !important;background:none transparent}@media print, screen and (min-width: 40em){.map-options-primary button,.map-options-primary .button{padding-left:40px !important}}.map-options-primary button .fa,.map-options-primary .button .fa{margin-top:3px}.map-options.inputs{position:relative;top:4px}.map-options.inputs input{width:60px;display:inline-block;height:1.75rem;position:relative;top:-4px;margin-right:10px;margin-bottom:0;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important}@media print, screen and (min-width: 40em){.map-options.inputs input{top:2px}}.map-options.inputs label{position:relative;top:1px;margin-right:5px;text-transform:none;font-weight:600}@media print, screen and (min-width: 40em){.map-options.inputs label{top:8px}}.map-options.inputs label,.map-options.inputs input{display:inline-block;line-height:normal}.dropdown-pane.map-point-data{padding:0;background:#fff;font-size:0.8125rem;border:1px solid #c8c8c9}.dropdown-pane.map-point-data .count-offset{margin-right:1rem}.dropdown-pane.map-point-data .tasks{padding-bottom:0;padding-top:1rem}.dropdown-pane.map-point-data .sample-status,.dropdown-pane.map-point-data .sample-status-nodata{text-align:left;font-size:0.8125rem;padding:1rem;margin-bottom:0}.dropdown-pane.map-point-data .sample-status.pass,.dropdown-pane.map-point-data .sample-status.fail,.dropdown-pane.map-point-data .sample-status.warn,.dropdown-pane.map-point-data .sample-status-nodata.pass,.dropdown-pane.map-point-data .sample-status-nodata.fail,.dropdown-pane.map-point-data .sample-status-nodata.warn{padding-left:3.25rem}.dropdown-pane.map-point-data .sample-status.pass:before,.dropdown-pane.map-point-data .sample-status.fail:before,.dropdown-pane.map-point-data .sample-status.warn:before,.dropdown-pane.map-point-data .sample-status-nodata.pass:before,.dropdown-pane.map-point-data .sample-status-nodata.fail:before,.dropdown-pane.map-point-data .sample-status-nodata.warn:before{position:absolute;font-family:FontAwesome;content:'';display:inline-block;left:1.625rem;height:1.5em;width:1.5em;border-radius:50%;line-height:1.5em;color:#fff;text-align:center}.dropdown-pane.map-point-data .sample-status.pass:before,.dropdown-pane.map-point-data .sample-status-nodata.pass:before{background:#25d925;content:'\\\\f00c'}.dropdown-pane.map-point-data .sample-status.fail:before,.dropdown-pane.map-point-data .sample-status.warn:before,.dropdown-pane.map-point-data .sample-status-nodata.fail:before,.dropdown-pane.map-point-data .sample-status-nodata.warn:before{background:#c00;content:'\\\\f00d'}.dropdown-pane.map-point-data .sample-status.warn:before,.dropdown-pane.map-point-data .sample-status-nodata.warn:before{background:#ffae00}.dropdown-pane.map-point-data .sample-status strong,.dropdown-pane.map-point-data .sample-status-nodata strong{height:auto;width:auto;line-height:normal;background:none transparent;color:#000;text-align:left;font-size:0.9375rem;display:block}.dropdown-pane.map-point-data a.more{width:auto;border:none;color:#8f1838;font-size:0.8125rem;padding:0;line-height:normal;margin:1rem 0 0 0;text-align:left;height:auto;font-weight:normal !important}.dropdown-pane.map-point-data a.more:hover,.dropdown-pane.map-point-data a.more:active,.dropdown-pane.map-point-data a.more:focus{color:#cc2350}.dropdown-pane.map-point-data .table-container{padding:0 1rem;max-height:200px;overflow-y:auto}.dropdown-pane.map-point-data .tabs-panel{padding:0}.dropdown-pane.map-point-data table.table thead tr th:first-child,.dropdown-pane.map-point-data table.table thead tr td:first-child,.dropdown-pane.map-point-data table.table tbody tr th:first-child,.dropdown-pane.map-point-data table.table tbody tr td:first-child{padding-left:10px}.dropdown-pane.map-point-data table.table thead tr th:last-child,.dropdown-pane.map-point-data table.table thead tr td:last-child,.dropdown-pane.map-point-data table.table tbody tr th:last-child,.dropdown-pane.map-point-data table.table tbody tr td:last-child{padding-right:10px}@media print, screen and (min-width: 40em){.map.sidebar .tabs .tabs-title>a{padding-left:0.625rem;padding-right:0.625rem}}@media print, screen and (min-width: 64em){.map.sidebar .tabs .tabs-title>a{padding-left:1rem;padding-right:1rem}}.map.sidebar .data-options{margin-top:1rem;margin-bottom:1rem}@media print, screen and (min-width: 64em){.map.sidebar .data-options{margin-top:0;margin-bottom:0}}.map.sidebar .data-options.form{margin-bottom:1rem}.map.sidebar .data-options label,.map.sidebar .data-options button{display:inline-block !important;width:auto}.map.sidebar .data-options label{line-height:normal !important;margin-bottom:0.5rem !important}@media print, screen and (min-width: 64em){.map.sidebar .data-options label{line-height:2.4375rem !important;margin-bottom:0 !important}}.map.sidebar .data-options label i.fa{display:none !important}@media print, screen and (min-width: 64em){.map.sidebar .data-options label i.fa{display:inline-block !important}}.map.sidebar .data-options .fa{color:#ababad;margin-right:2px;position:relative;top:2px}.map.sidebar .data-options button{padding:0 20px 0 29px;text-align:left;color:#2e2e2e;text-transform:none;font-size:0.6875rem;border:none;position:relative;height:2.4375rem;line-height:normal !important;margin:0 !important;position:relative;top:-8px;margin-top:0.75rem}.map.sidebar .data-options button .fa{color:#8f1838;font-size:1.25rem;position:absolute;top:2px;left:0;margin-right:3px;height:2.4375rem;width:1.5rem;line-height:2.4375rem;text-align:center;float:left}@media print, screen and (min-width: 40em){.map.sidebar .data-options select+.page-action{margin-left:0.25rem !important}}@media print, screen and (min-width: 64em){.map.sidebar .data-options{margin-top:1.5rem}}.map.sidebar .data-options label{line-height:2.4375rem;margin-bottom:0;white-space:nowrap}@media print, screen and (min-width: 64em){.map.sidebar .data-options label{display:inline-block;margin-right:0.5rem}}.map.sidebar .data-options select{width:auto}@media screen and (max-width: 39.99875em){.map.sidebar .data-options select{display:block;width:100%}}.map.sidebar .data-options i.fa{font-size:1.25rem}.map.sidebar data-grid{display:block !important}.map.sidebar data-grid .checkbox{border-left:none !important}.map.sidebar data-grid .ag-body-container{margin-top:3px}.play-slider{height:55px;padding:0.5rem 0.5rem 0 6.75rem;background:rgba(0,0,0,0.5)}.play-slider .play-toggle{position:absolute;left:15px;margin:0;margin-top:2px}@media print, screen and (min-width: 40em){.play-slider .play-toggle{left:30px}}.play-slider .play-date{color:#fff;font-family:'Raleway', sans-serif;font-size:0.75rem;font-weight:bold;line-height:normal;padding-top:6px;position:absolute;left:65px;text-shadow:1px 1px #000;text-align:center}@media print, screen and (min-width: 40em){.play-slider .play-date{left:75px}}@media print, screen and (min-width: 40em){.play-slider{position:absolute;z-index:1000;height:auto;bottom:48px;left:3.125rem;top:auto;padding:0.5rem 1rem 0 7.375rem}}@media print, screen and (min-width: 40em){.play-slider{right:41.66667%}}@media print, screen and (min-width: 64em){.play-slider{right:33.333%}}.play-slider .slider{margin-bottom:1.5rem;margin-top:1.125rem;background:black}.request-list-small{margin:0;padding:0;list-style-type:none}.request-list-small li{margin:0;position:relative;padding:.625rem;border-bottom:1px solid #eae6e2;font-size:.8125rem;color:#87898e;font-weight:700}.request-list-small li .request-id{width:calc(100% - 60px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.request-list-small li .number{font-size:.875rem;color:#55565a}.request-list-small li a{position:absolute;top:1rem;right:1rem;display:inline-block;font-weight:600;white-space:nowrap;line-height:1rem}.request-list-small li a i{font-weight:normal}.form-block ul.two-column-list .title{padding-top:0}ul.two-column-list{list-style-type:none;margin:0;padding:0}ul.two-column-list li{border-bottom:1px solid #d5d5d6;padding-bottom:1rem;padding-top:1rem}ul.two-column-list li:first-child{padding-top:0}ul.two-column-list li:last-child{padding-bottom:0;border-bottom:none}ul.two-column-list .title{padding-left:5px !important;font-size:.875rem;color:#55565a;width:100%;float:left;padding-right:.625rem;padding-left:.625rem;text-align:left}@media print, screen and (min-width: 40em){ul.two-column-list .title{padding-right:1.875rem;padding-left:1.875rem}}ul.two-column-list .title,ul.two-column-list .title:last-child:not(:first-child){float:left;clear:none}ul.two-column-list .title:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){ul.two-column-list .title{width:33.33333%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){ul.two-column-list .title{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){ul.two-column-list .title,ul.two-column-list .title:last-child:not(:first-child){float:left;clear:none}ul.two-column-list .title:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){ul.two-column-list .title{width:25%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){ul.two-column-list .title{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){ul.two-column-list .title,ul.two-column-list .title:last-child:not(:first-child){float:left;clear:none}ul.two-column-list .title:last-child:not(:first-child){float:right}}ul.two-column-list .title .byline{font-size:.75rem}ul.two-column-list .content{padding-left:5px !important;width:100%;float:left;padding-right:.625rem;padding-left:.625rem;text-align:left}@media print, screen and (min-width: 40em){ul.two-column-list .content{padding-right:1.875rem;padding-left:1.875rem}}ul.two-column-list .content,ul.two-column-list .content:last-child:not(:first-child){float:left;clear:none}ul.two-column-list .content:last-child:not(:first-child){float:right}@media print, screen and (min-width: 40em){ul.two-column-list .content{width:66.66667%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 40em) and (min-width: 40em){ul.two-column-list .content{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 40em){ul.two-column-list .content,ul.two-column-list .content:last-child:not(:first-child){float:left;clear:none}ul.two-column-list .content:last-child:not(:first-child){float:right}}@media print, screen and (min-width: 64em){ul.two-column-list .content{width:75%;float:left;padding-right:.625rem;padding-left:.625rem}}@media print, screen and (min-width: 64em) and (min-width: 40em){ul.two-column-list .content{padding-right:1.875rem;padding-left:1.875rem}}@media print, screen and (min-width: 64em){ul.two-column-list .content,ul.two-column-list .content:last-child:not(:first-child){float:left;clear:none}ul.two-column-list .content:last-child:not(:first-child){float:right}}ul.two-column-list .content ul{margin:0;padding:0;margin-left:1rem}ul.two-column-list .content ul li{padding:0;border:0}ul.two-column-list .content ul li strong.field{color:#8f1838;text-transform:uppercase;font-size:.6875rem}.analytics .select2-container{line-height:normal;box-sizing:border-box;display:inline-block;margin:0 auto 1.5rem;position:relative;vertical-align:middle}.analytics .select2-container *{outline:none}.analytics .select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:36px;user-select:none;-webkit-user-select:none}.analytics .select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.analytics .select2-container .select2-selection--single .select2-selection__clear{position:relative}.analytics .select2-container .select2-search--inline{float:left}.analytics .select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;height:2rem;font-size:1rem;margin-top:5px;padding:0}.analytics .select2-container .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.analytics .select2-results{display:block}.analytics .select2-results__options{list-style:none;margin:0;padding:0}.analytics .select2-results__option[aria-selected]{cursor:pointer}.analytics .select2-container--open .select2-dropdown{left:0;text-align:center}.analytics .select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.analytics .select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.analytics .select2-search--dropdown{display:block;padding:4px}.analytics .select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.analytics .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.analytics .select2-search--dropdown.select2-search--hide{display:none}.analytics .select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.analytics .select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.analytics .select2-container--default .select2-selection--single{background-color:transparent;border:none;border-radius:0}.analytics .select2-container--default .select2-selection--single .select2-selection__rendered{color:#fff;background:#4a3e44;font-size:1.25rem;line-height:36px}.analytics .select2-container--default .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.analytics .select2-container--default .select2-selection__arrow{height:34px;position:absolute;top:1px;right:10px;width:20px}.analytics .select2-container--default .select2-selection__arrow b{border-color:#fff transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #fff transparent}.select2-dropdown.analytics-dropdown{text-align:center;background:#443a3f;border-color:#493f44;font-size:1.25rem}.select2-dropdown.analytics-dropdown .select2-results .select2-results__option{color:#fff;padding-top:2px;padding-bottom:2px}.select2-dropdown.analytics-dropdown .select2-results .select2-results__option[aria-selected=true]{opacity:.65}.sidebar .site-detail,.dropdown-pane.map-point-data{line-height:normal !important}.sidebar .site-detail p,.dropdown-pane.map-point-data p{line-height:normal !important}.sidebar .site-detail .tasks .column,.sidebar .site-detail .tasks .columns,.dropdown-pane.map-point-data .tasks .column,.dropdown-pane.map-point-data .tasks .columns{text-align:center}.sidebar .site-detail .tasks .column.count strong,.sidebar .site-detail .tasks .count.columns strong,.dropdown-pane.map-point-data .tasks .column.count strong,.dropdown-pane.map-point-data .tasks .count.columns strong{letter-spacing:normal;display:block;margin:0 auto .5rem;color:#fff;font-family:arial;font-size:1rem;height:2rem;width:2rem;line-height:2rem}@media print, screen and (min-width: 64em){.sidebar .site-detail .tasks .column.count strong,.sidebar .site-detail .tasks .count.columns strong,.dropdown-pane.map-point-data .tasks .column.count strong,.dropdown-pane.map-point-data .tasks .count.columns strong{height:2.5rem;width:2.5rem;line-height:2.5rem}}.sidebar .site-detail a.more,.dropdown-pane.map-point-data a.more{padding:0 1rem;text-align:center;display:block}.sidebar .site-detail .table-scroller,.dropdown-pane.map-point-data .table-scroller{border-top:1px solid #e6e6e6;max-height:300px;max-width:100%;overflow:auto}.sidebar .site-detail .table-scroller table,.dropdown-pane.map-point-data .table-scroller table{margin-bottom:0}.sidebar .site-detail .table-scroller table thead th,.sidebar .site-detail .table-scroller table tbody th,.dropdown-pane.map-point-data .table-scroller table thead th,.dropdown-pane.map-point-data .table-scroller table tbody th{padding:.75rem 1.75rem .75rem 1rem !important}.sidebar .site-detail .table-scroller table thead td,.sidebar .site-detail .table-scroller table tbody td,.dropdown-pane.map-point-data .table-scroller table thead td,.dropdown-pane.map-point-data .table-scroller table tbody td{padding:.5rem 1rem}.sidebar .site-detail ul.tabs li,.dropdown-pane.map-point-data ul.tabs li{margin-bottom:-1px}.sidebar .site-detail ul.tabs li a,.dropdown-pane.map-point-data ul.tabs li a{font-size:.6875rem;font-family:sans-serif}ul.tabs li{margin-bottom:-1px}ul.tabs li a{font-size:.6875rem;font-family:sans-serif}.tabs-content .form-block{border-top:none}.tabs-content.tight .tabs-panel{padding:0 !important}.callout{font-size:.8125rem;border:none}.callout.alert{font-weight:bold}.callout .fa{font-weight:normal !important}.is-invalid-label{font-weight:bold}input[type='text'].is-invalid-input,input[type='number'].is-invalid-input,input[type='password'].is-invalid-input,input[type='email'].is-invalid-input,textarea.is-invalid-input,textarea-is-invalid-input:not(:focus){background:#fefefe !important}input[type='text'].is-invalid-input:focus,input[type='number'].is-invalid-input:focus,input[type='password'].is-invalid-input:focus,input[type='email'].is-invalid-input:focus,textarea.is-invalid-input:focus,textarea-is-invalid-input:not(:focus):focus{background:#fcfcfc !important;border:1px solid #db2121}input+.form-error,.select2+.form-error,select2+.form-error,textarea+.form-error,.fa.fa-calendar+.form-error,datepicker+.form-error,time-selector+.form-error{margin-top:0;color:#991717;text-transform:none}input+.form-error:before,.select2+.form-error:before,select2+.form-error:before,textarea+.form-error:before,.fa.fa-calendar+.form-error:before,datepicker+.form-error:before,time-selector+.form-error:before{font-family:'FontAwesome';display:inline-block;content:'\\\\f0d8';margin-right:0.25rem;color:#db2121}input+.form-error,.select2+.form-error,selector+.form-error,textarea+.form-error,.fa.fa-calendar+.form-error,datepicker+.form-error,time-selector+.form-error{margin-top:0;color:#991717;text-transform:none}input+.form-error:before,.select2+.form-error:before,selector+.form-error:before,textarea+.form-error:before,.fa.fa-calendar+.form-error:before,datepicker+.form-error:before,time-selector+.form-error:before{font-family:'FontAwesome';display:inline-block;content:'\\\\f0d8';margin-right:0.25rem;color:#db2121}.is-invalid-select2 .select2-selection{border:1px solid red !important}.select2-container{line-height:normal;box-sizing:border-box;display:inline-block;margin:0 0 .25rem 0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:38px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap;margin-bottom:-5px}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;height:2rem;font-size:1rem;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #d5d5d6;border-radius:0;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:900}.select2-dropdown li{line-height:normal !important;padding-top:.25rem;padding-bottom:.25rem}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:0 8px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #d5d5d6;border-radius:0}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:38px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:36px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:not-allowed}.select2-container--default.select2-container--disabled .select2-selection--single:focus,.select2-container--default.select2-container--disabled .select2-selection--single:hover,.select2-container--default.select2-container--disabled .select2-selection--single:active{background-color:#eee !important;cursor:not-allowed}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #d5d5d6;border-radius:0;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f5f5f5;border:1px solid #d5d5d6;border-radius:0;cursor:default;float:left;font-size:1rem;margin-right:5px;margin-top:4px;padding:0 10px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#c00;cursor:pointer;display:inline-block;font-weight:bold;margin-right:4px;position:relative;top:0;font-size:1.25rem;line-height:1rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#f00}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #55565a 1px;background:#fcfcfc;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:not-allowed}.select2-container--default.select2-container--disabled .select2-selection--multiple:focus,.select2-container--default.select2-container--disabled .select2-selection--multiple:hover,.select2-container--default.select2-container--disabled .select2-selection--multiple:active{background-color:#eee !important;cursor:not-allowed}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-search__field{margin-bottom:0 !important}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #d5d5d6}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;margin:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:none;color:#bbbbbd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#8f1838;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #d5d5d6;border-radius:0;outline:0;background-image:-webkit-linear-gradient(top, white 50%, #eee 100%);background-image:-o-linear-gradient(top, white 50%, #eee 100%);background-image:linear-gradient(to bottom, white 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #8f1838}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:38px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #d5d5d6;border-top-right-radius:4px;border-bottom-right-radius:4px;height:36px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #d5d5d6;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #8f1838}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, white 0%, #eee 50%);background-image:-o-linear-gradient(top, white 0%, #eee 50%);background-image:linear-gradient(to bottom, white 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, white 100%);background-image:-o-linear-gradient(top, #eee 50%, white 100%);background-image:linear-gradient(to bottom, #eee 50%, white 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #d5d5d6;border-radius:0;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #8f1838}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #d5d5d6;border-radius:0;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #8f1838}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #d5d5d6;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:white;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:white}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#8f1838}.is-invalid-select2+.select2 .select2-selection{border:1px solid #db2121}.is-invalid-select2+.select2 .select2-selection:focus,.is-invalid-select2+.select2 .select2-selection:active,.is-invalid-select2+.select2 .select2-selection:hover{background:#fefefe}.analytics .is-invalid-select2+.select2.select2-container--default .select2-selection--single .select2-selection__rendered,.analytics .is-invalid-select2+select2.select2-container--default .select2-selection--single .select2-selection__rendered{border-bottom:1px solid #db2121 !important}.analytics .is-invalid-select2+.select2.select2-container--default .select2-selection--single .select2-selection__rendered,.analytics .is-invalid-select2+selector.select2-container--default .select2-selection--single .select2-selection__rendered{border-bottom:1px solid #db2121 !important}.analytics .select2.select2-container--disabled .select2-selection .select2-selection__rendered{color:#806c72}.analytics .is-invalid-select2+.select2+.form-error,.analytics .is-invalid-select2+select2+.form-error{margin-top:-1rem;margin-bottom:1.5rem;color:#fff;text-align:left}.analytics .is-invalid-select2+.select2+.form-error,.analytics .is-invalid-select2+selector+.form-error{margin-top:-1rem;margin-bottom:1.5rem;color:#fff;text-align:left}ux-dialog-container.video{padding:0}ux-dialog-container.video ux-dialog,ux-dialog-container.video ux-dialog-body{padding:0;background:none transparent}ux-dialog-container.video .responsive-embed{width:80vw;max-width:100%;margin:0}ux-dialog-container,ux-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0}ux-dialog-body{min-height:1px !important}ux-dialog-body button.large+button{margin-top:-.25rem !important}ux-dialog-overlay{opacity:0}ux-dialog-overlay.active{opacity:1;background:rgba(0,0,0,0.7)}ux-dialog-container{display:block;transition:opacity .2s linear;opacity:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}ux-dialog-container.active{opacity:1}ux-dialog-container>div{padding:30px}ux-dialog-container>div>div{display:block;min-width:300px;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;margin:auto}ux-dialog-container,ux-dialog-container>div,ux-dialog-container>div>div{outline:0}ux-dialog{display:table;box-shadow:0 0 15px rgba(0,0,0,0.5);border:1px solid rgba(0,0,0,0.2);border-radius:0;padding:3px;min-width:300px;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;margin:auto;border-image-source:initial;border-image-slice:initial;border-image-width:initial;border-image-outset:initial;border-image-repeat:initial;background:#fff}ux-dialog>ux-dialog-header{display:block;padding:16px;border-bottom:1px solid #e5e5e5}ux-dialog>ux-dialog-header>button{float:right;border:none;display:block;width:32px;height:32px;background:0 0;font-size:22px;line-height:16px;margin:-14px -16px 0 0;padding:0;cursor:pointer}ux-dialog>ux-dialog-body{display:block;padding:16px}ux-dialog-body h1{font-size:1.75rem !important;text-transform:none;letter-spacing:normal;font-weight:300;max-width:500px;margin:0 0 1.5rem;line-height:normal}@media screen and (max-width: 39.99875em){ux-dialog-body h1{font-size:1.5rem !important}}ux-dialog>ux-dialog-footer{display:block;padding:6px;border-top:1px solid #e5e5e5;text-align:right}ux-dialog>ux-dialog-footer button{color:#333;background-color:#fff;padding:6px 12px;font-size:14px;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid #ccc;border-radius:4px;margin:5px 0 5px 5px}ux-dialog>ux-dialog-footer button:disabled{cursor:default;opacity:.45}ux-dialog>ux-dialog-footer button:hover:enabled{color:#333;background-color:#e6e6e6;border-color:#adadad}.ux-dialog-open{overflow:hidden}.dialog-content table thead tr th,.dialog-content table thead tr td,.dialog-content table tbody tr th,.dialog-content table tbody tr td{padding:.75rem !important}.dialog-content .columns.search{padding-top:0}.dialog-content .columns.icon{position:relative}.dialog-content .columns.icon input{padding-left:2rem}.dialog-content .columns.icon .fa{position:absolute;left:.875rem;bottom:.375rem;z-index:6;color:#ababad;display:block;height:2.4375rem;line-height:2.4375rem}.dialog-content .columns.icon datepicker .fa,.dialog-content .columns.icon .is-invalid-input+.fa{bottom:auto !important;top:1.25rem !important}.dialog-content .columns .select2-container{margin-bottom:.5rem !important}.help-label{font-size:.5625rem;letter-spacing:4px;text-transform:uppercase;display:inline-block;margin-bottom:1rem}.analytics .help-label{color:#fff}.analytics .help-label .fa{color:#cc2350;font-size:1rem;position:relative;top:3px}.form-block .form.help a:hover.help-title,.form-block .form.help a:hover .media-title,.form-block .form.help a:active.help-title,.form-block .form.help a:active .media-title,.form-block .form.help a:focus.help-title,.form-block .form.help a:focus .media-title{color:#8f1838}.form-block .form.help a:hover.help-title:before,.form-block .form.help a:hover .media-title:before,.form-block .form.help a:active.help-title:before,.form-block .form.help a:active .media-title:before,.form-block .form.help a:focus.help-title:before,.form-block .form.help a:focus .media-title:before{color:#cc2350}.faq .accordion-item:first-child .accordion-title{border-top:none}.faq .accordion-title{font-size:1rem;padding:.75rem 0 .5rem 1.5rem;border:none;border-top:1px solid #d5d5d6;border-bottom:none !important}.faq .accordion-title:hover,.faq .accordion-title:active,.faq .accordion-title:focus{background:none transparent}.faq .accordion-title:before{font-family:\\\"FontAwesome\\\";content:\\\"\\\\f078\\\";right:auto;left:0;font-size:.625rem}.faq .accordion{border:none}.faq .accordion-content{border:none}.faq .accordion-content:last-child{border-bottom:none}.faq .accordion-content p:last-child{margin-bottom:none}.faq .is-active .accordion-title:before{font-family:\\\"FontAwesome\\\";content:\\\"\\\\f077 \\\";right:auto;left:0}.page-content{position:relative;min-height:90vh}@-webkit-keyframes MessageSlideIn{0%{right:-320px}50%{right:10px}100%{right:10px}}@-moz-keyframes MessageSlideIn{0%{right:-320px}50%{right:10px}100%{opacity:10px}}@-o-keyframes MessageSlideIn{0%{right:-320px}50%{right:10px}100%{right:10px}}@keyframes MessageSlideIn{0%{right:-320px}50%{right:10px}100%{right:10px}}@-webkit-keyframes MessageSlideOut{0%{right:10px}50%{right:-320px}100%{right:-320px}}@-moz-keyframes MessageSlideOut{0%{right:10px}50%{right:-320px}100%{right:-320px}}@-o-keyframes MessageSlideOut{0%{right:10px}50%{right:-320px}100%{right:-320px}}@keyframes MessageSlideOut{0%{right:10px}50%{right:-320px}100%{right:-320px}}@-webkit-keyframes LoaderFadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes LoaderFadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes LoaderFadeIn{0%{opacity:0}100%{opacity:1}}@keyframes LoaderFadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes LoaderFadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes LoaderFadeOut{0%{opacity:1}100%{opacity:0}}@-o-keyframes LoaderFadeOut{0%{opacity:1}100%{opacity:0}}@keyframes LoaderFadeOut{0%{opacity:1}100%{opacity:0}}.overlay-message{position:fixed;bottom:60px;right:-320px;width:300px;z-index:90;border:1px solid #414244;background:#fff;padding:1rem;text-align:center}@media screen and (max-width: 39.99875em){.overlay-message{bottom:65px}}.overlay-message button{font-size:.875rem;margin:0;position:absolute;right:0;top:0;padding:.5rem}.overlay-message button i.fa{color:#aaaaac !important}.overlay-message button:hover i.fa,.overlay-message button:active i.fa,.overlay-message button:focus i.fa{color:#6b6c6f !important}.overlay-message.slide-in{-webkit-animation:MessageSlideIn forwards 1s;-moz-animation:MessageSlideIn forwards 1s;-o-animation:MessageSlideIn forwards 1s;animation:MessageSlideIn forwards 1s}.overlay-message.slide-out{-webkit-animation:MessageSlideOut forwards 1s;-moz-animation:MessageSlideOut forwards 1s;-o-animation:MessageSlideOut forwards 1s;animation:MessageSlideOut forwards 1s}.overlay-message .message{font-weight:600;font-size:.875rem}.overlay-message .message.success i.fa{color:#0c0}.overlay-message .message.error i.fa{color:#db2121}.overlay-message .message i.fa{display:block;font-size:2.25rem;margin-bottom:.5rem}.message.form-top{background:#8f1838;text-align:center;font-weight:600;padding:.75rem 2rem;font-size:.875rem;color:#fff}.message.form-top button.link{color:#fff;text-decoration:underline;padding:0 .75rem;font-weight:600}.message.form-top i.fa{display:inline-block;margin-right:5px;color:#fff;margin-left:.75rem}.loader{-webkit-animation:LoaderFadeIn forwards 250ms;-moz-animation:LoaderFadeIn forwards 250ms;-o-animation:LoaderFadeIn forwards 250ms;animation:LoaderFadeIn forwards 250ms;position:absolute;top:0;right:0;bottom:-48px;left:0;background:rgba(255,255,255,0.7);z-index:15}.loader:after{display:block;height:50px;width:50px;position:fixed;top:50%;left:50%;margin-left:-25px;margin-top:-25px;z-index:16;content:'';background:url(../images/loader.gif) no-repeat center center}@media screen and (max-width: 39.99875em){.loader:after{margin-top:-60px}}.loader.fade-out{-webkit-animation:LoaderFadeOut forwards 250ms;-moz-animation:LoaderFadeOut forwards 250ms;-o-animation:LoaderFadeOut forwards 250ms;animation:LoaderFadeOut forwards 250ms}.top-bar{z-index:20}header{z-index:30}.off-canvas{z-index:50 !important}data-grid{display:none;background:#fefefe;line-height:1.5}data-grid div{outline:none;-webkit-appearance:none}data-grid input[type=\\\"text\\\"],data-grid input[type=\\\"password\\\"],data-grid input[type=\\\"date\\\"],data-grid input[type=\\\"email\\\"],data-grid input[type=\\\"password\\\"],data-grid input[type=\\\"search\\\"],data-grid input[type=\\\"tel\\\"],data-grid input[type=\\\"number\\\"]{height:1.75rem !important;line-height:normal !important;margin-bottom:0;padding-top:0 !important;padding-bottom:0 !important}@media print, screen and (min-width: 40em){data-grid{display:block !important}}data-grid img{vertical-align:middle;border:0}data-grid .ag-row,data-grid .ag-header-row{display:inline-flex;width:100%;font-size:.8125rem}data-grid .ag-row a,data-grid .ag-header-row a{font-weight:bold;color:#8f1838}data-grid .ag-row a:hover,data-grid .ag-header-row a:hover{color:#cc2350}data-grid .ag-column-moving .ag-cell{transition:left 0.2s}data-grid .ag-row-group-cell-ghost{color:#e5e5e5}data-grid .ag-row{border-bottom:1px solid #d5d5d6}data-grid .ag-row .fa.fa-check{color:#2e2e2e;font-size:.9375rem}data-grid .ag-row:hover{background:#fbfafa;font-weight:600}data-grid .ag-row:hover a{font-weight:600}data-grid .ag-row:hover .ag-cell.row-actions button,data-grid .ag-row:hover .ag-cell.row-actions .button{opacity:1}data-grid .ag-row:hover button:disabled,data-grid .ag-row:hover button.disabled,data-grid .ag-row:hover button[disabled],data-grid .ag-row:hover .button:disabled,data-grid .ag-row:hover .button.disabled,data-grid .ag-row:hover .button[disabled]{opacity:.35 !important}data-grid .ag-sort-order{color:#55565a;opacity:.5}data-grid .ag-header-icon{position:absolute;top:.6875rem;right:2px;z-index:120}data-grid .ag-cell,data-grid .ag-row>.group-head{font-size:.8125rem;border-left:1px solid #efefef}data-grid .ag-cell>div,data-grid .ag-row>.group-head>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}data-grid .ag-cell.row-actions>div,data-grid .ag-cell.no-truncate>div,data-grid .ag-row>.group-head.row-actions>div,data-grid .ag-row>.group-head.no-truncate>div{overflow:visible;text-overflow:none}data-grid .ag-cell a,data-grid .ag-row>.group-head a{font-weight:400}data-grid .ag-cell.row-actions,data-grid .ag-row>.group-head.row-actions{white-space:nowrap;border-left:none}data-grid .ag-cell.row-actions button,data-grid .ag-cell.row-actions .button,data-grid .ag-row>.group-head.row-actions button,data-grid .ag-row>.group-head.row-actions .button{margin:2px 0 0 10px;opacity:0;transition:ease all .25s}data-grid .ag-cell.row-actions button:disabled,data-grid .ag-cell.row-actions button.disabled,data-grid .ag-cell.row-actions button[disabled],data-grid .ag-cell.row-actions .button:disabled,data-grid .ag-cell.row-actions .button.disabled,data-grid .ag-cell.row-actions .button[disabled],data-grid .ag-row>.group-head.row-actions button:disabled,data-grid .ag-row>.group-head.row-actions button.disabled,data-grid .ag-row>.group-head.row-actions button[disabled],data-grid .ag-row>.group-head.row-actions .button:disabled,data-grid .ag-row>.group-head.row-actions .button.disabled,data-grid .ag-row>.group-head.row-actions .button[disabled]{cursor:not-allowed}data-grid .ag-cell.row-actions button:disabled:hover i.fa,data-grid .ag-cell.row-actions button:disabled:active i.fa,data-grid .ag-cell.row-actions button:disabled:focus i.fa,data-grid .ag-cell.row-actions button.disabled:hover i.fa,data-grid .ag-cell.row-actions button.disabled:active i.fa,data-grid .ag-cell.row-actions button.disabled:focus i.fa,data-grid .ag-cell.row-actions button[disabled]:hover i.fa,data-grid .ag-cell.row-actions button[disabled]:active i.fa,data-grid .ag-cell.row-actions button[disabled]:focus i.fa,data-grid .ag-cell.row-actions .button:disabled:hover i.fa,data-grid .ag-cell.row-actions .button:disabled:active i.fa,data-grid .ag-cell.row-actions .button:disabled:focus i.fa,data-grid .ag-cell.row-actions .button.disabled:hover i.fa,data-grid .ag-cell.row-actions .button.disabled:active i.fa,data-grid .ag-cell.row-actions .button.disabled:focus i.fa,data-grid .ag-cell.row-actions .button[disabled]:hover i.fa,data-grid .ag-cell.row-actions .button[disabled]:active i.fa,data-grid .ag-cell.row-actions .button[disabled]:focus i.fa,data-grid .ag-row>.group-head.row-actions button:disabled:hover i.fa,data-grid .ag-row>.group-head.row-actions button:disabled:active i.fa,data-grid .ag-row>.group-head.row-actions button:disabled:focus i.fa,data-grid .ag-row>.group-head.row-actions button.disabled:hover i.fa,data-grid .ag-row>.group-head.row-actions button.disabled:active i.fa,data-grid .ag-row>.group-head.row-actions button.disabled:focus i.fa,data-grid .ag-row>.group-head.row-actions button[disabled]:hover i.fa,data-grid .ag-row>.group-head.row-actions button[disabled]:active i.fa,data-grid .ag-row>.group-head.row-actions button[disabled]:focus i.fa,data-grid .ag-row>.group-head.row-actions .button:disabled:hover i.fa,data-grid .ag-row>.group-head.row-actions .button:disabled:active i.fa,data-grid .ag-row>.group-head.row-actions .button:disabled:focus i.fa,data-grid .ag-row>.group-head.row-actions .button.disabled:hover i.fa,data-grid .ag-row>.group-head.row-actions .button.disabled:active i.fa,data-grid .ag-row>.group-head.row-actions .button.disabled:focus i.fa,data-grid .ag-row>.group-head.row-actions .button[disabled]:hover i.fa,data-grid .ag-row>.group-head.row-actions .button[disabled]:active i.fa,data-grid .ag-row>.group-head.row-actions .button[disabled]:focus i.fa{color:#8f1838 !important}data-grid .ag-cell.row-actions:hover i.fa,data-grid .ag-cell.row-actions:active i.fa,data-grid .ag-cell.row-actions:focus i.fa,data-grid .ag-row>.group-head.row-actions:hover i.fa,data-grid .ag-row>.group-head.row-actions:active i.fa,data-grid .ag-row>.group-head.row-actions:focus i.fa{color:#cc2350 !important}data-grid .ag-cell i.fa,data-grid .ag-row>.group-head i.fa{font-size:1.25rem;color:#8f1838}data-grid .ag-cell .item-options a,data-grid .ag-row>.group-head .item-options a{display:inline-block;padding:.5rem .75rem 0 0;color:#55565a;font-weight:600;font-size:.6875rem}data-grid .ag-cell .item-options a .fa,data-grid .ag-row>.group-head .item-options a .fa{color:#8f1838;font-size:.9375rem;display:inline-block;margin-right:2px}data-grid .ag-cell.medium-text-center,data-grid .ag-cell.text-center,data-grid .ag-cell.large-text-center,data-grid .ag-header-cell.medium-text-center,data-grid .ag-header-cell.text-center,data-grid .ag-header-cell.large-text-center{justify-content:center}data-grid .ag-cell.checkbox,data-grid .ag-header-cell.checkbox{text-align:left !important;justify-content:left;line-height:normal}data-grid label input[type=\\\"checkbox\\\"]{-webkit-appearance:none;background-color:#fff;border:1px solid #cacece;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05);padding:0;height:1.25rem;width:1.25rem;display:inline-block;margin:0;top:3px;position:relative}data-grid label input[type=\\\"checkbox\\\"]:checked{background-color:#fafafa;border:1px solid #adb8c0;box-shadow:0 1px 2px rgba(0,0,0,0.05),inset 0px -15px 10px -12px rgba(0,0,0,0.05)}data-grid label input[type=\\\"checkbox\\\"]:checked:after{font-family:FontAwesome;content:\\\"\\\\f00c\\\";position:absolute;top:0;left:2px;color:#cc2350;text-align:center;font-size:.875rem;height:.875rem;width:.875rem}data-grid .ag-row-group-expanded{background:#f3f3f3}data-grid .ag-cell,data-grid .ag-header-cell{display:flex;align-items:center;padding:1rem 0 1rem 1rem;padding-left:10px}data-grid .ag-cell:first-child,data-grid .ag-header-cell:first-child{padding-left:2rem}data-grid .ag-cell.disabled-cell{background:#e3e3e3}data-grid .ag-cell.disabled-cell.ag-cell-range-selected:not(.ag-cell-disable-selection){background:#a7b1c4}data-grid .ag-cell.ag-cell-range-selected.error-cell{background:#ffdbe1}data-grid .ag-header-container .ag-header-cell,data-grid .ag-pinned-left-header .ag-header-cell,data-grid .ag-pinned-right-header .ag-header-cell{background:#fff;font-size:.5625rem;letter-spacing:2px;border-bottom:1px solid #55565a;font-weight:700;text-transform:uppercase;color:#8f1838;padding-right:5px}data-grid .ag-header-container .ag-header-cell .fa,data-grid .ag-pinned-left-header .ag-header-cell .fa,data-grid .ag-pinned-right-header .ag-header-cell .fa{color:#55565a}data-grid .ag-cell-highlight{background:#cc2350;font-weight:600}data-grid .ag-cell-highlight-animation{transition:border 1s}data-grid .ag-header-cell-moving .ag-header-cell-label{opacity:0.0}data-grid .ag-overlay-loading-wrapper{background-color:rgba(255,255,255,0.5)}data-grid .ag-overlay-loading-center{background-color:#ffffff;border:1px solid darkgray;border-radius:10px;padding:10px;color:black}data-grid .ag-row-selected{background-color:#f7f5f4;color:#0a0a0a;font-weight:600}data-grid .ag-row-selected:hover,data-grid .ag-row-selected:active,data-grid .ag-row-selected:focus{background-color:#f7f5f4;color:#0a0a0a;font-weight:600}data-grid .ag-cell-range-selected:not(.ag-cell-disable-selection){border:1px solid #d6dff3;background:#f3f7ff}data-grid .ag-segmentation-cell-disable-selection{border:none;background:#d5d5d6;width:100%;height:100%;position:absolute;left:0;top:0}data-grid .ag-header-cell-resize{height:45px;position:absolute;right:-10px;width:20px;z-index:100}.ag-row.error-row{border:1px solid #db2121;border-left:none;border-right:none;margin-top:-1px}.ag-row.error-row .ag-cell{background:#fdf4f4;border-left:1px solid #f9d9d9}.ag-row.error-row .ag-cell.row-actions{border-left:none}.ag-row.error-row:hover .ag-cell{background:#fdefef;border-left:1px solid #f9d5d5}.ag-row.error-row:hover .ag-cell.row-actions{border-left:none}.ag-cell.error-cell{background:#fdf4f4}.media-thumbnail{max-width:100px}.ag-header-cell-label{min-width:22px}.ag-header-cell{border-bottom:1px solid #55565a !important}data-grid .group-head{white-space:nowrap;line-height:60px;padding-left:30px;color:#87898e;font-weight:700}data-grid .group-head .number{font-size:.9375rem;color:#55565a;margin-right:1rem}.ag-header-cell .ag-cell-label-container{padding-left:0}.ag-header-cell.ag-header-cell-sortable .ag-cell-label-container{padding-right:0}.ag-header-cell.ag-header-cell-sortable .ag-cell-label-container.ag-header-cell-sorted-asc,.ag-header-cell.ag-header-cell-sortable .ag-cell-label-container.ag-header-cell-sorted-des{padding-right:6px !important}.ag-header-cell span.ag-header-cell-text{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-right:0;padding-right:0}data-grid .ag-header-container .ag-header-cell{border-left:1px solid #efefef;padding-right:3px}data-grid .ag-header-container .ag-header-cell.row-actions{border-left:none}data-grid .ag-header-cell label input[type=\\\"checkbox\\\"]{top:-3px !important}data-grid .row-icon,table .row-icon{font-size:1rem;width:30px;text-align:center}data-grid .row-icon i.fa,table .row-icon i.fa{color:#8f1838}data-grid .ag-body-viewport{margin-top:0}data-grid .ag-pinned-right-header+.ag-header-viewport .ag-header-cell:first-child,data-grid .ag-pinned-left-header+.ag-header-viewport .ag-header-cell:first-child{padding-left:2rem}data-grid .ag-pinned-left-cols-viewport+.ag-body-viewport-wrapper .ag-cell:first-child,data-grid .ag-pinned-right-cols-viewport+.ag-body-viewport-wrapper .ag-cell:first-child{padding-left:2rem}.ag-icon-asc,.ag-icon-desc{margin-right:8px}.ag-font-style{user-select:text}.ag-tooltip{color:#fff;background:#000;padding:5px 10px;border:solid 1px #ccc;font-size:13px}.datepicker table{width:275px}.datepicker table thead th{cursor:default}.datepicker table thead th{border-bottom:1px solid #56575a;color:#8f1838;letter-spacing:2px}.datepicker table thead th.dow{letter-spacing:normal}.datepicker table thead th:after,.datepicker table tbody td:after{display:none}.datepicker table thead tr:hover th,.datepicker table tbody tr:hover td{background:#fff;border-left:none;border-right:none}.datepicker table thead th.next,.datepicker table thead th.prev{color:#56575a;font-weight:700;font-size:.75rem}.datepicker table tbody td .month.active,.datepicker table tbody td .year.active{color:#fff !important}.datepicker table tbody td.day:hover,.datepicker table tbody td .month:hover,.datepicker table tbody td .year:hover{transition:ease all .1s;background:#cc2350 !important;color:#fff}.datepicker table tbody tr:hover td.old,.datepicker table tbody tr:hover td.new{background:#fbfbfb}.datepicker table thead th.dow{font-weight:700}.datepicker.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker td{font-size:.75rem;font-weight:600}.datepicker td.active.day,.datepicker td.active.year{background:#8f1838;color:#fff !important}.datepicker td.active.day:hover,.datepicker td.active.year:hover{background:#cc2350}.datepicker td.old,.datepicker td.new{color:#999;font-weight:400;background:#fbfbfb}.datepicker td span.active{background:#b32345;color:white}.datepicker td span.active:hover{color:black}.datepicker td .nonMilitaryTime{font-size:.75rem}.datepicker th.active.day,.datepicker th.active.year{background:#b32345}.datepicker th span.active{background:#b32345}.datepicker-close{right:-10px;background:none transparent !important;color:#878787 !important;line-height:normal !important;font-weight:700;font-size:1rem !important}span.hour.nonMilitaryTime:hover{background:#eee}.editor-toolbar.fullscreen,.CodeMirror-fullscreen,.editor-preview-side{z-index:9000 !important}.editor-preview-side{font-size:.8125rem}.editor-preview-side h1{color:#8f1838;font-size:1.5rem;line-height:1.2}.editor-preview-side h2{font-size:1.25rem;font-weight:normal}.editor-preview-side h3{font-size:1rem;color:#8f1838;font-weight:600}.editor-preview-side h4{font-size:.875rem;font-weight:600}.editor-preview-side h5,.editor-preview-side h6{font-size:.875rem}.editor-preview-side h2,.editor-preview-side h3,.editor-preview-side h4,.editor-preview-side h5,.editor-preview-side h6{margin-bottom:0}.editor-preview-side blockquote{background:#f3f0ee;padding:1.5rem;border:none}.CodeMirror{background:#fafafa;font-size:.8125rem}.CodeMirror .cm-spell-error{background:url(../images/simplemde-spelling.png) repeat-x bottom left !important;padding-bottom:1px}.editor-preview,.editor-preview-side{background:#fff}@media screen and (max-width: 39.99875em){.editor-preview,.editor-preview-side{display:none}.CodeMirror-sided{width:100% !important}}.editor-toolbar,.CodeMirror,.editor-toolbar a,.CodeMirror .CodeMirror-code .cm-comment{border-radius:0}.ag-theme-fsns{--ag-header-foreground-color: #8f1838;--ag-header-background-color: #fff}.ag-theme-fsns .row-actions-flex{height:100%;padding:0;margin:0;display:flex;flex-wrap:wrap;column-gap:1em;justify-content:center;align-items:center}.ag-theme-fsns .tp-pass{background-color:#25d925}.ag-theme-fsns .tp-fail{background-color:#c00}.ag-theme-fsns .tp-incomplete{background-color:#9fd0cb}.ag-theme-fsns .ag-root-wrapper{border:none !important}.ag-theme-fsns .ag-header-cell{background:#fff;font-size:0.5625rem;letter-spacing:2px;border-bottom:1px solid #55565a;font-weight:700;text-transform:uppercase;color:#8f1838;padding-right:5px}.ag-theme-fsns .ag-header-cell .fa{color:#55565a}.ag-theme-fsns .ag-cell,.ag-theme-fsns .ag-header-cell{display:flex;align-items:center;padding-left:10px}.ag-theme-fsns .ag-cell,.ag-theme-fsns .ag-row>.group-head{font-size:0.8125rem;border-left:1px solid #efefef}.ag-theme-fsns .ag-cell>div,.ag-theme-fsns .ag-row>.group-head>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ag-theme-fsns .ag-cell.row-actions>div,.ag-theme-fsns .ag-cell.no-truncate>div,.ag-theme-fsns .ag-row>.group-head.row-actions>div,.ag-theme-fsns .ag-row>.group-head.no-truncate>div{overflow:visible;text-overflow:none}.ag-theme-fsns .ag-cell a,.ag-theme-fsns .ag-row>.group-head a{font-weight:400}.ag-theme-fsns .ag-cell.row-actions,.ag-theme-fsns .ag-row>.group-head.row-actions{white-space:nowrap;border-left:none}.ag-theme-fsns .ag-cell.row-actions button,.ag-theme-fsns .ag-cell.row-actions .button,.ag-theme-fsns .ag-row>.group-head.row-actions button,.ag-theme-fsns .ag-row>.group-head.row-actions .button{margin:2px 0 0 10px;opacity:0;transition:ease all 0.25s}.ag-theme-fsns .ag-cell.row-actions button:disabled,.ag-theme-fsns .ag-cell.row-actions button.disabled,.ag-theme-fsns .ag-cell.row-actions button[disabled],.ag-theme-fsns .ag-cell.row-actions .button:disabled,.ag-theme-fsns .ag-cell.row-actions .button.disabled,.ag-theme-fsns .ag-cell.row-actions .button[disabled],.ag-theme-fsns .ag-row>.group-head.row-actions button:disabled,.ag-theme-fsns .ag-row>.group-head.row-actions button.disabled,.ag-theme-fsns .ag-row>.group-head.row-actions button[disabled],.ag-theme-fsns .ag-row>.group-head.row-actions .button:disabled,.ag-theme-fsns .ag-row>.group-head.row-actions .button.disabled,.ag-theme-fsns .ag-row>.group-head.row-actions .button[disabled]{cursor:not-allowed}.ag-theme-fsns .ag-cell.row-actions button:disabled:hover i.fa,.ag-theme-fsns .ag-cell.row-actions button:disabled:active i.fa,.ag-theme-fsns .ag-cell.row-actions button:disabled:focus i.fa,.ag-theme-fsns .ag-cell.row-actions button.disabled:hover i.fa,.ag-theme-fsns .ag-cell.row-actions button.disabled:active i.fa,.ag-theme-fsns .ag-cell.row-actions button.disabled:focus i.fa,.ag-theme-fsns .ag-cell.row-actions button[disabled]:hover i.fa,.ag-theme-fsns .ag-cell.row-actions button[disabled]:active i.fa,.ag-theme-fsns .ag-cell.row-actions button[disabled]:focus i.fa,.ag-theme-fsns .ag-cell.row-actions .button:disabled:hover i.fa,.ag-theme-fsns .ag-cell.row-actions .button:disabled:active i.fa,.ag-theme-fsns .ag-cell.row-actions .button:disabled:focus i.fa,.ag-theme-fsns .ag-cell.row-actions .button.disabled:hover i.fa,.ag-theme-fsns .ag-cell.row-actions .button.disabled:active i.fa,.ag-theme-fsns .ag-cell.row-actions .button.disabled:focus i.fa,.ag-theme-fsns .ag-cell.row-actions .button[disabled]:hover i.fa,.ag-theme-fsns .ag-cell.row-actions .button[disabled]:active i.fa,.ag-theme-fsns .ag-cell.row-actions .button[disabled]:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button:disabled:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button:disabled:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button:disabled:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button.disabled:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button.disabled:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button.disabled:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button[disabled]:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button[disabled]:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions button[disabled]:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button:disabled:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button:disabled:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button:disabled:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button.disabled:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button.disabled:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button.disabled:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button[disabled]:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button[disabled]:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions .button[disabled]:focus i.fa{color:#8f1838 !important}.ag-theme-fsns .ag-cell.row-actions:hover i.fa,.ag-theme-fsns .ag-cell.row-actions:active i.fa,.ag-theme-fsns .ag-cell.row-actions:focus i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions:hover i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions:active i.fa,.ag-theme-fsns .ag-row>.group-head.row-actions:focus i.fa{color:#cc2350 !important}.ag-theme-fsns .ag-cell i.fa,.ag-theme-fsns .ag-row>.group-head i.fa{font-size:1.25rem;color:#8f1838}.ag-theme-fsns .ag-cell .item-options a,.ag-theme-fsns .ag-row>.group-head .item-options a{display:inline-block;padding:0.5rem 0.75rem 0 0;color:#55565a;font-weight:600;font-size:0.6875rem}.ag-theme-fsns .ag-cell .item-options a .fa,.ag-theme-fsns .ag-row>.group-head .item-options a .fa{color:#8f1838;font-size:0.9375rem;display:inline-block;margin-right:2px}.ag-theme-fsns .ag-row{border-bottom:1px solid #d5d5d6}.ag-theme-fsns .ag-row .fa.fa-check{color:#2e2e2e;font-size:0.9375rem}.ag-theme-fsns .ag-row:hover{background:#fbfafa;font-weight:600}.ag-theme-fsns .ag-row:hover a{font-weight:600}.ag-theme-fsns .ag-row:hover .ag-cell.row-actions button,.ag-theme-fsns .ag-row:hover .ag-cell.row-actions .button{opacity:1}.ag-theme-fsns .ag-row:hover button:disabled,.ag-theme-fsns .ag-row:hover button.disabled,.ag-theme-fsns .ag-row:hover button[disabled],.ag-theme-fsns .ag-row:hover .button:disabled,.ag-theme-fsns .ag-row:hover .button.disabled,.ag-theme-fsns .ag-row:hover .button[disabled]{opacity:0.35 !important}.ag-theme-fsns .ag-cell.disabled-cell{background:#e3e3e3}.ag-theme-fsns .ag-cell.disabled-cell.ag-cell-range-selected:not(.ag-cell-disable-selection){background:#a7b1c4}.ag-theme-fsns .ag-cell.invalid-cell{background:#fdf4f4}.ag-theme-fsns .ag-cell.segmentation-parent-cell{border-left-color:#8f1838}.ag-theme-fsns .ag-cell.segmentation-child-cell{border-right-color:#8f1838}.ag-theme-fsns-text-wrap.ag-theme-fsns .ag-cell>div{white-space:initial;overflow:initial;text-overflow:initial}.ag-theme-fsns-text-wrap.ag-theme-fsns .ag-cell{align-items:normal !important}a{transition:ease all 0.25s !important}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import Attribute from './attribute';\r\n\r\nexport function buildAttributeQuery(attributes: Attribute[], parameterName) {\r\n if (!attributes || !attributes.length)\r\n return '';\r\n\r\n var validIndex = 0;\r\n var query = '';\r\n\r\n for (var i = 0; i < attributes.length; i++) {\r\n let attribute = attributes[i];\r\n if (!attribute.name || !attribute.value)\r\n continue;\r\n\r\n query += `${parameterName}[${validIndex}].name=${attribute.name}&${parameterName}[${validIndex}].value=${attribute.value}&`;\r\n validIndex++;\r\n }\r\n\r\n return query;\r\n}\r\n","enum GenerateTasksDistributionMethod {\r\n WEEK_BASED = 'WeekBasedSequential',\r\n SEQUENTIAL = 'Sequential',\r\n QUARTERLY_SWAB = 'QuarterlySwab',\r\n MONTHLY_SWAB = 'MonthlySwab',\r\n WEEKLY_SWAB = 'WeeklySwab',\r\n DAILY_SWAB = 'DailySwab',\r\n}\r\n\r\nexport default GenerateTasksDistributionMethod;\r\n","enum PlanType {\r\n DISCRETIONARY = 1,\r\n SCHEDULED = 2,\r\n RISK_BASED_PRIORITY = 3,\r\n ADHOC = 4\r\n}\r\n\r\nexport default PlanType;\r\n","import { ColDef, ColGroupDef, GridOptions, ValueGetterParams } from 'ag-grid-community';\r\nimport { AgMarkedCellRenderer } from 'infrastructure/ag-grid/ag-cell-renderers';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport {\r\n agFormatBoolean,\r\n agFormatDateAndTimeToLocale,\r\n} from 'infrastructure/ag-grid/ag-value-formatters';\r\nimport { GlobalMessageApproval } from './global-message';\r\n\r\nconst colDefs: (ColDef | ColGroupDef)[] = [\r\n { headerName: 'Title', field: 'title' },\r\n {\r\n headerName: 'Message',\r\n field: 'message',\r\n flex: 3,\r\n wrapText: true,\r\n autoHeight: true,\r\n cellRenderer: AgMarkedCellRenderer,\r\n },\r\n {\r\n headerName: 'Published',\r\n field: 'publishDateTime',\r\n valueFormatter: agFormatDateAndTimeToLocale,\r\n },\r\n { headerName: 'Created', field: 'createDateTime', valueFormatter: agFormatDateAndTimeToLocale },\r\n { headerName: 'Active', field: 'isActive', valueFormatter: agFormatBoolean },\r\n { headerName: 'Modified By', field: 'modifiedByUser' },\r\n {\r\n headerName: 'First Approved By',\r\n valueGetter: (params: ValueGetterParams) => {\r\n const { approvals }: { approvals: GlobalMessageApproval[] } = params.data;\r\n if (approvals.length === 0) return;\r\n\r\n return approvals[0].approvedByUser;\r\n },\r\n },\r\n {\r\n headerName: 'First Approved On',\r\n valueGetter: (params: ValueGetterParams) => {\r\n const { approvals }: { approvals: GlobalMessageApproval[] } = params.data;\r\n if (approvals.length === 0) return;\r\n\r\n return approvals[0].approvalDateTime;\r\n },\r\n valueFormatter: agFormatDateAndTimeToLocale,\r\n },\r\n {\r\n headerName: 'Second Approved By',\r\n valueGetter: (params: ValueGetterParams) => {\r\n const { approvals }: { approvals: GlobalMessageApproval[] } = params.data;\r\n if (approvals.length !== 2) return;\r\n\r\n return approvals[1].approvedByUser;\r\n },\r\n },\r\n {\r\n headerName: 'Second Approved On',\r\n valueGetter: (params: ValueGetterParams) => {\r\n const { approvals }: { approvals: GlobalMessageApproval[] } = params.data;\r\n if (approvals.length !== 2) return;\r\n\r\n return approvals[1].approvalDateTime;\r\n },\r\n valueFormatter: agFormatDateAndTimeToLocale,\r\n },\r\n {\r\n suppressMenu: true,\r\n cellClass: 'medium-text-right',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n valueGetter: (params: ValueGetterParams) => {\r\n const { id, isActive } = params.data;\r\n\r\n return {\r\n id,\r\n isActive,\r\n };\r\n },\r\n cellRenderer: (params) => {\r\n const { id, isActive } = params.value;\r\n if (!isActive) {\r\n return '
';\r\n }\r\n\r\n return `\r\n
\r\n \r\n \r\n \r\n
\r\n `;\r\n },\r\n },\r\n];\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: colDefs,\r\n};\r\n\r\nconst globalMessageGridOptions: GridOptions = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .withAutoHeight()\r\n .addStatefulness('global-message-admin-grid')\r\n .build();\r\n\r\nexport { globalMessageGridOptions };\r\n","import { BaseQueryFilter } from 'infrastructure/components/query-filters/base-query-filter';\r\nimport {\r\n CollectionTypeQuery,\r\n CollectionTypesQueryFilters,\r\n} from 'infrastructure/components/query-filters/collection-types-query-filter';\r\nimport {\r\n ConfirmationTestingQuery,\r\n ConfirmationTestingQueryFilters,\r\n} from 'infrastructure/components/query-filters/confirmation-testing-query-filter';\r\nimport {\r\n DateRangeQuery,\r\n DateRangeQueryFilter,\r\n} from 'infrastructure/components/query-filters/date-range-query-filter';\r\nimport { QueryFiltered } from 'infrastructure/components/query-filters/query-filtered';\r\nimport {\r\n RecordStatusQuery,\r\n RecordStatusQueryFilters,\r\n} from 'infrastructure/components/query-filters/record-status-query-filter';\r\nimport CollectionType from 'location-testing/collection-type';\r\nimport TestMethodGroup from 'location-testing/test-method-group';\r\nimport RecordStatus from 'record-status';\r\n\r\nexport interface MapDashboardQuery {\r\n id: number;\r\n dateRangeOption?: string;\r\n targetStartDate: string;\r\n targetEndDate: string;\r\n dateRangeOverride?: boolean;\r\n planIds: number[];\r\n recordStatus: RecordStatus;\r\n pointId?: number;\r\n pointRooms: string[];\r\n pointTypes: string[];\r\n pointZones: string[];\r\n testMethodIds: number[];\r\n taskAssigneeIds: number[];\r\n collectionTypes: CollectionType[];\r\n remediationRootCauseIds: number[];\r\n testMethodGroup?: TestMethodGroup;\r\n confirmationTestValues?: string[];\r\n}\r\n\r\n/* eslint-disable brace-style */\r\nexport class MapDashboardQueryFilters\r\n extends BaseQueryFilter\r\n implements QueryFiltered\r\n{\r\n private _filterCaption: string;\r\n id: number;\r\n dateRangeQueryFilters: DateRangeQueryFilter;\r\n recordStatusQueryFilters: RecordStatusQueryFilters;\r\n collectionTypesQueryFilters: CollectionTypesQueryFilters;\r\n confirmationTestingQueryFilters: ConfirmationTestingQueryFilters;\r\n\r\n pointRooms: string[];\r\n pointTypes: string[];\r\n pointZones: string[];\r\n testMethodIds: number[];\r\n taskAssigneeIds: number[];\r\n planIds: number[];\r\n pointId: number;\r\n remediationRootCauseIds: number[];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.dateRangeQueryFilters = new DateRangeQueryFilter();\r\n this.recordStatusQueryFilters = new RecordStatusQueryFilters();\r\n this.collectionTypesQueryFilters = new CollectionTypesQueryFilters();\r\n this.confirmationTestingQueryFilters = new ConfirmationTestingQueryFilters();\r\n\r\n this.pointRooms = [];\r\n this.pointTypes = [];\r\n this.pointZones = [];\r\n this.testMethodIds = [];\r\n this.taskAssigneeIds = [];\r\n this.planIds = [];\r\n this.remediationRootCauseIds = [];\r\n this.id = 0;\r\n }\r\n\r\n public get count(): number {\r\n return (\r\n 0 +\r\n this.recordStatusQueryFilters.count +\r\n this.collectionTypesQueryFilters.count +\r\n this.confirmationTestingQueryFilters.count +\r\n Number(!!(this.testMethodIds && this.testMethodIds.length)) +\r\n Number(!!(this.pointRooms && this.pointRooms.length)) +\r\n Number(!!(this.pointZones && this.pointZones.length)) +\r\n Number(!!(this.pointTypes && this.pointTypes.length)) +\r\n Number(!!(this.taskAssigneeIds && this.taskAssigneeIds.length)) +\r\n Number(!!(this.planIds && this.planIds.length)) +\r\n Number(!!(this.remediationRootCauseIds && this.remediationRootCauseIds.length))\r\n );\r\n }\r\n\r\n public get filterCaption(): string {\r\n return this._filterCaption;\r\n }\r\n\r\n reset(): void {\r\n this.dateRangeQueryFilters.reset();\r\n this.recordStatusQueryFilters.reset();\r\n this.collectionTypesQueryFilters.reset();\r\n this.confirmationTestingQueryFilters.reset();\r\n\r\n this.pointRooms = [];\r\n this.pointTypes = [];\r\n this.pointZones = [];\r\n this.testMethodIds = [];\r\n this.taskAssigneeIds = [];\r\n this.planIds = [];\r\n this.remediationRootCauseIds = [];\r\n }\r\n\r\n getQueryParams(): MapDashboardQuery {\r\n return {\r\n ...this.dateRangeQueryFilters.getQueryParams(),\r\n ...this.recordStatusQueryFilters.getQueryParams(),\r\n ...this.collectionTypesQueryFilters.getQueryParams(),\r\n ...this.confirmationTestingQueryFilters.getQueryParams(),\r\n testMethodIds: this.testMethodIds,\r\n pointRooms: this.pointRooms,\r\n pointZones: this.pointZones,\r\n pointTypes: this.pointTypes,\r\n taskAssigneeIds: this.taskAssigneeIds,\r\n planIds: this.planIds,\r\n id: this.id,\r\n pointId: this.pointId,\r\n remediationRootCauseIds: this.remediationRootCauseIds,\r\n };\r\n }\r\n\r\n setFilterValues(params: MapDashboardQuery): void {\r\n const dateRangeQuery: DateRangeQuery = {\r\n dateRangeOption: params.dateRangeOption,\r\n targetStartDate: params.targetStartDate,\r\n targetEndDate: params.targetEndDate,\r\n dateRangeOverride: params.dateRangeOverride,\r\n };\r\n const recordStatusQuery: RecordStatusQuery = { recordStatus: params.recordStatus };\r\n\r\n const collectionTypeQuery: CollectionTypeQuery = {\r\n collectionTypes: params.collectionTypes,\r\n };\r\n const confirmationTestingQuery: ConfirmationTestingQuery = {\r\n testMethodGroup: params.testMethodGroup,\r\n confirmationTestValues: params.confirmationTestValues,\r\n };\r\n\r\n const {\r\n pointRooms,\r\n pointTypes,\r\n pointZones,\r\n testMethodIds,\r\n taskAssigneeIds,\r\n planIds,\r\n remediationRootCauseIds,\r\n id,\r\n } = { ...params };\r\n\r\n this.dateRangeQueryFilters.setFilterValues(dateRangeQuery);\r\n this.recordStatusQueryFilters.setFilterValues(recordStatusQuery);\r\n this.collectionTypesQueryFilters.setFilterValues(collectionTypeQuery);\r\n this.confirmationTestingQueryFilters.setFilterValues(confirmationTestingQuery);\r\n\r\n super.setQueryFilteredValues(\r\n {\r\n pointRooms,\r\n pointTypes,\r\n pointZones,\r\n testMethodIds: super.formatSingleOrMultipleOrNothingArray(testMethodIds),\r\n taskAssigneeIds: taskAssigneeIds?.map(Number),\r\n planIds: planIds?.map(Number),\r\n remediationRootCauseIds: super.formatSingleOrMultipleOrNothingArray(\r\n remediationRootCauseIds,\r\n ),\r\n id,\r\n },\r\n this,\r\n );\r\n\r\n this._filterCaption = super.getFilterCaption(\r\n this.count,\r\n 'Collection Date Range',\r\n this.dateRangeQueryFilters.dateRangeCaption,\r\n );\r\n }\r\n}\r\n","import { autoinject, computedFrom, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n ValidationController,\r\n ValidationControllerFactory,\r\n validateTrigger,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport SecurityService from 'security/security-service';\r\nimport DashboardViewCategoryService, {\r\n DashboardViewCategory,\r\n} from '../dashboard-view-categories/dashboard-view-category-service';\r\nimport DashboardTemplateService, {\r\n DashboardTemplateSummary,\r\n toWidgetRequest,\r\n} from '../dashboard-templates/dashboard-template-service';\r\nimport {\r\n WidgetLayoutEditorItem,\r\n WidgetPlacement,\r\n} from '../dashboard-widgets/widget-layout-editor/widget-layout-editor-item';\r\nimport { WidgetLayoutEditor } from '../dashboard-widgets/widget-layout-editor/widget-layout-editor';\r\nimport { buildLayoutItemsFromTemplate } from '../dashboard-widgets/widget-registry';\r\nimport DashboardPreviewService from '../dashboard-widgets/dashboard-preview-service';\r\n\r\nconst CREATE_NEW_TEMPLATE_VALUE = 'new';\r\n\r\n@autoinject\r\nexport class DashboardTemplateDefaultDetail {\r\n readonly createNewTemplateValue = CREATE_NEW_TEMPLATE_VALUE;\r\n categoryId: number;\r\n category: DashboardViewCategory;\r\n templates: DashboardTemplateSummary[] = [];\r\n templateOptions: SelectorOption[] = [];\r\n templateName = '';\r\n validationController: ValidationController;\r\n templateWidgetItems: WidgetLayoutEditorItem[] = [];\r\n widgetLayoutEditor: WidgetLayoutEditor;\r\n isWorkingUnderOrganization = false;\r\n\r\n private savedSnapshot = '';\r\n\r\n @observable selectedTemplateId: string | number = CREATE_NEW_TEMPLATE_VALUE;\r\n\r\n constructor(\r\n validationControllerFactory: ValidationControllerFactory,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private router: Router,\r\n private securityService: SecurityService,\r\n private dashboardViewCategoryService: DashboardViewCategoryService,\r\n private dashboardTemplateService: DashboardTemplateService,\r\n private previewService: DashboardPreviewService,\r\n ) {\r\n this.logger.name = 'dashboard-template-default-detail';\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n ValidationRules.ensure('templateName')\r\n .displayName('Template Name')\r\n .required()\r\n .maxLength(100)\r\n .on(this);\r\n this.validationController.addObject(this);\r\n }\r\n\r\n async activate(params: { id: string }) {\r\n this.categoryId = parseInt(params.id);\r\n this.isWorkingUnderOrganization = this.securityService.isWorkingUnderOrganization();\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const [categories, templates] = await Promise.all([\r\n this.dashboardViewCategoryService.getDashboardViewCategories(),\r\n this.dashboardTemplateService.getTemplatesForCategory(this.categoryId),\r\n ]);\r\n\r\n this.category = categories.find((c) => c.id === this.categoryId);\r\n this.templates = templates;\r\n this.buildTemplateOptions();\r\n\r\n const activeTemplate = templates.find((t) => t.isActive);\r\n this.selectedTemplateId = activeTemplate\r\n ? activeTemplate.id\r\n : CREATE_NEW_TEMPLATE_VALUE;\r\n } catch (error) {\r\n this.logger.error('Error loading dashboard templates for category.', error, {\r\n categoryId: this.categoryId,\r\n });\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async selectedTemplateIdChanged(newValue: string | number) {\r\n const template = this.templates.find((t) => t.id === newValue);\r\n this.templateName = template ? template.name : '';\r\n\r\n if (newValue === CREATE_NEW_TEMPLATE_VALUE) {\r\n this.templateWidgetItems = [];\r\n this.savedSnapshot = this.buildSnapshot(this.templateName, this.templateWidgetItems);\r\n return;\r\n }\r\n\r\n const widgets = await this.dashboardTemplateService.getTemplateWidgets(newValue as number);\r\n this.templateWidgetItems = buildLayoutItemsFromTemplate(widgets).map((w) => ({\r\n id: w.id,\r\n title: w.title,\r\n x: w.x,\r\n y: w.y,\r\n w: w.w,\r\n h: w.h,\r\n }));\r\n this.savedSnapshot = this.buildSnapshot(this.templateName, this.templateWidgetItems);\r\n }\r\n\r\n canDeactivate(): boolean | Promise {\r\n const currentWidgets = this.widgetLayoutEditor\r\n ? this.widgetLayoutEditor.getConfiguredWidgets()\r\n : [];\r\n const currentSnapshot = this.buildSnapshot(this.templateName, currentWidgets);\r\n\r\n if (currentSnapshot === this.savedSnapshot) return true;\r\n\r\n return this.dialogPresenter.showConfirmation(\r\n 'Unsaved Changes',\r\n 'You have unsaved changes to this template. Leave without saving?',\r\n );\r\n }\r\n\r\n private buildSnapshot(name: string, widgets: WidgetPlacement[]): string {\r\n return JSON.stringify({\r\n name,\r\n widgets: [...widgets]\r\n .sort((a, b) => a.id.localeCompare(b.id))\r\n .map((w) => ({ id: w.id, x: w.x, y: w.y, w: w.w, h: w.h })),\r\n });\r\n }\r\n\r\n @computedFrom('templates', 'selectedTemplateId')\r\n get isSelectedTemplateActive(): boolean {\r\n const template = this.templates.find((t) => t.id === this.selectedTemplateId);\r\n return template ? template.isActive : false;\r\n }\r\n\r\n async activateTemplate() {\r\n if (this.selectedTemplateId === CREATE_NEW_TEMPLATE_VALUE) return;\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Activate Template',\r\n `Activate \"${this.templateName}\" for the ${this.category.name} category? This will replace the dashboard shown to every organization in this category that doesn't already have its own override.`,\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.dashboardTemplateService.activateTemplate(this.selectedTemplateId as number);\r\n\r\n this.templates = this.templates.map((t) => ({\r\n ...t,\r\n isActive: t.id === this.selectedTemplateId,\r\n }));\r\n this.buildTemplateOptions();\r\n\r\n this.pageContext.showSuccessOverlay('Template activated successfully.');\r\n } catch (error) {\r\n this.logger.error('Error activating dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Activating Template',\r\n 'An error occurred while activating the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async deactivateTemplate() {\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Deactivate Template',\r\n `Deactivate \"${this.templateName}\" for the ${this.category.name} category? Organizations in this category without their own override will fall back to the default dashboard layout until another template is activated.`,\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.dashboardTemplateService.deactivateTemplate(\r\n this.selectedTemplateId as number,\r\n );\r\n\r\n this.templates = this.templates.map((t) =>\r\n t.id === this.selectedTemplateId ? { ...t, isActive: false } : t,\r\n );\r\n this.buildTemplateOptions();\r\n\r\n this.pageContext.showSuccessOverlay('Template deactivated successfully.');\r\n } catch (error) {\r\n this.logger.error('Error deactivating dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Deactivating Template',\r\n 'An error occurred while deactivating the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n // Opens in a new tab, rather than router.navigateToRoute, deliberately - navigating away in\r\n // the same tab would trip canDeactivate()'s unsaved-changes prompt on every preview click,\r\n // which defeats the point of a quick \"let me peek\" action.\r\n previewTemplate() {\r\n const widgets = this.widgetLayoutEditor.getConfiguredWidgets().map(toWidgetRequest);\r\n this.previewService.setPendingPreview(widgets);\r\n window.open(this.router.generate('dashboard-widgets-preview'), '_blank');\r\n }\r\n\r\n async saveTemplate() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const widgets = this.widgetLayoutEditor.getConfiguredWidgets();\r\n\r\n if (this.selectedTemplateId === CREATE_NEW_TEMPLATE_VALUE) {\r\n const newId = await this.dashboardTemplateService.createTemplate(\r\n this.categoryId,\r\n this.templateName,\r\n widgets,\r\n );\r\n this.templates = [\r\n ...this.templates,\r\n { id: newId, name: this.templateName, isActive: false },\r\n ];\r\n this.buildTemplateOptions();\r\n this.selectedTemplateId = newId;\r\n } else {\r\n await this.dashboardTemplateService.updateTemplate(\r\n this.selectedTemplateId as number,\r\n this.templateName,\r\n widgets,\r\n );\r\n\r\n this.templates = this.templates.map((t) =>\r\n t.id === this.selectedTemplateId ? { ...t, name: this.templateName } : t,\r\n );\r\n this.buildTemplateOptions();\r\n }\r\n\r\n this.savedSnapshot = this.buildSnapshot(this.templateName, widgets);\r\n this.pageContext.showSuccessOverlay('Template saved successfully.');\r\n } catch (error) {\r\n this.logger.error('Error saving dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Template',\r\n 'An error occurred while saving the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n // Soft-deletes (archives) under the hood so a mistaken delete can still be recovered directly\r\n // in the database if needed, but the UI presents this as a normal, permanent delete - users\r\n // shouldn't be led to believe they can undo it themselves.\r\n async archiveTemplate() {\r\n if (this.selectedTemplateId === CREATE_NEW_TEMPLATE_VALUE) return;\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Delete Template',\r\n `Delete \"${this.templateName}\"? This cannot be undone.`,\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.dashboardTemplateService.archiveTemplate(this.selectedTemplateId as number);\r\n\r\n this.templates = this.templates.filter((t) => t.id !== this.selectedTemplateId);\r\n this.buildTemplateOptions();\r\n this.selectedTemplateId = CREATE_NEW_TEMPLATE_VALUE;\r\n\r\n this.pageContext.showSuccessOverlay('Template deleted successfully.');\r\n } catch (error) {\r\n this.logger.error('Error archiving dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Deleting Template',\r\n 'An error occurred while deleting the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n private buildTemplateOptions() {\r\n this.templateOptions = [\r\n ...this.templates.map((t) => ({\r\n title: t.isActive ? `${t.name} (Active)` : t.name,\r\n value: t.id,\r\n })),\r\n { title: 'Create New Template', value: CREATE_NEW_TEMPLATE_VALUE },\r\n ];\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport DashboardTemplateService, {\r\n DashboardTemplateDefault,\r\n} from '../dashboard-templates/dashboard-template-service';\r\n\r\n@autoinject\r\nexport class DashboardTemplateDefaultList {\r\n dashboardTemplateDefaults: DashboardTemplateDefault[] = [];\r\n sortParam = { active: 'categoryName', direction: 'asc' };\r\n\r\n constructor(\r\n private router: Router,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dashboardTemplateService: DashboardTemplateService,\r\n ) {\r\n this.logger.name = 'dashboard-template-default-list';\r\n }\r\n\r\n navigateToDashboardTemplateDefaultDetail(categoryId: number) {\r\n this.router.navigateToRoute('dashboard-template-default-detail', { id: categoryId });\r\n }\r\n\r\n async activate() {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.dashboardTemplateDefaults =\r\n await this.dashboardTemplateService.getDashboardTemplateDefaults();\r\n this.sortDashboardTemplateDefaults();\r\n } catch (error) {\r\n this.logger.error('Error loading dashboard template defaults.', error);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n toggleSort(key: string) {\r\n this.sortParam.direction =\r\n this.sortParam.active === key && this.sortParam.direction === 'asc' ? 'desc' : 'asc';\r\n this.sortParam.active = key;\r\n this.sortDashboardTemplateDefaults();\r\n }\r\n\r\n private sortDashboardTemplateDefaults() {\r\n const { active, direction } = this.sortParam;\r\n this.dashboardTemplateDefaults = [...this.dashboardTemplateDefaults].sort((a, b) => {\r\n const aValue = String((a as any)[active] ?? '').toLowerCase();\r\n const bValue = String((b as any)[active] ?? '').toLowerCase();\r\n if (aValue === bValue) return 0;\r\n if (direction === 'asc') return aValue > bValue ? 1 : -1;\r\n return aValue > bValue ? -1 : 1;\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, computedFrom, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n ValidationController,\r\n ValidationControllerFactory,\r\n validateTrigger,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport SecurityService from 'security/security-service';\r\nimport DashboardViewCategoryService, {\r\n DashboardViewCategory,\r\n} from '../dashboard-view-categories/dashboard-view-category-service';\r\nimport DashboardTemplateService, {\r\n DashboardTemplateSummary,\r\n toWidgetRequest,\r\n} from './dashboard-template-service';\r\nimport {\r\n WidgetLayoutEditorItem,\r\n WidgetPlacement,\r\n} from '../dashboard-widgets/widget-layout-editor/widget-layout-editor-item';\r\nimport { WidgetLayoutEditor } from '../dashboard-widgets/widget-layout-editor/widget-layout-editor';\r\nimport { buildLayoutItemsFromTemplate } from '../dashboard-widgets/widget-registry';\r\nimport DashboardPreviewService from '../dashboard-widgets/dashboard-preview-service';\r\n\r\nconst CREATE_NEW_TEMPLATE_VALUE = 'new';\r\n\r\n@autoinject\r\nexport class DashboardTemplateDetail {\r\n readonly createNewTemplateValue = CREATE_NEW_TEMPLATE_VALUE;\r\n categoryId: number;\r\n category: DashboardViewCategory;\r\n templates: DashboardTemplateSummary[] = [];\r\n templateOptions: SelectorOption[] = [];\r\n templateName = '';\r\n validationController: ValidationController;\r\n templateWidgetItems: WidgetLayoutEditorItem[] = [];\r\n widgetLayoutEditor: WidgetLayoutEditor;\r\n\r\n private organizationId: number;\r\n private savedSnapshot = '';\r\n\r\n @observable selectedTemplateId: string | number = CREATE_NEW_TEMPLATE_VALUE;\r\n\r\n constructor(\r\n validationControllerFactory: ValidationControllerFactory,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private router: Router,\r\n private securityService: SecurityService,\r\n private dashboardViewCategoryService: DashboardViewCategoryService,\r\n private dashboardTemplateService: DashboardTemplateService,\r\n private previewService: DashboardPreviewService,\r\n ) {\r\n this.logger.name = 'dashboard-template-detail';\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n ValidationRules.ensure('templateName')\r\n .displayName('Template Name')\r\n .required()\r\n .maxLength(100)\r\n .on(this);\r\n this.validationController.addObject(this);\r\n }\r\n\r\n async activate(params: { id: string }) {\r\n this.categoryId = parseInt(params.id);\r\n this.organizationId = this.securityService.getEffectiveUser().organizationId;\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const [categories, templates] = await Promise.all([\r\n this.dashboardViewCategoryService.getDashboardViewCategories(),\r\n this.dashboardTemplateService.getOrganizationTemplatesForCategory(\r\n this.organizationId,\r\n this.categoryId,\r\n ),\r\n ]);\r\n\r\n this.category = categories.find((c) => c.id === this.categoryId);\r\n this.templates = templates;\r\n this.buildTemplateOptions();\r\n\r\n const activeTemplate = templates.find((t) => t.isActive);\r\n this.selectedTemplateId = activeTemplate\r\n ? activeTemplate.id\r\n : CREATE_NEW_TEMPLATE_VALUE;\r\n } catch (error) {\r\n this.logger.error('Error loading dashboard templates for category.', error, {\r\n categoryId: this.categoryId,\r\n organizationId: this.organizationId,\r\n });\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async selectedTemplateIdChanged(newValue: string | number) {\r\n const template = this.templates.find((t) => t.id === newValue);\r\n this.templateName = template ? template.name : '';\r\n\r\n if (newValue === CREATE_NEW_TEMPLATE_VALUE) {\r\n this.templateWidgetItems = [];\r\n this.savedSnapshot = this.buildSnapshot(this.templateName, this.templateWidgetItems);\r\n return;\r\n }\r\n\r\n const widgets = await this.dashboardTemplateService.getOrganizationTemplateWidgets(\r\n this.organizationId,\r\n newValue as number,\r\n );\r\n this.templateWidgetItems = buildLayoutItemsFromTemplate(widgets).map((w) => ({\r\n id: w.id,\r\n title: w.title,\r\n x: w.x,\r\n y: w.y,\r\n w: w.w,\r\n h: w.h,\r\n }));\r\n this.savedSnapshot = this.buildSnapshot(this.templateName, this.templateWidgetItems);\r\n }\r\n\r\n canDeactivate(): boolean | Promise {\r\n const currentWidgets = this.widgetLayoutEditor\r\n ? this.widgetLayoutEditor.getConfiguredWidgets()\r\n : [];\r\n const currentSnapshot = this.buildSnapshot(this.templateName, currentWidgets);\r\n\r\n if (currentSnapshot === this.savedSnapshot) return true;\r\n\r\n return this.dialogPresenter.showConfirmation(\r\n 'Unsaved Changes',\r\n 'You have unsaved changes to this template. Leave without saving?',\r\n );\r\n }\r\n\r\n private buildSnapshot(name: string, widgets: WidgetPlacement[]): string {\r\n return JSON.stringify({\r\n name,\r\n widgets: [...widgets]\r\n .sort((a, b) => a.id.localeCompare(b.id))\r\n .map((w) => ({ id: w.id, x: w.x, y: w.y, w: w.w, h: w.h })),\r\n });\r\n }\r\n\r\n @computedFrom('templates', 'selectedTemplateId')\r\n get isSelectedTemplateActive(): boolean {\r\n const template = this.templates.find((t) => t.id === this.selectedTemplateId);\r\n return template ? template.isActive : false;\r\n }\r\n\r\n async activateTemplate() {\r\n if (this.selectedTemplateId === CREATE_NEW_TEMPLATE_VALUE) return;\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Activate Template',\r\n `Activate \"${this.templateName}\" for the ${this.category.name} category? This will replace what your organization currently sees for this category.`,\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.dashboardTemplateService.activateOrganizationTemplate(\r\n this.organizationId,\r\n this.selectedTemplateId as number,\r\n );\r\n\r\n this.templates = this.templates.map((t) => ({\r\n ...t,\r\n isActive: t.id === this.selectedTemplateId,\r\n }));\r\n this.buildTemplateOptions();\r\n\r\n this.pageContext.showSuccessOverlay('Template activated successfully.');\r\n } catch (error) {\r\n this.logger.error('Error activating dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n organizationId: this.organizationId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Activating Template',\r\n 'An error occurred while activating the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async deactivateTemplate() {\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Deactivate Template',\r\n `Deactivate \"${this.templateName}\" for the ${this.category.name} category? Your organization will fall back to the default dashboard layout for this category until another template is activated.`,\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.dashboardTemplateService.deactivateOrganizationTemplate(\r\n this.organizationId,\r\n this.selectedTemplateId as number,\r\n );\r\n\r\n this.templates = this.templates.map((t) =>\r\n t.id === this.selectedTemplateId ? { ...t, isActive: false } : t,\r\n );\r\n this.buildTemplateOptions();\r\n\r\n this.pageContext.showSuccessOverlay('Template deactivated successfully.');\r\n } catch (error) {\r\n this.logger.error('Error deactivating dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n organizationId: this.organizationId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Deactivating Template',\r\n 'An error occurred while deactivating the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n // Opens in a new tab, rather than router.navigateToRoute, deliberately - navigating away in\r\n // the same tab would trip canDeactivate()'s unsaved-changes prompt on every preview click,\r\n // which defeats the point of a quick \"let me peek\" action.\r\n previewTemplate() {\r\n const widgets = this.widgetLayoutEditor.getConfiguredWidgets().map(toWidgetRequest);\r\n this.previewService.setPendingPreview(widgets);\r\n window.open(this.router.generate('dashboard-widgets-preview'), '_blank');\r\n }\r\n\r\n async saveTemplate() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const widgets = this.widgetLayoutEditor.getConfiguredWidgets();\r\n\r\n if (this.selectedTemplateId === CREATE_NEW_TEMPLATE_VALUE) {\r\n const newId = await this.dashboardTemplateService.createOrganizationTemplate(\r\n this.organizationId,\r\n this.categoryId,\r\n this.templateName,\r\n widgets,\r\n );\r\n this.templates = [\r\n ...this.templates,\r\n { id: newId, name: this.templateName, isActive: false },\r\n ];\r\n this.buildTemplateOptions();\r\n this.selectedTemplateId = newId;\r\n } else {\r\n await this.dashboardTemplateService.updateOrganizationTemplate(\r\n this.organizationId,\r\n this.selectedTemplateId as number,\r\n this.templateName,\r\n widgets,\r\n );\r\n\r\n this.templates = this.templates.map((t) =>\r\n t.id === this.selectedTemplateId ? { ...t, name: this.templateName } : t,\r\n );\r\n this.buildTemplateOptions();\r\n }\r\n\r\n this.savedSnapshot = this.buildSnapshot(this.templateName, widgets);\r\n this.pageContext.showSuccessOverlay('Template saved successfully.');\r\n } catch (error) {\r\n this.logger.error('Error saving dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n organizationId: this.organizationId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Template',\r\n 'An error occurred while saving the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n // Soft-deletes (archives) under the hood so a mistaken delete can still be recovered directly\r\n // in the database if needed, but the UI presents this as a normal, permanent delete - users\r\n // shouldn't be led to believe they can undo it themselves.\r\n async archiveTemplate() {\r\n if (this.selectedTemplateId === CREATE_NEW_TEMPLATE_VALUE) return;\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Delete Template',\r\n `Delete \"${this.templateName}\"? This cannot be undone.`,\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.dashboardTemplateService.archiveOrganizationTemplate(\r\n this.organizationId,\r\n this.selectedTemplateId as number,\r\n );\r\n\r\n this.templates = this.templates.filter((t) => t.id !== this.selectedTemplateId);\r\n this.buildTemplateOptions();\r\n this.selectedTemplateId = CREATE_NEW_TEMPLATE_VALUE;\r\n\r\n this.pageContext.showSuccessOverlay('Template deleted successfully.');\r\n } catch (error) {\r\n this.logger.error('Error archiving dashboard template.', error, {\r\n templateId: this.selectedTemplateId,\r\n organizationId: this.organizationId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Deleting Template',\r\n 'An error occurred while deleting the template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n private buildTemplateOptions() {\r\n this.templateOptions = [\r\n ...this.templates.map((t) => ({\r\n title: t.isActive ? `${t.name} (Active)` : t.name,\r\n value: t.id,\r\n })),\r\n { title: 'Create New Template', value: CREATE_NEW_TEMPLATE_VALUE },\r\n ];\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SecurityService from 'security/security-service';\r\nimport DashboardTemplateService, { DashboardTemplateDefault } from './dashboard-template-service';\r\n\r\n@autoinject\r\nexport class DashboardTemplateList {\r\n dashboardTemplates: DashboardTemplateDefault[] = [];\r\n sortParam = { active: 'categoryName', direction: 'asc' };\r\n\r\n private organizationId: number;\r\n\r\n constructor(\r\n private router: Router,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private securityService: SecurityService,\r\n private dashboardTemplateService: DashboardTemplateService,\r\n ) {\r\n this.logger.name = 'dashboard-template-list';\r\n }\r\n\r\n navigateToDashboardTemplateDetail(categoryId: number) {\r\n this.router.navigateToRoute('dashboard-template-detail', { id: categoryId });\r\n }\r\n\r\n async activate() {\r\n this.organizationId = this.securityService.getEffectiveUser().organizationId;\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.dashboardTemplates =\r\n await this.dashboardTemplateService.getOrganizationDashboardTemplates(\r\n this.organizationId,\r\n );\r\n this.sortDashboardTemplates();\r\n } catch (error) {\r\n this.logger.error('Error loading dashboard templates.', error, {\r\n organizationId: this.organizationId,\r\n });\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n toggleSort(key: string) {\r\n this.sortParam.direction =\r\n this.sortParam.active === key && this.sortParam.direction === 'asc' ? 'desc' : 'asc';\r\n this.sortParam.active = key;\r\n this.sortDashboardTemplates();\r\n }\r\n\r\n private sortDashboardTemplates() {\r\n const { active, direction } = this.sortParam;\r\n this.dashboardTemplates = [...this.dashboardTemplates].sort((a, b) => {\r\n const aValue = String((a as any)[active] ?? '').toLowerCase();\r\n const bValue = String((b as any)[active] ?? '').toLowerCase();\r\n if (aValue === bValue) return 0;\r\n if (direction === 'asc') return aValue > bValue ? 1 : -1;\r\n return aValue > bValue ? -1 : 1;\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { GridStack } from 'gridstack';\r\nimport { buildGridOptions } from './grid-config';\r\nimport PromiseQueue from 'infrastructure/promise-queue';\r\nimport { WidgetLayoutItem } from './widget-layout-item';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport Logger from 'infrastructure/logger';\r\nimport SecurityService from 'security/security-service';\r\nimport DashboardSettingsService, { DashboardSettings } from './dashboard-settings-service';\r\nimport DashboardTemplateService from '../dashboard-templates/dashboard-template-service';\r\nimport DashboardPreviewService from './dashboard-preview-service';\r\nimport { createDefaultLayoutItems, buildLayoutItemsFromTemplate } from './widget-registry';\r\n\r\n@autoinject\r\nexport class DashboardWidgets {\r\n private readonly VM_READY_TIMEOUT_MS = 5000;\r\n\r\n gridEl: HTMLElement;\r\n layoutItems: WidgetLayoutItem[] = [];\r\n\r\n private gridStack: GridStack;\r\n private queue: PromiseQueue;\r\n private settings: DashboardSettings;\r\n private settingsPromise: Promise;\r\n\r\n constructor(\r\n private securityService: SecurityService,\r\n private settingsService: DashboardSettingsService,\r\n private templateService: DashboardTemplateService,\r\n private previewService: DashboardPreviewService,\r\n private logger: Logger,\r\n ) {\r\n this.logger.name = 'dashboard-widgets';\r\n }\r\n\r\n async activate(params: unknown, routeConfig?: { name?: string }) {\r\n this.settingsPromise = this.settingsService.getSettings(); // fire, don't await — page paints while this fetches\r\n\r\n // Only the dedicated preview route ever consults pending preview state - a plain\r\n // dashboard-widgets visit always resolves normally, even if a preview was never cleared.\r\n const previewWidgets =\r\n routeConfig?.name === 'dashboard-widgets-preview'\r\n ? this.previewService.takePendingPreview()\r\n : null;\r\n\r\n // Awaited (unlike settings) because attached() reads layoutItems synchronously to set the\r\n // initial gs-x/gs-y/gs-w/gs-h attributes before GridStack.init() runs.\r\n const templateWidgets =\r\n previewWidgets ?? (await this.templateService.getCurrentTemplateWidgets());\r\n this.layoutItems = templateWidgets\r\n ? buildLayoutItemsFromTemplate(templateWidgets)\r\n : createDefaultLayoutItems();\r\n\r\n // Filter out widgets the user doesn't have access to view. The org's application-module\r\n // flag takes precedence over the user's own permission grant, since per-user view\r\n // permissions aren't reliably configured by admins in practice.\r\n this.layoutItems = this.layoutItems.filter(\r\n (item) =>\r\n (!item.requiredApplicationModule ||\r\n this.securityService.hasApplicationModule(item.requiredApplicationModule)) &&\r\n (!item.requiredPermission ||\r\n this.securityService.hasPermission(item.requiredPermission)),\r\n );\r\n\r\n this.layoutItems.forEach((item) => {\r\n item.vmReady = new Promise((resolve) => (item.vmReadyResolve = resolve));\r\n item.reload = () => this.loadWidget(item);\r\n });\r\n }\r\n\r\n async attached() {\r\n this.gridEl.querySelectorAll('.grid-stack-item').forEach((el, i) => {\r\n const item = this.layoutItems[i];\r\n el.setAttribute('gs-id', item.id);\r\n el.setAttribute('gs-x', String(item.x));\r\n el.setAttribute('gs-y', String(item.y));\r\n el.setAttribute('gs-w', String(item.w));\r\n el.setAttribute('gs-h', String(item.h));\r\n });\r\n\r\n this.gridStack = GridStack.init(buildGridOptions(), this.gridEl);\r\n\r\n this.settings = await this.settingsPromise;\r\n this.queue = new PromiseQueue(this.settings.maxConcurrentWidgetLoads);\r\n this.layoutItems.forEach((item) => this.loadWidget(item));\r\n }\r\n\r\n detached() {\r\n this.gridStack?.destroy(false);\r\n }\r\n\r\n loadWidget(item: WidgetLayoutItem) {\r\n item.state = 'pending';\r\n const enqueuedAt = performance.now();\r\n let startedAt = enqueuedAt;\r\n this.queue\r\n .enqueue(async () => {\r\n startedAt = performance.now();\r\n item.state = 'loading';\r\n await this.vmReadyOrTimeout(item);\r\n await item.contentVm.loadData();\r\n })\r\n .then(() => {\r\n item.state = 'loaded';\r\n if (this.settings.enableWidgetLoadTimingLogs) {\r\n this.logger.info(\r\n 'Dashboard widget loaded.',\r\n this.loadTimings(item, enqueuedAt, startedAt),\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n item.state = 'error';\r\n this.logger.error(\r\n `Error loading dashboard widget '${item.id}'.`,\r\n error,\r\n this.loadTimings(item, enqueuedAt, startedAt),\r\n );\r\n });\r\n }\r\n\r\n retryWidget(item: WidgetLayoutItem) {\r\n this.loadWidget(item);\r\n }\r\n\r\n private vmReadyOrTimeout(item: WidgetLayoutItem): Promise {\r\n return new Promise((resolve, reject) => {\r\n const timeoutId = setTimeout(\r\n () =>\r\n reject(\r\n new Error(\r\n `Widget '${item.id}' (module: ${item.moduleId}) did not compose within ${this.VM_READY_TIMEOUT_MS}ms`,\r\n ),\r\n ),\r\n this.VM_READY_TIMEOUT_MS,\r\n );\r\n\r\n item.vmReady.then(() => {\r\n clearTimeout(timeoutId);\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n private loadTimings(item: WidgetLayoutItem, enqueuedAt: number, startedAt: number) {\r\n return {\r\n widgetId: item.id,\r\n queueWaitMs: Math.round(startedAt - enqueuedAt),\r\n loadMs: Math.round(performance.now() - startedAt),\r\n };\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".dashboard-widgets .grid-stack-item-content{border:1px solid #d5d5d6;background-color:#fff}.dashboard-widgets .grid-stack-item-content>widget-shell{display:flex;flex-direction:column;height:100%}.dashboard-widgets .widget-shell-header{display:flex;align-items:center;justify-content:space-between;gap:0.5rem;padding:0.5rem 0.75rem;border-bottom:1px solid #d5d5d6}.dashboard-widgets .widget-shell-header .widget-shell-title-group{flex:1;min-width:0}.dashboard-widgets .widget-shell-header .widget-shell-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-bottom:0;font-family:'Raleway';font-weight:300;font-size:1.2rem;color:#2e2e2e}.dashboard-widgets .widget-shell-header .widget-shell-filter-caption{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:0.75rem;color:#55565a}.dashboard-widgets .widget-shell-header .widget-shell-filter{border:none;background:transparent;color:#55565a;font-size:1rem;padding:0.25rem;border-radius:3px;cursor:pointer}.dashboard-widgets .widget-shell-header .widget-shell-filter:hover{color:#2e2e2e;background-color:#d5d5d6}.dashboard-widgets .widget-shell-header .widget-shell-filter.is-open{color:#cc2350;background-color:rgba(204,35,80,0.1)}.dashboard-widgets .widget-shell-body{position:relative;flex:1;min-height:0;overflow-y:auto}.dashboard-widgets .widget-shell-loading,.dashboard-widgets .widget-shell-error{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.5rem;background-color:#fff}.dashboard-widgets .widget-shell-error .button{margin-bottom:0;font-size:0.8125rem;padding:0.5em 1.25em}.dashboard-widgets .widget-shell-content{height:100%;padding:0.5rem 0.75rem}.dashboard-widgets .tasks{padding-top:0.25rem}.dashboard-widgets .tasks .row .column{border-right:none;padding-bottom:0.75rem;font-size:0.75rem}.dashboard-widgets .tasks .view-all-link{align-self:center;display:inline-flex;align-items:center;gap:0.35rem;width:auto;height:auto;margin:0 0 0.25rem;padding:0.35rem 0.75rem;border:1px solid #8f1838;border-radius:4px;background-color:transparent;color:#8f1838;font-weight:bold;font-size:0.75rem;line-height:normal;font-family:inherit;text-decoration:none;transition:background-color 0.15s ease-in-out,\\r color 0.15s ease-in-out}.dashboard-widgets .tasks .view-all-link:hover{background-color:#8f1838;color:#fff}.dashboard-widgets .tasks .view-all-link .fa{font-size:0.8125rem}.dashboard-widgets .tasks .widget-search{display:flex;gap:0.35rem;margin-bottom:0.5rem;flex-shrink:0}.dashboard-widgets .tasks .widget-search input[type='text']{flex:1;width:auto;height:auto;padding:0.4rem 0.6rem;margin:0;font-size:0.8125rem;border-radius:4px}.dashboard-widgets .tasks .widget-search button{flex-shrink:0;width:auto;height:auto;margin:0;padding:0.4rem 0.75rem;border:1px solid #8f1838;border-radius:4px;background-color:transparent;color:#8f1838;cursor:pointer;transition:background-color 0.15s ease-in-out,\\r color 0.15s ease-in-out}.dashboard-widgets .tasks .widget-search button:hover{background-color:#8f1838;color:#fff}.dashboard-widgets .tasks .widget-search button.clear{border-color:transparent;color:#55565a}.dashboard-widgets .tasks .widget-search button.clear:hover{background-color:#d5d5d6;color:#2e2e2e}.dashboard-widgets .widget-compact .tasks strong{display:block;margin:0 auto 0.25rem}.dashboard-widgets .widget-compact .tasks .row .column{text-align:center}.dashboard-widgets .widget-compact .tasks .row .column.stat-filter{flex-direction:column;gap:0.25rem;padding-left:0.25rem;padding-right:0.25rem;text-align:center}.dashboard-widgets .widget-compact .tasks .row .column.stat-filter span{font-size:0.6875rem;line-height:1.2}.dashboard-widgets .widget-compact .tasks .data-options{display:flex}.dashboard-widgets .widget-compact .tasks .data-options button{flex:1 1 0;min-width:0;max-width:6rem;height:auto;top:0;padding:0 0.125rem;text-align:center}.dashboard-widgets .widget-compact .tasks .data-options button .fa{position:static;display:block;float:none;width:auto;height:auto;margin:0 0 0.125rem;line-height:1}.dashboard-widgets .widget-filter-panel{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;display:flex;flex-direction:column;background-color:#fff;padding:0.75rem;overflow-y:auto}.dashboard-widgets .widget-filter-panel .widget-filter-panel-controls{flex:1}.dashboard-widgets .widget-filter-panel .widget-filter-panel-actions{display:flex;gap:0.5rem;justify-content:flex-end}.dashboard-widgets .widget-filter-panel .widget-filter-panel-actions .button{margin-bottom:0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { bindable, bindingMode } from 'aurelia-framework';\r\n\r\nexport class WidgetFilterPanel {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) open = false;\r\n @bindable apply: () => void;\r\n @bindable reset: () => void;\r\n // Optional — widgets that don't need to gate Apply just omit this binding (defaults to true).\r\n @bindable canApply = true;\r\n\r\n applyFilters() {\r\n this.open = false;\r\n this.apply();\r\n }\r\n\r\n resetFilters() {\r\n this.open = false;\r\n this.reset();\r\n }\r\n\r\n cancel() {\r\n this.open = false;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { GridStack, GridStackWidget } from 'gridstack';\r\nimport { bindable } from 'aurelia-framework';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport { buildGridOptions } from '../grid-config';\r\nimport { createDefaultLayoutItems } from '../widget-registry';\r\nimport {\r\n WidgetCatalogEntry,\r\n WidgetLayoutEditorItem,\r\n WidgetPlacement,\r\n} from './widget-layout-editor-item';\r\n\r\n// The full set of known widget types, sourced from the same registry the live dashboard uses -\r\n// only id/title/default size matter here, since position is decided by where it lands on the\r\n// canvas, not by the live dashboard's hardcoded fallback layout.\r\nconst WIDGET_CATALOG: WidgetCatalogEntry[] = createDefaultLayoutItems().map((item) => ({\r\n id: item.id,\r\n title: item.title,\r\n w: item.w,\r\n h: item.h,\r\n}));\r\n\r\nexport class WidgetLayoutEditor {\r\n @bindable items: WidgetLayoutEditorItem[] = [];\r\n\r\n gridEl: HTMLElement;\r\n catalogOptions: SelectorOption[] = [];\r\n selectedCatalogWidgetId = '';\r\n\r\n private gridStack: GridStack;\r\n private placedWidgetIds: string[] = [];\r\n\r\n attached() {\r\n this.gridStack = GridStack.init(buildGridOptions({ staticGrid: false }), this.gridEl);\r\n\r\n this.gridEl.addEventListener('click', (event) => {\r\n const button = (event.target as HTMLElement).closest(\r\n '.widget-layout-editor-tile-delete',\r\n );\r\n if (!button) return;\r\n\r\n const id = button.closest('.grid-stack-item')?.getAttribute('gs-id');\r\n if (id) this.deleteWidget(id);\r\n });\r\n\r\n this.itemsChanged();\r\n }\r\n\r\n detached() {\r\n this.gridStack?.destroy(false);\r\n }\r\n\r\n itemsChanged() {\r\n if (!this.gridStack) return; // fires once before attached() sets it up too; ignore that one\r\n\r\n this.gridStack.load(\r\n this.items.map((item) => ({\r\n id: item.id,\r\n x: item.x,\r\n y: item.y,\r\n w: item.w,\r\n h: item.h,\r\n content: this.tileContent(item.title),\r\n })),\r\n );\r\n\r\n this.placedWidgetIds = this.items.map((item) => item.id);\r\n this.buildCatalogOptions();\r\n }\r\n\r\n addSelectedWidget() {\r\n if (!this.selectedCatalogWidgetId) return;\r\n\r\n const entry = WIDGET_CATALOG.find((w) => w.id === this.selectedCatalogWidgetId);\r\n\r\n this.gridStack.addWidget({\r\n id: entry.id,\r\n w: entry.w,\r\n h: entry.h,\r\n autoPosition: true,\r\n content: this.tileContent(entry.title),\r\n });\r\n\r\n this.placedWidgetIds = [...this.placedWidgetIds, entry.id];\r\n this.buildCatalogOptions();\r\n this.selectedCatalogWidgetId = '';\r\n }\r\n\r\n private tileContent(title: string): string {\r\n return `
\r\n ${title}\r\n \r\n
`;\r\n }\r\n\r\n deleteWidget(id: string) {\r\n const el = this.gridEl.querySelector(`[gs-id=\"${id}\"]`);\r\n if (!el) return;\r\n\r\n this.gridStack.removeWidget(el);\r\n\r\n this.placedWidgetIds = this.placedWidgetIds.filter((placedId) => placedId !== id);\r\n this.buildCatalogOptions();\r\n }\r\n\r\n getConfiguredWidgets(): WidgetPlacement[] {\r\n return (this.gridStack.save(false) as GridStackWidget[]).map((node) => ({\r\n id: node.id as string,\r\n x: node.x,\r\n y: node.y,\r\n w: node.w,\r\n h: node.h,\r\n }));\r\n }\r\n\r\n private buildCatalogOptions() {\r\n this.catalogOptions = WIDGET_CATALOG.filter(\r\n (w) => !this.placedWidgetIds.includes(w.id),\r\n ).map((w) => ({ title: w.title, value: w.id }));\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".widget-layout-editor .widget-layout-editor-toolbar{display:flex;align-items:flex-end;gap:0.75rem;margin-bottom:1rem}.widget-layout-editor .widget-layout-editor-toolbar button{margin-bottom:0}.widget-layout-editor .widget-layout-editor-toolbar-select{flex:1;max-width:20rem}.widget-layout-editor .widget-layout-editor-toolbar-select .select2-container{margin-bottom:0}.widget-layout-editor .grid-stack{border:1px dashed #d5d5d6;border-radius:4px;background-color:#fafafa}.widget-layout-editor .grid-stack-item-content{border:1px solid #d5d5d6;background-color:#fff;cursor:move}.widget-layout-editor .widget-layout-editor-tile-header{display:flex;align-items:center;justify-content:space-between;padding:0.5rem 0.75rem;border-bottom:1px solid #d5d5d6;font-family:'Raleway';font-weight:300;font-size:1.2rem;color:#2e2e2e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.widget-layout-editor .widget-layout-editor-tile-header button{margin-bottom:0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { bindable, bindingMode } from 'aurelia-framework';\r\nimport { WidgetState } from './widget-state';\r\nimport { WidgetDisplayMode } from './widget-display-mode';\r\n\r\nexport class WidgetShell {\r\n @bindable header: string;\r\n @bindable filterCaption: string;\r\n @bindable state: WidgetState;\r\n @bindable retry: () => void;\r\n @bindable filterable = false;\r\n @bindable compactMaxWidth: number;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) filtersOpen = false;\r\n\r\n bodyEl: HTMLElement;\r\n displayMode: WidgetDisplayMode = 'full';\r\n private readonly defaultCompactMaxWidth = 640;\r\n private resizeObserver: ResizeObserver;\r\n private pendingFrame: number;\r\n\r\n attached() {\r\n // Switching mode re-lays out the body, which resizes it again. Applying the change on\r\n // the next frame (outside the observer callback) avoids the browser's\r\n // \"ResizeObserver loop completed with undelivered notifications\" error.\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n const width = entries[0].contentRect.width;\r\n cancelAnimationFrame(this.pendingFrame);\r\n this.pendingFrame = requestAnimationFrame(() => this.updateDisplayMode(width));\r\n });\r\n this.resizeObserver.observe(this.bodyEl);\r\n }\r\n\r\n detached() {\r\n cancelAnimationFrame(this.pendingFrame);\r\n this.resizeObserver.disconnect();\r\n }\r\n\r\n toggleFilters() {\r\n this.filtersOpen = !this.filtersOpen;\r\n }\r\n\r\n private updateDisplayMode(width: number) {\r\n const threshold = this.compactMaxWidth ?? this.defaultCompactMaxWidth;\r\n this.displayMode = width < threshold ? 'compact' : 'full';\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport RemediationService from 'location-testing/remediations/remediation-service';\r\nimport { RemediationCounts } from 'location-testing/remediations/remediation-counts';\r\nimport { RemediationSummary } from 'location-testing/remediations/remediation-summary';\r\nimport Organization from 'organizations/organization';\r\nimport RecordStatus from 'record-status';\r\nimport SecurityService from 'security/security-service';\r\nimport UserService from 'users/user-service';\r\nimport { DashboardWidget } from '../dashboard-widget';\r\nimport { DashboardWidgetsQueryFilters } from '../dashboard-widgets-query-filters';\r\nimport { WidgetLayoutItem } from '../widget-layout-item';\r\nimport { RemediationStatFilter, STATUS_CODES, statusCodesFor } from './remediation-stat-filters';\r\n\r\n@autoinject\r\nexport class MyRemediationsWidget implements DashboardWidget {\r\n queryFilters: DashboardWidgetsQueryFilters;\r\n item: WidgetLayoutItem;\r\n\r\n organizations: Organization[];\r\n hasLoaded = false;\r\n counts: RemediationCounts;\r\n allRemediations: RemediationSummary[];\r\n remediations: RemediationSummary[];\r\n activeStatFilter: RemediationStatFilter | null = null;\r\n sortParam = { active: 'createDateTime', direction: 'asc' };\r\n search = '';\r\n\r\n constructor(\r\n private remediationService: RemediationService,\r\n private userService: UserService,\r\n private securityService: SecurityService,\r\n private router: Router,\r\n ) {}\r\n\r\n activate(item: WidgetLayoutItem) {\r\n this.item = item;\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n this.queryFilters = new DashboardWidgetsQueryFilters(\r\n item.id,\r\n 'today',\r\n false,\r\n false,\r\n organizationId ? [organizationId] : [],\r\n );\r\n item.contentVm = this;\r\n item.vmReadyResolve();\r\n }\r\n\r\n async loadData(): Promise {\r\n if (!this.organizations) {\r\n this.organizations = await this.userService.getCurrentUserOrganizations();\r\n }\r\n\r\n this.activeStatFilter = null;\r\n\r\n const { organizationIds } = this.queryFilters.getQueryParams();\r\n const statuses = this.remediationService.getRemediationStatuses();\r\n const statusIds = Object.values(STATUS_CODES).map(\r\n (code) => statuses.find((s) => s.code === code).id,\r\n );\r\n\r\n const [counts, remediations] = await Promise.all([\r\n this.remediationService.getRemediationCounts(organizationIds, true) as unknown as Promise<\r\n RemediationCounts\r\n >,\r\n this.remediationService.getRemediations(\r\n {\r\n organizationIds,\r\n onlyAssignedToMe: true,\r\n remediationStatusIds: statusIds,\r\n search: this.search,\r\n },\r\n 'summary',\r\n RecordStatus.ACTIVE,\r\n ) as unknown as Promise,\r\n ]);\r\n this.counts = counts;\r\n this.allRemediations = remediations;\r\n\r\n this.item.filterCaption = this.queryFilters.buildFilterSummary();\r\n\r\n this.applyStatFilter();\r\n\r\n this.hasLoaded = true;\r\n }\r\n\r\n applyFilters() {\r\n this.item.reload();\r\n }\r\n\r\n resetFilters() {\r\n this.queryFilters.reset();\r\n this.search = '';\r\n this.applyFilters();\r\n }\r\n\r\n runSearch() {\r\n this.item.reload();\r\n }\r\n\r\n clearSearch() {\r\n this.search = '';\r\n this.runSearch();\r\n }\r\n\r\n toggleStatFilter(filter: RemediationStatFilter) {\r\n this.activeStatFilter = this.activeStatFilter === filter ? null : filter;\r\n this.applyStatFilter();\r\n }\r\n\r\n toggleSort(key: string) {\r\n this.sortParam.direction =\r\n this.sortParam.active === key && this.sortParam.direction === 'asc' ? 'desc' : 'asc';\r\n this.sortParam.active = key;\r\n this.sortRemediations();\r\n }\r\n\r\n private applyStatFilter() {\r\n const statusCodes = statusCodesFor(this.activeStatFilter);\r\n this.remediations = this.allRemediations.filter((r) => statusCodes.includes(r.status));\r\n\r\n this.sortRemediations();\r\n }\r\n\r\n private sortRemediations() {\r\n const { active, direction } = this.sortParam;\r\n this.remediations = [...this.remediations].sort((a, b) => {\r\n const aValue = String((a as any)[active] ?? '').toLowerCase();\r\n const bValue = String((b as any)[active] ?? '').toLowerCase();\r\n if (aValue === bValue) return 0;\r\n if (direction === 'asc') return aValue > bValue ? 1 : -1;\r\n return aValue > bValue ? -1 : 1;\r\n });\r\n }\r\n\r\n remediationDetailUrl(remediation: RemediationSummary): string {\r\n return this.router.generate('remediation-detail', {\r\n id: remediation.id,\r\n // Lets the detail page's \"Back to...\" button return here instead of always\r\n // landing on the main Remediation List.\r\n returnUrl: this.router.generate('dashboard-widgets'),\r\n returnLabel: 'Dashboard',\r\n });\r\n }\r\n\r\n get viewAllUrl(): string {\r\n const statusCodes = statusCodesFor(this.activeStatFilter);\r\n const statuses = this.remediationService.getRemediationStatuses();\r\n\r\n return this.router.generate('remediation-list', {\r\n onlyAssignedToMe: true,\r\n remediationStatusIds: statusCodes.map((code) => statuses.find((s) => s.code === code).id),\r\n returnUrl: this.router.generate('dashboard-widgets'),\r\n returnLabel: 'Dashboard',\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".my-remediations-widget{height:100%;display:flex;flex-direction:column}.my-remediations-widget .my-remediations-table-wrapper{flex:1;min-height:0;overflow-y:auto}.my-remediations-widget .row.small-up-5 .column{display:flex;align-items:center;justify-content:center;gap:0.5rem;text-align:left}.my-remediations-widget .row.small-up-5 .column strong{margin:0;flex-shrink:0}.my-remediations-widget .stat-filter{cursor:pointer;border-radius:4px;padding-top:0.5rem;padding-bottom:0.5rem;transition:background-color 0.15s ease-in-out}.my-remediations-widget .stat-filter:hover{background-color:rgba(0,0,0,0.05)}.my-remediations-widget .stat-filter.active{background-color:rgba(143,24,56,0.1)}.my-remediations-widget .stat-filter.active span{font-weight:bold}.my-remediations-widget .my-remediations-table{margin-top:1rem;margin-bottom:0}.my-remediations-widget .my-remediations-table th,.my-remediations-widget .my-remediations-table td{padding:0.5rem !important}.my-remediations-widget .my-remediations-table th:first-child,.my-remediations-widget .my-remediations-table td:first-child{padding-left:0.5rem !important}.my-remediations-widget .my-remediations-table th:last-child,.my-remediations-widget .my-remediations-table td:last-child{padding-right:0.5rem !important}.my-remediations-widget .my-remediations-table a{font-weight:normal;font-size:inherit;color:#8f1838;width:auto;height:auto;border-radius:0;border:none;display:inline;margin:0;line-height:inherit;font-family:inherit}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport LabelTemplateService from 'label-templates/label-template-service';\r\nimport MapService from 'location-testing/maps/map-service';\r\nimport MapSummary from 'location-testing/maps/map-summary';\r\nimport MapSummaryConverter from 'location-testing/maps/map-summary-converter';\r\nimport PlanService from 'location-testing/plans/plan-service';\r\nimport PlanSummary from 'location-testing/plans/plan-summary';\r\nimport PlanSummaryConverter from 'location-testing/plans/plan-summary-converter';\r\nimport operationsTimingOptions from 'location-testing/operations-timing-options';\r\nimport { TaskListQuery } from 'location-testing/tasks/task-list-query-filters';\r\nimport { TaskRequestSubmissionService } from 'location-testing/tasks/task-request-submission-service';\r\nimport TaskService from 'location-testing/tasks/task-service';\r\nimport { TaskStatusUpdateService } from 'location-testing/tasks/task-status-update-service';\r\nimport { describeOnScreenOrder } from 'location-testing/tasks/task-order';\r\nimport { TaskOrderPreferenceService } from 'location-testing/tasks/task-order-preference-service';\r\nimport { TaskSummary } from 'location-testing/tasks/task-summary';\r\nimport Organization from 'organizations/organization';\r\nimport RecordStatus from 'record-status';\r\nimport SecurityService from 'security/security-service';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport UserService from 'users/user-service';\r\nimport { DashboardWidget } from '../dashboard-widget';\r\nimport { DashboardWidgetsQueryFilters } from '../dashboard-widgets-query-filters';\r\nimport { WidgetLayoutItem } from '../widget-layout-item';\r\n\r\ninterface MyTaskRow extends TaskSummary {\r\n selected?: boolean;\r\n}\r\n\r\ntype MyTaskStatFilter = 'upcoming' | 'awaitingSubmission' | 'submitted';\r\n\r\n// Column headers for the sort keys, used to describe the on-screen order.\r\nconst SORT_COLUMN_LABELS: Record = {\r\n planName: 'Plan',\r\n operationsTiming: 'Operations Timing',\r\n status: 'Status',\r\n targetDateTime: 'Due Date',\r\n};\r\n\r\n@autoinject\r\nexport class MyTasksWidget implements DashboardWidget {\r\n queryFilters: DashboardWidgetsQueryFilters;\r\n item: WidgetLayoutItem;\r\n\r\n organizations: Organization[];\r\n canEditTasks: boolean;\r\n canFilterByMapPlan: boolean;\r\n mapSelectorOptions: SelectorOption[];\r\n planSelectorOptions: SelectorOption[];\r\n hasLoaded = false;\r\n upcomingCount: number;\r\n awaitingSubmissionCount: number;\r\n submittedCount: number;\r\n allTasks: MyTaskRow[];\r\n tasks: MyTaskRow[];\r\n activeStatFilter: MyTaskStatFilter = null;\r\n isUpdatingStatus = false;\r\n isExportingCsv = false;\r\n canExportLabelsPdf: boolean;\r\n hasSelectedTasks = false;\r\n allSelected = false;\r\n sortParam = { active: 'targetDateTime', direction: 'asc' };\r\n search = '';\r\n\r\n constructor(\r\n private taskService: TaskService,\r\n private userService: UserService,\r\n private mapService: MapService,\r\n private planService: PlanService,\r\n private securityService: SecurityService,\r\n private router: Router,\r\n private dialogPresenter: DialogPresenter,\r\n private taskStatusUpdateService: TaskStatusUpdateService,\r\n private taskRequestSubmissionService: TaskRequestSubmissionService,\r\n private taskOrderPreferenceService: TaskOrderPreferenceService,\r\n private labelTemplateService: LabelTemplateService,\r\n ) {}\r\n\r\n activate(item: WidgetLayoutItem) {\r\n this.item = item;\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n this.queryFilters = new DashboardWidgetsQueryFilters(\r\n item.id,\r\n 'allTime',\r\n true,\r\n false,\r\n organizationId ? [organizationId] : [],\r\n );\r\n this.canEditTasks =\r\n this.securityService.hasPermission('EditTasks') &&\r\n !this.securityService.isImpersonating();\r\n item.contentVm = this;\r\n item.vmReadyResolve();\r\n }\r\n\r\n async loadData(): Promise {\r\n if (!this.organizations) {\r\n this.organizations = await this.userService.getCurrentUserOrganizations();\r\n }\r\n\r\n if (this.canExportLabelsPdf === undefined) {\r\n // No task label templates means nothing to pick in the PDF dialog, so the button is\r\n // disabled with a tooltip explaining why.\r\n const taskLabelTemplates = await this.labelTemplateService.getLabelTemplates(\r\n { type: 'Task' },\r\n 'Selector',\r\n );\r\n this.canExportLabelsPdf = taskLabelTemplates.length !== 0;\r\n }\r\n\r\n if (!this.mapSelectorOptions) {\r\n this.canFilterByMapPlan =\r\n this.securityService.hasPermission('ViewMaps') &&\r\n this.securityService.hasPermission('ViewPlans');\r\n\r\n if (this.canFilterByMapPlan) {\r\n const maps = (await this.mapService.getMaps([])) as unknown as MapSummary[];\r\n const mapIds = maps.map((m) => m.id);\r\n const plans =\r\n mapIds.length > 0\r\n ? ((await this.planService.getPlans(mapIds)) as unknown as PlanSummary[])\r\n : [];\r\n\r\n this.mapSelectorOptions = MapSummaryConverter.toSelectorOptions(maps);\r\n this.planSelectorOptions = PlanSummaryConverter.toSelectorOptions(plans, maps);\r\n } else {\r\n this.mapSelectorOptions = [];\r\n this.planSelectorOptions = [];\r\n }\r\n }\r\n\r\n const { organizationIds, mapIds, planIds, targetStartDate, targetEndDate } =\r\n this.queryFilters.getQueryParams();\r\n const tasks = (await this.taskService.getTasks(\r\n {\r\n organizationIds,\r\n mapIds,\r\n planIds,\r\n targetStartDate,\r\n targetEndDate,\r\n onlyAssignedToMe: true,\r\n recordStatus: RecordStatus.ACTIVE,\r\n search: this.search,\r\n },\r\n 'summary',\r\n )) as unknown as TaskSummary[];\r\n\r\n this.upcomingCount = tasks.filter((t) => this.isUpcoming(t)).length;\r\n this.awaitingSubmissionCount = tasks.filter((t) => this.isAwaitingSubmission(t)).length;\r\n this.submittedCount = tasks.filter((t) => this.isSubmitted(t)).length;\r\n\r\n this.allTasks = tasks;\r\n\r\n this.item.filterCaption = this.queryFilters.buildFilterSummary({\r\n includeDateRange: true,\r\n includeMapPlan: this.canFilterByMapPlan,\r\n });\r\n\r\n this.applyStatFilter();\r\n\r\n this.hasSelectedTasks = false;\r\n this.allSelected = false;\r\n this.hasLoaded = true;\r\n }\r\n\r\n applyFilters() {\r\n this.queryFilters.dateRangeQueryFilters.persistCurrentSelection();\r\n this.item.reload();\r\n }\r\n\r\n resetFilters() {\r\n this.queryFilters.reset();\r\n this.search = '';\r\n this.applyFilters();\r\n }\r\n\r\n runSearch() {\r\n this.item.reload();\r\n }\r\n\r\n clearSearch() {\r\n this.search = '';\r\n this.runSearch();\r\n }\r\n\r\n updateSelectionState() {\r\n this.hasSelectedTasks = this.tasks?.some((t) => t.selected) ?? false;\r\n this.allSelected = this.tasks?.length > 0 && this.tasks.every((t) => t.selected);\r\n }\r\n\r\n toggleSelectAll() {\r\n this.tasks.forEach((t) => (t.selected = this.allSelected));\r\n this.updateSelectionState();\r\n }\r\n\r\n toggleStatFilter(filter: MyTaskStatFilter) {\r\n this.activeStatFilter = this.activeStatFilter === filter ? null : filter;\r\n this.allTasks.forEach((t) => (t.selected = false));\r\n this.applyStatFilter();\r\n this.updateSelectionState();\r\n }\r\n\r\n private applyStatFilter() {\r\n this.tasks = this.allTasks.filter((t) => this.matchesStatFilter(t));\r\n this.sortTasks();\r\n }\r\n\r\n private matchesStatFilter(t: TaskSummary): boolean {\r\n switch (this.activeStatFilter) {\r\n case 'upcoming':\r\n return this.isUpcoming(t);\r\n case 'awaitingSubmission':\r\n return this.isAwaitingSubmission(t);\r\n case 'submitted':\r\n return this.isSubmitted(t);\r\n default:\r\n // The unfiltered list stays the open work list - already-submitted tasks only\r\n // show up through the Submitted tile.\r\n return this.isUpcoming(t) || this.isAwaitingSubmission(t);\r\n }\r\n }\r\n\r\n private isUpcoming(t: TaskSummary): boolean {\r\n return t.status === 'NotStarted' || t.status === 'InProgress';\r\n }\r\n\r\n private isAwaitingSubmission(t: TaskSummary): boolean {\r\n return t.status === 'Completed' && !t.sampleId;\r\n }\r\n\r\n private isSubmitted(t: TaskSummary): boolean {\r\n return !!t.sampleId;\r\n }\r\n\r\n toggleSort(key: string) {\r\n this.sortParam.direction =\r\n this.sortParam.active === key && this.sortParam.direction === 'asc' ? 'desc' : 'asc';\r\n this.sortParam.active = key;\r\n this.sortTasks();\r\n }\r\n\r\n private sortTasks() {\r\n const { active, direction } = this.sortParam;\r\n this.tasks = [...this.tasks].sort((a, b) => {\r\n const aValue = String((a as any)[active] ?? '').toLowerCase();\r\n const bValue = String((b as any)[active] ?? '').toLowerCase();\r\n if (aValue === bValue) return 0;\r\n if (direction === 'asc') return aValue > bValue ? 1 : -1;\r\n return aValue > bValue ? -1 : 1;\r\n });\r\n }\r\n\r\n async updateStatus(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const result = await this.taskStatusUpdateService.selectStatus(selectedTasks);\r\n if (result.cancelled) {\r\n return;\r\n }\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Update Tasks Status',\r\n `Are you sure you want to set the selected tasks to ${result.statusInfo.statusName}?`,\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n this.isUpdatingStatus = true;\r\n try {\r\n const taskIds = result.tasks.map((t) => t.id);\r\n await this.taskService.updateTaskStatus(\r\n taskIds,\r\n result.statusInfo.statusId,\r\n result.statusInfo.collectedDateTime,\r\n result.statusInfo.comments,\r\n );\r\n this.item.reload();\r\n } catch {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Setting Status',\r\n 'An unexpected error occurred while trying to update the tasks. Please try again later.',\r\n );\r\n } finally {\r\n this.isUpdatingStatus = false;\r\n }\r\n }\r\n\r\n async submitRequest(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n await this.taskRequestSubmissionService.submitRequest(selectedTasks, this.orderCaption);\r\n }\r\n\r\n // this.tasks is already in table order, so selected tasks are sent in on-screen order.\r\n private get orderCaption(): string {\r\n return describeOnScreenOrder(\r\n 'My Tasks',\r\n SORT_COLUMN_LABELS[this.sortParam.active],\r\n this.sortParam.direction,\r\n );\r\n }\r\n\r\n private get preserveOrder(): boolean {\r\n return this.taskOrderPreferenceService.get() === 'onScreen';\r\n }\r\n\r\n async exportLabelsCsv(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const taskIds = selectedTasks.map((t) => t.id);\r\n const exportableFields = (await this.taskService.getExportableLabelsCsvFields(\r\n taskIds,\r\n )) as any;\r\n const orgDefaultFields = JSON.parse(exportableFields.selected);\r\n\r\n const fieldSelection = (await this.dialogPresenter.showExportableFieldSelector(\r\n 'Select fields to be included with the export',\r\n exportableFields.all,\r\n orgDefaultFields,\r\n this.orderCaption,\r\n )) as any;\r\n if (!fieldSelection || fieldSelection.wasCancelled) {\r\n return;\r\n }\r\n\r\n this.isExportingCsv = true;\r\n try {\r\n const response = await this.taskService.exportLabelsCsv(\r\n taskIds,\r\n fieldSelection.output,\r\n this.preserveOrder,\r\n );\r\n const blob = new Blob([response as any], { type: 'text/csv' });\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = blobUrl;\r\n const dateString = new Date().toISOString().replace(/[-:.Z]/g, '');\r\n link.download = `tasks_${dateString}.csv`;\r\n link.click();\r\n } catch {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Exporting Labels CSV',\r\n 'An unexpected error occurred while trying to export labels CSV. Please try again later.',\r\n );\r\n } finally {\r\n this.isExportingCsv = false;\r\n }\r\n }\r\n\r\n async exportLabelsPdf(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const organizationIds = [...new Set(selectedTasks.map((t) => t.organizationId))];\r\n if (organizationIds.length > 1) {\r\n await this.dialogPresenter.showAlert(\r\n 'Cannot Export Labels PDF',\r\n 'There are tasks from more than one organization selected. Please ensure that tasks from a single organization are selected.',\r\n );\r\n return;\r\n }\r\n\r\n const labelTemplateSelection = (await this.dialogPresenter.showLabelSelector(\r\n 'Select a task label',\r\n 'Task',\r\n organizationIds[0],\r\n this.orderCaption,\r\n )) as any;\r\n if (!labelTemplateSelection || labelTemplateSelection.wasCancelled) {\r\n return;\r\n }\r\n\r\n const taskIds = selectedTasks.map((t) => t.id);\r\n const url = this.taskService.getTaskLabelPdfUrl(\r\n taskIds,\r\n labelTemplateSelection.output.id,\r\n this.preserveOrder,\r\n );\r\n if (url.length > 4096) {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Exporting Labels PDF',\r\n `The number of tasks (${taskIds.length}) selected is not supported. Please select a lesser (< ~300) amount.`,\r\n );\r\n return;\r\n }\r\n\r\n window.location.href = url;\r\n }\r\n\r\n get viewAllUrl(): string {\r\n const { mapIds, planIds } = this.queryFilters.getQueryParams();\r\n const query: TaskListQuery = {\r\n ...this.taskListDateRangeQuery(),\r\n dateRangeOverride: true,\r\n mapIds,\r\n planIds,\r\n onlyAssignedToMe: true,\r\n };\r\n\r\n // Mirrors matchesStatFilter() so the Task List shows the same tasks as the widget.\r\n if (this.activeStatFilter === 'submitted') {\r\n query.isSubmitted = 'true';\r\n } else {\r\n const statusCodes =\r\n this.activeStatFilter === 'upcoming'\r\n ? ['NotStarted', 'InProgress']\r\n : this.activeStatFilter === 'awaitingSubmission'\r\n ? ['Completed']\r\n : ['NotStarted', 'InProgress', 'Completed'];\r\n const statuses = this.taskService.getTaskStatuses();\r\n query.taskStatusIds = statusCodes.map((code) => statuses.find((s) => s.code === code).id);\r\n query.isSubmitted = 'false';\r\n }\r\n\r\n return this.router.generate('task-list', query);\r\n }\r\n\r\n taskDetailUrl(task: MyTaskRow): string {\r\n return this.router.generate('task-detail', {\r\n id: task.id,\r\n returnUrl: this.router.generate('dashboard-widgets'),\r\n returnLabel: 'Dashboard',\r\n });\r\n }\r\n\r\n operationsTimingCaption(operationsTiming: string): string {\r\n return (\r\n operationsTimingOptions.find((o) => o.value === operationsTiming)?.title ??\r\n operationsTiming\r\n );\r\n }\r\n\r\n statusCaption(status: string): string {\r\n return this.taskService.getTaskStatuses().find((s) => s.code === status)?.name ?? status;\r\n }\r\n\r\n operationsTimingTaskListUrl(task: MyTaskRow): string {\r\n const { mapIds, planIds } = this.queryFilters.getQueryParams();\r\n const query: TaskListQuery = {\r\n ...this.taskListDateRangeQuery(),\r\n dateRangeOverride: true,\r\n mapIds,\r\n planIds,\r\n operationsTimings: [task.operationsTiming],\r\n onlyAssignedToMe: true,\r\n };\r\n return this.router.generate('task-list', query);\r\n }\r\n\r\n // task-list's own DateRangeQueryFilter has no 'allTime' option (that's opt-in per-widget),\r\n // so translate it to the universally-supported 'custom' + null bounds for the outbound link.\r\n private taskListDateRangeQuery() {\r\n const { dateRangeOption, targetStartDate, targetEndDate } = this.queryFilters.getQueryParams();\r\n return dateRangeOption === 'allTime'\r\n ? { dateRangeOption: 'custom', targetStartDate: null, targetEndDate: null }\r\n : { dateRangeOption, targetStartDate, targetEndDate };\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".my-tasks-widget{height:100%;display:flex;flex-direction:column}.my-tasks-widget .my-tasks-table-wrapper{flex:1;min-height:0;overflow-y:auto}.my-tasks-widget .row.small-up-3 .column{display:flex;align-items:center;justify-content:center;gap:0.5rem;text-align:left}.my-tasks-widget .row.small-up-3 .column strong{margin:0;flex-shrink:0}.my-tasks-widget .stat-filter{cursor:pointer;border-radius:4px;padding-top:0.5rem;padding-bottom:0.5rem;transition:background-color 0.15s ease-in-out}.my-tasks-widget .stat-filter:hover{background-color:rgba(0,0,0,0.05)}.my-tasks-widget .stat-filter.active{background-color:rgba(143,24,56,0.1)}.my-tasks-widget .stat-filter.active span{font-weight:bold}.my-tasks-widget .my-tasks-table{margin-top:1rem;margin-bottom:0}.my-tasks-widget .my-tasks-table th,.my-tasks-widget .my-tasks-table td{padding:0.5rem !important}.my-tasks-widget .my-tasks-table th:first-child,.my-tasks-widget .my-tasks-table td:first-child{padding-left:0.5rem !important}.my-tasks-widget .my-tasks-table th:last-child,.my-tasks-widget .my-tasks-table td:last-child{padding-right:0.5rem !important}.my-tasks-widget .my-tasks-table a{font-weight:normal;font-size:inherit;color:#8f1838;width:auto;height:auto;border-radius:0;border:none;display:inline;margin:0;line-height:inherit;font-family:inherit}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport { PagedList } from 'infrastructure/paged-list';\r\nimport ValidationErrorFormatter from 'infrastructure/validation/validation-error-formatter';\r\nimport { RemediationCounts } from 'location-testing/remediations/remediation-counts';\r\nimport { RemediationSummary } from 'location-testing/remediations/remediation-summary';\r\nimport RemediationService from 'location-testing/remediations/remediation-service';\r\nimport Organization from 'organizations/organization';\r\nimport RecordStatus from 'record-status';\r\nimport SecurityService from 'security/security-service';\r\nimport UserService from 'users/user-service';\r\nimport { DashboardWidget } from '../dashboard-widget';\r\nimport { DashboardWidgetsQueryFilters } from '../dashboard-widgets-query-filters';\r\nimport { WidgetLayoutItem } from '../widget-layout-item';\r\nimport { RemediationStatFilter, statusCodesFor } from './remediation-stat-filters';\r\n\r\ninterface RemediationRow extends RemediationSummary {\r\n selected?: boolean;\r\n}\r\n\r\n@autoinject\r\nexport class RemediationManagementWidget implements DashboardWidget {\r\n queryFilters: DashboardWidgetsQueryFilters;\r\n item: WidgetLayoutItem;\r\n\r\n organizations: Organization[];\r\n hasLoaded = false;\r\n counts: RemediationCounts;\r\n remediations: RemediationRow[];\r\n pageNumber = 1;\r\n pageSize = 25;\r\n pageSizeOptions = [\r\n { value: 5, title: '5' },\r\n { value: 10, title: '10' },\r\n { value: 25, title: '25' },\r\n { value: 50, title: '50' },\r\n { value: 100, title: '100' },\r\n ];\r\n totalCount = 0;\r\n totalPages = 0;\r\n isLoadingPage = false;\r\n activeStatFilter: RemediationStatFilter | null = null;\r\n sortParam = { active: 'createDateTime', direction: 'asc' };\r\n search = '';\r\n canEditRemediations: boolean;\r\n hasSelectedRemediations = false;\r\n isReassigning = false;\r\n\r\n readonly allRemediationStatuses = ['NotStarted', 'InProgress', 'Completed'];\r\n\r\n constructor(\r\n private remediationService: RemediationService,\r\n private userService: UserService,\r\n private securityService: SecurityService,\r\n private router: Router,\r\n private dialogPresenter: DialogPresenter,\r\n ) {}\r\n\r\n activate(item: WidgetLayoutItem) {\r\n this.item = item;\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n this.queryFilters = new DashboardWidgetsQueryFilters(\r\n item.id,\r\n 'today',\r\n false,\r\n false,\r\n organizationId ? [organizationId] : [],\r\n );\r\n this.canEditRemediations =\r\n this.securityService.hasPermission('EditRemediations') &&\r\n !this.securityService.isImpersonating();\r\n\r\n const savedPageSize = Number(localStorage.getItem(this.pageSizeStorageKey));\r\n if (this.pageSizeOptions.some((o) => o.value === savedPageSize)) {\r\n this.pageSize = savedPageSize;\r\n }\r\n\r\n item.contentVm = this;\r\n item.vmReadyResolve();\r\n }\r\n\r\n private get pageSizeStorageKey(): string {\r\n return `page-size.${this.item.id}`;\r\n }\r\n\r\n async loadData(): Promise {\r\n if (!this.organizations) {\r\n this.organizations = await this.userService.getCurrentUserOrganizations();\r\n }\r\n\r\n this.pageNumber = 1;\r\n this.activeStatFilter = null;\r\n\r\n const { organizationIds } = this.queryFilters.getQueryParams();\r\n\r\n const [counts] = await Promise.all([\r\n this.remediationService.getRemediationCounts(organizationIds, false) as unknown as Promise<\r\n RemediationCounts\r\n >,\r\n this.loadRemediationPage(),\r\n ]);\r\n this.counts = counts;\r\n\r\n this.item.filterCaption = this.queryFilters.buildFilterSummary();\r\n\r\n this.hasLoaded = true;\r\n }\r\n\r\n async loadRemediationPage(): Promise {\r\n const { organizationIds } = this.queryFilters.getQueryParams();\r\n const statuses = this.remediationService.getRemediationStatuses();\r\n const statusCodes = statusCodesFor(this.activeStatFilter);\r\n\r\n const pagedResult = (await this.remediationService.getRemediations(\r\n {\r\n organizationIds,\r\n onlyAssignedToMe: false,\r\n remediationStatusIds: statusCodes.map((code) => statuses.find((s) => s.code === code).id),\r\n sortBy: this.sortParam.active,\r\n sortDirection: this.sortParam.direction === 'desc' ? 'Descending' : 'Ascending',\r\n pageNumber: this.pageNumber,\r\n pageSize: this.pageSize,\r\n search: this.search,\r\n },\r\n 'summary',\r\n RecordStatus.ACTIVE,\r\n )) as unknown as PagedList;\r\n\r\n this.remediations = pagedResult.data;\r\n this.totalCount = pagedResult.totalCount;\r\n this.totalPages = pagedResult.totalPages;\r\n this.hasSelectedRemediations = false;\r\n }\r\n\r\n updateSelectionState() {\r\n this.hasSelectedRemediations = this.remediations?.some((r) => r.selected) ?? false;\r\n }\r\n\r\n async reassignRemediations(): Promise {\r\n const selectedRemediations = this.remediations.filter((r) => r.selected);\r\n if (!selectedRemediations.length) {\r\n return;\r\n }\r\n\r\n const result = (await this.dialogPresenter.showUserSelector(\r\n 'Find a user to reassign remediations to',\r\n )) as any;\r\n if (!result || result.wasCancelled) {\r\n return;\r\n }\r\n\r\n const user = result.output;\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Reassign Selected Remediations',\r\n `Are you sure you want to reassign the selected remediations to user ${user.email}?`,\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n this.isReassigning = true;\r\n try {\r\n const ids = selectedRemediations.map((r) => r.id);\r\n await this.remediationService.reassignRemediations(ids, user.id);\r\n this.item.reload();\r\n } catch (error) {\r\n const errorMessage = ValidationErrorFormatter.format(\r\n 'An unexpected error occurred while trying to reassign the remediations. Please try again later.',\r\n error,\r\n );\r\n await this.dialogPresenter.showAlert('Error Reassigning Remediations', errorMessage);\r\n } finally {\r\n this.isReassigning = false;\r\n }\r\n }\r\n\r\n async toggleStatFilter(filter: RemediationStatFilter): Promise {\r\n this.activeStatFilter = this.activeStatFilter === filter ? null : filter;\r\n this.pageNumber = 1;\r\n await this.loadRemediationPageWithSpinner();\r\n }\r\n\r\n async toggleSort(key: string): Promise {\r\n this.sortParam.direction =\r\n this.sortParam.active === key && this.sortParam.direction === 'asc' ? 'desc' : 'asc';\r\n this.sortParam.active = key;\r\n this.pageNumber = 1;\r\n await this.loadRemediationPageWithSpinner();\r\n }\r\n\r\n async goToPage(pageNumber: number): Promise {\r\n if (pageNumber < 1 || pageNumber > this.totalPages || pageNumber === this.pageNumber) {\r\n return;\r\n }\r\n this.pageNumber = pageNumber;\r\n await this.loadRemediationPageWithSpinner();\r\n }\r\n\r\n async changePageSize(pageSize: number): Promise {\r\n this.pageSize = pageSize;\r\n this.pageNumber = 1;\r\n localStorage.setItem(this.pageSizeStorageKey, String(pageSize));\r\n await this.loadRemediationPageWithSpinner();\r\n }\r\n\r\n private async loadRemediationPageWithSpinner(): Promise {\r\n this.isLoadingPage = true;\r\n try {\r\n await this.loadRemediationPage();\r\n } finally {\r\n this.isLoadingPage = false;\r\n }\r\n }\r\n\r\n applyFilters() {\r\n this.item.reload();\r\n }\r\n\r\n resetFilters() {\r\n this.queryFilters.reset();\r\n this.search = '';\r\n this.applyFilters();\r\n }\r\n\r\n async runSearch(): Promise {\r\n this.pageNumber = 1;\r\n await this.loadRemediationPageWithSpinner();\r\n }\r\n\r\n async clearSearch(): Promise {\r\n this.search = '';\r\n await this.runSearch();\r\n }\r\n\r\n remediationDetailUrl(remediation: RemediationSummary): string {\r\n return this.router.generate('remediation-detail', {\r\n id: remediation.id,\r\n returnUrl: this.router.generate('dashboard-widgets'),\r\n returnLabel: 'Dashboard',\r\n });\r\n }\r\n\r\n get viewAllUrl(): string {\r\n const statusCodes = statusCodesFor(this.activeStatFilter);\r\n const statuses = this.remediationService.getRemediationStatuses();\r\n\r\n return this.router.generate('remediation-list', {\r\n remediationStatusIds: statusCodes.map((code) => statuses.find((s) => s.code === code).id),\r\n returnUrl: this.router.generate('dashboard-widgets'),\r\n returnLabel: 'Dashboard',\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".remediation-management-widget{height:100%;display:flex;flex-direction:column}.remediation-management-widget .remediation-management-table-wrapper{position:relative;flex:1;min-height:0;overflow-y:auto}.remediation-management-widget .remediation-management-table-loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;background-color:#fff;font-size:1.5rem;color:#8f1838}.remediation-management-widget .row.small-up-5 .column{display:flex;align-items:center;justify-content:center;gap:0.5rem;text-align:left}.remediation-management-widget .row.small-up-5 .column strong{margin:0;flex-shrink:0}.remediation-management-widget .stat-filter{cursor:pointer;border-radius:4px;padding-top:0.5rem;padding-bottom:0.5rem;transition:background-color 0.15s ease-in-out}.remediation-management-widget .stat-filter:hover{background-color:rgba(0,0,0,0.05)}.remediation-management-widget .stat-filter.active{background-color:rgba(143,24,56,0.1)}.remediation-management-widget .stat-filter.active span{font-weight:bold}.remediation-management-widget .remediation-management-table{margin-top:1rem;margin-bottom:0}.remediation-management-widget .remediation-management-table th,.remediation-management-widget .remediation-management-table td{padding:0.5rem !important}.remediation-management-widget .remediation-management-table th:first-child,.remediation-management-widget .remediation-management-table td:first-child{padding-left:0.5rem !important}.remediation-management-widget .remediation-management-table th:last-child,.remediation-management-widget .remediation-management-table td:last-child{padding-right:0.5rem !important}.remediation-management-widget .remediation-management-table a{font-weight:normal;font-size:inherit;color:#8f1838;width:auto;height:auto;border-radius:0;border:none;display:inline;margin:0;line-height:inherit;font-family:inherit}.remediation-management-widget .remediation-management-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:0.5rem;flex-shrink:0;padding-top:0.5rem}.remediation-management-widget .remediation-management-page-size{display:flex;align-items:center;gap:0.4rem;font-size:0.8125rem}.remediation-management-widget .remediation-management-page-size label{margin-bottom:0;white-space:nowrap}.remediation-management-widget .remediation-management-page-size .select2{min-width:4.5rem}.remediation-management-widget .remediation-management-pager{display:flex;align-items:center;justify-content:center;gap:0.75rem}.remediation-management-widget .remediation-management-pager button{cursor:pointer;background:none;border:none;color:#8f1838}.remediation-management-widget .remediation-management-pager button:disabled{color:#ccc;cursor:default}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport Organization from 'organizations/organization';\r\nimport RequestService from 'requests/request-service';\r\nimport SecurityService from 'security/security-service';\r\nimport { StatusQuery } from 'status/status-query-filters';\r\nimport UserService from 'users/user-service';\r\nimport { DashboardWidgetsQueryFilters } from '../dashboard-widgets-query-filters';\r\nimport { DashboardWidget } from '../dashboard-widget';\r\nimport { WidgetLayoutItem } from '../widget-layout-item';\r\n\r\n@autoinject\r\nexport class RequestStatusesWidget implements DashboardWidget {\r\n queryFilters: DashboardWidgetsQueryFilters;\r\n item: WidgetLayoutItem;\r\n\r\n organizations: Organization[];\r\n chartData: any;\r\n linkUrl: string;\r\n\r\n constructor(\r\n private requestService: RequestService,\r\n private userService: UserService,\r\n private securityService: SecurityService,\r\n private router: Router,\r\n ) {}\r\n\r\n activate(item: WidgetLayoutItem) {\r\n this.item = item;\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n this.queryFilters = new DashboardWidgetsQueryFilters(\r\n item.id,\r\n 'last7Days',\r\n false,\r\n true,\r\n organizationId ? [organizationId] : [],\r\n );\r\n item.contentVm = this;\r\n item.vmReadyResolve();\r\n }\r\n\r\n async loadData(): Promise {\r\n if (!this.organizations) {\r\n this.organizations = await this.userService.getCurrentUserOrganizations();\r\n }\r\n\r\n const query = this.queryFilters.getQueryParams();\r\n const statusQuery: StatusQuery = {\r\n organizationIds: query.organizationIds,\r\n dateRangeOption: query.dateRangeOption,\r\n targetStartDate: query.targetStartDate,\r\n targetEndDate: query.targetEndDate,\r\n dateRangeOverride: true,\r\n };\r\n const counts = await this.requestService.getRequestStatusCounts(statusQuery);\r\n\r\n const maxValue = counts.reduce((sum, c) => sum + c.count, 0);\r\n\r\n const buildDatapoint = (requestStatus: string, label: string, dataType: string) => {\r\n const match = counts.find((c) => c.requestStatus === requestStatus);\r\n const value = match ? match.count : 0;\r\n return {\r\n value,\r\n label,\r\n dataType,\r\n maxValue,\r\n percent: maxValue === 0 ? 0 : value / maxValue,\r\n url: this.router.generate('status', {\r\n ...statusQuery,\r\n customerRequestStatus: label,\r\n }),\r\n };\r\n };\r\n\r\n this.item.filterCaption = this.queryFilters.buildFilterSummary({ includeDateRange: true });\r\n\r\n this.linkUrl = this.router.generate('status', statusQuery);\r\n this.chartData = {\r\n maxValue,\r\n datapoints: [\r\n buildDatapoint('Submitted', 'Submitted', 'submitted'),\r\n buildDatapoint('Received', 'Received', 'received'),\r\n buildDatapoint('Processing', 'Processing', 'processing'),\r\n buildDatapoint('Completed', 'Completed', 'completed'),\r\n ],\r\n };\r\n }\r\n\r\n applyFilters() {\r\n this.queryFilters.dateRangeQueryFilters.persistCurrentSelection();\r\n this.item.reload();\r\n }\r\n\r\n resetFilters() {\r\n this.queryFilters.reset();\r\n this.applyFilters();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".request-statuses-widget.analytics{padding-top:1rem;padding-bottom:1rem}.request-statuses-widget .progress{margin-bottom:0.5rem}.request-statuses-widget .progress-title{margin-bottom:0.25rem}.request-statuses-widget date-range-filter .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #d5d5d6}.request-statuses-widget date-range-filter .select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;background:transparent;font-size:1rem;line-height:38px}.request-statuses-widget date-range-filter .select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport LabelTemplateService from 'label-templates/label-template-service';\r\nimport operationsTimingOptions from 'location-testing/operations-timing-options';\r\nimport MapService from 'location-testing/maps/map-service';\r\nimport MapSummary from 'location-testing/maps/map-summary';\r\nimport MapSummaryConverter from 'location-testing/maps/map-summary-converter';\r\nimport PlanService from 'location-testing/plans/plan-service';\r\nimport PlanSummary from 'location-testing/plans/plan-summary';\r\nimport PlanSummaryConverter from 'location-testing/plans/plan-summary-converter';\r\nimport { TaskListQuery } from 'location-testing/tasks/task-list-query-filters';\r\nimport { TaskManagementCounts } from 'location-testing/tasks/task-management-counts';\r\nimport { TaskRequestSubmissionService } from 'location-testing/tasks/task-request-submission-service';\r\nimport { TaskSummary } from 'location-testing/tasks/task-summary';\r\nimport TaskService from 'location-testing/tasks/task-service';\r\nimport { TaskStatusUpdateService } from 'location-testing/tasks/task-status-update-service';\r\nimport { describeOnScreenOrder } from 'location-testing/tasks/task-order';\r\nimport { TaskOrderPreferenceService } from 'location-testing/tasks/task-order-preference-service';\r\nimport Organization from 'organizations/organization';\r\nimport SecurityService from 'security/security-service';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport { PagedList } from 'infrastructure/paged-list';\r\nimport RecordStatus from 'record-status';\r\nimport UserService from 'users/user-service';\r\nimport moment from 'moment';\r\nimport { DashboardWidget } from '../dashboard-widget';\r\nimport { DashboardWidgetsQueryFilters } from '../dashboard-widgets-query-filters';\r\nimport { WidgetLayoutItem } from '../widget-layout-item';\r\n\r\ninterface TaskRow extends TaskSummary {\r\n selected?: boolean;\r\n}\r\n\r\ntype TaskStatFilter = 'assigned' | 'unassigned' | 'overdue' | 'awaitingSubmission' | 'submitted';\r\n\r\n// Column headers for the sort keys, used to describe the on-screen order.\r\nconst SORT_COLUMN_LABELS: Record = {\r\n planName: 'Plan',\r\n operationsTiming: 'Operations Timing',\r\n targetDateTime: 'Due Date',\r\n assignedUserEmail: 'Assigned User',\r\n};\r\n\r\n@autoinject\r\nexport class ManageTasksWidget implements DashboardWidget {\r\n queryFilters: DashboardWidgetsQueryFilters;\r\n item: WidgetLayoutItem;\r\n\r\n organizations: Organization[];\r\n canFilterByMapPlan: boolean;\r\n mapSelectorOptions: SelectorOption[];\r\n planSelectorOptions: SelectorOption[];\r\n hasLoaded = false;\r\n counts: TaskManagementCounts;\r\n tasks: TaskRow[];\r\n pageNumber = 1;\r\n pageSize = 25;\r\n pageSizeOptions = [\r\n { value: 5, title: '5' },\r\n { value: 10, title: '10' },\r\n { value: 25, title: '25' },\r\n { value: 50, title: '50' },\r\n { value: 100, title: '100' },\r\n ];\r\n totalCount = 0;\r\n totalPages = 0;\r\n isLoadingPage = false;\r\n activeStatFilter: TaskStatFilter | null = null;\r\n sortParam = { active: 'targetDateTime', direction: 'asc' };\r\n search = '';\r\n canEditTasks: boolean;\r\n hasSelectedTasks = false;\r\n allSelected = false;\r\n canUnassignSelectedTasks = false;\r\n isAssigning = false;\r\n isUnassigning = false;\r\n isUpdatingStatus = false;\r\n isExportingCsv = false;\r\n canExportLabelsPdf: boolean;\r\n\r\n constructor(\r\n private taskService: TaskService,\r\n private userService: UserService,\r\n private mapService: MapService,\r\n private planService: PlanService,\r\n private securityService: SecurityService,\r\n private dialogPresenter: DialogPresenter,\r\n private taskStatusUpdateService: TaskStatusUpdateService,\r\n private taskRequestSubmissionService: TaskRequestSubmissionService,\r\n private taskOrderPreferenceService: TaskOrderPreferenceService,\r\n private labelTemplateService: LabelTemplateService,\r\n private router: Router,\r\n ) {}\r\n\r\n activate(item: WidgetLayoutItem) {\r\n this.item = item;\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n this.queryFilters = new DashboardWidgetsQueryFilters(\r\n item.id,\r\n 'allTime',\r\n true,\r\n false,\r\n organizationId ? [organizationId] : [],\r\n );\r\n this.canEditTasks =\r\n this.securityService.hasPermission('EditTasks') &&\r\n !this.securityService.isImpersonating();\r\n\r\n const savedPageSize = Number(localStorage.getItem(this.pageSizeStorageKey));\r\n if (this.pageSizeOptions.some((o) => o.value === savedPageSize)) {\r\n this.pageSize = savedPageSize;\r\n }\r\n\r\n item.contentVm = this;\r\n item.vmReadyResolve();\r\n }\r\n\r\n private get pageSizeStorageKey(): string {\r\n return `page-size.${this.item.id}`;\r\n }\r\n\r\n async loadData(): Promise {\r\n if (!this.organizations) {\r\n this.organizations = await this.userService.getCurrentUserOrganizations();\r\n }\r\n\r\n if (this.canExportLabelsPdf === undefined) {\r\n // No task label templates means nothing to pick in the PDF dialog, so the button is\r\n // disabled with a tooltip explaining why.\r\n const taskLabelTemplates = await this.labelTemplateService.getLabelTemplates(\r\n { type: 'Task' },\r\n 'Selector',\r\n );\r\n this.canExportLabelsPdf = taskLabelTemplates.length !== 0;\r\n }\r\n\r\n if (!this.mapSelectorOptions) {\r\n this.canFilterByMapPlan =\r\n this.securityService.hasPermission('ViewMaps') &&\r\n this.securityService.hasPermission('ViewPlans');\r\n\r\n if (this.canFilterByMapPlan) {\r\n const maps = (await this.mapService.getMaps([])) as unknown as MapSummary[];\r\n const mapIds = maps.map((m) => m.id);\r\n const plans =\r\n mapIds.length > 0\r\n ? ((await this.planService.getPlans(mapIds)) as unknown as PlanSummary[])\r\n : [];\r\n\r\n this.mapSelectorOptions = MapSummaryConverter.toSelectorOptions(maps);\r\n this.planSelectorOptions = PlanSummaryConverter.toSelectorOptions(plans, maps);\r\n } else {\r\n this.mapSelectorOptions = [];\r\n this.planSelectorOptions = [];\r\n }\r\n }\r\n\r\n this.pageNumber = 1;\r\n this.activeStatFilter = null;\r\n\r\n const { organizationIds, mapIds, planIds, targetStartDate, targetEndDate } =\r\n this.queryFilters.getQueryParams();\r\n\r\n const [counts] = await Promise.all([\r\n this.taskService.getTaskManagementCounts({\r\n organizationIds,\r\n mapIds,\r\n planIds,\r\n targetStartDate,\r\n targetEndDate,\r\n }),\r\n this.loadTaskPage(),\r\n ]);\r\n this.counts = counts;\r\n\r\n this.item.filterCaption = this.queryFilters.buildFilterSummary({\r\n includeDateRange: true,\r\n includeMapPlan: this.canFilterByMapPlan,\r\n });\r\n\r\n this.hasLoaded = true;\r\n }\r\n\r\n async loadTaskPage(): Promise {\r\n const { organizationIds, mapIds, planIds, targetStartDate, targetEndDate } =\r\n this.queryFilters.getQueryParams();\r\n\r\n const pagedResult = (await this.taskService.getTasks(\r\n {\r\n organizationIds,\r\n mapIds,\r\n planIds,\r\n targetStartDate,\r\n targetEndDate,\r\n isAssigned:\r\n this.activeStatFilter === 'assigned'\r\n ? true\r\n : this.activeStatFilter === 'unassigned'\r\n ? false\r\n : undefined,\r\n overdue: this.activeStatFilter === 'overdue' ? true : undefined,\r\n // Awaiting Submission = collected (Completed) but sample not yet submitted.\r\n taskStatusIds:\r\n this.activeStatFilter === 'awaitingSubmission'\r\n ? [this.completedStatusId]\r\n : undefined,\r\n isSubmitted:\r\n this.activeStatFilter === 'submitted'\r\n ? true\r\n : this.activeStatFilter === 'awaitingSubmission'\r\n ? false\r\n : undefined,\r\n recordStatus: RecordStatus.ACTIVE,\r\n sortBy: this.sortParam.active,\r\n sortDirection: this.sortParam.direction === 'desc' ? 'Descending' : 'Ascending',\r\n pageNumber: this.pageNumber,\r\n pageSize: this.pageSize,\r\n search: this.search,\r\n },\r\n 'summary',\r\n )) as unknown as PagedList;\r\n\r\n this.tasks = pagedResult.data;\r\n this.totalCount = pagedResult.totalCount;\r\n this.totalPages = pagedResult.totalPages;\r\n this.hasSelectedTasks = false;\r\n this.allSelected = false;\r\n this.canUnassignSelectedTasks = false;\r\n }\r\n\r\n private get completedStatusId(): number {\r\n return this.taskService.getTaskStatuses().find((s) => s.code === 'Completed').id;\r\n }\r\n\r\n updateSelectionState() {\r\n const selectedTasks = this.tasks?.filter((t) => t.selected) ?? [];\r\n this.hasSelectedTasks = selectedTasks.length > 0;\r\n this.allSelected = this.tasks?.length > 0 && this.tasks.every((t) => t.selected);\r\n // Mirrors task-list.ts's setUnassignAbility(): only tasks that haven't been\r\n // completed and are currently assigned can be unassigned.\r\n this.canUnassignSelectedTasks =\r\n selectedTasks.length > 0 &&\r\n selectedTasks.every(\r\n (t) => (t.status === 'NotStarted' || t.status === 'InProgress') && !!t.assignedUserEmail,\r\n );\r\n }\r\n\r\n toggleSelectAll() {\r\n this.tasks.forEach((t) => (t.selected = this.allSelected));\r\n this.updateSelectionState();\r\n }\r\n\r\n async assignTasks(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const result = (await this.dialogPresenter.showUserSelector(\r\n 'Find a user to assign tasks to',\r\n )) as any;\r\n if (!result || result.wasCancelled) {\r\n return;\r\n }\r\n\r\n const user = result.output;\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Assign Selected Tasks',\r\n `Are you sure you want to assign the selected tasks to user ${user.email}?`,\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n this.isAssigning = true;\r\n try {\r\n const taskIds = selectedTasks.map((t) => t.id);\r\n await this.taskService.assignTasks(taskIds, user.id);\r\n this.item.reload();\r\n } catch {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Assigning Tasks',\r\n 'An unexpected error occurred while trying to assign the tasks. Please try again later.',\r\n );\r\n } finally {\r\n this.isAssigning = false;\r\n }\r\n }\r\n\r\n async unassignTasks(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const tasksPlurality = selectedTasks.length > 1 ? 's' : '';\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n `Unassign Task${tasksPlurality}`,\r\n `Unassign ${selectedTasks.length} task${tasksPlurality}?`,\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n this.isUnassigning = true;\r\n try {\r\n const taskIds = selectedTasks.map((t) => t.id);\r\n await this.taskService.unassignTasks(taskIds);\r\n this.item.reload();\r\n } catch {\r\n await this.dialogPresenter.showAlert(\r\n `Error Unassigning Task${tasksPlurality}`,\r\n `An error occurred while unassigning your task${tasksPlurality}. Please try again later.`,\r\n );\r\n } finally {\r\n this.isUnassigning = false;\r\n }\r\n }\r\n\r\n async updateStatus(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const result = await this.taskStatusUpdateService.selectStatus(selectedTasks);\r\n if (result.cancelled) {\r\n return;\r\n }\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Update Tasks Status',\r\n `Are you sure you want to set the selected tasks to ${result.statusInfo.statusName}?`,\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n this.isUpdatingStatus = true;\r\n try {\r\n const taskIds = result.tasks.map((t) => t.id);\r\n await this.taskService.updateTaskStatus(\r\n taskIds,\r\n result.statusInfo.statusId,\r\n result.statusInfo.collectedDateTime,\r\n result.statusInfo.comments,\r\n );\r\n this.item.reload();\r\n } catch {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Setting Status',\r\n 'An unexpected error occurred while trying to update the tasks. Please try again later.',\r\n );\r\n } finally {\r\n this.isUpdatingStatus = false;\r\n }\r\n }\r\n\r\n async submitRequest(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n await this.taskRequestSubmissionService.submitRequest(selectedTasks, this.orderCaption);\r\n }\r\n\r\n // this.tasks is already in table order, so selected tasks are sent in on-screen order.\r\n private get orderCaption(): string {\r\n return describeOnScreenOrder(\r\n 'Task Management',\r\n SORT_COLUMN_LABELS[this.sortParam.active],\r\n this.sortParam.direction,\r\n );\r\n }\r\n\r\n private get preserveOrder(): boolean {\r\n return this.taskOrderPreferenceService.get() === 'onScreen';\r\n }\r\n\r\n async exportLabelsCsv(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const taskIds = selectedTasks.map((t) => t.id);\r\n const exportableFields = (await this.taskService.getExportableLabelsCsvFields(\r\n taskIds,\r\n )) as any;\r\n const orgDefaultFields = JSON.parse(exportableFields.selected);\r\n\r\n const fieldSelection = (await this.dialogPresenter.showExportableFieldSelector(\r\n 'Select fields to be included with the export',\r\n exportableFields.all,\r\n orgDefaultFields,\r\n this.orderCaption,\r\n )) as any;\r\n if (!fieldSelection || fieldSelection.wasCancelled) {\r\n return;\r\n }\r\n\r\n this.isExportingCsv = true;\r\n try {\r\n const response = await this.taskService.exportLabelsCsv(\r\n taskIds,\r\n fieldSelection.output,\r\n this.preserveOrder,\r\n );\r\n const blob = new Blob([response as any], { type: 'text/csv' });\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = blobUrl;\r\n const dateString = new Date().toISOString().replace(/[-:.Z]/g, '');\r\n link.download = `tasks_${dateString}.csv`;\r\n link.click();\r\n } catch {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Exporting Labels CSV',\r\n 'An unexpected error occurred while trying to export labels CSV. Please try again later.',\r\n );\r\n } finally {\r\n this.isExportingCsv = false;\r\n }\r\n }\r\n\r\n async exportLabelsPdf(): Promise {\r\n const selectedTasks = this.tasks.filter((t) => t.selected);\r\n if (!selectedTasks.length) {\r\n return;\r\n }\r\n\r\n const organizationIds = [...new Set(selectedTasks.map((t) => t.organizationId))];\r\n if (organizationIds.length > 1) {\r\n await this.dialogPresenter.showAlert(\r\n 'Cannot Export Labels PDF',\r\n 'There are tasks from more than one organization selected. Please ensure that tasks from a single organization are selected.',\r\n );\r\n return;\r\n }\r\n\r\n const labelTemplateSelection = (await this.dialogPresenter.showLabelSelector(\r\n 'Select a task label',\r\n 'Task',\r\n organizationIds[0],\r\n this.orderCaption,\r\n )) as any;\r\n if (!labelTemplateSelection || labelTemplateSelection.wasCancelled) {\r\n return;\r\n }\r\n\r\n const taskIds = selectedTasks.map((t) => t.id);\r\n const url = this.taskService.getTaskLabelPdfUrl(\r\n taskIds,\r\n labelTemplateSelection.output.id,\r\n this.preserveOrder,\r\n );\r\n if (url.length > 4096) {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Exporting Labels PDF',\r\n `The number of tasks (${taskIds.length}) selected is not supported. Please select a lesser (< ~300) amount.`,\r\n );\r\n return;\r\n }\r\n\r\n window.location.href = url;\r\n }\r\n\r\n get viewAllUrl(): string {\r\n const { mapIds, planIds } = this.queryFilters.getQueryParams();\r\n const query: TaskListQuery = {\r\n mapIds,\r\n planIds,\r\n ...this.taskListDateRangeQuery(),\r\n dateRangeOverride: true,\r\n };\r\n\r\n if (this.activeStatFilter === 'assigned') {\r\n query.isAssigned = 'true';\r\n } else if (this.activeStatFilter === 'unassigned') {\r\n query.isAssigned = 'false';\r\n } else if (this.activeStatFilter === 'overdue') {\r\n // Mirrors the legacy dashboard's Overdue tile: Not Started/In Progress tasks\r\n // targeted on or before now, independent of the widget's own date range filter.\r\n query.dateRangeOption = 'custom';\r\n query.targetStartDate = null;\r\n query.targetEndDate = moment().format();\r\n query.enableTimeFilter = true;\r\n const statuses = this.taskService.getTaskStatuses();\r\n query.taskStatusIds = ['NotStarted', 'InProgress'].map(\r\n (code) => statuses.find((s) => s.code === code).id,\r\n );\r\n } else if (this.activeStatFilter === 'awaitingSubmission') {\r\n query.taskStatusIds = [this.completedStatusId];\r\n query.isSubmitted = 'false';\r\n } else if (this.activeStatFilter === 'submitted') {\r\n query.isSubmitted = 'true';\r\n }\r\n\r\n return this.router.generate('task-list', query);\r\n }\r\n\r\n taskDetailUrl(task: TaskRow): string {\r\n return this.router.generate('task-detail', {\r\n id: task.id,\r\n returnUrl: this.router.generate('dashboard-widgets'),\r\n returnLabel: 'Dashboard',\r\n });\r\n }\r\n\r\n operationsTimingTaskListUrl(task: TaskRow): string {\r\n const { mapIds, planIds } = this.queryFilters.getQueryParams();\r\n const query: TaskListQuery = {\r\n mapIds,\r\n planIds,\r\n ...this.taskListDateRangeQuery(),\r\n dateRangeOverride: true,\r\n operationsTimings: [task.operationsTiming],\r\n };\r\n return this.router.generate('task-list', query);\r\n }\r\n\r\n // task-list's own DateRangeQueryFilter has no 'allTime' option (that's opt-in per-widget),\r\n // so translate it to the universally-supported 'custom' + null bounds for the outbound link.\r\n private taskListDateRangeQuery() {\r\n const { dateRangeOption, targetStartDate, targetEndDate } = this.queryFilters.getQueryParams();\r\n return dateRangeOption === 'allTime'\r\n ? { dateRangeOption: 'custom', targetStartDate: null, targetEndDate: null }\r\n : { dateRangeOption, targetStartDate, targetEndDate };\r\n }\r\n\r\n async toggleStatFilter(filter: TaskStatFilter): Promise {\r\n this.activeStatFilter = this.activeStatFilter === filter ? null : filter;\r\n this.pageNumber = 1;\r\n await this.loadTaskPageWithSpinner();\r\n }\r\n\r\n async runSearch(): Promise {\r\n this.pageNumber = 1;\r\n await this.loadTaskPageWithSpinner();\r\n }\r\n\r\n async clearSearch(): Promise {\r\n this.search = '';\r\n await this.runSearch();\r\n }\r\n\r\n async toggleSort(key: string): Promise {\r\n this.sortParam.direction =\r\n this.sortParam.active === key && this.sortParam.direction === 'asc' ? 'desc' : 'asc';\r\n this.sortParam.active = key;\r\n this.pageNumber = 1;\r\n await this.loadTaskPageWithSpinner();\r\n }\r\n\r\n async goToPage(pageNumber: number): Promise {\r\n if (pageNumber < 1 || pageNumber > this.totalPages || pageNumber === this.pageNumber) {\r\n return;\r\n }\r\n\r\n this.pageNumber = pageNumber;\r\n await this.loadTaskPageWithSpinner();\r\n }\r\n\r\n async changePageSize(pageSize: number): Promise {\r\n this.pageSize = pageSize;\r\n this.pageNumber = 1;\r\n localStorage.setItem(this.pageSizeStorageKey, String(pageSize));\r\n await this.loadTaskPageWithSpinner();\r\n }\r\n\r\n private async loadTaskPageWithSpinner(): Promise {\r\n this.isLoadingPage = true;\r\n try {\r\n await this.loadTaskPage();\r\n } finally {\r\n this.isLoadingPage = false;\r\n }\r\n }\r\n\r\n operationsTimingCaption(operationsTiming: string): string {\r\n return (\r\n operationsTimingOptions.find((o) => o.value === operationsTiming)?.title ??\r\n operationsTiming\r\n );\r\n }\r\n\r\n applyFilters() {\r\n this.queryFilters.dateRangeQueryFilters.persistCurrentSelection();\r\n this.item.reload();\r\n }\r\n\r\n resetFilters() {\r\n this.queryFilters.reset();\r\n this.search = '';\r\n this.applyFilters();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".manage-tasks-widget{height:100%;display:flex;flex-direction:column}.manage-tasks-widget .manage-tasks-table-wrapper{position:relative;flex:1;min-height:0;overflow-y:auto}.manage-tasks-widget .manage-tasks-table-loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;background-color:#fff;font-size:1.5rem;color:#8f1838}.manage-tasks-widget .row.small-up-5 .column{display:flex;align-items:center;justify-content:center;gap:0.5rem;text-align:left}.manage-tasks-widget .row.small-up-5 .column strong{margin:0;flex-shrink:0}.manage-tasks-widget .stat-filter{cursor:pointer;border-radius:4px;padding-top:0.5rem;padding-bottom:0.5rem;transition:background-color 0.15s ease-in-out}.manage-tasks-widget .stat-filter:hover{background-color:rgba(0,0,0,0.05)}.manage-tasks-widget .stat-filter.active{background-color:rgba(143,24,56,0.1)}.manage-tasks-widget .stat-filter.active span{font-weight:bold}.manage-tasks-widget .manage-tasks-table{margin-top:1rem;margin-bottom:0}.manage-tasks-widget .manage-tasks-table th,.manage-tasks-widget .manage-tasks-table td{padding:0.5rem !important}.manage-tasks-widget .manage-tasks-table th:first-child,.manage-tasks-widget .manage-tasks-table td:first-child{padding-left:0.5rem !important}.manage-tasks-widget .manage-tasks-table th:last-child,.manage-tasks-widget .manage-tasks-table td:last-child{padding-right:0.5rem !important}.manage-tasks-widget .manage-tasks-table a{font-weight:normal;font-size:inherit;color:#8f1838;width:auto;height:auto;border-radius:0;border:none;display:inline;margin:0;line-height:inherit;font-family:inherit}.manage-tasks-widget .manage-tasks-table th.sorting-asc:after{content:'\\\\f0de';opacity:1;color:#cc2350}.manage-tasks-widget .manage-tasks-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:0.5rem;flex-shrink:0;padding-top:0.5rem}.manage-tasks-widget .manage-tasks-page-size{display:flex;align-items:center;gap:0.4rem;font-size:0.8125rem}.manage-tasks-widget .manage-tasks-page-size label{margin-bottom:0;white-space:nowrap}.manage-tasks-widget .manage-tasks-page-size .select2{min-width:4.5rem}.manage-tasks-widget .manage-tasks-pager{display:flex;align-items:center;justify-content:center;gap:0.75rem}.manage-tasks-widget .manage-tasks-pager button{cursor:pointer;background:none;border:none;color:#8f1838}.manage-tasks-widget .manage-tasks-pager button:disabled{color:#ccc;cursor:default}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport Organization from 'organizations/organization';\r\nimport SecurityService from 'security/security-service';\r\nimport TestService from 'tests/test-service';\r\nimport OutcomeStatus from 'test-results/outcome-status';\r\nimport UserService from 'users/user-service';\r\nimport { DashboardWidgetsQueryFilters } from '../dashboard-widgets-query-filters';\r\nimport { DashboardWidget } from '../dashboard-widget';\r\nimport { WidgetLayoutItem } from '../widget-layout-item';\r\n\r\n@autoinject\r\nexport class TestResultsWidget implements DashboardWidget {\r\n queryFilters: DashboardWidgetsQueryFilters;\r\n item: WidgetLayoutItem;\r\n\r\n organizations: Organization[];\r\n chartData: any;\r\n linkUrl: string;\r\n\r\n constructor(\r\n private testService: TestService,\r\n private userService: UserService,\r\n private securityService: SecurityService,\r\n private router: Router,\r\n ) {}\r\n\r\n activate(item: WidgetLayoutItem) {\r\n this.item = item;\r\n const { organizationId } = this.securityService.getEffectiveUser();\r\n this.queryFilters = new DashboardWidgetsQueryFilters(\r\n item.id,\r\n 'last7Days',\r\n false,\r\n true,\r\n organizationId ? [organizationId] : [],\r\n );\r\n item.contentVm = this;\r\n item.vmReadyResolve();\r\n }\r\n\r\n async loadData(): Promise {\r\n if (!this.organizations) {\r\n this.organizations = await this.userService.getCurrentUserOrganizations();\r\n }\r\n\r\n const query = this.queryFilters.getQueryParams();\r\n const { organizationIds, dateRangeOption, targetStartDate, targetEndDate } = query;\r\n\r\n const counts = await this.testService.getTestResultCounts({\r\n organizationIds,\r\n targetStartDate,\r\n targetEndDate,\r\n });\r\n\r\n const maxValue = counts.reduce((sum, c) => sum + c.count, 0);\r\n\r\n const generateLinkUrl = (outcomeStatus: OutcomeStatus) =>\r\n this.router.generate('test-results-list', {\r\n outcomeStatus,\r\n dateRangeOption,\r\n targetStartDate,\r\n targetEndDate,\r\n dateRangeOverride: true,\r\n });\r\n\r\n const buildDatapoint = (passed: boolean | null, label: string, dataType: string) => {\r\n const match = counts.find((c) => c.passed === passed);\r\n const value = match ? match.count : 0;\r\n return {\r\n value,\r\n label,\r\n dataType,\r\n maxValue,\r\n percent: maxValue === 0 ? 0 : value / maxValue,\r\n url: generateLinkUrl(label as OutcomeStatus),\r\n };\r\n };\r\n\r\n this.item.filterCaption = this.queryFilters.buildFilterSummary({ includeDateRange: true });\r\n\r\n this.linkUrl = generateLinkUrl(OutcomeStatus.ALL);\r\n this.chartData = {\r\n maxValue,\r\n datapoints: [\r\n buildDatapoint(null, 'Incomplete', 'submitted'),\r\n buildDatapoint(true, 'Pass', 'negative'),\r\n buildDatapoint(false, 'Fail', 'positive'),\r\n ],\r\n };\r\n }\r\n\r\n applyFilters() {\r\n this.queryFilters.dateRangeQueryFilters.persistCurrentSelection();\r\n this.item.reload();\r\n }\r\n\r\n resetFilters() {\r\n this.queryFilters.reset();\r\n this.applyFilters();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".test-results-widget.analytics{padding-top:1rem;padding-bottom:1.5rem}.test-results-widget .progress{margin-bottom:0.5rem}.test-results-widget .progress-title{margin-bottom:0.25rem}.test-results-widget date-range-filter .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #d5d5d6}.test-results-widget date-range-filter .select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;background:transparent;font-size:1rem;line-height:38px}.test-results-widget date-range-filter .select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { Redirect, Router } from 'aurelia-router';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport MapService from 'location-testing/maps/map-service';\r\nimport MapSummary from 'location-testing/maps/map-summary';\r\nimport MapSummaryConverter from 'location-testing/maps/map-summary-converter';\r\nimport PlanService from 'location-testing/plans/plan-service';\r\nimport PlanSummary from 'location-testing/plans/plan-summary';\r\nimport PlanSummaryConverter from 'location-testing/plans/plan-summary-converter';\r\nimport RemediationService from 'location-testing/remediations/remediation-service';\r\nimport RemediationStatus from 'location-testing/remediations/remediation-status';\r\nimport { TaskListQuery } from 'location-testing/tasks/task-list-query-filters';\r\nimport TaskService from 'location-testing/tasks/task-service';\r\nimport TaskStatus from 'location-testing/tasks/task-status';\r\nimport moment from 'moment';\r\nimport NewsItemService from 'news-items/news-item-service';\r\nimport Organization from 'organizations/organization';\r\nimport OrganizationService from 'organizations/organization-service';\r\nimport RequestService from 'requests/request-service';\r\nimport SecurityService from 'security/security-service';\r\nimport { StatusQuery } from 'status/status-query-filters';\r\nimport OutcomeStatus from 'test-results/outcome-status';\r\nimport { TestResultListQuery } from 'test-results/test-results-query-filters';\r\nimport TestService from 'tests/test-service';\r\nimport UserService from 'users/user-service';\r\nimport { DashboardQuery, DashboardQueryFilters } from './dashboard-query-filters';\r\nimport DashboardService from './dashboard-service';\r\n\r\ntype DashboardLinks = Record;\r\n\r\ninterface DateRange {\r\n start: moment.Moment;\r\n exclusiveEnd: moment.Moment;\r\n title: string;\r\n}\r\n\r\n@autoinject\r\nexport class Dashboard {\r\n // filters\r\n dashboardQueryFilters: DashboardQueryFilters;\r\n mapSelectorOptions: SelectorOption[];\r\n planSelectorOptions: SelectorOption[];\r\n\r\n // controls\r\n filterAccordion: any;\r\n\r\n // subscriptions\r\n applyFiltersSubscription: Subscription;\r\n clearFiltersSubscription: Subscription;\r\n\r\n // permissions\r\n canViewPriceQuotes: boolean;\r\n canViewRequests: boolean;\r\n canViewResults: boolean;\r\n canViewAllTasks: boolean;\r\n canViewMyTasks: boolean;\r\n canViewAllRemediations: boolean;\r\n canViewMyRemediations: boolean;\r\n canViewMaps: boolean;\r\n canViewPlans: boolean;\r\n canFilter: boolean;\r\n\r\n //\r\n requestChartLinkUrl: string;\r\n requestChartData: any;\r\n resultChartLinkUrl: string;\r\n resultChartData: any;\r\n\r\n myTaskCountsToday: any;\r\n myTaskCountsWeek: any;\r\n myRemediationCounts: any;\r\n\r\n taskCountsToday: any;\r\n taskCountsWeek: any;\r\n criticaltaskCounts: any;\r\n remediationCounts: any;\r\n\r\n taskStatuses: TaskStatus[];\r\n remediationStatuses: RemediationStatus[];\r\n\r\n currentUser: any;\r\n newsItems: any;\r\n organizations: Organization[];\r\n dashboardLinks: DashboardLinks;\r\n\r\n statusQuery: StatusQuery;\r\n testResultListQuery: TestResultListQuery;\r\n\r\n constructor(\r\n private router: Router,\r\n private eventAggregator: EventAggregator,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private logger: Logger,\r\n private securityService: SecurityService,\r\n private organizationService: OrganizationService,\r\n private newsItemService: NewsItemService,\r\n private userService: UserService,\r\n private requestService: RequestService,\r\n private testService: TestService,\r\n private dashboardService: DashboardService,\r\n private mapService: MapService,\r\n private planService: PlanService,\r\n private taskService: TaskService,\r\n private remediationService: RemediationService,\r\n ) {\r\n this.logger.name = 'dashboard';\r\n\r\n // Permissions\r\n this.canViewPriceQuotes = this.securityService.hasPermission('ViewPriceQuotes');\r\n this.canViewRequests = this.securityService.hasPermission('ViewRequests');\r\n this.canViewResults = this.securityService.hasPermission('ViewResults');\r\n this.canViewAllTasks = this.securityService.hasPermission('ViewAllTasks');\r\n this.canViewMyTasks = this.securityService.hasPermission('ViewMyTasks');\r\n this.canViewAllRemediations = this.securityService.hasPermission('ViewAllRemediations');\r\n this.canViewMyRemediations = this.securityService.hasPermission('ViewMyRemediations');\r\n this.canViewMaps = this.securityService.hasPermission('ViewMaps');\r\n this.canViewPlans = this.securityService.hasPermission('ViewPlans');\r\n this.canFilter = this.canViewRequests || this.canViewResults;\r\n\r\n this.dashboardQueryFilters = new DashboardQueryFilters();\r\n }\r\n\r\n handleApplyFilters() {\r\n this.router.navigateToRoute('dashboard', this.dashboardQueryFilters.getQueryParams());\r\n }\r\n\r\n handleClearFilters() {\r\n this.dashboardQueryFilters.reset();\r\n this.router.navigateToRoute('dashboard', this.dashboardQueryFilters.getQueryParams());\r\n }\r\n\r\n async refreshWidgetData() {\r\n const now = new Date();\r\n const dashboardQuery = this.dashboardQueryFilters.getQueryParams();\r\n const todaysDashboardQuery = Object.assign({}, dashboardQuery);\r\n todaysDashboardQuery.dateRangeOption = 'custom';\r\n todaysDashboardQuery.targetStartDate =\r\n this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(now);\r\n todaysDashboardQuery.targetEndDate =\r\n this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(now, true);\r\n\r\n this.statusQuery = {\r\n organizationIds: dashboardQuery.organizationIds,\r\n dateRangeOption: dashboardQuery.dateRangeOption,\r\n targetStartDate: dashboardQuery.targetStartDate,\r\n targetEndDate: dashboardQuery.targetEndDate,\r\n };\r\n\r\n this.testResultListQuery = {\r\n outcomeStatus: OutcomeStatus.ALL,\r\n dateRangeOption: dashboardQuery.dateRangeOption,\r\n targetStartDate: dashboardQuery.targetStartDate,\r\n targetEndDate: dashboardQuery.targetEndDate,\r\n };\r\n\r\n await Promise.all([\r\n this.refreshRequestChartData(dashboardQuery),\r\n this.refreshResultChartData(dashboardQuery),\r\n this.refreshMyTaskData(todaysDashboardQuery, dashboardQuery),\r\n this.refreshTaskManagementData(todaysDashboardQuery, dashboardQuery),\r\n this.refreshMyRemediationData(dashboardQuery.organizationIds),\r\n this.refreshRemediationManagementData(dashboardQuery.organizationIds),\r\n ]);\r\n }\r\n\r\n generateStatusLinkUrl({ customerRequestStatus = null } = {}) {\r\n const statusQuery = this.statusQuery;\r\n statusQuery.customerRequestStatus = customerRequestStatus;\r\n\r\n return this.router.generate('status', statusQuery);\r\n }\r\n\r\n generateTestResultLinkUrl(outcome: OutcomeStatus) {\r\n const testResultQuery = this.testResultListQuery;\r\n testResultQuery.outcomeStatus = outcome;\r\n\r\n return this.router.generate('test-results-list', testResultQuery);\r\n }\r\n\r\n async refreshRequestChartData(dashboardQuery: DashboardQuery) {\r\n if (!this.canViewRequests) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var requestStatusCounts = await this.requestService.getRequestStatusCounts(\r\n dashboardQuery,\r\n );\r\n\r\n var maxValue = requestStatusCounts.reduce(\r\n (sum, requestStatusCount) => sum + requestStatusCount.count,\r\n 0,\r\n );\r\n var buildRequestStatusDatapoint = (requestStatus, label, dataType, backgroundColor) => {\r\n var requestStatusCount = requestStatusCounts.find(\r\n (e) => e.requestStatus === requestStatus,\r\n );\r\n var value = requestStatusCount ? requestStatusCount.count : 0;\r\n var percent = maxValue === 0 ? 0 : value / maxValue;\r\n\r\n return {\r\n value,\r\n label,\r\n dataType,\r\n maxValue,\r\n backgroundColor,\r\n percent,\r\n url: this.generateStatusLinkUrl({\r\n customerRequestStatus: label,\r\n }),\r\n };\r\n };\r\n\r\n this.requestChartLinkUrl = this.generateStatusLinkUrl();\r\n this.requestChartData = {\r\n maxValue,\r\n datapoints: [\r\n buildRequestStatusDatapoint(\r\n 'Submitted',\r\n 'Submitted',\r\n 'submitted',\r\n 'rgba(171,171,173,.35)',\r\n ),\r\n buildRequestStatusDatapoint('Received', 'Received', 'received', '#cc2350'),\r\n buildRequestStatusDatapoint(\r\n 'Processing',\r\n 'Processing',\r\n 'processing',\r\n '#9fd0cb',\r\n ),\r\n buildRequestStatusDatapoint('Completed', 'Completed', 'completed', '#25d925'),\r\n ],\r\n };\r\n } catch (error) {\r\n this.logger.error('Error occurred while loading request chart data.', error);\r\n this.requestChartData = {\r\n errorMessage: 'Error loading chart data',\r\n };\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async refreshResultChartData(dashboardQuery: DashboardQuery) {\r\n if (!this.canViewResults) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const { organizationIds, targetStartDate, targetEndDate } = dashboardQuery;\r\n var testResultCounts = await this.testService.getTestResultCounts({\r\n organizationIds,\r\n targetStartDate,\r\n targetEndDate,\r\n });\r\n\r\n var maxValue = testResultCounts.reduce(\r\n (sum, testResultCount) => sum + testResultCount.count,\r\n 0,\r\n );\r\n var buildTestResultDatapoint = (passed, label, dataType, backgroundColor) => {\r\n var testResultCount = testResultCounts.find((e) => e.passed === passed);\r\n var value = testResultCount ? testResultCount.count : 0;\r\n var percent = maxValue === 0 ? 0 : value / maxValue;\r\n return {\r\n value,\r\n label,\r\n dataType,\r\n maxValue,\r\n backgroundColor,\r\n percent,\r\n url: this.generateTestResultLinkUrl(label),\r\n };\r\n };\r\n\r\n this.resultChartLinkUrl = this.generateTestResultLinkUrl(OutcomeStatus.ALL);\r\n this.resultChartData = {\r\n maxValue,\r\n datapoints: [\r\n buildTestResultDatapoint(null, 'Incomplete', 'submitted', '#79686d'),\r\n buildTestResultDatapoint(true, 'Pass', 'negative', '#25d925'),\r\n buildTestResultDatapoint(false, 'Fail', 'positive', '#c00'),\r\n ],\r\n };\r\n } catch (error) {\r\n this.logger.error('Error occurred while loading test result chart data.', error);\r\n this.resultChartData = { errorMessage: 'Error loading chart data' };\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async refreshMyTaskData(todaysDashboardQuery: DashboardQuery, dashboardQuery: DashboardQuery) {\r\n if (!this.canViewMyTasks) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n todaysDashboardQuery.onlyAssignedToMe = true;\r\n dashboardQuery.onlyAssignedToMe = true;\r\n const [taskCountsToday, taskCountsWeek] = await Promise.all([\r\n this.taskService.getTaskCounts(todaysDashboardQuery),\r\n this.taskService.getTaskCounts(dashboardQuery),\r\n ]);\r\n\r\n this.myTaskCountsToday = taskCountsToday;\r\n this.myTaskCountsWeek = taskCountsWeek;\r\n } catch (error) {\r\n this.logger.error('Error occurred while loading My Task widget data.', error);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async refreshTaskManagementData(\r\n todaysDashboardQuery: DashboardQuery,\r\n dashboardQuery: DashboardQuery,\r\n ) {\r\n if (!this.canViewAllTasks) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n todaysDashboardQuery.onlyAssignedToMe = false;\r\n dashboardQuery.onlyAssignedToMe = false;\r\n const [taskCountsToday, taskCountsWeek, criticalTaskCounts] = await Promise.all([\r\n this.taskService.getTaskCounts(todaysDashboardQuery),\r\n this.taskService.getTaskCounts(dashboardQuery),\r\n this.taskService.getCriticalTaskCounts(dashboardQuery.organizationIds),\r\n ]);\r\n\r\n this.taskCountsToday = taskCountsToday;\r\n this.taskCountsWeek = taskCountsWeek;\r\n this.criticaltaskCounts = criticalTaskCounts;\r\n } catch (error) {\r\n this.logger.error('Error occurred while loading Task Management widget data.', error);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async refreshMyRemediationData(organizationIds: number[]) {\r\n if (!this.canViewAllRemediations) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.myRemediationCounts = (await this.remediationService.getRemediationCounts(\r\n organizationIds,\r\n true,\r\n )) as unknown as number;\r\n } catch (error) {\r\n this.logger.error('Error occurred while loading My Remediations widget data.', error);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async refreshRemediationManagementData(organizationIds: number[]) {\r\n if (!this.canViewAllRemediations) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.remediationCounts = (await this.remediationService.getRemediationCounts(\r\n organizationIds,\r\n false,\r\n )) as unknown as number;\r\n } catch (error) {\r\n this.logger.error(\r\n 'Error occurred while loading Remediation Management widget data.',\r\n error,\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async canActivate(_params: TestResultListQuery, routeConfig) {\r\n const isWidgetDashboardEnabled = await this.organizationService.checkConfigurationFlag(\r\n 'enableWidgetDashboard',\r\n );\r\n if (isWidgetDashboardEnabled) return new Redirect('dashboard-widgets');\r\n\r\n return this.dashboardQueryFilters.ensureSingleApplyFilterHandler(routeConfig);\r\n }\r\n\r\n activate(params: DashboardQuery) {\r\n // Short circuit the loading of the dashboard if the user is going to be redirect away.\r\n if (this.securityService.pendingRedirectAfterlogin) return;\r\n\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe('filters.apply', () =>\r\n this.handleApplyFilters(),\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe('filters.clear', () =>\r\n this.handleClearFilters(),\r\n );\r\n this.dashboardQueryFilters.setFilterValues(params);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const [currentUser, newsItems, currentUserOrganizations, maps, dashboardLinks] =\r\n await Promise.all([\r\n this.securityService.getEffectiveUser(),\r\n this.newsItemService.getNewsItems({ forDashboard: true }),\r\n this.canFilter\r\n ? this.userService.getCurrentUserOrganizations()\r\n : Promise.resolve([]),\r\n this.canViewMaps ? this.mapService.getMaps([]) : [],\r\n this.dashboardService.getDashboardLinks(),\r\n this.refreshWidgetData(),\r\n ]);\r\n\r\n this.taskStatuses = this.taskService.getTaskStatuses() as unknown as TaskStatus[];\r\n this.remediationStatuses =\r\n this.remediationService.getRemediationStatuses() as unknown as RemediationStatus[];\r\n this.currentUser = currentUser;\r\n this.newsItems = newsItems;\r\n this.organizations = currentUserOrganizations;\r\n this.dashboardLinks = dashboardLinks as unknown as DashboardLinks;\r\n\r\n // grab data to drive the map/plan filter\r\n let mapSummaries = maps as unknown as MapSummary[];\r\n let mapIds = mapSummaries.map((m) => m.id);\r\n let planSummaries =\r\n this.canViewPlans && mapIds.length > 0\r\n ? ((await this.planService.getPlans(mapIds)) as unknown as PlanSummary[])\r\n : [];\r\n\r\n this.mapSelectorOptions = MapSummaryConverter.toSelectorOptions(mapSummaries);\r\n this.planSelectorOptions = PlanSummaryConverter.toSelectorOptions(\r\n planSummaries,\r\n mapSummaries,\r\n );\r\n } catch (error) {\r\n this.logger.error('Error loading dashboard.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Dashboard',\r\n 'An error occurred while loading the dashbord. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n navigateToPricing() {\r\n if (!this.currentUser || !this.currentUser.organizationId) return;\r\n\r\n this.router.navigateToRoute('test-method-list', {\r\n id: this.currentUser.organizationId,\r\n });\r\n }\r\n\r\n private mapTaskListQuery(): TaskListQuery {\r\n const dashboardQuery = this.dashboardQueryFilters.getQueryParams();\r\n return {\r\n mapId: dashboardQuery.mapId,\r\n planId: dashboardQuery.planId,\r\n mapIds: dashboardQuery.mapIds,\r\n planIds: dashboardQuery.planIds,\r\n dateRangeOption: dashboardQuery.dateRangeOption,\r\n targetStartDate: dashboardQuery.targetStartDate,\r\n targetEndDate: dashboardQuery.targetEndDate,\r\n };\r\n }\r\n\r\n navigateToMyTodaysFilteredTasks(taskStatusCodes?: string[]) {\r\n const now = new Date();\r\n const taskListQuery = this.mapTaskListQuery();\r\n taskListQuery.dateRangeOverride = true;\r\n taskListQuery.dateRangeOption = 'custom';\r\n taskListQuery.targetStartDate =\r\n this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(now);\r\n taskListQuery.targetEndDate = this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(\r\n now,\r\n true,\r\n );\r\n taskListQuery.onlyAssignedToMe = true;\r\n\r\n if (taskStatusCodes && taskStatusCodes.length > 0) {\r\n taskListQuery.taskStatusIds = taskStatusCodes.map(\r\n (code) => this.taskStatuses.find((s) => s.code === code).id,\r\n );\r\n }\r\n\r\n this.router.navigateToRoute('task-list', taskListQuery);\r\n }\r\n\r\n navigateToMyFilteredTasks() {\r\n const taskListQuery = this.mapTaskListQuery();\r\n taskListQuery.onlyAssignedToMe = true;\r\n\r\n this.router.navigateToRoute('task-list', taskListQuery);\r\n }\r\n\r\n navigateToAllTodaysFilteredTasks(taskStatusCodes?: string[]) {\r\n const now = new Date();\r\n const taskListQuery = this.mapTaskListQuery();\r\n taskListQuery.dateRangeOverride = true;\r\n taskListQuery.dateRangeOption = 'custom';\r\n taskListQuery.targetStartDate =\r\n this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(now);\r\n taskListQuery.targetEndDate = this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(\r\n now,\r\n true,\r\n );\r\n taskListQuery.onlyAssignedToMe = false;\r\n\r\n if (taskStatusCodes && taskStatusCodes.length > 0) {\r\n taskListQuery.taskStatusIds = taskStatusCodes.map(\r\n (code) => this.taskStatuses.find((s) => s.code === code).id,\r\n );\r\n }\r\n\r\n this.router.navigateToRoute('task-list', taskListQuery);\r\n }\r\n\r\n navigateToAllFilteredTasks(isAssigned?: string) {\r\n const taskListQuery = this.mapTaskListQuery();\r\n taskListQuery.isAssigned = isAssigned;\r\n\r\n this.router.navigateToRoute('task-list', taskListQuery);\r\n }\r\n\r\n navigateToCriticalUnassignedFilteredTasksThroughToday() {\r\n const now = new Date();\r\n const taskListQuery = this.mapTaskListQuery();\r\n taskListQuery.dateRangeOverride = true;\r\n taskListQuery.dateRangeOption = 'custom';\r\n taskListQuery.targetStartDate = null;\r\n taskListQuery.targetEndDate = this.dashboardQueryFilters.dateRangeQueryFilters.formatDate(\r\n now,\r\n true,\r\n );\r\n\r\n this.router.navigateToRoute('task-list', taskListQuery);\r\n }\r\n\r\n navigateToCriticalOverdueFilteredTasksThroughNow() {\r\n const taskListQuery = this.mapTaskListQuery();\r\n taskListQuery.dateRangeOverride = true;\r\n taskListQuery.dateRangeOption = 'custom';\r\n taskListQuery.targetStartDate = null;\r\n taskListQuery.targetEndDate = moment().format();\r\n taskListQuery.enableTimeFilter = true;\r\n\r\n const criticalStatuses = this.taskStatuses.filter(\r\n (ts) => ts.code === 'NotStarted' || ts.code === 'InProgress',\r\n );\r\n taskListQuery.taskStatusIds = criticalStatuses.map((cs) => cs.id);\r\n\r\n this.router.navigateToRoute('task-list', taskListQuery);\r\n }\r\n\r\n navigateToRemediationList({\r\n onlyAssignedToMe = false,\r\n isAssigned = null,\r\n remediationStatusCodes = null,\r\n } = {}) {\r\n this.router.navigateToRoute('remediation-list', {\r\n dateRangeOption: 'custom',\r\n onlyAssignedToMe,\r\n isAssigned,\r\n remediationStatusIds: (remediationStatusCodes || []).map(\r\n (code) => this.remediationStatuses.find((s) => s.code === code).id,\r\n ),\r\n });\r\n }\r\n\r\n canDeactivate() {\r\n this.applyFiltersSubscription?.dispose();\r\n this.clearFiltersSubscription?.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { Container } from 'aurelia-framework';\r\nimport DialogPresenter from '../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../infrastructure/logger';\r\nimport PageContext from '../infrastructure/page-context';\r\n\r\n// NOTE: This must be submitted manually as the try/catch will not handle any server side errors.\r\nexport function submitCustomCertiticateForm(customCoaForm: HTMLFormElement) {\r\n const dialogPresenter = Container.instance.get(DialogPresenter);\r\n const logger = Container.instance.get(Logger);\r\n const pageContext = Container.instance.get(PageContext);\r\n\r\n pageContext.isLoading = true;\r\n\r\n const xhr = new XMLHttpRequest();\r\n xhr.responseType = 'blob';\r\n xhr.open('POST', '/api/results/custom-certificates', true);\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n const type = xhr.getResponseHeader('Content-Type');\r\n const contentDispositionHeader = xhr.getResponseHeader('Content-Disposition');\r\n const blob = new Blob([xhr.response], { type });\r\n\r\n const regExpFileName = /filename=(?.*)/;\r\n const fileName: string | null =\r\n regExpFileName.exec(contentDispositionHeader)?.groups?.filename ?? null;\r\n\r\n let a = document.createElement('a');\r\n document.body.appendChild(a);\r\n let url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n\r\n pageContext.isLoading = false;\r\n pageContext.showSuccessOverlay('Certificate download started successfully.');\r\n } else {\r\n pageContext.isLoading = false;\r\n logger.error(\r\n 'Error downloading certificate.',\r\n 'A server side error occured while trying to download custom cert',\r\n );\r\n dialogPresenter.showAlert(\r\n 'Error Downloading Certificate',\r\n 'An error occurred while downloading the certificate. Please try again later.',\r\n );\r\n }\r\n }\r\n };\r\n\r\n const formData = new FormData(customCoaForm);\r\n xhr.send(formData);\r\n}\r\n","import { ExportTaskCollectionTemplateColumn } from './export-task-collection-template-column';\r\nimport { ExportTaskCollectionTemplateConfiguration } from './export-task-collection-template-configuration';\r\nimport { emptyExportTaskCollectionTemplateFooterOptions, ExportTaskCollectionTemplateFooterOptions } from './export-task-collection-template-footer-options';\r\nimport { emptyExportTaskCollectionTemplateFormattingOptions, ExportTaskCollectionTemplateFormattingOptions } from './export-task-collection-template-formatting-options';\r\nimport { emptyExportTaskCollectionTemplateHeaderOptions, ExportTaskCollectionTemplateHeaderOptions } from './export-task-collection-template-header-options';\r\n\r\nexport interface ExportTaskCollectionTemplate {\r\n id: number;\r\n isActive: boolean;\r\n organizationConfigurations: ExportTaskCollectionTemplateConfiguration[];\r\n columns: ExportTaskCollectionTemplateColumn[];\r\n formattingOptions: ExportTaskCollectionTemplateFormattingOptions;\r\n headerOptions?: ExportTaskCollectionTemplateHeaderOptions;\r\n footerOptions?: ExportTaskCollectionTemplateFooterOptions;\r\n}\r\n\r\nexport const emptyExportTaskCollectionTemplate = (): ExportTaskCollectionTemplate => ({\r\n id: 0,\r\n isActive: false,\r\n organizationConfigurations: [],\r\n columns: [],\r\n formattingOptions: emptyExportTaskCollectionTemplateFormattingOptions(),\r\n headerOptions: emptyExportTaskCollectionTemplateHeaderOptions(),\r\n footerOptions: emptyExportTaskCollectionTemplateFooterOptions(),\r\n})\r\n","import { DialogService } from 'aurelia-dialog';\r\nimport { inject } from 'aurelia-framework';\r\nimport { AgGridDialog } from './ag-grid-dialog';\r\nimport Alert from './alert';\r\nimport Confirmation from './confirmation';\r\nimport { DataGridReorderDialog } from './data-grid-reorder-dialog';\r\nimport ExportableFieldSelector from './exportable-field-selector';\r\nimport LabelSelector from './label-selector';\r\nimport NameValueItemSelector from './name-value-item-selector';\r\nimport UserSelector from './user-selector';\r\n\r\n@inject(DialogService)\r\nexport default class DialogPresenter {\r\n constructor(dialogService) {\r\n this.dialogService = dialogService;\r\n }\r\n\r\n showAlert(title, message, okButtonTitle) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: Alert,\r\n model: {\r\n title,\r\n message,\r\n okButtonTitle,\r\n },\r\n })\r\n .whenClosed((response) => resolve());\r\n });\r\n }\r\n\r\n showConfirmation(title, message, okButtonTitle, cancelButtonTitle) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: Confirmation,\r\n model: {\r\n title,\r\n message,\r\n okButtonTitle,\r\n cancelButtonTitle,\r\n },\r\n })\r\n .whenClosed((response) => resolve(!response.wasCancelled));\r\n });\r\n }\r\n\r\n showLoseChangesConfirmation() {\r\n return this.showConfirmation(\r\n 'Lose Changes?',\r\n 'You may have unsaved changes. Are you sure you want to leave the page?',\r\n 'Leave',\r\n 'Stay',\r\n );\r\n }\r\n\r\n showUserSelector(title) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: UserSelector,\r\n model: { title: title || 'Select a user' },\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n\r\n // taskOrderCaption (optional) shows the task order choice, describing the caller's on-screen order.\r\n showExportableFieldSelector(title, fields, selected, taskOrderCaption) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: ExportableFieldSelector,\r\n model: {\r\n title: title || 'Select fields to be included with the export',\r\n fields: fields,\r\n selected: selected,\r\n taskOrderCaption,\r\n },\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n\r\n // taskOrderCaption (optional, task labels only) shows the task order choice, describing the\r\n // caller's on-screen order.\r\n showLabelSelector(title, labelTemplateType, organizationId, taskOrderCaption) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: LabelSelector,\r\n model: {\r\n title: title || 'Select a label',\r\n labelTemplateType,\r\n organizationId,\r\n taskOrderCaption,\r\n },\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n\r\n showNameValueItemSelector(\r\n title,\r\n description,\r\n placeholderText,\r\n items,\r\n captionPropertyName,\r\n valuePropertyName,\r\n ) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: NameValueItemSelector,\r\n model: {\r\n title,\r\n description,\r\n placeholderText,\r\n items,\r\n captionPropertyName,\r\n valuePropertyName,\r\n },\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n\r\n showClientVersionReloadDialog() {\r\n return this.showConfirmation(\r\n 'New Version Available',\r\n 'A new version of the portal is available. To have the best experience, you should reload the browser with the latest version.',\r\n 'Reload Browser',\r\n 'Cancel',\r\n );\r\n }\r\n\r\n showDataGridReorderDialog(model) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: DataGridReorderDialog,\r\n model,\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n\r\n showAgGridDialog(model) {\r\n return new Promise((resolve) => {\r\n this.dialogService\r\n .open({\r\n viewModel: AgGridDialog,\r\n model,\r\n })\r\n .whenClosed((response) => resolve(response));\r\n });\r\n }\r\n}\r\n","import { ColDef, ColGroupDef, GridOptions } from 'ag-grid-community';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport {\r\n agFormatDateAndTimeToLocale,\r\n agFormatTaskCollectionType,\r\n} from 'infrastructure/ag-grid/ag-value-formatters';\r\n\r\nconst colDefs: (ColDef | ColGroupDef)[] = [\r\n { headerName: 'Sample Id', field: 'sampleExternalId' },\r\n {\r\n headerName: 'Collected',\r\n field: 'sampleCollectionDate',\r\n valueFormatter: agFormatDateAndTimeToLocale,\r\n sort: 'desc',\r\n },\r\n {\r\n headerName: 'Collection Type',\r\n field: 'collectionType',\r\n valueFormatter: agFormatTaskCollectionType,\r\n },\r\n { headerName: 'Remediation', field: 'remediationName' },\r\n { headerName: 'Root Cause', field: 'RemediationRootCause' },\r\n { headerName: 'Test Method', field: 'testMethod' },\r\n { headerName: 'Quantitative Result', field: 'quantitativeResult' },\r\n { headerName: 'Qualitative Result', field: 'qualitativeResult' },\r\n\r\n { field: 'sampleId', hide: true },\r\n { field: 'testId', hide: true },\r\n { field: 'pointId', hide: true },\r\n { field: 'remediationId', hide: true },\r\n];\r\n\r\nconst baseOptions: GridOptions = {\r\n columnDefs: colDefs,\r\n};\r\n\r\n// Don't set domLayout: 'auotHeight' as the dialog window sets the height.\r\nconst remediationPointTestHistoryGridOptions: GridOptions = AgStatefulGridBuilder.create(\r\n baseOptions,\r\n)\r\n .setDefaults()\r\n .addStatefulness('remediation-point-test-history-grid')\r\n .build();\r\n\r\nexport { remediationPointTestHistoryGridOptions };\r\n","import {\r\n CellEditingStoppedEvent,\r\n ColDef,\r\n GetMainMenuItemsParams,\r\n GridApi,\r\n GridOptions,\r\n MenuItemDef,\r\n} from 'ag-grid-community';\r\nimport { RichSelectModule } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport { agGridSetPreferences } from 'infrastructure/ag-grid/ag-localstorage-helper';\r\nimport { AgDateTimeEditorTypes } from './ag-grid-components/ag-datetime-editor-types';\r\nimport { SampleSegmentationGridPreferences } from './ag-grid-components/sample-segmentation-grid-preferences';\r\n\r\nconst setFocusedCell = (event: CellEditingStoppedEvent) => {\r\n const { api, node, column, colDef, columnApi, rowIndex } = event;\r\n const isLastRow = api.getDisplayedRowCount() - 1 === rowIndex;\r\n if (!node.lastChild || !isLastRow) {\r\n return;\r\n }\r\n\r\n const { colId } = colDef;\r\n const cols = columnApi.getAllColumns();\r\n const colIndex = cols.findIndex((c) => c.getColId() === colId);\r\n if (cols.length === colIndex + 1) {\r\n return;\r\n }\r\n\r\n api.setFocusedCell(0, cols[colIndex + 1].getColId());\r\n};\r\n\r\nconst setDateTimeEditor = (api: GridApi, preferences: SampleSegmentationGridPreferences) => {\r\n const colDefs: ColDef[] = api.getColumnDefs();\r\n agGridSetPreferences(preferences);\r\n api.setColumnDefs(colDefs);\r\n};\r\n\r\nconst getMainMenuItems = (params: GetMainMenuItemsParams): (string | MenuItemDef)[] => {\r\n const { defaultItems, api, context } = params;\r\n const colId = params.column.getId();\r\n if (colId !== 'collection_date') {\r\n return defaultItems;\r\n }\r\n\r\n const { preferences }: { preferences: SampleSegmentationGridPreferences } = context;\r\n const collectionDateMenuItems: (MenuItemDef | string)[] = defaultItems.slice(0);\r\n\r\n collectionDateMenuItems.push({\r\n name: 'Date/Time Editor',\r\n subMenu: [\r\n {\r\n name: AgDateTimeEditorTypes.PICKER,\r\n action: () => {\r\n preferences.dateTimeEditor = AgDateTimeEditorTypes.PICKER;\r\n setDateTimeEditor(api, preferences);\r\n },\r\n checked: preferences.dateTimeEditor === AgDateTimeEditorTypes.PICKER,\r\n },\r\n {\r\n name: AgDateTimeEditorTypes.MASK,\r\n action: () => {\r\n preferences.dateTimeEditor = AgDateTimeEditorTypes.MASK;\r\n setDateTimeEditor(api, preferences);\r\n },\r\n checked: preferences.dateTimeEditor === AgDateTimeEditorTypes.MASK,\r\n },\r\n ],\r\n });\r\n\r\n return collectionDateMenuItems;\r\n};\r\n\r\nconst segmentationSampleGridOptions: GridOptions = {\r\n frameworkComponents: {\r\n selectEditorComponent: RichSelectModule,\r\n },\r\n defaultColDef: {\r\n flex: 1,\r\n minWidth: 100,\r\n sortable: true,\r\n resizable: true,\r\n },\r\n context: {\r\n preferences: new SampleSegmentationGridPreferences(),\r\n },\r\n getMainMenuItems,\r\n animateRows: true,\r\n enterMovesDown: true,\r\n enterMovesDownAfterEdit: true,\r\n rowSelection: 'multiple',\r\n suppressRowClickSelection: true,\r\n enableRangeSelection: true,\r\n enableFillHandle: true,\r\n fillHandleDirection: 'y',\r\n};\r\n\r\nexport { segmentationSampleGridOptions };\r\n","import { DialogService } from 'aurelia-dialog';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { Aurelia, inject, PLATFORM } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { Router } from 'aurelia-router';\r\nimport ApplicationInsightsService from 'infrastructure/application-insights-service';\r\nimport Cookies from 'js-cookie';\r\nimport ApplicationModuleService from '../application-modules/application-module-service';\r\nimport Logger from '../infrastructure/logger';\r\nimport RoleService from '../roles/role-service';\r\n\r\n@inject(\r\n Aurelia,\r\n Router,\r\n HttpClient,\r\n EventAggregator,\r\n DialogService,\r\n Logger,\r\n RoleService,\r\n ApplicationModuleService,\r\n ApplicationInsightsService,\r\n)\r\nexport default class SecurityService {\r\n constructor(\r\n aurelia,\r\n router,\r\n httpClient,\r\n eventAggregator,\r\n dialogService,\r\n logger,\r\n roleService,\r\n applicationModuleService,\r\n applicationInsightsService,\r\n ) {\r\n this.aurelia = aurelia;\r\n this.router = router;\r\n this.httpClient = httpClient;\r\n this.eventAggregator = eventAggregator;\r\n this.dialogService = dialogService;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'security-service';\r\n\r\n this.applicationInsightsService = applicationInsightsService;\r\n\r\n this.roleService = roleService;\r\n this.applicationModuleService = applicationModuleService;\r\n this.startSessionExpirationChecks();\r\n }\r\n\r\n startSessionExpirationChecks() {\r\n window.setInterval(() => {\r\n var session = this.getCurrentSession();\r\n if (!session) return;\r\n\r\n if (new Date(session.expiration) > new Date()) return;\r\n\r\n var navigateToLogin =\r\n !!localStorage.getItem('impersonatedUser') ||\r\n !!localStorage.getItem('workingUnderOrganization');\r\n\r\n this.logout(navigateToLogin);\r\n\r\n if (!navigateToLogin)\r\n this.dialogService.open({\r\n viewModel: PLATFORM.moduleName('security/login-dialog'),\r\n model: { sessionExpired: true },\r\n });\r\n }, 5000);\r\n }\r\n\r\n login(username, password, verifyIdentityToken) {\r\n return this.httpClient\r\n .post('sessions/', { username, password, verifyIdentityToken })\r\n .then((session) => {\r\n this.applicationInsightsService.setUserId(username, session.user.id);\r\n\r\n this.setCurrentSession(session);\r\n\r\n if (!session.user.isInternal)\r\n return this.refreshCurrentPermissions().then(() => {\r\n this.eventAggregator.publish('user.login');\r\n });\r\n });\r\n }\r\n\r\n async refreshCurrentPermissions() {\r\n var currentPermissions = await this.roleService.getCurrentPermissions();\r\n localStorage.setItem('currentPermissions', JSON.stringify(currentPermissions));\r\n }\r\n\r\n initResetPassword(email) {\r\n return this.httpClient.post(`password-reset/tokens?email=${email}`);\r\n }\r\n\r\n resetPassword(token, newPassword, newPasswordConfirm) {\r\n return this.httpClient.patch(`password-reset/tokens/${token}`, {\r\n newPassword,\r\n newPasswordConfirm,\r\n });\r\n }\r\n\r\n logout(navigateToLogin) {\r\n if (this.isImpersonating()) {\r\n localStorage.removeItem('query-filter.date-range');\r\n }\r\n localStorage.removeItem('currentSession');\r\n localStorage.removeItem('currentPermissions');\r\n localStorage.removeItem('currentUser');\r\n localStorage.removeItem('impersonatedUser');\r\n localStorage.removeItem('workingUnderOrganization');\r\n Cookies.remove('impersonatedUserId');\r\n Cookies.remove('workingUnderOrganizationId');\r\n\r\n this.httpClient\r\n .delete('sessions/current')\r\n .then(() => {\r\n this.eventAggregator.publish('user.logout');\r\n\r\n if (navigateToLogin) this.navigateToLoginScreen();\r\n })\r\n .catch((error) => {\r\n this.logger.error('Error logging out.', error);\r\n });\r\n\r\n this.applicationInsightsService.clearUserId();\r\n }\r\n\r\n // The global-message-notifier component will not receive the initial event because it hasn't subscribed in time\r\n // This event is for all subsequent calls when the session has expired.\r\n // The initial value is called directly from local storage in the components ctor\r\n setCurrentSession(session) {\r\n const { user } = session;\r\n this.eventAggregator.publish('user.messageCountChanged', { count: user.messageCount });\r\n localStorage.setItem('currentSession', JSON.stringify(session));\r\n }\r\n\r\n getCurrentSession() {\r\n return this.parseLocalStorage('currentSession');\r\n }\r\n\r\n getCurrentSessionUser() {\r\n return this.parseLocalStorage('currentSession').user;\r\n }\r\n\r\n getCurrentPermissions() {\r\n return this.parseLocalStorage('currentPermissions');\r\n }\r\n\r\n parseLocalStorage(key) {\r\n var valueString = localStorage.getItem(key);\r\n if (!valueString) return null;\r\n\r\n try {\r\n return JSON.parse(valueString);\r\n } catch (error) {\r\n this.logger.warn(\r\n `Failed to parse local storage value for '${key}': ${valueString}`,\r\n error,\r\n { key, valueString },\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n isCurrentUserLoggedIn() {\r\n var session = this.getCurrentSession();\r\n if (!session) return null;\r\n\r\n if (new Date(session.expiration) < new Date()) {\r\n this.logout();\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n hasPermission(permissionCode) {\r\n var currentPermissions = this.getCurrentPermissions() || [];\r\n if (currentPermissions.length === 0) return false;\r\n\r\n return !!currentPermissions.find((p) => p.code === permissionCode);\r\n }\r\n\r\n hasApplicationModule(applicationModuleId) {\r\n var session = this.getCurrentSession();\r\n if (!session || !session.user || !session.user.applicationModules) return false;\r\n\r\n return !!session.user.applicationModules.find((m) => m.id === applicationModuleId);\r\n }\r\n\r\n isCurrentUserInternal() {\r\n var currentSession = this.getCurrentSession();\r\n if (!currentSession) return false;\r\n\r\n return currentSession.user.isInternal;\r\n }\r\n\r\n isCurrentUserGlobalMessenger() {\r\n var currentSession = this.getCurrentSession();\r\n if (!currentSession) return false;\r\n\r\n return currentSession.user.isInternal && currentSession.user.isGlobalMessenger;\r\n }\r\n\r\n canModifyCustomerData() {\r\n var currentSession = this.getCurrentSession();\r\n if (!currentSession) return false;\r\n\r\n return currentSession.user.canModifyCustomerData;\r\n }\r\n\r\n tryAddAuthentication(message) {\r\n var session = this.getCurrentSession();\r\n if (session) message.headers.add('Authorization', `Bearer ${session.token}`);\r\n }\r\n\r\n tryAddImpersonation(message) {\r\n var impersonatedUser = this.getImpersonatedUser();\r\n\r\n if (!impersonatedUser || !impersonatedUser.id) return;\r\n\r\n var impersonatedUserId = parseInt(impersonatedUser.id);\r\n if (!impersonatedUserId) return;\r\n\r\n message.headers.add('X-Impersonated-User-Id', impersonatedUserId);\r\n }\r\n\r\n tryAddWorkingUnderOrganization(message) {\r\n const workingUnderOrganization = this.getWorkingUnderOrganization();\r\n\r\n if (!workingUnderOrganization || !workingUnderOrganization.id) return;\r\n\r\n const impersonatedOrgId = parseInt(workingUnderOrganization.id);\r\n if (!impersonatedOrgId) return;\r\n\r\n message.headers.add('X-Working-Under-Organization-Id', impersonatedOrgId);\r\n }\r\n\r\n tryUpdateAuthentication(message) {\r\n if (!message.headers) return;\r\n\r\n if (!message.headers.has('x-set-authorization-token')) return;\r\n\r\n var token = message.headers.get('x-set-authorization-token');\r\n var expiration = new Date(JSON.parse(atob(token.split('.')[1])).exp * 1000);\r\n var session = this.getCurrentSession();\r\n if (!session) return;\r\n\r\n session.token = token;\r\n session.expiration = expiration;\r\n this.setCurrentSession(session);\r\n this.httpClient.put('sessions/current');\r\n }\r\n\r\n navigateToLoginScreen() {\r\n this.aurelia.setRoot(PLATFORM.moduleName('security/unauthenticated-app'));\r\n }\r\n\r\n navigateToApp() {\r\n this.aurelia.setRoot(PLATFORM.moduleName('app')).then(() => {\r\n if (!this.redirectAfterLoginFragment) return;\r\n\r\n this.router.navigate(this.redirectAfterLoginFragment);\r\n this.redirectAfterLoginFragment = null;\r\n });\r\n }\r\n\r\n navigateToRoot() {\r\n var loggedIn = this.isCurrentUserLoggedIn();\r\n if (loggedIn) {\r\n this.navigateToApp();\r\n return;\r\n }\r\n\r\n this.redirectAfterLoginFragment = window.location.hash.substring(1);\r\n this.navigateToLoginScreen();\r\n }\r\n\r\n get pendingRedirectAfterlogin() {\r\n return !!this.redirectAfterLoginFragment;\r\n }\r\n\r\n getEffectiveUser() {\r\n if (!!localStorage.getItem('impersonatedUser')) return this.getImpersonatedUser();\r\n\r\n const workingUnderOrganization = this.getWorkingUnderOrganization();\r\n if (workingUnderOrganization) {\r\n const currentUser = this.getCurrentSessionUser();\r\n currentUser.organizationId = workingUnderOrganization.id;\r\n\r\n return currentUser;\r\n }\r\n\r\n return this.getCurrentSessionUser();\r\n }\r\n\r\n isImpersonating() {\r\n return !!localStorage.getItem('impersonatedUser');\r\n }\r\n\r\n isWorkingUnderOrganization() {\r\n return !!localStorage.getItem('workingUnderOrganization');\r\n }\r\n\r\n getImpersonatedUser() {\r\n return this.parseLocalStorage('impersonatedUser');\r\n }\r\n\r\n getWorkingUnderOrganization() {\r\n return this.parseLocalStorage('workingUnderOrganization');\r\n }\r\n\r\n getUserMessageCount() {\r\n var currentSession = this.getCurrentSession();\r\n if (!currentSession) return false;\r\n\r\n return currentSession.user.messageCount;\r\n }\r\n\r\n setUserMessageCount(count) {\r\n var currentSession = this.getCurrentSession();\r\n if (!currentSession) return false;\r\n\r\n currentSession.user.messageCount = count;\r\n this.setCurrentSession(currentSession);\r\n }\r\n\r\n async refreshApplicationModules(orgId) {\r\n var applicationModules = await this.applicationModuleService.getApplicationModules(orgId);\r\n const currentSession = this.getCurrentSession();\r\n currentSession.user.applicationModules = applicationModules;\r\n localStorage.setItem('currentSession', JSON.stringify(currentSession));\r\n }\r\n\r\n async startImpersonation(user) {\r\n Cookies.set('impersonatedUserId', user.id);\r\n localStorage.setItem('impersonatedUser', JSON.stringify(user));\r\n localStorage.removeItem('query-filter.date-range');\r\n\r\n await this.refreshApplicationModules(user.organizationId);\r\n await this.refreshCurrentPermissions();\r\n\r\n this.eventAggregator.publish('impersonation.start');\r\n }\r\n\r\n async startWorkingUnderOrganization(org) {\r\n Cookies.set('workingUnderOrganizationId', org.id);\r\n localStorage.setItem('workingUnderOrganization', JSON.stringify(org));\r\n\r\n await this.refreshApplicationModules(org.id);\r\n await this.refreshCurrentPermissions();\r\n\r\n this.eventAggregator.publish('impersonation.start');\r\n }\r\n\r\n stopImpersonation() {\r\n Cookies.remove('impersonatedUserId');\r\n Cookies.remove('workingUnderOrganizationId');\r\n localStorage.removeItem('impersonatedUser');\r\n localStorage.removeItem('workingUnderOrganization');\r\n localStorage.removeItem('currentPermissions');\r\n localStorage.removeItem('query-filter.date-range');\r\n\r\n const currentSession = this.getCurrentSession();\r\n currentSession.user.applicationModules = [];\r\n localStorage.setItem('currentSession', JSON.stringify(currentSession));\r\n\r\n this.eventAggregator.publish('impersonation.stop');\r\n }\r\n}\r\n","import { ColDef, GridOptions } from 'ag-grid-community';\r\ninterface AgStatefulGridOptionsBuilder {\r\n /**\r\n * Sets or overrides Grid Options\r\n * @example\r\n * defaultColDef: sortable, resizeable, filter, flex:1, enableValue\r\n * grid: suppressRowClickSelection\r\n *\r\n * @return The builder\r\n */\r\n setDefaults(): this;\r\n /**\r\n * Adds column, sorting, and filtering statefulness\r\n * @param gridKey The local storage key of the grid\r\n */\r\n addStatefulness(gridKey: string): this;\r\n withAutoHeight(): this;\r\n build(): GridOptions;\r\n}\r\n\r\nexport default class AgStatefulGridBuilder implements AgStatefulGridOptionsBuilder {\r\n private _gridOptions: GridOptions;\r\n private _defaultGridOptions: GridOptions;\r\n private _columnStateLocalStorageKey: string;\r\n private _pivotStateLocalStorageKey: string;\r\n private _minColumnStateColumnWidth: number;\r\n private _saveColumnStateDebounce: any;\r\n\r\n private constructor(gridOptions?: GridOptions) {\r\n this._gridOptions = gridOptions || {};\r\n this._minColumnStateColumnWidth = 50;\r\n this._defaultGridOptions = {\r\n defaultColDef: {\r\n sortable: true,\r\n resizable: true,\r\n filter: true,\r\n enableValue: true,\r\n flex: 1,\r\n },\r\n suppressRowClickSelection: true,\r\n };\r\n }\r\n\r\n private overrideInvisibleColumnWidths(columnState) {\r\n columnState.forEach((col) => {\r\n if (col.width && col.width < this._minColumnStateColumnWidth) {\r\n delete col.width;\r\n }\r\n });\r\n\r\n return columnState;\r\n }\r\n\r\n private loadColumnStateFromLocalStorage(base) {\r\n const columnStateString = localStorage.getItem(this._columnStateLocalStorageKey);\r\n if (!columnStateString) {\r\n base?.call();\r\n return;\r\n }\r\n\r\n const columnState = JSON.parse(columnStateString);\r\n const pivotState = JSON.parse(localStorage.getItem(this._pivotStateLocalStorageKey));\r\n this.overrideInvisibleColumnWidths(columnState);\r\n this._gridOptions.columnApi.applyColumnState({\r\n state: columnState,\r\n applyOrder: true,\r\n });\r\n\r\n this._gridOptions.columnApi.setPivotMode(Boolean(pivotState));\r\n\r\n base?.call();\r\n }\r\n\r\n saveColumnStateToLocalStorage(base) {\r\n if (this._saveColumnStateDebounce) clearTimeout(this._saveColumnStateDebounce);\r\n\r\n this._saveColumnStateDebounce = setTimeout(() => {\r\n this._saveColumnStateDebounce = null;\r\n\r\n const columnState = this._gridOptions.columnApi.getColumnState();\r\n const isPivotMode = this._gridOptions.columnApi.isPivotMode();\r\n const trimmedColumnState = columnState.map((c) => ({\r\n colId: c.colId,\r\n sort: c.sort,\r\n sortIndex: c.sortIndex,\r\n width: c.width,\r\n pivot: c.pivot,\r\n pivotIndex: c.pivotIndex,\r\n rowGroup: c.rowGroup,\r\n rowGrouproupIndex: c.rowGroupIndex,\r\n }));\r\n localStorage.setItem(\r\n this._columnStateLocalStorageKey,\r\n JSON.stringify(trimmedColumnState),\r\n );\r\n localStorage.setItem(this._pivotStateLocalStorageKey, JSON.stringify(isPivotMode));\r\n }, 1000);\r\n\r\n base?.call();\r\n }\r\n\r\n setDefaults(): this {\r\n const mergedDefaultColDefs: ColDef = {\r\n ...this._gridOptions.defaultColDef,\r\n ...this._defaultGridOptions.defaultColDef,\r\n };\r\n const mergedGridOptions: GridOptions = {\r\n ...this._gridOptions,\r\n ...this._defaultGridOptions,\r\n };\r\n\r\n mergedGridOptions.defaultColDef = mergedDefaultColDefs;\r\n this._gridOptions = mergedGridOptions;\r\n\r\n return this;\r\n }\r\n\r\n addStatefulness(gridKey: string): this {\r\n this._columnStateLocalStorageKey = `column-state.${gridKey}`;\r\n this._pivotStateLocalStorageKey = this._columnStateLocalStorageKey + '.pivot';\r\n\r\n const {\r\n onGridReady,\r\n onColumnMoved,\r\n onColumnResized,\r\n onSortChanged,\r\n onColumnPivotModeChanged,\r\n onColumnPivotChanged,\r\n onColumnRowGroupChanged,\r\n } = this._gridOptions;\r\n this._gridOptions.onGridReady = () => this.loadColumnStateFromLocalStorage(onGridReady);\r\n this._gridOptions.onColumnMoved = () => this.saveColumnStateToLocalStorage(onColumnMoved);\r\n this._gridOptions.onColumnResized = () =>\r\n this.saveColumnStateToLocalStorage(onColumnResized);\r\n this._gridOptions.onSortChanged = () => this.saveColumnStateToLocalStorage(onSortChanged);\r\n this._gridOptions.onColumnPivotModeChanged = () =>\r\n this.saveColumnStateToLocalStorage(onColumnPivotModeChanged);\r\n this._gridOptions.onColumnPivotChanged = () =>\r\n this.saveColumnStateToLocalStorage(onColumnPivotChanged);\r\n this._gridOptions.onColumnRowGroupChanged = () =>\r\n this.saveColumnStateToLocalStorage(onColumnRowGroupChanged);\r\n\r\n return this;\r\n }\r\n\r\n withAutoHeight(): this {\r\n this._gridOptions.domLayout = 'autoHeight';\r\n return this;\r\n }\r\n\r\n static create(gridOptions?: GridOptions) {\r\n return new AgStatefulGridBuilder(gridOptions);\r\n }\r\n\r\n build(): GridOptions {\r\n return this._gridOptions;\r\n }\r\n}\r\n","import { autoinject, BindingEngine } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n validateTrigger,\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SecurityService from 'security/security-service';\r\nimport UserService from 'users/user-service';\r\nimport {\r\n emptyExportTaskCollectionTemplate,\r\n ExportTaskCollectionTemplate,\r\n} from './export-task-collection-template';\r\nimport { ExportTaskCollectionTemplateColumn } from './export-task-collection-template-column';\r\nimport {\r\n emptyExportTaskCollectionTemplateConfiguration,\r\n ExportTaskCollectionTemplateConfiguration,\r\n} from './export-task-collection-template-configuration';\r\nimport { ExportTaskCollectionTemplateFooterOptions } from './export-task-collection-template-footer-options';\r\nimport { ExportTaskCollectionTemplateHeaderOptions } from './export-task-collection-template-header-options';\r\nimport ExportTaskCollectionTemplateService from './export-task-collection-template-service';\r\n@autoinject\r\nexport class ExportTaskCollectionTemplateDetail {\r\n canEdit: boolean;\r\n exportTaskCollectionTemplate: ExportTaskCollectionTemplate;\r\n fieldMappings: Record;\r\n formChanged: boolean;\r\n organizations: any[];\r\n validationController: ValidationController;\r\n organizationRules: ValidationRules;\r\n headerCellTextRules: ValidationRules;\r\n footerCellTextRules: ValidationRules;\r\n\r\n constructor(\r\n private bindingEngine: BindingEngine,\r\n private dialogPresenter: DialogPresenter,\r\n private exportTaskCollectionTemplateService: ExportTaskCollectionTemplateService,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private router: Router,\r\n private securityService: SecurityService,\r\n private userService: UserService,\r\n validationControllerFactory: ValidationControllerFactory,\r\n ) {\r\n this.logger.name = 'label-template-detail';\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n this.canEdit =\r\n this.securityService.hasPermission('EditExportTaskCollectionTemplates') &&\r\n !this.securityService.isImpersonating();\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n async addOrganizationConfiguration() {\r\n const config = emptyExportTaskCollectionTemplateConfiguration();\r\n this.exportTaskCollectionTemplate.organizationConfigurations.push(config);\r\n await this.validationController.validate({\r\n object: this.exportTaskCollectionTemplate,\r\n propertyName: 'organizationConfigurations',\r\n });\r\n this.validationController.addObject(config, this.organizationRules);\r\n }\r\n\r\n async removeOrganizationConfiguration(\r\n organizationConfiguration: ExportTaskCollectionTemplateConfiguration,\r\n ) {\r\n const index =\r\n this.exportTaskCollectionTemplate.organizationConfigurations.indexOf(\r\n organizationConfiguration,\r\n );\r\n this.exportTaskCollectionTemplate.organizationConfigurations.splice(index, 1);\r\n this.validationController.removeObject(organizationConfiguration);\r\n await this.validationController.validate({\r\n object: this.exportTaskCollectionTemplate,\r\n propertyName: 'organizationConfigurations',\r\n });\r\n }\r\n\r\n addHeaderCellText() {\r\n const text = '';\r\n this.exportTaskCollectionTemplate.headerOptions.cellText.push(text);\r\n }\r\n\r\n removeHeaderCellText(text: string) {\r\n const index = this.exportTaskCollectionTemplate.headerOptions.cellText.indexOf(text);\r\n this.exportTaskCollectionTemplate.headerOptions.cellText.splice(index, 1);\r\n }\r\n\r\n addFooterCellText() {\r\n const text = '';\r\n this.exportTaskCollectionTemplate.footerOptions.cellText.push(text);\r\n }\r\n\r\n removeFooterCellText(text: string) {\r\n const index = this.exportTaskCollectionTemplate.footerOptions.cellText.indexOf(text);\r\n this.exportTaskCollectionTemplate.footerOptions.cellText.splice(index, 1);\r\n }\r\n\r\n async onColumnChecked() {\r\n await this.validationController.validate({\r\n object: this.exportTaskCollectionTemplate,\r\n propertyName: 'columns',\r\n });\r\n }\r\n\r\n async save() {\r\n const validationResult = await this.validationController.validate();\r\n if (!validationResult.valid) {\r\n return;\r\n }\r\n\r\n this.pageContext.isLoading = true;\r\n try {\r\n const exportTaskCollectionTemplate =\r\n this.exportTaskCollectionTemplate.id === 0\r\n ? await this.exportTaskCollectionTemplateService.createExportTaskCollectionTemplates(\r\n this.exportTaskCollectionTemplate,\r\n )\r\n : await this.exportTaskCollectionTemplateService.updateExportTaskCollectionTemplates(\r\n this.exportTaskCollectionTemplate,\r\n );\r\n this.exportTaskCollectionTemplate = exportTaskCollectionTemplate;\r\n this.pageContext.showSuccessOverlay(\r\n 'Export task collection template saved successfully.',\r\n );\r\n\r\n this.formChanged = false;\r\n this.router.navigateToRoute(\r\n 'export-task-collection-template-detail',\r\n { id: this.exportTaskCollectionTemplate.id },\r\n { replace: true },\r\n );\r\n } catch (error) {\r\n this.logger.error('Error saving export task collection template', error, {\r\n exportTaskCollectionTemplate: this.exportTaskCollectionTemplate,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Export Task Collection Template',\r\n 'An error occured while saving the export task collection template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n cancel() {\r\n this.exportTaskCollectionTemplate = emptyExportTaskCollectionTemplate();\r\n this.exportTaskCollectionTemplate.columns = this.mapFieldMappingsToExportColumns();\r\n }\r\n\r\n private mapFieldMappingsToExportColumns() {\r\n const exportTaskCollectionTemplateColumns = [] as ExportTaskCollectionTemplateColumn[];\r\n for (var field in this.fieldMappings) {\r\n exportTaskCollectionTemplateColumns.push({\r\n name: field,\r\n displayName: this.fieldMappings[field],\r\n selected: false,\r\n });\r\n }\r\n\r\n return exportTaskCollectionTemplateColumns;\r\n }\r\n\r\n private setupValidation() {\r\n ValidationRules.ensure((m: ExportTaskCollectionTemplate) => m.columns)\r\n .satisfies((cols: ExportTaskCollectionTemplateColumn[]) =>\r\n cols.some((col: ExportTaskCollectionTemplateColumn) => col.selected),\r\n )\r\n .withMessage('At least one field must be selected.')\r\n .ensure((m) => m.organizationConfigurations)\r\n .required()\r\n .minItems(1)\r\n .withMessage(\r\n 'No organizations have been configured. Please click the Add Organization button to add one.',\r\n )\r\n .on(this.exportTaskCollectionTemplate);\r\n\r\n const ensureSingleOccurence = (organizationId: number) => {\r\n return (\r\n this.exportTaskCollectionTemplate.organizationConfigurations.filter(\r\n (config: ExportTaskCollectionTemplateConfiguration) =>\r\n config.organizationId === organizationId,\r\n ).length === 1\r\n );\r\n };\r\n this.organizationRules = ValidationRules.ensure(\r\n (m: ExportTaskCollectionTemplateConfiguration) => m.organizationId,\r\n )\r\n .satisfies((id: number) => id > 0)\r\n .withMessage('Organization is required.')\r\n .satisfies(ensureSingleOccurence)\r\n .withMessage('An organization can only be added once.')\r\n .ensure((m) => m.templateName)\r\n .required().rules;\r\n\r\n this.headerCellTextRules = ValidationRules.ensure(\r\n (m: ExportTaskCollectionTemplateHeaderOptions) => m.cellText,\r\n )\r\n .satisfies((arr: string[]) => arr.every((s) => s.length < 100))\r\n .withMessage('Maximum length allowed for each cell text is 100 characters.').rules;\r\n\r\n this.footerCellTextRules = ValidationRules.ensure(\r\n (m: ExportTaskCollectionTemplateFooterOptions) => m.cellText,\r\n )\r\n .satisfies((arr: string[]) => arr.every((s) => s.length < 100))\r\n .withMessage('Maximum length allowed for each cell text is 100 characters.').rules;\r\n\r\n this.exportTaskCollectionTemplate.organizationConfigurations.forEach(\r\n (config: ExportTaskCollectionTemplateConfiguration) => {\r\n this.validationController.addObject(config, this.organizationRules);\r\n },\r\n );\r\n this.validationController.addObject(\r\n this.exportTaskCollectionTemplate.headerOptions,\r\n this.headerCellTextRules,\r\n );\r\n this.validationController.addObject(\r\n this.exportTaskCollectionTemplate.footerOptions,\r\n this.footerCellTextRules,\r\n );\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n try {\r\n const [organizations, exportTaskCollectionTemplate, fieldMappings] =\r\n await Promise.all([\r\n this.userService.getCurrentUserOrganizations(),\r\n params.id === 'create'\r\n ? emptyExportTaskCollectionTemplate()\r\n : this.exportTaskCollectionTemplateService.getExportTaskCollectionTemplate(\r\n params.id,\r\n ),\r\n this.exportTaskCollectionTemplateService.getExportTaskCollectionTemplateColumns(),\r\n ]);\r\n\r\n this.organizations = organizations;\r\n this.fieldMappings = fieldMappings;\r\n if (exportTaskCollectionTemplate.columns.length === 0) {\r\n exportTaskCollectionTemplate.columns = this.mapFieldMappingsToExportColumns();\r\n }\r\n this.exportTaskCollectionTemplate = exportTaskCollectionTemplate;\r\n this.setupValidation();\r\n } catch (error) {\r\n this.logger.error('Error loading export task collection template.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Export Task Collection Template',\r\n 'An error occurred while loading the export task collection template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n unbind() {\r\n this.exportTaskCollectionTemplate.organizationConfigurations.forEach(\r\n (config: ExportTaskCollectionTemplateConfiguration) => {\r\n this.validationController.removeObject(config);\r\n },\r\n );\r\n }\r\n}\r\n","module.exports = \"\";","import { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport CompareUtility from 'infrastructure/compare-utility';\r\nimport DataGridSelectAll from 'infrastructure/components/data-grid-select-all';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport Organization from 'organizations/organization';\r\nimport RecordStatus, { getRecordStatusOptions } from 'record-status';\r\nimport SecurityService from 'security/security-service';\r\nimport UserService from 'users/user-service';\r\nimport { ExportTaskCollectionTemplate } from './export-task-collection-template';\r\nimport {\r\n ExportTaskCollectionTemplateListQuery,\r\n ExportTaskCollectionTemplateListQueryFilters,\r\n} from './export-task-collection-template-list-query-filters';\r\nimport ExportTaskCollectionTemplateService from './export-task-collection-template-service';\r\nimport UiViewExportTaskCollectionTemplate from './ui-view-export-task-collection-template';\r\n\r\n@autoinject\r\nexport class ExportTaskCollectionTemplateList {\r\n @observable filterText;\r\n\r\n gridOptions: any;\r\n dataGridSelectAll: DataGridSelectAll;\r\n exportTaskCollectionTemplateListQueryFilters: ExportTaskCollectionTemplateListQueryFilters;\r\n\r\n applyFiltersSubscription: Subscription;\r\n clearFiltersSubscription: Subscription;\r\n\r\n recordStatusOptions: SelectorOption[];\r\n selectedRecordStatus: RecordStatus;\r\n\r\n organizations: Organization[];\r\n selectedOrganizations: any[] = [];\r\n filterCount: number;\r\n canEditExportTaskCollectionTemplates: boolean;\r\n\r\n constructor(\r\n private dialogPresenter: DialogPresenter,\r\n private eventAggregator: EventAggregator,\r\n private exportTaskCollectionTemplateService: ExportTaskCollectionTemplateService,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private router: Router,\r\n private securityService: SecurityService,\r\n private userService: UserService,\r\n ) {\r\n this.dataGridSelectAll = new DataGridSelectAll([], ['_displayName']);\r\n this.logger.name = 'export-task-collection-template-list';\r\n this.filterText = '';\r\n\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template:\r\n '',\r\n headerCellTemplate:\r\n '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Configured For (Template Name)',\r\n field: 'displayName',\r\n template: '${data.displayName}',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerClass: 'row-actions',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n },\r\n ],\r\n defaultColDef: {\r\n sortable: true,\r\n },\r\n };\r\n\r\n this.exportTaskCollectionTemplateListQueryFilters =\r\n new ExportTaskCollectionTemplateListQueryFilters();\r\n this.selectedRecordStatus = RecordStatus.ACTIVE;\r\n this.canEditExportTaskCollectionTemplates =\r\n this.securityService.hasPermission('EditExportTaskCollectionTemplates') &&\r\n !this.securityService.isImpersonating();\r\n }\r\n\r\n handleApplyFilters() {\r\n this.router.navigateToRoute(\r\n 'export-task-collection-template-list',\r\n this.exportTaskCollectionTemplateListQueryFilters.getQueryParams(),\r\n );\r\n }\r\n\r\n handleClearFilters() {\r\n this.dataGridSelectAll.allSelected = false;\r\n this.exportTaskCollectionTemplateListQueryFilters.reset();\r\n this.router.navigateToRoute(\r\n 'export-task-collection-template-list',\r\n this.exportTaskCollectionTemplateListQueryFilters.getQueryParams(),\r\n );\r\n }\r\n\r\n filterTextChanged() {\r\n this.dataGridSelectAll.filterDataGridItems(this.filterText);\r\n }\r\n\r\n navigateToDetail(id: number) {\r\n this.router.navigateToRoute('export-task-collection-template-detail', { id });\r\n }\r\n\r\n private async deleteExportTaskCollectionTemplates(ids: number[]) {\r\n if (!ids.length || ids.length === 0) {\r\n return;\r\n }\r\n const itemsToDelete = this.dataGridSelectAll.dataGridItems.filter((x) =>\r\n ids.includes(x.id),\r\n );\r\n const s: string = ids.length > 1 ? 's' : '';\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n `Delete Export Task Collection Template${s}`,\r\n `Are you sure you want to delete ${\r\n ids.length > 1 ? 'these' : 'this'\r\n } export task collection template${s}?`,\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n this.pageContext.isLoading = true;\r\n try {\r\n await this.exportTaskCollectionTemplateService.deleteExportTaskCollectionTemplates(ids);\r\n this.pageContext.showSuccessOverlay(\r\n `Export task collection template${s} deleted successfully.`,\r\n );\r\n\r\n itemsToDelete.forEach((item) => {\r\n item.isActive = false;\r\n item.isSelected = false;\r\n var index = this.dataGridSelectAll.dataGridItems.indexOf(item);\r\n const dataItems = this.dataGridSelectAll.dataGridItems.splice(index, 1);\r\n this.dataGridSelectAll.dataGridItems = dataItems;\r\n });\r\n } catch (error) {\r\n this.logger.error(`Error deleting export task collection template${s}.`, error, {\r\n exportTaskCollectionTemplateIds: ids,\r\n });\r\n this.handleDeleteError(error, s.length);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async deleteExportTaskCollectionTemplate(item: UiViewExportTaskCollectionTemplate) {\r\n await this.deleteExportTaskCollectionTemplates([item.id]);\r\n }\r\n\r\n async deleteSelectedTemplates() {\r\n const idsToDelete = this.dataGridSelectAll.selectedDataGridItems.map((i) => i.id);\r\n await this.deleteExportTaskCollectionTemplates(idsToDelete);\r\n }\r\n\r\n handleDeleteError(error, multiple) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Deleting Label Template' + (multiple ? 's' : ''),\r\n this.getApiErrorMessage(error.apiErrorCode, multiple),\r\n );\r\n }\r\n\r\n getApiErrorMessage(errorCode, multiple) {\r\n if (errorCode === 2)\r\n return 'You dont have access to delete the label template' + (multiple ? 's' : '');\r\n\r\n return 'An unexpected error occurred while trying to delete label templates. Please try again later.';\r\n }\r\n\r\n canActivate(_params: ExportTaskCollectionTemplateListQuery, routeConfig) {\r\n return this.exportTaskCollectionTemplateListQueryFilters.ensureSingleApplyFilterHandler(\r\n routeConfig,\r\n );\r\n }\r\n\r\n activate(params: ExportTaskCollectionTemplateListQuery) {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.apply',\r\n this.handleApplyFilters,\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.clear',\r\n this.handleClearFilters,\r\n );\r\n this.exportTaskCollectionTemplateListQueryFilters.setFilterValues(params);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.recordStatusOptions = getRecordStatusOptions();\r\n\r\n const [organizations, exportTaskCollectionTemplates] = await Promise.all([\r\n this.userService.getCurrentUserOrganizations(),\r\n this.exportTaskCollectionTemplateService.getExportTaskCollectionTemplates(\r\n params,\r\n ),\r\n ]);\r\n\r\n this.organizations = organizations;\r\n const dataGridItems = exportTaskCollectionTemplates.map(\r\n (t: ExportTaskCollectionTemplate) =>\r\n new UiViewExportTaskCollectionTemplate(\r\n t.id,\r\n t.organizationConfigurations,\r\n t.isActive,\r\n organizations,\r\n ),\r\n );\r\n\r\n this.dataGridSelectAll.dataGridItems = dataGridItems;\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error loading export task collection templates.', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Export Task Collection Templates',\r\n 'An error occurred while loading the export task collection templates. Please try again later.',\r\n );\r\n }\r\n })();\r\n }\r\n\r\n canDeactivate() {\r\n this.applyFiltersSubscription?.dispose();\r\n this.clearFiltersSubscription?.dispose();\r\n }\r\n}\r\n","module.exports = \"\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".export-task-collection-template-checkbox-label-item{float:left;width:300px}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient, HttpResponseMessage } from 'aurelia-http-client';\r\nimport { GlobalMessage, GlobalMessageApiRequest } from './global-message';\r\nimport { GlobalMessageNotification } from './global-message-notification';\r\nimport { GlobalMessageSearchType } from './global-message-search-type';\r\n\r\n@autoinject\r\nexport class GlobalMessagingService {\r\n private baseRoute: string;\r\n\r\n constructor(private httpClient: HttpClient) {\r\n this.baseRoute = 'global-messaging';\r\n }\r\n\r\n //admin endpoints\r\n\r\n getGlobalMessages(id?: number): Promise {\r\n return this.httpClient.get(`${this.baseRoute}${id ? '/' + id : ''}`) as unknown as Promise<\r\n GlobalMessage[]\r\n >;\r\n }\r\n\r\n createGlobalMessage(request: GlobalMessageApiRequest): Promise {\r\n return this.httpClient.post(this.baseRoute, request) as unknown as Promise;\r\n }\r\n\r\n updateGlobalMessage(\r\n id: number,\r\n request: GlobalMessageApiRequest,\r\n ): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}`,\r\n request,\r\n ) as unknown as Promise;\r\n }\r\n\r\n approveGlobalMessage(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/approve`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n deleteGlobalMessage(id: number): Promise {\r\n return this.httpClient.delete(\r\n `${this.baseRoute}/${id}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n //user endpoints\r\n\r\n countUserGlobalMessageNotifications(): Promise {\r\n return this.httpClient.get(`${this.baseRoute}/count`) as unknown as Promise;\r\n }\r\n\r\n getUserGlobalMessageNotifications(\r\n searchType: GlobalMessageSearchType = GlobalMessageSearchType.Default,\r\n ): Promise {\r\n return this.httpClient.get(\r\n `${this.baseRoute}/notifications?searchType=${searchType.toLowerCase()}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n readUserMessage(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/read`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n unReadUserMessage(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/unread`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n deleteUserMessage(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/delete`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n unDeleteUserMessage(id: number): Promise {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${id}/undelete`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { DashboardTemplateWidget } from '../dashboard-widgets/widget-registry';\r\nimport { WidgetPlacement } from '../dashboard-widgets/widget-layout-editor/widget-layout-editor-item';\r\n\r\nexport function toWidgetRequest(widget: WidgetPlacement): DashboardTemplateWidget {\r\n return {\r\n widgetToken: widget.id,\r\n x: widget.x,\r\n y: widget.y,\r\n width: widget.w,\r\n height: widget.h,\r\n };\r\n}\r\n\r\nexport interface DashboardTemplateDefault {\r\n categoryId: number;\r\n categoryName: string;\r\n categoryDescription: string;\r\n activeTemplateId: number | null;\r\n activeTemplateName: string | null;\r\n lastUpdated: string | null;\r\n}\r\n\r\nexport interface DashboardTemplateSummary {\r\n id: number;\r\n name: string;\r\n isActive: boolean;\r\n}\r\n\r\n@autoinject\r\nexport default class DashboardTemplateService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getCurrentTemplateWidgets(): Promise {\r\n return this.httpClient.get('dashboard-templates/current') as unknown as Promise<\r\n DashboardTemplateWidget[] | null\r\n >;\r\n }\r\n\r\n getDashboardTemplateDefaults(): Promise {\r\n return this.httpClient.get(\r\n 'dashboard-templates/defaults',\r\n ) as unknown as Promise;\r\n }\r\n\r\n getTemplatesForCategory(categoryId: number): Promise {\r\n return this.httpClient.get(\r\n `dashboard-templates/category/${categoryId}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getTemplateWidgets(templateId: number): Promise {\r\n return this.httpClient.get(\r\n `dashboard-templates/${templateId}/widgets`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n activateTemplate(templateId: number): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/${templateId}/activate`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n deactivateTemplate(templateId: number): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/${templateId}/deactivate`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n createTemplate(categoryId: number, name: string, widgets: WidgetPlacement[]): Promise {\r\n return this.httpClient.post(`dashboard-templates/category/${categoryId}`, {\r\n name,\r\n widgets: widgets.map(toWidgetRequest),\r\n }) as unknown as Promise;\r\n }\r\n\r\n updateTemplate(templateId: number, name: string, widgets: WidgetPlacement[]): Promise {\r\n return this.httpClient.put(`dashboard-templates/${templateId}`, {\r\n name,\r\n widgets: widgets.map(toWidgetRequest),\r\n }) as unknown as Promise;\r\n }\r\n\r\n archiveTemplate(templateId: number): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/${templateId}/archive`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getOrganizationDashboardTemplates(organizationId: number): Promise {\r\n return this.httpClient.get(\r\n `dashboard-templates/organization/${organizationId}/defaults`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getOrganizationTemplatesForCategory(\r\n organizationId: number,\r\n categoryId: number,\r\n ): Promise {\r\n return this.httpClient.get(\r\n `dashboard-templates/organization/${organizationId}/category/${categoryId}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getOrganizationTemplateWidgets(\r\n organizationId: number,\r\n templateId: number,\r\n ): Promise {\r\n return this.httpClient.get(\r\n `dashboard-templates/organization/${organizationId}/${templateId}/widgets`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n activateOrganizationTemplate(organizationId: number, templateId: number): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/organization/${organizationId}/${templateId}/activate`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n deactivateOrganizationTemplate(organizationId: number, templateId: number): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/organization/${organizationId}/${templateId}/deactivate`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n\r\n createOrganizationTemplate(\r\n organizationId: number,\r\n categoryId: number,\r\n name: string,\r\n widgets: WidgetPlacement[],\r\n ): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/organization/${organizationId}/category/${categoryId}`,\r\n { name, widgets: widgets.map(toWidgetRequest) },\r\n ) as unknown as Promise;\r\n }\r\n\r\n updateOrganizationTemplate(\r\n organizationId: number,\r\n templateId: number,\r\n name: string,\r\n widgets: WidgetPlacement[],\r\n ): Promise {\r\n return this.httpClient.put(\r\n `dashboard-templates/organization/${organizationId}/${templateId}`,\r\n { name, widgets: widgets.map(toWidgetRequest) },\r\n ) as unknown as Promise;\r\n }\r\n\r\n archiveOrganizationTemplate(organizationId: number, templateId: number): Promise {\r\n return this.httpClient.post(\r\n `dashboard-templates/organization/${organizationId}/${templateId}/archive`,\r\n null,\r\n ) as unknown as Promise;\r\n }\r\n}\r\n","import SelectorOption from 'infrastructure/selector-option';\r\nimport Sample from 'requests/sample';\r\nimport SegmentationTemplate from 'segmentation-templates/segmentation-template';\r\nimport SegmentationTemplateSegment from 'segmentation-templates/segmentation-template-segment';\r\n\r\nexport default class SegmentationSampleGridColDataFactory {\r\n private _segmentationTemplates: SegmentationTemplate[];\r\n private _samples: Sample[];\r\n private _requiredSegmentationTemplates: SegmentationTemplate[];\r\n private _segmentationTemplateSelectorOptions: SelectorOption[];\r\n\r\n private _lookupSegmenationTemplates: SegmentationTemplate[];\r\n private _nonLookupSegmentationTemplates: SegmentationTemplate[];\r\n private _groupedLookupSegments: Record;\r\n\r\n constructor(segmenationTemplates: SegmentationTemplate[], samples: Sample[]) {\r\n this._segmentationTemplates = segmenationTemplates || [];\r\n this._samples = samples || [];\r\n this._requiredSegmentationTemplates = [];\r\n this._lookupSegmenationTemplates = [];\r\n this._nonLookupSegmentationTemplates = [];\r\n this._groupedLookupSegments = {};\r\n\r\n this.init();\r\n }\r\n\r\n public get samples(): Sample[] {\r\n return this._samples;\r\n }\r\n\r\n public get segmentationTemplateSelectorOptions(): SelectorOption[] {\r\n return this._segmentationTemplateSelectorOptions;\r\n }\r\n\r\n public get lookupSegmentationTemplates(): SegmentationTemplate[] {\r\n return this._lookupSegmenationTemplates;\r\n }\r\n\r\n public get nonLookupSegmentationTemplates(): SegmentationTemplate[] {\r\n return this._nonLookupSegmentationTemplates;\r\n }\r\n\r\n public get groupedLookupSegmentationTemplates(): Record {\r\n return this._groupedLookupSegments;\r\n }\r\n\r\n public lookupParentSegment(\r\n key: string,\r\n groupedLookupSegments?: Record,\r\n ): SegmentationTemplateSegment {\r\n const groups = groupedLookupSegments || this._groupedLookupSegments;\r\n return groups[key].find((sts: SegmentationTemplateSegment) => sts.parentSegmentId === null);\r\n }\r\n\r\n public lookupChildSegment(\r\n key: string,\r\n groupedLookSegments?: Record,\r\n ): SegmentationTemplateSegment {\r\n const groups = groupedLookSegments || this._groupedLookupSegments;\r\n return groups[key].find(\r\n (sts: SegmentationTemplateSegment) =>\r\n sts.parentSegmentId !== null && sts.parentSegmentId >= 0,\r\n );\r\n }\r\n\r\n public getSegmentationTemplateById(id: number): SegmentationTemplate {\r\n return this._segmentationTemplates.find((x) => x.id === id);\r\n }\r\n\r\n public getSegmentationTemplateByName(name: string): SegmentationTemplate {\r\n return this._segmentationTemplates.find((x) => x.name === name);\r\n }\r\n\r\n public getLookupSegmentationTemplateById(id: number): SegmentationTemplate {\r\n return this.filterSegmentationTemplatesByType(this._segmentationTemplates, true).find(\r\n (x) => x.id === id,\r\n );\r\n }\r\n\r\n public getNonLookupSegmentationTemplateById(id: number): SegmentationTemplate {\r\n return this.filterSegmentationTemplatesByType(this._segmentationTemplates, false).find(\r\n (x) => x.id === id,\r\n );\r\n }\r\n\r\n private init() {\r\n //HACK: This is a serialization issue and should be fixed on server side\r\n this._segmentationTemplates.forEach((st) => {\r\n this._samples.forEach((s) => this.fixupSegmentNames(s, st));\r\n });\r\n\r\n this.getRequiredSegmentationSegments();\r\n this._lookupSegmenationTemplates = this.filterSegmentationTemplatesByType(\r\n this._requiredSegmentationTemplates,\r\n true,\r\n );\r\n this._nonLookupSegmentationTemplates = this.filterSegmentationTemplatesByType(\r\n this._requiredSegmentationTemplates,\r\n false,\r\n );\r\n this._groupedLookupSegments = this.groupLookupSegments();\r\n this._segmentationTemplateSelectorOptions = this._segmentationTemplates.map((o) => {\r\n return {\r\n value: o.id,\r\n title: o.name,\r\n } as SelectorOption;\r\n });\r\n this._segmentationTemplateSelectorOptions.unshift({ value: null, title: 'none' });\r\n }\r\n\r\n private fixupSegmentNames(sample: any, segmentationTemplate: any) {\r\n if (!sample.segments) return;\r\n\r\n var segmentNames = Object.keys(sample.segments);\r\n\r\n for (let segment of segmentationTemplate.segments) {\r\n // Find match ignoring case.\r\n let segmentName = segmentNames.find(\r\n (n) => n.localeCompare(segment.name, 'en', { sensitivity: 'base' }) === 0,\r\n );\r\n\r\n // If casing is different, copy value to correct naming of property and delete old property.\r\n if (segment.name !== segmentName) {\r\n sample.segments[segment.name] = sample.segments[segmentName];\r\n delete sample.segments[segmentName];\r\n }\r\n }\r\n }\r\n\r\n private getRequiredSegmentationSegments(): void {\r\n const segmentKeys: string[] = [];\r\n const segmentKey = (key: string, id: number) => `${key}_${id}`;\r\n\r\n this._samples.forEach((sample) => {\r\n if (sample.segments) {\r\n for (let k in sample.segments) {\r\n segmentKeys.push(segmentKey(k, sample.segmentationTemplateId));\r\n }\r\n }\r\n });\r\n const uniqueSampleSegmentKeys = [...new Set(segmentKeys)];\r\n\r\n this._segmentationTemplates.forEach((st) => {\r\n const matchedTemplateSegments = st.segments.filter((seg) =>\r\n uniqueSampleSegmentKeys.includes(segmentKey(seg.name, seg.segmentationTemplateId)),\r\n );\r\n if (matchedTemplateSegments.length === 0) {\r\n return;\r\n }\r\n\r\n const clone = Object.assign({}, st);\r\n clone.segments = matchedTemplateSegments;\r\n this._requiredSegmentationTemplates.push(clone);\r\n });\r\n }\r\n\r\n private filterSegmentationTemplatesByType(\r\n segmenationTemplates: SegmentationTemplate[],\r\n lookupType: boolean,\r\n ): SegmentationTemplate[] {\r\n const filteredTemplates: SegmentationTemplate[] = [];\r\n segmenationTemplates.forEach((st) => {\r\n let segments: SegmentationTemplateSegment[];\r\n if (lookupType) {\r\n segments = st.segments.filter((sts) => sts.values);\r\n } else {\r\n segments = st.segments.filter((sts) => !sts.values);\r\n }\r\n\r\n if (!segments.length) {\r\n return;\r\n }\r\n\r\n const clone = Object.assign({}, st);\r\n clone.segments = segments;\r\n filteredTemplates.push(clone);\r\n });\r\n\r\n return filteredTemplates;\r\n }\r\n\r\n public groupLookupSegments(\r\n segments?: SegmentationTemplateSegment[],\r\n ): Record {\r\n segments =\r\n segments ||\r\n this._lookupSegmenationTemplates.concat.apply(\r\n [],\r\n this._lookupSegmenationTemplates.map((lst) => lst.segments),\r\n );\r\n\r\n const groups: Record = {};\r\n segments.forEach((segment: SegmentationTemplateSegment) => {\r\n let segmentId = null;\r\n\r\n if (segment.parentSegmentId === undefined && !groups[segment.id]) {\r\n groups[segment.id] = [];\r\n segmentId = segment.id;\r\n } else if (\r\n segment.parentSegmentId !== null &&\r\n segment.parentSegmentId !== undefined &&\r\n !groups[segment.parentSegmentId]\r\n ) {\r\n groups[segment.parentSegmentId] = [];\r\n segmentId = segment.parentSegmentId;\r\n } else if (segment.parentSegmentId === null || segment.parentSegmentId === undefined) {\r\n segmentId = segment.id;\r\n } else {\r\n segmentId = segment.parentSegmentId;\r\n }\r\n\r\n if (groups[segmentId] === undefined) {\r\n groups[segmentId] = [];\r\n }\r\n groups[segmentId].push(segment);\r\n });\r\n\r\n return groups;\r\n }\r\n}\r\n","import { CapPlanTriggerOutcome, CapPlanTriggerResult } from './contracts/cap-plan-trigger-result';\r\n\r\nexport interface CapPlanTriggerResultMessage {\r\n title: string;\r\n message: string;\r\n}\r\n\r\n// Used when both steps have the same outcome.\r\nconst sameOutcomeMessages: Record = {\r\n Triggered: {\r\n title: 'CAP Plan Triggered',\r\n message: 'A remediation and follow-up tasks were created for this test.',\r\n },\r\n AlreadyTriggered: {\r\n title: 'CAP Plan Already Triggered',\r\n message:\r\n 'A remediation and follow-up tasks already exist for this test, so nothing new was created.',\r\n },\r\n NoMatchingCapPlan: {\r\n title: 'No Matching CAP Plan',\r\n message:\r\n 'Nothing was created because no active CAP plan matches this test. Check that a CAP plan covers its test method and sample point.',\r\n },\r\n NotEmmaTest: {\r\n title: 'CAP Plan Not Triggered',\r\n message: 'Nothing was created because this test is not linked to a sample point.',\r\n },\r\n};\r\n\r\nconst remediationPhrases: Record = {\r\n Triggered: 'A remediation was created',\r\n AlreadyTriggered: 'A remediation already existed',\r\n NoMatchingCapPlan: 'No remediation was created because no active CAP plan matches this test',\r\n NotEmmaTest: 'No remediation was created because this test is not linked to a sample point',\r\n};\r\n\r\nconst taskGenerationPhrases: Record = {\r\n Triggered: 'Follow-up tasks were created',\r\n AlreadyTriggered: 'Follow-up tasks already existed',\r\n NoMatchingCapPlan: 'No follow-up tasks were created because no active CAP plan matches this test',\r\n NotEmmaTest: 'No follow-up tasks were created because this test is not linked to a sample point',\r\n};\r\n\r\n// Turns a trigger result into the title and message shown to the user.\r\nexport function describeCapPlanTriggerResult(\r\n result: CapPlanTriggerResult,\r\n): CapPlanTriggerResultMessage {\r\n const { remediationOutcome, taskGenerationOutcome } = result;\r\n\r\n if (remediationOutcome === taskGenerationOutcome) return sameOutcomeMessages[remediationOutcome];\r\n\r\n // The two steps are recorded separately, so one can already be done when the other is not.\r\n const somethingCreated =\r\n remediationOutcome === 'Triggered' || taskGenerationOutcome === 'Triggered';\r\n\r\n return {\r\n title: somethingCreated ? 'CAP Plan Triggered' : 'CAP Plan Not Triggered',\r\n message: `${remediationPhrases[remediationOutcome]}. ${taskGenerationPhrases[taskGenerationOutcome]}.`,\r\n };\r\n}\r\n","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport SecurityService from '../security/security-service';\r\nimport apiErrorsInterceptor from './api-errors/api-errors-interceptor';\r\nimport DialogPresenter from './dialogs/dialog-presenter';\r\n\r\n@inject(HttpClient, SecurityService, EventAggregator, DialogPresenter)\r\nexport default class HttpClientConfigurator {\r\n constructor(httpClient, securityService, eventAggregator, dialogPresenter) {\r\n this.httpClient = httpClient;\r\n this.securityService = securityService;\r\n this.eventAggregator = eventAggregator;\r\n this.dialogPresenter = dialogPresenter;\r\n }\r\n\r\n checkClientVersion(message) {\r\n const clientVersion = message?.headers?.get('x-client-update-to');\r\n clientVersion\r\n ? this.eventAggregator.publish('client.refresh', { clientVersion })\r\n : this.eventAggregator.publish('client.isCurrent');\r\n\r\n return clientVersion;\r\n }\r\n\r\n configure() {\r\n this.httpClient.configure((config) =>\r\n config\r\n .withBaseUrl('/api/')\r\n .withHeader('X-Requested-With', 'XMLHttpRequest')\r\n .withHeader('X-Client-Version', portalClientVersion)\r\n .withInterceptor(apiErrorsInterceptor)\r\n .withInterceptor({\r\n request: (message) => {\r\n this.securityService.tryAddAuthentication(message);\r\n this.securityService.tryAddImpersonation(message);\r\n this.securityService.tryAddWorkingUnderOrganization(message);\r\n\r\n return message;\r\n },\r\n response: (message) => {\r\n this.securityService.tryUpdateAuthentication(message);\r\n\r\n this.checkClientVersion(message);\r\n\r\n if (message.response && message.content !== undefined)\r\n return message.content;\r\n\r\n return message;\r\n },\r\n responseError: async (message) => {\r\n const clientVersion = this.checkClientVersion(message);\r\n\r\n if (\r\n clientVersion &&\r\n clientVersion !== portalClientVersion &&\r\n (await this.dialogPresenter.showClientVersionReloadDialog())\r\n )\r\n window.location.reload();\r\n\r\n throw message;\r\n },\r\n }),\r\n );\r\n }\r\n}\r\n","enum OutcomeStatus {\r\n ALL = 'All',\r\n PASS = 'Pass',\r\n FAIL = 'Fail',\r\n INCOMPLETE = 'Incomplete',\r\n}\r\n\r\nexport default OutcomeStatus;\r\n\r\nexport function getOutcomeStatusOptions() {\r\n return [\r\n { value: OutcomeStatus.ALL, title: 'All' },\r\n { value: OutcomeStatus.PASS, title: 'Pass' },\r\n { value: OutcomeStatus.FAIL, title: 'Fail' },\r\n { value: OutcomeStatus.INCOMPLETE, title: 'Incomplete' },\r\n ];\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class LabService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getLabs(searchText) {\r\n return this.httpClient.get('labs/');\r\n }\r\n\r\n getAdminLabs() {\r\n return this.httpClient.get('labs/admin/labs/');\r\n }\r\n\r\n getLab(id) {\r\n return this.httpClient.get(`labs/${id}`);\r\n }\r\n\r\n saveLab(lab) {\r\n return this.httpClient.post('labs/', lab);\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n validateTrigger,\r\n} from 'aurelia-validation';\r\nimport FormViewModel from 'infrastructure/contracts/form-view-model';\r\nimport SimpleMDE from 'simplemde/src/js/simplemde';\r\nimport DialogPresenter from '../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../infrastructure/logger';\r\nimport PageContext from '../infrastructure/page-context';\r\nimport SecurityService from '../security/security-service';\r\nimport { GlobalMessage, GlobalMessageApiRequest } from './global-message';\r\nimport { GlobalMessagingService } from './global-messaging-service';\r\n\r\n@autoinject\r\nexport class GlobalMessageDetail implements FormViewModel {\r\n formChanged: boolean;\r\n validationController: ValidationController;\r\n form: GlobalMessage;\r\n simplemdeEditor: SimpleMDE;\r\n editorTextarea: any;\r\n\r\n canEdit: boolean;\r\n canView: boolean;\r\n currentUserId: number;\r\n isReadOnly: boolean;\r\n\r\n constructor(\r\n private logger: Logger,\r\n private dialogPresenter: DialogPresenter,\r\n private globalMessagingService: GlobalMessagingService,\r\n private pageContext: PageContext,\r\n private securityService: SecurityService,\r\n private router: Router,\r\n validationControllerFactory: ValidationControllerFactory,\r\n ) {\r\n this.logger.name = 'global-message-detail';\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n }\r\n\r\n handleFormChange(): void {\r\n this.formChanged = true;\r\n }\r\n\r\n handleEditorChanged() {\r\n if (!this.form || this.isReadOnly) return;\r\n\r\n this.form.message = this.simplemdeEditor?.value();\r\n this.handleFormChange();\r\n }\r\n\r\n async loadGlobalMessage(id: number) {\r\n try {\r\n this.pageContext.isLoading = true;\r\n const globalMessage = await this.globalMessagingService.getGlobalMessages(id);\r\n\r\n this.form = globalMessage[0];\r\n this.isReadOnly = this.form.approvals.length === 2;\r\n } catch (error) {\r\n this.logger.error(`Error loading global message '${id}'`, error);\r\n this.dialogPresenter.showAlert(\r\n 'Error loading Global Message',\r\n 'An error occured whild loading the global message. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async approve() {\r\n try {\r\n this.pageContext.isLoading = true;\r\n const globalMessage = await this.globalMessagingService.approveGlobalMessage(\r\n this.form.id,\r\n );\r\n this.form = globalMessage;\r\n this.isReadOnly = this.form.approvals.length === 2;\r\n } catch (error) {\r\n this.logger.error('Error approving global message', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Approving Global Message',\r\n 'An error occured while approving this global message. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async save() {\r\n try {\r\n this.pageContext.isLoading = true;\r\n\r\n this.form.message = this.simplemdeEditor.value();\r\n const { id } = this.form;\r\n const request: GlobalMessageApiRequest = {\r\n title: this.form.title,\r\n message: this.form.message,\r\n };\r\n\r\n if (id === 0) {\r\n await this.globalMessagingService.createGlobalMessage(request);\r\n } else {\r\n await this.globalMessagingService.updateGlobalMessage(id, request);\r\n }\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('CAP plan saved successfully');\r\n this.router.navigateToRoute('global-message-list');\r\n } catch (error) {\r\n this.logger.error('Error saving global message', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Global Message',\r\n 'An error occured while saving this global message. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n cancel() {\r\n this.router.navigateToRoute('global-message-list');\r\n }\r\n\r\n async deletePermanently() {\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Permanently Delete Global Message?',\r\n 'Confirm you wish to permanently delete this global message. This message will not be viewable to anyone.',\r\n 'Confirm',\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n try {\r\n this.pageContext.isLoading = true;\r\n await this.globalMessagingService.deleteGlobalMessage(this.form.id);\r\n\r\n this.router.navigateToRoute('global-message-list');\r\n } catch (error) {\r\n this.logger.error('Error permanently deleting global message', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Permanently Deleting Global Message',\r\n 'An error occured while Permanently Deleting this global message. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async canActivate(params: any): Promise {\r\n if (!this.securityService.isCurrentUserGlobalMessenger()) return false;\r\n\r\n const { id } = params;\r\n if (id == 'create') {\r\n this.form = {\r\n id: 0,\r\n title: '',\r\n message: '',\r\n createDateTime: '',\r\n isActive: false,\r\n };\r\n return true;\r\n }\r\n\r\n await this.loadGlobalMessage(id);\r\n const user = this.securityService.getCurrentSessionUser();\r\n this.currentUserId = user.id;\r\n\r\n return true;\r\n }\r\n\r\n bind(): void {\r\n ValidationRules.ensure((f: GlobalMessage) => f.title)\r\n .required()\r\n .maxLength(100)\r\n .ensure((f: GlobalMessage) => f.message)\r\n .required()\r\n .on(this.form);\r\n }\r\n\r\n attached() {\r\n this.simplemdeEditor = new SimpleMDE({\r\n element: this.editorTextarea,\r\n toolbar: [\r\n 'bold',\r\n 'italic',\r\n 'heading',\r\n '|',\r\n 'quote',\r\n 'unordered-list',\r\n 'ordered-list',\r\n '|',\r\n 'preview',\r\n 'side-by-side',\r\n 'fullscreen',\r\n '|',\r\n 'guide',\r\n ],\r\n insertTexts: {\r\n link: ['[', '](https://)'],\r\n },\r\n });\r\n\r\n this.simplemdeEditor.value(this.form.message || '');\r\n this.simplemdeEditor.codemirror.on('change', this.handleEditorChanged.bind(this));\r\n if (this.isReadOnly) {\r\n this.simplemdeEditor.togglePreview();\r\n }\r\n }\r\n\r\n detached() {\r\n this.simplemdeEditor?.codemirror.off('change', this.handleEditorChanged.bind(this));\r\n this.simplemdeEditor?.toTextArea();\r\n this.simplemdeEditor = null;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { GridOptions } from 'ag-grid-community';\r\nimport { Grid } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport DialogPresenter from '../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../infrastructure/logger';\r\nimport { GlobalMessage } from './global-message';\r\nimport { globalMessageGridOptions } from './global-message-grid';\r\nimport { GlobalMessagingService } from './global-messaging-service';\r\n\r\n@autoinject\r\nexport class GlobalMessageList {\r\n gridOptions: GridOptions;\r\n globalMessageGrid: any;\r\n globalMessages: GlobalMessage[];\r\n\r\n constructor(\r\n private logger: Logger,\r\n private dialogPresenter: DialogPresenter,\r\n private globalMessageService: GlobalMessagingService,\r\n ) {\r\n this.logger.name = 'global-message-list';\r\n }\r\n\r\n async loadGlobalMessageData() {\r\n try {\r\n this.globalMessages = await this.globalMessageService.getGlobalMessages();\r\n } catch (error) {\r\n this.logger.error('Error loading global messages', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error loading Global Messages',\r\n 'An error occured whild loading global messages. Please try again later.',\r\n );\r\n }\r\n\r\n this.gridOptions.api?.setRowData(this.globalMessages);\r\n }\r\n\r\n activate() {\r\n this.loadGlobalMessageData();\r\n }\r\n\r\n attached() {\r\n this.gridOptions = globalMessageGridOptions;\r\n this.gridOptions.rowData = this.globalMessages || [];\r\n\r\n new Grid(this.globalMessageGrid, this.gridOptions);\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\nif (!Element.prototype.closest) {\r\n Element.prototype.closest = function (s) {\r\n var el = this;\r\n\r\n do {\r\n if (Element.prototype.matches.call(el, s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { ManageTestMethodDataRow } from './manage-test-method-data-row';\r\n\r\n@autoinject\r\nexport class TestMethodManagementService {\r\n private baseRoute: string;\r\n constructor(private httpClient: HttpClient) {\r\n this.baseRoute = 'test-method-management/organization';\r\n }\r\n\r\n fetchOrganizationTestMethods(organizationId: number): Promise {\r\n return this.httpClient.get(`${this.baseRoute}/${organizationId}`) as unknown as Promise<\r\n ManageTestMethodDataRow[]\r\n >;\r\n }\r\n\r\n hideOrganizationTestMethods(organizationId: number, organizationTestMethodIds: number[]) {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${organizationId}/bulk-hide`,\r\n organizationTestMethodIds,\r\n );\r\n }\r\n\r\n showOrganizationTestMethods(organizationId: number, organizationTestMethodIds: number[]) {\r\n return this.httpClient.put(\r\n `${this.baseRoute}/${organizationId}/bulk-show`,\r\n organizationTestMethodIds,\r\n );\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@autoinject\r\nexport default class DistributionGroupService {\r\n constructor(private httpClient: HttpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getDistributionGroups(organizationId: number) {\r\n return this.httpClient.get(`distribution-groups?organizationId=${organizationId}`);\r\n }\r\n}\r\n","import marked from 'marked';\r\nimport SimpleMDE from 'simplemde';\r\nimport { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport FaqGroupService from './faq-group-service';\r\nimport FaqService from './faq-service';\r\n\r\n@inject(Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, FaqGroupService, FaqService)\r\nexport default class FaqDetail {\r\n @observable selectedFaqGroups;\r\n\r\n constructor(router, validationControllerFactory, pageContext, logger, dialogPresenter, faqGroupService, faqService) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'faq-detail';\r\n this.dialogPresenter = dialogPresenter;\r\n this.faqGroupService = faqGroupService;\r\n this.faqService = faqService;\r\n this.selectedFaqGroups = [];\r\n }\r\n\r\n selectedFaqGroupsChanged() {\r\n if (!this.faq)\r\n return;\r\n\r\n if (this.selectedFaqGroups && this.selectedFaqGroups.length) {\r\n this.faq.faqGroupId = this.selectedFaqGroups[0].id;\r\n this.faq.faqGroupName = this.selectedFaqGroups[0].name;\r\n } else {\r\n this.faq.faqGroupId = 0;\r\n this.faq.faqGroupName = '';\r\n }\r\n }\r\n\r\n activate(params) {\r\n this.faqGroupId = parseInt(params.faqGroupId);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var results = await Promise.all([\r\n params.id === 'create' ?\r\n Promise.resolve({ isActive: true }) :\r\n this.faqService.getFaq(params.id),\r\n this.faqGroupService.getFaqGroups()\r\n ]);\r\n\r\n this.faq = results[0];\r\n\r\n if (this.faq.faqGroupId)\r\n this.faqGroupId = this.faq.faqGroupId;\r\n\r\n this.faqGroups = results[1];\r\n\r\n var selectedFaqGroup = this.faqGroups.find(faqGroup => faqGroup.id === (this.faq.faqGroupId || this.faqGroupId));\r\n\r\n this.selectedFaqGroups = selectedFaqGroup ? [selectedFaqGroup] : [];\r\n \r\n ValidationRules\r\n .ensure('question').displayName('Question').required().maxLength(512)\r\n .ensure('answer').displayName('Answer').required()\r\n .on(this.faq);\r\n\r\n this.validationController.addObject(this.faq);\r\n\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error while loading FAQ', error);\r\n this.pageContext.isLoading = false;\r\n\r\n if (error.apiErrorCode === 1) {\r\n this.handleNotFound();\r\n return;\r\n }\r\n\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading FAQ',\r\n 'An error occurred while loading the FAQ. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n handleNotFound() {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'FAQ Not Found',\r\n 'We sorry, but the FAQ you are trying to view does not exist.')\r\n .then(() => this.router.navigateToRoute('faq-list'));\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('faq-list', { id: this.faqGroupId });\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var savedFaq = await this.faqService.saveFaq(this.faq);\r\n\r\n this.faq.id = savedFaq.id;\r\n this.faq.ordinal = savedFaq.ordinal; // Update ordinal in view model in case the backend set it to another value.\r\n this.faqGroupId = savedFaq.faqGroupId; // Update the FAQ group ID in case the user changed groups. This ensures the link back to the list is to the correct one.\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('FAQ saved successfully.');\r\n this.router.navigateToRoute('faq-detail', { id: this.faq.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving FAQ.', error, { faq: this.faq });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving FAQ',\r\n this.getApiErrorMessage(error.apiErrorCode));\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n switch (errorCode) {\r\n default:\r\n return 'An error occurred while saving the current FAQ. Please try again later.';\r\n }\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import marked from 'marked';\r\nimport SimpleMDE from 'simplemde';\r\nimport { inject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport FaqGroupService from './faq-group-service';\r\n\r\n@inject(Element, Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, FaqGroupService)\r\nexport default class FaqGroupDetail {\r\n constructor(element, router, validationControllerFactory, pageContext, logger, dialogPresenter, faqGroupService) {\r\n this.element = element;\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'faq-group-detail';\r\n this.dialogPresenter = dialogPresenter;\r\n this.faqGroupService = faqGroupService;\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.faqGroup = params.id === 'create' ?\r\n { isActive: true } :\r\n await this.faqGroupService.getFaqGroup(params.id);\r\n\r\n ValidationRules\r\n .ensure('name').displayName('Name').required().maxLength(100)\r\n .ensure('description').displayName('Description').required().maxLength(255)\r\n .on(this.faqGroup);\r\n\r\n this.validationController.addObject(this.faqGroup);\r\n\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error while loading FAQ group', error);\r\n this.pageContext.isLoading = false;\r\n\r\n if (error.apiErrorCode === 1) {\r\n this.handleNotFound();\r\n return;\r\n }\r\n\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading FAQ Group',\r\n 'An error occurred while loading the FAQ group. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n handleNotFound() {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'FAQ Group Not Found',\r\n 'We sorry, but the FAQ group you are trying to view does not exist.')\r\n .then(() => this.router.navigateToRoute('faq-group-list'));\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('faq-group-list');\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.faqGroup.id = (await this.faqGroupService.saveFaqGroup(this.faqGroup)).id;\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('FAQ group saved successfully.');\r\n this.router.navigateToRoute('faq-group-detail', { id: this.faqGroup.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving FAQ group.', error, { faqGroup: this.faqGroup });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving FAQ Group',\r\n this.getApiErrorMessage(error.apiErrorCode));\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n switch (errorCode) {\r\n default:\r\n return 'An error occurred while saving the current FAQ group. Please try again later.';\r\n }\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport SecurityService from '../../security/security-service';\r\nimport FaqGroupService from './faq-group-service';\r\n\r\n@inject(Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, SecurityService, FaqGroupService)\r\nexport default class FaqGroupList {\r\n @observable filterText;\r\n\r\n constructor(router, validationControllerFactory, pageContext, logger, dialogPresenter, securityService, faqGroupService) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'faq-group-list';\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.faqGroupService = faqGroupService;\r\n this.filterText = '';\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template: '',\r\n headerCellTemplate: '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Ordinal',\r\n field: 'ordinal',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true,\r\n sort: 'asc'\r\n },\r\n { suppressMenu: true, headerName: 'Name', field: 'name', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n { suppressMenu: true, headerName: 'Description', field: 'description', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerCellTemplate: '',\r\n headerClass: 'row-actions',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n }\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActiveFaqGroups = [];\r\n }\r\n\r\n navigateToFaqs(faqGroupId) {\r\n this.router.navigateToRoute('faq-list', { id: faqGroupId });\r\n }\r\n\r\n navigateToFaqGroupDetail(id) {\r\n this.router.navigateToRoute('faq-group-detail', { id });\r\n }\r\n\r\n setSelectedActiveFaqGroups() {\r\n this.selectedActiveFaqGroups = this.faqGroupsView.filter(faqGroup => faqGroup.isSelected && faqGroup.isActive);\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.faqGroupsView.every(faqGroup => faqGroup.isSelected);\r\n this.setSelectedActiveFaqGroups();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.faqGroupsView) {\r\n this.allSelected = !this.faqGroupsView.every(faqGroup => faqGroup.isSelected);\r\n\r\n for (let faqGroup of this.faqGroupsView)\r\n faqGroup.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActiveFaqGroups();\r\n\r\n return true;\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateFaqGroupsView();\r\n }\r\n\r\n updateFaqGroupsView() {\r\n if (!this.faqGroups)\r\n return;\r\n\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n this.faqGroupsView = this.faqGroups.filter(u =>\r\n (u.name || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (u.description || '').toLowerCase().indexOf(lowerCasedFilterText) > -1\r\n );\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.faqGroups = await this.faqGroupService.getFaqGroups();\r\n\r\n for (let faqGroup of this.faqGroups) {\r\n // Store original ordinal to compare later during save.\r\n faqGroup.orginalOrdinal = faqGroup.ordinal;\r\n\r\n ValidationRules\r\n .ensure('ordinal').displayName('Ordinal').required().matches(/^\\d+$/)\r\n .on(faqGroup);\r\n\r\n this.validationController.addObject(faqGroup);\r\n }\r\n\r\n this.updateFaqGroupsView();\r\n } catch (error) {\r\n this.logger.error('Error while loading FAQ groups', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading FAQ Groups',\r\n 'An error occurred while loading the FAQ groups. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n deleteFaqGroup(faqGroup) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete FAQ Group', 'Are you sure you want to delete this FAQ group?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.faqGroupService\r\n .deleteFaqGroups([faqGroup.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('FAQ group deleted successfully.');\r\n\r\n faqGroup.isSelected = false;\r\n faqGroup.isActive = false;\r\n\r\n this.setSelectedActiveFaqGroups();\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting FAQ group.', error, { faqGroupId: faqGroup.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error);\r\n });\r\n });\r\n }\r\n\r\n deleteSelectedFaqGroups() {\r\n var faqGroupsToDelete = this.faqGroupsView.filter(u => u.isSelected);\r\n if (!faqGroupsToDelete.length)\r\n return;\r\n\r\n this.dialogPresenter\r\n .showConfirmation('Delete Selected FAQ Groups', 'Are you sure you want to delete the selected FAQ groups?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n var faqGroupIds = faqGroupsToDelete.map(faqGroup => faqGroup.id);\r\n\r\n this.pageContext.isLoading = true;\r\n this.faqGroupService\r\n .deleteFaqGroups(faqGroupIds)\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Selected FAQ groups deleted successfully.');\r\n\r\n for (let faqGroup of faqGroupsToDelete) {\r\n faqGroup.isSelected = false;\r\n faqGroup.isActive = false;\r\n\r\n this.setSelectedActiveFaqGroups();\r\n }\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting FAQ groups.', error, { faqGroupIds });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, true);\r\n });\r\n });\r\n }\r\n\r\n handleDeleteError(error, multipleFaqGroups) {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Error Deleting FAQ Group' + (multipleFaqGroups ? 's' : ''),\r\n 'An unexpected error occurred while trying to delete FAQ group' + (multipleFaqGroups ? 's' : '') + '. Please try again later.');\r\n }\r\n\r\n handleFormChange($event) {\r\n // Only set the 'form changed' flag if one of the ordinal inputs is modified. (Ignore all selection checkboxes.)\r\n if ($event.detail.formElement.hasAttribute('data-ordinal'))\r\n this.formChanged = true;\r\n }\r\n\r\n async applyOrdinals() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n // Copy FAQ groups in order to ensure the sequence of ordinals makes sense.\r\n var faqGroups = [...this.faqGroups];\r\n\r\n // Sort the list by ordinals and break ties by comparing the FAQ group names.\r\n faqGroups.sort((a, b) => {\r\n var value = a.ordinal - b.ordinal;\r\n if (value !== 0)\r\n return value;\r\n\r\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\r\n });\r\n\r\n // Re-assign the ordinals based on the new order.\r\n for (var i = 0; i < faqGroups.length; i++)\r\n faqGroups[i].ordinal = i + 1;\r\n\r\n // Get a list of ID/ordinal mappings where the ordinal has changed from its original ordinal.\r\n var idOrdinalMap = faqGroups\r\n .filter(g => g.ordinal !== g.orginalOrdinal)\r\n .map(g => ({ id: g.id, ordinal: g.ordinal }));\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.faqGroupService.updateFaqGroupOrdinals(idOrdinalMap);\r\n this.formChanged = false;\r\n\r\n // Store original ordinal to compare later during next save.\r\n for (let faqGroup of this.faqGroups)\r\n faqGroup.orginalOrdinal = faqGroup.ordinal;\r\n } catch (error) {\r\n this.logger.error('Error while saving FAQ group ordinals', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving FAQ Group Ordinals',\r\n 'An error occurred while savig the FAQ group ordinals. Please try again later.');\r\n }\r\n\r\n // Re-sort data grid and view.\r\n this.faqGroupsView.sort((a, b) => a.ordinal - b.ordinal);\r\n this.faqGroupDataGridViewModel.gridApi.setSortModel([{ colId: 'ordinal', sort: 'asc' }])\r\n this.pageContext.isLoading = false;\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport SecurityService from '../../security/security-service';\r\nimport FaqService from './faq-service';\r\n\r\n@inject(Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, SecurityService, FaqService)\r\nexport default class FaqList {\r\n @observable filterText;\r\n\r\n constructor(router, validationControllerFactory, pageContext, logger, dialogPresenter, securityService, faqService) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'faq-list';\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.faqService = faqService;\r\n this.filterText = '';\r\n \r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template: '',\r\n headerCellTemplate: '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Ordinal',\r\n field: 'ordinal',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true,\r\n sort: 'asc'\r\n },\r\n { suppressMenu: true, headerName: 'Question', field: 'question', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n { suppressMenu: true, headerName: 'Answer', field: 'answer', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerCellTemplate: '',\r\n headerClass: 'row-actions',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActiveFaqs = [];\r\n }\r\n\r\n navigateToFaqDetail(id) {\r\n this.router.navigateToRoute('faq-detail', { id });\r\n }\r\n\r\n setSelectedActiveFaqs() {\r\n this.selectedActiveFaqs = this.faqsView.filter(faq => faq.isSelected && faq.isActive);\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.faqsView.every(faq => faq.isSelected);\r\n this.setSelectedActiveFaqs();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.faqsView) {\r\n this.allSelected = !this.faqsView.every(faq => faq.isSelected);\r\n\r\n for (let faq of this.faqsView)\r\n faq.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActiveFaqs();\r\n\r\n return true;\r\n }\r\n\r\n activate(params) {\r\n this.faqGroupId = params.id;\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.faqs = await this.faqService.getFaqs(params.id);\r\n\r\n for (let faq of this.faqs) {\r\n // Store original ordinal to compare later during save.\r\n faq.orginalOrdinal = faq.ordinal;\r\n\r\n ValidationRules\r\n .ensure('ordinal').displayName('Ordinal').required().matches(/^\\d+$/)\r\n .on(faq);\r\n\r\n this.validationController.addObject(faq);\r\n }\r\n\r\n this.updateView();\r\n } catch (error) {\r\n this.logger.error('Error loading FAQs.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading FAQs',\r\n 'An error occurred while loading the FAQs. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateView();\r\n }\r\n\r\n updateView() {\r\n if (!this.faqs)\r\n return;\r\n\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n this.faqsView = this.faqs.filter(faq =>\r\n (faq.question || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (faq.answer || '').toLowerCase().indexOf(lowerCasedFilterText) > -1\r\n );\r\n }\r\n\r\n deleteFaq(faq) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete FAQ', 'Are you sure you want to delete this FAQ?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.faqService\r\n .deleteFaqs([faq.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('FAQ deleted successfully.');\r\n\r\n faq.isSelected = false;\r\n faq.isActive = false;\r\n\r\n this.setSelectedActiveFaqs();\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting FAQ.', error, { faqId: faq.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error);\r\n });\r\n });\r\n }\r\n\r\n deleteSelectedFaqs() {\r\n var faqsToDelete = this.faqsView.filter(u => u.isSelected);\r\n if (!faqsToDelete.length)\r\n return;\r\n\r\n this.dialogPresenter\r\n .showConfirmation('Delete Selected FAQs', 'Are you sure you want to delete the selected FAQs?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n var faqIds = faqsToDelete.map(faq => faq.id);\r\n\r\n this.pageContext.isLoading = true;\r\n this.faqService\r\n .deleteFaqs(faqIds)\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Selected FAQs deleted successfully.');\r\n\r\n for (let faq of faqsToDelete) {\r\n faq.isSelected = false;\r\n faq.isActive = false;\r\n\r\n this.setSelectedActiveFaqs();\r\n }\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting FAQs.', error, { faqIds });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, true);\r\n });\r\n });\r\n }\r\n\r\n handleDeleteError(error, multipleFaqs) {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Error Deleting FAQ' + (multipleFaqs ? 's' : ''),\r\n 'An unexpected error occurred while trying to delete FAQ' + (multipleFaqs ? 's' : '') + '. Please try again later.');\r\n }\r\n\r\n handleFormChange($event) {\r\n // Only set the 'form changed' flag if one of the ordinal inputs is modified. (Ignore all selection checkboxes.)\r\n if ($event.detail.formElement.hasAttribute('data-ordinal'))\r\n this.formChanged = true;\r\n }\r\n\r\n async applyOrdinals() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n // Copy FAQs in order to ensure the sequence of ordinals makes sense.\r\n var faqs = [...this.faqs];\r\n\r\n // Sort the list by ordinals and break ties by comparing the FAQ question text.\r\n faqs.sort((a, b) => {\r\n var value = a.ordinal - b.ordinal;\r\n if (value !== 0)\r\n return value;\r\n\r\n return a.question.toLowerCase().localeCompare(b.question.toLowerCase());\r\n });\r\n\r\n // Re-assign the ordinals based on the new order.\r\n for (var i = 0; i < faqs.length; i++)\r\n faqs[i].ordinal = i + 1;\r\n\r\n // Get a list of ID/ordinal mappings where the ordinal has changed from its original ordinal.\r\n var idOrdinalMap = faqs\r\n .filter(g => g.ordinal !== g.orginalOrdinal)\r\n .map(g => ({ id: g.id, ordinal: g.ordinal }));\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.faqService.updateFaqOrdinals(idOrdinalMap);\r\n this.formChanged = false;\r\n\r\n // Store original ordinal to compare later during next save.\r\n for (let faq of this.faqs)\r\n faq.orginalOrdinal = faq.ordinal;\r\n } catch (error) {\r\n this.logger.error('Error while saving FAQ ordinals', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving FAQ Ordinals',\r\n 'An error occurred while savig the FAQ ordinals. Please try again later.');\r\n }\r\n\r\n // Re-sort data grid and view.\r\n this.faqsView.sort((a, b) => a.ordinal - b.ordinal);\r\n this.faqDataGridViewModel.gridApi.setSortModel([{ colId: 'ordinal', sort: 'asc' }])\r\n this.pageContext.isLoading = false;\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport FaqGroupService from './faq-group-service';\r\n\r\n@inject(PageContext, Logger, DialogPresenter, FaqGroupService)\r\nexport default class FaqList {\r\n @observable filterText;\r\n\r\n constructor(pageContext, logger, dialogPresenter, faqGroupService) {\r\n this.pageContext = pageContext;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'faqs';\r\n\r\n this.dialogPresenter = dialogPresenter;\r\n this.faqGroupService = faqGroupService;\r\n this.filterText = '';\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.faqGroups = await this.faqGroupService.getFaqGroups(true);\r\n this.updateView();\r\n } catch (error) {\r\n this.logger.error('Error loading FAQ.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading FAQs',\r\n 'An error occurred while loading the FAQs. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateView();\r\n }\r\n\r\n updateView() {\r\n if (!this.faqGroups)\r\n return;\r\n\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n\r\n for (let faqGroup of this.faqGroups) {\r\n faqGroup.isVisible = false;\r\n for (let faq of faqGroup.faqs) {\r\n faq.isVisible = (faq.question || '').toLowerCase().indexOf(lowerCasedFilterText) > -1;\r\n faqGroup.isVisible = faq.isVisible ? true : faqGroup.isVisible;\r\n }\r\n }\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport GlossaryTermService from './glossary-term-service';\r\nimport SecurityService from '../../security/security-service';\r\n\r\n@inject(PageContext, DialogPresenter, Logger, SecurityService, GlossaryTermService)\r\nexport default class Glossary {\r\n @observable filterText;\r\n \r\n constructor(pageContext, dialogPresenter, logger, securityService, glossaryTermService) {\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'glossary';\r\n\r\n this.securityService = securityService;\r\n this.glossaryTermService = glossaryTermService;\r\n this.filterText = '';\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n\r\n this.pageContext.isLoading = true;\r\n try {\r\n this.user = this.securityService.getEffectiveUser();\r\n if (!this.user)\r\n throw new Error('No current user.');\r\n\r\n var glossaryTerms = await this.glossaryTermService.getGlossaryTerms();\r\n this.glossaryTermGroups = buildGlossaryTermGroups(glossaryTerms);\r\n this.glossaryTermGroupVisibilities = {};\r\n this.updateGlossaryTermGroupVisibilities();\r\n this.pageContext.isLoading = false;\r\n\r\n } catch (error) {\r\n this.logger.error('Error loading glossary.', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Glossary',\r\n 'An error occurred while loading the glossary. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n filterTextChanged() {\r\n if (!this.glossaryTermGroups)\r\n return;\r\n\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n\r\n for (let glossaryTerms of this.glossaryTermGroups.values())\r\n for (let glossaryTerm of glossaryTerms)\r\n glossaryTerm.isVisible = (glossaryTerm.name || '').toLowerCase().indexOf(lowerCasedFilterText) > -1;\r\n\r\n this.updateGlossaryTermGroupVisibilities();\r\n }\r\n\r\n updateGlossaryTermGroupVisibilities() {\r\n for (let [letter, glossaryTerms] of this.glossaryTermGroups.entries())\r\n this.glossaryTermGroupVisibilities[letter] = glossaryTerms.some(gt => gt.isVisible);\r\n }\r\n};\r\n\r\nfunction buildGlossaryTermGroups(glossaryTerms) {\r\n var glossaryTermGroups = new Map();\r\n\r\n for (let glossaryTerm of glossaryTerms) {\r\n glossaryTerm.isVisible = true;\r\n\r\n var letter = glossaryTerm.name.trim()[0].toUpperCase();\r\n var glossaryTermGroup = glossaryTermGroups.get(letter);\r\n if (glossaryTermGroup)\r\n glossaryTermGroup.push(glossaryTerm);\r\n else\r\n glossaryTermGroups.set(letter, [glossaryTerm]);\r\n }\r\n\r\n return glossaryTermGroups;\r\n}\r\n","import marked from 'marked';\r\nimport SimpleMDE from 'simplemde';\r\nimport { inject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport SecurityService from '../../security/security-service';\r\nimport GlossaryTermService from './glossary-term-service';\r\n\r\n@inject(Element, Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, SecurityService, GlossaryTermService)\r\nexport default class GlossaryTermDetail {\r\n constructor(element, router, validationControllerFactory, pageContext, logger, dialogPresenter, securityService, glossaryTermService) {\r\n this.element = element;\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'glossary-term-detail';\r\n this.dialogPresenter = dialogPresenter;\r\n this.glossaryTermService = glossaryTermService;\r\n this.securityService = securityService;\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.glossaryTerm = params.id === 'create' ?\r\n { isActive: true } :\r\n await this.glossaryTermService.getGlossaryTerm(params.id);\r\n\r\n ValidationRules\r\n .ensure('name').displayName('Name').required().maxLength(100)\r\n .ensure('description').displayName('Description').required().maxLength(512)\r\n .on(this.glossaryTerm);\r\n\r\n this.validationController.addObject(this.glossaryTerm);\r\n\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error while loading glossary term', error);\r\n this.pageContext.isLoading = false;\r\n\r\n if (error.apiErrorCode === 1) {\r\n this.handleNotFound();\r\n return;\r\n }\r\n\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Glossary Term',\r\n 'An error occurred while loading the glossary term. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n handleNotFound() {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Glossary Term Not Found',\r\n 'We sorry, but the glossary term you are trying to view does not exist.')\r\n .then(() => this.router.navigateToRoute('glossary-term-list'));\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('glossary-term-list');\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.glossaryTerm.id = (await this.glossaryTermService.saveGlossaryTerm(this.glossaryTerm)).id;\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Glossary term saved successfully.');\r\n this.router.navigateToRoute('glossary-term-detail', { id: this.glossaryTerm.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving glossary term.', error, { glossaryTerm: this.glossaryTerm });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Glossary Term',\r\n this.getApiErrorMessage(error.apiErrorCode));\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n switch (errorCode) {\r\n default:\r\n return 'An error occurred while saving the current glossary term. Please try again later.';\r\n }\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import $ from 'jquery';\r\nimport { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport SecurityService from '../../security/security-service';\r\nimport GlossaryTermService from './glossary-term-service';\r\n\r\n@inject(Element, Router, PageContext, Logger, DialogPresenter, SecurityService, GlossaryTermService)\r\nexport default class GlossaryTermList {\r\n @observable filterText;\r\n\r\n constructor(element, router, pageContext, logger, dialogPresenter, securityService, glossaryTermService) {\r\n this.element = element;\r\n this.router = router;\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'glossary-term-list';\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.glossaryTermService = glossaryTermService;\r\n this.filterText = '';\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template: '',\r\n headerCellTemplate: '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n { suppressMenu: true, headerName: 'Name', field: 'name', comparator: CompareUtility.compareStringsInsensitive, width: 150, sort: 'asc' },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Description',\r\n field: 'description',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 150,\r\n cellClass: 'long-text',\r\n template: '
${data.description}
'\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerCellTemplate: '',\r\n headerClass: 'row-actions',\r\n width: 100,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActiveGlossaryTerms = [];\r\n }\r\n\r\n navigateToGlossaryTermDetail(id) {\r\n this.router.navigateToRoute('glossary-term-detail', { id });\r\n }\r\n\r\n setSelectedActiveGlossaryTerms() {\r\n this.selectedActiveGlossaryTerms = this.glossaryTermsView.filter(glossaryTerm => glossaryTerm.isSelected && glossaryTerm.isActive);\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.glossaryTermsView.every(glossaryTerm => glossaryTerm.isSelected);\r\n this.setSelectedActiveGlossaryTerms();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.glossaryTermsView) {\r\n this.allSelected = !this.glossaryTermsView.every(glossaryTerm => glossaryTerm.isSelected);\r\n\r\n for (let glossaryTerm of this.glossaryTermsView)\r\n glossaryTerm.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActiveGlossaryTerms();\r\n\r\n return true;\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateGlossaryTermsView();\r\n }\r\n\r\n updateGlossaryTermsView() {\r\n if (!this.glossaryTerms)\r\n return;\r\n\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n this.glossaryTermsView = this.glossaryTerms.filter(u =>\r\n (u.name || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (u.description || '').toLowerCase().indexOf(lowerCasedFilterText) > -1\r\n );\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.glossaryTerms = await this.glossaryTermService.getGlossaryTerms();\r\n this.pageContext.isLoading = false;\r\n this.updateGlossaryTermsView();\r\n } catch (error) {\r\n this.logger.error('Error while loading glossary terms', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Glossary Terms',\r\n 'An error occurred while loading the glossary terms. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n deleteGlossaryTerm(glossaryTerm) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete Glossary Term', 'Are you sure you want to delete this glossary term?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.glossaryTermService\r\n .deleteGlossaryTerms([glossaryTerm.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Glossary term deleted successfully.');\r\n\r\n glossaryTerm.isSelected = false;\r\n glossaryTerm.isActive = false;\r\n\r\n this.setSelectedActiveGlossaryTerms();\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting glossary term.', error, { glossaryTermId: glossaryTerm.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error);\r\n });\r\n });\r\n }\r\n\r\n deleteSelectedGlossaryTerms() {\r\n var glossaryTermsToDelete = this.glossaryTermsView.filter(u => u.isSelected);\r\n if (!glossaryTermsToDelete.length)\r\n return;\r\n\r\n this.dialogPresenter\r\n .showConfirmation('Delete Selected Glossary Terms', 'Are you sure you want to delete the selected glossary terms?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n var glossaryTermIds = glossaryTermsToDelete.map(glossaryTerm => glossaryTerm.id);\r\n\r\n this.pageContext.isLoading = true;\r\n this.glossaryTermService\r\n .deleteGlossaryTerms(glossaryTermIds)\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Selected glossary terms deleted successfully.');\r\n\r\n for (let glossaryTerm of glossaryTermsToDelete) {\r\n glossaryTerm.isSelected = false;\r\n glossaryTerm.isActive = false;\r\n\r\n this.setSelectedActiveGlossaryTerms();\r\n }\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting glossary terms.', error, { glossaryTermIds });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, true);\r\n });\r\n });\r\n }\r\n\r\n handleDeleteError(error, multipleGlossaryTerms) {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Error Deleting Glossary Term' + (multipleGlossaryTerms ? 's' : ''),\r\n 'An unexpected error occurred while trying to delete glossary term' + (multipleGlossaryTerms ? 's' : '') + '. Please try again later.');\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import { inject, bindable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport NavigationAuthorizer from '../security/navigation/navigation-authorizer';\r\n\r\n@inject(Router, NavigationAuthorizer)\r\nexport class HelpNavigationMenu {\r\n @bindable colSize;\r\n\r\n constructor(router, navigationAuthorizer) {\r\n this.router = router;\r\n this.navigationAuthorizer = navigationAuthorizer;\r\n }\r\n\r\n attached() {\r\n (async () => {\r\n let navItems = [];\r\n\r\n for (let item of this.router.navigation)\r\n if (item.config.group === 'help' && await this.navigationAuthorizer.hasAccess(item.config))\r\n navItems.push(item);\r\n\r\n this.navItems = navItems;\r\n })();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport StringResourceService from '../../infrastructure/string-resource-service';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport SupportTopicService from './support-topic-service';\r\nimport SupportRequestService from './support-request-service';\r\n\r\n@inject(ValidationControllerFactory, StringResourceService, PageContext, Logger, DialogPresenter, SupportTopicService, SupportRequestService)\r\nexport default class Support {\r\n constructor(validationControllerFactory, stringResourceService, pageContext, logger, dialogPresenter, supportTopicService, supportRequestService) {\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.stringResourceService = stringResourceService;\r\n this.pageContext = pageContext;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'support';\r\n\r\n this.dialogPresenter = dialogPresenter;\r\n this.supportTopicService = supportTopicService;\r\n this.supportRequestService = supportRequestService;\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n try {\r\n this.pageContext.isLoading = true;\r\n this.supportTopics = await this.supportTopicService.getSupportTopics();\r\n this.disclaimer = (await this.stringResourceService.getStringResources())['support_disclaimer'];\r\n\r\n this.selectedSupportTopics = [];\r\n\r\n ValidationRules\r\n .ensure('selectedSupportTopics')\r\n .displayName('Support Topic')\r\n .satisfies(selectedOrganizations => !!selectedOrganizations.length)\r\n .ensure('message')\r\n .displayName('Message')\r\n .required()\r\n .on(this);\r\n\r\n var supportFormMessage = localStorage.getItem('supportFormMessage');\r\n if (supportFormMessage) {\r\n this.message = supportFormMessage;\r\n localStorage.removeItem('supportFormMessage');\r\n }\r\n\r\n } catch (error) {\r\n this.logger.error('Error loading support topics', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Support Topics',\r\n 'An error occurred while loading the support topics. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n async submit() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n var supportRequest = {\r\n supportTopicId: this.selectedSupportTopics[0].id,\r\n message: this.message\r\n };\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.supportRequestService.createSupportRequest(supportRequest);\r\n this.pageContext.showSuccessOverlay('Support request created successfully.', false);\r\n this.selectedSupportTopics = [];\r\n this.message = '';\r\n this.formChanged = false;\r\n } catch (error) {\r\n this.logger.error('Error creating support request.', error, { supportRequest });\r\n this.dialogPresenter.showAlert(\r\n 'Error Creating Support Request',\r\n 'An error occurred while creating the support request. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n};\r\n","import { inject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport SupportTopicService from './support-topic-service';\r\n\r\n@inject(Router, ValidationControllerFactory, PageContext, DialogPresenter, Logger, SupportTopicService)\r\nexport default class SupportTopicDetail {\r\n constructor(router, validationControllerFactory, pageContext, dialogPresenter, logger, supportTopicService) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'support-topic-detail';\r\n\r\n this.supportTopicService = supportTopicService;\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('support-topic-list');\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.topic.id = (await this.supportTopicService.saveSupportTopic(this.topic)).id;\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Support topic saved successfully.');\r\n this.router.navigateToRoute('support-topic-detail', { id: this.topic.id }, { replace: true });\r\n }\r\n catch (error) {\r\n this.logger.error('Error saving topic.', error, { topic: this.topic });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Support Topic',\r\n this.getApiErrorMessage(error.apiErrorCode));\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n switch (errorCode) {\r\n case 500:\r\n return 'The topic name specified is already in use.';\r\n default:\r\n return 'An error occurred while saving the current support topic. Please try again later.';\r\n }\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n try {\r\n this.pageContext.isLoading = true;\r\n\r\n this.topic = { isActive: true };\r\n if (params.id !== 'create')\r\n this.topic = await this.supportTopicService.getSupportTopic(params.id);\r\n\r\n ValidationRules\r\n .ensure('name')\r\n .displayName('Name')\r\n .required()\r\n .maxLength(100)\r\n .ensure('description')\r\n .displayName('Description')\r\n .required()\r\n .maxLength(255)\r\n .ensure('email')\r\n .displayName('Recipient Email')\r\n .required()\r\n .email()\r\n .maxLength(512)\r\n .on(this.topic);\r\n this.validationController.addObject(this.topic);\r\n }\r\n catch (error) {\r\n this.logger.error('Error loading support topic', error, { supportTopicId: params.id });\r\n\r\n var errorAlertPromise = error.apiErrorCode === 1 ?\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Support Topic',\r\n 'The current topic doesn\\'t exist.') :\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Support Topic',\r\n 'An error occurred while loading the current support topic. Please try again later.');\r\n\r\n errorAlertPromise.then(() => {\r\n this.router.navigateToRoute('support-topic-list');\r\n });\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport SupportTopicService from './support-topic-service';\r\n\r\n@inject(Router, PageContext, DialogPresenter, Logger, SupportTopicService)\r\nexport default class SupportTopicList {\r\n constructor(router, pageContext, dialogPresenter, logger, supportTopicService) {\r\n this.router = router;\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n this.logger = logger;\r\n this.logger.name = 'support-topic-list';\r\n this.supportTopicService = supportTopicService;\r\n }\r\n\r\n navigateToSupportTopicDetail(id) {\r\n this.router.navigateToRoute('support-topic-detail', { id });\r\n }\r\n \r\n deleteSupportTopic(topic) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete Support Topic', 'Are you sure you want to delete this support topic?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.supportTopicService\r\n .deleteSupportTopics([topic.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Support topic deleted successfully.');\r\n topic.isActive = false;\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting support topic.', error, { supportTopicId: topic.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error);\r\n });\r\n });\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n try {\r\n var topics = await this.supportTopicService.getSupportTopics();\r\n this.topics = topics;\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error loading support topics.', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Support Topics',\r\n 'An error occurred while loading the support topics. Please try again later.');\r\n }\r\n })();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import SimpleMDE from 'simplemde';\r\nimport { inject, bindable, bindingMode } from 'aurelia-framework';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport UploadedFileService from '../../infrastructure/uploaded-files/uploaded-file-service';\r\n\r\n@inject(PageContext, Logger, DialogPresenter, UploadedFileService)\r\nexport class MarkdownEditor {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) value;\r\n @bindable imageUploadPath;\r\n\r\n constructor(pageContext, logger, dialogPresenter, uploadedFileService) {\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.dialogPresenter = dialogPresenter;\r\n this.uploadedFileService = uploadedFileService;\r\n this.handleEditorChange = this.handleEditorChange.bind(this);\r\n }\r\n\r\n valueChanged(newValue, oldValue) {\r\n if (oldValue === newValue)\r\n return;\r\n\r\n this.setEditorValue(newValue);\r\n }\r\n\r\n setEditorValue(value) {\r\n if (!this.editor)\r\n return;\r\n\r\n var editorValue = this.editor.value();\r\n if (value === editorValue)\r\n return;\r\n\r\n this.editor.value(value || '');\r\n }\r\n\r\n handleEditorChange() {\r\n this.value = this.editor && this.editor.value();\r\n }\r\n\r\n attached() {\r\n this.editor = new SimpleMDE({\r\n element: this.editorTextarea,\r\n toolbar: this.buildToolbar(),\r\n insertTexts: {\r\n image: [`![`, `](#url#)`],\r\n link: ['[', '](https://)'],\r\n },\r\n });\r\n\r\n if (this.value)\r\n this.setEditorValue(value);\r\n\r\n this.editor.codemirror.on('change', this.handleEditorChange);\r\n }\r\n\r\n detached() {\r\n this.editor.codemirror.off('change', this.handleEditorChange);\r\n this.editor && this.editor.toTextArea();\r\n this.editor = null;\r\n }\r\n\r\n buildToolbar() {\r\n return [\r\n 'bold', 'italic', 'heading',\r\n '|',\r\n 'quote', 'unordered-list', 'ordered-list',\r\n '|',\r\n 'link', this.createImageToolbarItem(), \r\n '|',\r\n 'preview', 'side-by-side', 'fullscreen',\r\n '|',\r\n 'guide'\r\n ];\r\n }\r\n\r\n createImageToolbarItem() {\r\n var markdownEditor = this;\r\n return {\r\n name: 'custom',\r\n title: 'Insert Image',\r\n className: 'fa fa-picture-o',\r\n action: () => markdownEditor.showFileDialog()\r\n };\r\n }\r\n\r\n async uploadImage() {\r\n if (!this.imageFileInputElement.value)\r\n return;\r\n\r\n var files = Array.from(this.imageFileInputElement.files);\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var url = await this.uploadedFileService.uploadFiles(this.imageUploadPath, files, progress => {\r\n this.uploadPercent = progress.loaded / progress.total\r\n });\r\n \r\n if (/editor-preview-active/.test(this.editor.codemirror.getWrapperElement().lastChild.className))\r\n return;\r\n\r\n var text;\r\n var start = this.editor.options.insertTexts.image[0];\r\n var end = this.editor.options.insertTexts.image[1];\r\n var startPoint = this.editor.codemirror.getCursor(\"start\");\r\n var endPoint = this.editor.codemirror.getCursor(\"end\");\r\n if (url) {\r\n end = end.replace(\"#url#\", url);\r\n }\r\n if (this.editor.getState(this.editor.codemirror).image) {\r\n text = this.editor.codemirror.getLine(startPoint.line);\r\n start = text.slice(0, startPoint.ch);\r\n end = text.slice(startPoint.ch);\r\n this.editor.codemirror.replaceRange(start + end, {\r\n line: startPoint.line,\r\n ch: 0\r\n });\r\n } else {\r\n text = this.editor.codemirror.getSelection();\r\n this.editor.codemirror.replaceSelection(start + text + end);\r\n\r\n startPoint.ch += start.length;\r\n if (startPoint !== endPoint) {\r\n endPoint.ch += start.length;\r\n }\r\n }\r\n this.editor.codemirror.setSelection(startPoint, endPoint);\r\n this.editor.codemirror.focus();\r\n } catch (error) {\r\n this.logger.error('Error uploading image', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Uploading Image',\r\n 'An error occurred while uploading the image. Please try again later.');\r\n }\r\n\r\n this.imageFileInputElement.value = '';\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n showFileDialog() {\r\n this.imageFileInputElement.click();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import marked from 'marked';\r\nimport { inject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport StringUtility from '../../infrastructure/string-utility';\r\nimport SecurityService from '../../security/security-service';\r\nimport UserGuideService from './user-guide-service';\r\n\r\n@inject(Element, Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, SecurityService, UserGuideService)\r\nexport default class UserGuideDetail {\r\n constructor(element, router, validationControllerFactory, pageContext, logger, dialogPresenter, securityService, userGuideService) {\r\n this.element = element;\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'user-guide-detail';\r\n this.dialogPresenter = dialogPresenter;\r\n this.userGuideService = userGuideService;\r\n this.securityService = securityService;\r\n this.htmlContent = '';\r\n\r\n this.editMode = this.securityService.isCurrentUserInternal() && !this.securityService.isImpersonating();\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n if (params.code) {\r\n let userGuides = await this.userGuideService.getUserGuides(params.code);\r\n if (userGuides.length === 0) {\r\n this.handleNotFound();\r\n return;\r\n }\r\n\r\n this.userGuide = userGuides[0];\r\n } else {\r\n this.userGuide = params.id === 'create' ?\r\n { isActive: true } :\r\n await this.userGuideService.getUserGuide(params.id);\r\n }\r\n\r\n this.htmlContent = marked(this.userGuide.content || '');\r\n\r\n if (this.editMode) {\r\n if (!this.userGuide.imageUploadPath)\r\n this.userGuide.imageUploadPath = `/help/images/user-guides/${StringUtility.getRandomString(10)}`;\r\n\r\n ValidationRules\r\n .ensure('title').displayName('Title').required().maxLength(100)\r\n .ensure('description').displayName('Description').required().maxLength(255)\r\n .on(this.userGuide);\r\n\r\n this.validationController.addObject(this.userGuide);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error while loading user guide', error);\r\n this.pageContext.isLoading = false;\r\n\r\n if (error.apiErrorCode === 1) {\r\n this.handleNotFound();\r\n return;\r\n }\r\n\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading User Guide',\r\n 'An error occurred while loading the user guide. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n handleNotFound() {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Help Page Not Found',\r\n 'We sorry, but the help page you are trying to view does not exist.')\r\n .then(() => this.router.navigateToRoute('user-guide-list'));\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('user-guide-list');\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n if (!this.userGuide.content)\r\n this.userGuide.content = '';\r\n\r\n this.userGuide.id = (await this.userGuideService.saveUserGuide(this.userGuide)).id;\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('User guide saved successfully.');\r\n this.router.navigateToRoute('user-guide-detail', { id: this.userGuide.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving user guide.', error, { userGuide: this.userGuide });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving User Guide',\r\n this.getApiErrorMessage(error.apiErrorCode));\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n switch (errorCode) {\r\n default:\r\n return 'An error occurred while saving the current user guide. Please try again later.';\r\n }\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import $ from 'jquery';\r\nimport { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport Logger from '../../infrastructure/logger';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport SecurityService from '../../security/security-service';\r\nimport UserGuideService from './user-guide-service';\r\n\r\n@inject(Element, Router, PageContext, Logger, DialogPresenter, SecurityService, UserGuideService)\r\nexport default class UserGuideList {\r\n @observable filterText;\r\n\r\n constructor(element, router, pageContext, logger, dialogPresenter, securityService, userGuideService) {\r\n this.element = element;\r\n this.router = router;\r\n this.pageContext = pageContext;\r\n this.logger = logger;\r\n this.logger.name = 'user-guide-list';\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.userGuideService = userGuideService;\r\n this.filterText = '';\r\n\r\n this.editMode = this.securityService.isCurrentUserInternal() && !this.securityService.isImpersonating();\r\n\r\n if (this.editMode) {\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template: '',\r\n headerCellTemplate: '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n { suppressMenu: true, headerName: 'Title', field: 'title', comparator: CompareUtility.compareStringsInsensitive, width: 150, sort: 'asc' },\r\n { suppressMenu: true, headerName: 'Description', field: 'description', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Core',\r\n field: 'isHelpPage',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: \r\n '' +\r\n '',\r\n cellClass: 'medium-text-right row-actions',\r\n headerCellTemplate: '',\r\n headerClass: 'row-actions',\r\n width: 100,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActiveUserGuides = [];\r\n }\r\n }\r\n\r\n navigateToUserGuideDetail(id) {\r\n this.router.navigateToRoute('user-guide-detail', { id });\r\n }\r\n\r\n setSelectedActiveUserGuides() {\r\n this.selectedActiveUserGuides = this.userGuidesView.filter(userGuide => userGuide.isSelected && userGuide.isActive);\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.userGuidesView.every(userGuide => userGuide.isSelected);\r\n this.setSelectedActiveUserGuides();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.userGuidesView) {\r\n this.allSelected = !this.userGuidesView.every(userGuide => userGuide.isSelected);\r\n\r\n for (let userGuide of this.userGuidesView)\r\n userGuide.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActiveUserGuides();\r\n\r\n return true;\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateUserGuidesView();\r\n }\r\n\r\n updateUserGuidesView() {\r\n if (!this.userGuides)\r\n return;\r\n\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n this.userGuidesView = this.userGuides.filter(u =>\r\n (u.title || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (u.description || '').toLowerCase().indexOf(lowerCasedFilterText) > -1\r\n );\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.userGuides = await this.userGuideService.getUserGuides();\r\n this.pageContext.isLoading = false;\r\n this.updateUserGuidesView();\r\n } catch (error) {\r\n this.logger.error('Error while loading user guides', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading User Guides',\r\n 'An error occurred while loading the user guides. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n deleteUserGuide(userGuide) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete User Guide', 'Are you sure you want to delete this user guide?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.userGuideService\r\n .deleteUserGuides([userGuide.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('User guide deleted successfully.');\r\n\r\n userGuide.isSelected = false;\r\n userGuide.isActive = false;\r\n\r\n this.setSelectedActiveUserGuides();\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting user guide.', error, { userGuideId: userGuide.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error);\r\n });\r\n });\r\n }\r\n\r\n deleteSelectedUserGuides() {\r\n var userGuidesToDelete = this.userGuidesView.filter(u => u.isSelected);\r\n if (!userGuidesToDelete.length)\r\n return;\r\n\r\n this.dialogPresenter\r\n .showConfirmation('Delete Selected User Guides', 'Are you sure you want to delete the selected user guides?')\r\n .then(confirmed => {\r\n if (!confirmed)\r\n return;\r\n\r\n var userGuideIds = userGuidesToDelete.map(userGuide => userGuide.id);\r\n\r\n this.pageContext.isLoading = true;\r\n this.userGuideService\r\n .deleteUserGuides(userGuideIds)\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Selected users deleted successfully.');\r\n\r\n for (let userGuide of userGuidesToDelete) {\r\n userGuide.isSelected = false;\r\n userGuide.isActive = false;\r\n\r\n this.setSelectedActiveUserGuides();\r\n }\r\n })\r\n .catch(error => {\r\n this.logger.error('Error deleting user guides.', error, { userGuideIds });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, true);\r\n });\r\n });\r\n }\r\n\r\n handleDeleteError(error, multipleUserGuides) {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Error Deleting User Guide' + (multipleUserGuides ? 's' : ''),\r\n 'An unexpected error occurred while trying to delete user guide' + (multipleUserGuides ? 's' : '') + '. Please try again later.');\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import GenerateTasksPointZoneDistributionMethod from './generate-tasks-point-zone-distribution-method';\r\nimport TaskGenerationRequest, { TaskGenerationZoneDistribution, TaskRequestPriority } from './task-generation-request';\r\nimport GenerateTasksDateSelectionType from './generate-task-date-selection-type';\r\n\r\nexport default class TaskGenerationClientSettings {\r\n pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod;\r\n pointZoneDistributions: TaskGenerationZoneDistribution[];\r\n riskPriorities?: TaskRequestPriority[];\r\n requestedTaskCount: number;\r\n dateSelectionType: GenerateTasksDateSelectionType;\r\n\r\n\r\n static fromTaskGenerationRequest(request: TaskGenerationRequest, dateSelectionType: GenerateTasksDateSelectionType) {\r\n let clientSettings = new TaskGenerationClientSettings();\r\n\r\n clientSettings.pointZoneDistributionMethod = request.pointZoneDistributionMethod;\r\n clientSettings.pointZoneDistributions = request.pointZoneDistributions;\r\n clientSettings.riskPriorities = request.riskPriorities;\r\n clientSettings.requestedTaskCount = request.requestedTaskCount;\r\n clientSettings.dateSelectionType = dateSelectionType;\r\n\r\n return clientSettings\r\n }\r\n}\r\n","export default class PromiseQueue {\r\n private _pending: Array<() => void> = [];\r\n private _activeCount = 0;\r\n\r\n constructor(private concurrency: number) {}\r\n\r\n get activeCount(): number {\r\n return this._activeCount;\r\n }\r\n\r\n get pendingCount(): number {\r\n return this._pending.length;\r\n }\r\n\r\n enqueue(task: () => Promise): Promise {\r\n return new Promise((resolve, reject) => {\r\n this._pending.push(async () => {\r\n this._activeCount++;\r\n try {\r\n resolve(await task());\r\n } catch (error) {\r\n reject(error);\r\n } finally {\r\n this._activeCount--;\r\n this.dequeue();\r\n }\r\n });\r\n this.dequeue();\r\n });\r\n }\r\n\r\n setConcurrency(concurrency: number) {\r\n this.concurrency = concurrency;\r\n this.dequeue();\r\n }\r\n\r\n private dequeue() {\r\n while (this._activeCount < this.concurrency && this._pending.length > 0) {\r\n this._pending.shift()();\r\n }\r\n }\r\n}\r\n","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class SupportTopicService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n createSupportRequest(supportRequest) {\r\n return this.httpClient.post('help/support-requests', supportRequest);\r\n }\r\n}\r\n","import { bindable, children, inject } from 'aurelia-framework';\r\nimport BooleanUtility from 'infrastructure/boolean-utility';\r\nimport $ from 'jquery';\r\n\r\n@inject(Element)\r\nexport class Accordion {\r\n @children('accordion-item') items;\r\n @bindable multiExpand;\r\n\r\n $accordionElement;\r\n $accordion;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n attached() {\r\n this.$accordionElement = $(this.element.querySelector('ul'));\r\n this.$accordion = new Foundation.Accordion(this.$accordionElement, {\r\n multiExpand: this.multiExpand ? BooleanUtility.parsePrimitive(this.multiExpand) : false\r\n });\r\n }\r\n\r\n detached() {\r\n if (this.$accordion) {\r\n this.$accordion.destroy();\r\n this.$accordion = undefined;\r\n this.$accordionElement = undefined;\r\n }\r\n }\r\n\r\n expandAllItems() {\r\n if (!this.$accordionElement)\r\n return;\r\n\r\n // open all panels\r\n let accordion = this.$accordionElement;\r\n accordion.foundation('down', $(this.element.querySelectorAll('.accordion-content')));\r\n }\r\n\r\n closeAllItems() {\r\n if (!this.$accordionElement)\r\n return;\r\n\r\n // close all panels\r\n let accordion = this.$accordionElement;\r\n accordion.foundation('up', $(this.element.querySelectorAll('.accordion-content')));\r\n }\r\n}\r\n","import { bindable, containerless, children } from 'aurelia-framework';\r\n\r\n@containerless\r\nexport class AccordionItem {\r\n @children('content') content;\r\n @bindable title;\r\n @bindable isVisible = true;\r\n};\r\n","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import { inject, bindable } from 'aurelia-framework';\r\nimport $ from 'jquery';\r\n\r\n@inject(Element)\r\nexport class ContentSizeChangeCustomAttribute {\r\n @bindable eventName;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n this.handleSizeChange = this.handleSizeChange.bind(this);\r\n }\r\n\r\n attached() {\r\n this.$element = $(this.element);\r\n this.$element.on('on.zf.toggler', this.handleSizeChange);\r\n this.$element.on('off.zf.toggler', this.handleSizeChange);\r\n }\r\n\r\n detached() {\r\n if (!this.$element)\r\n return;\r\n\r\n this.$element.off('on.zf.toggler');\r\n this.$element.off('off.zf.toggler');\r\n }\r\n\r\n handleSizeChange() {\r\n this.element.dispatchEvent(new CustomEvent(this.eventName, { bubbles: true, detail: {} }));\r\n }\r\n};\r\n","import { inject } from 'aurelia-framework';\r\nimport $ from 'jquery';\r\n\r\n@inject(Element)\r\nexport class DataDropdownCustomAttribute {\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n attached() {\r\n this.$dropdown = $(this.element);\r\n this.$dropdown.foundation();\r\n }\r\n\r\n detached() {\r\n if (!this.$dropdown)\r\n return;\r\n \r\n var dropdown =this.$dropdown.data('zfPlugin')\r\n if (dropdown)\r\n dropdown.destroy();\r\n\r\n this.$dropdown = null;\r\n }\r\n\r\n open(anchorElement) {\r\n if (!this.$dropdown)\r\n return;\r\n\r\n var dropdown = this.$dropdown.data('zfPlugin');\r\n if (dropdown) {\r\n var $anchor = $(anchorElement);\r\n \r\n dropdown.$anchors = $anchor;\r\n dropdown.$currentAnchor = $anchor;\r\n dropdown.open();\r\n }\r\n }\r\n\r\n get isOpen() {\r\n if (!this.$dropdown)\r\n return false;\r\n else\r\n return this.$dropdown.hasClass('is-open');\r\n }\r\n\r\n close() {\r\n var dropdown = this.$dropdown.data('zfPlugin');\r\n if (dropdown) \r\n dropdown.close();\r\n }\r\n};\r\n","import { inject } from 'aurelia-framework';\r\nimport $ from 'jquery';\r\n\r\n@inject(Element)\r\nexport class DataEqualizerCustomAttribute {\r\n constructor(element) {\r\n this.element = element;\r\n this.initializeEqualizer = this.initializeEqualizer.bind(this);\r\n }\r\n\r\n attached() {\r\n this.$equalizer = $(this.element);\r\n\r\n window.addEventListener('optimizedresize', this.initializeEqualizer);\r\n this.observer = new MutationObserver(this.initializeEqualizer);\r\n this.observer.observe(\r\n this.element,\r\n { attributes: false, childList: true, characterData: false }\r\n );\r\n\r\n this.initializeEqualizer();\r\n }\r\n\r\n detached() {\r\n window.removeEventListener('optimizedresize', this.initializeEqualizer);\r\n this.observer && this.observer.disconnect();\r\n \r\n var equalizer = this.$equalizer.data('zfPlugin');\r\n if (equalizer)\r\n equalizer.destroy();\r\n }\r\n\r\n initializeEqualizer() {\r\n if (!this.$equalizer)\r\n return;\r\n\r\n var equalizer = this.$equalizer.data('zfPlugin');\r\n if (equalizer)\r\n Foundation.reInit(this.$equalizer);\r\n else\r\n this.$equalizer.foundation();\r\n }\r\n};\r\n","import {\r\n ColDefUtil,\r\n Grid,\r\n PropertyKeys,\r\n} from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport {\r\n bindable,\r\n BindingEngine,\r\n Container,\r\n inject,\r\n ViewCompiler,\r\n} from 'aurelia-framework';\r\n\r\nPropertyKeys.ALL_PROPERTIES = [\r\n ...PropertyKeys.ALL_PROPERTIES,\r\n 'container',\r\n 'viewCompiler',\r\n 'overrideContext',\r\n];\r\n\r\nColDefUtil.ALL_PROPERTIES = [\r\n ...ColDefUtil.ALL_PROPERTIES,\r\n 'headerCellTemplate',\r\n 'metadata',\r\n];\r\n\r\n@inject(Container, Element, ViewCompiler, BindingEngine)\r\nclass DataGrid {\r\n @bindable gridOptions;\r\n @bindable gridData;\r\n @bindable disableAutosizeColumns;\r\n @bindable saveColumnState;\r\n\r\n // HACK: Used to stop rebinding of aurelia components due to the fact that the select2 behaves undesirably and loses it's selection\r\n // in any cell, including on rows other than rows that are added or removed.\r\n @bindable supressCellRenderRefresh;\r\n\r\n templateMap = new Map();\r\n headerTemplateMap = new Map();\r\n groupTemplateMap = new Map();\r\n minColumnStateColumnWidth = 50;\r\n\r\n constructor(container, element, viewCompiler, bindingEngine) {\r\n this.container = container;\r\n this.element = element;\r\n this.viewCompiler = viewCompiler;\r\n this.bindingEngine = bindingEngine;\r\n this.disableAutosizeColumns = false;\r\n\r\n this.handleMouseDown = this.handleMouseDown.bind(this);\r\n this.handleMouseUp = this.handleMouseUp.bind(this);\r\n this.handleMouseMove = this.handleMouseMove.bind(this);\r\n }\r\n\r\n get columnStateLocalStorageKey() {\r\n return `column-state.${this.saveColumnState}`;\r\n }\r\n\r\n handleMouseDown(event) {\r\n this.mousePressed = true;\r\n }\r\n\r\n handleMouseUp(event) {\r\n this.mousePressed = false;\r\n\r\n if (this.scrollInterval) {\r\n clearInterval(this.scrollInterval);\r\n this.scrollInterval = null;\r\n }\r\n }\r\n\r\n handleMouseMove(event) {\r\n if (!this.gridOptions.enableRangeSelection || !this.mousePressed)\r\n return;\r\n\r\n let threshold = 120;\r\n let gridViewportBoundingRectangle =\r\n this.gridViewport.getBoundingClientRect();\r\n\r\n if (this.scrollInterval) {\r\n clearInterval(this.scrollInterval);\r\n this.scrollInterval = null;\r\n }\r\n\r\n if (\r\n event.clientY <= gridViewportBoundingRectangle.top + threshold &&\r\n this.gridViewport.scrollTop !== 0\r\n ) {\r\n this.scrollInterval = setInterval(() => {\r\n this.gridViewport.scrollTop -=\r\n 10 *\r\n ((60 +\r\n gridViewportBoundingRectangle.top +\r\n threshold -\r\n event.clientY) /\r\n 60);\r\n\r\n if (this.gridViewport.scrollTop === 0)\r\n clearInterval(this.scrollInterval);\r\n }, 50);\r\n } else if (\r\n event.clientY >= gridViewportBoundingRectangle.bottom - threshold &&\r\n this.gridViewport.scrollHeight - this.gridViewport.scrollTop !==\r\n this.gridViewport.clientHeight\r\n ) {\r\n this.scrollInterval = setInterval(() => {\r\n this.gridViewport.scrollTop +=\r\n 10 *\r\n ((60 +\r\n event.clientY -\r\n (gridViewportBoundingRectangle.bottom - threshold)) /\r\n 60);\r\n\r\n if (\r\n this.gridViewport.scrollHeight -\r\n this.gridViewport.scrollTop ===\r\n this.gridViewport.clientHeight\r\n )\r\n clearInterval(this.scrollInterval);\r\n }, 50);\r\n }\r\n }\r\n\r\n bind(bindingContext, overrideContext) {\r\n this.overrideContext = overrideContext;\r\n }\r\n\r\n updateGridDataSubscription() {\r\n if (this.gridDataSubscription) {\r\n this.gridDataSubscription.dispose();\r\n this.gridDataSubscription = null;\r\n }\r\n\r\n if (!this.gridData) return;\r\n\r\n this.gridDataSubscription = this.bindingEngine\r\n .collectionObserver(this.gridData)\r\n .subscribe(this.gridDataCollectionChanged.bind(this));\r\n }\r\n\r\n gridDataChanged(supressSetRowData) {\r\n if (this.gridApi) {\r\n this.updateGridDataSubscription();\r\n this.refresh();\r\n }\r\n }\r\n\r\n gridDataCollectionChanged(changeRecords) {\r\n for (let changeRecord of changeRecords) {\r\n let rowDataTransaction = {};\r\n\r\n if (changeRecord.addedCount) {\r\n rowDataTransaction.addIndex = changeRecord.index;\r\n rowDataTransaction.add = [];\r\n\r\n for (\r\n var i = changeRecord.index;\r\n i < changeRecord.index + changeRecord.addedCount;\r\n i++\r\n )\r\n rowDataTransaction.add.push(this.gridData[i]);\r\n }\r\n\r\n if (changeRecord.removed && changeRecord.removed.length)\r\n rowDataTransaction.remove = changeRecord.removed;\r\n\r\n this.gridApi.applyTransaction(rowDataTransaction);\r\n }\r\n }\r\n\r\n refresh() {\r\n this.gridApi.setRowData(this.gridData);\r\n }\r\n\r\n gridOptionsChanged() {\r\n this.reinitialize();\r\n }\r\n\r\n reinitialize() {\r\n this.destroy();\r\n this.initialize();\r\n }\r\n\r\n initialize() {\r\n if (!this.gridOptions) return;\r\n\r\n this.gridOptions.suppressLoadingOverlay = true;\r\n this.gridOptions.suppressNoRowsOverlay = true;\r\n this.gridOptions.suppressColumnVirtualisation = true;\r\n this.gridOptions.suppressContextMenu = true;\r\n\r\n if (!this.gridOptions.rowHeight) this.gridOptions.rowHeight = 60;\r\n\r\n if (!this.gridOptions.headerHeight) this.gridOptions.headerHeight = 45;\r\n\r\n if (this.gridOptions.columnDefs)\r\n for (let columnDef of this.gridOptions.columnDefs) {\r\n let template =\r\n columnDef.template ?? this.templateMap.get(columnDef);\r\n if (template) {\r\n columnDef.cellRenderer = this.createCellRenderer(\r\n this.container,\r\n ``,\r\n );\r\n this.templateMap.set(columnDef, template);\r\n delete columnDef.template;\r\n } else if (\r\n columnDef.field &&\r\n !columnDef.valueFormatter &&\r\n !columnDef.valueGetter\r\n ) {\r\n columnDef.cellRenderer = this.createCellRenderer(\r\n this.container,\r\n \"\",\r\n );\r\n\r\n if (!columnDef.tooltip && !columnDef.tooltipField)\r\n columnDef.tooltipField = columnDef.field;\r\n }\r\n\r\n let headerCellTemplate =\r\n columnDef.headerCellTemplate ??\r\n this.headerTemplateMap.get(columnDef);\r\n if (headerCellTemplate) {\r\n columnDef.headerComponent = this.createHeaderComponent(\r\n this.container,\r\n ``,\r\n );\r\n this.headerTemplateMap.set(columnDef, headerCellTemplate);\r\n delete columnDef.headerCellTemplate;\r\n }\r\n\r\n let groupTemplate =\r\n columnDef.groupTemplate ??\r\n this.groupTemplateMap.get(columnDef);\r\n if (groupTemplate) {\r\n this.gridOptions.groupRowRenderer =\r\n this.createGroupRenderer(\r\n this.container,\r\n ``,\r\n );\r\n this.groupTemplateMap.set(columnDef, groupTemplate);\r\n delete columnDef.groupTemplate;\r\n }\r\n\r\n if (!columnDef.headerTooltip && columnDef.headerName)\r\n columnDef.headerTooltip = columnDef.headerName;\r\n }\r\n\r\n if (this.gridData) {\r\n this.gridOptions.rowData = this.gridData;\r\n this.updateGridDataSubscription();\r\n }\r\n\r\n this.gridOptions.container = this.container;\r\n this.gridOptions.viewCompiler = this.viewCompiler;\r\n this.gridOptions.overrideContext = this.overrideContext;\r\n\r\n if (this.saveColumnState) {\r\n const {\r\n onGridReady,\r\n onColumnMoved,\r\n onColumnResized,\r\n onSortChanged,\r\n } = this.gridOptions;\r\n this.gridOptions.onGridReady = () =>\r\n this.loadColumnStateFromLocalStorage(onGridReady);\r\n this.gridOptions.onColumnMoved = () =>\r\n this.saveColumnStateToLocalStorage(onColumnMoved);\r\n this.gridOptions.onColumnResized = () =>\r\n this.saveColumnStateToLocalStorage(onColumnResized);\r\n this.gridOptions.onSortChanged = () =>\r\n this.saveColumnStateToLocalStorage(onSortChanged);\r\n }\r\n\r\n new Grid(\r\n this.element,\r\n this.gridOptions,\r\n this.globalEventListener.bind(this),\r\n );\r\n\r\n this.gridApi = this.gridOptions.api;\r\n this.gridOptions.onFirstDataRendered = () =>\r\n this.gridApi.sizeColumnsToFit;\r\n\r\n setTimeout(() => {\r\n if (this.element.au['full-height'])\r\n this.element.au['full-height'].viewModel.setHeight();\r\n });\r\n\r\n if (this.gridOptions.enableRangeSelection) {\r\n this.gridViewport = this.element.querySelector('.ag-body-viewport');\r\n this.gridViewport.addEventListener(\r\n 'mousedown',\r\n this.handleMouseDown,\r\n );\r\n this.gridViewport.addEventListener(\r\n 'mousemove',\r\n this.handleMouseMove,\r\n );\r\n }\r\n }\r\n\r\n destroy() {\r\n if (this.gridDataSubscription) {\r\n this.gridDataSubscription.dispose();\r\n this.gridDataSubscription = null;\r\n }\r\n\r\n if (this.gridApi) {\r\n this.gridApi.destroy();\r\n this.gridApi = null;\r\n }\r\n\r\n if (this.gridViewport) {\r\n this.gridViewport.removeEventListener(\r\n 'mousedown',\r\n this.handleMouseDown,\r\n );\r\n this.gridViewport.removeEventListener(\r\n 'mousemove',\r\n this.handleMouseMove,\r\n );\r\n }\r\n }\r\n\r\n attached() {\r\n this.initialize();\r\n document.addEventListener('mouseup', this.handleMouseUp);\r\n }\r\n\r\n globalEventListener(eventType, event) {\r\n this.element.dispatchEvent(\r\n new CustomEvent(eventType.toLowerCase(), {\r\n bubbles: true,\r\n detail: event,\r\n }),\r\n );\r\n }\r\n\r\n detached() {\r\n document.removeEventListener('mouseup', this.handleMouseUp);\r\n this.destroy();\r\n }\r\n\r\n createHeaderComponent(container, template) {\r\n let viewCompiler = this.viewCompiler;\r\n let overrideContext = this.overrideContext;\r\n\r\n return class CustomHeaderComponent {\r\n init(params) {\r\n this.eGui = document.createElement('div');\r\n\r\n var viewFactory = viewCompiler.compile(template);\r\n var view = viewFactory.create(container);\r\n view.bind(params, overrideContext);\r\n view.appendNodesTo(this.eGui);\r\n }\r\n\r\n getGui() {\r\n return this.eGui;\r\n }\r\n };\r\n }\r\n\r\n createCellRenderer(container, template) {\r\n var localSupressCellRenderRefresh = this.supressCellRenderRefresh;\r\n var localViewCompiler = this.viewCompiler;\r\n var localOverrideContext = this.overrideContext;\r\n return class CustomCellRenderer {\r\n constructor() {\r\n var viewFactory = localViewCompiler.compile(template);\r\n this.view = viewFactory.create(container);\r\n this.rootElement = document.createElement('div');\r\n this.rootElement.setAttribute(\r\n 'style',\r\n 'display: inline-block; width: 100%',\r\n );\r\n }\r\n\r\n init(params) {\r\n this.refresh(params);\r\n this.initialized = true;\r\n }\r\n\r\n getGui() {\r\n return this.rootElement;\r\n }\r\n\r\n refresh(params) {\r\n if (this.initialized && localSupressCellRenderRefresh) return;\r\n\r\n this.view.bind(params, localOverrideContext);\r\n this.view.appendNodesTo(this.rootElement);\r\n this.view.attached();\r\n }\r\n\r\n destroy() {\r\n this.view.unbind();\r\n this.view.removeNodes();\r\n this.view.detached();\r\n }\r\n };\r\n }\r\n\r\n createGroupRenderer(container, template) {\r\n var localViewCompiler = this.viewCompiler;\r\n var localOverrideContext = this.overrideContext;\r\n return class CustomGroupRenderer {\r\n constructor() {\r\n var viewFactory = localViewCompiler.compile(template);\r\n this.view = viewFactory.create(container);\r\n this.rootElement = document.createElement('span');\r\n this.rootElement.classList.add('group-head');\r\n }\r\n\r\n init(params) {\r\n this.refresh(params);\r\n }\r\n\r\n getGui() {\r\n return this.rootElement;\r\n }\r\n\r\n refresh(params) {\r\n this.view.bind(params, localOverrideContext);\r\n this.view.appendNodesTo(this.rootElement);\r\n this.view.attached();\r\n }\r\n\r\n destroy() {\r\n this.view.unbind();\r\n this.view.removeNodes();\r\n this.view.detached();\r\n }\r\n };\r\n }\r\n\r\n loadColumnStateFromLocalStorage(base) {\r\n if (!this.saveColumnState) {\r\n base?.call();\r\n return;\r\n }\r\n\r\n const columnStateString = localStorage.getItem(\r\n this.columnStateLocalStorageKey,\r\n );\r\n if (!columnStateString) {\r\n base?.call();\r\n return;\r\n }\r\n\r\n const columnState = JSON.parse(columnStateString);\r\n this.overrideInvisibleColumnWidths(columnState);\r\n this.gridOptions.columnApi.applyColumnState({\r\n state: columnState,\r\n applyOrder: true,\r\n });\r\n\r\n base?.call();\r\n }\r\n\r\n saveColumnStateToLocalStorage(base) {\r\n if (!this.saveColumnState) {\r\n base?.call();\r\n return;\r\n }\r\n\r\n if (this.saveColumnStateDebounce)\r\n clearTimeout(this.saveColumnStateDebounce);\r\n\r\n this.saveColumnStateDebounce = setTimeout(() => {\r\n this.saveColumnStateDebounce = null;\r\n\r\n const columnState = this.gridOptions.columnApi.getColumnState();\r\n const trimmedColumnState = columnState.map((c) => ({\r\n colId: c.colId,\r\n sort: c.sort,\r\n sortIndex: c.sortIndex,\r\n width: c.width,\r\n }));\r\n localStorage.setItem(\r\n this.columnStateLocalStorageKey,\r\n JSON.stringify(trimmedColumnState),\r\n );\r\n }, 1000);\r\n\r\n base?.call();\r\n }\r\n\r\n overrideInvisibleColumnWidths(columnState) {\r\n columnState.forEach((col) => {\r\n if (col.width && col.width < this.minColumnStateColumnWidth) {\r\n delete col.width;\r\n }\r\n });\r\n\r\n return columnState;\r\n }\r\n}\r\n\r\nexport { DataGrid };\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport $ from 'jquery';\r\n\r\n@inject(Element)\r\nexport class DataTogglerCustomAttribute {\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n attached() {\r\n this.$toggler = $(this.element);\r\n this.$toggler.foundation();\r\n }\r\n\r\n detached() {\r\n if( !this.$toggler)\r\n return;\r\n\r\n var toggler = this.$toggler.data('zfPlugin');\r\n toggler?.destroy();\r\n }\r\n};\r\n","import { inject, bindable, bindingMode } from 'aurelia-framework';\r\nimport $ from 'jquery';\r\nimport 'foundation-datepicker-js';\r\nimport { formatDate, parseDate } from './datepicker-patch';\r\n\r\nfunction UTCDate() {\r\n return new Date(Date.UTC.apply(Date, arguments));\r\n}\r\n\r\nlet dates = $.fn.fdatepicker.dates;\r\nlet DPGlobal = $.fn.fdatepicker.DPGlobal;\r\n\r\n// override for inclusion of AM/PM indicator\r\nDPGlobal.validParts = /hh?|ii?|ss?|dd?|mm?|MM?|yy(?:yy)?|a/g;\r\n\r\nDPGlobal.parseDate = parseDate;\r\nDPGlobal.formatDate = formatDate;\r\n\r\n// Add initialized property in order to lazy load component (since it normally runs the 'update' method four times unnecessarily).\r\n$.fn.fdatepicker.Constructor.prototype.initialized = false;\r\n\r\n$.fn.fdatepicker.Constructor.prototype.click = function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if ($(e.target).hasClass('datepicker-close') || $(e.target).parent().hasClass('datepicker-close')) {\r\n this.hide();\r\n }\r\n\r\n var target = $(e.target).closest('span, td, th');\r\n if (target.length == 1) {\r\n if (target.is('.disabled')) {\r\n this.element.trigger({\r\n type: 'outOfRange',\r\n date: this.viewDate,\r\n startDate: this.startDate,\r\n endDate: this.endDate\r\n });\r\n return;\r\n }\r\n\r\n switch (target[0].nodeName.toLowerCase()) {\r\n case 'th':\r\n switch (target[0].className) {\r\n case 'date-switch':\r\n this.showMode(1);\r\n break;\r\n case 'prev':\r\n case 'next':\r\n var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);\r\n switch (this.viewMode) {\r\n case 0:\r\n this.viewDate = this.moveHour(this.viewDate, dir);\r\n break;\r\n case 1:\r\n this.viewDate = this.moveDate(this.viewDate, dir);\r\n break;\r\n case 2:\r\n this.viewDate = this.moveMonth(this.viewDate, dir);\r\n break;\r\n case 3:\r\n case 4:\r\n this.viewDate = this.moveYear(this.viewDate, dir);\r\n break;\r\n }\r\n this.fill();\r\n break;\r\n case 'today':\r\n var date = new Date();\r\n date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\r\n\r\n this.viewMode = this.startViewMode;\r\n this.showMode(0);\r\n this._setDate(date);\r\n break;\r\n }\r\n break;\r\n\r\n case 'span':\r\n if (!target.is('.disabled')) {\r\n if (target.is('.month')) {\r\n if (this.minView === 3) {\r\n var month = target.parent().find('span').index(target) || 0;\r\n var year = this.viewDate.getUTCFullYear(),\r\n day = 1,\r\n hours = this.viewDate.getUTCHours(),\r\n minutes = this.viewDate.getUTCMinutes(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n } else {\r\n this.viewDate.setUTCDate(1);\r\n let month = target.parent().find('span').index(target);\r\n this.viewDate.setUTCMonth(month);\r\n this.element.trigger({\r\n type: 'changeMonth',\r\n date: this.viewDate\r\n });\r\n }\r\n } else if (target.is('.year')) {\r\n if (this.minView === 4) {\r\n let year = parseInt(target.text(), 10) || 0;\r\n let month = 0,\r\n day = 1,\r\n hours = this.viewDate.getUTCHours(),\r\n minutes = this.viewDate.getUTCMinutes(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n } else {\r\n this.viewDate.setUTCDate(1);\r\n let year = parseInt(target.text(), 10) || 0;\r\n this.viewDate.setUTCFullYear(year);\r\n this.element.trigger({\r\n type: 'changeYear',\r\n date: this.viewDate\r\n });\r\n }\r\n } else if (target.is('.hour')) {\r\n let hours;\r\n if(this.nonMilitaryTime){\r\n if (target.text().indexOf(\"AM\") >= 0){\r\n hours = parseInt(target.text(), 10) || 0;\r\n if (hours === 12)\r\n hours = 0;\r\n }\r\n else{\r\n hours = (parseInt(target.text(), 10) + 12 || 0);\r\n if (hours === 24)\r\n hours = 12;\r\n }\r\n }\r\n else{\r\n hours = parseInt(target.text(), 10) || 0;\r\n }\r\n let year = this.viewDate.getUTCFullYear(),\r\n month = this.viewDate.getUTCMonth(),\r\n day = this.viewDate.getUTCDate(),\r\n minutes = this.viewDate.getUTCMinutes(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n } else if (target.is('.minute')) {\r\n let minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;\r\n let year = this.viewDate.getUTCFullYear(),\r\n month = this.viewDate.getUTCMonth(),\r\n day = this.viewDate.getUTCDate(),\r\n hours = this.viewDate.getUTCHours(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n\r\n if (this.viewMode != 0) {\r\n let oldViewMode = this.viewMode;\r\n this.showMode(-1);\r\n this.fill();\r\n if (oldViewMode == this.viewMode && this.autoclose) {\r\n this.hide();\r\n }\r\n } else {\r\n this.fill();\r\n if (this.autoclose) {\r\n this.hide();\r\n }\r\n }\r\n }\r\n break;\r\n case 'td':\r\n if (target.is('.day') && !target.is('.disabled')) {\r\n let day = parseInt(target.text(), 10) || 1;\r\n let year = this.viewDate.getUTCFullYear(),\r\n month = this.viewDate.getUTCMonth(),\r\n hours = this.viewDate.getUTCHours(),\r\n minutes = this.viewDate.getUTCMinutes(),\r\n seconds = this.viewDate.getUTCSeconds();\r\n if (target.is('.old')) {\r\n if (month === 0) {\r\n month = 11;\r\n year -= 1;\r\n } else {\r\n month -= 1;\r\n }\r\n } else if (target.is('.new')) {\r\n if (month == 11) {\r\n month = 0;\r\n year += 1;\r\n } else {\r\n month += 1;\r\n }\r\n }\r\n this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n }\r\n\r\n var prevViewMode = this.viewMode;\r\n\r\n this.showMode(-1);\r\n\r\n this.fill();\r\n if (prevViewMode == this.viewMode && this.autoclose) {\r\n this.hide();\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n\r\n$.fn.fdatepicker.Constructor.prototype.fill = function () {\r\n // Short circuit if called prior to the constructor running. (That is performed below in the Datepicker.attached method.)\r\n if (!this.initialized)\r\n return;\r\n\r\n if (this.date == null || this.viewDate == null) {\r\n return;\r\n }\r\n\r\n var d = new Date(this.viewDate.valueOf()),\r\n year = d.getUTCFullYear(),\r\n month = d.getUTCMonth(),\r\n dayMonth = d.getUTCDate(),\r\n hours = d.getUTCHours(),\r\n minutes = d.getUTCMinutes(),\r\n startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity,\r\n startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity,\r\n endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity,\r\n endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() : Infinity,\r\n currentDate = this.date && UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate()).valueOf(),\r\n today = new Date(),\r\n titleFormat = dates[this.language].titleFormat || dates['en'].titleFormat;\r\n // this.picker.find('.datepicker-days thead th.date-switch')\r\n // \t\t\t.text(DPGlobal.formatDate(new UTCDate(year, month), titleFormat, this.language));\r\n\r\n this.picker.find('.datepicker-days thead th:eq(1)')\r\n .text(dates[this.language].months[month] + ' ' + year);\r\n this.picker.find('.datepicker-hours thead th:eq(1)')\r\n .text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\r\n this.picker.find('.datepicker-minutes thead th:eq(1)')\r\n .text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\r\n\r\n\r\n this.picker.find('tfoot th.today')\r\n .text(dates[this.language].today)\r\n .toggle(this.todayBtn !== false);\r\n this.updateNavArrows();\r\n this.fillMonths();\r\n var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),\r\n day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\r\n prevMonth.setUTCDate(day);\r\n prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);\r\n var nextMonth = new Date(prevMonth.valueOf());\r\n nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\r\n nextMonth = nextMonth.valueOf();\r\n var html = [];\r\n var clsName;\r\n\r\n let startDate = (() => {\r\n if (this.startDate === -Infinity)\r\n return -Infinity;\r\n\r\n let date = new Date(this.startDate.getTime() - this.startDate.getTimezoneOffset() * 60000);\r\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\r\n })();\r\n\r\n let endDate = (() => {\r\n if (this.endDate === Infinity)\r\n return Infinity;\r\n\r\n let date = new Date(this.endDate.getTime() - this.endDate.getTimezoneOffset() * 60000);\r\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\r\n })();\r\n\r\n while (prevMonth.valueOf() < nextMonth) {\r\n if (prevMonth.getUTCDay() == this.weekStart) {\r\n html.push('');\r\n if (this.calendarWeeks) {\r\n // adapted from https://github.com/timrwood/moment/blob/master/moment.js#L128\r\n var a = new Date(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth(), prevMonth.getUTCDate() - prevMonth.getDay() + 10 - (this.weekStart && this.weekStart % 7 < 5 && 7)),\r\n b = new Date(a.getFullYear(), 0, 4),\r\n calWeek = ~~((a - b) / 864e5 / 7 + 1.5);\r\n html.push('' + calWeek + '');\r\n }\r\n }\r\n clsName = ' ' + this.onRender(prevMonth) + ' ';\r\n if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) {\r\n clsName += ' old';\r\n } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) {\r\n clsName += ' new';\r\n }\r\n // Compare internal UTC date with local today, not UTC today\r\n if (this.todayHighlight &&\r\n prevMonth.getUTCFullYear() == today.getFullYear() &&\r\n prevMonth.getUTCMonth() == today.getMonth() &&\r\n prevMonth.getUTCDate() == today.getDate()) {\r\n clsName += ' today';\r\n }\r\n if (currentDate && prevMonth.valueOf() == currentDate) {\r\n clsName += ' active';\r\n }\r\n\r\n var currDate = new Date(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth(), prevMonth.getUTCDate());\r\n\r\n if (currDate < startDate || currDate > endDate ||\r\n //if (prevMonth.valueOf() < this.startDate || prevMonth.valueOf() > this.endDate ||\r\n $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 ||\r\n $.inArray(prevMonth.valueOf(), this.datesDisabled) !== -1) {\r\n clsName += ' disabled';\r\n }\r\n html.push('' + prevMonth.getUTCDate() + '');\r\n if (prevMonth.getUTCDay() == this.weekEnd) {\r\n html.push('');\r\n }\r\n prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\r\n }\r\n this.picker.find('.datepicker-days tbody').empty().append(html.join(''));\r\n\r\n html = [];\r\n for (let i = 0; i < 24; i++) {\r\n let actual = UTCDate(year, month, dayMonth, i);\r\n clsName = '';\r\n // We want the previous hour for the startDate\r\n if ((actual.valueOf() + 3600000) < this.startDate || actual.valueOf() > this.endDate) {\r\n clsName += ' disabled';\r\n } else if (hours == i) {\r\n clsName += ' active';\r\n }\r\n if(this.nonMilitaryTime){\r\n let tts = (i%12);\r\n tts = (tts == 0 ? 12 : tts)\r\n let ampm = \"AM\"\r\n if(i>=12 && i<=23){\r\n ampm = \"PM\"\r\n }\r\n html.push('' + tts + ':00 '+ ampm + '');\r\n }\r\n else{\r\n html.push('' + i + ':00');\r\n }\r\n }\r\n this.picker.find('.datepicker-hours td').html(html.join(''));\r\n\r\n html = [];\r\n for (let i = 0; i < 60; i += this.minuteStep) {\r\n let actual = UTCDate(year, month, dayMonth, hours, i);\r\n clsName = '';\r\n if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) {\r\n clsName += ' disabled';\r\n } else if (Math.floor(minutes / this.minuteStep) == Math.floor(i / this.minuteStep)) {\r\n clsName += ' active';\r\n }\r\n if(this.nonMilitaryTime){\r\n let tts = (hours%12);\r\n tts = (tts == 0 ? 12 : tts)\r\n let ampm = \"AM\"\r\n if(hours>=12 && hours<=23){\r\n ampm = \"PM\"\r\n }\r\n html.push('' + tts + ':'+ (i < 10 ? '0' + i : i) +' '+ ampm + '');\r\n }\r\n else{\r\n html.push('' + hours + ':' + (i < 10 ? '0' + i : i) + '');\r\n }\r\n }\r\n this.picker.find('.datepicker-minutes td').html(html.join(''));\r\n\r\n var currentYear = this.date && this.date.getUTCFullYear();\r\n var months = this.picker.find('.datepicker-months')\r\n .find('th:eq(1)')\r\n .text(year)\r\n .end()\r\n .find('span').removeClass('active');\r\n if (currentYear && currentYear == year) {\r\n months.eq(this.date.getUTCMonth()).addClass('active');\r\n }\r\n if (year < startYear || year > endYear) {\r\n months.addClass('disabled');\r\n }\r\n if (year == startYear) {\r\n months.slice(0, startMonth).addClass('disabled');\r\n }\r\n if (year == endYear) {\r\n months.slice(endMonth + 1).addClass('disabled');\r\n }\r\n\r\n html = '';\r\n year = parseInt(year / 10, 10) * 10;\r\n var yearCont = this.picker.find('.datepicker-years')\r\n .find('th:eq(1)')\r\n .text(year + '-' + (year + 9))\r\n .end()\r\n .find('td');\r\n year -= 1;\r\n for (var i = -1; i < 11; i++) {\r\n html += ' endYear ? ' disabled' : '') + '\">' + year + '';\r\n year += 1;\r\n }\r\n yearCont.html(html);\r\n};\r\n\r\n\r\nvar originalShow = $.fn.fdatepicker.Constructor.prototype.show;\r\n$.fn.fdatepicker.Constructor.prototype.show = function (e) {\r\n if (this.disabled) {\r\n this.element[0].blur();\r\n return;\r\n }\r\n\r\n originalShow.call(this, e);\r\n}\r\n\r\n@inject(Element)\r\nexport class Datepicker {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) value;\r\n @bindable disabled;\r\n @bindable pickTime = false;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) minSelectableDate = -Infinity;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) maxSelectableDate = Infinity;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) inline = false;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n this.element.classList.add('input-icon');\r\n }\r\n\r\n attached() {\r\n this.isAttached = true;\r\n this.ensureInitialized();\r\n }\r\n \r\n handleFocus() {\r\n this.ensureInitialized(true);\r\n }\r\n\r\n handleBlur() {\r\n this.updateValue();\r\n }\r\n\r\n show() {\r\n this.ensureInitialized(true);\r\n }\r\n\r\n ensureInitialized(show) {\r\n if (!this.isAttached || this.$datepicker) {\r\n if (show)\r\n this.$datepicker.data('datepicker').show();\r\n\r\n return;\r\n }\r\n\r\n this.inputElement = this.element.querySelector('input');\r\n this.$datepicker = $(this.inputElement);\r\n this.$datepicker\r\n .fdatepicker({\r\n forceParse: false,\r\n format: this.pickTime ? 'mm/dd/yyyy hh:ii a' : 'mm/dd/yyyy',\r\n pickTime: this.pickTime,\r\n startDate: this.minSelectableDate,\r\n endDate: this.maxSelectableDate,\r\n nonMilitaryTime: true\r\n })\r\n .on('changeDate', this.updateValue.bind(this));\r\n\r\n // Get the datepicker component, once it is initialized.\r\n // Set the initialized property and call the 'update' method to force the call to the 'fill' method to popluate the UI.\r\n let datepicker = this.$datepicker.data('datepicker');\r\n datepicker.initialized = true;\r\n\r\n if (this.value)\r\n this.setDatePickerValue(new Date(this.value));\r\n\r\n datepicker.update();\r\n\r\n if (show)\r\n datepicker.show();\r\n\r\n this.$datepicker.disabled = !!this.disabled;\r\n }\r\n\r\n detached() {\r\n this.$datepicker && this.$datepicker.fdatepicker('remove');\r\n }\r\n\r\n valueChanged() {\r\n this.setDatePickerValue(!this.value ? null : new Date(this.value));\r\n }\r\n\r\n setDatePickerValue(value) {\r\n let datepicker = this.$datepicker?.data('datepicker');\r\n if (!datepicker)\r\n return;\r\n\r\n if (value) {\r\n datepicker.setDate(value);\r\n } else {\r\n // HACK: Since datepicker doesn't support setting an empty value in setDate method.\r\n datepicker.element.val('');\r\n }\r\n }\r\n\r\n // NOTE: This is used publicly to ensure the value is update prior to destruction in the data grid.\r\n updateValue() {\r\n let datepicker = this.$datepicker?.data('datepicker');\r\n if (!datepicker)\r\n return;\r\n\r\n function checkValid(value) {\r\n if (!value)\r\n return false;\r\n\r\n var dateTimeParts = value.split(' ');\r\n var dateParts = dateTimeParts[0].split('/');\r\n if (dateParts.length !== 3 || dateParts[2].length !== 4)\r\n return false;\r\n\r\n return !isNaN(new Date(value).getTime())\r\n }\r\n\r\n var stringValue = datepicker.element.val();\r\n this.value = stringValue && checkValid(stringValue) ?\r\n datepicker.getDate() :\r\n // HACK: If this.value is undefined, do not force a null value since it would trigger \r\n // a change on value which would in turn trigger validation.\r\n this.value === undefined ? undefined : null;\r\n }\r\n\r\n minSelectableDateChanged() {\r\n if (!this.$datepicker)\r\n return;\r\n this.$datepicker.data().datepicker.setStartDate(this.minSelectableDate);\r\n }\r\n\r\n maxSelectableDateChanged() {\r\n if (!this.$datepicker)\r\n return;\r\n this.$datepicker.data().datepicker.setEndDate(this.maxSelectableDate);\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { bindable, inject } from 'aurelia-framework';\r\nimport Chart from 'chart.js';\r\n\r\nChart.defaults.global.responsive = true;\r\nChart.defaults.global.defaultFontFamily = 'Raleway,sans-serif';\r\n\r\n@inject(Element)\r\nexport class DoughnutChart {\r\n @bindable header;\r\n @bindable footnote;\r\n @bindable chartData;\r\n @bindable linkUrl;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n chartDataChanged() {\r\n this.applyChartData();\r\n }\r\n\r\n attached() {\r\n this.chartCanvas = this.element.querySelector('canvas');\r\n this.doughnutChart = new Chart(this.chartCanvas.getContext('2d'), {\r\n type: 'doughnut',\r\n options: {\r\n animation: {\r\n duration: 2000\r\n },\r\n cutoutPercentage: 75,\r\n maintainAspectRatio: false,\r\n legend: {\r\n display: false,\r\n },\r\n tooltips: {\r\n enabled: false,\r\n }\r\n }\r\n });\r\n\r\n this.applyChartData();\r\n }\r\n\r\n applyChartData() {\r\n if (!this.chartData || !this.doughnutChart)\r\n return;\r\n\r\n var data = this.chartData.datapoints && this.chartData.datapoints.map(dp => dp.value);\r\n var noData = !!this.chartData.errorMessage || !data.some(value => value);\r\n\r\n this.doughnutChart.data = {\r\n labels: noData ? [] : this.chartData.datapoints.map(dp => dp.label),\r\n datasets: [{\r\n backgroundColor: noData ? [] : this.chartData.datapoints.map(dp => dp.backgroundColor),\r\n borderWidth: 1,\r\n borderColor: '#543c44',\r\n data: noData ? [] : data\r\n }] \r\n };\r\n\r\n this.doughnutChart.update();\r\n }\r\n\r\n detached() {\r\n if (this.doughnutChart)\r\n this.doughnutChart.destroy();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { bindable, bindingMode } from 'aurelia-framework';\r\n\r\nexport class ErrorTooltip {\r\n @bindable message;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) isVisible = false;\r\n\r\n tooltip;\r\n tooltipContainer;\r\n\r\n constructor() {\r\n this.isVisible = false;\r\n }\r\n\r\n isVisibleChanged() {\r\n this.initialize();\r\n }\r\n\r\n messageChanged() {\r\n this.initialize();\r\n }\r\n\r\n destroy() {\r\n this.tooltip && this.tooltip.destroy();\r\n }\r\n\r\n initialize() {\r\n if (!this.tooltipContainer || !this.isVisible)\r\n return;\r\n\r\n this.destroy();\r\n this.tooltip = new Foundation.Tooltip($(this.tooltipContainer), { tipText: this.message });\r\n }\r\n\r\n attached() {\r\n this.initialize();\r\n }\r\n\r\n detached() {\r\n this.destroy();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { bindable, bindingMode, inject, computedFrom, autoinject } from 'aurelia-framework';\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport DateRangeFilterOption from './date-range-filter-option';\r\n\r\nvar msInOneDay = 24 * 60 * 60 * 1000;\r\n\r\nexport function createDateRangeFilterOption(value, caption, numericValue = 0, isFuture = false): DateRangeFilterOption {\r\n var startDate = null;\r\n var endDate = null;\r\n\r\n if (value !== 'custom') {\r\n let now = new Date();\r\n if (isFuture) {\r\n startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n endDate = new Date(startDate.getTime() + (numericValue * msInOneDay));\r\n } else {\r\n endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n startDate = new Date(endDate.getTime() - (numericValue * msInOneDay));\r\n }\r\n }\r\n \r\n return {\r\n value,\r\n caption,\r\n numericValue,\r\n startDate,\r\n endDate\r\n } as DateRangeFilterOption;\r\n}\r\n\r\nexport function createDateRangeFilterOptions(): DateRangeFilterOption[] {\r\n return [\r\n createDateRangeFilterOption('last7Days', 'Last 7 Days', 7),\r\n createDateRangeFilterOption('last30Days', 'Last 30 Days', 30),\r\n createDateRangeFilterOption('last60Days', 'Last 60 Days', 60),\r\n createDateRangeFilterOption('last90Days', 'Last 90 Days', 90),\r\n createDateRangeFilterOption('custom', 'Specific Range')\r\n ] as DateRangeFilterOption[];\r\n}\r\n\r\n@autoinject\r\nexport class DateRangeFilter {\r\n @bindable defaultOption: DateRangeFilterOption;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) options: DateRangeFilterOption[];\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedOption: DateRangeFilterOption;\r\n @bindable pickTime = false;\r\n // Callers that want the dropdown to show something other than `caption` (e.g. a tagged\r\n // `displayCaption`) can override this; everyone else keeps today's plain caption text.\r\n @bindable titlePropertyName = 'caption';\r\n\r\n // subscriptions\r\n clearFilterSubscription: Subscription;\r\n\r\n constructor(private eventAggregator: EventAggregator) {\r\n this.clearDateRange = this.clearDateRange.bind(this);\r\n }\r\n\r\n attached() {\r\n this.clearFilterSubscription = this.eventAggregator.subscribe('filters.clear', this.clearDateRange);\r\n }\r\n\r\n detached() {\r\n this.clearFilterSubscription && this.clearFilterSubscription.dispose();\r\n }\r\n\r\n clearDateRange() {\r\n this.selectedOption = this.options.find(o => o.value === (this.defaultOption.value || this.defaultOption || 'custom'));\r\n }\r\n \r\n @computedFrom('selectedOption.startDate', 'selectedOption.endDate')\r\n get minSelectableDate(): number | Date {\r\n return this.selectedOption && this.selectedOption.startDate ? this.selectedOption.startDate : -Infinity\r\n }\r\n\r\n @computedFrom('selectedOption.startDate', 'selectedOption.endDate')\r\n get maxSelectableDate(): number | Date {\r\n return this.selectedOption && this.selectedOption.endDate ? this.selectedOption.endDate : Infinity;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\n\r\n@inject(EventAggregator)\r\nexport class FilterButtons {\r\n constructor(eventAggregator) {\r\n this.eventAggregator = eventAggregator;\r\n }\r\n\r\n applyFilters() {\r\n this.eventAggregator.publish('filters.apply');\r\n }\r\n\r\n clearFilters() {\r\n this.eventAggregator.publish('filters.clear');\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\n\r\ntype MapPlanFilterType = 'map' | 'plan';\r\n\r\n@autoinject\r\nexport class MapPlanFilter {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) mapSummaryOptions: SelectorOption[];\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) planSummaryOptions: SelectorOption[];\r\n\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedFilterType: MapPlanFilterType;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedValues: number[];\r\n\r\n readonly defaultFilterType = 'map';\r\n\r\n // subscriptions\r\n clearFilterSubscription: Subscription;\r\n\r\n constructor(private eventAggregator: EventAggregator) {\r\n this.selectedFilterType = this.selectedFilterType ?? this.defaultFilterType;\r\n this.reset = this.reset.bind(this);\r\n }\r\n\r\n attached() {\r\n this.clearFilterSubscription = this.eventAggregator.subscribe('filters.clear', this.reset);\r\n }\r\n\r\n detached() {\r\n this.clearFilterSubscription && this.clearFilterSubscription.dispose();\r\n }\r\n\r\n reset() {\r\n this.selectedFilterType = this.defaultFilterType;\r\n this.selectedValues = null;\r\n }\r\n\r\n selectedFilterTypeChanged() {\r\n this.selectedValues = null;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, bindable, bindingMode } from 'aurelia-framework';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\n\r\n@inject(Element, EventAggregator)\r\nexport class OrganizationFilter {\r\n @bindable organizations;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedOrganizations;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) isFiltering;\r\n\r\n constructor(element, eventAggregator) {\r\n this.element = element;\r\n this.eventAggregator = eventAggregator;\r\n this.selectedOrganizations = [];\r\n this.isFiltering = false;\r\n this.clearSelectedOrganizations = this.clearSelectedOrganizations.bind(this);\r\n }\r\n\r\n selectedOrganizationsChanged() {\r\n this.isFiltering = !!this.selectedOrganizations.length;\r\n }\r\n\r\n clearSelectedOrganizations() { \r\n this.selectedOrganizations = [];\r\n }\r\n\r\n attached() {\r\n this.clearFilterSubscription = this.eventAggregator.subscribe('filters.clear', this.clearSelectedOrganizations);\r\n }\r\n \r\n detached() {\r\n this.clearFilterSubscription && this.clearFilterSubscription.dispose();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { bindable, bindingMode, inject } from 'aurelia-framework';\r\n\r\n@inject(Element, EventAggregator)\r\nexport class TestMethodFilter {\r\n @bindable testMethods;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedTestMethods;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) isFiltering;\r\n\r\n constructor(element, eventAggregator) {\r\n this.element = element;\r\n this.eventAggregator = eventAggregator;\r\n this.selectedTestMethods = [];\r\n this.isFiltering = false;\r\n this.clearSelectedTestMethods =\r\n this.clearSelectedTestMethods.bind(this);\r\n }\r\n\r\n selectedTestMethodsChanged() {\r\n this.isFiltering = !!this.selectedTestMethods.length;\r\n }\r\n\r\n clearSelectedTestMethods() {\r\n this.selectedTestMethods = [];\r\n }\r\n\r\n attached() {\r\n this.clearFilterSubscription = this.eventAggregator.subscribe(\r\n 'filters.clear',\r\n this.clearSelectedTestMethods\r\n );\r\n }\r\n\r\n detached() {\r\n this.clearFilterSubscription && this.clearFilterSubscription.dispose();\r\n }\r\n}\r\n","module.exports = \"\";","import { Calendar, createElement } from '@fullcalendar/core';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin from '@fullcalendar/moment';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport { bindable, bindingMode, inject } from 'aurelia-framework';\r\nimport moment from 'moment';\r\nimport DateUtility from '../date-utility';\r\n\r\nclass CustomDayHeader {\r\n render() {\r\n return createElement('div', {}, this.props.text)\r\n }\r\n}\r\n\r\n//export interface FullCalendarEvent {\r\n// id?: string;\r\n// groupId?: string;\r\n// title: string;\r\n// start: string;\r\n// end: string;\r\n// description?: string;\r\n// allDay?: boolean;\r\n// url?: string;\r\n// extendedProps?: any;\r\n// backgroundColor?: string; // override the default\r\n//}\r\n\r\n//export type FullCalendarView = 'dayGridMonth' | 'timeGridWeek';\r\n\r\n@inject(Element)\r\nexport class FullCalendar {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) events;\r\n @bindable navLinks; // can click day/week names to navigate views\r\n @bindable dayMaxEvents; // allow \"more\" link when too many events\r\n @bindable editable;\r\n @bindable initialDate;\r\n @bindable initialView;\r\n\r\n // DOM\r\n calendarElement;\r\n calendar;\r\n \r\n // state\r\n isAttached;\r\n tooltips = [];\r\n\r\n constructor(element) {\r\n this.element = element;\r\n this.eventClick = this.eventClick.bind(this);\r\n }\r\n\r\n attached() {\r\n this.initialize();\r\n this.isAttached = true;\r\n }\r\n\r\n detached() {\r\n this.calendar?.destroy();\r\n this.calendar = null;\r\n\r\n this.isAttached = false;\r\n }\r\n\r\n initialize() {\r\n let initialDate =\r\n this.initialDate && typeof this.initialDate === 'string' ? DateUtility.stringToMoment(this.initialDate) : \r\n this.initialDate ? moment(this.initialDate).format('YYYY-MM-DD') :\r\n this.initialDate;\r\n\r\n this.calendar = new Calendar(this.calendarElement, {\r\n plugins: [ momentPlugin, interactionPlugin, dayGridPlugin, timeGridPlugin ],\r\n titleFormat: '{MMMM {D}}, YYYY',\r\n headerToolbar: {\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: 'dayGridMonth,timeGridWeek,timeGridDay',\r\n },\r\n height: '100%',\r\n initialDate: initialDate ?? moment().format('YYYY-MM-DD'),\r\n initialView: 'timeGridWeek',\r\n slotDuration: '00:15',\r\n navLinks: this.navLinks ?? true,\r\n editable: this.editable ?? true,\r\n dayMaxEvents: this.dayMaxEvents ?? true,\r\n dayMaxEventRows: 1,\r\n eventMaxStack: 1,\r\n expandRows: false,\r\n dayHeaderContent(arg) {\r\n return createElement(CustomDayHeader, { text: arg.text })\r\n },\r\n nowIndicator: true,\r\n handleWindowResize: true,\r\n eventClick: this.eventClick,\r\n });\r\n\r\n this.addEventSources();\r\n }\r\n\r\n render() {\r\n this.calendar?.render();\r\n }\r\n\r\n gotoDate(date) {\r\n this.calendar?.gotoDate(date);\r\n }\r\n\r\n switchView(view, date) {\r\n this.calendar?.changeView(view, date);\r\n }\r\n\r\n eventsChanged() {\r\n this.addEventSources();\r\n this.render();\r\n }\r\n\r\n eventClick (info) {\r\n let event = info?.event;\r\n if (event) {\r\n this.element.dispatchEvent(new CustomEvent('fullcalendareventclick', {\r\n bubbles: true,\r\n detail: {\r\n event: event,\r\n element: info.el\r\n }\r\n }));\r\n }\r\n }\r\n\r\n addEventSources() {\r\n if (!this.calendar)\r\n return;\r\n\r\n this.calendar.removeAllEventSources();\r\n this.calendar.addEventSource( {\r\n events: this.events,\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, bindable } from 'aurelia-framework';\r\n\r\n@inject(Element)\r\nexport class FullHeightCustomAttribute {\r\n @bindable shrink;\r\n @bindable fixedHeightOverride;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n this.setHeight = () => {\r\n if (this.fixedHeightOverride) {\r\n this.element.style.height = this.fixedHeightOverride + 'px';\r\n return;\r\n }\r\n\r\n var headerBounds = document.getElementsByTagName('footer')[0].getBoundingClientRect();\r\n var footerTop = headerBounds.y || headerBounds.top;\r\n\r\n var elementBounds = this.element.getBoundingClientRect();\r\n var currentTop = elementBounds.y || elementBounds.top;\r\n\r\n this.element.style.height = (footerTop - currentTop - (this.shrink || 0)) + 'px';\r\n };\r\n }\r\n\r\n fixedHeightOverrideChanged() {\r\n setTimeout(() => this.setHeight());\r\n }\r\n\r\n attached() {\r\n window.addEventListener('optimizedresize', this.setHeight);\r\n window.document.addEventListener('pagecontentsizechange', this.setHeight);\r\n\r\n this.setHeight();\r\n }\r\n\r\n detached() {\r\n window.removeEventListener('optimizedresize', this.setHeight);\r\n window.document.removeEventListener('pagecontentsizechange', this.setHeight);\r\n }\r\n\r\n update() {\r\n setTimeout(() => this.setHeight());\r\n }\r\n}\r\n","import { PLATFORM } from 'aurelia-framework';\r\n\r\nexport function configure(config) {\r\n config.globalResources([\r\n PLATFORM.moduleName('./accordion'),\r\n PLATFORM.moduleName('./accordion-item'),\r\n PLATFORM.moduleName('./content-size-change'),\r\n PLATFORM.moduleName('./data-dropdown'),\r\n PLATFORM.moduleName('./data-equalizer'),\r\n PLATFORM.moduleName('./data-grid'),\r\n PLATFORM.moduleName('./data-toggler'),\r\n PLATFORM.moduleName('./datepicker'),\r\n PLATFORM.moduleName('./doughnut-chart'),\r\n PLATFORM.moduleName('./mini-doughnut-chart'),\r\n PLATFORM.moduleName('./error-tooltip'),\r\n PLATFORM.moduleName('./full-calendar'),\r\n PLATFORM.moduleName('./full-height'),\r\n PLATFORM.moduleName('./info-tip'),\r\n PLATFORM.moduleName('./keyhold-prevent-focus'),\r\n PLATFORM.moduleName('./notify-form-changes'),\r\n PLATFORM.moduleName('./record-change-list'),\r\n PLATFORM.moduleName('./required'),\r\n PLATFORM.moduleName('./scroll-into-view'),\r\n PLATFORM.moduleName('./select2'),\r\n PLATFORM.moduleName('./select2-item-template'),\r\n PLATFORM.moduleName('./selector'),\r\n PLATFORM.moduleName('./selector-item-template'),\r\n PLATFORM.moduleName('./slider'),\r\n PLATFORM.moduleName('./time-selector'),\r\n PLATFORM.moduleName('./filters/filter-buttons'),\r\n PLATFORM.moduleName('./filters/date-range-filter'),\r\n PLATFORM.moduleName('./filters/organization-filter'),\r\n PLATFORM.moduleName('./filters/map-plan-filter'),\r\n PLATFORM.moduleName('./filters/test-method-filter'),\r\n ]);\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\n\r\nexport class InfoTip {\r\n @bindable message;\r\n tooltipContainer;\r\n\r\n messageChanged() {\r\n this.initialize();\r\n }\r\n\r\n destroy() {\r\n let $element = $(this.tooltipContainer);\r\n let plugin = $element.data('zfPlugin');\r\n plugin?.destroy();\r\n }\r\n\r\n initialize() {\r\n if (!this.tooltipContainer)\r\n return;\r\n\r\n this.destroy();\r\n \r\n new Foundation.Tooltip($(this.tooltipContainer), { tipText: this.message });\r\n }\r\n\r\n attached() {\r\n this.initialize();\r\n }\r\n\r\n detached() {\r\n this.destroy();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\n\r\n@inject(Element)\r\nexport class KeyholdPreventFocusCustomAttribute {\r\n constructor(element) {\r\n this.element = element;\r\n this.handleKeyDown = this.handleKeyDown.bind(this);\r\n this.handleKeyUp = this.handleKeyUp.bind(this);\r\n }\r\n\r\n attached() {\r\n document.addEventListener('keydown', this.handleKeyDown);\r\n document.addEventListener('keyup', this.handleKeyUp);\r\n }\r\n\r\n detached() {\r\n document.removeEventListener('keydown', this.handleKeyDown);\r\n document.removeEventListener('keyup', this.handleKeyUp);\r\n }\r\n\r\n handleKeyDown(event) {\r\n if (this.enabled)\r\n return;\r\n\r\n if (event.shiftKey || event.ctrlKey)\r\n this.enable();\r\n }\r\n\r\n handleKeyUp(event) {\r\n if (this.enabled && !event.shiftKey && !event.ctrlKey)\r\n this.disable();\r\n }\r\n\r\n enable() {\r\n switch (this.element.tagName) {\r\n case 'INPUT':\r\n if (document.activeElement === this.element)\r\n return;\r\n\r\n this.oldDisabledValue = this.element.disabled;\r\n this.element.disabled = true;\r\n break;\r\n\r\n default:\r\n this.element.au?.controller?.viewModel?.disableFocus?.();\r\n }\r\n\r\n this.element.classList.add('keyhold-active');\r\n\r\n this.enabled = true;\r\n }\r\n\r\n disable() {\r\n switch (this.element.tagName) {\r\n case 'INPUT':\r\n this.element.disabled = this.oldDisabledValue;\r\n break;\r\n\r\n default:\r\n this.element.au?.controller?.viewModel?.enableFocus?.();\r\n }\r\n\r\n this.element.classList.remove('keyhold-active');\r\n\r\n this.enabled = false;\r\n }\r\n}\r\n","import { bindable, inject } from 'aurelia-framework';\r\nimport Chart from 'chart.js';\r\n\r\nChart.defaults.global.responsive = true;\r\nChart.defaults.global.defaultFontFamily = 'Raleway,sans-serif';\r\n\r\n@inject(Element)\r\nexport class MiniDoughnutChart {\r\n\r\n @bindable chartData;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n chartDataChanged() {\r\n this.applyChartData();\r\n }\r\n\r\n attached() {\r\n this.chartCanvas = this.element.querySelector('canvas');\r\n this.doughnutChart = new Chart(this.chartCanvas.getContext('2d'), {\r\n type: 'doughnut',\r\n options: {\r\n animation: {\r\n duration: 2000\r\n },\r\n cutoutPercentage: 75,\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n legend: {\r\n display: false\r\n },\r\n tooltips: {\r\n enabled: false,\r\n }\r\n }\r\n });\r\n\r\n this.applyChartData();\r\n }\r\n\r\n applyChartData() {\r\n if (!this.chartData || !this.doughnutChart)\r\n return;\r\n\r\n this.doughnutChart.data = {\r\n labels: [],\r\n datasets: [{\r\n backgroundColor: [this.chartData.fillColor],\r\n borderWidth: 1,\r\n borderColor: '#543c44',\r\n data: [this.chartData.value, this.chartData.total - this.chartData.value]\r\n }] \r\n };\r\n\r\n this.doughnutChart.update();\r\n }\r\n\r\n detached() {\r\n if (this.doughnutChart)\r\n this.doughnutChart.destroy();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { bindable, inject } from 'aurelia-framework';\r\n\r\n@inject(Element)\r\nexport class NotifyFormChangesCustomAttribute {\r\n @bindable disabled;\r\n @bindable enableSelect2;\r\n @bindable enableDatepicker;\r\n\r\n // Enables listening for custom events with optional element to listen on (if the element is not a child of this component).\r\n @bindable customEvents; // type: Array\r\n\r\n constructor(element) {\r\n this.element = element;\r\n this.handleFormChange = this.handleFormChange.bind(this);\r\n }\r\n\r\n attached() {\r\n this.element.addEventListener('input', this.handleFormChange);\r\n this.element.addEventListener('change', this.handleFormChange);\r\n\r\n if (this.enableDatepicker) {\r\n this.element.addEventListener('datepickerchanged', this.handleFormChange);\r\n this.datepickerAdded = true;\r\n }\r\n\r\n if (this.enableSelect2) {\r\n this.element.addEventListener('select2change', this.handleFormChange);\r\n this.select2Added = true;\r\n }\r\n\r\n if (this.customEvents && this.customEvents.length)\r\n for (let customEvent of this.customEvents) {\r\n if (typeof customEvent === 'string')\r\n this.element.addEventListener(customEvent, this.handleFormChange);\r\n else\r\n customEvent.element.addEventListener(customEvent.event, this.handleFormChange);\r\n }\r\n }\r\n\r\n detached() {\r\n this.element.removeEventListener('input', this.handleFormChange);\r\n this.element.removeEventListener('change', this.handleFormChange);\r\n\r\n if (this.datepickerAdded)\r\n this.element.removeEventListener('datepickerchanged', this.handleFormChange);\r\n\r\n if (this.select2Added) \r\n this.element.removeEventListener('select2change', this.handleFormChange);\r\n\r\n if (this.customEvents && this.customEvents.length)\r\n for (let customEvent of this.customEvents) {\r\n if (typeof customEvent === 'string')\r\n this.element.removeEventListener(customEvent, this.handleFormChange);\r\n else\r\n customEvent.element.removeEventListener(customEvent.event, this.handleFormChange);\r\n }\r\n }\r\n\r\n handleFormChange($event) {\r\n if ($event.srcElement.classList.contains('select2-search__field'))\r\n return;\r\n\r\n if (this.disabled)\r\n return;\r\n\r\n this.element.dispatchEvent(new CustomEvent('formchange', { bubbles: true, detail: { formElement: $event.srcElement } }));\r\n }\r\n}\r\n","import { inject, bindable } from 'aurelia-framework';\r\n\r\n@inject(Element)\r\nexport class RecordChangeList {\r\n @bindable recordTypeTitle;\r\n @bindable recordChanges;\r\n @bindable propertyDisplayNames;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n loadRecordChanges() {\r\n this.element.dispatchEvent(new CustomEvent('loadrecordchanges', { bubbles: true, detail: {} }));\r\n }\r\n\r\n getRelationshipOperationDisplay(operation) {\r\n switch (operation.toLowerCase()) {\r\n case 'add':\r\n return 'Added';\r\n case 'remove':\r\n return 'Removed';\r\n case 'modify':\r\n return 'Modified';\r\n default:\r\n return 'Unknown';\r\n }\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, children } from 'aurelia-framework';\r\n\r\n@autoinject\r\nexport class RequiredCustomAttribute {\r\n @bindable title: string;\r\n @bindable disabled: boolean | string;\r\n\r\n requiredIndicator: Element;\r\n requiredIndicatorAdded: boolean;\r\n\r\n constructor(private element: Element) {\r\n let i = document.createElement('i');\r\n i.classList.add('fa', 'fa-asterisk');\r\n i.title = this.title ?? 'This field is required.';\r\n\r\n this.requiredIndicator = i;\r\n this.element.appendChild(document.createTextNode(' '));\r\n this.updateIndicatorInDOM();\r\n }\r\n\r\n disabledChanged(newValue, oldValue) {\r\n this.updateIndicatorInDOM();\r\n }\r\n\r\n updateIndicatorInDOM() {\r\n if (this.disabled === true || this.disabled === 'true') {\r\n if (this.requiredIndicatorAdded)\r\n this.element.removeChild(this.requiredIndicator);\r\n } else {\r\n this.element.appendChild(this.requiredIndicator);\r\n this.requiredIndicatorAdded = true;\r\n }\r\n }\r\n\r\n attached() {\r\n if (this.disabled === true || this.disabled === 'true')\r\n return;\r\n\r\n this.updateIndicatorInDOM();\r\n }\r\n}\r\n","import { inject, bindable } from 'aurelia-framework';\r\n\r\n@inject(Element)\r\nexport class ScrollIntoViewCustomAttribute {\r\n @bindable enabled;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n }\r\n\r\n enabledChanged() {\r\n if (!this.enabled)\r\n return;\r\n\r\n var child = this.element;\r\n var parent = child.parentElement;\r\n if (!parent)\r\n return;\r\n\r\n var firstChild = parent.children[0];\r\n\r\n var parentBounds = parent.getBoundingClientRect();\r\n var windowTop = firstChild.getBoundingClientRect().top;\r\n var childBounds = child.getBoundingClientRect();\r\n\r\n if (childBounds.bottom - parentBounds.top > parentBounds.height)\r\n parent.scrollTop = childBounds.top - parentBounds.top;\r\n else if (childBounds.top < parentBounds.top) {\r\n parent.scrollTop = childBounds.top - windowTop;\r\n }\r\n }\r\n};\r\n","import {\r\n Container,\r\n TaskQueue,\r\n ViewCompiler,\r\n bindable,\r\n bindingMode,\r\n child,\r\n inject,\r\n} from 'aurelia-framework';\r\n\r\n@inject(Element, TaskQueue, Container, ViewCompiler)\r\nexport class Select2 {\r\n @bindable enableCustomItems;\r\n @bindable suppressFullWidth;\r\n @bindable placeholder;\r\n @bindable disablePlaceholder;\r\n @bindable items;\r\n @bindable allowClear;\r\n @bindable disabled;\r\n @bindable multiple;\r\n @bindable titlePropertyName;\r\n @bindable valuePropertyName;\r\n @bindable groupPropertyName;\r\n @bindable disabledPropertyName;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedItems;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedItem;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedValues;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedValue;\r\n @bindable minimumResultsForSearch;\r\n @bindable filter;\r\n @child('select2-item-template') itemTemplate;\r\n\r\n constructor(element, taskQueue, container, viewCompiler) {\r\n this.element = element;\r\n this.container = container;\r\n this.viewCompiler = viewCompiler;\r\n this.taskQueue = taskQueue;\r\n\r\n this.closeDropdownOnEnterKey = this.closeDropdownOnEnterKey.bind(this);\r\n }\r\n\r\n disabledChanged() {\r\n if (!this.$select) return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n created(owningView, myView) {\r\n var controller = owningView.controllers.find((c) => c.view === myView);\r\n var boundProperty = controller.boundProperties.find((bp) =>\r\n bp.binding.targetProperty.startsWith('selected'),\r\n ).binding.targetProperty;\r\n this[boundProperty + 'Bound'] = true;\r\n }\r\n\r\n placeholderChanged() {\r\n if (!this.$select) return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n reinitialize() {\r\n // Defer re-initialization to allow the binding of items to mutate the select element.\r\n this.taskQueue.queueTask(() => {\r\n this.destroy();\r\n this.initialize();\r\n this.trySetDefault();\r\n });\r\n }\r\n\r\n itemsChanged() {\r\n if (this.groupPropertyName && this.items) {\r\n this.groupedItems = this.items.reduce((groupedItems, item) => {\r\n let group = item[this.groupPropertyName];\r\n groupedItems.has(group)\r\n ? groupedItems.get(group).push(item)\r\n : groupedItems.set(group, [item]);\r\n\r\n return groupedItems;\r\n }, new Map());\r\n }\r\n\r\n if (!this.$select) return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n itemTemplateChanged() {\r\n if (!this.$select) return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n selectedItemsChanged() {\r\n this.updateSelection();\r\n this.dispatchEvent();\r\n }\r\n\r\n selectedItemChanged() {\r\n this.updateSelection();\r\n this.dispatchEvent();\r\n }\r\n\r\n selectedValuesChanged() {\r\n this.updateSelection();\r\n this.dispatchEvent();\r\n }\r\n\r\n selectedValueChanged() {\r\n this.updateSelection();\r\n this.dispatchEvent();\r\n }\r\n\r\n closeDropdownOnEnterKey(e) {\r\n if (e.keyCode === 13) this.$select && this.$select.select2('close');\r\n }\r\n\r\n attached() {\r\n $('body').on('keydown', 'input.select2-search__field', this.closeDropdownOnEnterKey);\r\n\r\n this.$select = $(this.element.getElementsByTagName('select')[0]);\r\n this.initialize();\r\n }\r\n\r\n dispatchEvent() {\r\n this.element.dispatchEvent(\r\n new CustomEvent('select2change', {\r\n bubbles: true,\r\n detail: {\r\n selectedItems: this.selectedItems,\r\n selectedItem: this.selectedItem,\r\n selectedValues: this.selectedValues,\r\n selectedValue: this.selectedValue,\r\n },\r\n }),\r\n );\r\n }\r\n\r\n detached() {\r\n $('body').off('keydown', 'input.select2-search__field', this.closeDropdownOnEnterKey);\r\n\r\n this.destroy();\r\n this.isDetached = true;\r\n }\r\n\r\n createTag(params) {\r\n if (!params.term || !this.items) return;\r\n\r\n var tag = {\r\n id: params.term,\r\n text: params.term,\r\n tag: true,\r\n };\r\n\r\n tag[this.valuePropertyName || 'value'] = params.term;\r\n tag[this.titlePropertyName || 'title'] = params.term;\r\n\r\n return tag;\r\n }\r\n\r\n insertTag(data, tag) {\r\n this.element.dispatchEvent(\r\n new CustomEvent('tagcreated', {\r\n bubbles: true,\r\n detail: { tag },\r\n }),\r\n );\r\n }\r\n\r\n findItemByValue(items, value) {\r\n // coercion used here intentionally to support int/string/etc\r\n return items.find((item) => {\r\n var itemValue = item[this.valuePropertyName || 'value'];\r\n // Handle boolean string values differently since coersion doesn't work below.\r\n if (typeof itemValue === 'boolean') {\r\n let booleanValue = value === 'true';\r\n return itemValue === booleanValue;\r\n }\r\n\r\n return itemValue == value;\r\n });\r\n }\r\n\r\n initialize() {\r\n this.$select\r\n .select2({\r\n placeholder: this.placeholder || (this.multiple ? 'Select items' : 'Select item'),\r\n minimumResultsForSearch: this.enableCustomItems\r\n ? 0\r\n : this.minimumResultsForSearch || this.minimumResultsForSearch === 0\r\n ? this.minimumResultsForSearch\r\n : Infinity,\r\n allowClear: !!this.allowClear,\r\n dropdownAutoWidth: true,\r\n ...(this.itemTemplate && {\r\n templateResult: (state) => {\r\n let viewFactory = this.viewCompiler.compile(this.itemTemplate.template);\r\n let view = viewFactory.create(this.container);\r\n let rootElement = document.createElement('div');\r\n rootElement.setAttribute('style', 'display: inline-block; width: 100%');\r\n\r\n view.bind(\r\n {\r\n item:\r\n 'id' in state\r\n ? this.findItemByValue(this.items, state.id)\r\n : null,\r\n },\r\n this.itemTemplate.parentBindingContext,\r\n );\r\n view.appendNodesTo(rootElement);\r\n view.attached();\r\n\r\n return rootElement;\r\n },\r\n }),\r\n disabled: !!this.disabled,\r\n tags: !!this.enableCustomItems,\r\n createTag: !!this.enableCustomItems && this.createTag.bind(this),\r\n insertTag: !!this.enableCustomItems && this.insertTag.bind(this),\r\n language: !this.enableCustomItems\r\n ? null\r\n : {\r\n noResults: () => {\r\n return `Press 'Enter' to add this custom text`;\r\n },\r\n },\r\n ...(this.filter && {\r\n matcher: (params, data) => {\r\n if (!params.term) return data;\r\n\r\n let matched =\r\n 'id' in data &&\r\n this.filter(params.term, this.findItemByValue(this.items, data.id));\r\n if (matched) return data;\r\n\r\n return null;\r\n },\r\n }),\r\n })\r\n .on('select2:select', (e) => {\r\n var item = this.findItemByValue(this.items, e.params.data.id);\r\n if (!item) return;\r\n\r\n var selectedItems = this.multiple ? [...this.getSelectedItems(), item] : [item];\r\n\r\n this.setSelection(selectedItems);\r\n })\r\n .on('select2:unselect', (e) => {\r\n var selectedItems = [...this.getSelectedItems()];\r\n var item = this.findItemByValue(selectedItems, e.params.data.id);\r\n var itemToRemoveIndex = selectedItems.indexOf(item);\r\n if (itemToRemoveIndex === -1) return;\r\n\r\n selectedItems.splice(itemToRemoveIndex, 1);\r\n\r\n this.setSelection(selectedItems);\r\n });\r\n\r\n this.trySetDefault();\r\n this.updateSelection();\r\n }\r\n\r\n trySetDefault() {\r\n if (!this.getSelectedValues().length) {\r\n if (this.multiple) {\r\n this.setSelection([]);\r\n } else if (this.disablePlaceholder && this.items && this.items.length) {\r\n this.setSelection(this.items[0]);\r\n }\r\n }\r\n }\r\n\r\n setSelection(selectedItems) {\r\n if (this.selectedItemsBound) this.selectedItems = selectedItems;\r\n else if (this.selectedItemBound)\r\n this.selectedItem = selectedItems.length ? selectedItems[0] : null;\r\n else if (this.selectedValuesBound)\r\n this.selectedValues = selectedItems.length\r\n ? selectedItems.map((i) => i[this.valuePropertyName || 'value'])\r\n : [];\r\n else if (this.selectedValueBound)\r\n this.selectedValue = selectedItems.length\r\n ? selectedItems.map((i) => i[this.valuePropertyName || 'value'])[0]\r\n : null;\r\n }\r\n\r\n updateSelection() {\r\n if (!this.$select) return;\r\n\r\n var values = this.getSelectedValues();\r\n\r\n var finalValue = values.length\r\n ? this.multiple\r\n ? values.map((e) => (typeof e === 'boolean' ? (e ? 'true' : 'false') : e))\r\n : values.map((e) => (typeof e === 'boolean' ? (e ? 'true' : 'false') : e))[0] ??\r\n null\r\n : null;\r\n\r\n this.$select.val(finalValue).trigger('change');\r\n }\r\n\r\n getSelectedValues() {\r\n if (this.selectedItemsBound)\r\n return (this.selectedItems || []).map((i) => i[this.valuePropertyName || 'value']);\r\n else if (this.selectedItemBound)\r\n return this.selectedItem ? [this.selectedItem[this.valuePropertyName || 'value']] : [];\r\n else if (this.selectedValuesBound) return this.selectedValues ?? [];\r\n else if (this.selectedValueBound) return [this.selectedValue ?? null];\r\n\r\n return [];\r\n }\r\n\r\n getSelectedItems() {\r\n var selectedValues = this.getSelectedValues();\r\n\r\n return (this.items || []).filter((i) =>\r\n selectedValues.some((v) => v === i[this.valuePropertyName || 'value']),\r\n );\r\n }\r\n\r\n destroy() {\r\n if (this.isDetached) return;\r\n\r\n this.$select.select2('destroy').off('select2:select').off('select2:unselect');\r\n }\r\n}\r\n","import { inject, TargetInstruction, noView, processContent } from 'aurelia-framework';\r\n\r\nfunction parseElement(compiler, resources, element, instruction) {\r\n var html = element.innerHTML;\r\n if (html !== '')\r\n instruction.template = html;\r\n\r\n element.innerHTML = '';\r\n}\r\n\r\n@inject(TargetInstruction)\r\n@noView\r\n@processContent(parseElement)\r\nexport class Select2ItemTemplate {\r\n constructor(targetInstruction) {\r\n this.template = '';\r\n }\r\n\r\n bind(bindingContext, overrideContext) {\r\n this.parentBindingContext = overrideContext.bindingContext ?? overrideContext;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, bindingMode, TaskQueue, child, Container, ViewCompiler } from 'aurelia-framework';\r\n\r\n@autoinject\r\nexport class Selector {\r\n @bindable enableCustomItems;\r\n @bindable suppressFullWidth;\r\n @bindable placeholder;\r\n @bindable items;\r\n @bindable allowClear;\r\n @bindable disabled;\r\n @bindable multiple;\r\n @bindable titlePropertyName;\r\n @bindable valuePropertyName;\r\n @bindable groupPropertyName;\r\n @bindable disabledPropertyName;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedItems;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedItem;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedValues;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedValue;\r\n @bindable minimumResultsForSearch;\r\n @bindable filter;\r\n @bindable noResultsMessage;\r\n @child('selector-item-template') itemTemplate;\r\n\r\n $select: any;\r\n groupedItems: any[];\r\n isDetached: boolean;\r\n selectElement: any;\r\n\r\n selectedItemsBound: boolean;\r\n selectedItemBound: boolean;\r\n selectedValuesBound: boolean;\r\n selectedValueBound: boolean;\r\n\r\n constructor(\r\n private element: Element,\r\n private container: Container,\r\n private viewCompiler: ViewCompiler\r\n ) {\r\n this.closeDropdownOnEnterKey = this.closeDropdownOnEnterKey.bind(this);\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/no-identical-functions\r\n disabledChanged() {\r\n if (!this.$select)\r\n return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n created(owningView, myView) {\r\n var controller = owningView.controllers.find(c => c.view === myView);\r\n var boundProperty = controller.boundProperties.find(bp => bp.binding.targetProperty.startsWith('selected')).binding.targetProperty;\r\n this[boundProperty + 'Bound'] = true;\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/no-identical-functions\r\n placeholderChanged() {\r\n if (!this.$select)\r\n return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n reinitialize() {\r\n this.destroy();\r\n this.initialize();\r\n }\r\n\r\n itemsChanged() {\r\n if (this.groupPropertyName && this.items) {\r\n this.groupedItems = this.items.reduce((groupedItems, item) => {\r\n let group = item[this.groupPropertyName];\r\n groupedItems.has(group) ?\r\n groupedItems.get(group).push(item) :\r\n groupedItems.set(group, [item]);\r\n\r\n return groupedItems;\r\n }, new Map());\r\n }\r\n\r\n if (!this.$select)\r\n return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/no-identical-functions\r\n itemTemplateChanged() {\r\n if (!this.$select)\r\n return;\r\n\r\n this.reinitialize();\r\n }\r\n\r\n selectedItemsChanged() {\r\n this.updateSelection();\r\n }\r\n\r\n selectedItemChanged() {\r\n this.updateSelection();\r\n }\r\n\r\n selectedValuesChanged() {\r\n this.updateSelection();\r\n }\r\n\r\n selectedValueChanged() {\r\n this.updateSelection();\r\n }\r\n\r\n closeDropdownOnEnterKey(e) {\r\n if (e.keyCode === 13)\r\n this.$select && this.$select.select2('close');\r\n }\r\n\r\n attached() {\r\n $('body').on('keyup', 'input.select2-search__field', this.closeDropdownOnEnterKey);\r\n\r\n this.$select = $(this.element.getElementsByTagName('select')[0]);\r\n this.initialize();\r\n }\r\n\r\n dispatchChangeEvent() {\r\n this.element.dispatchEvent(new CustomEvent('select2change', {\r\n bubbles: true,\r\n detail: {\r\n selectedItems: this.selectedItems,\r\n selectedItem: this.selectedItem,\r\n selectedValues: this.selectedValues,\r\n selectedValue: this.selectedValue\r\n }\r\n }));\r\n }\r\n\r\n detached() {\r\n $('body').off('keyup', 'input.select2-search__field', this.closeDropdownOnEnterKey);\r\n\r\n this.destroy();\r\n this.isDetached = true;\r\n }\r\n\r\n createTag(params) {\r\n if (!params.term || !this.items)\r\n return;\r\n\r\n var tag = {\r\n id: params.term,\r\n text: params.term,\r\n tag: true\r\n };\r\n\r\n tag[this.valuePropertyName || 'value'] = params.term;\r\n tag[this.titlePropertyName || 'title'] = params.term;\r\n\r\n return tag;\r\n }\r\n\r\n insertTag(data, tag) {\r\n this.element.dispatchEvent(new CustomEvent('tagcreated', {\r\n bubbles: true,\r\n detail: { tag }\r\n }));\r\n }\r\n\r\n findItemByValue(items, value) {\r\n // coercion used here intentionally to support int/string/etc \r\n return items.find(item => {\r\n var itemValue = item[this.valuePropertyName || 'value'];\r\n // Handle boolean string values differently since coersion doesn't work below.\r\n if (typeof itemValue === 'boolean') {\r\n let booleanValue = value === 'true';\r\n return itemValue === booleanValue;\r\n }\r\n\r\n return itemValue == value;\r\n });\r\n }\r\n\r\n getSelect2Item(item) {\r\n return {\r\n id: item[this.valuePropertyName || 'value'],\r\n text: item[this.titlePropertyName || 'title'],\r\n title: item.tooltip ?? item[this.titlePropertyName || 'title'],\r\n disabled: item[this.disabledPropertyName || 'disabled'] ?? false\r\n };\r\n }\r\n\r\n getSelect2Data() {\r\n if (this.groupedItems) {\r\n return Array.from(this.groupedItems).map(g => ({\r\n text: g[0],\r\n children: g[1].map(i => this.getSelect2Item(i))\r\n }));\r\n }\r\n\r\n if (this.items)\r\n return this.items.map(i => this.getSelect2Item(i));\r\n\r\n return [];\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n initialize() {\r\n this.$select\r\n .select2({\r\n data: this.getSelect2Data(),\r\n placeholder: this.placeholder || (this.multiple ? 'Select items' : 'Select item'),\r\n minimumResultsForSearch: this.enableCustomItems ? 0 : (this.minimumResultsForSearch || this.minimumResultsForSearch === 0) ? this.minimumResultsForSearch : Infinity,\r\n allowClear: !!this.allowClear,\r\n dropdownAutoWidth: true,\r\n tokenSeparators: [',', '.'],\r\n templateResult:\r\n state => {\r\n if (this.itemTemplate) {\r\n let viewFactory = this.viewCompiler.compile(this.itemTemplate.template);\r\n let view = viewFactory.create(this.container);\r\n let rootElement = document.createElement('div');\r\n rootElement.setAttribute('style', 'display: inline-block; width: 100%');\r\n\r\n view.bind({ item: 'id' in state ? this.findItemByValue(this.items, state.id) : null }, this.itemTemplate.parentBindingContext);\r\n view.appendNodesTo(rootElement);\r\n view.attached();\r\n\r\n return rootElement;\r\n }\r\n\r\n var c = document.createElement('div');\r\n c.textContent = state.text;\r\n\r\n return c;\r\n },\r\n disabled: !!this.disabled,\r\n tags: !!this.enableCustomItems,\r\n createTag: !!this.enableCustomItems && this.createTag.bind(this),\r\n insertTag: !!this.enableCustomItems && this.insertTag.bind(this),\r\n language: !this.enableCustomItems ? null : {\r\n noResults: () => {\r\n return this.noResultsMessage || 'Press Enter to add this custom text';\r\n }\r\n },\r\n ...this.filter && {\r\n matcher: (params, data) => {\r\n if (!params.term)\r\n return data;\r\n\r\n let matched = 'id' in data && this.filter(params.term, this.findItemByValue(this.items, data.id));\r\n if (matched)\r\n return data;\r\n\r\n return null;\r\n }\r\n }\r\n })\r\n .on('select2:select', e => {\r\n var item = this.findItemByValue(this.items, e.params.data.id);\r\n if (!item)\r\n return;\r\n\r\n var selectedItems = this.multiple ? [...this.getSelectedItems(), item] : [item];\r\n\r\n this.setSelection(selectedItems);\r\n this.dispatchChangeEvent();\r\n })\r\n .on('select2:unselect', e => {\r\n var selectedItems = [...this.getSelectedItems()];\r\n var item = this.findItemByValue(selectedItems, e.params.data.id);\r\n var itemToRemoveIndex = selectedItems.indexOf(item);\r\n if (itemToRemoveIndex === -1)\r\n return;\r\n\r\n selectedItems.splice(itemToRemoveIndex, 1);\r\n\r\n this.setSelection(selectedItems);\r\n this.dispatchChangeEvent();\r\n })\r\n .on('select2:opening', e => {\r\n this.$select.data('select2').$dropdown[0].style.display = 'none';\r\n })\r\n .on('select2:open', e => {\r\n this.$select.data('select2').$dropdown[0].style.display = '';\r\n });\r\n\r\n var select2Plugin = this.$select.data('select2');\r\n if (select2Plugin && select2Plugin.dataAdapter) {\r\n select2Plugin.dataAdapter.current = function (callback) {\r\n let data = [];\r\n let pendingElements: any[] = Array.from(this.$element[0].children);\r\n\r\n while (pendingElements.length) {\r\n let element = pendingElements.shift();\r\n pendingElements.unshift(...Array.from(element.children));\r\n\r\n if (element.selected)\r\n data.push(select2Plugin.dataAdapter.item($(element)));\r\n }\r\n\r\n callback(data);\r\n };\r\n }\r\n\r\n this.updateSelection();\r\n }\r\n\r\n setSelection(selectedItems) {\r\n if (this.selectedItemsBound)\r\n this.selectedItems = selectedItems;\r\n\r\n else if (this.selectedItemBound)\r\n this.selectedItem = selectedItems.length ? selectedItems[0] : null;\r\n\r\n else if (this.selectedValuesBound)\r\n this.selectedValues = selectedItems.length ? selectedItems.map(i => i[this.valuePropertyName || 'value']) : [];\r\n\r\n else if (this.selectedValueBound)\r\n this.selectedValue = selectedItems.length ? selectedItems.map(i => i[this.valuePropertyName || 'value'])[0] : null;\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n updateSelection() {\r\n if (!this.$select)\r\n return;\r\n\r\n var values = this.getSelectedValues();\r\n\r\n var finalValue = values.length ?\r\n this.multiple ?\r\n values.map(e => typeof e === 'boolean' ? e ? 'true' : 'false' : e) :\r\n (values.map(e => typeof e === 'boolean' ? e ? 'true' : 'false' : e)[0] ?? null) :\r\n null;\r\n\r\n this.$select.val(finalValue).trigger('change');\r\n }\r\n\r\n getSelectedValues() {\r\n if (this.selectedItemsBound)\r\n return (this.selectedItems || []).map(i => i[this.valuePropertyName || 'value']);\r\n\r\n else if (this.selectedItemBound)\r\n return this.selectedItem ? [this.selectedItem[this.valuePropertyName || 'value']] : [];\r\n\r\n else if (this.selectedValuesBound)\r\n return this.selectedValues ?? [];\r\n\r\n else if (this.selectedValueBound)\r\n return [this.selectedValue ?? null];\r\n\r\n return [];\r\n }\r\n\r\n getSelectedItems() {\r\n var selectedValues = this.getSelectedValues();\r\n\r\n return (this.items || [])\r\n .filter(i => selectedValues.some(v => v === i[this.valuePropertyName || 'value']));\r\n }\r\n\r\n destroy() {\r\n if (this.isDetached)\r\n return;\r\n\r\n this.$select\r\n .select2('destroy')\r\n .off('select2:select')\r\n .off('select2:unselect')\r\n .off('select2:opening')\r\n .off('select2:open');\r\n\r\n this.selectElement.textContent = '';\r\n }\r\n}\r\n","import { TargetInstruction, noView, processContent, autoinject } from 'aurelia-framework';\r\n\r\nfunction parseElement(compiler, resources, element, instruction) {\r\n var html = element.innerHTML;\r\n if (html !== '')\r\n instruction.template = html;\r\n\r\n element.innerHTML = '';\r\n}\r\n\r\n@autoinject\r\n@noView\r\n@processContent(parseElement)\r\nexport class SelectorItemTemplate {\r\n template: string;\r\n parentBindingContext: any;\r\n\r\n constructor(targetInstruction: TargetInstruction) {\r\n this.template = '';\r\n }\r\n\r\n bind(bindingContext, overrideContext) {\r\n this.parentBindingContext = overrideContext.bindingContext ?? overrideContext;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, bindable, bindingMode } from 'aurelia-framework';\r\nimport $ from 'jquery';\r\n\r\n@inject(Element)\r\nexport class Slider {\r\n @bindable start;\r\n @bindable end;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) value;\r\n\r\n constructor(element) {\r\n this.element = element;\r\n this.handleSliderChange = this.handleSliderChange.bind(this);\r\n }\r\n\r\n attached() {\r\n this.$slider = $(this.element.querySelector('div.slider'));\r\n this.$slider.foundation();\r\n this.$slider.on('changed.zf.slider', this.handleSliderChange);\r\n this.sliderPlugin = this.$slider.data('zfPlugin');\r\n }\r\n\r\n detached() {\r\n if (this.$slider) {\r\n this.$slider.off('changed.zf.slider', this.handleSliderChange);\r\n this.$slider.data('zfPlugin')?.destroy();\r\n }\r\n }\r\n\r\n startChanged() {\r\n if (this.valueInput)\r\n this.valueInput.min = this.start;\r\n\r\n if (this.sliderPlugin)\r\n this.sliderPlugin.options.start = this.start;\r\n }\r\n\r\n endChanged() {\r\n if (this.valueInput)\r\n this.valueInput.max = this.end;\r\n\r\n if (this.sliderPlugin)\r\n this.sliderPlugin.options.end = this.end;\r\n }\r\n\r\n valueChanged() {\r\n if (this.valueInput)\r\n this.valueInput.value = this.value;\r\n \r\n if (this.sliderPlugin)\r\n this.sliderPlugin.setHandles();\r\n }\r\n\r\n handleSliderChange() {\r\n if (!this.valueInput)\r\n return;\r\n\r\n let newValue = parseInt(this.valueInput.value);\r\n if (this.value !== newValue)\r\n this.value = newValue;\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { bindable, bindingMode } from 'aurelia-framework';\r\n\r\nexport function getTimeOptions() {\r\n var times = [];\r\n\r\n const quarterHours = ['00', '15', '30', '45'];\r\n\r\n for (let i = 0; i < 24; i++) {\r\n for (let j = 0; j < 4; j++) {\r\n let time = `${i}:${quarterHours[j]}`;\r\n if (i < 10)\r\n time = `0${time}`;\r\n\r\n let title;\r\n if (i === 0) {\r\n title = `12:${quarterHours[j]} AM`;\r\n }\r\n else if (i >= 12) {\r\n let twelveHrClockOffset = i;\r\n if (i > 12)\r\n twelveHrClockOffset = i - 12;\r\n title = `${twelveHrClockOffset}:${quarterHours[j]} PM`;\r\n } else {\r\n title = `${time} AM`;\r\n }\r\n times.push({ title, value: time });\r\n }\r\n }\r\n\r\n return times;\r\n};\r\n\r\nexport class TimeSelector {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedTime;\r\n @bindable disabled;\r\n\r\n constructor() {\r\n this.times = getTimeOptions();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","export class ArrayPropertyMapValueConverter {\r\n toView(value, propertyName) {\r\n if (!value || !propertyName)\r\n return null;\r\n\r\n return value.map(item => item[propertyName]);\r\n }\r\n}\r\n","export class BooleanValueConverter {\r\n toView(value, format = 'yesNo') {\r\n switch (format) {\r\n case 'yesNo':\r\n default:\r\n return value ? 'Yes' : 'No';\r\n }\r\n }\r\n}","export class CapPlanTestMethodFormatValueConverter {\r\n toView(value) {\r\n return value.map(cptm => `${cptm.testMethodBillCode} - ${cptm.testMethodName}`).join(', ');\r\n }\r\n}","export class CommaSeparateValueConverter {\r\n toView(value) {\r\n if (!value)\r\n return '';\r\n\r\n return value.join(', ');\r\n }\r\n}\r\n","import numeral from 'numeral';\r\n\r\nexport class CurrencyValueConverter {\r\n toView(value) {\r\n return numeral(value).format('($0,0.00)');\r\n }\r\n}\r\n","import DateUtility from '../date-utility';\r\n\r\nexport class DateFormatValueConverter {\r\n toView(value, format, defaultValue, convertToLocal = true) {\r\n return DateUtility.toView(value, format, defaultValue, convertToLocal);\r\n }\r\n\r\n fromView(value) {\r\n if (value)\r\n return new Date(value);\r\n\r\n return null;\r\n }\r\n}\r\n","export class KeysValueConverter {\r\n toView(value) {\r\n if (typeof value !== 'undefined')\r\n return Object.keys(value);\r\n return null;\r\n }\r\n}\r\n","function isNullOrWhitespace(input) {\r\n if (typeof input === 'undefined' || input == null)\r\n return true;\r\n\r\n return String(input).replace(/\\s/g, '').length < 1;\r\n}\r\n\r\nexport class FilterValueConverter {\r\n toView(array, field, search, match = true) {\r\n if (isNullOrWhitespace(search) || isNullOrWhitespace(field))\r\n return array;\r\n\r\n var result = [];\r\n\r\n if (match)\r\n result = array.filter(p => String(p[field]).toLowerCase().indexOf(String(search).toLowerCase()) !== -1);\r\n else\r\n result = array.filter(p => !String(p[field]).toLowerCase().indexOf(String(search).toLowerCase()) !== -1);\r\n\r\n return result;\r\n }\r\n}\r\n","export class GroupByValueConverter {\r\n toView(objects, key) {\r\n if (typeof objects === 'undefined' || objects == null) return objects;\r\n return objects.reduce(\r\n (rv, x) => rv.set(x[key], (rv.get(x[key]) || []).concat(x)),\r\n new Map()\r\n );\r\n }\r\n}\r\n","import { PLATFORM } from \"aurelia-framework\";\r\n\r\nexport function configure(aurelia) {\r\n aurelia.globalResources(\r\n PLATFORM.moduleName('./array-property-map-value-converter'),\r\n PLATFORM.moduleName('./percent-value-converter'),\r\n PLATFORM.moduleName('./boolean-value-converter'),\r\n PLATFORM.moduleName('./comma-separate-value-converter'),\r\n PLATFORM.moduleName('./number-value-converter'),\r\n PLATFORM.moduleName('./number-format-value-converter'),\r\n PLATFORM.moduleName('./date-format-value-converter'),\r\n PLATFORM.moduleName('./dictionary-value-converter'),\r\n PLATFORM.moduleName('./group-by-value-converter'),\r\n PLATFORM.moduleName('./filter-value-converter'),\r\n PLATFORM.moduleName('./sort-value-converter'),\r\n PLATFORM.moduleName('./take-value-converter'),\r\n PLATFORM.moduleName('./json-value-converter'),\r\n PLATFORM.moduleName('./currency-value-converter'),\r\n PLATFORM.moduleName('./object-keys-value-converter'),\r\n PLATFORM.moduleName('./lookup-and-map-value-converter'),\r\n PLATFORM.moduleName('./test-method-format-value-converter'),\r\n PLATFORM.moduleName('./cap-plan-test-method-format-value-converter'),\r\n );\r\n}\r\n","export class JsonValueConverter {\r\n toView(value) {\r\n return JSON.stringify(value, null, \"\\t\");\r\n }\r\n}\r\n","export class LookupAndMapValueConverter {\r\n toView(key, items, keyPropertyName, valuePropertyName) {\r\n if (!items || !Array.isArray(items))\r\n return null;\r\n\r\n return items.find(i => i[keyPropertyName] === key)?.[valuePropertyName] ?? null;\r\n }\r\n}\r\n","function numberWithCommas(x) {\r\n var parts = x.toString().split(\".\");\r\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n return parts.join(\".\");\r\n}\r\n\r\nexport class NumberFormatValueConverter {\r\n toView(value) {\r\n if (!value)\r\n return value;\r\n\r\n return numberWithCommas(value);\r\n }\r\n}","export class NumberValueConverter {\r\n fromView(value) {\r\n if (value === '' || value === null || value === undefined)\r\n return null;\r\n\r\n if (Number.isNaN(value))\r\n return null;\r\n\r\n if (typeof value === 'number')\r\n return value;\r\n\r\n if (typeof value === 'string') {\r\n var numberValue = Number(value.trim());\r\n if (Number.isNaN(numberValue))\r\n return null;\r\n\r\n return numberValue;\r\n }\r\n\r\n return value;\r\n }\r\n}\r\n","export class ObjectKeysValueConverter {\r\n toView(obj: any) {\r\n if (!obj)\r\n return [];\r\n \r\n return Object.keys(obj);\r\n }\r\n}\r\n","export class PercentValueConverter {\r\n toView(value, decimalPlaces) {\r\n return ((value || 0) * 100).toFixed((decimalPlaces || 0)) + '%';\r\n }\r\n}","export class SortValueConverter {\r\n toView(array, propertyName, direction) {\r\n if (typeof array === 'undefined' || array === null) return array;\r\n if (!Array.isArray(array)) return array;\r\n if (array.length === 0) return array;\r\n\r\n var result = array.slice(0)\r\n .sort((a, b) => {\r\n if (direction.toLowerCase() === 'asc')\r\n return (a[propertyName].toLowerCase() > b[propertyName].toLowerCase());\r\n return (b[propertyName].toLowerCase() > a[propertyName].toLowerCase());\r\n });\r\n return result;\r\n }\r\n}\r\n","export class TakeValueConverter {\r\n toView(array, count) {\r\n return array.slice(0, count);\r\n }\r\n}\r\n","export class TestMethodFormatValueConverter {\r\n toView(value) {\r\n return value.map(tm => `${tm.billCode} - ${tm.name}`).join(', ');\r\n }\r\n}\r\n","import { CsvExportParams, ExcelExportParams, GridOptions } from 'ag-grid-community';\r\nimport { Grid } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport { autoinject } from 'aurelia-framework';\r\n\r\nexport interface AgGridDialogModel {\r\n title: string;\r\n gridOptions: GridOptions;\r\n csvExportParams?: CsvExportParams;\r\n excelExportParams?: ExcelExportParams;\r\n fileNameSuffix?: string;\r\n}\r\n\r\n@autoinject\r\nexport class AgGridDialog {\r\n controller: DialogController;\r\n agGridDialogRef: any;\r\n title: string;\r\n gridOptions: GridOptions;\r\n defaulCsvExportParams: CsvExportParams;\r\n defaultExcelExportParams: ExcelExportParams;\r\n\r\n constructor(controller: DialogController) {\r\n this.controller = controller;\r\n this.defaulCsvExportParams = {\r\n skipColumnGroupHeaders: true,\r\n skipRowGroups: true,\r\n allColumns: true,\r\n };\r\n this.defaultExcelExportParams = {\r\n skipColumnGroupHeaders: true,\r\n skipRowGroups: true,\r\n allColumns: true,\r\n };\r\n }\r\n\r\n private createFileName(ext: string, fileNameSuffix?: string): string {\r\n return (\r\n this.title.replace(/\\s-\\s/g, '_').replace(/\\s/g, '').replace(/:/g, '-') +\r\n `-${!fileNameSuffix ? 'export' : fileNameSuffix}.${ext}`\r\n );\r\n }\r\n\r\n canActivate(params: AgGridDialogModel) {\r\n this.title = params.title;\r\n this.gridOptions = params.gridOptions;\r\n this.defaulCsvExportParams.fileName = this.createFileName('csv', params.fileNameSuffix);\r\n this.defaultExcelExportParams.fileName = this.createFileName('xlsx', params.fileNameSuffix);\r\n\r\n const csvExportParams = { ...this.defaulCsvExportParams, ...params.csvExportParams };\r\n const excelExportParams = { ...this.defaultExcelExportParams, ...params.excelExportParams };\r\n this.gridOptions.defaultCsvExportParams = csvExportParams;\r\n this.gridOptions.defaultExcelExportParams = excelExportParams;\r\n\r\n return true;\r\n }\r\n\r\n attached() {\r\n new Grid(this.agGridDialogRef, this.gridOptions);\r\n }\r\n\r\n canDeactivate() {\r\n this.gridOptions?.api?.destroy();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import {inject} from 'aurelia-framework';\r\nimport {DialogController} from 'aurelia-dialog';\r\n\r\n@inject(DialogController)\r\nexport default class Alert {\r\n constructor(controller) {\r\n this.controller = controller;\r\n }\r\n\r\n activate(model) {\r\n this.isMessageHtml = model.message?.trim()?.startsWith('<');\r\n this.model = model;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import {inject} from 'aurelia-framework';\r\nimport {DialogController} from 'aurelia-dialog';\r\n\r\n@inject(DialogController)\r\nexport default class Confirmation {\r\n constructor(controller) {\r\n this.controller = controller;\r\n this.answer = null;\r\n }\r\n\r\n activate(model) {\r\n this.model = model;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { DialogController } from 'aurelia-dialog';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport SelectorOption from '../selector-option';\r\n\r\nexport interface ColumnOrder {\r\n id: string;\r\n direction: string;\r\n}\r\n\r\ninterface DataGridReorderDialogModel {\r\n title: string;\r\n columnOptions: SelectorOption[];\r\n}\r\n\r\n@autoinject\r\nexport class DataGridReorderDialog {\r\n title: string;\r\n columnOrders: ColumnOrder[] = [];\r\n columnOptions: SelectorOption[] = [];\r\n directionOptions: SelectorOption[] = [\r\n { title: 'Ascending', value: 'asc' },\r\n { title: 'Descending', value: 'desc' },\r\n ];\r\n\r\n constructor(private controller: DialogController) { }\r\n\r\n addColumnOrder() {\r\n this.columnOrders.push({\r\n id: this.columnOptions[0].value as string,\r\n direction: this.directionOptions[0].value as string\r\n });\r\n }\r\n\r\n removeLastColumnOrder() {\r\n this.columnOrders.pop();\r\n }\r\n\r\n activate(model: DataGridReorderDialogModel) {\r\n this.title = model.title ?? 'Reorder Grid'\r\n this.columnOptions = model.columnOptions;\r\n this.addColumnOrder();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject } from 'aurelia-framework';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport { TaskOrder } from 'location-testing/tasks/task-order';\r\nimport { TaskOrderPreferenceService } from 'location-testing/tasks/task-order-preference-service';\r\n\r\ninterface ExportableFieldSelectorModel {\r\n title: string;\r\n fields: string[];\r\n selected: string[];\r\n // When set, shows the task order choice, describing the caller's on-screen order.\r\n taskOrderCaption?: string;\r\n}\r\n\r\ninterface ExportableField {\r\n value: string;\r\n label: string;\r\n}\r\n\r\n@autoinject\r\nexport default class ExportableFieldSelector {\r\n model: ExportableFieldSelectorModel;\r\n isLoading: boolean;\r\n\r\n exportableFields: ExportableField[];\r\n selectedFields: string[];\r\n taskOrder: TaskOrder;\r\n\r\n constructor(\r\n private controller: DialogController,\r\n private taskOrderPreferenceService: TaskOrderPreferenceService,\r\n ) {\r\n\r\n this.isLoading = true;\r\n }\r\n\r\n async activate(model: ExportableFieldSelectorModel) {\r\n this.selectedFields = [];\r\n this.model = model;\r\n\r\n if (this.model.taskOrderCaption)\r\n this.taskOrder = this.taskOrderPreferenceService.get();\r\n\r\n let exportableFieldKeys = Object.keys(this.model.fields);\r\n\r\n this.exportableFields = [];\r\n exportableFieldKeys.forEach(k => {\r\n let field = {\r\n value: k,\r\n label: this.model.fields[k]\r\n } as ExportableField;\r\n\r\n this.exportableFields.push(field);\r\n\r\n if ((!this.model.selected) || (this.model.selected && this.model.selected.findIndex(f => f === k) !== -1))\r\n this.selectedFields.push(k);\r\n });\r\n\r\n this.isLoading = false;\r\n }\r\n\r\n continue() {\r\n // Callers read the chosen order back from the preference service.\r\n if (this.model.taskOrderCaption)\r\n this.taskOrderPreferenceService.set(this.taskOrder);\r\n\r\n this.controller.ok(this.selectedFields);\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, bindable, observable } from 'aurelia-framework';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport Logger from 'infrastructure/logger';\r\nimport LabelTemplateService from 'label-templates/label-template-service';\r\nimport { TaskOrderPreferenceService } from 'location-testing/tasks/task-order-preference-service';\r\n\r\n@inject(DialogController, Element, Logger, LabelTemplateService, TaskOrderPreferenceService)\r\nexport default class LabelSelector {\r\n @bindable selectedLabelTemplate;\r\n @observable searchText;\r\n\r\n constructor(controller, element, logger, labelTemplateService, taskOrderPreferenceService) {\r\n this.controller = controller;\r\n this.element = element;\r\n this.logger = logger;\r\n\r\n this.labelTemplateService = labelTemplateService;\r\n this.taskOrderPreferenceService = taskOrderPreferenceService;\r\n\r\n this.isLoading = true;\r\n this.labelTemplates = [];\r\n }\r\n\r\n async updateSearchResults() {\r\n this.selectedLabelTemplate = null;\r\n this.isLoading = true;\r\n\r\n try {\r\n if (!this.model.labelTemplateType)\r\n throw new Error('Cannot seach for label templates because label template type was not specified.');\r\n\r\n if (!this.model.organizationId)\r\n throw new Error('Cannot seach for label templates because an organization ID was not specified.');\r\n\r\n var labelTemplates = await this.labelTemplateService.getLabelTemplates({\r\n type: this.model.labelTemplateType,\r\n organizationIds: [this.model.organizationId],\r\n recordStatus: 'Active'\r\n }, 'Selector');\r\n\r\n let filteredLabelTemplates = labelTemplates.filter(lt => lt.organizationId === this.model.organizationId);\r\n filteredLabelTemplates.forEach(lt => {\r\n lt.displayName = `${lt.templateName} (${(lt.width/72).toFixed(2)} x ${(lt.height/72).toFixed(2)} in.)`;\r\n });\r\n\r\n this.labelTemplates = filteredLabelTemplates;\r\n } catch (error) {\r\n this.logger.error('Error searching for label templates.', error, { searchText: this.searchText });\r\n }\r\n\r\n this.isLoading = false;\r\n }\r\n\r\n async activate(model) {\r\n this.model = model;\r\n // Only task label callers pass an order caption; sample labels have no order choice.\r\n if (this.model.taskOrderCaption)\r\n this.taskOrder = this.taskOrderPreferenceService.get();\r\n\r\n await this.updateSearchResults();\r\n }\r\n\r\n continue() {\r\n // Callers read the chosen order back from the preference service.\r\n if (this.model.taskOrderCaption)\r\n this.taskOrderPreferenceService.set(this.taskOrder);\r\n\r\n this.controller.ok(this.selectedLabelTemplate);\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import {inject, bindable} from 'aurelia-framework';\r\nimport { DialogController } from 'aurelia-dialog';\r\n\r\n@inject(DialogController)\r\nexport default class NameValueItemSelector {\r\n @bindable selectedItem;\r\n\r\n constructor(controller) {\r\n this.controller = controller;\r\n }\r\n\r\n async selectedItemChanged() {\r\n }\r\n\r\n activate(model) {\r\n this.model = model;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, bindable, observable, Container } from 'aurelia-framework';\r\nimport { DialogController } from 'aurelia-dialog';\r\nimport DialogPresenter from './dialog-presenter';\r\nimport UserService from '../../users/user-service';\r\nimport Logger from 'infrastructure/logger';\r\n\r\n@inject(DialogController, Container, Element, Logger, UserService)\r\nexport default class UserSelector {\r\n @bindable user;\r\n @observable searchText;\r\n\r\n constructor(controller, container, element, logger, userService) {\r\n this.controller = controller;\r\n this.element = element;\r\n this.container = container;\r\n this.logger = logger;\r\n this.userService = userService;\r\n this.searchText = '';\r\n this.isLoading = true;\r\n this.matchingUsers = [];\r\n }\r\n\r\n searchTextChanged() {\r\n this.updateSearchResults();\r\n }\r\n\r\n async updateSearchResults() {\r\n if (this.searchText.trim() === '')\r\n return;\r\n\r\n this.user = null;\r\n\r\n try {\r\n this.isLoading = true;\r\n var matchingUsers = await this.userService.getUsers(this.searchText);\r\n\r\n for (let user of matchingUsers)\r\n user.title = `${user.firstName} ${user.lastName}`;\r\n\r\n this.matchingUsers = matchingUsers;\r\n this.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error searching for users.', error, { searchText: this.searchText });\r\n this.container.get(DialogPresenter).showAlert('Unexpected Error', 'An unexpected error occurred while searching for users. Please try again later.');\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n activate(model) {\r\n this.model = model;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { inject } from \"aurelia-framework\";\r\nimport DialogPresenter from '../dialogs/dialog-presenter';\r\n\r\n@inject(Element, DialogPresenter, EventAggregator)\r\nexport class ClientRefresh {\r\n\r\n constructor(element, dialogPresenter, eventAggregator) {\r\n this.element = element;\r\n this.dialogPresenter = dialogPresenter;\r\n this.eventAggregator = eventAggregator;\r\n this.clientIsCurrent = true;\r\n }\r\n\r\n handleClientIsCurrent() {\r\n this.clientIsCurrent = true;\r\n }\r\n\r\n handleClientRefresh(version) {\r\n const { clientVersion } = version;\r\n this.newClientVersion = clientVersion;\r\n this.clientIsCurrent = false;\r\n }\r\n\r\n async showClientVersionReloadDialog() {\r\n if (await this.dialogPresenter.showClientVersionReloadDialog())\r\n window.location.reload();\r\n }\r\n\r\n attached() {\r\n this.clientIsCurrentSubscription = this.eventAggregator.subscribe('client.isCurrent', () => this.handleClientIsCurrent());\r\n this.refreshClientSubscription = this.eventAggregator.subscribe('client.refresh', (version) => this.handleClientRefresh(version));\r\n }\r\n\r\n detached() {\r\n this.clientIsCurrentSubscription && this.clientIsCurrentSubscription.dispose();\r\n this.refreshClientSubscription && this.refreshClientSubscription.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { GetContextMenuItemsParams, GridOptions, MenuItemDef } from 'ag-grid-community';\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { GlobalMessageNotification } from 'global-messaging/global-message-notification';\r\nimport { GlobalMessageSearchType } from 'global-messaging/global-message-search-type';\r\nimport { addCellRendererParamsToColId } from 'infrastructure/ag-grid/ag-cell-helpers';\r\nimport { AgGridDialogModel } from 'infrastructure/dialogs/ag-grid-dialog';\r\nimport { GlobalMessagingService } from '../../../global-messaging/global-messaging-service';\r\nimport SecurityService from '../../../security/security-service';\r\nimport DialogPresenter from '../../dialogs/dialog-presenter';\r\nimport Logger from '../../logger';\r\nimport { globalMessageNotificationGridOptions } from './global-message-notification-grid';\r\n\r\n@autoinject\r\nexport class GlobalMessageNotifier {\r\n private agGridOptions: GridOptions;\r\n private agGridDialogModel: AgGridDialogModel;\r\n\r\n private _globalMessageCount: number;\r\n private userMessageCountChangedSubscription: Subscription;\r\n\r\n constructor(\r\n private globalMessagingService: GlobalMessagingService,\r\n private dialogPresenter: DialogPresenter,\r\n private eventAggregator: EventAggregator,\r\n private logger: Logger,\r\n private securityService: SecurityService,\r\n ) {\r\n logger.name = 'global-message-notifier';\r\n\r\n // the event subscription is not attached in time to receive init events\r\n this._globalMessageCount = this.securityService.getUserMessageCount();\r\n }\r\n\r\n get globalMessageCount() {\r\n return this._globalMessageCount;\r\n }\r\n\r\n set globalMessageCount(count: number) {\r\n this._globalMessageCount = count;\r\n }\r\n\r\n handleUserMessageCountChanged(e: any) {\r\n const { count } = e;\r\n this.globalMessageCount = count;\r\n }\r\n\r\n async getMessageNotifications(\r\n searchType: GlobalMessageSearchType = GlobalMessageSearchType.Default,\r\n ) {\r\n let data: GlobalMessageNotification[];\r\n try {\r\n data = await this.globalMessagingService.getUserGlobalMessageNotifications(searchType);\r\n } catch (e) {\r\n this.logger.error('Error getting user messages', e);\r\n this.agGridDialogModel.gridOptions.api?.setRowData([]);\r\n this.dialogPresenter.showAlert('Something went wrong', 'Bad!');\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async viewBy(searchType: GlobalMessageSearchType = GlobalMessageSearchType.Default) {\r\n const data = await this.getMessageNotifications(searchType);\r\n this.agGridDialogModel?.gridOptions?.api?.setRowData(data);\r\n this.agGridDialogModel.title = 'FSNet Portal Messages - ' + searchType;\r\n }\r\n\r\n async showMessages() {\r\n this.agGridDialogModel = {\r\n title: 'FSNet Portal Messages',\r\n gridOptions: this.agGridOptions,\r\n };\r\n const data = await this.getMessageNotifications();\r\n this.agGridDialogModel.gridOptions.rowData = data || [];\r\n await this.dialogPresenter.showAgGridDialog(this.agGridDialogModel);\r\n }\r\n\r\n async readMessage(globalMessageId: number) {\r\n const rowNode = this.agGridOptions.api?.getRowNode(globalMessageId.toString());\r\n rowNode.setDataValue('isRead', true);\r\n\r\n try {\r\n await this.globalMessagingService.readUserMessage(globalMessageId);\r\n this._globalMessageCount--;\r\n this.securityService.setUserMessageCount(this._globalMessageCount);\r\n } catch (error) {\r\n this.logger.error('Error marking user messages as read', error);\r\n }\r\n }\r\n\r\n async unReadMessage(globalMessageId: number) {\r\n const rowNode = this.agGridOptions.api?.getRowNode(globalMessageId.toString());\r\n rowNode.setDataValue('isRead', false);\r\n\r\n try {\r\n await this.globalMessagingService.unReadUserMessage(globalMessageId);\r\n this._globalMessageCount++;\r\n this.securityService.setUserMessageCount(this._globalMessageCount);\r\n } catch (error) {\r\n this.logger.error('Error marking user messages as unread', error);\r\n }\r\n }\r\n\r\n // TODO: check for read/unread when deleting/undeleting messages\r\n async deleteMessage(globalMessageId: number) {\r\n const rowNode = this.agGridOptions.api?.getRowNode(globalMessageId.toString());\r\n rowNode.setDataValue('isDeleted', true);\r\n\r\n try {\r\n await this.globalMessagingService.deleteUserMessage(globalMessageId);\r\n this._globalMessageCount--;\r\n this.securityService.setUserMessageCount(this._globalMessageCount);\r\n } catch (error) {\r\n this.logger.error('Error marking user messages as deleted', error);\r\n }\r\n }\r\n\r\n async unDeleteMessage(globalMessageId: number) {\r\n const rowNode = this.agGridOptions.api?.getRowNode(globalMessageId.toString());\r\n rowNode.setDataValue('isDeleted', false);\r\n\r\n try {\r\n await this.globalMessagingService.unDeleteUserMessage(globalMessageId);\r\n this._globalMessageCount++;\r\n this.securityService.setUserMessageCount(this._globalMessageCount);\r\n } catch (error) {\r\n this.logger.error('Error marking user messages as undeleted', error);\r\n }\r\n }\r\n\r\n getContextMenuItems = (params: GetContextMenuItemsParams): (string | MenuItemDef)[] => {\r\n return [\r\n {\r\n name: 'View By',\r\n subMenu: [\r\n {\r\n name: 'Default',\r\n action: () => this.viewBy(GlobalMessageSearchType.Default),\r\n },\r\n {\r\n name: 'Read',\r\n action: () => this.viewBy(GlobalMessageSearchType.Read),\r\n },\r\n {\r\n name: 'Deleted',\r\n action: () => this.viewBy(GlobalMessageSearchType.Deleted),\r\n },\r\n {\r\n name: 'All',\r\n action: () => this.viewBy(GlobalMessageSearchType.All),\r\n },\r\n ],\r\n },\r\n ] as MenuItemDef[];\r\n };\r\n\r\n attached() {\r\n const messageActionCellRendererParams = {\r\n readMessage: this.readMessage.bind(this),\r\n unReadMessage: this.unReadMessage.bind(this),\r\n deleteMessage: this.deleteMessage.bind(this),\r\n unDeleteMessage: this.unDeleteMessage.bind(this),\r\n };\r\n addCellRendererParamsToColId(\r\n globalMessageNotificationGridOptions.columnDefs,\r\n 'messageActionCol',\r\n messageActionCellRendererParams,\r\n );\r\n this.agGridOptions = globalMessageNotificationGridOptions;\r\n this.agGridOptions.getContextMenuItems = this.getContextMenuItems.bind(this);\r\n\r\n this.userMessageCountChangedSubscription = this.eventAggregator.subscribe(\r\n 'user.messageCountChanged',\r\n (e: any) => this.handleUserMessageCountChanged(e),\r\n );\r\n }\r\n\r\n detached() {\r\n this.userMessageCountChangedSubscription?.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport OrganizationService from '../../organizations/organization-service';\r\nimport SecurityService from '../../security/security-service';\r\nimport UserService from '../../users/user-service';\r\nimport DialogPresenter from '../dialogs/dialog-presenter';\r\nimport Logger from '../logger';\r\n\r\n@inject(Element, Router, Logger, DialogPresenter, SecurityService, UserService, OrganizationService)\r\nexport class HeaderAccountDropdown {\r\n @observable userFilterText;\r\n @observable orgFilterText;\r\n\r\n constructor(element, router, logger, dialogPresenter, securityService, userService, organizationService) {\r\n this.element = element;\r\n this.router = router;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'header-account-dropdown';\r\n\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.organizationService = organizationService;\r\n this.userFilterText = '';\r\n this.orgFilterText = '';\r\n this.usersAreLoading = true;\r\n this.orgsAreLoading = true;\r\n this.userView = this.securityService.getCurrentSessionUser();\r\n this.usersView = [];\r\n this.orgsView = [];\r\n this.updateImpersonatedUser();\r\n this.updateWorkingUnderOrganization();\r\n }\r\n\r\n userFilterTextChanged() {\r\n this.orgsView = [];\r\n this.orgFilterText = '';\r\n this.updateUserSearchResults();\r\n }\r\n\r\n orgFilterTextChanged() {\r\n this.usersView = [];\r\n this.userFilterText = '';\r\n this.updateOrgSearchResults();\r\n }\r\n\r\n async updateUserSearchResults() {\r\n if (this.userFilterText.trim() === '')\r\n return;\r\n try {\r\n this.usersAreLoading = true;\r\n var results = await this.userService.getUsers(this.userFilterText);\r\n this.usersView = results;\r\n this.usersAreLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error searching for users to impersonate.', error, { userFilterText: this.userFilterText });\r\n this.usersAreLoading = false;\r\n }\r\n }\r\n\r\n async updateOrgSearchResults() {\r\n if (this.orgFilterText.trim() === '')\r\n return;\r\n try {\r\n this.orgsAreLoading = true;\r\n this.orgsView = await this.organizationService.findOrganizations(this.orgFilterText);\r\n this.orgsAreLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error searching for organizations to work under.', error, { orgFilterText: this.orgFilterText });\r\n this.orgsAreLoading = false;\r\n }\r\n }\r\n\r\n logout() {\r\n try {\r\n this.securityService.logout();\r\n this.securityService.navigateToLoginScreen();\r\n } catch (error) {\r\n this.logger.error('Error logging out.', error);\r\n }\r\n }\r\n\r\n updateImpersonatedUser() {\r\n this.impersonatedUser = this.securityService.getImpersonatedUser() || {};\r\n }\r\n\r\n updateWorkingUnderOrganization() {\r\n this.workingUnderOrganization = this.securityService.getWorkingUnderOrganization() || {};\r\n }\r\n\r\n async startImpersonation(user) {\r\n this.usersAreLoading = true;\r\n\r\n try {\r\n await this.securityService.startImpersonation(this.simplifyUser(user));\r\n this.updateImpersonatedUser();\r\n this.userFilterText = '';\r\n this.navigateToDashboard();\r\n } catch (error) {\r\n this.logger.error('Error starting impersonation.', error);\r\n\r\n // No organization application modules\r\n if (error.apiErrorCode === 311) {\r\n await this.dialogPresenter.showAlert(\r\n 'Impersonated User Has No Application Modules',\r\n 'The user you are attempting to impersonate doesn\\'t have any application modules and therefore cannot use this application. You cannot impersonate this user unless application modules are assigned to the user\\'s top-level organization.');\r\n } else if(error.apiErrorCode === 312) {\r\n await this.dialogPresenter.showAlert(\r\n 'Impersonated User Has No Organizations',\r\n 'The user you are attempting to impersonate is an Overseer and doesn\\'t have any organization associations. You cannot impersonate this user unless the user is associated to at least one organization.');\r\n } else {\r\n await this.dialogPresenter.showAlert(\r\n 'Error Starting Impersonation',\r\n 'An error occurred while starting impersonation. Please try again later.');\r\n }\r\n\r\n this.stopImpersonation();\r\n }\r\n\r\n this.usersAreLoading = false;\r\n }\r\n\r\n async startWorkingUnderOrganization(org) {\r\n this.orgsAreLoading = true;\r\n\r\n try {\r\n await this.securityService.startWorkingUnderOrganization(org);\r\n this.updateWorkingUnderOrganization();\r\n this.navigateToDashboard();\r\n } catch (error) {\r\n this.logger.error('Error starting work under organization.', error);\r\n this.stopImpersonation();\r\n }\r\n\r\n this.orgsAreLoading = false;\r\n }\r\n\r\n stopImpersonation() {\r\n this.usersAreLoading = true;\r\n this.orgsAreLoading = true;\r\n\r\n try {\r\n this.securityService.stopImpersonation();\r\n this.updateImpersonatedUser();\r\n this.updateWorkingUnderOrganization();\r\n this.navigateToDashboard();\r\n } catch (error) {\r\n this.logger.error('Error stopping impersonation.', error);\r\n }\r\n\r\n this.usersAreLoading = false;\r\n this.orgsAreLoading = false;\r\n }\r\n\r\n navigateToDashboard() {\r\n if (this.router.currentInstruction.config.route && this.router.currentInstruction.config.route.toLowerCase() !== 'dashboard')\r\n this.router.navigateToRoute('dashboard');\r\n else\r\n // Already on the dashboard - refresh re-run activation etc for changed permissions\r\n window.location.reload();\r\n }\r\n\r\n simplifyUser(user) {\r\n const organizationId = (user.organization && user.organization.id);\r\n const organizationName = (user.organization && user.organization.name);\r\n return {\r\n id: user.id,\r\n firstName: user.firstName,\r\n lastName: user.lastName,\r\n organizationId: organizationId || 0,\r\n organizationName: organizationName || ''\r\n };\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, bindable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport NavigationAuthorizer from '../../security/navigation/navigation-authorizer';\r\n\r\n@inject(Element, Router, EventAggregator, NavigationAuthorizer)\r\nexport class HeaderNavigationMenu {\r\n @bindable group;\r\n @bindable icon;\r\n @bindable className;\r\n\r\n constructor(element, router, eventAggregator, navigationAuthorizer) {\r\n this.element = element;\r\n this.router = router;\r\n this.eventAggregator = eventAggregator;\r\n this.navigationAuthorizer = navigationAuthorizer;\r\n this.handleLogin = this.handleLogin.bind(this);\r\n this.handleLogout = this.handleLogout.bind(this);\r\n this.handleImpersonationStart = this.handleImpersonationStart.bind(this);\r\n this.handleImpersonationStop = this.handleImpersonationStop.bind(this);\r\n }\r\n\r\n updateNavigationItems() {\r\n if (!this.group)\r\n return;\r\n\r\n (async () => {\r\n let navItems = [];\r\n\r\n for (let item of this.router.navigation)\r\n if (item.config.group === this.group && await this.navigationAuthorizer.hasAccess(item.config))\r\n navItems.push(item);\r\n\r\n this.navItems = navItems;\r\n })();\r\n }\r\n\r\n\r\n handleLogin() {\r\n this.updateNavigationItems();\r\n }\r\n\r\n handleLogout() {\r\n this.updateNavigationItems();\r\n }\r\n\r\n handleImpersonationStart() {\r\n this.updateNavigationItems();\r\n }\r\n\r\n handleImpersonationStop() {\r\n this.updateNavigationItems();\r\n }\r\n\r\n attached() {\r\n this.$dropdown = $(this.element.querySelector('ul[data-dropdown-menu]'));\r\n this.$dropdown.foundation();\r\n \r\n this.updateNavigationItems();\r\n this.userLoginSubscription = this.eventAggregator.subscribe('user.login', this.handleLogin);\r\n this.userLogoutSubscription = this.eventAggregator.subscribe('user.logout', this.handleLogout);\r\n this.userImpersonationStartSubscription = this.eventAggregator.subscribe('impersonation.start', this.handleImpersonationStart);\r\n this.userImpersonationStopSubscription = this.eventAggregator.subscribe('impersonation.stop', this.handleImpersonationStop);\r\n }\r\n\r\n detached() {\r\n this.$dropdown && this.$dropdown.foundation('destroy');\r\n\r\n this.userLoginSubscription && this.userLoginSubscription.dispose();\r\n this.userLogoutSubscription && this.userLogoutSubscription.dispose();\r\n this.userImpersonationStartSubscription && this.userImpersonationStartSubscription.dispose();\r\n this.userImpersonationStopSubscription && this.userImpersonationStopSubscription.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\n\r\n@inject(HttpClient)\r\nexport default class FaqService {\r\n constructor(httpClient) {\r\n this.httpClient = httpClient;\r\n }\r\n\r\n getFaqs(faqGroupId) {\r\n return this.httpClient.get(`help/faqs/${(faqGroupId ? `?faqGroupId=${faqGroupId}` : '')}`);\r\n }\r\n\r\n getFaq(id) {\r\n return this.httpClient.get(`help/faqs/${id}`);\r\n }\r\n\r\n deleteFaqs(ids) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`help/faqs?${query}`);\r\n }\r\n\r\n saveFaq(faq) {\r\n if (!faq.id)\r\n return this.httpClient.post('help/faqs/', faq);\r\n\r\n return this.httpClient.put(`help/faqs/${faq.id}`, faq);\r\n }\r\n\r\n updateFaqOrdinals(idOrdinalMap) {\r\n return this.httpClient.patch(`help/faqs/`, idOrdinalMap);\r\n }\r\n}\r\n","import { autoinject, buildQueryString } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { ExportTaskCollectionTemplate } from './export-task-collection-template';\r\n\r\n@autoinject\r\nexport default class ExportTaskCollectionTemplateService {\r\n constructor(private httpClient: HttpClient) {\r\n\r\n }\r\n\r\n getExportTaskCollectionTemplates(params?: any): Promise {\r\n const query = buildQueryString(params, true);\r\n return this.httpClient.get(`export-task-collection-templates${query ? '?' + query : ''}`) as any as Promise;\r\n }\r\n\r\n getExportTaskCollectionTemplate(id: number): Promise {\r\n return this.httpClient.get(`export-task-collection-templates/${id}`) as any as Promise;\r\n }\r\n\r\n createExportTaskCollectionTemplates(exportTaskCollectionTemplate: ExportTaskCollectionTemplate): Promise {\r\n return this.httpClient.post('export-task-collection-templates', exportTaskCollectionTemplate) as any as Promise;\r\n }\r\n\r\n updateExportTaskCollectionTemplates(exportTaskCollectionTemplate: ExportTaskCollectionTemplate): Promise {\r\n return this.httpClient.put('export-task-collection-templates', exportTaskCollectionTemplate) as any as Promise;\r\n } \r\n \r\n deleteExportTaskCollectionTemplates(ids: number[]) {\r\n var query = ids.map(id => `id=${id}`).join('&');\r\n return this.httpClient.delete(`export-task-collection-templates?${query}`) as any as Promise;\r\n }\r\n\r\n getExportTaskCollectionTemplateColumns(): Record {\r\n return this.httpClient.get('export-task-collection-templates/columns') as any as Record;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport { TestResult } from './test-result';\r\nimport { TestResultListQuery } from './test-results-query-filters';\r\n\r\n@autoinject\r\nexport class TestResultService {\r\n private baseRoute: string;\r\n\r\n constructor(private httpClient: HttpClient) {\r\n this.baseRoute = 'test-results';\r\n }\r\n\r\n // This is to optimize the query for returning the actual results using limit\r\n // The previous implementation would create a massive 1+GB memory grant due to nvarchar(max) cols that can't be size reduced\r\n countTestResults(testResultListQuery: TestResultListQuery): Promise {\r\n var query = buildQueryString(testResultListQuery, true);\r\n return this.httpClient.get(\r\n `${this.baseRoute}/count${query ? `?${query}` : ''}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getTestResults(testResultListQuery: TestResultListQuery): Promise {\r\n var query = buildQueryString(testResultListQuery, true);\r\n return this.httpClient.get(\r\n `${this.baseRoute}${query ? `?${query}` : ''}`,\r\n ) as unknown as Promise;\r\n }\r\n\r\n getDownloadUrl(testResultListQuery: TestResultListQuery) {\r\n var query = buildQueryString(testResultListQuery, true);\r\n return `api/test-results/download${query ? `?${query}` : ''}`;\r\n }\r\n}\r\n","import { ColDef, ColGroupDef, GridOptions, ValueFormatterParams } from 'ag-grid-community';\r\nimport AgStatefulGridBuilder from 'infrastructure/ag-grid/ag-stateful-grid-builder';\r\nimport { AureliaCellRendererCompBase } from 'infrastructure/ag-grid/aurelia-cell-renderer-comp-base';\r\nimport CompareUtility from '../../../infrastructure/compare-utility';\r\n\r\nconst remediationLinkTemplate =\r\n '${data.name}';\r\nclass AgPointRemediationCellRenderer extends AureliaCellRendererCompBase {\r\n constructor() {\r\n super(remediationLinkTemplate);\r\n }\r\n}\r\n\r\nconst fromatRemediationStatus = (params: ValueFormatterParams): string => {\r\n switch (params.value) {\r\n case 1:\r\n return 'Not Started';\r\n case 2:\r\n return 'In Progress';\r\n case 3:\r\n return 'Completed';\r\n case 4:\r\n return 'Reviewed';\r\n case 5:\r\n return 'Rejected';\r\n }\r\n\r\n return '';\r\n};\r\n\r\nconst colDefs: (ColDef | ColGroupDef)[] = [\r\n {\r\n suppressMenu: true,\r\n headerName: 'Name',\r\n field: 'name',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n minWidth: 150,\r\n sort: 'asc',\r\n cellRenderer: AgPointRemediationCellRenderer,\r\n },\r\n {\r\n headerName: 'Assigned User',\r\n field: 'assignedUserFullName',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n minWidth: 150,\r\n },\r\n {\r\n headerName: 'Approval User',\r\n field: 'approvalUserFullName',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n minWidth: 150,\r\n },\r\n {\r\n headerName: 'Status',\r\n field: 'status',\r\n minWidth: 150,\r\n valueFormatter: fromatRemediationStatus,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Root Cause',\r\n field: 'remediationRootCauseName',\r\n },\r\n];\r\n\r\nconst baseGridOptions: GridOptions = {\r\n columnDefs: colDefs,\r\n suppressContextMenu: true,\r\n suppressColumnVirtualisation: true,\r\n};\r\n\r\nconst pointRemediationGrid = AgStatefulGridBuilder.create(baseGridOptions)\r\n .setDefaults()\r\n .withAutoHeight()\r\n .addStatefulness('map-point-remediation-grid')\r\n .build();\r\n\r\nexport { pointRemediationGrid };\r\n","import { GridOptions } from 'ag-grid-community';\r\nimport { AgBoolCellRenderer } from 'infrastructure/components/cell-renderers/ag-bool-cell-renderer';\r\n\r\nexport const testMethodManagementGridOptions: GridOptions = {\r\n columnDefs: [\r\n { field: 'testMethodId', headerName: 'Test Method Id', initialHide: true },\r\n {\r\n colId: 'select_checkbox',\r\n suppressMenu: true,\r\n headerName: 'Select',\r\n headerCheckboxSelection: true,\r\n headerCheckboxSelectionFilteredOnly: true,\r\n checkboxSelection: (params) =>\r\n params.data && (params.data.canHide || !params.data.isActive),\r\n hide: true,\r\n },\r\n {\r\n field: 'testMethodName',\r\n headerName: 'Test Method',\r\n },\r\n {\r\n field: 'planCount',\r\n headerName: 'Plan Count',\r\n },\r\n { field: 'unassignedTaskCount', headerName: 'Unassigned Task Count' },\r\n { field: 'specificationCount', headerName: 'Specification Count' },\r\n { field: 'capPlanCount', headerName: 'Cap Plan Count' },\r\n { field: 'isActive', headerName: 'Visible', cellRenderer: AgBoolCellRenderer },\r\n ],\r\n defaultColDef: {\r\n flex: 1,\r\n minWidth: 100,\r\n sortable: true,\r\n filter: true,\r\n resizable: true,\r\n },\r\n suppressRowClickSelection: true,\r\n animateRows: true,\r\n rowSelection: 'multiple',\r\n};\r\n","export interface ExportTaskCollectionTemplateFooterOptions {\r\n cellText: string[];\r\n}\r\n\r\nexport const emptyExportTaskCollectionTemplateFooterOptions = (): ExportTaskCollectionTemplateFooterOptions => ({\r\n cellText: [],\r\n});\r\n","import {\r\n ColDef,\r\n ColGroupDef,\r\n GetQuickFilterTextParams,\r\n GridOptions,\r\n ICellRendererParams,\r\n ValueFormatterParams,\r\n ValueGetterParams,\r\n} from 'ag-grid-community';\r\nimport moment from 'moment';\r\n\r\nconst checkbox = (params: ICellRendererParams): boolean => {\r\n return params.node.group === true;\r\n};\r\n\r\nconst formatApproved = (params: ValueFormatterParams): string => {\r\n if (typeof params.value === 'undefined') {\r\n return '';\r\n }\r\n\r\n switch (params.value) {\r\n case 'True':\r\n case 'TRUE':\r\n case true:\r\n return 'Yes';\r\n case 'False':\r\n case 'FALSE':\r\n case false:\r\n return 'No';\r\n default:\r\n return 'Incomplete';\r\n }\r\n};\r\n\r\nconst formatDateToLocal = (params: ValueFormatterParams): string => {\r\n if (!params.value) {\r\n return;\r\n }\r\n\r\n return moment(params.value).local().format('L');\r\n};\r\n\r\nconst ignoreQuickFilter = (params: GetQuickFilterTextParams): string => '';\r\n\r\nexport const generatePartialTestResultsColumnDefs = (): (ColDef | ColGroupDef)[] => [\r\n {\r\n headerName: 'Lab',\r\n field: 'labCode',\r\n chartDataType: 'category',\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n {\r\n headerName: 'Request Id',\r\n field: 'requestId',\r\n chartDataType: 'category',\r\n rowGroup: true,\r\n hide: true,\r\n },\r\n {\r\n headerName: 'Sample Id',\r\n field: 'sampleId',\r\n chartDataType: 'category',\r\n rowGroup: true,\r\n hide: true,\r\n },\r\n {\r\n headerName: 'Sample Received Date',\r\n field: 'sampleReceivedDate',\r\n chartDataType: 'series',\r\n valueFormatter: formatDateToLocal,\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n {\r\n headerName: 'Sample Description',\r\n field: 'sampleDescription',\r\n chartDataType: 'category',\r\n },\r\n {\r\n headerName: 'Composite',\r\n field: 'sampleComposite',\r\n chartDataType: 'category',\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n {\r\n headerName: 'Bill Code',\r\n field: 'billCode',\r\n chartDataType: 'category',\r\n },\r\n\r\n {\r\n headerName: 'Start of Testing Date',\r\n field: 'requestStartOfTestingDate',\r\n chartDataType: 'series',\r\n valueFormatter: formatDateToLocal,\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n {\r\n headerName: 'Collection Date',\r\n field: 'sampleCollectionDate',\r\n chartDataType: 'series',\r\n valueFormatter: formatDateToLocal,\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n {\r\n headerName: 'Result',\r\n field: 'qualitativeResult',\r\n valueGetter: (params: ValueGetterParams) => {\r\n return params.data?.qualitativeResult === 'Unknown'\r\n ? 'Pending'\r\n : params.data?.qualitativeResult;\r\n },\r\n },\r\n {\r\n headerName: 'Units',\r\n field: 'units',\r\n chartDataType: 'category',\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n\r\n {\r\n headerName: 'Approved',\r\n field: 'approved',\r\n chartDataType: 'category',\r\n valueFormatter: formatApproved,\r\n getQuickFilterText: ignoreQuickFilter,\r\n },\r\n];\r\n\r\nexport const partialTestResultGrid: GridOptions = {\r\n columnDefs: generatePartialTestResultsColumnDefs(),\r\n defaultColDef: {\r\n flex: 1,\r\n minWidth: 100,\r\n sortable: true,\r\n filter: true,\r\n resizable: true,\r\n enableValue: true,\r\n enableRowGroup: true,\r\n enablePivot: true,\r\n },\r\n autoGroupColumnDef: {\r\n minWidth: 250,\r\n headerName: 'Test',\r\n field: 'testMethodDescription',\r\n cellRenderer: 'agGroupCellRenderer',\r\n cellRendererParams: {\r\n checkbox,\r\n } as any,\r\n },\r\n rowSelection: 'multiple',\r\n groupSelectsChildren: true,\r\n suppressRowClickSelection: true,\r\n sideBar: 'columns',\r\n animateRows: true,\r\n statusBar: {\r\n statusPanels: [\r\n { statusPanel: 'agTotalAndFilteredRowCountComponent', align: 'left' },\r\n { statusPanel: 'agTotalRowCountComponent', align: 'center' },\r\n { statusPanel: 'agFilteredRowCountComponent' },\r\n { statusPanel: 'agSelectedRowCountComponent' },\r\n { statusPanel: 'agAggregationComponent' },\r\n ],\r\n },\r\n suppressAggFuncInHeader: true,\r\n enableRangeSelection: true,\r\n enableCharts: true,\r\n popupParent: document.body,\r\n customChartThemes: {\r\n passFailCustomTheme: {\r\n baseTheme: 'ag-default',\r\n palette: {\r\n fills: ['#25d925', '#c00', '#9fd0cb'],\r\n strokes: ['#24d824', '#cc0000', '#9ed1cc'],\r\n },\r\n },\r\n },\r\n chartThemes: ['passFailCustomTheme', 'ag-default', 'ag-pastel', 'ag-vivid'],\r\n};\r\n","import CollectionType from 'location-testing/collection-type';\r\nimport GenerateTasksDistributionMethod from './generate-tasks-distribution-method';\r\nimport GenerateTasksPointZoneDistributionMethod from './generate-tasks-point-zone-distribution-method';\r\n\r\nexport default class TaskGenerationRequest {\r\n planId: number;\r\n\r\n timeZone: any;\r\n\r\n startDate: Date;\r\n endDate: Date;\r\n\r\n requestedTaskCount: number;\r\n tasksToBeGenerated: number; // used only for display purposes\r\n\r\n riskPriorities: TaskRequestPriority[];\r\n collectionType: CollectionType;\r\n\r\n testMethodIds: number[];\r\n\r\n blackoutDates: Date[];\r\n\r\n blackoutSundays: boolean;\r\n blackoutMondays: boolean;\r\n blackoutTuesdays: boolean;\r\n blackoutWednesdays: boolean;\r\n blackoutThursdays: boolean;\r\n blackoutFridays: boolean;\r\n blackoutSaturdays: boolean;\r\n\r\n pointDistributionMethod: GenerateTasksDistributionMethod;\r\n\r\n pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod;\r\n pointZoneDistributions: TaskGenerationZoneDistribution[];\r\n}\r\n\r\nexport class TaskRequestPriority {\r\n risk: string;\r\n percentage: number;\r\n}\r\n\r\nexport class TaskGenerationZoneDistribution {\r\n zone: number;\r\n value: number;\r\n type: 'count' | 'percentage';\r\n\r\n constructor(zone: number, value: number, type: 'count' | 'percentage') {\r\n this.zone = zone;\r\n this.value = value;\r\n this.type = type;\r\n }\r\n\r\n private static getZoneForServer(\r\n pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod,\r\n zoneDistributions: any,\r\n zonePercentageCount: any) {\r\n const { zone1, zone2, zone3, zone4 } = pointZoneDistributionMethod == GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ? zoneDistributions\r\n : zonePercentageCount;\r\n\r\n return { zone1, zone2, zone3, zone4 };\r\n }\r\n\r\n private static getZoneForUI(\r\n pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod,\r\n zoneDistributions: any,\r\n zonePercentageCount: any) {\r\n const { zone1, zone2, zone3, zone4 } = (pointZoneDistributionMethod === GenerateTasksPointZoneDistributionMethod.DISCRETE ||\r\n pointZoneDistributionMethod === GenerateTasksPointZoneDistributionMethod.PERCENTAGE)\r\n ? zoneDistributions\r\n : zonePercentageCount;\r\n\r\n return { zone1, zone2, zone3, zone4 };\r\n }\r\n\r\n private static getType(pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod) {\r\n return (pointZoneDistributionMethod === GenerateTasksPointZoneDistributionMethod.DISCRETE ||\r\n pointZoneDistributionMethod === GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE)\r\n ? 'count'\r\n : 'percentage'\r\n }\r\n\r\n public static createAllZonesForServer(\r\n pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod,\r\n zoneDistributions: any,\r\n zonePercentageCount: any) {\r\n const { zone1, zone2, zone3, zone4 } = this.getZoneForServer(pointZoneDistributionMethod,\r\n zoneDistributions,\r\n zonePercentageCount);\r\n const type = this.getType(pointZoneDistributionMethod);\r\n\r\n return [\r\n new TaskGenerationZoneDistribution(1, Number(zone1), type),\r\n new TaskGenerationZoneDistribution(2, Number(zone2), type),\r\n new TaskGenerationZoneDistribution(3, Number(zone3), type),\r\n new TaskGenerationZoneDistribution(4, Number(zone4), type)\r\n ];\r\n }\r\n\r\n public static createAllZonesForUI(\r\n pointZoneDistributionMethod: GenerateTasksPointZoneDistributionMethod,\r\n zoneDistributions: any,\r\n zonePercentageCount: any) {\r\n const { zone1, zone2, zone3, zone4 } = this.getZoneForUI(pointZoneDistributionMethod,\r\n zoneDistributions,\r\n zonePercentageCount);\r\n const type = this.getType(pointZoneDistributionMethod);\r\n\r\n return [\r\n new TaskGenerationZoneDistribution(1, Number(zone1), type),\r\n new TaskGenerationZoneDistribution(2, Number(zone2), type),\r\n new TaskGenerationZoneDistribution(3, Number(zone3), type),\r\n new TaskGenerationZoneDistribution(4, Number(zone4), type)\r\n ];\r\n }\r\n}\r\n\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-http-client';\r\nimport { buildQueryString } from 'aurelia-path';\r\nimport { PartialTestResult } from './partial-test-result';\r\nimport { PartialTestResultListQuery } from './partial-test-results-query-filters';\r\n\r\n@autoinject\r\nexport class PartialTestResultService {\r\n private baseRoute: string;\r\n\r\n constructor(private httpClient: HttpClient) {\r\n this.baseRoute = 'partial-test-results';\r\n }\r\n\r\n getTestResults(\r\n partialTestResultListQuery: PartialTestResultListQuery,\r\n ): Promise {\r\n var query = buildQueryString(partialTestResultListQuery, true);\r\n return this.httpClient.get(\r\n `${this.baseRoute}${query ? `?${query}` : ''}`,\r\n ) as unknown as Promise;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { DashboardTemplateWidget } from './widget-registry';\r\n\r\nconst STORAGE_KEY = 'dashboardTemplatePreview';\r\n\r\n// Transient handoff for previewing an in-progress (unsaved) template layout. The detail page\r\n// stashes the current canvas state here right before opening the preview route in a new tab;\r\n// dashboard-widgets.ts consumes (and clears) it on activate. Uses localStorage rather than an\r\n// in-memory field - the preview opens in a genuinely separate browser tab (a fresh app/DI\r\n// container instance), so an in-memory singleton wouldn't be visible there at all; localStorage\r\n// is the one thing both tabs actually share. Same pattern SecurityService already uses for\r\n// workingUnderOrganization. Only ever consulted by the dedicated \"dashboard-widgets-preview\"\r\n// route (see app.js) - a plain dashboard-widgets visit must never read this, regardless of\r\n// whether it was cleared correctly after the last use.\r\n@autoinject\r\nexport default class DashboardPreviewService {\r\n setPendingPreview(widgets: DashboardTemplateWidget[]) {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(widgets));\r\n }\r\n\r\n takePendingPreview(): DashboardTemplateWidget[] | null {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n localStorage.removeItem(STORAGE_KEY);\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n}\r\n","import { autoinject, BindingEngine, Disposable, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n validateTrigger,\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SecurityService from 'security/security-service';\r\nimport UserService from 'users/user-service';\r\nimport DisplayOnlyElementManager from './display-only-element-manager';\r\nimport LabelTemplateService from './label-template-service';\r\nimport LabelTemplateType from './label-template-type';\r\nimport SampleLabelDisplayOnlyElementManager from './sample-label-display-only-element-manager';\r\nimport UiLabelTemplate from './ui-label-template';\r\nimport UiLabelTemplateElement from './ui-label-template-element';\r\n\r\n@autoinject\r\nexport class LabelTemplateList {\r\n organizations: any[];\r\n uiLabelTemplate: UiLabelTemplate;\r\n zoom: number;\r\n @observable selectedElement: UiLabelTemplateElement;\r\n\r\n objectNameOptions: any;\r\n fieldNameOptions: any;\r\n validationController: ValidationController;\r\n formChanged: boolean;\r\n zoomLevels: number[];\r\n zoomLevelIndex: number;\r\n canZoomIn: boolean;\r\n canZoomOut: boolean;\r\n canEditLabelTemplates: boolean;\r\n missingOrganizationConfiguration: boolean;\r\n labelTemplateTypeOptions: any;\r\n uiLabelTemplateWidthChangedSubscription: Disposable;\r\n uiLabelTemplateHeightChangedSubscription: Disposable;\r\n uiLabelTemplateTypeChangedSubscription: Disposable;\r\n revertingLabelTemplateType: boolean;\r\n allowAddRemoveElements: boolean;\r\n displayOnlyElementManager: DisplayOnlyElementManager;\r\n sampleLabelFontSize: number;\r\n\r\n constructor(\r\n validationControllerFactory: ValidationControllerFactory,\r\n private bindingEngine: BindingEngine,\r\n private router: Router,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private userService: UserService,\r\n private labelTemplateService: LabelTemplateService,\r\n ) {\r\n this.logger.name = 'label-template-detail';\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.zoomLevelIndex = 5;\r\n this.zoomLevels = [25, 50, 100, 200, 300, 400, 500];\r\n this.canZoomIn = true;\r\n this.canZoomOut = true;\r\n\r\n this.revertingLabelTemplateType = false;\r\n this.allowAddRemoveElements = false;\r\n\r\n this.selectedElement = null;\r\n\r\n this.canEditLabelTemplates =\r\n this.securityService.hasPermission('EditLabelTemplates') &&\r\n !this.securityService.isImpersonating();\r\n\r\n this.labelTemplateTypeOptions = LabelTemplateType.getOptions();\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n let [labelTemplate, organizations] = await Promise.all([\r\n params.id !== 'create'\r\n ? this.labelTemplateService.getLabelTemplate(parseInt(params.id))\r\n : {\r\n id: null,\r\n type: null,\r\n width: 162,\r\n height: 90,\r\n elements: '[]', // JSON string to match server response.\r\n organizationConfigurations: [],\r\n isActive: true,\r\n batchTestMethods: false,\r\n },\r\n this.userService.getCurrentUserOrganizations(),\r\n ]);\r\n\r\n this.uiLabelTemplate = UiLabelTemplate.fromModel(labelTemplate, organizations);\r\n this.subscribePropertyChanges(this.uiLabelTemplate);\r\n\r\n this.sampleLabelFontSize = this.uiLabelTemplate.elements[0]?.fontSize || 6;\r\n this.initializeDisplayOnlyElements(this.uiLabelTemplate.type);\r\n\r\n this.organizations = organizations;\r\n\r\n this.loadFieldOptions();\r\n this.setupValidation();\r\n } catch (error) {\r\n this.logger.error('Error loading label template.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Label Template',\r\n 'An error occurred while loading the label template. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n subscribePropertyChanges(uiLabelTemplate: UiLabelTemplate) {\r\n this.uiLabelTemplateWidthChangedSubscription = this.bindingEngine\r\n .propertyObserver(this.uiLabelTemplate, 'width')\r\n .subscribe(this.handleUiLabelTemplateWidthChanged.bind(this));\r\n\r\n this.uiLabelTemplateHeightChangedSubscription = this.bindingEngine\r\n .propertyObserver(this.uiLabelTemplate, 'height')\r\n .subscribe(this.handleUiLabelTemplateHeightChanged.bind(this));\r\n\r\n this.uiLabelTemplateTypeChangedSubscription = this.bindingEngine\r\n .propertyObserver(this.uiLabelTemplate, 'type')\r\n .subscribe(this.handleUiLabelTemplateTypeChanged.bind(this));\r\n }\r\n\r\n deactivate() {\r\n this.uiLabelTemplateWidthChangedSubscription?.dispose();\r\n this.uiLabelTemplateHeightChangedSubscription?.dispose();\r\n this.uiLabelTemplateTypeChangedSubscription?.dispose();\r\n }\r\n\r\n handleUiLabelTemplateWidthChanged() {\r\n this.displayOnlyElementManager?.positionDisplayOnlyElements();\r\n }\r\n\r\n handleUiLabelTemplateHeightChanged() {\r\n this.displayOnlyElementManager?.positionDisplayOnlyElements();\r\n }\r\n\r\n async handleUiLabelTemplateTypeChanged(type, oldType) {\r\n this.selectedElement = null;\r\n\r\n // Bail out (and clear flag) if reverting the template type.\r\n if (this.revertingLabelTemplateType) {\r\n this.revertingLabelTemplateType = false;\r\n return;\r\n }\r\n\r\n // Do not prompt user first time the template type is set.\r\n if (!oldType) {\r\n this.initializeDisplayOnlyElements(type);\r\n return;\r\n }\r\n\r\n if (type !== oldType) {\r\n // Prompt user if OK to clear out label elements.\r\n let confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Clear all label elements?',\r\n 'Switching between label types will clear out all the label elements.',\r\n );\r\n if (confirmed) {\r\n this.clearElements();\r\n this.initializeDisplayOnlyElements(type);\r\n this.uiLabelTemplate.batchTestMethods = false;\r\n return;\r\n }\r\n\r\n // Revert value back if user cancels the confirmation.\r\n this.revertingLabelTemplateType = true;\r\n this.uiLabelTemplate.type = oldType;\r\n }\r\n }\r\n\r\n clearElements() {\r\n for (let element of this.uiLabelTemplate.elements) this.tearDownElementValidation(element);\r\n\r\n this.uiLabelTemplate.elements.splice(0);\r\n }\r\n\r\n initializeDisplayOnlyElements(templateType: string) {\r\n if (templateType !== 'Sample') {\r\n this.allowAddRemoveElements = true;\r\n this.displayOnlyElementManager = null;\r\n return;\r\n }\r\n\r\n this.allowAddRemoveElements = false;\r\n\r\n /*\r\n * HACK/WORKAROUND\r\n * Sample label templates persist an empty ('[]') for elements\r\n * Task label templates use built in logic to define layout of elements\r\n * If we get this far then this sample label template can either:\r\n * (1) Be formatted using it's persisted element properties OR\r\n * (2) Be display only and setup to save formatted elements for next persist\r\n */\r\n if (this.uiLabelTemplate.elements.length) {\r\n return;\r\n }\r\n\r\n this.displayOnlyElementManager = new SampleLabelDisplayOnlyElementManager(\r\n this.uiLabelTemplate,\r\n );\r\n this.displayOnlyElementManager.createDisplayOnlyElements();\r\n }\r\n\r\n addOrganizationConfiguration() {\r\n let organizationConfiguration = {\r\n id: null,\r\n organizationId: null,\r\n templateName: null,\r\n isActive: true,\r\n };\r\n\r\n this.uiLabelTemplate.organizationConfigurations.push(organizationConfiguration);\r\n this.setupOrganizationConfigurationValidation(organizationConfiguration);\r\n this.missingOrganizationConfiguration = false;\r\n }\r\n\r\n removeOrganizationConfiguration(organizationConfiguration) {\r\n this.tearDownOrganizationConfigurationValidation(organizationConfiguration);\r\n this.uiLabelTemplate.organizationConfigurations.splice(\r\n this.uiLabelTemplate.organizationConfigurations.indexOf(organizationConfiguration),\r\n 1,\r\n );\r\n this.missingOrganizationConfiguration =\r\n this.uiLabelTemplate.organizationConfigurations.length === 0;\r\n }\r\n\r\n selectElement(element, $event: MouseEvent) {\r\n if (!element || !element.displayOnly) this.selectedElement = element;\r\n\r\n $event?.stopImmediatePropagation();\r\n }\r\n\r\n // Set all properties the same until all formatting(task) is allowed for sample labels\r\n sampleLabelFontSizeChanged() {\r\n this.uiLabelTemplate.elements.forEach((e) => {\r\n e.fontSize = Number(this.sampleLabelFontSize);\r\n e.objectName = 'sampleLabel';\r\n e.fieldName = 'sampleLabelField';\r\n });\r\n }\r\n\r\n async selectedElementChanged(element, oldElement) {\r\n if (oldElement) this.validateElement(oldElement);\r\n\r\n if (element && element.error) this.validateElement(element);\r\n }\r\n\r\n async validateElement(element: UiLabelTemplateElement) {\r\n var result = await this.validationController.validate({ object: element });\r\n element.error = !result.valid;\r\n }\r\n\r\n addElement() {\r\n let element = UiLabelTemplateElement.new(this.uiLabelTemplate, 'text', false);\r\n\r\n this.setupElementValidation(element);\r\n this.uiLabelTemplate.elements.push(element);\r\n this.selectedElement = element;\r\n }\r\n\r\n removeSelectedElement() {\r\n if (!this.selectedElement) return;\r\n\r\n this.tearDownElementValidation(this.selectedElement);\r\n this.uiLabelTemplate.elements.splice(\r\n this.uiLabelTemplate.elements.indexOf(this.selectedElement),\r\n 1,\r\n );\r\n this.selectedElement = null;\r\n }\r\n\r\n zoomIn() {\r\n this.canZoomOut = true;\r\n this.zoomLevelIndex++;\r\n\r\n if (this.zoomLevelIndex === this.zoomLevels.length - 1) this.canZoomIn = false;\r\n }\r\n\r\n zoomOut() {\r\n this.canZoomIn = true;\r\n this.zoomLevelIndex--;\r\n\r\n if (this.zoomLevelIndex === 0) this.canZoomOut = false;\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n batchTestMethodsChanged() {\r\n this.configureFieldNameOptionsForBatchTestMethods();\r\n }\r\n\r\n loadFieldOptions() {\r\n this.objectNameOptions = {\r\n Task: [{ title: 'Task', value: 'taskLabel' }],\r\n };\r\n\r\n this.fieldNameOptions = {\r\n Task: {\r\n taskLabel: [\r\n { group: 'Task', title: 'ID', value: 'taskId' },\r\n { group: 'Task', title: 'Sample Description', value: 'taskSampleDescription' },\r\n { group: 'Task', title: 'Operations Timing', value: 'operationsTiming' },\r\n { group: 'Task', title: 'Collection Type', value: 'collectionType' },\r\n { group: 'Task', title: 'Assigned Username', value: 'taskAssignedUsername' },\r\n { group: 'Task', title: 'Target Date Time', value: 'targetDateTime' },\r\n { group: 'Task', title: 'Collected Date Time', value: 'collectedDateTime' },\r\n { group: 'Task', title: 'Internal ID', value: 'organizationInternalId' },\r\n { group: 'Point', title: 'ID', value: 'pointId' },\r\n { group: 'Point', title: 'Name', value: 'samplePointName' },\r\n { group: 'Point', title: 'Description', value: 'samplePointDescription' },\r\n { group: 'Point', title: 'Room', value: 'samplePointRoom' },\r\n { group: 'Point', title: 'Zone', value: 'samplePointZone' },\r\n { group: 'Point', title: 'Type', value: 'samplePointType' },\r\n { group: 'Point', title: 'Mobile', value: 'samplePointMobile' },\r\n { group: 'Organization', title: 'ID', value: 'organizationId' },\r\n { group: 'Organization', title: 'Name', value: 'organizationName' },\r\n { group: 'Map', title: 'ID', value: 'mapId' },\r\n { group: 'Map', title: 'Name', value: 'mapName' },\r\n { group: 'Map', title: 'Description', value: 'mapDescription' },\r\n { group: 'Plan', title: 'ID', value: 'planId' },\r\n { group: 'Plan', title: 'Name', value: 'planName' },\r\n { group: 'Plan', title: 'Description', value: 'planDescription' },\r\n { group: 'Plan', title: 'Type', value: 'planType' },\r\n {\r\n group: 'Plan',\r\n title: 'Schedule Cycle Duration Days',\r\n value: 'planScheduleCycleDurationDays',\r\n },\r\n { group: 'Point', title: 'ID', value: 'remediationId' },\r\n { group: 'Point', title: 'Name', value: 'remediationName' },\r\n { group: 'Point', title: 'Description', value: 'remediationDescription' },\r\n {\r\n group: 'Point',\r\n title: 'Assigned Username',\r\n value: 'remediationAssignedUsername',\r\n },\r\n {\r\n group: 'Point',\r\n title: 'Approval Username',\r\n value: 'remediationApprovalUsername',\r\n },\r\n { group: 'Point', title: 'Status', value: 'remediationStatus' },\r\n { group: 'Test Method', title: 'ID', value: 'testMethodExternalId' },\r\n { group: 'Test Method', title: 'Name', value: 'testMethodName' },\r\n { group: 'Test Method', title: 'Code', value: 'testMethodBillCode' },\r\n {\r\n group: 'Test Method',\r\n title: 'Batched Test Methods',\r\n value: 'batchedTestMethods',\r\n },\r\n ],\r\n },\r\n };\r\n\r\n this.configureFieldNameOptionsForBatchTestMethods();\r\n }\r\n\r\n fieldNameRules = {\r\n disabledForStandardMode: ['batchedTestMethods'],\r\n disabledForBatchMode: ['testMethodExternalId', 'testMethodName', 'testMethodBillCode'],\r\n };\r\n\r\n configureFieldNameOptionsForBatchTestMethods() {\r\n this.fieldNameOptions['Task'].taskLabel.forEach((option) => {\r\n option.disabled = this.uiLabelTemplate.batchTestMethods\r\n ? this.fieldNameRules.disabledForBatchMode.includes(option.value)\r\n : this.fieldNameRules.disabledForStandardMode.includes(option.value);\r\n });\r\n\r\n this.uiLabelTemplate.elements.forEach((element) => {\r\n if (\r\n (this.uiLabelTemplate.batchTestMethods &&\r\n this.fieldNameRules.disabledForBatchMode.includes(element.fieldName)) ||\r\n (!this.uiLabelTemplate.batchTestMethods &&\r\n this.fieldNameRules.disabledForStandardMode.includes(element.fieldName))\r\n ) {\r\n element.fieldName = null;\r\n }\r\n });\r\n }\r\n\r\n setupValidation() {\r\n ValidationRules.ensure('width')\r\n .required()\r\n .satisfies((w) => 36 <= w && w <= 1500)\r\n .ensure('height')\r\n .required()\r\n .satisfies((h) => 36 <= h && h <= 1500)\r\n .ensure('type')\r\n .required()\r\n .on(this.uiLabelTemplate);\r\n\r\n for (let organizationConfiguration of this.uiLabelTemplate.organizationConfigurations)\r\n this.setupOrganizationConfigurationValidation(organizationConfiguration);\r\n\r\n for (let element of this.uiLabelTemplate.elements.filter((e) => !e.displayOnly))\r\n this.setupElementValidation(element);\r\n }\r\n\r\n setupOrganizationConfigurationValidation(organizationConfiguration) {\r\n let ensureSingleOccurrence = (organizationId) => {\r\n let occurrences = this.uiLabelTemplate.organizationConfigurations.filter(\r\n (c) => c.organizationId === organizationId,\r\n ).length;\r\n\r\n return occurrences === 1;\r\n };\r\n\r\n ValidationRules.ensure('organizationId')\r\n .required()\r\n .satisfies(ensureSingleOccurrence)\r\n .ensure('templateName')\r\n .required()\r\n .on(organizationConfiguration);\r\n }\r\n\r\n tearDownOrganizationConfigurationValidation(organizationConfiguration) {\r\n ValidationRules.off(organizationConfiguration);\r\n }\r\n\r\n setupElementValidation(element) {\r\n ValidationRules.ensure((e: UiLabelTemplateElement) => e.objectName)\r\n .required()\r\n .when((e) => e.mode === 'field')\r\n .ensure((e: UiLabelTemplateElement) => e.fieldName)\r\n .required()\r\n .when((e) => e.mode === 'field')\r\n .ensure((e: UiLabelTemplateElement) => e.template)\r\n .required()\r\n .when((e) => e.mode === 'template')\r\n .ensure((e: UiLabelTemplateElement) => e.width)\r\n .required()\r\n .satisfies((width, e) => 10 <= width && width <= this.uiLabelTemplate.width - e.x)\r\n .ensure((e: UiLabelTemplateElement) => e.x)\r\n .required()\r\n .satisfies((x, e) => 0 <= x && x <= this.uiLabelTemplate.width - e.width)\r\n .ensure((e: UiLabelTemplateElement) => e.y)\r\n .required()\r\n .satisfies((y) => 0 <= y && y <= this.uiLabelTemplate.height)\r\n .ensure((e: UiLabelTemplateElement) => e.fontSize)\r\n .required()\r\n .satisfies((fontSize) => 3 <= fontSize && fontSize <= 72)\r\n .on(element);\r\n }\r\n\r\n tearDownElementValidation(element) {\r\n ValidationRules.off(element);\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n\r\n for (let result of aggregateResult.results)\r\n if (!result.valid && result.object instanceof UiLabelTemplateElement)\r\n result.object.error = true;\r\n\r\n this.missingOrganizationConfiguration =\r\n this.uiLabelTemplate.organizationConfigurations.length === 0;\r\n\r\n for (let element of this.uiLabelTemplate.elements) await this.validateElement(element);\r\n\r\n let errorElements = this.uiLabelTemplate.elements.filter((e) => e.error);\r\n\r\n if (\r\n !aggregateResult.valid ||\r\n this.missingOrganizationConfiguration ||\r\n errorElements.length !== 0\r\n ) {\r\n this.pageContext.showErrorOverlay(\r\n 'Part of this form is not valid. Please correct any issues and save again.',\r\n );\r\n return;\r\n }\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n let labelTemplate = this.uiLabelTemplate.toModel();\r\n\r\n let savedLabelTemplate = await this.labelTemplateService.saveLabelTemplate(\r\n labelTemplate,\r\n );\r\n this.uiLabelTemplate.id = savedLabelTemplate.id;\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Label template saved successfully.');\r\n\r\n this.router.navigateToRoute(\r\n 'label-template-detail',\r\n { id: this.uiLabelTemplate.id },\r\n { replace: true },\r\n );\r\n } catch (error) {\r\n this.logger.error('Error saving label template.', error, {\r\n uiLabelTemplate: this.uiLabelTemplate,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Label Template',\r\n this.getApiErrorMessage(error.apiErrorCode),\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(apiErrorCode: number) {\r\n return 'An error occurred while saving the label template. Please try again later.';\r\n }\r\n\r\n cancel() {\r\n this.router.navigateToRoute('label-template-list');\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".form-block.label-info .float-left{margin-bottom:0}.label-template{background:#fff;border:solid 1px #aaa;position:relative}.label-template-element{border:solid 1px #aaaaaa5c;position:absolute;word-break:break-all}.label-template-element:not(.display-only){cursor:pointer}.label-template-element.selected{border:solid 1px #2fc7f3}.label-template-element.error{border:solid 1px #db2121}p.label-template-inch-label{display:inline-block;padding-left:8px;font-size:16px !important}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport RecordStatus, { getRecordStatusOptions } from 'record-status';\r\nimport CompareUtility from 'infrastructure/compare-utility';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SecurityService from 'security/security-service';\r\nimport UserService from 'users/user-service';\r\nimport LabelTemplateType from './label-template-type';\r\nimport UiLabelTemplate from './ui-label-template';\r\nimport LabelTemplateService from './label-template-service';\r\n\r\n@autoinject\r\nexport class LabelTemplateList {\r\n @observable filterText;\r\n\r\n // filters\r\n applyFiltersSubscription: Subscription;\r\n clearFiltersSubscription: Subscription;\r\n\r\n recordStatusOptions: SelectorOption[];\r\n selectedRecordStatus: RecordStatus;\r\n\r\n gridOptions;\r\n labelTemplateTypeOptions: SelectorOption[];\r\n allSelected: boolean;\r\n selectedActiveLabelTemplates: any[];\r\n canEditLabelTemplates: boolean;\r\n selectedLabelTemplateTypes: string[] = [];\r\n uiLabelTemplates: UiLabelTemplate[];\r\n uiLabelTemplatesView: any[];\r\n organizations: any[];\r\n selectedOrganizations: any[] = [];\r\n filterCount: number;\r\n\r\n constructor(\r\n private router: Router,\r\n private eventAggregator: EventAggregator,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private labelTemplateService: LabelTemplateService,\r\n private userService: UserService\r\n ) {\r\n this.logger.name = 'label-template-list';\r\n\r\n this.filterText = '';\r\n\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template: '',\r\n headerCellTemplate: '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Type',\r\n field: 'typeCaption',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 100\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Size',\r\n field: 'sizeCaption',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 100\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Configured For',\r\n field: 'configuredForCaption',\r\n template: '${data.configuredForCaption}',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerClass: 'row-actions',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n ],\r\n defaultColDef: {\r\n sortable: true\r\n }\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActiveLabelTemplates = [];\r\n this.selectedRecordStatus = RecordStatus.ACTIVE;\r\n this.canEditLabelTemplates = this.securityService.hasPermission('EditLabelTemplates') && !this.securityService.isImpersonating();\r\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\r\n this.handleClearFilters = this.handleClearFilters.bind(this);\r\n }\r\n\r\n navigateToLabelTemplateDetail(id) {\r\n this.router.navigateToRoute('label-template-detail', { id });\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.uiLabelTemplatesView.every(t => t.isSelected);\r\n this.setSelectedActiveLabelTemplates();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.uiLabelTemplatesView) {\r\n this.allSelected = !this.uiLabelTemplatesView.every(t => t.isSelected);\r\n\r\n for (let t of this.uiLabelTemplatesView)\r\n t.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActiveLabelTemplates();\r\n\r\n return true;\r\n }\r\n\r\n setSelectedActiveLabelTemplates() {\r\n this.selectedActiveLabelTemplates = this.uiLabelTemplatesView.filter(t => t.isSelected && t.isActive);\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateLabelTemplatesView();\r\n }\r\n\r\n handleApplyFilters() {\r\n this.updateLabelTemplatesView();\r\n }\r\n\r\n handleClearFilters() {\r\n this.selectedLabelTemplateTypes = [];\r\n this.selectedRecordStatus = RecordStatus.ACTIVE;\r\n this.updateLabelTemplatesView();\r\n }\r\n\r\n updateLabelTemplatesView() {\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n\r\n if (this.uiLabelTemplates) {\r\n this.uiLabelTemplatesView = this.uiLabelTemplates.filter(t =>\r\n this.matchSelectedLabelTemplateTypes(t) &&\r\n (t.configuredForCaption || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 &&\r\n this.matchSelectedRecordStatus(t) &&\r\n (this.selectedOrganizations.length === 0 || this.selectedOrganizations.some(o => t.organizationConfigurations.some(c => o.id === c.organizationId)))\r\n );\r\n\r\n this.allSelected = this.uiLabelTemplatesView.every(t => t.isSelected);\r\n }\r\n\r\n this.filterCount =\r\n (this.selectedLabelTemplateTypes.length != 0 ? 1 : 0) +\r\n (this.selectedOrganizations.length != 0 ? 1 : 0) +\r\n (this.selectedRecordStatus !== RecordStatus.ACTIVE ? 1 : 0);\r\n }\r\n\r\n matchSelectedLabelTemplateTypes(uiLabelTemplate: UiLabelTemplate) {\r\n if (!this.selectedLabelTemplateTypes || !this.selectedLabelTemplateTypes.length)\r\n return true;\r\n\r\n return this.selectedLabelTemplateTypes.some(type => type === uiLabelTemplate.type);\r\n }\r\n\r\n matchSelectedRecordStatus(uiLabelTemplate: UiLabelTemplate) {\r\n if (this.selectedRecordStatus === RecordStatus.ALL)\r\n return true;\r\n\r\n let filteredIsActiveValue = this.selectedRecordStatus === RecordStatus.ACTIVE;\r\n return uiLabelTemplate.isActive === filteredIsActiveValue;\r\n }\r\n\r\n activate(params) {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe('filters.apply', this.handleApplyFilters);\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe('filters.clear', this.handleClearFilters);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.recordStatusOptions = getRecordStatusOptions();\r\n this.labelTemplateTypeOptions = LabelTemplateType.getOptions();\r\n\r\n let [labelTemplates, organizations] = await Promise.all([\r\n this.labelTemplateService.getLabelTemplates(),\r\n this.userService.getCurrentUserOrganizations()\r\n ]);\r\n\r\n this.organizations = organizations;\r\n this.uiLabelTemplates = labelTemplates.map(t => UiLabelTemplate.fromModel(t, organizations));\r\n this.updateLabelTemplatesView();\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error loading label templates.', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Label Templates',\r\n 'An error occurred while loading the label templates. Please try again later.');\r\n }\r\n })();\r\n }\r\n\r\n deactivate() {\r\n this.applyFiltersSubscription && this.applyFiltersSubscription.dispose();\r\n this.clearFiltersSubscription && this.clearFiltersSubscription.dispose();\r\n }\r\n\r\n async deleteLabelTemplate(labelTemplate) {\r\n let confirmed = await this.dialogPresenter.showConfirmation('Delete Label Template', 'Are you sure you want to delete this label template?')\r\n if (!confirmed)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.labelTemplateService.deleteLabelTemplates([labelTemplate.id]);\r\n\r\n this.pageContext.showSuccessOverlay('Label template deleted successfully.');\r\n\r\n labelTemplate.isSelected = false;\r\n labelTemplate.isActive = false;\r\n\r\n this.setSelectedActiveLabelTemplates();\r\n } catch (error) {\r\n this.logger.error('Error deleting label template.', error, { labelTemplateId: labelTemplate.id });\r\n this.handleDeleteError(error, false);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async deleteSelectedLabelTemplates() {\r\n let labelTemplatesToDelete = this.uiLabelTemplatesView.filter(t => t.isSelected);\r\n if (!labelTemplatesToDelete.length)\r\n return;\r\n\r\n let confirmed = await this.dialogPresenter.showConfirmation('Delete Selected Label Templates', 'Are you sure you want to delete the selected label templates?');\r\n if (!confirmed)\r\n return;\r\n\r\n var labelTemplateIds = labelTemplatesToDelete.map(t => t.id);\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.labelTemplateService.deleteLabelTemplates(labelTemplateIds);\r\n this.pageContext.showSuccessOverlay('Selected label templates deleted successfully.');\r\n\r\n for (let t of labelTemplatesToDelete) {\r\n t.isSelected = false;\r\n t.isActive = false;\r\n\r\n this.setSelectedActiveLabelTemplates();\r\n }\r\n\r\n this.updateLabelTemplatesView();\r\n } catch (error) {\r\n this.logger.error('Error deleting label templates.', error, { labelTemplateIds });\r\n this.handleDeleteError(error, true);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n handleDeleteError(error, multiple) {\r\n this.dialogPresenter\r\n .showAlert(\r\n 'Error Deleting Label Template' + (multiple ? 's' : ''),\r\n this.getApiErrorMessage(error.apiErrorCode, multiple));\r\n }\r\n\r\n getApiErrorMessage(errorCode, multiple) {\r\n if (errorCode === 2)\r\n return 'You dont have access to delete the label template' + (multiple ? 's' : '');\r\n\r\n return 'An unexpected error occurred while trying to delete label templates. Please try again later.';\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n validateTrigger,\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport DialogPresenter from '../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../infrastructure/logger';\r\nimport PageContext from '../infrastructure/page-context';\r\nimport Validators from '../infrastructure/validation/validators';\r\nimport LabService from './lab-service';\r\n\r\n@inject(Router, ValidationControllerFactory, PageContext, Logger, DialogPresenter, LabService)\r\nexport default class LabDetail {\r\n validationController: ValidationController;\r\n\r\n lab: any;\r\n formChanged: boolean;\r\n\r\n constructor(\r\n private router: Router,\r\n validationControllerFactory: ValidationControllerFactory,\r\n private pageContext: PageContext,\r\n private logger: Logger,\r\n private dialogPresenter: DialogPresenter,\r\n private labService: LabService,\r\n ) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.pageContext = pageContext;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'lab-detail';\r\n\r\n this.dialogPresenter = dialogPresenter;\r\n this.labService = labService;\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n try {\r\n this.pageContext.isLoading = true;\r\n this.lab = await this.labService.getLab(params.id);\r\n\r\n ValidationRules.ensure('address1')\r\n .displayName('Address')\r\n .required()\r\n .ensure('city')\r\n .displayName('City')\r\n .required()\r\n .ensure('state')\r\n .displayName('State')\r\n .required()\r\n .ensure('postalCode')\r\n .displayName('Postal Code')\r\n .required()\r\n .then()\r\n .satisfies((val, o: any) => Validators.isValidPostalCode(val))\r\n .ensure('phoneNumber')\r\n .displayName('Phone')\r\n .required()\r\n .ensure('faxNumber')\r\n .displayName('Fax')\r\n .required()\r\n .ensure('contactTitle')\r\n .displayName('Contact Title')\r\n .required()\r\n .ensure('contactName')\r\n .displayName('Contact Name')\r\n .required()\r\n .ensure('contactEmail')\r\n .displayName('Contact Email')\r\n .required()\r\n .email()\r\n .ensure('requestSubmissionEmail')\r\n .displayName('Request Submission Email')\r\n .required()\r\n .email()\r\n .on(this.lab);\r\n\r\n this.validationController.addObject(this.lab);\r\n } catch (error) {\r\n this.logger.error('Error loading lab', error, { labId: params.id });\r\n\r\n var errorAlertPromise =\r\n error.apiErrorCode === 1\r\n ? this.dialogPresenter.showAlert(\r\n 'Error Loading Lab',\r\n 'The current lab doesnt exist.',\r\n )\r\n : this.dialogPresenter.showAlert(\r\n 'Error Loading Lab',\r\n 'An error occurred while loading the current lab. Please try again later.',\r\n );\r\n\r\n errorAlertPromise.then(() => {\r\n this.router.navigateToRoute('lab-list');\r\n });\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('lab-list');\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var result = await this.labService.saveLab(this.lab);\r\n this.lab.labDetailId = result.labDetailId;\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Lab saved successfully.');\r\n this.router.navigateToRoute('lab-detail', { id: this.lab.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving lab', error, { lab: this.lab });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Lab',\r\n this.getApiErrorMessage(error.apiErrorCode),\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n if (errorCode === 1) return 'No record was found for the specified lab ID.';\r\n\r\n return 'An error occurred while saving the current lsn. Please try again later.';\r\n }\r\n\r\n validatePostalCode(postalCode) {\r\n return false;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport LabService from './lab-service';\r\nimport SecurityService from '../security/security-service';\r\n\r\n@inject(Router, PageContext, DialogPresenter, Logger, LabService, SecurityService)\r\nexport default class LabList {\r\n @observable filterText;\r\n\r\n isInternalView: boolean;\r\n labs: any;\r\n labsView: any;\r\n\r\n constructor(\r\n private router: Router,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private logger: Logger,\r\n private labService: LabService,\r\n private securityService: SecurityService\r\n ) {\r\n this.logger.name = 'lab-list';\r\n\r\n this.isInternalView = this.securityService.getCurrentSessionUser().isInternal && !this.securityService.isImpersonating();\r\n\r\n this.labService = labService;\r\n this.filterText = '';\r\n }\r\n\r\n navigateToLabDetail(id) {\r\n this.router.navigateToRoute('lab-detail', { id });\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateLabsView();\r\n }\r\n\r\n updateLabsView() {\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n\r\n if (this.labs) {\r\n this.labsView = this.labs.filter(l =>\r\n (l.externalId || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (l.address1 || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (l.address2 || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (l.city || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (l.state || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (l.postalCode || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (l.phoneNumber || '').toLowerCase().indexOf(lowerCasedFilterText) > -1\r\n );\r\n }\r\n }\r\n\r\n activate() {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var labs = await this.labService.getAdminLabs();\r\n\r\n this.pageContext.isLoading = false;\r\n\r\n this.labs = labs;\r\n this.updateLabsView();\r\n } catch (error) {\r\n this.logger.error('Error loading labs.', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Labs',\r\n 'An error occurred while loading the labs. Please try again later.');\r\n }\r\n })();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { inject } from 'aurelia-framework';\r\nimport PageContext from './infrastructure/page-context';\r\n\r\n@inject(Element, PageContext)\r\nexport default class Layout {\r\n constructor(element, pageContext) {\r\n this.element = element;\r\n this.pageContext = pageContext;\r\n }\r\n\r\n attached() {\r\n this.$filterArea = $(this.element.querySelector('#offCanvasFiltering'));\r\n this.$filterArea.foundation();\r\n }\r\n\r\n detached() {\r\n this.$filterArea.foundation('destroy');\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport SecurityService from '../security/security-service';\r\n\r\n@autoinject\r\nexport class Privacy {\r\n isUserLoggedIn: boolean;\r\n\r\n constructor(\r\n private router: Router,\r\n securityService: SecurityService\r\n ) {\r\n this.isUserLoggedIn = securityService.isCurrentUserLoggedIn();\r\n }\r\n\r\n goBack() {\r\n this.router.navigateBack();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport SecurityService from '../security/security-service';\r\n\r\n@autoinject\r\nexport class Terms {\r\n isUserLoggedIn: boolean;\r\n\r\n constructor(\r\n private router: Router,\r\n securityService: SecurityService\r\n ) {\r\n this.isUserLoggedIn = securityService.isCurrentUserLoggedIn();\r\n }\r\n\r\n goBack() {\r\n this.router.navigateBack();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, BindingEngine } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n validateTrigger,\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport FormViewModel from 'infrastructure/contracts/form-view-model';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport Lab from 'labs/lab';\r\nimport LabService from 'labs/lab-service';\r\nimport CollectionType, { getCapPlanCollectionTypeOptions } from 'location-testing/collection-type';\r\nimport Organization from 'organizations/organization';\r\nimport OrganizationService from 'organizations/organization-service';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport operationsTimingOptions from '../operations-timing-options';\r\nimport CapPlanService from './cap-plan-service';\r\nimport CapPlanDetailRouteParams from './contracts/cap-plan-detail-route-params';\r\nimport FormSubmittedResult from './contracts/form-submitted-result';\r\nimport { UiCapPlan } from './ui-cap-plan';\r\n\r\n@autoinject\r\nexport class CapPlanDetail implements FormViewModel {\r\n //activation\r\n organizationOptions: Readonly;\r\n labOptions: Readonly;\r\n collectionTypeOptions: Readonly;\r\n operationsTimingOptions: Readonly;\r\n validateOnBind: boolean;\r\n form: UiCapPlan;\r\n\r\n //Subscriptions\r\n formLabIdSubscription: Subscription;\r\n\r\n //other\r\n validationController: ValidationController;\r\n tenantId: number;\r\n labExternalSource: string;\r\n formChanged: boolean;\r\n\r\n //permissions and auditing\r\n canEditCapPlans: boolean;\r\n canViewAudit: boolean;\r\n recordChanges: any;\r\n propertyDisplayNames: any;\r\n\r\n constructor(\r\n private bindingEngine: BindingEngine,\r\n private capPlanService: CapPlanService,\r\n private readonly dialogPresenter: DialogPresenter,\r\n private labService: LabService,\r\n private organizationService: OrganizationService,\r\n private pageContext: PageContext,\r\n private readonly router: Router,\r\n private securityService: SecurityService,\r\n validationControllerFactory: ValidationControllerFactory,\r\n ) {\r\n this.collectionTypeOptions = getCapPlanCollectionTypeOptions();\r\n this.operationsTimingOptions = operationsTimingOptions;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.canEditCapPlans =\r\n this.securityService.hasPermission('EditCapPlans') &&\r\n !this.securityService.isImpersonating();\r\n this.canViewAudit =\r\n this.securityService.isCurrentUserInternal() && this.securityService.isImpersonating();\r\n\r\n this.propertyDisplayNames = {\r\n TestMethods: 'Test Methods',\r\n SampleDescriptionsJson: 'Sample Descriptions',\r\n TestingDayCount: 'Testing Day Count',\r\n IsActive: 'Active',\r\n };\r\n }\r\n\r\n handleFormChange(): void {\r\n this.formChanged = true;\r\n }\r\n\r\n labIdChanged() {\r\n const selectedLab = this.labOptions.find(\r\n (x: SelectorOption) => x.value === this.form.labId,\r\n );\r\n this.labExternalSource = selectedLab?.group;\r\n }\r\n\r\n handleSampleDescriptionRemoved(event: CustomEvent) {\r\n const { detail: index }: { detail: number } = event;\r\n this.form.sampleDescriptions.splice(index, 1);\r\n }\r\n\r\n handleFormSubmitting() {\r\n this.pageContext.isLoading = true;\r\n }\r\n\r\n handleFormSubmitted(event: CustomEvent) {\r\n const { detail }: { detail: FormSubmittedResult } = event;\r\n this.pageContext.isLoading = false;\r\n if (!detail.succeeded) {\r\n const { message } = detail;\r\n this.dialogPresenter.showAlert('Error Saving CAP Plan', message);\r\n return;\r\n }\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('CAP plan saved successfully');\r\n this.router.navigateToRoute('cap-plan-list');\r\n }\r\n\r\n // LIFECYCLES\r\n async canActivate(params: CapPlanDetailRouteParams) {\r\n const { tenantId, id } = params;\r\n this.tenantId = tenantId;\r\n const [organizations, labs, capPlan] = await Promise.all([\r\n this.organizationService.getOrganizations(),\r\n this.labService.getLabs(),\r\n id ? this.capPlanService.getCapPlan(tenantId, id) : null,\r\n ]);\r\n\r\n this.organizationOptions = organizations.map((x: Organization) => ({\r\n title: x.name,\r\n value: x.id,\r\n }));\r\n this.labOptions = labs.map((x: Lab) => ({\r\n title: x.displayName,\r\n value: x.id,\r\n group: x.externalSource,\r\n }));\r\n this.collectionTypeOptions = getCapPlanCollectionTypeOptions();\r\n this.operationsTimingOptions = operationsTimingOptions;\r\n\r\n this.form = new UiCapPlan(this.tenantId);\r\n this.form.loadViewFrom(capPlan);\r\n }\r\n\r\n async bind(): Promise {\r\n this.formLabIdSubscription = this.bindingEngine\r\n .propertyObserver(this.form, 'labId')\r\n .subscribe(this.labIdChanged.bind(this));\r\n\r\n ValidationRules.customRule(\r\n 'collectionTypeRule',\r\n (v: CollectionType, uiCapPlan: UiCapPlan) =>\r\n (v && uiCapPlan.collectionType == CollectionType.Vector) ||\r\n uiCapPlan.collectionType === CollectionType.CorrectiveAction,\r\n '',\r\n );\r\n ValidationRules.ensure((uiCapPlan: UiCapPlan) => uiCapPlan.name)\r\n .required()\r\n .ensure((uiCapPlan: UiCapPlan) => uiCapPlan.organizationId)\r\n .satisfies((v) => v > 0)\r\n .ensure((uiCapPlan: UiCapPlan) => uiCapPlan.collectionType)\r\n .satisfiesRule('collectionTypeRule')\r\n .ensure((uiCapPlan: UiCapPlan) => uiCapPlan.testingDayCount)\r\n .satisfies((v) => v > 0)\r\n .ensure((uiCapPlan: UiCapPlan) => uiCapPlan.sampleDescriptions)\r\n .minItems(1)\r\n .ensure((uiCapPlan: UiCapPlan) => uiCapPlan.labId)\r\n .satisfies((id: number) => id > 0)\r\n .on(this.form);\r\n\r\n if (this.validateOnBind) {\r\n await this.validationController.validate();\r\n }\r\n }\r\n\r\n deactivate(): void {\r\n this.formLabIdSubscription?.dispose();\r\n }\r\n\r\n async loadRecordChanges() {\r\n try {\r\n this.pageContext.isLoading = true;\r\n this.recordChanges = await this.capPlanService.getCapPlanRecordChanges(\r\n this.tenantId,\r\n this.form.id,\r\n );\r\n } catch (error) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading CAP Plan Audit',\r\n 'An error occurred while loading the current CAP plan audit. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { Grid } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport { autoinject } from 'aurelia-dependency-injection';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { expandRowAtIndex } from 'infrastructure/ag-grid/ag-onfirstdatarendered-handler';\r\nimport UserService from 'users/user-service';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport { getCapPlanGridOptions } from './cap-plan-grid';\r\nimport CapPlanService from './cap-plan-service';\r\nimport { CapPlanListItem } from './contracts/cap-plan-list-item.js';\r\nimport { UiCapPlanFilters } from './ui-cap-plan-filters';\r\n\r\n@autoinject\r\nexport class CapPlanList {\r\n @observable filterText: string;\r\n\r\n gridOptions: any;\r\n allSelected: boolean;\r\n capPlans: CapPlanListItem[];\r\n capPlanFilter: UiCapPlanFilters;\r\n\r\n applyFiltersSubscription: any;\r\n clearFiltersSubscription: any;\r\n canEditCapPlans: boolean;\r\n isGridRowSelected: boolean;\r\n selectedCapPlans: number[];\r\n currentUser: any;\r\n capPlanGrid: any;\r\n\r\n constructor(\r\n private capPlanService: CapPlanService,\r\n private dialogPresenter: DialogPresenter,\r\n private eventAggregator: EventAggregator,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private router: Router,\r\n private securityService: SecurityService,\r\n private userService: UserService,\r\n ) {\r\n this.capPlanService = capPlanService;\r\n this.dialogPresenter = dialogPresenter;\r\n this.eventAggregator = eventAggregator;\r\n this.logger = logger;\r\n this.pageContext = pageContext;\r\n this.router = router;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n\r\n this.capPlanFilter = new UiCapPlanFilters();\r\n this.selectedCapPlans = [];\r\n\r\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\r\n this.handleClearFilters = this.handleClearFilters.bind(this);\r\n this.deleteSelectedCapPlans = this.deleteSelectedCapPlans.bind(this);\r\n this.canEditCapPlans =\r\n this.securityService.hasPermission('EditCapPlans') &&\r\n !this.securityService.isImpersonating();\r\n }\r\n\r\n filterTextChanged(newValue: string) {\r\n this.gridOptions.api.setQuickFilter(newValue);\r\n }\r\n\r\n async handleApplyFilters() {\r\n this.capPlanFilter.apply();\r\n await this.loadCapPlans();\r\n }\r\n\r\n async handleClearFilters() {\r\n this.capPlanFilter.clear();\r\n await this.loadCapPlans();\r\n }\r\n\r\n handleAGGridSelectionChanged(event: any) {\r\n const selectedNodes = event.api.getSelectedNodes();\r\n this.isGridRowSelected = selectedNodes.length > 0;\r\n }\r\n\r\n async loadCapPlans() {\r\n const capPlans = await this.capPlanService.getCapPlans(this.capPlanFilter.toModel());\r\n this.capPlans = capPlans;\r\n this.gridOptions?.api.setRowData(this.capPlans);\r\n }\r\n\r\n navigateToCapPlanDetail(tenantId: number, id: number) {\r\n this.router.navigateToRoute('cap-plan-detail', { tenantId, id });\r\n }\r\n\r\n navigateToCapPlanCreate() {\r\n this.router.navigateToRoute('cap-plan-detail', {\r\n tenantId: this.currentUser.organizationId,\r\n });\r\n }\r\n\r\n async deleteSelectedCapPlans() {\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Delete CAP Plans',\r\n 'Are you sure you want to delete these CAP plans?',\r\n );\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n const ids = this.gridOptions.api.getSelectedNodes().map((rowNode) => rowNode.data.id);\r\n try {\r\n await this.capPlanService.bulkDeleteCapPlans(ids);\r\n\r\n const updatedCapPlanList = this.capPlans.filter(({ id }) => !ids.includes(id));\r\n this.capPlans = updatedCapPlanList;\r\n this.gridOptions.api.setRowData(this.capPlans);\r\n\r\n this.pageContext.showSuccessOverlay('Selected CAP plans deleted successfully.');\r\n } catch (error) {\r\n this.logger.error('Error deleting CAP plans', error, { ids });\r\n this.dialogPresenter.showAlert(\r\n 'Error Deleting CAP Plans',\r\n 'An error occured while deleting the CAP plans. Please try again later.',\r\n );\r\n }\r\n }\r\n\r\n async canActivate() {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.apply',\r\n this.handleApplyFilters,\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.clear',\r\n this.handleClearFilters,\r\n );\r\n try {\r\n const [currentUser, organizations, testMethods] = await Promise.all([\r\n this.securityService.getEffectiveUser(),\r\n this.userService.getCurrentUserOrganizations(),\r\n this.capPlanService.getTestMethods(),\r\n ]);\r\n\r\n this.currentUser = currentUser;\r\n this.capPlanFilter.organizations = organizations;\r\n this.capPlanFilter.testMethods = testMethods;\r\n await this.loadCapPlans();\r\n } catch (error) {\r\n this.logger.error('Error loading CAP Plans.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading CAP Plans',\r\n 'An error occured while loading the CAP plans. Please try again later.',\r\n );\r\n }\r\n }\r\n\r\n bind() {\r\n this.gridOptions = getCapPlanGridOptions();\r\n this.gridOptions.rowData = this.capPlans;\r\n this.gridOptions.onSelectionChanged = this.handleAGGridSelectionChanged.bind(this);\r\n this.gridOptions.onFirstDataRendered = (params: any) => expandRowAtIndex(params, 1);\r\n new Grid(this.capPlanGrid, this.gridOptions);\r\n }\r\n\r\n deactivate() {\r\n this.applyFiltersSubscription && this.applyFiltersSubscription.dispose();\r\n this.clearFiltersSubscription && this.clearFiltersSubscription.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport { ValidationController, ValidationRules } from 'aurelia-validation';\r\nimport { RemediationUserType } from 'location-testing/remediations/remediation-user-type';\r\nimport RemedationUsers from 'location-testing/remediations/remediation-users';\r\nimport DialogPresenter from '../../../infrastructure/dialogs/dialog-presenter';\r\n\r\n@autoinject\r\nexport class AutoRemediationCustomElement implements RemedationUsers {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) autoRemediation: boolean;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) deactivateRoutineTaskGeneration: boolean;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) assignedUserId?: number;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) approvalUserId?: number;\r\n @bindable editable: boolean;\r\n @bindable assignedUserFullName?: string;\r\n @bindable approvalUserFullName?: string;\r\n\r\n constructor(\r\n private dialogPresenter: DialogPresenter,\r\n private readonly validationController: ValidationController,\r\n ) {}\r\n\r\n async selectUser(remdiationUserType: RemediationUserType): Promise {\r\n const result = await this.dialogPresenter.showUserSelector('Select a user');\r\n if (result.wasCancelled) return;\r\n\r\n const user = result.output;\r\n if (!user) return;\r\n\r\n switch (remdiationUserType) {\r\n case RemediationUserType.Assigned:\r\n this.assignedUserId = user.id;\r\n this.assignedUserFullName = this.toUserFullName(user);\r\n break;\r\n case RemediationUserType.Approval:\r\n this.approvalUserId = user.id;\r\n this.approvalUserFullName = this.toUserFullName(user);\r\n break;\r\n default:\r\n return;\r\n }\r\n }\r\n async autoRemediationChanged(oldValue: boolean, newValue: boolean) {\r\n if (typeof newValue === 'undefined') {\r\n return;\r\n }\r\n\r\n // let the users bail out if they accidently click off auto-remediation\r\n if (!oldValue && (this.assignedUserId || this.approvalUserId)) {\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Remove Auto Remediation Users',\r\n 'Confirm you wish to remove auto remediation users from this cap plan.',\r\n 'Confirm',\r\n );\r\n if (confirmed) {\r\n this.assignedUserId = null;\r\n this.approvalUserId = null;\r\n this.assignedUserFullName = null;\r\n this.approvalUserFullName = null;\r\n this.deactivateRoutineTaskGeneration = false;\r\n\r\n return;\r\n }\r\n\r\n this.autoRemediation = true;\r\n return;\r\n }\r\n\r\n this.deactivateRoutineTaskGeneration = false;\r\n }\r\n\r\n private toUserFullName(user: any): string {\r\n return user.firstName + ' ' + user.lastName;\r\n }\r\n\r\n bind() {\r\n ValidationRules.customRule(\r\n 'autoRemediationRule',\r\n (v: boolean, model: this) => !v || (v && model.autoRemediation),\r\n '',\r\n );\r\n ValidationRules.ensure((model: this) => model.deactivateRoutineTaskGeneration)\r\n .satisfiesRule('autoRemediationRule')\r\n .ensure((model: this) => model.assignedUserId)\r\n .required()\r\n .when((model: this) => model.autoRemediation)\r\n .ensure((model: this) => model.approvalUserId)\r\n .required()\r\n .when((model: this) => model.autoRemediation)\r\n .ensure((model: this) => model.approvalUserId)\r\n .satisfies((v: number, model: this) => {\r\n return (\r\n (!v && !model.assignedUserId) ||\r\n (v && model.assignedUserId && v !== model.assignedUserId)\r\n );\r\n })\r\n .on(this);\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport OrganizationPlan from 'location-testing/plans/organization-plan';\r\nimport PlanService from 'location-testing/plans/plan-service';\r\n\r\n@autoinject\r\nexport class PlanSelectorCustomElement {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) planId: number;\r\n @bindable organizationId: number;\r\n planOptions: SelectorOption[];\r\n\r\n constructor(private readonly planService: PlanService) {}\r\n\r\n private async getOrganizationPlans() {\r\n const organizationPlans = await this.planService.getOrganizationPlans(this.organizationId);\r\n this.planOptions = organizationPlans.map((op: OrganizationPlan) => {\r\n return {\r\n title: op.planName,\r\n value: op.planId,\r\n } as SelectorOption;\r\n });\r\n }\r\n\r\n async organizationIdChanged() {\r\n await this.getOrganizationPlans();\r\n }\r\n\r\n async bind() {\r\n await this.getOrganizationPlans();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport PointRoomService from '../../point-rooms/point-room-service';\r\n\r\n@autoinject\r\nexport class PointRoomSelectorCustomElement {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) room: string;\r\n @bindable organizationId: number;\r\n roomTypeOptions: SelectorOption[];\r\n\r\n constructor(private readonly pointRoomService: PointRoomService) {}\r\n\r\n private async getOrganizationPointTypes() {\r\n const organizationPointTypes = await this.pointRoomService.getOrganizationPointRooms(\r\n this.organizationId,\r\n );\r\n this.roomTypeOptions = organizationPointTypes.map((pt: any) => {\r\n return {\r\n title: pt,\r\n value: pt,\r\n } as SelectorOption;\r\n });\r\n }\r\n\r\n async organizationIdChanged() {\r\n await this.getOrganizationPointTypes();\r\n }\r\n\r\n async bind() {\r\n await this.getOrganizationPointTypes();\r\n }\r\n}\r\n","module.exports = \"\";","import { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport PointTypeService from '../../point-types/point-type-service';\r\n\r\n@autoinject\r\nexport class PointTypeSelectorCustomElement {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) pointType: string;\r\n @bindable organizationId: number;\r\n pointTypeOptions: SelectorOption[];\r\n\r\n constructor(private readonly pointTypeService: PointTypeService) {}\r\n\r\n private async getOrganizationPointTypes() {\r\n const organizationPointTypes = await this.pointTypeService.getOrganizationPointTypes(\r\n this.organizationId,\r\n );\r\n this.pointTypeOptions = organizationPointTypes.map((pt: any) => {\r\n return {\r\n title: pt,\r\n value: pt,\r\n } as SelectorOption;\r\n });\r\n }\r\n\r\n async organizationIdChanged() {\r\n await this.getOrganizationPointTypes();\r\n }\r\n\r\n async bind() {\r\n await this.getOrganizationPointTypes();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable } from 'aurelia-framework';\r\nimport TestMethod from 'test-methods/test-method';\r\nimport CapPlanService from '../cap-plan-service';\r\nimport { RelatedCapPlan } from '../contracts/related-cap-plan';\r\n\r\n@autoinject\r\nexport class RelatedCapPlansCustomElement {\r\n @bindable capPlanId?: number;\r\n @bindable organizationId: number;\r\n @bindable testMethods: TestMethod[];\r\n relatedCapPlans: RelatedCapPlan[];\r\n\r\n constructor(private readonly capPlanService: CapPlanService) {\r\n this.testMethods = [];\r\n this.relatedCapPlans = [];\r\n }\r\n\r\n private async getRelatedCapPlans() {\r\n if (this.testMethods.length === 0) {\r\n return;\r\n }\r\n\r\n this.relatedCapPlans = await this.capPlanService.getRelatedCapPlans(\r\n this.organizationId,\r\n this.testMethods.map((tm: TestMethod) => tm.id),\r\n this.capPlanId || 0,\r\n );\r\n }\r\n\r\n async testMethodsChanged() {\r\n await this.getRelatedCapPlans();\r\n }\r\n\r\n async bind() {\r\n await this.getRelatedCapPlans();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport { ValidationController, ValidationRules } from 'aurelia-validation';\r\n\r\n@autoinject\r\nexport class SampleDescriptionCustomElement {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) description: string;\r\n @bindable editable: boolean;\r\n @bindable index: number;\r\n\r\n constructor(\r\n private element: Element,\r\n private readonly validationController: ValidationController,\r\n ) {}\r\n\r\n removeSampleDescription(index: number) {\r\n const event = new CustomEvent('sample-description-removed', {\r\n bubbles: true,\r\n detail: index,\r\n });\r\n\r\n this.element.dispatchEvent(event);\r\n }\r\n\r\n bind() {\r\n ValidationRules.ensure((m: this) => m.description)\r\n .required()\r\n .on(this);\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationController } from 'aurelia-validation';\r\nimport ValidationErrorFormatter from 'infrastructure/validation/validation-error-formatter';\r\nimport Logger from '../../../infrastructure/logger';\r\nimport CapPlanService from '../cap-plan-service';\r\nimport FormSubmittedResult from '../contracts/form-submitted-result';\r\nimport { UiCapPlan } from '../ui-cap-plan';\r\n\r\n@autoinject\r\nexport class SubmitButtonsCustomElement {\r\n @bindable form: UiCapPlan;\r\n @bindable editable: boolean;\r\n\r\n constructor(\r\n private readonly capPlanService: CapPlanService,\r\n private element: Element,\r\n private readonly logger: Logger,\r\n private readonly router: Router,\r\n private readonly validationController: ValidationController,\r\n ) {}\r\n\r\n async save() {\r\n const { valid } = await this.validationController.validate();\r\n if (!valid) {\r\n return;\r\n }\r\n\r\n const submittingEvent = new CustomEvent('form-submitting', { bubbles: true });\r\n const formSubmittedResult: FormSubmittedResult = { succeeded: false };\r\n const submittedEvent = new CustomEvent('form-submitted', {\r\n bubbles: true,\r\n detail: formSubmittedResult,\r\n });\r\n this.element.dispatchEvent(submittingEvent);\r\n\r\n try {\r\n let capPlan = this.form.toEntity();\r\n if (capPlan.id === 0) {\r\n const { id } = await this.capPlanService.createCapPlan(\r\n capPlan.organizationId,\r\n capPlan,\r\n );\r\n capPlan.id = id;\r\n } else {\r\n capPlan = await this.capPlanService.updateCapPlan(capPlan.organizationId, capPlan);\r\n }\r\n\r\n formSubmittedResult.succeeded = true;\r\n formSubmittedResult.tenantId = capPlan.organizationId;\r\n formSubmittedResult.entityId = capPlan.id;\r\n } catch (error) {\r\n this.logger.error('Error saving CAP Plan.', error);\r\n formSubmittedResult.message = ValidationErrorFormatter.format(\r\n 'An error occured. Please try again later.',\r\n error,\r\n );\r\n }\r\n\r\n this.element.dispatchEvent(submittedEvent);\r\n }\r\n\r\n cancel() {\r\n this.router.navigateToRoute('cap-plan-list');\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, bindingMode } from 'aurelia-framework';\r\nimport { ValidationController, ValidationRules } from 'aurelia-validation';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport TestMethod from 'test-methods/test-method';\r\nimport TestMethodService from '../../../test-methods/test-method-service';\r\nimport SecurityService from 'security/security-service';\r\nimport { testMethodNameFormatting } from 'test-methods/test-method-helper';\r\n\r\n@autoinject\r\nexport class TestMethodsSelectorCustomElement {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) testMethods: TestMethod[];\r\n @bindable labId: number;\r\n @bindable organizationId: number;\r\n @bindable labExternalSource: string;\r\n @bindable editable: number;\r\n testMethodOptions: SelectorOption[];\r\n\r\n constructor(\r\n private readonly testMethodService: TestMethodService,\r\n private readonly securityService: SecurityService,\r\n private readonly validationController: ValidationController,\r\n ) {\r\n this.labId = 0;\r\n }\r\n\r\n private async getTestMethods() {\r\n if (this.labId === 0) {\r\n return;\r\n }\r\n\r\n const testMethods = await this.testMethodService.getTestMethods(this.organizationId, {\r\n externalSource: this.labExternalSource,\r\n });\r\n\r\n this.testMethodOptions = testMethods.map((tm) => {\r\n tm.title = testMethodNameFormatting(\r\n tm,\r\n this.securityService.isImpersonating(),\r\n this.securityService.isWorkingUnderOrganization(),\r\n );\r\n return tm;\r\n });\r\n }\r\n\r\n async labIdChanged() {\r\n await this.getTestMethods();\r\n }\r\n\r\n async bind() {\r\n await this.getTestMethods();\r\n ValidationRules.ensure((m: this) => m.testMethods)\r\n .minItems(1)\r\n .on(this);\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { ValidationControllerFactory, validateTrigger, ValidationRules } from 'aurelia-validation';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport UserService from '../../users/user-service';\r\nimport CustomerTestImportService from './customer-test-import-service';\r\n\r\n@inject(Router, ValidationControllerFactory, Logger, PageContext, DialogPresenter, UserService, CustomerTestImportService)\r\nexport class CustomerTestImportDetail {\r\n @observable testDataFile;\r\n organizationId = null;\r\n\r\n constructor(router, validationControllerFactory, logger, pageContext, dialogPresenter, userService, customerTestImportService) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'customer-test-import-detail';\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n this.userService = userService;\r\n this.customerTestImportService = customerTestImportService;\r\n this.acceptFormats = [\r\n '.csv',\r\n '.txt',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-excel',\r\n 'text/csv',\r\n 'text/plain'\r\n ];\r\n\r\n // User authorization is performed at the router since this page is used only for creating and not viewing imports.\r\n }\r\n\r\n activate() {\r\n ValidationRules\r\n .ensure('organizationId').displayName('Organization').required()\r\n .ensure('testDataFile').displayName('Test Data File').satisfies(testDataFile => !!testDataFile)\r\n .on(this);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.currentUserOrganizations = await this.userService.getCurrentUserOrganizations();\r\n } catch (error) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Organizations',\r\n 'There was an error loading the organization list. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n testDataFileChanged() {\r\n if (!this.testDataFileInput.files || !this.testDataFileInput.files.length)\r\n return;\r\n\r\n var file = this.testDataFileInput.files[0];\r\n if (!this.acceptFormats.some(format => file.type === format)) {\r\n this.dialogPresenter.showAlert(\r\n 'Unsupported File Format',\r\n `The following are supported file formats: .csv, .txt`);\r\n\r\n this.testDataFileInput.value = '';\r\n }\r\n } \r\n\r\n async saveCustomerTestImport() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n await this.customerTestImportService.saveCustomerTestImport({ organizationId: this.organizationId }, this.testDataFileInput.files[0]);\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Test data file uploaded successfully.');\r\n this.router.navigateToRoute('customer-test-import-list');\r\n } catch (error) {\r\n this.logger.error('Error uploading test data file.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Test Data File',\r\n 'There was an error uploading the test data file. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('customer-test-import-list');\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import moment from 'moment';\r\nimport { inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { createDateRangeFilterOptions } from '../../infrastructure/components/filters/date-range-filter';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport UserService from '../../users/user-service';\r\nimport CustomerTestImportService from './customer-test-import-service';\r\n\r\n@inject(Router, EventAggregator, Logger, PageContext, DialogPresenter, UserService, CustomerTestImportService)\r\nexport default class CustomerTestImportList {\r\n @observable filterText;\r\n\r\n constructor(router, eventAggregator, logger, pageContext, dialogPresenter, userService, customerTestImportService) {\r\n this.router = router;\r\n this.eventAggregator = eventAggregator;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'customer-test-import-list';\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n this.userService = userService;\r\n this.customerTestImportService = customerTestImportService;\r\n this.filterText = '';\r\n this.gridOptions = {\r\n columnDefs: [\r\n { suppressMenu: true, headerName: 'Uploaded', field: 'uploadDateTime', width: 150, sort: 'desc', template: '
${data.uploadDateTime | dateFormat}
' },\r\n { suppressMenu: true, headerName: 'Processed', field: 'processedDateTime', width: 150, template: '
${data.processedDateTime | dateFormat}
' },\r\n { suppressMenu: true, headerName: 'Organization', field: 'organizationName', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n { suppressMenu: true, headerName: 'File Name', field: 'originalFileName', comparator: CompareUtility.compareStringsInsensitive, width: 150 },\r\n { suppressMenu: true, headerName: 'Imported Records', field: 'successfulRecordCount' },\r\n { suppressMenu: true, headerName: 'Failed Records', field: 'failedRecordCount' },\r\n { suppressMenu: true, headerName: 'Total Records', field: 'totalRecordCount' },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Error Logs',\r\n cellClass: 'row-actions actions-persistent',\r\n field: 'logFileUrl',\r\n width: 150,\r\n template: 'Download',\r\n sortable: false,\r\n suppressSizeToFit: true\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n // Filters\r\n this.selectedOrganizations = [];\r\n this.uploadDateRangeOptions = createDateRangeFilterOptions();\r\n this.defaultUploadDateRangeOption = 'last30Days';\r\n this.selectedUploadDateRangeOption = this.uploadDateRangeOptions.find(o => o.value === this.defaultUploadDateRangeOption);\r\n\r\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\r\n }\r\n\r\n handleApplyFilters() {\r\n this.loadCustomerTestImports();\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateCustomerTestImportsView();\r\n }\r\n\r\n updateCustomerTestImportsView() {\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n\r\n if (this.customerTestImports) {\r\n this.customerTestImportsView = this.customerTestImports.filter(n =>\r\n (n.organizationName || '').toLowerCase().indexOf(lowerCasedFilterText) > -1\r\n );\r\n }\r\n }\r\n\r\n async loadCustomerTestImports() {\r\n this.customerTestImports = await this.customerTestImportService.getCustomerTestImports({\r\n organizationIds: this.selectedOrganizations.map(o => o.id),\r\n uploadStartDate: this.selectedUploadDateRangeOption.startDate ?\r\n moment(this.selectedUploadDateRangeOption.startDate).startOf('day').utc().format() :\r\n null,\r\n uploadEndDate: this.selectedUploadDateRangeOption.endDate ?\r\n moment(this.selectedUploadDateRangeOption.endDate).startOf('day').add(1, 'days').utc().format() :\r\n null\r\n });\r\n\r\n for (let customerTestImport of this.customerTestImports) {\r\n if (!customerTestImport.uploadDateTime.endsWith('Z') && !customerTestImport.uploadDateTime.endsWith('z'))\r\n customerTestImport.uploadDateTime += 'Z';\r\n\r\n if (customerTestImport.processedDateTime) {\r\n customerTestImport.totalRecordCount = customerTestImport.successfulRecordCount + customerTestImport.failedRecordCount;\r\n\r\n if (!customerTestImport.processedDateTime.endsWith('Z') && !customerTestImport.processedDateTime.endsWith('z'))\r\n customerTestImport.processedDateTime += 'Z';\r\n }\r\n }\r\n\r\n this.updateCustomerTestImportsView();\r\n }\r\n\r\n activate() {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe('filters.apply', this.handleApplyFilters);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var results = await Promise.all([\r\n this.userService.getCurrentUserOrganizations(),\r\n this.loadCustomerTestImports()\r\n ]);\r\n\r\n this.currentUserOrganizations = results[0];\r\n } catch (error) {\r\n this.logger.error('Error loading customer test imports.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Customer Test Imports',\r\n 'An error occurred while loading the customer test imports. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n deactivate() {\r\n this.applyFiltersSubscription && this.applyFiltersSubscription.dispose();\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { inject, bindable, computedFrom } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport NavigationAuthorizer from '../security/navigation/navigation-authorizer';\r\n\r\n@inject(Router, NavigationAuthorizer)\r\nexport class LocationTestingNavigationMenu {\r\n @bindable colSize;\r\n @bindable mapId;\r\n\r\n constructor(router, navigationAuthorizer) {\r\n this.router = router;\r\n this.navigationAuthorizer = navigationAuthorizer;\r\n }\r\n\r\n async mapIdChanged() {\r\n if (!this.mapId)\r\n return;\r\n\r\n let navItems = [];\r\n\r\n for (let route of this.router.routes)\r\n if (route.navModel.config.group === 'location-testing' && await this.navigationAuthorizer.hasAccess(route.navModel.config))\r\n navItems.push({\r\n href: route.name === 'map-dashboard' ?\r\n this.router.generate(route.name, { id: this.mapId }) :\r\n this.router.generate(route.name, { mapId: this.mapId }),\r\n title: route.title,\r\n icon: route.icon,\r\n get isActive() {\r\n return this.href === window.location.hash.substring(1);\r\n }\r\n });\r\n\r\n this.navItems = navItems;\r\n }\r\n};\r\n","module.exports = \"\\r\\n\";","import { GridOptions, SelectionChangedEvent } from 'ag-grid-community';\r\nimport { Grid } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { BindingEngine, inject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport CollectionType from 'location-testing/collection-type';\r\nimport { getTestMethodGroups } from 'location-testing/test-method-group';\r\nimport RecordStatus, { getRecordStatusOptions } from 'record-status';\r\nimport RemediationRootCause from 'remediation-root-causes/remediation-root-cause';\r\nimport RemediationRootCauseService from 'remediation-root-causes/remediation-root-cause-service';\r\nimport svgPanZoom from 'svg-pan-zoom';\r\nimport RequestService from 'tests/test-service';\r\nimport debounce from '../../infrastructure/debounce';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport CapPlanService from '../cap-plans/cap-plan-service';\r\nimport { describeCapPlanTriggerResult } from '../cap-plans/cap-plan-trigger-result-message';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport PlanService from '../plans/plan-service';\r\nimport PointTypeService from '../point-types/point-type-service';\r\nimport Point from '../points/point';\r\nimport PointService from '../points/point-service';\r\nimport RemediationService from '../remediations/remediation-service';\r\nimport { pointPlanGrid } from './grids/point-plan-grid';\r\nimport { pointRemediationGrid } from './grids/point-remediation-grid';\r\nimport { PointTestResult } from './grids/point-test-result';\r\nimport { pointTestResultGrid } from './grids/point-test-result-grid';\r\nimport { MapDashboardQuery, MapDashboardQueryFilters } from './map-dashboard-query-filters';\r\nimport MapDashboardSelectionMode from './map-dashboard-selection-mode';\r\nimport MapDashboardViewOption from './map-dashboard-view-option';\r\nimport MapService from './map-service';\r\nimport { createPlaybackFrames } from './playback/playback-utility';\r\n\r\n@inject(\r\n Router,\r\n EventAggregator,\r\n Logger,\r\n PageContext,\r\n DialogPresenter,\r\n SecurityService,\r\n MapService,\r\n PointService,\r\n PointTypeService,\r\n PlanService,\r\n RemediationService,\r\n BindingEngine,\r\n RequestService,\r\n RemediationRootCauseService,\r\n CapPlanService,\r\n)\r\nexport class MapDashboard {\r\n @observable pointFilterText;\r\n @observable view;\r\n @observable selectedViewOption: MapDashboardViewOption;\r\n @observable showLatestView: boolean;\r\n @observable viewPointSize;\r\n\r\n applyFiltersSubscription: any;\r\n clearFiltersSubscription: any;\r\n loadPromise: any;\r\n\r\n // elements\r\n panZoom: any;\r\n mapContainer: any;\r\n pan: any;\r\n pointDataDropdownViewModel: any;\r\n mapSvgElement: SVGSVGElement;\r\n\r\n draggingKeyPoint: Point;\r\n draggingKeyStartingPoint: any;\r\n draggingPointsMoved: boolean;\r\n selectionRubberband: any;\r\n pointMouseDownStartingPoint: any;\r\n innerPointViewSize: number;\r\n\r\n // configuration\r\n scale: number;\r\n\r\n sidebarView: string;\r\n currentSidebarDetailView: string;\r\n pointsView: any;\r\n panZoomSettings: any;\r\n\r\n // grids\r\n pointTestResultGrid: any;\r\n pointTestResultGridOptions: GridOptions;\r\n pointTestResultSelectedCount: number;\r\n selectedPointTestResultCapPlanTriggered: boolean;\r\n pointPlanGrid: any;\r\n pointPlanGridOptions: GridOptions;\r\n pointRemediationGrid: any;\r\n pointRemediationGridOptions: GridOptions;\r\n pointSelectionMode: MapDashboardSelectionMode;\r\n\r\n // permissions\r\n canViewResults: boolean;\r\n canViewPlans: boolean;\r\n canViewAllRedmediations: boolean;\r\n canEditRemediations: boolean;\r\n canViewAllTasks: boolean;\r\n canEditTasks: boolean;\r\n\r\n // state\r\n mapId: number;\r\n allFailedPointTestsSelected: boolean;\r\n @observable showFailedOnly: boolean;\r\n\r\n sidebarDetailViews: any[];\r\n\r\n selectedFailedPointTests: any[];\r\n selectedPoint: any;\r\n recordStatusOptions: SelectorOption[];\r\n confirmationTestValueOptions: SelectorOption[];\r\n confirmationTestValueOptionsSubscription: Subscription;\r\n\r\n // state - playback\r\n playbackFrames: any[];\r\n currentPlaybackFrame: number;\r\n isPlaying: boolean;\r\n playInterval: any;\r\n\r\n // state - point data\r\n pointTestResults: PointTestResult[];\r\n pointPlans: any[];\r\n pointRemediations: any[];\r\n failedPointTests: any[];\r\n pointHasOverdueTasks: boolean;\r\n pointTestMetrics: any;\r\n\r\n //Filters\r\n mapDashboardQueryFilters: MapDashboardQueryFilters;\r\n pointRoomOptions: SelectorOption[];\r\n pointZoneOptions: SelectorOption[];\r\n pointTypeOptions: SelectorOption[];\r\n testMethodOptions: SelectorOption[];\r\n taskAssigneeOptions: SelectorOption[];\r\n planOptions: SelectorOption[];\r\n remediationRootCauseOptions: SelectorOption[];\r\n testMethodGroupOptions: SelectorOption[];\r\n\r\n results: any;\r\n map: any;\r\n points: Point[];\r\n roomName: any;\r\n\r\n constructor(\r\n private router: Router,\r\n private eventAggregator: EventAggregator,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private mapService: MapService,\r\n private pointService: PointService,\r\n private pointTypeService: PointTypeService,\r\n private planService: PlanService,\r\n private remediationService: RemediationService,\r\n private readonly bindingEngine: BindingEngine,\r\n private readonly testService: RequestService,\r\n private readonly remediationRootCauseService: RemediationRootCauseService,\r\n private readonly capPlanService: CapPlanService,\r\n ) {\r\n this.router = router;\r\n this.eventAggregator = eventAggregator;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'map-dashboard';\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.mapService = mapService;\r\n this.pointService = pointService;\r\n this.pointTypeService = pointTypeService;\r\n this.planService = planService;\r\n this.remediationService = remediationService;\r\n this.remediationRootCauseService = remediationRootCauseService;\r\n this.testMethodGroupOptions = getTestMethodGroups();\r\n\r\n this.scale = 1;\r\n this.pointZoneOptions = [\r\n { value: 1, title: 'Zone 1' },\r\n { value: 2, title: 'Zone 2' },\r\n { value: 3, title: 'Zone 3' },\r\n { value: 4, title: 'Zone 4' },\r\n ];\r\n\r\n // Initialize dashboard settings.\r\n var defaultSettings = {\r\n showLatestView: true,\r\n viewPointSize: 5,\r\n };\r\n var settings = Object.assign(defaultSettings, this.mapService.getDashboardSettings());\r\n this.panZoomSettings = settings.panZoom || {};\r\n this.showLatestView = settings.showLatestView;\r\n this.viewPointSize = settings.viewPointSize;\r\n this.innerPointViewSize = this.viewPointSize - 1;\r\n\r\n this.pointFilterText = '';\r\n this.showFailedOnly = false;\r\n\r\n // Debounce the saving of pan zoom settings.\r\n this.savePanZoomSettings = debounce(this.savePanZoomSettings.bind(this), 500);\r\n\r\n this.canViewResults = this.securityService.hasPermission('ViewResults');\r\n this.canViewPlans = this.securityService.hasPermission('ViewPlans');\r\n this.canViewAllRedmediations = this.securityService.hasPermission('ViewAllRemediations');\r\n this.canEditRemediations =\r\n this.securityService.hasPermission('EditRemediations') &&\r\n !this.securityService.isImpersonating();\r\n this.canViewAllTasks = this.securityService.hasPermission('ViewAllTasks');\r\n this.canEditTasks =\r\n this.securityService.hasPermission('EditTasks') &&\r\n !this.securityService.isImpersonating();\r\n\r\n this.view = null;\r\n this.pointSelectionMode = MapDashboardSelectionMode.SINGLE;\r\n this.selectedViewOption = MapDashboardViewOption.ALL;\r\n\r\n this.sidebarView = 'list';\r\n this.sidebarDetailViews = [];\r\n\r\n if (this.canViewResults) this.sidebarDetailViews.push({ name: 'tests', title: 'Tests' });\r\n\r\n if (this.canViewPlans) this.sidebarDetailViews.push({ name: 'plans', title: 'Plans' });\r\n\r\n if (this.canViewAllRedmediations)\r\n this.sidebarDetailViews.push({\r\n name: 'remediations',\r\n title: 'Remediations',\r\n });\r\n\r\n if (this.sidebarDetailViews.length)\r\n this.currentSidebarDetailView = this.sidebarDetailViews[0].name;\r\n\r\n this.playbackFrames = [];\r\n this.currentPlaybackFrame = 0;\r\n this.isPlaying = false;\r\n\r\n this.mapDashboardQueryFilters = new MapDashboardQueryFilters();\r\n\r\n this.pointMouseDown = this.pointMouseDown.bind(this);\r\n this.pointMouseMove = this.pointMouseMove.bind(this);\r\n this.pointMouseUp = this.pointMouseUp.bind(this);\r\n this.pointHover = this.pointHover.bind(this);\r\n this.pointHoverEnd = this.pointHoverEnd.bind(this);\r\n }\r\n\r\n setView(view) {\r\n // If switching out of playback mode, ensure playback is stopped.\r\n if (this.view === 'playback') this.stopPlayback();\r\n\r\n if (\r\n view === 'playback' &&\r\n (!this.mapDashboardQueryFilters.dateRangeQueryFilters.dateRangeFilterOption.startDate ||\r\n !this.mapDashboardQueryFilters.dateRangeQueryFilters.dateRangeFilterOption.endDate)\r\n ) {\r\n this.dialogPresenter.showAlert(\r\n 'Bounded Date Range Required',\r\n 'A start and end date must be specified for the collection date before switching to playback mode. Please open the filters pane and ensure both start and end dates are specified.',\r\n );\r\n return;\r\n }\r\n\r\n if (this.view === 'points') {\r\n this.points.forEach((p) => {\r\n p.isSelected = false;\r\n p.isHovered = false;\r\n });\r\n\r\n this.mapSvgElement.removeEventListener('mousedown', this.pointMouseDown);\r\n this.mapSvgElement.removeEventListener('mousemove', this.pointMouseMove);\r\n this.mapSvgElement.removeEventListener('mouseup', this.pointMouseUp);\r\n\r\n this.reloadData();\r\n this.panZoom.enableDblClickZoom();\r\n }\r\n\r\n if (view === 'points') {\r\n this.mapSvgElement.addEventListener('mousedown', this.pointMouseDown);\r\n this.mapSvgElement.addEventListener('mousemove', this.pointMouseMove);\r\n this.mapSvgElement.addEventListener('mouseup', this.pointMouseUp);\r\n\r\n this.panZoom.disableDblClickZoom();\r\n }\r\n\r\n this.view = view;\r\n }\r\n\r\n viewChanged() {\r\n if (this.view === 'playback') this.loadPlaybackData();\r\n\r\n this.pointSelectionMode =\r\n this.view === 'points'\r\n ? MapDashboardSelectionMode.MULTI\r\n : MapDashboardSelectionMode.SINGLE;\r\n }\r\n\r\n async handleManipulatePointsCancel() {\r\n this.setView(null);\r\n\r\n // force a reload of the points\r\n await this.loadPointData();\r\n }\r\n\r\n async handleManipulatePointsSave() {\r\n let originalPoints = await this.pointService.getPoints({\r\n mapIds: [this.map.id],\r\n });\r\n\r\n let dirtyPoints = [] as Point[];\r\n this.points.forEach((p) => {\r\n let originalPoint = originalPoints.find((op) => op.id === p.id) as Point;\r\n if (originalPoint.x !== p.x || originalPoint.y !== p.y) dirtyPoints.push(p);\r\n });\r\n\r\n try {\r\n await this.mapService.updateMapPoints(this.map.id, dirtyPoints);\r\n\r\n this.pageContext.showSuccessOverlay('Points updated successfully.');\r\n } catch (error) {\r\n this.logger.error('Error updating map point locations', error, {\r\n mapId: this.mapId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Updating Point Locations',\r\n \"An error occurred while updating the current map's point locations. Please try again later.\", // eslint-disable-line\r\n );\r\n }\r\n\r\n this.setView(null);\r\n }\r\n\r\n async testMethodGroupChanged(newValue: string, oldValue: string) {\r\n if (!newValue || newValue === oldValue) {\r\n return;\r\n }\r\n\r\n const confirmationTestValues = await this.testService.fetchConfirmationTestResultValues(\r\n this.mapId,\r\n this.mapDashboardQueryFilters.confirmationTestingQueryFilters.testMethodGroup,\r\n );\r\n this.confirmationTestValueOptions = confirmationTestValues.map((v: string) => {\r\n return {\r\n value: v,\r\n title: v,\r\n } as SelectorOption;\r\n });\r\n }\r\n\r\n async loadPlaybackData() {\r\n this.currentPlaybackFrame = 0;\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var dailyResults = await this.mapService.getDailyResults(\r\n this.mapId,\r\n this.mapDashboardQueryFilters.getQueryParams(),\r\n );\r\n\r\n this.playbackFrames = createPlaybackFrames(\r\n this.mapDashboardQueryFilters.dateRangeQueryFilters.dateRangeFilterOption.startDate,\r\n this.mapDashboardQueryFilters.dateRangeQueryFilters.dateRangeFilterOption.endDate,\r\n dailyResults,\r\n );\r\n } catch (error) {\r\n this.logger.error('Error loading map dashboard daily results', error, {\r\n mapId: this.mapId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Map Daily Results',\r\n \"An error occurred while loading the current map's daily results. Please try again later.\", // eslint-disable-line\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n stopPlayback() {\r\n if (!this.isPlaying) return;\r\n\r\n this.togglePlayback();\r\n }\r\n\r\n togglePlayback() {\r\n if (this.isPlaying) {\r\n clearInterval(this.playInterval);\r\n } else {\r\n this.playInterval = setInterval(() => {\r\n this.currentPlaybackFrame =\r\n this.currentPlaybackFrame === this.playbackFrames.length - 1\r\n ? 0\r\n : this.currentPlaybackFrame + 1;\r\n }, 1000);\r\n }\r\n\r\n this.isPlaying = !this.isPlaying;\r\n }\r\n\r\n getRemediationInProgressCount(pointRemediations) {\r\n if (!pointRemediations) return 0;\r\n\r\n return pointRemediations.reduce((count, r) => count + (r.status === 2 ? 1 : 0), 0);\r\n }\r\n\r\n getRemediationCompletedCount(pointRemediations) {\r\n if (!pointRemediations) return 0;\r\n\r\n return pointRemediations.reduce((count, r) => count + (r.status > 2 ? 1 : 0), 0);\r\n }\r\n\r\n setSelectedPoint(point) {\r\n this.selectedPoint = point;\r\n this.sidebarView = 'list';\r\n\r\n if (point) {\r\n point.xOriginal = point.x;\r\n point.yOriginal = point.y;\r\n\r\n if (this.pointSelectionMode === MapDashboardSelectionMode.SINGLE) {\r\n this.points.forEach((p) => (p.isSelected = false));\r\n point.isSelected = true;\r\n\r\n if (point.isSelected) this.ensurePointInView(point);\r\n }\r\n }\r\n }\r\n\r\n ensurePointInView(point) {\r\n if (!point) return;\r\n\r\n var mapContainerBounds = this.mapContainer.getBoundingClientRect();\r\n\r\n var absolutePointX = point.x * this.scale;\r\n var absolutePointY = point.y * this.scale;\r\n if (this.pan !== undefined) {\r\n absolutePointX += this.pan.x;\r\n absolutePointY += this.pan.y;\r\n }\r\n\r\n // Settings\r\n var maxPointRadius = 24;\r\n var mainNavWidth = 50;\r\n var pointBoundary = {\r\n leftX: maxPointRadius + mainNavWidth,\r\n topY: maxPointRadius,\r\n rightX: mapContainerBounds.width - maxPointRadius,\r\n bottomY: mapContainerBounds.height - maxPointRadius,\r\n };\r\n\r\n // If the point's absolute position is within the boundary, return.\r\n if (\r\n absolutePointX > pointBoundary.leftX &&\r\n absolutePointY > pointBoundary.topY &&\r\n absolutePointX < pointBoundary.rightX &&\r\n absolutePointY < pointBoundary.bottomY\r\n )\r\n return;\r\n\r\n // Move point to the center of the map container.\r\n this.panZoom.pan({\r\n x: mapContainerBounds.width / 2 - point.x * this.scale,\r\n y: mapContainerBounds.height / 2 - point.y * this.scale,\r\n });\r\n }\r\n\r\n showPointPopup($event, point) {\r\n if (this.view === 'points') return;\r\n\r\n $event.stopPropagation();\r\n this.setSelectedPoint(point);\r\n\r\n this.showPointDetail(point);\r\n }\r\n\r\n showPointList() {\r\n this.setSelectedPoint(null);\r\n }\r\n\r\n showPointDetail(point) {\r\n if (this.view === 'points') return;\r\n\r\n // Make sure to bring the point into view BEFORE calling setSelectedPoint.\r\n this.ensurePointInView(point);\r\n this.setSelectedPoint(point);\r\n\r\n this.sidebarView = 'detail';\r\n this.loadPointDetailData(point.id);\r\n }\r\n\r\n async loadPointDetailData(pointId) {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.pointTestResults = [];\r\n this.pointPlans = [];\r\n this.pointRemediations = [];\r\n this.failedPointTests = [];\r\n this.pointHasOverdueTasks = false;\r\n\r\n var results = await Promise.all([\r\n !this.canViewResults\r\n ? Promise.resolve([])\r\n : this.pointService.getPointTests(\r\n pointId,\r\n this.mapDashboardQueryFilters.getQueryParams(),\r\n ),\r\n !this.canViewPlans\r\n ? Promise.resolve([])\r\n : (this.planService.getPlansByPoint(pointId, 'fragment') as unknown as any[]),\r\n !this.canViewAllRedmediations\r\n ? Promise.resolve([])\r\n : (this.remediationService.getRemediations({\r\n pointId,\r\n }) as unknown as any[]),\r\n !this.canViewAllTasks\r\n ? Promise.resolve([])\r\n : (this.pointService.getHasOverdueTasks(pointId) as unknown as boolean),\r\n ]);\r\n\r\n this.pointTestResults = results[0] as PointTestResult[];\r\n this.pointTestResultGridOptions.api?.setRowData(this.pointTestResults);\r\n\r\n this.pointPlans = ((results[1] as any[]) || []).filter((p) => p.isActive);\r\n this.pointPlanGridOptions.api?.setRowData(this.pointPlans);\r\n\r\n this.pointRemediations = ((results[2] as any[]) || []).filter((r) => r.isActive);\r\n this.pointRemediationGridOptions.api?.setRowData(this.pointRemediations);\r\n\r\n this.pointHasOverdueTasks = results[3] as boolean;\r\n\r\n this.failedPointTests = this.pointTestResults.filter((t) => t.passed === false); // Must check for 'false' since value can be null.this.\r\n this.generatePointTestMetrics();\r\n } catch (error) {\r\n this.logger.error('Error loading map dashboard point details', error, {\r\n mapId: this.mapId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Map',\r\n 'An error occurred while loading the current map. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n generatePointTestMetrics() {\r\n this.pointTestMetrics = {\r\n totalCount: this.pointTestResults.length,\r\n failedCount: this.pointTestResults.reduce(\r\n (count, t) => count + (t.passed === false ? 1 : 0),\r\n 0,\r\n ),\r\n passedCount: this.pointTestResults.reduce(\r\n (count, t) => count + (t.passed === true ? 1 : 0),\r\n 0,\r\n ),\r\n get failedPercent() {\r\n return this.totalCount === 0\r\n ? 0\r\n : Math.round((100 * this.failedCount) / this.totalCount);\r\n },\r\n get passedPercent() {\r\n return this.totalCount === 0\r\n ? 0\r\n : Math.round((100 * this.passedCount) / this.totalCount);\r\n },\r\n };\r\n }\r\n\r\n showFailedOnlyChanged() {\r\n this.updatePointsView();\r\n }\r\n\r\n pointFilterTextChanged() {\r\n this.updatePointsView();\r\n }\r\n\r\n filterOnRecordStatus(point: Point) {\r\n switch (this.mapDashboardQueryFilters.recordStatusQueryFilters.recordStatus) {\r\n case RecordStatus.ACTIVE:\r\n return point.isActive;\r\n case RecordStatus.DELETED:\r\n return !point.isActive;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n updatePointsView() {\r\n if (!this.points) return;\r\n\r\n var lowerCasedFilterText = this.pointFilterText.toLowerCase();\r\n this.pointsView = this.points.filter(\r\n (p) =>\r\n (!this.showFailedOnly || this.checkFailedTest(p.id)) &&\r\n ((p.name || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (p.description || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (p.room || '').toLowerCase().indexOf(lowerCasedFilterText) > -1) &&\r\n this.filterOnRecordStatus(p),\r\n );\r\n }\r\n\r\n checkFailedTest(pointId) {\r\n var result = this.results[pointId];\r\n if (!result) return false;\r\n\r\n return (\r\n result.latestSample?.tests?.some((t) => t.passed === false) ||\r\n result.historical?.tests?.some((t) => !!t.failedCount)\r\n );\r\n }\r\n\r\n private acceptAndSetSingleView(collectionTypes: CollectionType[]) {\r\n if (!collectionTypes || collectionTypes.length === 0) {\r\n this.selectedViewOption = MapDashboardViewOption.ALL;\r\n return;\r\n }\r\n\r\n const collectionType = collectionTypes[0];\r\n switch (collectionType) {\r\n case CollectionType.Routine:\r\n this.selectedViewOption = MapDashboardViewOption.ROUTINE;\r\n break;\r\n case CollectionType.Vector:\r\n this.selectedViewOption = MapDashboardViewOption.VECTOR_SWAB;\r\n break;\r\n case CollectionType.CorrectiveAction:\r\n this.selectedViewOption = MapDashboardViewOption.CORRECTIVE_ACTION;\r\n break;\r\n default:\r\n this.selectedViewOption = MapDashboardViewOption.ALL;\r\n }\r\n }\r\n\r\n canActivate(_params: MapDashboardQuery, routeConfig) {\r\n return this.mapDashboardQueryFilters.ensureSingleApplyFilterHandler(routeConfig);\r\n }\r\n\r\n activate(params: MapDashboardQuery) {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe('filters.apply', () =>\r\n this.handleApplyFilters(),\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe('filters.clear', () =>\r\n this.handleClearFilters(),\r\n );\r\n this.mapDashboardQueryFilters.setFilterValues(params);\r\n\r\n this.acceptAndSetSingleView(\r\n this.mapDashboardQueryFilters.collectionTypesQueryFilters.collectionTypes,\r\n );\r\n\r\n this.loadPromise = (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.mapId = this.mapDashboardQueryFilters.id;\r\n\r\n this.recordStatusOptions = getRecordStatusOptions();\r\n var results = (await Promise.all([\r\n this.mapService.getMap(this.mapId),\r\n this.pointService.getPoints({\r\n mapIds: [this.mapId],\r\n pointId: params.pointId,\r\n }),\r\n this.mapService.getPlanFilterOptions(this.mapId),\r\n this.mapService.getTestMethodFilterOptions(this.mapId),\r\n this.mapService.getTaskAssigneeFilterOptions(this.mapId),\r\n this.pointTypeService.getPointTypes({\r\n ignoreSpecificationPointTypes: true,\r\n mapId: this.mapId,\r\n }),\r\n this.canViewAllRedmediations\r\n ? this.remediationRootCauseService.getRemediationRootCauseList()\r\n : [],\r\n ])) as any;\r\n\r\n this.map = results[0];\r\n\r\n await this.loadPointData(results[1] as any[] as Point[]);\r\n\r\n // we only want active point rooms.\r\n this.pointRoomOptions = [\r\n ...new Set(this.points.filter((p) => p.room).filter((p) => p.isActive).map((p) => p.room)),\r\n ].map((r) => ({ value: r, title: r }));\r\n this.planOptions = results[2];\r\n this.testMethodOptions = results[3];\r\n this.taskAssigneeOptions = results[4];\r\n this.pointTypeOptions = results[5].map((pt) => ({\r\n title: pt,\r\n value: pt,\r\n }));\r\n this.remediationRootCauseOptions = results[6].map((rrc: RemediationRootCause) => ({\r\n title: rrc.name,\r\n value: rrc.id,\r\n }));\r\n\r\n this.loadResults();\r\n } catch (error) {\r\n this.logger.error('Error loading map dashboard', error, {\r\n mapId: params.id,\r\n });\r\n\r\n await (error.apiErrorCode === 1\r\n ? this.dialogPresenter.showAlert(\r\n 'Error Loading Map',\r\n 'The current map doesnt exist.',\r\n )\r\n : this.dialogPresenter.showAlert(\r\n 'Error Loading Map',\r\n 'An error occurred while loading the current map. Please try again later.',\r\n ));\r\n\r\n this.router.navigateToRoute('map-list');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n async attached() {\r\n this.pointTestResultGridOptions = pointTestResultGrid;\r\n this.pointTestResultGridOptions.onSelectionChanged = (e: SelectionChangedEvent) => {\r\n const selectedNodes = e.api?.getSelectedNodes();\r\n this.pointTestResultSelectedCount = selectedNodes.length;\r\n this.selectedPointTestResultCapPlanTriggered =\r\n selectedNodes.length === 1 &&\r\n (selectedNodes[0].data as PointTestResult).capPlanStatus === 'Triggered';\r\n };\r\n this.pointTestResultGridOptions.rowData = this.pointTestResults || [];\r\n new Grid(this.pointTestResultGrid, this.pointTestResultGridOptions);\r\n\r\n this.pointPlanGridOptions = pointPlanGrid;\r\n this.pointPlanGridOptions.rowData = this.pointPlans || [];\r\n new Grid(this.pointPlanGrid, this.pointPlanGridOptions);\r\n\r\n this.pointRemediationGridOptions = pointRemediationGrid;\r\n this.pointRemediationGridOptions.rowData = this.pointRemediations || [];\r\n new Grid(this.pointRemediationGrid, this.pointRemediationGridOptions);\r\n\r\n await this.loadPromise;\r\n\r\n setTimeout(() => {\r\n if (!this.mapSvgElement) return;\r\n\r\n this.panZoom = svgPanZoom(this.mapSvgElement, {\r\n fit: false,\r\n center: false,\r\n zoomEnabled: true,\r\n minZoom: 0.001,\r\n onZoom: (scale) => {\r\n this.scale = scale;\r\n this.savePanZoomSettings();\r\n },\r\n onPan: (pan) => {\r\n this.pan = pan;\r\n this.savePanZoomSettings();\r\n },\r\n });\r\n\r\n var panZoomSettings = this.panZoomSettings && this.panZoomSettings[this.mapId];\r\n if (!panZoomSettings) return;\r\n\r\n this.panZoom.zoom(panZoomSettings.zoom);\r\n this.panZoom.pan(panZoomSettings.pan);\r\n });\r\n }\r\n\r\n async loadPointData(points: Point[] = null) {\r\n if (points === null)\r\n points = (await this.pointService.getPoints({\r\n mapIds: [this.mapId],\r\n })) as unknown as Point[];\r\n\r\n this.points = points;\r\n this.initializePoints();\r\n\r\n this.updatePointsView();\r\n }\r\n\r\n initializePoints() {\r\n this.points.forEach((p) => {\r\n p.isSelected = false;\r\n });\r\n }\r\n\r\n savePanZoomSettings() {\r\n this.mapService.saveDashboardSettings({\r\n panZoom: {\r\n [this.mapId]: {\r\n zoom: this.panZoom.getZoom(),\r\n pan: this.panZoom.getPan(),\r\n },\r\n },\r\n });\r\n }\r\n\r\n pointMouseDown(evt) {\r\n if (this.view !== 'points') return true;\r\n\r\n this.pointMouseDownStartingPoint = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n // point selection ?\r\n if (evt.target.classList.contains('draggable')) {\r\n // find the point that is the \"key\" being dragged (multiple can be selected, but only one is technically being dragged)\r\n let pointId = Number(evt.srcElement.pointId);\r\n this.draggingKeyPoint = this.points.find((p) => p.id === pointId);\r\n\r\n // retain the original coords where this point started\r\n this.draggingKeyStartingPoint = {\r\n x: this.draggingKeyPoint.x,\r\n y: this.draggingKeyPoint.y,\r\n };\r\n\r\n this.panZoom.disablePan();\r\n }\r\n\r\n if (!evt.ctrlKey) {\r\n // must be holding ctrl key to start rubberband selection\r\n return true;\r\n }\r\n\r\n // retain the original coords where this point started\r\n this.draggingKeyStartingPoint = this.getTranslatedPointCoordinates(evt);\r\n this.selectionRubberband = {\r\n x: this.draggingKeyStartingPoint.x,\r\n y: this.draggingKeyStartingPoint.y,\r\n width: 0,\r\n height: 0,\r\n };\r\n\r\n this.panZoom.disablePan();\r\n\r\n return false;\r\n }\r\n\r\n pointMouseMove(evt) {\r\n if (!this.draggingKeyStartingPoint) return;\r\n\r\n // get the new (x,y) for the \"key\" plan point being dragged\r\n let draggingPointCoords = this.getTranslatedPointCoordinates(evt);\r\n\r\n // calculate how far the point has travelled from its original location\r\n let draggingOffset = {\r\n x: draggingPointCoords.x - this.draggingKeyStartingPoint.x,\r\n y: draggingPointCoords.y - this.draggingKeyStartingPoint.y,\r\n };\r\n\r\n if (!this.draggingKeyPoint) {\r\n this.selectionRubberband.x =\r\n draggingOffset.x < 0 ? draggingPointCoords.x : this.draggingKeyStartingPoint.x;\r\n this.selectionRubberband.y =\r\n draggingOffset.y < 0 ? draggingPointCoords.y : this.draggingKeyStartingPoint.y;\r\n this.selectionRubberband.width = Math.abs(draggingOffset.x);\r\n this.selectionRubberband.height = Math.abs(draggingOffset.y);\r\n } else this.planPointMouseMouse(evt, draggingPointCoords, draggingOffset);\r\n\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n planPointMouseMouse(evt, draggingPointCoords, draggingOffset) {\r\n if (!this.draggingKeyStartingPoint) return;\r\n\r\n if (evt.movementX !== 0 || evt.movementY !== 0) {\r\n // just started dragging and unselected point w/o ctrl key ??\r\n let deselectOtherPoints =\r\n !this.draggingPointsMoved && !evt.ctrlKey && !this.draggingKeyPoint.isSelected\r\n ? true\r\n : false;\r\n\r\n // iterate selected points and adjust x,y based on how much the original \"key\" point moved\r\n this.points.forEach((p) => {\r\n if (p.id === this.draggingKeyPoint.id) {\r\n p.x = draggingPointCoords.x;\r\n p.y = draggingPointCoords.y;\r\n\r\n // ensure the point is selected if movement starts to occur\r\n if (evt.movementX !== 0 || evt.movementY !== 0) p.isSelected = true;\r\n } else {\r\n if (deselectOtherPoints) p.isSelected = false;\r\n\r\n if (p.isSelected) {\r\n p.x = p.xOriginal + draggingOffset.x;\r\n p.y = p.yOriginal + draggingOffset.y;\r\n }\r\n }\r\n });\r\n\r\n this.draggingPointsMoved = true;\r\n }\r\n }\r\n\r\n pointMouseUp(evt) {\r\n if (this.view !== 'points') return;\r\n\r\n // handle the case where the user doesn't click a plan point and isn't in rubberband selecting\r\n if (\r\n !this.draggingPointsMoved &&\r\n !this.selectionRubberband &&\r\n !evt.ctrlKey &&\r\n this.pointMouseDownStartingPoint\r\n ) {\r\n let clientOffset = {\r\n x: evt.clientX - this.pointMouseDownStartingPoint.x,\r\n y: evt.clientY - this.pointMouseDownStartingPoint.y,\r\n };\r\n\r\n // if the user did a simple click (no pan)\r\n if (!clientOffset.x && !clientOffset.y)\r\n this.points.forEach((p) => (p.isSelected = false));\r\n }\r\n\r\n if (!this.draggingKeyPoint) this.selectionMouseUp(evt);\r\n else this.planPointMouseUp(evt);\r\n\r\n this.draggingKeyPoint = null;\r\n this.draggingKeyStartingPoint = null;\r\n this.draggingPointsMoved = false;\r\n this.selectionRubberband = null;\r\n this.pointMouseDownStartingPoint = null;\r\n\r\n this.panZoom.enablePan();\r\n\r\n return false;\r\n }\r\n\r\n selectionMouseUp(evt) {\r\n if (!this.selectionRubberband) return;\r\n\r\n this.points.forEach((p) => {\r\n let selected = p.x >= this.selectionRubberband.x && p.y >= this.selectionRubberband.y;\r\n selected =\r\n selected && p.x <= this.selectionRubberband.x + this.selectionRubberband.width;\r\n selected =\r\n selected && p.y <= this.selectionRubberband.y + this.selectionRubberband.height;\r\n\r\n if (selected) {\r\n p.isSelected = true;\r\n p.xOriginal = p.x;\r\n p.yOriginal = p.y;\r\n }\r\n });\r\n }\r\n\r\n planPointMouseUp(evt) {\r\n if (!evt.ctrlKey) {\r\n if (evt.movementX === 0 && evt.movementY === 0 && !this.draggingPointsMoved) {\r\n this.draggingKeyPoint.isSelected = true;\r\n this.setSelectedPoint(this.draggingKeyPoint);\r\n this.points.forEach((p) => {\r\n if (p.id !== this.draggingKeyPoint.id) p.isSelected = false;\r\n });\r\n }\r\n } else {\r\n if (!this.draggingPointsMoved)\r\n this.draggingKeyPoint.isSelected = !this.draggingKeyPoint.isSelected;\r\n }\r\n\r\n // retain where the points ended up in-case we de-select & select again\r\n let pointsSelected = this.points.filter((p) => p.isSelected === true);\r\n pointsSelected.forEach((p) => {\r\n p.xOriginal = p.x;\r\n p.yOriginal = p.y;\r\n });\r\n }\r\n\r\n pointHover(point) {\r\n if (!point) return;\r\n\r\n point.isHovered = true;\r\n }\r\n\r\n pointHoverEnd(point) {\r\n if (!point) return;\r\n\r\n point.isHovered = false;\r\n }\r\n\r\n showLatestViewChanged() {\r\n this.mapService.saveDashboardSettings({\r\n showLatestView: this.showLatestView,\r\n });\r\n }\r\n\r\n viewPointSizeChanged() {\r\n this.mapService.saveDashboardSettings({\r\n viewPointSize: parseInt(this.viewPointSize),\r\n });\r\n this.innerPointViewSize = this.viewPointSize - 1;\r\n }\r\n\r\n //TODO: Bind the view options to the filters\r\n private mapSelectedViewToCollectionTypeFilter() {\r\n switch (this.selectedViewOption) {\r\n case MapDashboardViewOption.ROUTINE:\r\n this.mapDashboardQueryFilters.collectionTypesQueryFilters.collectionTypes = [\r\n CollectionType.Routine,\r\n ];\r\n break;\r\n case MapDashboardViewOption.VECTOR_SWAB:\r\n this.mapDashboardQueryFilters.collectionTypesQueryFilters.collectionTypes = [\r\n CollectionType.Vector,\r\n ];\r\n break;\r\n case MapDashboardViewOption.CORRECTIVE_ACTION:\r\n this.mapDashboardQueryFilters.collectionTypesQueryFilters.collectionTypes = [\r\n CollectionType.CorrectiveAction,\r\n ];\r\n break;\r\n default:\r\n this.mapDashboardQueryFilters.collectionTypesQueryFilters.collectionTypes = [];\r\n }\r\n }\r\n\r\n async loadResults() {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.mapSelectedViewToCollectionTypeFilter();\r\n const filters = this.mapDashboardQueryFilters.getQueryParams();\r\n\r\n const [latestResults, historicalResults] = this.canViewResults\r\n ? await Promise.all([\r\n this.mapService.getLatestResults(this.mapId, filters),\r\n this.mapService.getHistoricalResults(this.mapId, filters),\r\n ])\r\n : [[], []];\r\n\r\n this.results = {};\r\n this.updateLatestResults(latestResults);\r\n this.updateHistoricalResults(historicalResults);\r\n this.updatePointsView(); // Update points in case a change in results might hide/show a point.\r\n } catch (error) {\r\n this.logger.error('Error loading map dashboard result data', error, {\r\n mapId: this.mapId,\r\n });\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Map Data',\r\n 'An error occurred while loading the current map data. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n ensureResult(pointId) {\r\n if (pointId in this.results) return this.results[pointId];\r\n\r\n return (this.results[pointId] = {\r\n latestSample: {\r\n collectionDate: null,\r\n tests: [],\r\n get allTestsPassed() {\r\n return this.tests.every((t) => t.passed);\r\n },\r\n get anyTestWarned() {\r\n return this.tests.some((t) => t.warn);\r\n },\r\n get totalFailedCount() {\r\n return this.tests.reduce((s, t) => s + (t.passed ? 0 : 1), 0);\r\n },\r\n },\r\n historical: {\r\n tests: [],\r\n get allTestsPassed() {\r\n return this.tests.every((t) => t.failedCount === 0);\r\n },\r\n get anyTestWarned() {\r\n return this.tests.some((t) => t.warningCount > 0);\r\n },\r\n get totalFailedCount() {\r\n return this.tests.reduce(\r\n (totalFailedCount, currentTest) =>\r\n totalFailedCount + currentTest.failedCount,\r\n 0,\r\n );\r\n },\r\n },\r\n });\r\n }\r\n\r\n updateLatestResults(latestResults) {\r\n for (let latestResult of latestResults) {\r\n let result = this.ensureResult(latestResult.pointId);\r\n result.latestSample.collectionDate = latestResult.sampleCollectionDate;\r\n result.latestSample.tests.push({\r\n testMethod: this.testMethodOptions.find(\r\n (tm) => tm.value === latestResult.testMethodId,\r\n ),\r\n passed: latestResult.passed,\r\n warn: latestResult.warn,\r\n });\r\n }\r\n }\r\n\r\n updateHistoricalResults(historicalResults) {\r\n for (let historicalResult of historicalResults) {\r\n let result = this.ensureResult(historicalResult.pointId);\r\n result.historical.tests.push({\r\n testMethod: this.testMethodOptions.find(\r\n (tm) => tm.value === historicalResult.testMethodId,\r\n ),\r\n passedCount: historicalResult.passedCount,\r\n failedCount: historicalResult.failedCount,\r\n warningCount: historicalResult.warningCount,\r\n });\r\n }\r\n }\r\n\r\n createRemediation() {\r\n this.router.navigateToRoute('remediation-detail', {\r\n id: 'create',\r\n testIds: this.pointTestResultGridOptions.api\r\n ?.getSelectedRows()\r\n .map((t: PointTestResult) => t.testId),\r\n mapId: this.mapId,\r\n });\r\n }\r\n\r\n createVectorTasks() {\r\n this.router.navigateToRoute('create-vector-tasks', {\r\n failedTestId: this.pointTestResultGridOptions.api?.getSelectedRows()[0].testId,\r\n });\r\n }\r\n\r\n async triggerCapPlan() {\r\n const testId: number = this.pointTestResultGridOptions.api?.getSelectedRows()[0]?.testId;\r\n if (!testId) return;\r\n\r\n const confirmed = await this.dialogPresenter.showConfirmation(\r\n 'Trigger CAP Plan',\r\n 'This runs the matching CAP plan for the selected failed test, as if the lab result had triggered it automatically. Anything already created for this test will be skipped. Continue?',\r\n );\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const result = await this.capPlanService.triggerCapPlan(this.map.organizationId, testId);\r\n\r\n const { title, message } = describeCapPlanTriggerResult(result);\r\n this.dialogPresenter.showAlert(title, message);\r\n } catch (error) {\r\n this.logger.error('Error triggering CAP plan', error, { mapId: this.mapId, testId });\r\n this.dialogPresenter.showAlert(\r\n 'Error Triggering CAP Plan',\r\n 'An error occurred while triggering the CAP plan. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n\r\n this.loadPointDetailData(this.selectedPoint.id);\r\n }\r\n\r\n reloadData() {\r\n this.loadResults();\r\n\r\n if (this.view === 'playback') this.loadPlaybackData();\r\n\r\n if (this.sidebarView === 'detail') this.loadPointDetailData(this.selectedPoint.id);\r\n }\r\n\r\n selectedViewOptionChanged() {\r\n if (!this.mapId) return;\r\n\r\n this.mapSelectedViewToCollectionTypeFilter();\r\n this.router.navigateToRoute(\r\n 'map-dashboard',\r\n this.mapDashboardQueryFilters.getQueryParams(),\r\n );\r\n }\r\n\r\n handleApplyFilters() {\r\n this.router.navigateToRoute(\r\n 'map-dashboard',\r\n this.mapDashboardQueryFilters.getQueryParams(),\r\n );\r\n }\r\n\r\n async handleClearFilters() {\r\n this.mapDashboardQueryFilters.reset();\r\n this.router.navigateToRoute(\r\n 'map-dashboard',\r\n this.mapDashboardQueryFilters.getQueryParams(),\r\n );\r\n }\r\n\r\n zoomIn() {\r\n this.panZoom && this.panZoom.zoomIn();\r\n }\r\n\r\n zoomOut() {\r\n this.panZoom && this.panZoom.zoomOut();\r\n }\r\n\r\n getTranslatedPointCoordinates(event) {\r\n const point = this.mapSvgElement.createSVGPoint();\r\n point.x = event.clientX;\r\n point.y = event.clientY;\r\n\r\n const pan = this.panZoom.getPan();\r\n\r\n // The cursor point, translated into svg coordinates\r\n const cursorPoint = point.matrixTransform(this.mapSvgElement.getScreenCTM().inverse());\r\n\r\n // adjust for zoom\r\n let pixelX = cursorPoint.x / this.scale;\r\n let pixelY = cursorPoint.y / this.scale;\r\n\r\n // adjust for pan\r\n pixelX = Math.round(pixelX - pan.x / this.scale);\r\n pixelY = Math.round(pixelY - pan.y / this.scale);\r\n\r\n return {\r\n x: pixelX,\r\n y: pixelY,\r\n };\r\n }\r\n\r\n async bind() {\r\n this.confirmationTestValueOptionsSubscription = this.bindingEngine\r\n .propertyObserver(\r\n this.mapDashboardQueryFilters.confirmationTestingQueryFilters,\r\n 'testMethodGroup',\r\n )\r\n .subscribe((newValue: string, oldValue: string) => {\r\n this.testMethodGroupChanged(newValue, oldValue);\r\n });\r\n }\r\n\r\n canDeactivate() {\r\n this.confirmationTestValueOptionsSubscription?.dispose();\r\n this.applyFiltersSubscription?.dispose();\r\n this.clearFiltersSubscription?.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport { validateTrigger, ValidationController, ValidationControllerFactory, ValidationRules } from 'aurelia-validation';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport UserService from '../../users/user-service';\r\nimport MapAttributeService from '../map-attributes/map-attribute-service';\r\nimport MapService from './map-service';\r\n\r\n@autoinject\r\nexport class MapDetail {\r\n @observable mapPhoto;\r\n\r\n supportedPhotoFormatMessage = 'The following are supported photo formats: .jpg, .jpeg, .png';\r\n\r\n // state\r\n validationController: ValidationController;\r\n formChanged: boolean;\r\n\r\n // permissions\r\n canEditMaps: boolean;\r\n canViewAudit: boolean;\r\n\r\n // data\r\n currentUserOrganizations: any;\r\n map: any;\r\n fileReader: any;\r\n mapAttributes: any[];\r\n propertyDisplayNames: any;\r\n recordChanges: any;\r\n\r\n mapAttributeNames: any;\r\n mapAttributeValues: any;\r\n\r\n mapPhotoInput: any;\r\n mapPhotoDataUrl: any;\r\n\r\n constructor(\r\n private router: Router,\r\n private validationControllerFactory: ValidationControllerFactory,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private userService: UserService,\r\n private mapService: MapService,\r\n private mapAttributeService: MapAttributeService\r\n ) {\r\n this.router = router;\r\n\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'map-detail';\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.mapService = mapService;\r\n this.mapAttributeService = mapAttributeService;\r\n\r\n this.canEditMaps = this.securityService.hasPermission('EditMaps') && !this.securityService.isImpersonating();\r\n this.canViewAudit = this.securityService.isCurrentUserInternal() && this.securityService.isImpersonating();\r\n\r\n this.fileReader = new FileReader();\r\n this.fileReader.addEventListener('load', this.handlePhotoLoad.bind(this));\r\n\r\n this.mapAttributes = [];\r\n\r\n this.propertyDisplayNames = {\r\n 'Name': 'Name',\r\n 'Description': 'Description',\r\n 'PhotoUrl': 'Photo',\r\n 'IsActive': 'Active',\r\n 'OrganizationName': 'Organization Name'\r\n };\r\n }\r\n\r\n activate(params) {\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n var results = await Promise.all([\r\n this.userService.getCurrentUserOrganizations(),\r\n this.mapAttributeService.getMapAttributes(),\r\n params.id === 'create' ?\r\n Promise.resolve({ isActive: true, attributes: [] }) :\r\n await this.mapService.getMap(parseInt(params.id))\r\n ]);\r\n\r\n // Current user organizations must be set before map.\r\n this.currentUserOrganizations = results[0];\r\n\r\n var usedMapAttributes = results[1];\r\n\r\n this.mapAttributeNames = usedMapAttributes.reduce((attributes, attribute) => {\r\n if (!attributes.some(a => a.name.toLowerCase() === attribute.name.toLowerCase()))\r\n attributes.push({ name: attribute.name, value: attribute.name });\r\n\r\n return attributes;\r\n }, []);\r\n this.mapAttributeValues = usedMapAttributes.reduce((attributes, attribute) => {\r\n if (!Object.keys(attributes).find(k => k.toLowerCase() === attribute.name.toLowerCase()))\r\n attributes[attribute.name] = [{ name: attribute.value, value: attribute.value }];\r\n else if (!attributes[attribute.name].some(a => a.value === attribute.value))\r\n attributes[attribute.name].push({ name: attribute.value, value: attribute.value });\r\n\r\n return attributes;\r\n }, {});\r\n this.map = results[2];\r\n\r\n this.mapAttributes.splice(0);\r\n for (let attribute of this.map.attributes) {\r\n this.mapAttributes.push(this.createMapAttribute(attribute.name, attribute.value));\r\n }\r\n\r\n ValidationRules\r\n .ensure('mapPhoto').displayName('Blueprint Image').satisfies(mapPhoto => !!mapPhoto || this.map.photoUrl)\r\n .on(this);\r\n\r\n ValidationRules\r\n .ensure('name').displayName('Name').required()\r\n .ensure('organizationId').displayName('Organization').required()\r\n .on(this.map);\r\n\r\n } catch (error) {\r\n this.logger.error('Error loading map', error, { mapId: params.id });\r\n\r\n await (error.apiErrorCode === 1 ?\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Map',\r\n 'The current map doesn\\'t exist.') :\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Map',\r\n 'An error occurred while loading the current map. Please try again later.')\r\n );\r\n\r\n this.router.navigateToRoute('map-list');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n createMapAttribute(name = null, value = null) {\r\n return {\r\n name,\r\n value,\r\n valuePlaceholder: 'Select or enter a value',\r\n isLoadingValues: false,\r\n mapAttributeNames: this.mapAttributeNames.slice(0),\r\n mapAttributeValues: (this.mapAttributeValues[name] || []).slice(0)\r\n };\r\n }\r\n\r\n addMapAttribute() {\r\n this.mapAttributes.push(this.createMapAttribute());\r\n this.formChanged = true;\r\n }\r\n\r\n removeMapAttribute(attribute) {\r\n this.mapAttributes.splice(this.mapAttributes.findIndex(a => a === attribute), 1);\r\n this.formChanged = true;\r\n }\r\n\r\n handleMapAttributeNameChange(attribute, newName) {\r\n if (!newName || newName in attribute.mapAttributeValues)\r\n return;\r\n\r\n var originalPlaceholder = attribute.valuePlaceholder;\r\n attribute.isLoadingValues = true;\r\n attribute.valuePlaceholder = 'Loading items...';\r\n attribute.mapAttributeValues = (this.mapAttributeValues[newName] || []).slice(0);\r\n attribute.valuePlaceholder = originalPlaceholder;\r\n attribute.isLoadingValues = false;\r\n }\r\n\r\n handleAttributeNameTagCreated(tag, attribute) {\r\n for (var i = attribute.mapAttributeNames.length - 1; i >= 0; i--) {\r\n if (attribute.mapAttributeNames[i].tag)\r\n attribute.mapAttributeNames.splice(i, 1);\r\n }\r\n\r\n attribute.mapAttributeNames.push(tag);\r\n attribute.name = tag.name;\r\n }\r\n\r\n handleAttributeValueTagCreated(tag, attribute) {\r\n for (var i = attribute.mapAttributeValues.length - 1; i >= 0; i--) {\r\n if (attribute.mapAttributeValues[i].tag)\r\n attribute.mapAttributeValues.splice(i, 1);\r\n }\r\n\r\n attribute.mapAttributeValues.push(tag);\r\n attribute.value = tag.value;\r\n }\r\n\r\n mapPhotoChanged() {\r\n if (!this.mapPhotoInput.files || !this.mapPhotoInput.files.length)\r\n return;\r\n\r\n var file = this.mapPhotoInput.files[0];\r\n if (file.type !== 'image/jpeg' && file.type !== 'image/png') {\r\n this.dialogPresenter.showAlert(\r\n 'Unsupported Photo Format',\r\n this.supportedPhotoFormatMessage);\r\n\r\n this.mapPhotoInput.value = '';\r\n }\r\n\r\n this.fileReader.readAsDataURL(file);\r\n }\r\n\r\n handlePhotoLoad() {\r\n this.mapPhotoDataUrl = this.fileReader.result;\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('map-list');\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid)\r\n return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n this.map.attributes.splice(0);\r\n for (let mapAttribute of this.mapAttributes) {\r\n this.map.attributes.push({\r\n name: mapAttribute.name,\r\n value: mapAttribute.value\r\n });\r\n }\r\n\r\n try {\r\n let savedMap = (await this.mapService.saveMap(this.map, this.mapPhotoInput.files[0])) as any;\r\n this.map.id = savedMap.id;\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Map saved successfully.');\r\n this.router.navigateToRoute('map-detail', { id: this.map.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving map.', error, { map: this.map });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Map',\r\n this.getApiErrorMessage(error.apiErrorCode));\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n if (errorCode === 1200)\r\n return 'The format of the map photo is not a supported format. ' + this.supportedPhotoFormatMessage;\r\n\r\n return 'An error occurred while saving the current map. Please try again later.';\r\n }\r\n\r\n async loadRecordChanges() {\r\n try {\r\n this.pageContext.isLoading = true;\r\n this.recordChanges = await this.mapService.getMapRecordChanges(this.map.id);\r\n } catch (error) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Map Audit',\r\n 'An error occurred while loading the current map audit. Please try again later.');\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, bindable, containerless } from 'aurelia-framework';\r\n\r\n@containerless\r\n@autoinject\r\nexport class MapImage {\r\n @bindable href;\r\n\r\n imageElement: SVGImageElement;\r\n\r\n constructor(private element: Element) {\r\n this.element = element;\r\n }\r\n\r\n attached() {\r\n var image = new Image();\r\n image.addEventListener('load', () => {\r\n this.imageElement = document.createElementNS('http://www.w3.org/2000/svg', 'image');\r\n this.imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', this.href);\r\n this.imageElement.setAttributeNS(null, 'x', '0');\r\n this.imageElement.setAttributeNS(null, 'y', '0');\r\n this.imageElement.setAttributeNS(null, 'width', image.width.toString());\r\n this.imageElement.setAttributeNS(null, 'height', image.height.toString());\r\n this.imageElement.setAttributeNS(null, 'data-cy', 'map-image');\r\n\r\n (this.element.parentElement || this.element.parentNode).appendChild(this.imageElement);\r\n });\r\n image.src = this.href;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport { getRecordStatusOptions } from 'record-status';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport UserService from '../../users/user-service';\r\nimport { MapListQuery, MapListQueryFilters } from './map-list-query-filters';\r\nimport MapService from './map-service';\r\n\r\n@autoinject\r\nexport class MapList {\r\n @observable filterText;\r\n @observable selectedMaps;\r\n\r\n // configuration\r\n gridOptions: any;\r\n applyFiltersSubscription: any;\r\n clearFiltersSubscription: any;\r\n\r\n // permissions\r\n canEditMaps: any;\r\n\r\n // state\r\n maps: any;\r\n mapsView: any;\r\n attributes: any[];\r\n\r\n allSelected: boolean;\r\n selectedActiveMaps: any[];\r\n organizations: any;\r\n recordStatusOptions: SelectorOption[];\r\n\r\n mapListQueryFilters: MapListQueryFilters;\r\n\r\n constructor(\r\n private router: Router,\r\n private eventAggregator: EventAggregator,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private userService: UserService,\r\n private mapService: MapService,\r\n ) {\r\n this.router = router;\r\n this.eventAggregator = eventAggregator;\r\n\r\n this.logger = logger;\r\n this.logger.name = 'map-list';\r\n\r\n this.pageContext = pageContext;\r\n this.dialogPresenter = dialogPresenter;\r\n this.securityService = securityService;\r\n this.userService = userService;\r\n this.mapService = mapService;\r\n this.filterText = '';\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template:\r\n '',\r\n headerCellTemplate:\r\n '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Map Name',\r\n field: 'name',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 150,\r\n sort: 'asc',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Organization',\r\n field: 'organizationName',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 150,\r\n },\r\n { suppressMenu: true, headerName: 'Sample Points', field: 'pointCount' },\r\n { suppressMenu: true, headerName: 'Sampling Plans', field: 'planCount' },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Open Remediations',\r\n field: 'openRemediationCount',\r\n },\r\n { suppressMenu: true, headerName: 'Open Tasks', field: 'openTaskCount' },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Unassigned Tasks',\r\n field: 'unassignedTaskCount',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerCellTemplate: '',\r\n headerClass: 'row-actions',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActiveMaps = [];\r\n this.mapListQueryFilters = new MapListQueryFilters();\r\n this.attributes = [];\r\n\r\n this.canEditMaps =\r\n this.securityService.hasPermission('EditMaps') &&\r\n !this.securityService.isImpersonating();\r\n }\r\n\r\n navigateToMapDashboard(id) {\r\n this.router.navigateToRoute('map-dashboard', { id });\r\n }\r\n\r\n navigateToMapDetail(id) {\r\n this.router.navigateToRoute('map-detail', { id });\r\n }\r\n\r\n setSelectedActiveMaps() {\r\n this.selectedActiveMaps = this.mapsView.filter((map) => map.isSelected && map.isActive);\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.mapsView.every((map) => map.isSelected);\r\n this.setSelectedActiveMaps();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.mapsView) {\r\n this.allSelected = !this.mapsView.every((map) => map.isSelected);\r\n\r\n for (let map of this.mapsView) map.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActiveMaps();\r\n\r\n return true;\r\n }\r\n\r\n filterTextChanged() {\r\n this.updateMapsView();\r\n }\r\n\r\n handleApplyFilters() {\r\n this.router.navigateToRoute('map-list', this.mapListQueryFilters.getQueryParams());\r\n }\r\n\r\n handleClearFilters() {\r\n this.mapListQueryFilters.reset();\r\n this.router.navigateToRoute('map-list', this.mapListQueryFilters.getQueryParams());\r\n }\r\n\r\n updateMapsView() {\r\n var lowerCasedFilterText = this.filterText.toLowerCase();\r\n\r\n if (this.maps) {\r\n this.mapsView = this.maps.filter(\r\n (u) =>\r\n this.matchSelectedOrganizations(u) &&\r\n ((u.name || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (u.organizationName || '').toLowerCase().indexOf(lowerCasedFilterText) >\r\n -1),\r\n );\r\n\r\n this.allSelected = this.mapsView.every((map) => map.isSelected);\r\n }\r\n }\r\n\r\n matchSelectedOrganizations(map) {\r\n if (!this.mapListQueryFilters.organizationQueryFilters.organizationIds?.length) return true;\r\n\r\n return this.mapListQueryFilters.organizationQueryFilters.organizationIds.some(\r\n (id: number) => id === map.organizationId,\r\n );\r\n }\r\n\r\n async loadMaps() {\r\n this.maps = await this.mapService.getMaps(this.mapListQueryFilters.getQueryParams());\r\n this.updateMapsView();\r\n }\r\n\r\n canActivate(_params: MapListQuery, routeConfig) {\r\n return this.mapListQueryFilters.ensureSingleApplyFilterHandler(routeConfig);\r\n }\r\n\r\n activate(params: MapListQuery) {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe('filters.apply', () =>\r\n this.handleApplyFilters(),\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe('filters.clear', () =>\r\n this.handleClearFilters(),\r\n );\r\n this.mapListQueryFilters.setFilterValues(params);\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n const [userOrganizations, recordStatusOptions] = await Promise.all([\r\n this.userService.getCurrentUserOrganizations(),\r\n getRecordStatusOptions(),\r\n this.loadMaps(),\r\n ]);\r\n\r\n this.organizations = userOrganizations;\r\n this.recordStatusOptions = recordStatusOptions;\r\n } catch (error) {\r\n this.logger.error('Error loading maps.', error);\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Maps',\r\n 'An error occurred while loading the maps. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n deleteMap(map) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete Map', 'Are you sure you want to delete this map?')\r\n .then((confirmed) => {\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.mapService\r\n .deleteMaps([map.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Map deleted successfully.');\r\n\r\n map.isSelected = false;\r\n map.isActive = false;\r\n\r\n this.setSelectedActiveMaps();\r\n })\r\n .catch((error) => {\r\n this.logger.error('Error deleting map.', error, { mapId: map.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, false);\r\n });\r\n });\r\n }\r\n\r\n deleteSelectedMaps() {\r\n var mapsToDelete = this.mapsView.filter((u) => u.isSelected);\r\n if (!mapsToDelete.length) return;\r\n\r\n this.dialogPresenter\r\n .showConfirmation(\r\n 'Delete Selected Maps',\r\n 'Are you sure you want to delete the selected maps?',\r\n )\r\n .then((confirmed) => {\r\n if (!confirmed) return;\r\n\r\n var mapIds = mapsToDelete.map((map) => map.id);\r\n\r\n this.pageContext.isLoading = true;\r\n this.mapService\r\n .deleteMaps(mapIds)\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Selected maps deleted successfully.');\r\n\r\n for (let map of mapsToDelete) {\r\n map.isSelected = false;\r\n map.isActive = false;\r\n\r\n this.setSelectedActiveMaps();\r\n }\r\n })\r\n .catch((error) => {\r\n this.logger.error('Error deleting maps.', error, { mapIds });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, true);\r\n });\r\n });\r\n }\r\n\r\n handleDeleteError(error, multipleMaps) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Deleting Map' + (multipleMaps ? 's' : ''),\r\n this.getApiErrorMessage(error.apiErrorCode, multipleMaps),\r\n );\r\n }\r\n\r\n getApiErrorMessage(errorCode, multipleMaps) {\r\n if (errorCode === 2)\r\n return 'You dont have access to delete the map' + (multipleMaps ? 's' : '');\r\n else\r\n return 'An unexpected error occurred while trying to delete maps. Please try again later.';\r\n }\r\n\r\n canDeactivate() {\r\n this.applyFiltersSubscription?.dispose();\r\n this.clearFiltersSubscription?.dispose();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { FirstDataRenderedEvent } from 'ag-grid-community';\r\nimport { Grid, GridOptions } from 'ag-grid-enterprise/dist/ag-grid-enterprise';\r\nimport { autoinject, observable } from 'aurelia-framework';\r\nimport { setGroupByColumnDefinitions } from 'infrastructure/ag-grid/ag-grouping-helper';\r\nimport { expandRowAtIndex } from 'infrastructure/ag-grid/ag-onfirstdatarendered-handler';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport ValidationErrorFormatter from 'infrastructure/validation/validation-error-formatter';\r\nimport {\r\n isImpersonatingUserOrOrg,\r\n testMethodPopUpManagementNameFormatting,\r\n} from 'test-methods/test-method-helper';\r\nimport TestMethodService from 'test-methods/test-method-service';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport { ActiveTestMethodPlans } from './contracts/active-test-method-plans';\r\nimport { ReplaceTestMethodRequest } from './contracts/replace-test-method-request';\r\nimport { TestMethodReplacemantImpactCounts } from './contracts/test-method-replacement-impact-counts';\r\nimport {\r\n generatePlanManagementColumnDefs,\r\n generatePlanManagementGridOptions,\r\n} from './plan-management-grid';\r\nimport PlanManagementService from './plan-management-service';\r\n\r\nconst planManagementViewBySelectorOptions: SelectorOption[] = [\r\n { title: 'Test Method Name', value: 'testMethodName' },\r\n { title: 'Organization', value: 'organizationName' },\r\n];\r\nconst replacementDescription = (impactCounts: TestMethodReplacemantImpactCounts): string => {\r\n return `This action will impact\r\n ${impactCounts.organizationCount} ${\r\n impactCounts.organizationCount === 1 ? 'organization' : 'organizations'\r\n }, \r\n ${impactCounts.planCount} ${impactCounts.planCount === 1 ? 'plan' : 'plans'} and \r\n ${impactCounts.unassignedTaskCount} unassigned ${\r\n impactCounts.unassignedTaskCount === 1 ? 'task' : 'tasks'\r\n }. \r\n The current test method is also related to \r\n ${impactCounts.specificationCount} ${\r\n impactCounts.specificationCount === 1 ? 'specification' : 'specifications'\r\n }.`;\r\n};\r\n\r\n@autoinject\r\nexport class PlanManagementList {\r\n @observable filterText: string;\r\n viewBySelectorOptions: SelectorOption[];\r\n\r\n private _selectedViewByOption: SelectorOption;\r\n\r\n gridOptions: GridOptions;\r\n allSelected: boolean;\r\n testMethodPlans: ActiveTestMethodPlans[];\r\n canEditPlanManagement: boolean;\r\n planManagementGrid: any;\r\n\r\n constructor(\r\n private dialogPresenter: DialogPresenter,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private securityService: SecurityService,\r\n private planManagementService: PlanManagementService,\r\n private testMethodService: TestMethodService,\r\n ) {\r\n this.logger = logger;\r\n\r\n this.viewBySelectorOptions = planManagementViewBySelectorOptions;\r\n this._selectedViewByOption = this.viewBySelectorOptions[0];\r\n\r\n this.canEditPlanManagement =\r\n this.securityService.hasPermission('EditPlanManagement') &&\r\n !this.securityService.isImpersonating();\r\n }\r\n\r\n groupByColumnDefinitions() {\r\n setGroupByColumnDefinitions(\r\n this.gridOptions,\r\n this._selectedViewByOption,\r\n generatePlanManagementColumnDefs(\r\n this.canEditPlanManagement,\r\n this.replace.bind(this),\r\n this._selectedViewByOption,\r\n isImpersonatingUserOrOrg(\r\n this.securityService.isImpersonating(),\r\n this.securityService.isWorkingUnderOrganization(),\r\n ),\r\n ),\r\n null,\r\n );\r\n }\r\n\r\n public get selectedViewByOption(): SelectorOption {\r\n return this._selectedViewByOption;\r\n }\r\n\r\n public set selectedViewByOption(selectedOption: SelectorOption) {\r\n this._selectedViewByOption = selectedOption;\r\n this.groupByColumnDefinitions();\r\n }\r\n\r\n filterTextChanged(newValue: string) {\r\n this.gridOptions.api.setQuickFilter(newValue);\r\n }\r\n\r\n async replace(data: ActiveTestMethodPlans) {\r\n this.pageContext.isLoading = true;\r\n const { testMethodId, testMethodName, testMethodBillCode } = data;\r\n const impactCounts = await this.planManagementService.getTestMethodReplacementImpactCounts(\r\n testMethodId,\r\n data.organizationId,\r\n );\r\n const testMethods = await this.testMethodService.getTestMethods(data.organizationId, {\r\n externalSource: 'LabVantage',\r\n });\r\n const replacementTestMethods = testMethods\r\n .filter((tm) => tm.id !== testMethodId)\r\n .map((tm) => ({\r\n ...tm,\r\n name: testMethodPopUpManagementNameFormatting(\r\n tm,\r\n this.securityService.isImpersonating(),\r\n this.securityService.isWorkingUnderOrganization(),\r\n ),\r\n }));\r\n\r\n const { output, wasCancelled } = await this.dialogPresenter.showNameValueItemSelector(\r\n `Replace: ${testMethodName} - (${testMethodBillCode})`,\r\n replacementDescription(impactCounts),\r\n 'Select replacement test method',\r\n replacementTestMethods,\r\n 'name',\r\n 'id',\r\n );\r\n if (wasCancelled) {\r\n this.pageContext.isLoading = false;\r\n return;\r\n }\r\n\r\n var replaceTestMethodRequest: ReplaceTestMethodRequest = {\r\n organizationId: data.organizationId,\r\n testMethodId,\r\n replacementTestMethodId: output.id,\r\n };\r\n\r\n try {\r\n await this.planManagementService.replaceTestMethod(replaceTestMethodRequest);\r\n await this.loadActiveTestMethods();\r\n } catch (e) {\r\n this.logger.error('Error replacing test method.', e);\r\n const errorMessage = ValidationErrorFormatter.format(\r\n 'An error occurred while replacing a test method. If the problem persists, please contact customer service.',\r\n e,\r\n );\r\n this.dialogPresenter.showAlert('Error Replacing Test Method', errorMessage);\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n async loadActiveTestMethods() {\r\n this.testMethodPlans = await this.planManagementService.fetchActiveTestMethodPlans();\r\n this.gridOptions?.api.setRowData(this.testMethodPlans);\r\n }\r\n\r\n async canActivate() {\r\n await this.loadActiveTestMethods();\r\n }\r\n\r\n bind() {\r\n this.gridOptions = generatePlanManagementGridOptions(\r\n this.canEditPlanManagement,\r\n this.replace.bind(this),\r\n this._selectedViewByOption,\r\n this.securityService.isImpersonating(),\r\n );\r\n this.gridOptions.rowData = this.testMethodPlans;\r\n this.gridOptions.onFirstDataRendered = (params: FirstDataRenderedEvent) =>\r\n expandRowAtIndex(params, 1);\r\n new Grid(this.planManagementGrid, this.gridOptions);\r\n this.groupByColumnDefinitions();\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { autoinject, BindingEngine, Disposable, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n validateTrigger,\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport { getTimeOptions } from 'infrastructure/components/time-selector';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport TimeZoneService from 'infrastructure/time-zone-service';\r\nimport Lab from 'labs/lab';\r\nimport LabService from 'labs/lab-service';\r\nimport { getCollectionTypeOptions } from 'location-testing/collection-type';\r\nimport PointService from 'location-testing/points/point-service';\r\nimport moment from 'moment';\r\nimport SecurityService from 'security/security-service';\r\nimport { testMethodNameFormatting } from 'test-methods/test-method-helper';\r\nimport TestMethodService from 'test-methods/test-method-service';\r\nimport operationsTimingOptions from '../operations-timing-options';\r\nimport PointRisk from '../points/point-risk';\r\nimport GenerateTasksDateSelectionType from './generate-task-date-selection-type';\r\nimport GenerateTasksDistributionMethod from './generate-tasks-distribution-method';\r\nimport GenerateTasksPointZoneDistributionMethod from './generate-tasks-point-zone-distribution-method';\r\nimport Plan from './plan';\r\nimport { toPlanCoverageType } from './plan-coverage-type';\r\nimport PlanService from './plan-service';\r\nimport PlanType from './plan-type';\r\nimport TaskGenerationClientSettings from './task-generation-client-settings';\r\nimport TaskGenerationRequest, {\r\n TaskGenerationZoneDistribution,\r\n TaskRequestPriority,\r\n} from './task-generation-request';\r\nimport TaskGenerationRequestService from './task-generation-request-service';\r\nimport UiPlanCoverage from './ui-plan-coverage';\r\nimport UiSchedule from './ui-schedule';\r\n\r\n@autoinject\r\nexport class GenerateTasks {\r\n @observable blackoutDate: any;\r\n\r\n validationController: ValidationController;\r\n requestedPointCountSubscription: Disposable;\r\n requestedPointCountZone1Subscription: Disposable;\r\n requestedPointCountZone2Subscription: Disposable;\r\n requestedPointCountZone3Subscription: Disposable;\r\n requestedPointCountZone4Subscription: Disposable;\r\n pointZoneDistributionMethodSubscription: Disposable;\r\n dateSelectionTypeSubscription: Disposable;\r\n quarterCountSubscription: Disposable;\r\n monthCountSubscription: Disposable;\r\n weekCountSubscription: Disposable;\r\n startDateSubscription: Disposable;\r\n endDateSubscription: Disposable;\r\n\r\n // Security\r\n canEditPlans: boolean;\r\n currentUser: any;\r\n\r\n mapId: number;\r\n plan: Plan;\r\n schedule: any;\r\n recordChanges: any;\r\n pausedPointCount: number;\r\n\r\n testMethodOptions: any[];\r\n selectedTestMethodIds: number[];\r\n\r\n labs: Lab[];\r\n collectionTypeOptions: SelectorOption[];\r\n\r\n dateSelectionType: GenerateTasksDateSelectionType;\r\n taskGenerationRequest: TaskGenerationRequest;\r\n riskLevels: any;\r\n zoneDistributions: any;\r\n zoneDistributionMax: number;\r\n\r\n zonePercentageCount: any;\r\n showZonePercentageCounts: boolean;\r\n\r\n planTypes: any;\r\n timeZones: any;\r\n operationsTimingOptions: any;\r\n planPointRiskBreakdown: any;\r\n planPointZoneBreakdown: any;\r\n\r\n planPointRisks: string[];\r\n\r\n isPaused: boolean;\r\n wasPausedAtLoad: boolean;\r\n isLocked: boolean;\r\n timeCaptions: any;\r\n scheduleMinDate: Date;\r\n targetCollectionTimesInvalid: boolean;\r\n weekBasedTaskDistribution: boolean;\r\n taskCountDisabled: boolean;\r\n quarterCount: number;\r\n monthCount: number;\r\n weekCount: number;\r\n\r\n formChanged: boolean;\r\n\r\n showMainSection: boolean;\r\n showScheduleSection: boolean;\r\n showCollectionTimesSection: boolean;\r\n showBlackoutSection: boolean;\r\n showRiskDistributionSection: boolean;\r\n\r\n constructor(\r\n validationControllerFactory: ValidationControllerFactory,\r\n private router: Router,\r\n private bindingEngine: BindingEngine,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private timeZoneService: TimeZoneService,\r\n private testMethodService: TestMethodService,\r\n private labService: LabService,\r\n private planService: PlanService,\r\n private taskGenerationRequestService: TaskGenerationRequestService,\r\n private planCoverage: UiPlanCoverage,\r\n private pointService: PointService,\r\n ) {\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.logger.name = 'plan-generate-tasks';\r\n\r\n this.canEditPlans =\r\n this.securityService.hasPermission('EditPlans') &&\r\n !this.securityService.isImpersonating();\r\n\r\n this.isLocked = false;\r\n this.wasPausedAtLoad = false;\r\n\r\n this.showMainSection = false;\r\n this.showScheduleSection = false;\r\n this.showRiskDistributionSection = false;\r\n this.showCollectionTimesSection = false;\r\n this.showBlackoutSection = false;\r\n this.taskCountDisabled = false;\r\n this.planPointRisks = ['High', 'Medium', 'Low', 'Unknown'];\r\n this.zoneDistributionMax = 100;\r\n\r\n this.operationsTimingOptions = operationsTimingOptions;\r\n this.collectionTypeOptions = getCollectionTypeOptions();\r\n\r\n this.initSchedule();\r\n\r\n this.timeCaptions = getTimeOptions().reduce((mapping, time) => {\r\n mapping[time.value] = time.title;\r\n return mapping;\r\n }, {});\r\n\r\n this.handleRequestedPointCountChanged = this.handleRequestedPointCountChanged.bind(this);\r\n this.handlePointZoneDistributionMethodChanged =\r\n this.handlePointZoneDistributionMethodChanged.bind(this);\r\n }\r\n\r\n initSchedule() {\r\n var today = new Date();\r\n var minDate = new Date();\r\n minDate.setDate(today.getDate() - 1);\r\n\r\n this.scheduleMinDate = minDate;\r\n this.schedule = { startDate: today };\r\n }\r\n\r\n isPriorityBasedPlan() {\r\n return this.plan.planTypeId === PlanType.RISK_BASED_PRIORITY;\r\n }\r\n\r\n mapDateSelectionTypeToPointDistributionMethod(\r\n dateSelectionType: GenerateTasksDateSelectionType,\r\n ) {\r\n switch (dateSelectionType) {\r\n case GenerateTasksDateSelectionType.BY_QUARTER:\r\n return GenerateTasksDistributionMethod.QUARTERLY_SWAB;\r\n case GenerateTasksDateSelectionType.BY_MONTH:\r\n return GenerateTasksDistributionMethod.MONTHLY_SWAB;\r\n case GenerateTasksDateSelectionType.BY_WEEK:\r\n return GenerateTasksDistributionMethod.WEEKLY_SWAB;\r\n case GenerateTasksDateSelectionType.BY_DAY:\r\n return GenerateTasksDistributionMethod.DAILY_SWAB;\r\n default:\r\n return this.weekBasedTaskDistribution\r\n ? GenerateTasksDistributionMethod.WEEK_BASED\r\n : GenerateTasksDistributionMethod.SEQUENTIAL;\r\n }\r\n }\r\n\r\n private calcualateEndDate = (taskGenerationRequest: TaskGenerationRequest): Date => {\r\n switch (this.dateSelectionType) {\r\n case GenerateTasksDateSelectionType.BY_QUARTER:\r\n return moment(taskGenerationRequest.startDate)\r\n .add(Number(this.quarterCount), 'quarters')\r\n .startOf('quarter')\r\n .add(-1, 'days')\r\n .format('YYYY-MM-DD') as any as Date;\r\n case GenerateTasksDateSelectionType.BY_MONTH:\r\n return moment(taskGenerationRequest.startDate)\r\n .add(Number(this.monthCount), 'months')\r\n .startOf('month')\r\n .add(-1, 'days')\r\n .format('YYYY-MM-DD') as any as Date;\r\n case GenerateTasksDateSelectionType.BY_WEEK:\r\n return moment(taskGenerationRequest.startDate)\r\n .add(Number(this.weekCount), 'weeks')\r\n .add(-1, 'days')\r\n .format('YYYY-MM-DD') as any as Date;\r\n default:\r\n return moment(taskGenerationRequest.endDate).format('YYYY-MM-DD') as any as Date;\r\n }\r\n };\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n prepareTaskRequestForSubmission(request: TaskGenerationRequest) {\r\n const copy = JSON.parse(JSON.stringify(request)) as TaskGenerationRequest;\r\n delete request.riskPriorities;\r\n\r\n copy.startDate = moment(request.startDate).format('YYYY-MM-DD') as any as Date;\r\n copy.endDate = this.calcualateEndDate(request);\r\n\r\n copy.requestedTaskCount = Number(copy.requestedTaskCount);\r\n\r\n copy.pointDistributionMethod = this.mapDateSelectionTypeToPointDistributionMethod(\r\n this.dateSelectionType,\r\n );\r\n\r\n if (this.plan.planTypeId === PlanType.RISK_BASED_PRIORITY) {\r\n let highTaskRiskPriority = {\r\n risk: PointRisk.HIGH.toString(),\r\n percentage: Number(this.riskLevels.high),\r\n } as TaskRequestPriority;\r\n\r\n let mediumTaskRiskPriority = {\r\n risk: PointRisk.MEDIUM.toString(),\r\n percentage: Number(this.riskLevels.medium),\r\n } as TaskRequestPriority;\r\n\r\n let lowTaskRiskPriority = {\r\n risk: PointRisk.LOW.toString(),\r\n percentage: Number(this.riskLevels.low),\r\n } as TaskRequestPriority;\r\n\r\n copy.riskPriorities = [\r\n highTaskRiskPriority,\r\n mediumTaskRiskPriority,\r\n lowTaskRiskPriority,\r\n ];\r\n }\r\n\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod !==\r\n GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE\r\n ) {\r\n copy.pointZoneDistributionMethod = GenerateTasksPointZoneDistributionMethod.DISCRETE;\r\n copy.pointZoneDistributions = TaskGenerationZoneDistribution.createAllZonesForServer(\r\n this.taskGenerationRequest.pointZoneDistributionMethod,\r\n this.zoneDistributions,\r\n this.zonePercentageCount,\r\n );\r\n\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n )\r\n delete copy.requestedTaskCount;\r\n }\r\n\r\n return copy;\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n initializeTaskRequest() {\r\n // load defaults for the plan\r\n let today = new Date();\r\n let tomorrow = new Date();\r\n tomorrow.setDate(today.getDate() + 1);\r\n let planSettings = this.taskGenerationRequestService.getPlanSettings(this.plan.id);\r\n\r\n this.taskGenerationRequest = new TaskGenerationRequest();\r\n this.taskGenerationRequest.planId = this.plan.id;\r\n this.taskGenerationRequest.testMethodIds = (this.plan.testMethods ?? []).map((tm) => tm.id);\r\n this.taskGenerationRequest.startDate = today;\r\n this.taskGenerationRequest.endDate = tomorrow;\r\n this.taskGenerationRequest.timeZone = this.plan.schedule.timeZone;\r\n this.taskGenerationRequest.requestedTaskCount =\r\n planSettings?.requestedTaskCount || this.plan.points.length;\r\n this.dateSelectionType =\r\n planSettings?.dateSelectionType || GenerateTasksDateSelectionType.SINGLE_DATE;\r\n\r\n // copy blackout schedule info\r\n this.taskGenerationRequest.blackoutDates = [];\r\n if (this.plan.schedule.blackoutDates)\r\n this.taskGenerationRequest.blackoutDates.push(...this.plan.schedule.blackoutDatesView);\r\n\r\n this.taskGenerationRequest.blackoutSundays = this.plan.schedule.blackoutSundays;\r\n this.taskGenerationRequest.blackoutMondays = this.plan.schedule.blackoutMondays;\r\n this.taskGenerationRequest.blackoutTuesdays = this.plan.schedule.blackoutTuesdays;\r\n this.taskGenerationRequest.blackoutWednesdays = this.plan.schedule.blackoutWednesdays;\r\n this.taskGenerationRequest.blackoutThursdays = this.plan.schedule.blackoutThursdays;\r\n this.taskGenerationRequest.blackoutFridays = this.plan.schedule.blackoutFridays;\r\n this.taskGenerationRequest.blackoutSaturdays = this.plan.schedule.blackoutSaturdays;\r\n this.taskGenerationRequest.collectionType = this.plan.collectionType;\r\n\r\n this.quarterCount = 1;\r\n this.monthCount = 1;\r\n this.weekCount = 1;\r\n\r\n this.taskGenerationRequest.pointZoneDistributionMethod =\r\n planSettings?.pointZoneDistributionMethod ??\r\n GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE;\r\n\r\n this.riskLevels = {\r\n high: planSettings?.riskPriorities?.find((x) => x.risk === 'High')?.percentage ?? 50,\r\n medium:\r\n planSettings?.riskPriorities?.find((x) => x.risk === 'Medium')?.percentage ?? 25,\r\n low: planSettings?.riskPriorities?.find((x) => x.risk === 'Low')?.percentage ?? 25,\r\n get sum() {\r\n return (\r\n (Number(this.high) || 0) + (Number(this.medium) || 0) + (Number(this.low) || 0)\r\n );\r\n },\r\n };\r\n\r\n this.zoneDistributions = {\r\n zone1: planSettings?.pointZoneDistributions?.find((x) => x.zone === 1)?.value ?? 0,\r\n zone2: planSettings?.pointZoneDistributions?.find((x) => x.zone === 2)?.value ?? 0,\r\n zone3: planSettings?.pointZoneDistributions?.find((x) => x.zone === 3)?.value ?? 0,\r\n zone4: planSettings?.pointZoneDistributions?.find((x) => x.zone === 4)?.value ?? 0,\r\n get sum() {\r\n return (\r\n (Number(this.zone1) || 0) +\r\n (Number(this.zone2) || 0) +\r\n (Number(this.zone3) || 0) +\r\n (Number(this.zone4) || 0)\r\n );\r\n },\r\n };\r\n\r\n this.zonePercentageCount = {\r\n zone1: planSettings?.pointZoneDistributions?.find((x) => x.zone === 1)?.value ?? 0,\r\n zone2: planSettings?.pointZoneDistributions?.find((x) => x.zone === 2)?.value ?? 0,\r\n zone3: planSettings?.pointZoneDistributions?.find((x) => x.zone === 3)?.value ?? 0,\r\n zone4: planSettings?.pointZoneDistributions?.find((x) => x.zone === 4)?.value ?? 0,\r\n // eslint-disable-next-line sonarjs/no-identical-functions\r\n get sum() {\r\n return (\r\n (Number(this.zone1) || 0) +\r\n (Number(this.zone2) || 0) +\r\n (Number(this.zone3) || 0) +\r\n (Number(this.zone4) || 0)\r\n );\r\n },\r\n };\r\n\r\n this.requestedPointCountSubscription = this.bindingEngine\r\n .propertyObserver(this.taskGenerationRequest, 'requestedTaskCount')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.requestedPointCountZone1Subscription = this.bindingEngine\r\n .propertyObserver(this.zoneDistributions, 'zone1')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.requestedPointCountZone2Subscription = this.bindingEngine\r\n .propertyObserver(this.zoneDistributions, 'zone2')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.requestedPointCountZone3Subscription = this.bindingEngine\r\n .propertyObserver(this.zoneDistributions, 'zone3')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.requestedPointCountZone4Subscription = this.bindingEngine\r\n .propertyObserver(this.zoneDistributions, 'zone4')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.pointZoneDistributionMethodSubscription = this.bindingEngine\r\n .propertyObserver(this.taskGenerationRequest, 'pointZoneDistributionMethod')\r\n .subscribe(this.handlePointZoneDistributionMethodChanged);\r\n\r\n this.dateSelectionTypeSubscription = this.bindingEngine\r\n .propertyObserver(this, 'dateSelectionType')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.quarterCountSubscription = this.bindingEngine\r\n .propertyObserver(this, 'quarterCount')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.monthCountSubscription = this.bindingEngine\r\n .propertyObserver(this, 'monthCount')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.weekCountSubscription = this.bindingEngine\r\n .propertyObserver(this, 'weekCount')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.startDateSubscription = this.bindingEngine\r\n .propertyObserver(this.taskGenerationRequest, 'startDate')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.startDateSubscription = this.bindingEngine\r\n .propertyObserver(this.taskGenerationRequest, 'endDate')\r\n .subscribe(this.handleRequestedPointCountChanged);\r\n\r\n this.handleRequestedPointCountChanged();\r\n this.handlePointZoneDistributionMethodChanged();\r\n }\r\n\r\n handleRequestedPointCountChanged() {\r\n this.generateRequestedTaskCount();\r\n }\r\n\r\n handlePointZoneDistributionMethodChanged() {\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n )\r\n this.zoneDistributionMax = 1000;\r\n\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.PERCENTAGE\r\n )\r\n this.zoneDistributionMax = 100;\r\n\r\n this.taskCountDisabled =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE;\r\n this.showZonePercentageCounts =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.PERCENTAGE;\r\n\r\n this.validationController.validate({\r\n object: this.zoneDistributions,\r\n propertyName: 'zone1',\r\n });\r\n this.validationController.validate({\r\n object: this.zoneDistributions,\r\n propertyName: 'zone2',\r\n });\r\n this.validationController.validate({\r\n object: this.zoneDistributions,\r\n propertyName: 'zone3',\r\n });\r\n this.validationController.validate({\r\n object: this.zoneDistributions,\r\n propertyName: 'zone4',\r\n });\r\n this.validationController.validate({ object: this.zoneDistributions, propertyName: 'sum' });\r\n\r\n this.generateRequestedTaskCount();\r\n }\r\n\r\n getDates() {\r\n const startDate = moment(this.taskGenerationRequest.startDate);\r\n const endDate = moment(this.taskGenerationRequest.endDate);\r\n const diff = endDate.diff(startDate, 'days');\r\n }\r\n\r\n getMultiplier() {\r\n let multiplier: number;\r\n switch (this.dateSelectionType) {\r\n case GenerateTasksDateSelectionType.BY_QUARTER:\r\n multiplier = this.quarterCount;\r\n break;\r\n case GenerateTasksDateSelectionType.BY_MONTH:\r\n multiplier = this.monthCount;\r\n break;\r\n case GenerateTasksDateSelectionType.BY_WEEK:\r\n multiplier = this.weekCount;\r\n break;\r\n case GenerateTasksDateSelectionType.BY_DAY:\r\n multiplier = Math.ceil(\r\n 1 +\r\n (this.taskGenerationRequest.endDate.getTime() -\r\n this.taskGenerationRequest.startDate.getTime()) /\r\n (1000 * 3600 * 24),\r\n );\r\n break;\r\n default:\r\n multiplier = 1;\r\n }\r\n\r\n return Number.isNaN(multiplier) ? 1 : multiplier;\r\n }\r\n\r\n generateRequestedTaskCount() {\r\n const multiplier = this.getMultiplier();\r\n\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE ||\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.PERCENTAGE\r\n ) {\r\n this.taskGenerationRequest.tasksToBeGenerated = Number.isNaN(\r\n this.taskGenerationRequest.requestedTaskCount,\r\n )\r\n ? 0\r\n : this.taskGenerationRequest.requestedTaskCount *\r\n this.schedule.targetCollectionTimes.length *\r\n multiplier;\r\n }\r\n\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.PERCENTAGE\r\n ) {\r\n this.zonePercentageCount.zone1 = Math.round(\r\n this.taskGenerationRequest.requestedTaskCount *\r\n (this.zoneDistributions.zone1 / 100),\r\n );\r\n this.zonePercentageCount.zone2 = Math.round(\r\n this.taskGenerationRequest.requestedTaskCount *\r\n (this.zoneDistributions.zone2 / 100),\r\n );\r\n this.zonePercentageCount.zone3 = Math.round(\r\n this.taskGenerationRequest.requestedTaskCount *\r\n (this.zoneDistributions.zone3 / 100),\r\n );\r\n this.zonePercentageCount.zone4 = Math.round(\r\n this.taskGenerationRequest.requestedTaskCount *\r\n (this.zoneDistributions.zone4 / 100),\r\n );\r\n }\r\n\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ) {\r\n this.taskGenerationRequest.tasksToBeGenerated = Number.isNaN(this.zoneDistributions.sum)\r\n ? 0\r\n : this.zoneDistributions.sum *\r\n this.schedule.targetCollectionTimes.length *\r\n multiplier;\r\n }\r\n }\r\n\r\n updateSections() {\r\n let pausedOrLocked = this.isLocked || this.wasPausedAtLoad;\r\n\r\n let planTypesUsingSchedule = [PlanType.SCHEDULED];\r\n let planTypesUsingBlackout = [\r\n PlanType.SCHEDULED,\r\n PlanType.RISK_BASED_PRIORITY,\r\n PlanType.ADHOC,\r\n ];\r\n\r\n this.showMainSection = true;\r\n this.showCollectionTimesSection = true;\r\n this.showScheduleSection = pausedOrLocked\r\n ? false\r\n : planTypesUsingSchedule.includes(this.plan.planTypeId);\r\n this.showBlackoutSection = pausedOrLocked\r\n ? false\r\n : planTypesUsingBlackout.includes(this.plan.planTypeId);\r\n this.showRiskDistributionSection = pausedOrLocked\r\n ? false\r\n : this.plan.planTypeId === PlanType.RISK_BASED_PRIORITY;\r\n }\r\n\r\n generatePointBreakdowns(plan) {\r\n this.planPointRiskBreakdown = {};\r\n this.planPointZoneBreakdown = {};\r\n\r\n if (!plan) return;\r\n\r\n // get the count of the risk levels\r\n let riskLevels = plan?.points.map((p) => p.risk);\r\n this.planPointRiskBreakdown = riskLevels.reduce(\r\n (a, c) => ((a[c] = (a[c] || 0) + 1), a),\r\n Object.create(null),\r\n );\r\n\r\n let zones = plan?.points.map((p) => p.zone);\r\n this.planPointZoneBreakdown = zones.reduce(\r\n (a, c) => ((a[c] = (a[c] || 0) + 1), a),\r\n Object.create(null),\r\n );\r\n }\r\n\r\n activate(params) {\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.currentUser = this.securityService.getEffectiveUser();\r\n this.mapId = parseInt(params.mapId);\r\n let planId = parseInt(params.id);\r\n this.planCoverage.planId = planId;\r\n\r\n const [labs, planTypes, plan, timeZones] = await Promise.all([\r\n this.labService.getLabs(),\r\n this.planService.getPlanTypes(),\r\n this.planService.getPlan(planId),\r\n this.timeZoneService.getTimeZones(),\r\n ]);\r\n\r\n this.labs = labs;\r\n var lab = labs.find((l) => l.id === plan.labId);\r\n\r\n this.testMethodOptions = (\r\n await this.testMethodService.getTestMethods(plan.organizationId, {\r\n externalSource: lab.externalSource,\r\n })\r\n ).map((tm) => ({\r\n title: testMethodNameFormatting(\r\n tm,\r\n this.securityService.isImpersonating(),\r\n this.securityService.isWorkingUnderOrganization(),\r\n ),\r\n value: tm.id,\r\n }));\r\n\r\n this.planTypes = planTypes;\r\n this.plan = plan;\r\n this.timeZones = timeZones.map((tz) => ({ title: tz.displayName, value: tz.id }));\r\n this.pausedPointCount = this.plan.points.filter(\r\n (p) => p.isPausedPendingRemediation,\r\n ).length;\r\n\r\n const mapId = this.plan.mapId;\r\n\r\n // make sure this is the correct plan type\r\n if (\r\n this.plan.planTypeId !== PlanType.RISK_BASED_PRIORITY &&\r\n this.plan.planTypeId !== PlanType.ADHOC\r\n )\r\n this.router.navigateToRoute('plan-list', { mapId });\r\n\r\n this.generatePointBreakdowns(this.plan);\r\n\r\n // make sure that this plan isn't paused and is active -\r\n this.isLocked = !this.plan.isActive;\r\n this.wasPausedAtLoad = this.plan.isPaused;\r\n if (this.isLocked || this.wasPausedAtLoad)\r\n this.router.navigateToRoute('plan-list', { mapId });\r\n\r\n this.mapId = mapId;\r\n const schedule = new UiSchedule();\r\n schedule.loadViewFrom(this.plan.schedule);\r\n this.schedule = schedule;\r\n this.plan.schedule = this.schedule;\r\n\r\n this.initializeTaskRequest();\r\n this.updateSections();\r\n\r\n this.setupValidation();\r\n } catch (error) {\r\n this.logger.error('Error loading plan', error, { planId: params.id });\r\n\r\n await (error.apiErrorCode === 1\r\n ? this.dialogPresenter.showAlert(\r\n 'Error Loading Plan',\r\n 'The current plan does not exist.',\r\n )\r\n : this.dialogPresenter.showAlert(\r\n 'Error Loading Plan',\r\n 'An error occurred while loading the current plan. Please try again later.',\r\n ));\r\n\r\n const mapId = this.plan ? this.plan.mapId || this.mapId : this.mapId;\r\n if (mapId) this.router.navigateToRoute('plan-list', { mapId });\r\n }\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n deactivate() {\r\n this.requestedPointCountSubscription?.dispose();\r\n this.pointZoneDistributionMethodSubscription?.dispose();\r\n this.requestedPointCountZone1Subscription?.dispose();\r\n this.requestedPointCountZone2Subscription?.dispose();\r\n this.requestedPointCountZone3Subscription?.dispose();\r\n this.requestedPointCountZone4Subscription?.dispose();\r\n this.dateSelectionTypeSubscription?.dispose();\r\n this.quarterCountSubscription?.dispose();\r\n this.monthCountSubscription?.dispose();\r\n this.weekCountSubscription?.dispose();\r\n this.startDateSubscription?.dispose();\r\n this.endDateSubscription?.dispose();\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n setupValidation() {\r\n if (this.plan.planTypeId === PlanType.RISK_BASED_PRIORITY) {\r\n ValidationRules.ensure('high')\r\n .required()\r\n .ensure('medium')\r\n .required()\r\n .ensure('low')\r\n .required()\r\n .ensure('sum')\r\n .satisfies((r) => r === 100)\r\n .on(this.riskLevels);\r\n }\r\n\r\n let errorMessageRequestedTaskCount =\r\n 'Requested Task Count is required and must be greater than zero. ';\r\n if (this.plan.planTypeId === PlanType.RISK_BASED_PRIORITY)\r\n errorMessageRequestedTaskCount +=\r\n 'The requested task count can not exceed the number of points included in the plan.';\r\n\r\n ValidationRules.ensure((o: TaskGenerationRequest) => o.planId)\r\n .required()\r\n .ensure((o: TaskGenerationRequest) => o.startDate)\r\n .required()\r\n .ensure((o: TaskGenerationRequest) => o.endDate)\r\n .required()\r\n .when(\r\n () =>\r\n this.dateSelectionType === GenerateTasksDateSelectionType.DATE_RANGE ||\r\n this.dateSelectionType === GenerateTasksDateSelectionType.BY_QUARTER ||\r\n this.dateSelectionType === GenerateTasksDateSelectionType.BY_MONTH ||\r\n this.dateSelectionType === GenerateTasksDateSelectionType.BY_DAY,\r\n )\r\n .satisfies((endDate: Date, o: TaskGenerationRequest) => {\r\n if (!endDate || !o.startDate) return false;\r\n\r\n return (\r\n moment(o.endDate).isSame(o.startDate, 'day') ||\r\n moment(o.endDate).isAfter(o.startDate, 'day')\r\n );\r\n })\r\n .when(\r\n () =>\r\n this.dateSelectionType === GenerateTasksDateSelectionType.BY_QUARTER ||\r\n this.dateSelectionType === GenerateTasksDateSelectionType.BY_MONTH ||\r\n this.dateSelectionType === GenerateTasksDateSelectionType.DATE_RANGE ||\r\n this.dateSelectionType === GenerateTasksDateSelectionType.BY_DAY,\r\n )\r\n\r\n .ensure((o: TaskGenerationRequest) => o.requestedTaskCount)\r\n .required()\r\n .satisfies((taskCount) => {\r\n if (this.plan.planTypeId === PlanType.RISK_BASED_PRIORITY)\r\n return taskCount > 0 && taskCount <= this.plan.points.length;\r\n else return taskCount > 0;\r\n })\r\n .withMessage(errorMessageRequestedTaskCount)\r\n\r\n .on(this.taskGenerationRequest);\r\n\r\n let zoneOrPercentErrorMessage =\r\n 'Required when using count or percent method. Must be greater than 0. Percentages must be less than or equal to 100.';\r\n let zoneDoesNotHaveEnoughPointsErrorMessage =\r\n 'The plan does not include enough unique points in this zone to continue.';\r\n\r\n ValidationRules.ensure((o: any) => o.zone1)\r\n .satisfies((zoneValue) => this.validZoneOrPercent(zoneValue as number))\r\n .withMessage(zoneOrPercentErrorMessage)\r\n .satisfies((zoneValue) => this.planHasEnoughUniquePoints(zoneValue as number, 1))\r\n .withMessage(zoneDoesNotHaveEnoughPointsErrorMessage)\r\n\r\n .ensure((o: any) => o.zone2)\r\n .satisfies((zoneValue) => this.validZoneOrPercent(zoneValue as number))\r\n .withMessage(zoneOrPercentErrorMessage)\r\n .satisfies((zoneValue) => this.planHasEnoughUniquePoints(zoneValue as number, 2))\r\n .withMessage(zoneDoesNotHaveEnoughPointsErrorMessage)\r\n\r\n .ensure((o: any) => o.zone3)\r\n .satisfies((zoneValue) => this.validZoneOrPercent(zoneValue as number))\r\n .withMessage(zoneOrPercentErrorMessage)\r\n .satisfies((zoneValue) => this.planHasEnoughUniquePoints(zoneValue as number, 3))\r\n .withMessage(zoneDoesNotHaveEnoughPointsErrorMessage)\r\n\r\n .ensure((o: any) => o.zone4)\r\n .satisfies((zoneValue) => this.validZoneOrPercent(zoneValue as number))\r\n .withMessage(zoneOrPercentErrorMessage)\r\n .satisfies((zoneValue) => this.planHasEnoughUniquePoints(zoneValue as number, 4))\r\n .withMessage(zoneDoesNotHaveEnoughPointsErrorMessage)\r\n\r\n .ensure('sum')\r\n .satisfies((sum: number) => {\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n )\r\n return sum > 0;\r\n\r\n return true;\r\n })\r\n .withMessage('The sum of entries must be greater than 0.')\r\n\r\n .ensure('sum')\r\n .satisfies((sum: number) => {\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.PERCENTAGE\r\n )\r\n return (\r\n Number(this.taskGenerationRequest.requestedTaskCount) ===\r\n this.zonePercentageCount.sum\r\n );\r\n\r\n return true;\r\n })\r\n .withMessage(\r\n 'The sum of the points by zone percentage must equal the requested number of points.',\r\n )\r\n .on(this.zoneDistributions);\r\n\r\n ValidationRules.ensure((o: GenerateTasks) => o.weekCount)\r\n .required()\r\n .min(1)\r\n .max(52)\r\n .when(() => this.dateSelectionType === GenerateTasksDateSelectionType.BY_WEEK)\r\n .ensure((o: GenerateTasks) => o.monthCount)\r\n .required()\r\n .min(1)\r\n .max(12)\r\n .when(() => this.dateSelectionType === GenerateTasksDateSelectionType.BY_MONTH)\r\n .ensure((o: GenerateTasks) => o.quarterCount)\r\n .required()\r\n .min(1)\r\n .max(4)\r\n .when(() => this.dateSelectionType === GenerateTasksDateSelectionType.BY_QUARTER)\r\n .on(this);\r\n }\r\n\r\n validZoneOrPercent(zoneValue) {\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE\r\n )\r\n return true;\r\n\r\n if (zoneValue === null || zoneValue === undefined) return false;\r\n\r\n let countOrPercent: number = Number.parseInt(zoneValue);\r\n if (countOrPercent === null) return false;\r\n\r\n let maxValue =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ? this.zoneDistributionMax\r\n : 100;\r\n\r\n return countOrPercent >= 0 && countOrPercent <= maxValue;\r\n }\r\n\r\n // eslint-disable-next-line sonarjs/cognitive-complexity\r\n planHasEnoughUniquePoints(zoneValue, zone: number) {\r\n if (\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.NOT_APPLICABLE\r\n )\r\n return true;\r\n\r\n if (zoneValue === null || zoneValue === undefined) return false;\r\n\r\n let countOrPercent: number = Number.parseInt(zoneValue);\r\n if (countOrPercent === null) return false;\r\n\r\n let zonePointCount = 0;\r\n let zonePointMax = 0;\r\n switch (zone) {\r\n case 1:\r\n zonePointCount =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ? countOrPercent\r\n : this.zonePercentageCount.zone1;\r\n zonePointMax =\r\n this.planPointZoneBreakdown[1] !== undefined\r\n ? this.planPointZoneBreakdown[1]\r\n : 0;\r\n break;\r\n\r\n case 2:\r\n zonePointCount =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ? countOrPercent\r\n : this.zonePercentageCount.zone2;\r\n zonePointMax =\r\n this.planPointZoneBreakdown[2] !== undefined\r\n ? this.planPointZoneBreakdown[2]\r\n : 0;\r\n break;\r\n\r\n case 3:\r\n zonePointCount =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ? countOrPercent\r\n : this.zonePercentageCount.zone3;\r\n zonePointMax =\r\n this.planPointZoneBreakdown[3] !== undefined\r\n ? this.planPointZoneBreakdown[3]\r\n : 0;\r\n break;\r\n\r\n case 4:\r\n zonePointCount =\r\n this.taskGenerationRequest.pointZoneDistributionMethod ===\r\n GenerateTasksPointZoneDistributionMethod.DISCRETE\r\n ? countOrPercent\r\n : this.zonePercentageCount.zone4;\r\n zonePointMax =\r\n this.planPointZoneBreakdown[4] !== undefined\r\n ? this.planPointZoneBreakdown[4]\r\n : 0;\r\n break;\r\n }\r\n\r\n return countOrPercent >= 0 && zonePointCount <= zonePointMax;\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n blackoutDateChanged() {\r\n if (!this.blackoutDate) return;\r\n\r\n let blackoutDate = moment\r\n .utc([\r\n this.blackoutDate.getFullYear(),\r\n this.blackoutDate.getMonth(),\r\n this.blackoutDate.getDate(),\r\n 0,\r\n ])\r\n .toDate();\r\n\r\n if (!this.taskGenerationRequest.blackoutDates)\r\n this.taskGenerationRequest.blackoutDates = [];\r\n\r\n if (\r\n !this.taskGenerationRequest.blackoutDates.some(\r\n (d) => d.getTime() === blackoutDate.getTime(),\r\n )\r\n ) {\r\n this.taskGenerationRequest.blackoutDates.push(blackoutDate);\r\n this.taskGenerationRequest.blackoutDates.sort((a, b) => a.getTime() - b.getTime());\r\n }\r\n\r\n setTimeout(() => {\r\n this.blackoutDate = null;\r\n });\r\n }\r\n\r\n removeBlackoutDate(dateToRemove) {\r\n this.taskGenerationRequest.blackoutDates.splice(\r\n this.taskGenerationRequest.blackoutDates.indexOf(dateToRemove),\r\n 1,\r\n );\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('plan-list', { mapId: this.plan.mapId });\r\n }\r\n\r\n async save() {\r\n if (this.dateSelectionType === GenerateTasksDateSelectionType.SINGLE_DATE)\r\n this.taskGenerationRequest.endDate = this.taskGenerationRequest.startDate;\r\n\r\n var aggregateResult = await this.validationController.validate();\r\n if (!aggregateResult.valid) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n // the db sees all point zone distribution methods as 'Discrete'\r\n let request = this.prepareTaskRequestForSubmission(this.taskGenerationRequest);\r\n await this.taskGenerationRequestService.submit(request);\r\n\r\n // set the local view back to what the client selected.\r\n request.pointZoneDistributionMethod = this.taskGenerationRequest\r\n .pointZoneDistributionMethod as GenerateTasksPointZoneDistributionMethod;\r\n request.pointZoneDistributions = TaskGenerationZoneDistribution.createAllZonesForUI(\r\n request.pointZoneDistributionMethod,\r\n this.zoneDistributions,\r\n this.zonePercentageCount,\r\n );\r\n\r\n let clientSettings = TaskGenerationClientSettings.fromTaskGenerationRequest(\r\n request,\r\n this.dateSelectionType,\r\n );\r\n this.taskGenerationRequestService.savePlanSettings(this.plan.id, clientSettings);\r\n\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Task Generation Request submitted successfully.');\r\n\r\n this.router.navigateToRoute('plan-list', { mapId: this.plan.mapId });\r\n } catch (error) {\r\n this.logger.error('Error saving plan.', error, { plan: this.plan });\r\n this.dialogPresenter.showAlert(\r\n 'Error Generating Tasks',\r\n this.getApiErrorMessage(error.apiErrorCode),\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode: number) {\r\n let message =\r\n 'An error occurred while submitting a task generation request. Please try again later.';\r\n\r\n switch (errorCode) {\r\n case 1202:\r\n message =\r\n 'No points matched your request. Please update the settings and try again later.';\r\n break;\r\n\r\n case 1203:\r\n message =\r\n 'No points matched the specified risk levels. Please update the settings and try again later.';\r\n break;\r\n\r\n case 1204:\r\n message =\r\n 'No matching points for the zone criteria that was specified. Please update the settings and try again later.';\r\n break;\r\n }\r\n\r\n return message;\r\n }\r\n\r\n exportChartData($event: any) {\r\n const {\r\n detail: { coverageType },\r\n } = $event;\r\n const planCoverageType = toPlanCoverageType(coverageType);\r\n const start = moment(this.planCoverage.taskTargetDateTimeStart).utc().toISOString();\r\n const end = moment(this.planCoverage.taskTargetDateTimeEnd).utc().toISOString();\r\n try {\r\n const url = this.planService.exportPlanCoveragePoints(\r\n this.plan.id,\r\n planCoverageType,\r\n start,\r\n end,\r\n );\r\n window.location.href = url;\r\n } catch (error) {\r\n this.logger.error('Error exporting plan points.', error, { plan: this.plan });\r\n this.dialogPresenter.showAlert('Error Exporting Plan Points', error.message);\r\n }\r\n }\r\n}\r\n","module.exports = \"\";","import { autoinject, bindable } from 'aurelia-framework';\r\nimport Chart from 'chart.js';\r\nimport PlanCoverage from './plan-coverage';\r\nimport { planCoverageTypes } from './plan-coverage-type';\r\n\r\n@autoinject\r\nexport class PlanCoveragePieChart {\r\n @bindable chartData: PlanCoverage;\r\n chartCanvas: any;\r\n chart: any;\r\n\r\n constructor(private element: Element) {\r\n }\r\n\r\n chartDataChanged() {\r\n this.applyChartData();\r\n }\r\n\r\n\r\n handleChartClick(coverageType: string) {\r\n const event = new CustomEvent('handle-chart-click', {\r\n detail: { coverageType },\r\n bubbles: true,\r\n });\r\n\r\n this.element.dispatchEvent(event);\r\n }\r\n\r\n attached() {\r\n this.chartCanvas = this.element.querySelector('canvas');\r\n this.chart = new Chart(this.chartCanvas.getContext('2d'), {\r\n type: 'pie',\r\n options: {\r\n legend: {\r\n display: true,\r\n position: 'bottom',\r\n },\r\n onClick: (e: PointerEvent, chartElements: any[]) => {\r\n const { _model: { label }} = chartElements[0];\r\n this.handleChartClick(label);\r\n }\r\n },\r\n });\r\n this.applyChartData();\r\n }\r\n\r\n applyChartData() {\r\n if (!this.chartData || !this.chart) {\r\n return;\r\n }\r\n\r\n this.chart.data = {\r\n labels: [\r\n planCoverageTypes.Collected,\r\n planCoverageTypes.Scheduled,\r\n planCoverageTypes.CollectedAndScheduled,\r\n planCoverageTypes.Unused\r\n ],\r\n datasets: [{\r\n data: [\r\n this.chartData.collectedCount,\r\n this.chartData.scheduledCount,\r\n this.chartData.collectedAndScheduledCount,\r\n this.chartData.unusedCount,\r\n ],\r\n backgroundColor: [\r\n '#1a9869',\r\n '#b6d825',\r\n '#e16127',\r\n '#cc2350',\r\n ]\r\n }]\r\n };\r\n\r\n this.chart.update();\r\n }\r\n\r\n detached() {\r\n if (this.chart) {\r\n this.chart.destroy();\r\n }\r\n }\r\n}\r\n","module.exports = \"\";","import { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, BindingEngine, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport {\r\n validateTrigger,\r\n ValidationController,\r\n ValidationControllerFactory,\r\n ValidationRules,\r\n} from 'aurelia-validation';\r\nimport { getTimeOptions } from 'infrastructure/components/time-selector';\r\nimport DialogPresenter from 'infrastructure/dialogs/dialog-presenter';\r\nimport Logger from 'infrastructure/logger';\r\nimport PageContext from 'infrastructure/page-context';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport TimeZoneService from 'infrastructure/time-zone-service';\r\nimport Lab from 'labs/lab';\r\nimport LabService from 'labs/lab-service';\r\nimport {\r\n getCollectionTypeOptions,\r\n planTypeIdToCollectionTypes,\r\n} from 'location-testing/collection-type';\r\nimport moment from 'moment';\r\nimport SecurityService from 'security/security-service';\r\nimport TestMethodService from 'test-methods/test-method-service';\r\nimport MapService from '../maps/map-service';\r\nimport operationsTimingOptions from '../operations-timing-options';\r\nimport PointAttributeService from '../point-attributes/point-attribute-service.js';\r\nimport PointSelectorFilter from '../point-selector-filter';\r\nimport PointService from '../points/point-service';\r\nimport RemediationService from '../remediations/remediation-service';\r\nimport Plan from './plan';\r\nimport PlanService from './plan-service';\r\nimport PlanType from './plan-type';\r\nimport TaskDistributionMethod from './task-distribution-method';\r\nimport UiSchedule from './ui-schedule';\r\nimport { testMethodNameFormatting } from 'test-methods/test-method-helper';\r\n\r\n@autoinject\r\nexport class PlanDetail {\r\n @observable selectedTargetCollectionTime: any;\r\n @observable blackoutDate: any;\r\n\r\n validationController: ValidationController;\r\n\r\n // filters\r\n applyFiltersSubscription: Subscription;\r\n clearFiltersSubscription: Subscription;\r\n\r\n // subscriptions\r\n planLabIdChangedSubscription: Subscription;\r\n taskDistributionMethodSubscription: Subscription;\r\n planTypeSubscription: Subscription;\r\n\r\n // Security\r\n canEditPlans: boolean;\r\n canViewAudit: boolean;\r\n currentUser: any;\r\n\r\n organizationId: any;\r\n mapId: number;\r\n remediationId: any;\r\n plan: Plan;\r\n schedule: UiSchedule;\r\n recordChanges: any;\r\n pausedPointCount: number;\r\n\r\n planTypes: any;\r\n labs: Lab[];\r\n testMethods: any;\r\n points: any;\r\n remediations: any;\r\n timeZones: any;\r\n operationsTimingOptions: any;\r\n pointAttributes: any;\r\n collectionTypeOptions: SelectorOption[];\r\n\r\n @observable view: 'default' | 'edit-points';\r\n isPaused: boolean;\r\n wasPausedAtLoad: boolean;\r\n isLocked: boolean;\r\n propertyDisplayNames: any;\r\n timeCaptions: any;\r\n scheduleMinDate: Date;\r\n canEditStartDate: boolean;\r\n targetCollectionTimesInvalid: boolean;\r\n\r\n formChanged: boolean;\r\n planPointSelectorViewModel: any;\r\n showScheduleSection: boolean;\r\n showCollectionTimesSection: boolean;\r\n showBlackoutSection: boolean;\r\n selectedOnly: boolean;\r\n\r\n taskDistributionMethodWeekBased = TaskDistributionMethod.WEEK_BASED;\r\n taskDistributionMethodEven = TaskDistributionMethod.EVEN;\r\n taskDistributionMethodRandom = TaskDistributionMethod.RANDOM;\r\n\r\n constructor(\r\n private router: Router,\r\n private eventAggregator: EventAggregator,\r\n private bindingEngine: BindingEngine,\r\n validationControllerFactory: ValidationControllerFactory,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private timeZoneService: TimeZoneService,\r\n private mapService: MapService,\r\n private pointService: PointService,\r\n private remediationService: RemediationService,\r\n private planService: PlanService,\r\n private testMethodService: TestMethodService,\r\n private filters: PointSelectorFilter,\r\n private pointAttributeService: PointAttributeService,\r\n private labService: LabService,\r\n ) {\r\n this.validationController = validationControllerFactory.createForCurrentScope();\r\n this.validationController.validateTrigger = validateTrigger.change;\r\n\r\n this.logger.name = 'plan-detail';\r\n\r\n this.canEditPlans =\r\n this.securityService.hasPermission('EditPlans') &&\r\n !this.securityService.isImpersonating();\r\n this.canViewAudit =\r\n this.securityService.isCurrentUserInternal() && this.securityService.isImpersonating();\r\n\r\n this.isLocked = false;\r\n this.wasPausedAtLoad = false;\r\n this.showScheduleSection = false;\r\n this.showCollectionTimesSection = false;\r\n this.showBlackoutSection = false;\r\n\r\n this.operationsTimingOptions = operationsTimingOptions;\r\n this.collectionTypeOptions = getCollectionTypeOptions();\r\n\r\n this.propertyDisplayNames = {\r\n Name: 'Name',\r\n Description: 'Description',\r\n PlanType: 'Plan Type',\r\n Remediation: 'Remediation',\r\n Schedule: 'Schedule',\r\n IsActive: 'Active',\r\n IsPaused: 'Paused',\r\n };\r\n\r\n this.timeCaptions = getTimeOptions().reduce((mapping, time) => {\r\n mapping[time.value] = time.title;\r\n return mapping;\r\n }, {});\r\n\r\n this.view = 'default';\r\n\r\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\r\n this.handleClearFilters = this.handleClearFilters.bind(this);\r\n }\r\n\r\n viewChanged() {\r\n if (this.view === 'edit-points')\r\n this.planPointSelectorViewModel?.resetView(this.pointAttributes);\r\n }\r\n\r\n async loadTestMethods() {\r\n if (!this.plan?.labId) return;\r\n\r\n var lab = this.labs.find((l) => l.id === this.plan.labId);\r\n var testMethods = await this.testMethodService.getTestMethods(this.organizationId, {\r\n externalSource: lab.externalSource,\r\n });\r\n this.testMethods = testMethods.map((tm) => {\r\n tm.title = testMethodNameFormatting(\r\n tm,\r\n this.securityService.isImpersonating(),\r\n this.securityService.isWorkingUnderOrganization(),\r\n );\r\n return tm;\r\n });\r\n \r\n }\r\n\r\n handlePlanLabIdChanged(labId, oldLabId) {\r\n if (!this.plan) return;\r\n\r\n var lab = this.labs.find((l) => l.id === labId);\r\n var oldLab = this.labs.find((l) => l.id === oldLabId);\r\n\r\n if (lab?.externalSource !== oldLab?.externalSource) {\r\n this.loadTestMethods();\r\n this.plan.testMethods = [];\r\n }\r\n }\r\n\r\n handlePlanTypeLevelChanged() {\r\n if (!this.plan) return;\r\n\r\n this.collectionTypeOptions = planTypeIdToCollectionTypes(this.plan.planTypeId);\r\n this.plan.collectionType = null;\r\n this.updateSections();\r\n }\r\n\r\n async handleTaskDistributionMethodChanged() {\r\n if (!this.schedule) return;\r\n\r\n if (this.schedule.taskDistributionMethod == TaskDistributionMethod.WEEK_BASED)\r\n this.schedule.skipDays = 0;\r\n\r\n await this.validationController.validate();\r\n }\r\n\r\n updateSections() {\r\n let planTypesUsingSchedule = [PlanType.SCHEDULED];\r\n this.showScheduleSection = planTypesUsingSchedule.includes(this.plan.planTypeId);\r\n\r\n let planTypesUsingCollectionTimes = [\r\n PlanType.SCHEDULED,\r\n PlanType.RISK_BASED_PRIORITY,\r\n PlanType.ADHOC,\r\n ];\r\n this.showCollectionTimesSection = planTypesUsingCollectionTimes.includes(\r\n this.plan.planTypeId,\r\n );\r\n\r\n let planTypesUsingBlackout = [\r\n PlanType.SCHEDULED,\r\n PlanType.RISK_BASED_PRIORITY,\r\n PlanType.ADHOC,\r\n ];\r\n this.showBlackoutSection = planTypesUsingBlackout.includes(this.plan.planTypeId);\r\n }\r\n\r\n async handleApplyFilters() {\r\n await this.planPointSelectorViewModel.updateGridPoints();\r\n }\r\n\r\n handleClearFilters() {\r\n this.filters.reset();\r\n this.planPointSelectorViewModel.updateGridPoints();\r\n }\r\n\r\n activate(params) {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.apply',\r\n this.handleApplyFilters,\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.clear',\r\n this.handleClearFilters,\r\n );\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.currentUser = this.securityService.getEffectiveUser();\r\n this.mapId = parseInt(params.mapId);\r\n this.remediationId = params.remediationId;\r\n\r\n var results = await Promise.all([\r\n this.planService.getPlanTypes(),\r\n params.id === 'create'\r\n ? Promise.resolve({\r\n mapId: this.mapId,\r\n isActive: true,\r\n remediationId: this.remediationId,\r\n planType: PlanType.DISCRETIONARY,\r\n points: [],\r\n })\r\n : this.planService.getPlan(parseInt(params.id)),\r\n this.timeZoneService.getTimeZones(),\r\n ]);\r\n\r\n this.planTypes = results[0];\r\n\r\n this.plan = results[1];\r\n if (params.id !== 'create') this.mapId = this.plan.mapId;\r\n\r\n this.pausedPointCount = this.plan.points.filter(\r\n (p) => p.isPausedPendingRemediation,\r\n ).length;\r\n this.isLocked = !this.plan.isActive;\r\n\r\n this.timeZones = results[2].map((tz) => ({ title: tz.displayName, value: tz.id }));\r\n\r\n const [remediations, points, map, pointAttributes, labs] = (await Promise.all([\r\n this.remediationService.getRemediations({ mapId: this.plan.mapId }),\r\n this.pointService.getPoints({ mapIds: [this.plan.mapId] }),\r\n this.mapService.getMap(this.plan.mapId),\r\n this.pointAttributeService.getPointAttributes(),\r\n this.labService.getLabs(),\r\n ])) as any;\r\n\r\n this.organizationId = map.organizationId;\r\n this.remediations = remediations.filter((p) => p.isActive);\r\n this.points = points.filter((p) => p.isActive);\r\n this.labs = labs;\r\n\r\n await this.loadTestMethods();\r\n this.pointAttributes = pointAttributes;\r\n\r\n this.schedule = new UiSchedule();\r\n this.schedule.loadViewFrom(this.plan.schedule);\r\n this.canEditStartDate =\r\n params.id === 'create' ||\r\n (this.plan.planTypeId === PlanType.SCHEDULED &&\r\n new Date(this.plan.schedule.startDateView).getTime() >\r\n new Date().getTime());\r\n\r\n this.wasPausedAtLoad = this.plan.isPaused;\r\n\r\n if (this.plan.id) this.updateSections();\r\n\r\n this.setupValidation();\r\n\r\n this.planLabIdChangedSubscription = this.bindingEngine\r\n .propertyObserver(this.plan, 'labId')\r\n .subscribe(this.handlePlanLabIdChanged.bind(this));\r\n\r\n this.planTypeSubscription = this.bindingEngine\r\n .propertyObserver(this.plan, 'planTypeId')\r\n .subscribe(this.handlePlanTypeLevelChanged.bind(this));\r\n\r\n this.taskDistributionMethodSubscription = this.bindingEngine\r\n .propertyObserver(this.schedule, 'taskDistributionMethod')\r\n .subscribe(this.handleTaskDistributionMethodChanged.bind(this));\r\n } catch (error) {\r\n this.logger.error('Error loading plan', error, { planId: params.id });\r\n\r\n await (error.apiErrorCode === 1\r\n ? this.dialogPresenter.showAlert(\r\n 'Error Loading Plan',\r\n 'The current plan doesn\\'t exist.',\r\n )\r\n : this.dialogPresenter.showAlert(\r\n 'Error Loading Plan',\r\n 'An error occurred while loading the current plan. Please try again later.',\r\n ));\r\n\r\n const mapId = this.plan ? this.plan.mapId || this.mapId : this.mapId;\r\n if (mapId) this.router.navigateToRoute('plan-list', { mapId });\r\n }\r\n this.pageContext.isLoading = false;\r\n })();\r\n }\r\n\r\n deactivate() {\r\n this.planLabIdChangedSubscription?.dispose();\r\n this.planTypeSubscription?.dispose();\r\n this.taskDistributionMethodSubscription?.dispose();\r\n\r\n this.applyFiltersSubscription?.dispose();\r\n this.clearFiltersSubscription?.dispose();\r\n }\r\n\r\n setupValidation() {\r\n ValidationRules.ensure('name')\r\n .required()\r\n .ensure('planTypeId')\r\n .required()\r\n .ensure('labId')\r\n .required()\r\n .ensure('collectionType')\r\n .required()\r\n .on(this.plan);\r\n\r\n ValidationRules.ensure('startDateView')\r\n .required()\r\n .satisfies((value, o: any) => {\r\n if (\r\n this.plan.planTypeId === PlanType.SCHEDULED &&\r\n o.taskDistributionMethod === TaskDistributionMethod.WEEK_BASED\r\n )\r\n return moment(value).weekday() === 1; // must start on a Monday\r\n\r\n return true;\r\n })\r\n .ensure('endDateView')\r\n .satisfies((value, o: any) => {\r\n // End date is optional\r\n if (value === null || value === '' || value === undefined) return true;\r\n\r\n if (\r\n this.plan.planTypeId === PlanType.SCHEDULED &&\r\n value.setHours(0, 0, 0, 0) >=\r\n new Date(this.schedule.startDate).setHours(0, 0, 0, 0)\r\n )\r\n return moment(value).isValid();\r\n\r\n return false;\r\n })\r\n .ensure('startTime')\r\n .required()\r\n .ensure('endTime')\r\n .required()\r\n .satisfies((v, o: any) => {\r\n if (!v || !o.startTime) return false;\r\n const endTime = parseInt(v.replace(':', ''));\r\n const startTime = parseInt(o.startTime.replace(':', ''));\r\n return endTime > startTime;\r\n })\r\n .ensure('cycleDurationDays')\r\n .required()\r\n .satisfies((value, o: any) => {\r\n if (\r\n this.plan.planTypeId === PlanType.SCHEDULED &&\r\n o.taskDistributionMethod === TaskDistributionMethod.WEEK_BASED\r\n )\r\n return value % 7 === 0 && value > 0;\r\n\r\n return value > 0;\r\n })\r\n .ensure('frequencyMinutes')\r\n .required()\r\n .ensure('skipDays')\r\n .required()\r\n .satisfies((value, o: any) => {\r\n let skipDays = typeof value === 'string' ? parseInt(value) : value;\r\n if (\r\n this.plan.planTypeId === PlanType.SCHEDULED &&\r\n o.taskDistributionMethod === TaskDistributionMethod.WEEK_BASED\r\n )\r\n return skipDays === 0;\r\n\r\n return skipDays >= 0;\r\n })\r\n .ensure('targetCollectionTimes')\r\n .satisfies((targetCollectionTimes) => {\r\n return !!targetCollectionTimes.length;\r\n })\r\n .on(this.schedule);\r\n }\r\n\r\n handleFormChange() {\r\n this.formChanged = true;\r\n }\r\n\r\n selectedTargetCollectionTimeChanged() {\r\n if (!this.selectedTargetCollectionTime) return;\r\n\r\n if (!this.schedule.targetCollectionTimes) this.schedule.targetCollectionTimes = [];\r\n\r\n if (\r\n this.schedule.targetCollectionTimes.find(\r\n (t) => t.time === this.selectedTargetCollectionTime,\r\n )\r\n ) {\r\n setTimeout(() => {\r\n this.selectedTargetCollectionTime = null;\r\n });\r\n return;\r\n }\r\n\r\n this.schedule.targetCollectionTimes.push({\r\n time: this.selectedTargetCollectionTime,\r\n operationsTiming: 'NotSpecified',\r\n });\r\n\r\n this.schedule.targetCollectionTimes.sort(function (b, a) {\r\n var bParts = b.time.split(':').map((n) => parseInt(n));\r\n var aParts = a.time.split(':').map((n) => parseInt(n));\r\n\r\n if (bParts[0] > aParts[0]) return 1;\r\n\r\n if (bParts[0] < aParts[0]) return -1;\r\n\r\n if (bParts[1] > aParts[1]) return 1;\r\n\r\n return -1;\r\n });\r\n\r\n setTimeout(() => {\r\n this.selectedTargetCollectionTime = null;\r\n });\r\n }\r\n\r\n removeTargetCollectionTime(targetCollectionTimeToRemove) {\r\n this.schedule.targetCollectionTimes.splice(\r\n this.schedule.targetCollectionTimes.indexOf(targetCollectionTimeToRemove),\r\n 1,\r\n );\r\n }\r\n\r\n blackoutDateChanged() {\r\n if (!this.blackoutDate) return;\r\n\r\n let blackoutDate = moment\r\n .utc([\r\n this.blackoutDate.getFullYear(),\r\n this.blackoutDate.getMonth(),\r\n this.blackoutDate.getDate(),\r\n 0,\r\n ])\r\n .toDate();\r\n\r\n if (!this.schedule.blackoutDatesView.some((d) => d.getTime() === blackoutDate.getTime())) {\r\n const blackoutDates = this.schedule.blackoutDatesView;\r\n blackoutDates.push(blackoutDate);\r\n this.schedule.blackoutDatesView = blackoutDates;\r\n this.schedule.blackoutDatesView.sort((a, b) => a.getTime() - b.getTime());\r\n }\r\n\r\n setTimeout(() => {\r\n this.blackoutDate = null;\r\n });\r\n }\r\n\r\n removeBlackoutDate(dateToRemove) {\r\n this.schedule.blackoutDatesView.splice(\r\n this.schedule.blackoutDatesView.indexOf(dateToRemove),\r\n 1,\r\n );\r\n }\r\n\r\n cancel() {\r\n this.formChanged = false;\r\n this.router.navigateToRoute('plan-list', { mapId: this.plan.mapId || this.mapId });\r\n }\r\n\r\n async save() {\r\n var aggregateResult = await this.validationController.validate();\r\n\r\n var targetCollectionTimesValidationResult = aggregateResult.results.find(\r\n (r) => r.propertyName === 'targetCollectionTimes',\r\n );\r\n this.targetCollectionTimesInvalid =\r\n targetCollectionTimesValidationResult && !targetCollectionTimesValidationResult.valid;\r\n\r\n if (!aggregateResult.valid) return;\r\n\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n if (\r\n !this.plan.isActive &&\r\n !(await this.dialogPresenter.showConfirmation(\r\n 'Warning',\r\n 'Once a Plan is deactivated, it cannot be reactivated. Are you sure you want to deactivate this plan?',\r\n 'Yes',\r\n 'No',\r\n ))\r\n ) {\r\n this.pageContext.isLoading = false;\r\n return;\r\n }\r\n\r\n if (this.plan.planTypeId === PlanType.DISCRETIONARY) {\r\n delete this.plan.schedule;\r\n this.schedule = new UiSchedule();\r\n }\r\n\r\n this.plan.schedule = this.schedule.toEntity();\r\n this.isPaused = this.wasPausedAtLoad;\r\n let updatedPlan = (await this.planService.savePlan(this.plan)) as any;\r\n this.plan.id = updatedPlan.id;\r\n this.wasPausedAtLoad = this.plan.isPaused;\r\n this.formChanged = false;\r\n this.pageContext.showSuccessOverlay('Plan saved successfully.');\r\n\r\n if (!this.plan.isActive)\r\n this.router.navigateToRoute('plan-list', { mapId: this.plan.mapId || this.mapId });\r\n else\r\n this.router.navigateToRoute('plan-detail', { id: this.plan.id }, { replace: true });\r\n } catch (error) {\r\n this.logger.error('Error saving plan.', error, { plan: this.plan });\r\n this.dialogPresenter.showAlert(\r\n 'Error Saving Plan',\r\n this.getApiErrorMessage(error.apiErrorCode),\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n\r\n getApiErrorMessage(errorCode) {\r\n if (errorCode === 800)\r\n return 'The specified plan name is already in use. Please change the plan name.';\r\n\r\n return 'An error occurred while saving the current plan. Please try again later.';\r\n }\r\n\r\n async loadRecordChanges() {\r\n try {\r\n this.pageContext.isLoading = true;\r\n this.recordChanges = await this.planService.getPlanRecordChanges(this.plan.id);\r\n } catch (error) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Plan Audit',\r\n 'An error occurred while loading the current plan audit. Please try again later.',\r\n );\r\n }\r\n\r\n this.pageContext.isLoading = false;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject, observable } from 'aurelia-framework';\r\nimport { Router } from 'aurelia-router';\r\nimport SelectorOption from 'infrastructure/selector-option';\r\nimport CollectionType, {\r\n getCollectionTypeOptions,\r\n toCollectionTypeTitle,\r\n} from 'location-testing/collection-type';\r\nimport RecordStatus, { getRecordStatusOptions } from 'record-status';\r\nimport CompareUtility from '../../infrastructure/compare-utility';\r\nimport DialogPresenter from '../../infrastructure/dialogs/dialog-presenter';\r\nimport Logger from '../../infrastructure/logger';\r\nimport PageContext from '../../infrastructure/page-context';\r\nimport SecurityService from '../../security/security-service';\r\nimport PlanService from './plan-service';\r\nimport PlanType from './plan-type';\r\n\r\n@autoinject\r\nexport class PlanList {\r\n @observable filterText;\r\n @observable selectedPlanTypes;\r\n @observable selectedPausedStates;\r\n\r\n // filters\r\n applyFiltersSubscription: Subscription;\r\n clearFiltersSubscription: Subscription;\r\n\r\n recordStatusOptions: SelectorOption[];\r\n selectedRecordStatuses: RecordStatus[];\r\n collectionTypeOptions: SelectorOption[];\r\n selectedCollectionTypes: SelectorOption[];\r\n\r\n allSelected: boolean;\r\n selectedActivePlans: any[];\r\n\r\n // filter status\r\n isFilteringPlanTypes: boolean;\r\n isFilteringPausedStates: boolean;\r\n isFilteringRecords: boolean;\r\n isFilteringCollectionType: boolean;\r\n filterRecordStatusState: string;\r\n\r\n // data\r\n mapId: any;\r\n plans: any;\r\n plansView: any;\r\n planTypes: any;\r\n\r\n // ui\r\n gridOptions: any;\r\n\r\n // security\r\n canEditPlans: boolean;\r\n canGenerateTasks: boolean;\r\n canDeletePlans: boolean;\r\n\r\n constructor(\r\n private router: Router,\r\n private eventAggregator: EventAggregator,\r\n private logger: Logger,\r\n private pageContext: PageContext,\r\n private dialogPresenter: DialogPresenter,\r\n private securityService: SecurityService,\r\n private planService: PlanService,\r\n ) {\r\n this.logger.name = 'plan-list';\r\n\r\n this.selectedPlanTypes = [];\r\n this.selectedPausedStates = [];\r\n this.collectionTypeOptions = getCollectionTypeOptions();\r\n this.selectedCollectionTypes = [];\r\n\r\n this.gridOptions = {\r\n columnDefs: [\r\n {\r\n suppressMenu: true,\r\n template:\r\n '',\r\n headerCellTemplate:\r\n '',\r\n headerClass: 'checkbox',\r\n width: 80,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n pinned: 'left',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Plan Name',\r\n field: 'name',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 150,\r\n sort: 'asc',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Remediation',\r\n field: 'remediationName',\r\n comparator: CompareUtility.compareStringsInsensitive,\r\n width: 150,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Plan Type',\r\n field: 'planTypeId',\r\n template: '${decodePlanType(data.planTypeId)}',\r\n width: 155,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-left',\r\n suppressSizeToFit: true,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Collection Type',\r\n field: 'collectionType',\r\n template: '${decodeCollectionType(data.collectionType)}',\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-left',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Cycle Duration (Days)',\r\n field: 'scheduleCycleDurationDays',\r\n template:\r\n '${decodeCycleDays(data.planTypeId, data.scheduleCycleDurationDays)}',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Test Methods',\r\n field: 'testMethodCount',\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Sample Points',\r\n field: 'pointCount',\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Open Tasks',\r\n field: 'openTaskCount',\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Unassigned Tasks',\r\n field: 'unassignedTaskCount',\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Paused',\r\n field: 'isPaused',\r\n template: '',\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: 'Active',\r\n field: 'isActive',\r\n template: '',\r\n width: 120,\r\n headerClass: 'text-center',\r\n cellClass: 'medium-text-center',\r\n suppressSizeToFit: true,\r\n },\r\n {\r\n suppressMenu: true,\r\n headerName: '',\r\n template: `\r\n \r\n `,\r\n cellClass: 'medium-text-right row-actions',\r\n headerCellTemplate: '',\r\n headerClass: 'row-actions',\r\n width: 150,\r\n sortable: false,\r\n suppressSizeToFit: true,\r\n },\r\n ],\r\n defaultColDef: { sortable: true, resizable: true },\r\n };\r\n\r\n this.allSelected = false;\r\n this.selectedActivePlans = [];\r\n this.selectedRecordStatuses = [RecordStatus.ACTIVE];\r\n this.canEditPlans =\r\n this.securityService.hasPermission('EditPlans') &&\r\n !this.securityService.isImpersonating();\r\n this.canDeletePlans = this.securityService.hasPermission('DeletePlans');\r\n\r\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\r\n this.handleClearFilters = this.handleClearFilters.bind(this);\r\n }\r\n\r\n decodePlanType(planTypeId: number) {\r\n return this.planTypes.find((t) => t.id === planTypeId).token;\r\n }\r\n\r\n decodeCycleDays(planTypeId: number, scheduleCycleDays: number) {\r\n return planTypeId === PlanType.SCHEDULED ? scheduleCycleDays.toString() : '';\r\n }\r\n\r\n decodeCollectionType(collectionType: CollectionType): string {\r\n return toCollectionTypeTitle(collectionType);\r\n }\r\n\r\n navigateToPlanDetail(id) {\r\n this.router.navigateToRoute('plan-detail', { id });\r\n }\r\n\r\n navigateToGenerateTasks(id) {\r\n this.router.navigateToRoute('plan-generate-tasks', { id });\r\n }\r\n\r\n setSelectedActivePlans() {\r\n this.selectedActivePlans = this.plansView.filter(\r\n (plan) => plan.isSelected && plan.isActive,\r\n );\r\n this.canGenerateTasks =\r\n this.selectedActivePlans.length === 1 &&\r\n (this.selectedActivePlans[0].planTypeId === PlanType.RISK_BASED_PRIORITY ||\r\n this.selectedActivePlans[0].planTypeId === PlanType.ADHOC) &&\r\n this.selectedActivePlans[0].pointCount > 0;\r\n }\r\n\r\n isSelectedChanged() {\r\n this.allSelected = this.plansView.every((plan) => plan.isSelected);\r\n this.setSelectedActivePlans();\r\n }\r\n\r\n allSelectedClicked() {\r\n if (this.plansView) {\r\n this.allSelected = !this.plansView.every((plan) => plan.isSelected);\r\n\r\n for (let plan of this.plansView) plan.isSelected = this.allSelected;\r\n }\r\n\r\n this.setSelectedActivePlans();\r\n\r\n return true;\r\n }\r\n\r\n filterTextChanged() {\r\n this.updatePlansView();\r\n }\r\n\r\n handleApplyFilters() {\r\n this.updatePlansView();\r\n }\r\n\r\n handleClearFilters() {\r\n this.selectedPlanTypes = [];\r\n this.selectedPausedStates = [];\r\n this.selectedRecordStatuses = [RecordStatus.ACTIVE];\r\n this.selectedCollectionTypes = [];\r\n this.updatePlansView();\r\n }\r\n\r\n handleGenerateTasks() {\r\n let selectedPlanId = this.plansView.find((plan) => plan.isSelected).id;\r\n this.navigateToGenerateTasks(selectedPlanId);\r\n }\r\n\r\n updatePlansView() {\r\n var lowerCasedFilterText = this.filterText ? this.filterText.toLowerCase() : '';\r\n\r\n if (this.plans) {\r\n this.plansView = this.plans.filter(\r\n (p) =>\r\n this.matchSelectedPlanTypes(p) &&\r\n this.matchSelectedPausedStates(p) &&\r\n ((p.name || '').toLowerCase().indexOf(lowerCasedFilterText) > -1 ||\r\n (p.remediationStatus || '').toLowerCase().indexOf(lowerCasedFilterText) >\r\n -1 ||\r\n (p.planType || '').toLowerCase().indexOf(lowerCasedFilterText) > -1) &&\r\n this.matchSelectedRecordStatus(p) &&\r\n this.matchSelectedCollectionType(p),\r\n );\r\n\r\n this.allSelected = this.plansView.every((plan) => plan.isSelected);\r\n }\r\n\r\n this.isFilteringPlanTypes = !!this.selectedPlanTypes && !!this.selectedPlanTypes.length;\r\n this.isFilteringPausedStates =\r\n !!this.selectedPausedStates && !!this.selectedPausedStates.length;\r\n this.isFilteringRecords =\r\n !!this.selectedRecordStatuses && this.selectedRecordStatuses.length > 0;\r\n this.filterRecordStatusState = this.isFilteringRecords\r\n ? this.recordStatusOptions.find((o) => o.value === this.selectedRecordStatuses[0]).title\r\n : '';\r\n this.isFilteringCollectionType = this.selectedCollectionTypes.length > 0;\r\n }\r\n\r\n matchSelectedPlanTypes(plan) {\r\n if (!this.selectedPlanTypes || !this.selectedPlanTypes.length) return true;\r\n\r\n return this.selectedPlanTypes.some((o) => o.id === plan.planTypeId);\r\n }\r\n\r\n matchSelectedPausedStates(plan) {\r\n if (!this.selectedPausedStates || !this.selectedPausedStates.length) return true;\r\n\r\n return this.selectedPausedStates.some((o) => o.isPaused === plan.isPaused);\r\n }\r\n\r\n matchSelectedRecordStatus(plan) {\r\n if (\r\n this.selectedRecordStatuses.length === 1 &&\r\n this.selectedRecordStatuses[0] === RecordStatus.ALL\r\n )\r\n return true;\r\n\r\n let filteredIsActiveValue = this.selectedRecordStatuses[0] === RecordStatus.ACTIVE;\r\n return plan.isActive === filteredIsActiveValue;\r\n }\r\n\r\n matchSelectedCollectionType(plan) {\r\n if (this.selectedCollectionTypes.length === 0) return true;\r\n\r\n return this.selectedCollectionTypes.some((ct) => ct.value === plan.collectionType);\r\n }\r\n\r\n activate(params) {\r\n this.applyFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.apply',\r\n this.handleApplyFilters,\r\n );\r\n this.clearFiltersSubscription = this.eventAggregator.subscribe(\r\n 'filters.clear',\r\n this.handleClearFilters,\r\n );\r\n\r\n this.mapId = params.mapId;\r\n\r\n (async () => {\r\n this.pageContext.isLoading = true;\r\n\r\n try {\r\n this.recordStatusOptions = getRecordStatusOptions();\r\n\r\n var [plans, planTypes] = await Promise.all([\r\n this.planService.getPlans(this.mapId),\r\n this.planService.getPlanTypes(),\r\n ]);\r\n\r\n this.plans = plans;\r\n this.updatePlansView();\r\n\r\n this.planTypes = planTypes;\r\n\r\n this.pageContext.isLoading = false;\r\n } catch (error) {\r\n this.logger.error('Error loading plans.', error);\r\n this.pageContext.isLoading = false;\r\n this.dialogPresenter.showAlert(\r\n 'Error Loading Plans',\r\n 'An error occurred while loading the plans. Please try again later.',\r\n );\r\n }\r\n })();\r\n }\r\n\r\n deactivate() {\r\n this.applyFiltersSubscription && this.applyFiltersSubscription.dispose();\r\n this.clearFiltersSubscription && this.clearFiltersSubscription.dispose();\r\n }\r\n\r\n deletePlan(plan) {\r\n this.dialogPresenter\r\n .showConfirmation('Delete Plan', 'Are you sure you want to delete this plan?')\r\n .then((confirmed) => {\r\n if (!confirmed) return;\r\n\r\n this.pageContext.isLoading = true;\r\n this.planService\r\n .deletePlans([plan.id])\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Plan deleted successfully.');\r\n\r\n plan.isSelected = false;\r\n plan.isActive = false;\r\n\r\n this.setSelectedActivePlans();\r\n })\r\n .catch((error) => {\r\n this.logger.error('Error deleting plan.', error, { planId: plan.id });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, false);\r\n });\r\n });\r\n }\r\n\r\n deleteSelectedPlans() {\r\n var plansToDelete = this.plansView.filter((u) => u.isSelected);\r\n if (!plansToDelete.length) return;\r\n\r\n this.dialogPresenter\r\n .showConfirmation(\r\n 'Delete Selected Plans',\r\n 'Are you sure you want to delete the selected plans?',\r\n )\r\n .then((confirmed) => {\r\n if (!confirmed) return;\r\n\r\n var planIds = plansToDelete.map((plan) => plan.id);\r\n\r\n this.pageContext.isLoading = true;\r\n this.planService\r\n .deletePlans(planIds)\r\n .then(() => {\r\n this.pageContext.isLoading = false;\r\n this.pageContext.showSuccessOverlay('Selected plans deleted successfully.');\r\n\r\n for (let plan of plansToDelete) {\r\n plan.isSelected = false;\r\n plan.isActive = false;\r\n\r\n this.setSelectedActivePlans();\r\n }\r\n\r\n this.updatePlansView();\r\n })\r\n .catch((error) => {\r\n this.logger.error('Error deleting plans.', error, { planIds });\r\n this.pageContext.isLoading = false;\r\n this.handleDeleteError(error, true);\r\n });\r\n });\r\n }\r\n\r\n handleDeleteError(error, multiplePlans) {\r\n this.dialogPresenter.showAlert(\r\n 'Error Deleting Plan' + (multiplePlans ? 's' : ''),\r\n this.getApiErrorMessage(error.apiErrorCode, multiplePlans),\r\n );\r\n }\r\n\r\n getApiErrorMessage(errorCode, multiplePlans) {\r\n if (errorCode === 2)\r\n return 'You dont have access to delete the plan' + (multiplePlans ? 's' : '');\r\n\r\n return 'An unexpected error occurred while trying to delete plans. Please try again later.';\r\n }\r\n}\r\n","module.exports = \"