@ampath-kenya/ngx-openmrs-formentry 2.12.11 → 2.12.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-control-type.d.ts +0 -0
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-form-array.d.ts +0 -0
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-form-control.d.ts +0 -0
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-form-group.d.ts +0 -0
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/control-extensions.d.ts +0 -0
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/index.d.ts +0 -0
- package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/value-change.listener.d.ts +0 -0
- package/{dist/ngx-formentry/ngx-openmrs-formentry.d.ts → ampath-kenya-ngx-openmrs-formentry.d.ts} +0 -0
- package/{dist/ngx-formentry/ngx-openmrs-formentry.metadata.json → ampath-kenya-ngx-openmrs-formentry.metadata.json} +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +10706 -0
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -0
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +2 -0
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -0
- package/{dist/ngx-formentry/change-tracking → change-tracking}/control-relation.d.ts +0 -0
- package/{dist/ngx-formentry/change-tracking → change-tracking}/control-relations.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/afe-ng-select.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/appointments-overview/appointments-overview.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/check-box/checkbox.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/check-box/checkbox.module.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/date-time-picker/date-picker/date-picker.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/date-time-picker/date-time-picker.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/date-time-picker/date-time-picker.module.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/date-time-picker/picker-modal/modal.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/date-time-picker/pipes/moment.pipe.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/date-time-picker/time-picker/time-picker.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/file-upload/file-upload.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/file-upload/file-upload.module.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/file-upload/secure.pipe.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/ngx-date-time-picker/ngx-date-time-picker.module.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/remote-select/remote-select.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/remote-select/remote-select.module.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/diacritics.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/option-list.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/option.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/select-dropdown.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/select-dropdown.component.style.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/select.component.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/select.component.style.d.ts +0 -0
- package/{dist/ngx-formentry/components → components}/select/select.module.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/display-controls/file-preview.component.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/display-controls/question-control.component.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/display-controls/remote-answer.component.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-container/encounter-container.component.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-pdf-viewer.service.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-view/encounter-viewer.component.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-viewer.module.d.ts +0 -0
- package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-viewer.service.d.ts +0 -0
- package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
- package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
- package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
- package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
- package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
- package/esm2015/abstract-controls-extension/index.js +5 -0
- package/esm2015/abstract-controls-extension/value-change.listener.js +1 -0
- package/esm2015/ampath-kenya-ngx-openmrs-formentry.js +42 -0
- package/esm2015/change-tracking/control-relation.js +44 -0
- package/esm2015/change-tracking/control-relations.js +32 -0
- package/esm2015/components/afe-ng-select.component.js +87 -0
- package/esm2015/components/appointments-overview/appointments-overview.component.js +161 -0
- package/esm2015/components/check-box/checkbox.component.js +97 -0
- package/esm2015/components/check-box/checkbox.module.js +14 -0
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +270 -0
- package/esm2015/components/date-time-picker/date-time-picker.component.js +207 -0
- package/esm2015/components/date-time-picker/date-time-picker.module.js +34 -0
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +36 -0
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +13 -0
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +160 -0
- package/esm2015/components/file-upload/file-upload.component.js +128 -0
- package/esm2015/components/file-upload/file-upload.module.js +27 -0
- package/esm2015/components/file-upload/secure.pipe.js +102 -0
- package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +191 -0
- package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +41 -0
- package/esm2015/components/remote-select/remote-select.component.js +169 -0
- package/esm2015/components/remote-select/remote-select.module.js +17 -0
- package/esm2015/components/select/diacritics.js +855 -0
- package/esm2015/components/select/option-list.js +179 -0
- package/esm2015/components/select/option.js +29 -0
- package/esm2015/components/select/select-dropdown.component.js +161 -0
- package/esm2015/components/select/select-dropdown.component.style.js +58 -0
- package/esm2015/components/select/select.component.js +514 -0
- package/esm2015/components/select/select.component.style.js +101 -0
- package/esm2015/components/select/select.module.js +15 -0
- package/esm2015/encounter-viewer/display-controls/file-preview.component.js +109 -0
- package/esm2015/encounter-viewer/display-controls/question-control.component.js +92 -0
- package/esm2015/encounter-viewer/display-controls/remote-answer.component.js +79 -0
- package/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +48 -0
- package/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +435 -0
- package/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +299 -0
- package/esm2015/encounter-viewer/encounter-viewer.module.js +35 -0
- package/esm2015/encounter-viewer/encounter-viewer.service.js +160 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +1 -0
- package/esm2015/form-entry/control-calculators/can-calculate.js +1 -0
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +1 -0
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +1 -0
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +33 -0
- package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
- package/esm2015/form-entry/data-sources/data-sources.js +30 -0
- package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
- package/esm2015/form-entry/directives/historical-value-directive.js +66 -0
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +69 -0
- package/esm2015/form-entry/expression-runner/expression-runner.js +152 -0
- package/esm2015/form-entry/form-entry.module.js +103 -0
- package/esm2015/form-entry/form-factory/control-relations.factory.js +236 -0
- package/esm2015/form-entry/form-factory/form-control.service.js +117 -0
- package/esm2015/form-entry/form-factory/form-node.js +78 -0
- package/esm2015/form-entry/form-factory/form.factory.js +132 -0
- package/esm2015/form-entry/form-factory/form.js +193 -0
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +66 -0
- package/esm2015/form-entry/form-factory/question.factory.js +834 -0
- package/esm2015/form-entry/form-factory/show-messages.factory.js +30 -0
- package/esm2015/form-entry/form-factory/validation.factory.js +145 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +156 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +632 -0
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +38 -0
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +32 -0
- package/esm2015/form-entry/helpers/js-expression-helper.js +234 -0
- package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
- package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/date-question.js +12 -0
- package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
- package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
- package/esm2015/form-entry/question-models/group-question.js +12 -0
- package/esm2015/form-entry/question-models/interfaces/base-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/data-source.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/select-option.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +1 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +1 -0
- package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
- package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/models.js +12 -0
- package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
- package/esm2015/form-entry/question-models/pair.model.js +7 -0
- package/esm2015/form-entry/question-models/question-base.js +24 -0
- package/{dist/ngx-formentry/esm2015 → esm2015}/form-entry/question-models/rendering-type.js +1 -1
- package/esm2015/form-entry/question-models/repeating-question.js +11 -0
- package/esm2015/form-entry/question-models/select-option.js +7 -0
- package/esm2015/form-entry/question-models/select-question.js +12 -0
- package/esm2015/form-entry/question-models/test-order-question.js +15 -0
- package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
- package/esm2015/form-entry/question-models/text-input-question.js +10 -0
- package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
- package/esm2015/form-entry/question-models/validation.model.js +7 -0
- package/esm2015/form-entry/services/debug-mode.service.js +22 -0
- package/esm2015/form-entry/services/form-errors.service.js +18 -0
- package/esm2015/form-entry/services/form-schema-compiler.service.js +246 -0
- package/esm2015/form-entry/services/historical-encounter-data.service.js +171 -0
- package/esm2015/form-entry/utils/messages.js +12 -0
- package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
- package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
- package/esm2015/form-entry/validators/date.validator.js +18 -0
- package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
- package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
- package/esm2015/form-entry/validators/max-date.validator.js +23 -0
- package/esm2015/form-entry/validators/max.validator.js +17 -0
- package/esm2015/form-entry/validators/min-date.validator.js +23 -0
- package/esm2015/form-entry/validators/min.validator.js +17 -0
- package/esm2015/form-entry/validators/required.validator.js +11 -0
- package/esm2015/form-entry/validators/validations.js +5 -0
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +173 -0
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +490 -0
- package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
- package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +87 -0
- package/esm2015/form-entry/value-adapters/value.adapter.js +1 -0
- package/esm2015/public_api.js +51 -0
- package/esm2015/shared.module.js +15 -0
- package/esm5/abstract-controls-extension/afe-control-type.js +8 -0
- package/esm5/abstract-controls-extension/afe-form-array.js +98 -0
- package/esm5/abstract-controls-extension/afe-form-control.js +96 -0
- package/esm5/abstract-controls-extension/afe-form-group.js +70 -0
- package/esm5/abstract-controls-extension/control-extensions.js +5 -0
- package/esm5/abstract-controls-extension/index.js +5 -0
- package/esm5/abstract-controls-extension/value-change.listener.js +1 -0
- package/esm5/ampath-kenya-ngx-openmrs-formentry.js +42 -0
- package/esm5/change-tracking/control-relation.js +59 -0
- package/esm5/change-tracking/control-relations.js +46 -0
- package/esm5/components/afe-ng-select.component.js +87 -0
- package/esm5/components/appointments-overview/appointments-overview.component.js +123 -0
- package/esm5/components/check-box/checkbox.component.js +88 -0
- package/esm5/components/check-box/checkbox.module.js +18 -0
- package/esm5/components/date-time-picker/date-picker/date-picker.component.js +186 -0
- package/esm5/components/date-time-picker/date-time-picker.component.js +111 -0
- package/esm5/components/date-time-picker/date-time-picker.module.js +38 -0
- package/esm5/components/date-time-picker/picker-modal/modal.component.js +32 -0
- package/esm5/components/date-time-picker/pipes/moment.pipe.js +17 -0
- package/esm5/components/date-time-picker/time-picker/time-picker.component.js +117 -0
- package/esm5/components/file-upload/file-upload.component.js +126 -0
- package/esm5/components/file-upload/file-upload.module.js +31 -0
- package/esm5/components/file-upload/secure.pipe.js +105 -0
- package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +140 -0
- package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +45 -0
- package/esm5/components/remote-select/remote-select.component.js +163 -0
- package/esm5/components/remote-select/remote-select.module.js +21 -0
- package/esm5/components/select/diacritics.js +860 -0
- package/esm5/components/select/option-list.js +224 -0
- package/esm5/components/select/option.js +31 -0
- package/esm5/components/select/select-dropdown.component.js +131 -0
- package/esm5/components/select/select-dropdown.component.style.js +2 -0
- package/esm5/components/select/select.component.js +456 -0
- package/esm5/components/select/select.component.style.js +2 -0
- package/esm5/components/select/select.module.js +19 -0
- package/{dist/ngx-formentry/esm2015 → esm5}/encounter-viewer/display-controls/file-preview.component.js +70 -70
- package/esm5/encounter-viewer/display-controls/question-control.component.js +104 -0
- package/esm5/encounter-viewer/display-controls/remote-answer.component.js +86 -0
- package/esm5/encounter-viewer/encounter-container/encounter-container.component.js +45 -0
- package/esm5/encounter-viewer/encounter-pdf-viewer.service.js +521 -0
- package/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +185 -0
- package/esm5/encounter-viewer/encounter-viewer.module.js +39 -0
- package/esm5/encounter-viewer/encounter-viewer.service.js +165 -0
- package/esm5/form-entry/control-alerts/alert-helpers.js +44 -0
- package/esm5/form-entry/control-alerts/can-generate-alert.js +1 -0
- package/esm5/form-entry/control-calculators/can-calculate.js +1 -0
- package/esm5/form-entry/control-hiders-disablers/can-disable.js +1 -0
- package/esm5/form-entry/control-hiders-disablers/can-hide.js +1 -0
- package/esm5/form-entry/control-hiders-disablers/disabler-helper.js +37 -0
- package/esm5/form-entry/control-hiders-disablers/hider-helpers.js +44 -0
- package/esm5/form-entry/data-sources/data-sources.js +37 -0
- package/esm5/form-entry/data-sources/dummy-data-source.js +106 -0
- package/esm5/form-entry/directives/historical-value-directive.js +72 -0
- package/esm5/form-entry/error-renderer/error-renderer.component.js +62 -0
- package/esm5/form-entry/expression-runner/expression-runner.js +158 -0
- package/esm5/form-entry/form-entry.module.js +107 -0
- package/{dist/ngx-formentry/esm2015 → esm5}/form-entry/form-factory/control-relations.factory.js +94 -87
- package/esm5/form-entry/form-factory/form-control.service.js +120 -0
- package/esm5/form-entry/form-factory/form-node.js +116 -0
- package/esm5/form-entry/form-factory/form.factory.js +136 -0
- package/esm5/form-entry/form-factory/form.js +213 -0
- package/esm5/form-entry/form-factory/hiders-disablers.factory.js +68 -0
- package/esm5/form-entry/form-factory/question.factory.js +838 -0
- package/esm5/form-entry/form-factory/show-messages.factory.js +32 -0
- package/esm5/form-entry/form-factory/validation.factory.js +189 -0
- package/esm5/form-entry/form-renderer/form-renderer.component.css.js +2 -0
- package/esm5/form-entry/form-renderer/form-renderer.component.js +211 -0
- package/esm5/form-entry/helpers/historical-expression-helper-service.js +41 -0
- package/esm5/form-entry/helpers/historical-field-helper-service.js +36 -0
- package/esm5/form-entry/helpers/js-expression-helper.js +242 -0
- package/esm5/form-entry/question-models/checkbox.model.js +16 -0
- package/esm5/form-entry/question-models/conditional-validation.model.js +14 -0
- package/esm5/form-entry/question-models/date-question.js +17 -0
- package/esm5/form-entry/question-models/date-validation.model.js +15 -0
- package/esm5/form-entry/question-models/file-upload-question.js +18 -0
- package/esm5/form-entry/question-models/group-question.js +17 -0
- package/esm5/form-entry/question-models/interfaces/base-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/checkbox-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/data-source.js +1 -0
- package/esm5/form-entry/question-models/interfaces/date-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/group-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/multi-select-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/nested-questions.js +11 -0
- package/esm5/form-entry/question-models/interfaces/repeating-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/select-option.js +1 -0
- package/esm5/form-entry/question-models/interfaces/select-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/test-order-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/text-area-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/text-question-options.js +1 -0
- package/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +1 -0
- package/esm5/form-entry/question-models/js-expression-validation.model.js +13 -0
- package/esm5/form-entry/question-models/max-validation.model.js +14 -0
- package/esm5/form-entry/question-models/min-validation.model.js +14 -0
- package/esm5/form-entry/question-models/models.js +12 -0
- package/esm5/form-entry/question-models/multi-select-question.js +16 -0
- package/esm5/form-entry/question-models/pair.model.js +9 -0
- package/esm5/form-entry/question-models/question-base.js +26 -0
- package/{dist/ngx-formentry/esm5 → esm5}/form-entry/question-models/rendering-type.js +1 -1
- package/esm5/form-entry/question-models/repeating-question.js +16 -0
- package/esm5/form-entry/question-models/select-option.js +9 -0
- package/esm5/form-entry/question-models/select-question.js +17 -0
- package/esm5/form-entry/question-models/test-order-question.js +20 -0
- package/esm5/form-entry/question-models/text-area-input-question.js +18 -0
- package/esm5/form-entry/question-models/text-input-question.js +15 -0
- package/esm5/form-entry/question-models/ui-select-question.js +16 -0
- package/esm5/form-entry/question-models/validation.model.js +9 -0
- package/esm5/form-entry/services/debug-mode.service.js +24 -0
- package/esm5/form-entry/services/form-errors.service.js +20 -0
- package/esm5/form-entry/services/form-schema-compiler.service.js +252 -0
- package/esm5/form-entry/services/historical-encounter-data.service.js +178 -0
- package/esm5/form-entry/utils/messages.js +16 -0
- package/esm5/form-entry/validators/conditional-answered.validator.js +49 -0
- package/esm5/form-entry/validators/conditional-required.validator.js +43 -0
- package/esm5/form-entry/validators/date.validator.js +21 -0
- package/esm5/form-entry/validators/future-date-restriction.validator.js +24 -0
- package/esm5/form-entry/validators/js-expression.validator.js +29 -0
- package/esm5/form-entry/validators/max-date.validator.js +27 -0
- package/esm5/form-entry/validators/max.validator.js +21 -0
- package/esm5/form-entry/validators/min-date.validator.js +27 -0
- package/esm5/form-entry/validators/min.validator.js +21 -0
- package/esm5/form-entry/validators/required.validator.js +15 -0
- package/esm5/form-entry/validators/validations.js +8 -0
- package/esm5/form-entry/value-adapters/encounter.adapter.js +176 -0
- package/esm5/form-entry/value-adapters/obs-adapter-helper.js +508 -0
- package/esm5/form-entry/value-adapters/obs.adapter.js +735 -0
- package/esm5/form-entry/value-adapters/order.adapter.js +226 -0
- package/esm5/form-entry/value-adapters/person-attribute.adapter.js +91 -0
- package/esm5/form-entry/value-adapters/value.adapter.js +1 -0
- package/esm5/public_api.js +51 -0
- package/esm5/shared.module.js +19 -0
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +10919 -0
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +10359 -0
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-alerts/alert-helpers.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-alerts/can-generate-alert.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-calculators/can-calculate.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/can-disable.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/can-hide.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/disabler-helper.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/hider-helpers.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/data-sources/data-sources.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/data-sources/dummy-data-source.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/directives/historical-value-directive.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/error-renderer/error-renderer.component.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/expression-runner/expression-runner.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-entry.module.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/control-relations.factory.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form-control.service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form-node.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form.factory.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/hiders-disablers.factory.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/question.factory.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/show-messages.factory.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/validation.factory.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-renderer/form-renderer.component.css.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/form-renderer/form-renderer.component.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/helpers/historical-expression-helper-service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/helpers/historical-field-helper-service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/helpers/js-expression-helper.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/checkbox.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/conditional-validation.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/date-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/date-validation.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/file-upload-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/group-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/base-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/checkbox-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/data-source.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/date-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/file-upload-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/group-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/multi-select-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/nested-questions.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/repeating-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/select-option.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/select-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/test-order-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/text-area-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/text-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/ui-select-question-options.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/js-expression-validation.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/max-validation.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/min-validation.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/models.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/multi-select-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/pair.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/question-base.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/rendering-type.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/repeating-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/select-option.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/select-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/test-order-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/text-area-input-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/text-input-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/ui-select-question.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/question-models/validation.model.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/services/debug-mode.service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/services/form-errors.service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/services/form-schema-compiler.service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/services/historical-encounter-data.service.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/utils/messages.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/conditional-answered.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/conditional-required.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/date.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/future-date-restriction.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/js-expression.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/max-date.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/max.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/min-date.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/min.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/required.validator.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/validators/validations.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/encounter.adapter.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/obs-adapter-helper.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/obs.adapter.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/order.adapter.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/person-attribute.adapter.d.ts +0 -0
- package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/value.adapter.d.ts +0 -0
- package/package.json +21 -83
- package/{dist/ngx-formentry/public_api.d.ts → public_api.d.ts} +0 -0
- package/{dist/ngx-formentry/shared.module.d.ts → shared.module.d.ts} +0 -0
- package/.editorconfig +0 -13
- package/.prettierignore +0 -40
- package/.prettierrc +0 -6
- package/.travis.yml +0 -17
- package/README.md +0 -34
- package/angular.json +0 -143
- package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.js +0 -10706
- package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.js.map +0 -1
- package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.min.js +0 -2
- package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.min.js.map +0 -1
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-control-type.js +0 -8
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-form-array.js +0 -85
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-form-control.js +0 -88
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-form-group.js +0 -61
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/control-extensions.js +0 -5
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/index.js +0 -5
- package/dist/ngx-formentry/esm2015/abstract-controls-extension/value-change.listener.js +0 -1
- package/dist/ngx-formentry/esm2015/change-tracking/control-relation.js +0 -44
- package/dist/ngx-formentry/esm2015/change-tracking/control-relations.js +0 -32
- package/dist/ngx-formentry/esm2015/components/afe-ng-select.component.js +0 -87
- package/dist/ngx-formentry/esm2015/components/appointments-overview/appointments-overview.component.js +0 -161
- package/dist/ngx-formentry/esm2015/components/check-box/checkbox.component.js +0 -97
- package/dist/ngx-formentry/esm2015/components/check-box/checkbox.module.js +0 -14
- package/dist/ngx-formentry/esm2015/components/date-time-picker/date-picker/date-picker.component.js +0 -270
- package/dist/ngx-formentry/esm2015/components/date-time-picker/date-time-picker.component.js +0 -207
- package/dist/ngx-formentry/esm2015/components/date-time-picker/date-time-picker.module.js +0 -34
- package/dist/ngx-formentry/esm2015/components/date-time-picker/picker-modal/modal.component.js +0 -36
- package/dist/ngx-formentry/esm2015/components/date-time-picker/pipes/moment.pipe.js +0 -13
- package/dist/ngx-formentry/esm2015/components/date-time-picker/time-picker/time-picker.component.js +0 -160
- package/dist/ngx-formentry/esm2015/components/file-upload/file-upload.component.js +0 -128
- package/dist/ngx-formentry/esm2015/components/file-upload/file-upload.module.js +0 -27
- package/dist/ngx-formentry/esm2015/components/file-upload/secure.pipe.js +0 -102
- package/dist/ngx-formentry/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +0 -191
- package/dist/ngx-formentry/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +0 -41
- package/dist/ngx-formentry/esm2015/components/remote-select/remote-select.component.js +0 -169
- package/dist/ngx-formentry/esm2015/components/remote-select/remote-select.module.js +0 -17
- package/dist/ngx-formentry/esm2015/components/select/diacritics.js +0 -855
- package/dist/ngx-formentry/esm2015/components/select/option-list.js +0 -179
- package/dist/ngx-formentry/esm2015/components/select/option.js +0 -29
- package/dist/ngx-formentry/esm2015/components/select/select-dropdown.component.js +0 -161
- package/dist/ngx-formentry/esm2015/components/select/select-dropdown.component.style.js +0 -58
- package/dist/ngx-formentry/esm2015/components/select/select.component.js +0 -514
- package/dist/ngx-formentry/esm2015/components/select/select.component.style.js +0 -101
- package/dist/ngx-formentry/esm2015/components/select/select.module.js +0 -15
- package/dist/ngx-formentry/esm2015/encounter-viewer/display-controls/question-control.component.js +0 -92
- package/dist/ngx-formentry/esm2015/encounter-viewer/display-controls/remote-answer.component.js +0 -79
- package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +0 -48
- package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +0 -435
- package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +0 -299
- package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-viewer.module.js +0 -35
- package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-viewer.service.js +0 -160
- package/dist/ngx-formentry/esm2015/form-entry/control-alerts/alert-helpers.js +0 -40
- package/dist/ngx-formentry/esm2015/form-entry/control-alerts/can-generate-alert.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/control-calculators/can-calculate.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/can-disable.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/can-hide.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +0 -33
- package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +0 -40
- package/dist/ngx-formentry/esm2015/form-entry/data-sources/data-sources.js +0 -30
- package/dist/ngx-formentry/esm2015/form-entry/data-sources/dummy-data-source.js +0 -104
- package/dist/ngx-formentry/esm2015/form-entry/directives/historical-value-directive.js +0 -66
- package/dist/ngx-formentry/esm2015/form-entry/error-renderer/error-renderer.component.js +0 -69
- package/dist/ngx-formentry/esm2015/form-entry/expression-runner/expression-runner.js +0 -152
- package/dist/ngx-formentry/esm2015/form-entry/form-entry.module.js +0 -103
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/form-control.service.js +0 -117
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/form-node.js +0 -78
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/form.factory.js +0 -132
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/form.js +0 -193
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/hiders-disablers.factory.js +0 -66
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/question.factory.js +0 -834
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/show-messages.factory.js +0 -30
- package/dist/ngx-formentry/esm2015/form-entry/form-factory/validation.factory.js +0 -145
- package/dist/ngx-formentry/esm2015/form-entry/form-renderer/form-renderer.component.css.js +0 -156
- package/dist/ngx-formentry/esm2015/form-entry/form-renderer/form-renderer.component.js +0 -632
- package/dist/ngx-formentry/esm2015/form-entry/helpers/historical-expression-helper-service.js +0 -38
- package/dist/ngx-formentry/esm2015/form-entry/helpers/historical-field-helper-service.js +0 -32
- package/dist/ngx-formentry/esm2015/form-entry/helpers/js-expression-helper.js +0 -234
- package/dist/ngx-formentry/esm2015/form-entry/question-models/checkbox.model.js +0 -11
- package/dist/ngx-formentry/esm2015/form-entry/question-models/conditional-validation.model.js +0 -9
- package/dist/ngx-formentry/esm2015/form-entry/question-models/date-question.js +0 -12
- package/dist/ngx-formentry/esm2015/form-entry/question-models/date-validation.model.js +0 -10
- package/dist/ngx-formentry/esm2015/form-entry/question-models/file-upload-question.js +0 -13
- package/dist/ngx-formentry/esm2015/form-entry/question-models/group-question.js +0 -12
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/base-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/checkbox-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/data-source.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/date-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/group-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/multi-select-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/nested-questions.js +0 -7
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/select-option.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/select-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/text-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +0 -1
- package/dist/ngx-formentry/esm2015/form-entry/question-models/js-expression-validation.model.js +0 -8
- package/dist/ngx-formentry/esm2015/form-entry/question-models/max-validation.model.js +0 -9
- package/dist/ngx-formentry/esm2015/form-entry/question-models/min-validation.model.js +0 -9
- package/dist/ngx-formentry/esm2015/form-entry/question-models/models.js +0 -12
- package/dist/ngx-formentry/esm2015/form-entry/question-models/multi-select-question.js +0 -11
- package/dist/ngx-formentry/esm2015/form-entry/question-models/pair.model.js +0 -7
- package/dist/ngx-formentry/esm2015/form-entry/question-models/question-base.js +0 -24
- package/dist/ngx-formentry/esm2015/form-entry/question-models/repeating-question.js +0 -11
- package/dist/ngx-formentry/esm2015/form-entry/question-models/select-option.js +0 -7
- package/dist/ngx-formentry/esm2015/form-entry/question-models/select-question.js +0 -12
- package/dist/ngx-formentry/esm2015/form-entry/question-models/test-order-question.js +0 -15
- package/dist/ngx-formentry/esm2015/form-entry/question-models/text-area-input-question.js +0 -13
- package/dist/ngx-formentry/esm2015/form-entry/question-models/text-input-question.js +0 -10
- package/dist/ngx-formentry/esm2015/form-entry/question-models/ui-select-question.js +0 -11
- package/dist/ngx-formentry/esm2015/form-entry/question-models/validation.model.js +0 -7
- package/dist/ngx-formentry/esm2015/form-entry/services/debug-mode.service.js +0 -22
- package/dist/ngx-formentry/esm2015/form-entry/services/form-errors.service.js +0 -18
- package/dist/ngx-formentry/esm2015/form-entry/services/form-schema-compiler.service.js +0 -246
- package/dist/ngx-formentry/esm2015/form-entry/services/historical-encounter-data.service.js +0 -171
- package/dist/ngx-formentry/esm2015/form-entry/utils/messages.js +0 -12
- package/dist/ngx-formentry/esm2015/form-entry/validators/conditional-answered.validator.js +0 -46
- package/dist/ngx-formentry/esm2015/form-entry/validators/conditional-required.validator.js +0 -40
- package/dist/ngx-formentry/esm2015/form-entry/validators/date.validator.js +0 -18
- package/dist/ngx-formentry/esm2015/form-entry/validators/future-date-restriction.validator.js +0 -21
- package/dist/ngx-formentry/esm2015/form-entry/validators/js-expression.validator.js +0 -26
- package/dist/ngx-formentry/esm2015/form-entry/validators/max-date.validator.js +0 -23
- package/dist/ngx-formentry/esm2015/form-entry/validators/max.validator.js +0 -17
- package/dist/ngx-formentry/esm2015/form-entry/validators/min-date.validator.js +0 -23
- package/dist/ngx-formentry/esm2015/form-entry/validators/min.validator.js +0 -17
- package/dist/ngx-formentry/esm2015/form-entry/validators/required.validator.js +0 -11
- package/dist/ngx-formentry/esm2015/form-entry/validators/validations.js +0 -5
- package/dist/ngx-formentry/esm2015/form-entry/value-adapters/encounter.adapter.js +0 -173
- package/dist/ngx-formentry/esm2015/form-entry/value-adapters/obs-adapter-helper.js +0 -490
- package/dist/ngx-formentry/esm2015/form-entry/value-adapters/obs.adapter.js +0 -542
- package/dist/ngx-formentry/esm2015/form-entry/value-adapters/order.adapter.js +0 -186
- package/dist/ngx-formentry/esm2015/form-entry/value-adapters/person-attribute.adapter.js +0 -87
- package/dist/ngx-formentry/esm2015/form-entry/value-adapters/value.adapter.js +0 -1
- package/dist/ngx-formentry/esm2015/ngx-openmrs-formentry.js +0 -42
- package/dist/ngx-formentry/esm2015/public_api.js +0 -51
- package/dist/ngx-formentry/esm2015/shared.module.js +0 -15
- package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-control-type.js +0 -8
- package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-form-array.js +0 -98
- package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-form-control.js +0 -96
- package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-form-group.js +0 -70
- package/dist/ngx-formentry/esm5/abstract-controls-extension/control-extensions.js +0 -5
- package/dist/ngx-formentry/esm5/abstract-controls-extension/index.js +0 -5
- package/dist/ngx-formentry/esm5/abstract-controls-extension/value-change.listener.js +0 -1
- package/dist/ngx-formentry/esm5/change-tracking/control-relation.js +0 -59
- package/dist/ngx-formentry/esm5/change-tracking/control-relations.js +0 -46
- package/dist/ngx-formentry/esm5/components/afe-ng-select.component.js +0 -87
- package/dist/ngx-formentry/esm5/components/appointments-overview/appointments-overview.component.js +0 -123
- package/dist/ngx-formentry/esm5/components/check-box/checkbox.component.js +0 -88
- package/dist/ngx-formentry/esm5/components/check-box/checkbox.module.js +0 -18
- package/dist/ngx-formentry/esm5/components/date-time-picker/date-picker/date-picker.component.js +0 -186
- package/dist/ngx-formentry/esm5/components/date-time-picker/date-time-picker.component.js +0 -111
- package/dist/ngx-formentry/esm5/components/date-time-picker/date-time-picker.module.js +0 -38
- package/dist/ngx-formentry/esm5/components/date-time-picker/picker-modal/modal.component.js +0 -32
- package/dist/ngx-formentry/esm5/components/date-time-picker/pipes/moment.pipe.js +0 -17
- package/dist/ngx-formentry/esm5/components/date-time-picker/time-picker/time-picker.component.js +0 -117
- package/dist/ngx-formentry/esm5/components/file-upload/file-upload.component.js +0 -126
- package/dist/ngx-formentry/esm5/components/file-upload/file-upload.module.js +0 -31
- package/dist/ngx-formentry/esm5/components/file-upload/secure.pipe.js +0 -105
- package/dist/ngx-formentry/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +0 -140
- package/dist/ngx-formentry/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +0 -45
- package/dist/ngx-formentry/esm5/components/remote-select/remote-select.component.js +0 -163
- package/dist/ngx-formentry/esm5/components/remote-select/remote-select.module.js +0 -21
- package/dist/ngx-formentry/esm5/components/select/diacritics.js +0 -860
- package/dist/ngx-formentry/esm5/components/select/option-list.js +0 -224
- package/dist/ngx-formentry/esm5/components/select/option.js +0 -31
- package/dist/ngx-formentry/esm5/components/select/select-dropdown.component.js +0 -131
- package/dist/ngx-formentry/esm5/components/select/select-dropdown.component.style.js +0 -2
- package/dist/ngx-formentry/esm5/components/select/select.component.js +0 -456
- package/dist/ngx-formentry/esm5/components/select/select.component.style.js +0 -2
- package/dist/ngx-formentry/esm5/components/select/select.module.js +0 -19
- package/dist/ngx-formentry/esm5/encounter-viewer/display-controls/file-preview.component.js +0 -109
- package/dist/ngx-formentry/esm5/encounter-viewer/display-controls/question-control.component.js +0 -104
- package/dist/ngx-formentry/esm5/encounter-viewer/display-controls/remote-answer.component.js +0 -86
- package/dist/ngx-formentry/esm5/encounter-viewer/encounter-container/encounter-container.component.js +0 -45
- package/dist/ngx-formentry/esm5/encounter-viewer/encounter-pdf-viewer.service.js +0 -521
- package/dist/ngx-formentry/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +0 -185
- package/dist/ngx-formentry/esm5/encounter-viewer/encounter-viewer.module.js +0 -39
- package/dist/ngx-formentry/esm5/encounter-viewer/encounter-viewer.service.js +0 -165
- package/dist/ngx-formentry/esm5/form-entry/control-alerts/alert-helpers.js +0 -44
- package/dist/ngx-formentry/esm5/form-entry/control-alerts/can-generate-alert.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/control-calculators/can-calculate.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/can-disable.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/can-hide.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/disabler-helper.js +0 -37
- package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/hider-helpers.js +0 -44
- package/dist/ngx-formentry/esm5/form-entry/data-sources/data-sources.js +0 -37
- package/dist/ngx-formentry/esm5/form-entry/data-sources/dummy-data-source.js +0 -106
- package/dist/ngx-formentry/esm5/form-entry/directives/historical-value-directive.js +0 -72
- package/dist/ngx-formentry/esm5/form-entry/error-renderer/error-renderer.component.js +0 -62
- package/dist/ngx-formentry/esm5/form-entry/expression-runner/expression-runner.js +0 -158
- package/dist/ngx-formentry/esm5/form-entry/form-entry.module.js +0 -107
- package/dist/ngx-formentry/esm5/form-entry/form-factory/control-relations.factory.js +0 -243
- package/dist/ngx-formentry/esm5/form-entry/form-factory/form-control.service.js +0 -120
- package/dist/ngx-formentry/esm5/form-entry/form-factory/form-node.js +0 -116
- package/dist/ngx-formentry/esm5/form-entry/form-factory/form.factory.js +0 -136
- package/dist/ngx-formentry/esm5/form-entry/form-factory/form.js +0 -213
- package/dist/ngx-formentry/esm5/form-entry/form-factory/hiders-disablers.factory.js +0 -68
- package/dist/ngx-formentry/esm5/form-entry/form-factory/question.factory.js +0 -838
- package/dist/ngx-formentry/esm5/form-entry/form-factory/show-messages.factory.js +0 -32
- package/dist/ngx-formentry/esm5/form-entry/form-factory/validation.factory.js +0 -189
- package/dist/ngx-formentry/esm5/form-entry/form-renderer/form-renderer.component.css.js +0 -2
- package/dist/ngx-formentry/esm5/form-entry/form-renderer/form-renderer.component.js +0 -211
- package/dist/ngx-formentry/esm5/form-entry/helpers/historical-expression-helper-service.js +0 -41
- package/dist/ngx-formentry/esm5/form-entry/helpers/historical-field-helper-service.js +0 -36
- package/dist/ngx-formentry/esm5/form-entry/helpers/js-expression-helper.js +0 -242
- package/dist/ngx-formentry/esm5/form-entry/question-models/checkbox.model.js +0 -16
- package/dist/ngx-formentry/esm5/form-entry/question-models/conditional-validation.model.js +0 -14
- package/dist/ngx-formentry/esm5/form-entry/question-models/date-question.js +0 -17
- package/dist/ngx-formentry/esm5/form-entry/question-models/date-validation.model.js +0 -15
- package/dist/ngx-formentry/esm5/form-entry/question-models/file-upload-question.js +0 -18
- package/dist/ngx-formentry/esm5/form-entry/question-models/group-question.js +0 -17
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/base-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/checkbox-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/data-source.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/date-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/group-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/multi-select-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/nested-questions.js +0 -11
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/repeating-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/select-option.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/select-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/test-order-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/text-area-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/text-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +0 -1
- package/dist/ngx-formentry/esm5/form-entry/question-models/js-expression-validation.model.js +0 -13
- package/dist/ngx-formentry/esm5/form-entry/question-models/max-validation.model.js +0 -14
- package/dist/ngx-formentry/esm5/form-entry/question-models/min-validation.model.js +0 -14
- package/dist/ngx-formentry/esm5/form-entry/question-models/models.js +0 -12
- package/dist/ngx-formentry/esm5/form-entry/question-models/multi-select-question.js +0 -16
- package/dist/ngx-formentry/esm5/form-entry/question-models/pair.model.js +0 -9
- package/dist/ngx-formentry/esm5/form-entry/question-models/question-base.js +0 -26
- package/dist/ngx-formentry/esm5/form-entry/question-models/repeating-question.js +0 -16
- package/dist/ngx-formentry/esm5/form-entry/question-models/select-option.js +0 -9
- package/dist/ngx-formentry/esm5/form-entry/question-models/select-question.js +0 -17
- package/dist/ngx-formentry/esm5/form-entry/question-models/test-order-question.js +0 -20
- package/dist/ngx-formentry/esm5/form-entry/question-models/text-area-input-question.js +0 -18
- package/dist/ngx-formentry/esm5/form-entry/question-models/text-input-question.js +0 -15
- package/dist/ngx-formentry/esm5/form-entry/question-models/ui-select-question.js +0 -16
- package/dist/ngx-formentry/esm5/form-entry/question-models/validation.model.js +0 -9
- package/dist/ngx-formentry/esm5/form-entry/services/debug-mode.service.js +0 -24
- package/dist/ngx-formentry/esm5/form-entry/services/form-errors.service.js +0 -20
- package/dist/ngx-formentry/esm5/form-entry/services/form-schema-compiler.service.js +0 -252
- package/dist/ngx-formentry/esm5/form-entry/services/historical-encounter-data.service.js +0 -178
- package/dist/ngx-formentry/esm5/form-entry/utils/messages.js +0 -16
- package/dist/ngx-formentry/esm5/form-entry/validators/conditional-answered.validator.js +0 -49
- package/dist/ngx-formentry/esm5/form-entry/validators/conditional-required.validator.js +0 -43
- package/dist/ngx-formentry/esm5/form-entry/validators/date.validator.js +0 -21
- package/dist/ngx-formentry/esm5/form-entry/validators/future-date-restriction.validator.js +0 -24
- package/dist/ngx-formentry/esm5/form-entry/validators/js-expression.validator.js +0 -29
- package/dist/ngx-formentry/esm5/form-entry/validators/max-date.validator.js +0 -27
- package/dist/ngx-formentry/esm5/form-entry/validators/max.validator.js +0 -21
- package/dist/ngx-formentry/esm5/form-entry/validators/min-date.validator.js +0 -27
- package/dist/ngx-formentry/esm5/form-entry/validators/min.validator.js +0 -21
- package/dist/ngx-formentry/esm5/form-entry/validators/required.validator.js +0 -15
- package/dist/ngx-formentry/esm5/form-entry/validators/validations.js +0 -8
- package/dist/ngx-formentry/esm5/form-entry/value-adapters/encounter.adapter.js +0 -176
- package/dist/ngx-formentry/esm5/form-entry/value-adapters/obs-adapter-helper.js +0 -508
- package/dist/ngx-formentry/esm5/form-entry/value-adapters/obs.adapter.js +0 -735
- package/dist/ngx-formentry/esm5/form-entry/value-adapters/order.adapter.js +0 -226
- package/dist/ngx-formentry/esm5/form-entry/value-adapters/person-attribute.adapter.js +0 -91
- package/dist/ngx-formentry/esm5/form-entry/value-adapters/value.adapter.js +0 -1
- package/dist/ngx-formentry/esm5/ngx-openmrs-formentry.js +0 -42
- package/dist/ngx-formentry/esm5/public_api.js +0 -51
- package/dist/ngx-formentry/esm5/shared.module.js +0 -19
- package/dist/ngx-formentry/fesm2015/ngx-openmrs-formentry.js +0 -10919
- package/dist/ngx-formentry/fesm2015/ngx-openmrs-formentry.js.map +0 -1
- package/dist/ngx-formentry/fesm5/ngx-openmrs-formentry.js +0 -10359
- package/dist/ngx-formentry/fesm5/ngx-openmrs-formentry.js.map +0 -1
- package/dist/ngx-formentry/package.json +0 -35
- package/scripts/build.sh +0 -2
- package/tsconfig.json +0 -20
- package/tslint.json +0 -96
|
@@ -1,735 +0,0 @@
|
|
|
1
|
-
import * as tslib_1 from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import 'rxjs';
|
|
4
|
-
import * as _ from 'lodash';
|
|
5
|
-
import { LeafNode, GroupNode } from '../form-factory/form-node';
|
|
6
|
-
import { ObsAdapterHelper } from './obs-adapter-helper';
|
|
7
|
-
var ObsValueAdapter = /** @class */ (function () {
|
|
8
|
-
function ObsValueAdapter(helper) {
|
|
9
|
-
this.helper = helper;
|
|
10
|
-
}
|
|
11
|
-
ObsValueAdapter.prototype.generateFormPayload = function (form) {
|
|
12
|
-
return this.helper.getObsNodePayload(form.rootNode);
|
|
13
|
-
// TODO: Get rid of the section below when the helper is stable.
|
|
14
|
-
// // Traverse to get all nodes
|
|
15
|
-
// let pages = this.traverse(form.rootNode);
|
|
16
|
-
// // Extract actual question nodes
|
|
17
|
-
// let questionNodes = this.getQuestionNodes(pages);
|
|
18
|
-
// // Get obs Payload
|
|
19
|
-
// return this.getObsPayload(questionNodes);
|
|
20
|
-
};
|
|
21
|
-
ObsValueAdapter.prototype.populateForm = function (form, payload) {
|
|
22
|
-
this.helper.setNodeValue(form.rootNode, payload);
|
|
23
|
-
// TODO: Get rid of the section below when the helper is stable.
|
|
24
|
-
// // Traverse to get all nodes
|
|
25
|
-
// let pages = this.traverse(form.rootNode);
|
|
26
|
-
// // Extract actual question nodes
|
|
27
|
-
// let questionNodes = this.getQuestionNodes(pages);
|
|
28
|
-
// // Extract set obs
|
|
29
|
-
// this.setValues(questionNodes, payload);
|
|
30
|
-
};
|
|
31
|
-
// TODO: Get rid of all the functions below as they will not be needed
|
|
32
|
-
// once the helper is stable
|
|
33
|
-
ObsValueAdapter.prototype.setValues = function (nodes, payload, forcegroup) {
|
|
34
|
-
if (nodes) {
|
|
35
|
-
var _loop_1 = function (node) {
|
|
36
|
-
if (node instanceof LeafNode) {
|
|
37
|
-
this_1.setObsValue(node, payload);
|
|
38
|
-
if (node.question.enableHistoricalValue &&
|
|
39
|
-
node.initialValue !== undefined) {
|
|
40
|
-
node.question.setHistoricalValue(false);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else if ((node.question &&
|
|
44
|
-
node.question.extras &&
|
|
45
|
-
node.question.renderingType === 'group') ||
|
|
46
|
-
forcegroup) {
|
|
47
|
-
var groupObs = _.find(payload, function (o) {
|
|
48
|
-
return (o.concept.uuid === node.question.extras.questionOptions.concept &&
|
|
49
|
-
o.groupMembers);
|
|
50
|
-
});
|
|
51
|
-
if (groupObs) {
|
|
52
|
-
if (node.node) {
|
|
53
|
-
node.node['initialValue'] = groupObs;
|
|
54
|
-
}
|
|
55
|
-
this_1.setValues(node.groupMembers, groupObs.groupMembers);
|
|
56
|
-
}
|
|
57
|
-
if (forcegroup && node.payload) {
|
|
58
|
-
this_1.setValues(node.groupMembers, node.payload.groupMembers);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else if (node instanceof GroupNode &&
|
|
62
|
-
node.question.extras.type === 'complex-obs') {
|
|
63
|
-
this_1.setComplexObsValue(node, payload);
|
|
64
|
-
}
|
|
65
|
-
else if (node.question &&
|
|
66
|
-
node.question.extras &&
|
|
67
|
-
node.question.renderingType === 'repeating' &&
|
|
68
|
-
!forcegroup) {
|
|
69
|
-
this_1.setRepeatingGroupValues(node, payload);
|
|
70
|
-
node.node.control.updateValueAndValidity();
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
throw new Error('not implemented');
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
var this_1 = this;
|
|
77
|
-
try {
|
|
78
|
-
for (var nodes_1 = tslib_1.__values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
79
|
-
var node = nodes_1_1.value;
|
|
80
|
-
_loop_1(node);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
84
|
-
finally {
|
|
85
|
-
try {
|
|
86
|
-
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
87
|
-
}
|
|
88
|
-
finally { if (e_1) throw e_1.error; }
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
var e_1, _a;
|
|
92
|
-
};
|
|
93
|
-
ObsValueAdapter.prototype.setObsValue = function (node, payload) {
|
|
94
|
-
if ((node.question &&
|
|
95
|
-
node.question.extras &&
|
|
96
|
-
(node.question.extras.type === 'obs' ||
|
|
97
|
-
(node.question.extras.type === 'complex-obs-child' &&
|
|
98
|
-
node.question.extras.questionOptions.obsField === 'value')) &&
|
|
99
|
-
node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||
|
|
100
|
-
node.question.extras.questionOptions.rendering !== 'checkbox' ||
|
|
101
|
-
node.question.extras.questionOptions.rendering !== 'multi-select') {
|
|
102
|
-
var obs = _.find(payload, function (o) {
|
|
103
|
-
return o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
104
|
-
});
|
|
105
|
-
if (obs) {
|
|
106
|
-
if (obs.value instanceof Object) {
|
|
107
|
-
node.control.setValue(obs.value.uuid);
|
|
108
|
-
node.control.updateValueAndValidity();
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
node.control.setValue(obs.value);
|
|
112
|
-
node.control.updateValueAndValidity();
|
|
113
|
-
}
|
|
114
|
-
node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
var multiObs = _.filter(payload, function (o) {
|
|
119
|
-
return o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
120
|
-
});
|
|
121
|
-
if (multiObs && multiObs.length > 0) {
|
|
122
|
-
node.control.setValue(this.getMultiselectValues(multiObs));
|
|
123
|
-
node.control.updateValueAndValidity();
|
|
124
|
-
node['initialValue'] = multiObs;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
ObsValueAdapter.prototype.setComplexObsValue = function (node, payload) {
|
|
129
|
-
var valueField;
|
|
130
|
-
var dateField;
|
|
131
|
-
// tslint:disable-next-line:forin
|
|
132
|
-
for (var o in node.children) {
|
|
133
|
-
if (node.children[o].question.extras.questionOptions
|
|
134
|
-
.obsField === 'value') {
|
|
135
|
-
valueField = node.children[o];
|
|
136
|
-
}
|
|
137
|
-
if (node.children[o].question.extras.questionOptions
|
|
138
|
-
.obsField === 'obsDatetime') {
|
|
139
|
-
dateField = node.children[o];
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// set the usual obs value
|
|
143
|
-
this.setObsValue(valueField, payload);
|
|
144
|
-
// set the obs date
|
|
145
|
-
var obs = _.find(payload, function (o) {
|
|
146
|
-
return o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
147
|
-
});
|
|
148
|
-
if (obs) {
|
|
149
|
-
dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };
|
|
150
|
-
dateField.control.setValue(obs.obsDatetime);
|
|
151
|
-
dateField.control.updateValueAndValidity();
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
ObsValueAdapter.prototype.getMultiselectValues = function (multiObs) {
|
|
155
|
-
var values = [];
|
|
156
|
-
try {
|
|
157
|
-
for (var multiObs_1 = tslib_1.__values(multiObs), multiObs_1_1 = multiObs_1.next(); !multiObs_1_1.done; multiObs_1_1 = multiObs_1.next()) {
|
|
158
|
-
var m = multiObs_1_1.value;
|
|
159
|
-
values.push(m.value.uuid);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
163
|
-
finally {
|
|
164
|
-
try {
|
|
165
|
-
if (multiObs_1_1 && !multiObs_1_1.done && (_a = multiObs_1.return)) _a.call(multiObs_1);
|
|
166
|
-
}
|
|
167
|
-
finally { if (e_2) throw e_2.error; }
|
|
168
|
-
}
|
|
169
|
-
return values;
|
|
170
|
-
var e_2, _a;
|
|
171
|
-
};
|
|
172
|
-
ObsValueAdapter.prototype.setRepeatingGroupValues = function (node, payload) {
|
|
173
|
-
var groupRepeatingObs = _.filter(payload, function (o) {
|
|
174
|
-
var found = o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
175
|
-
var intersect = false;
|
|
176
|
-
if (found && o.groupMembers) {
|
|
177
|
-
var obs = o.groupMembers.map(function (a) {
|
|
178
|
-
return a.concept.uuid;
|
|
179
|
-
});
|
|
180
|
-
var schemaQuestions = node.question.questions.map(function (a) {
|
|
181
|
-
return a.extras.questionOptions.concept;
|
|
182
|
-
});
|
|
183
|
-
intersect = _.intersection(obs, schemaQuestions).length > 0;
|
|
184
|
-
}
|
|
185
|
-
return found && intersect;
|
|
186
|
-
});
|
|
187
|
-
if (groupRepeatingObs.length > 0) {
|
|
188
|
-
node.node['initialValue'] = groupRepeatingObs;
|
|
189
|
-
for (var i = 0; i < groupRepeatingObs.length; i++) {
|
|
190
|
-
node.node.createChildNode();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
var groups = [];
|
|
194
|
-
var index = 0;
|
|
195
|
-
var _loop_2 = function (child) {
|
|
196
|
-
var children = Object.keys(child.children).map(function (key) {
|
|
197
|
-
return child.children[key];
|
|
198
|
-
});
|
|
199
|
-
var groupPayload = groupRepeatingObs[index];
|
|
200
|
-
groups.push({
|
|
201
|
-
question: node.question,
|
|
202
|
-
groupMembers: children,
|
|
203
|
-
payload: groupPayload
|
|
204
|
-
});
|
|
205
|
-
index++;
|
|
206
|
-
};
|
|
207
|
-
try {
|
|
208
|
-
for (var _a = tslib_1.__values(node.node.children), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
209
|
-
var child = _b.value;
|
|
210
|
-
_loop_2(child);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
214
|
-
finally {
|
|
215
|
-
try {
|
|
216
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
217
|
-
}
|
|
218
|
-
finally { if (e_3) throw e_3.error; }
|
|
219
|
-
}
|
|
220
|
-
this.setValues(groups, groupRepeatingObs, true);
|
|
221
|
-
var e_3, _c;
|
|
222
|
-
};
|
|
223
|
-
ObsValueAdapter.prototype.getQuestionNodes = function (pages) {
|
|
224
|
-
var merged = [];
|
|
225
|
-
var arrays = [];
|
|
226
|
-
try {
|
|
227
|
-
for (var pages_1 = tslib_1.__values(pages), pages_1_1 = pages_1.next(); !pages_1_1.done; pages_1_1 = pages_1.next()) {
|
|
228
|
-
var page = pages_1_1.value;
|
|
229
|
-
try {
|
|
230
|
-
for (var _a = tslib_1.__values(page.page), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
231
|
-
var section = _b.value;
|
|
232
|
-
arrays.push(section.section);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
236
|
-
finally {
|
|
237
|
-
try {
|
|
238
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
239
|
-
}
|
|
240
|
-
finally { if (e_4) throw e_4.error; }
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
245
|
-
finally {
|
|
246
|
-
try {
|
|
247
|
-
if (pages_1_1 && !pages_1_1.done && (_d = pages_1.return)) _d.call(pages_1);
|
|
248
|
-
}
|
|
249
|
-
finally { if (e_5) throw e_5.error; }
|
|
250
|
-
}
|
|
251
|
-
return merged.concat.apply([], arrays);
|
|
252
|
-
var e_5, _d, e_4, _c;
|
|
253
|
-
};
|
|
254
|
-
ObsValueAdapter.prototype.repeatingGroup = function (nodes) {
|
|
255
|
-
var toReturn = [];
|
|
256
|
-
try {
|
|
257
|
-
for (var nodes_2 = tslib_1.__values(nodes), nodes_2_1 = nodes_2.next(); !nodes_2_1.done; nodes_2_1 = nodes_2.next()) {
|
|
258
|
-
var node = nodes_2_1.value;
|
|
259
|
-
toReturn.push({
|
|
260
|
-
question: node.question,
|
|
261
|
-
groupMembers: this.traverse(node)
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
266
|
-
finally {
|
|
267
|
-
try {
|
|
268
|
-
if (nodes_2_1 && !nodes_2_1.done && (_a = nodes_2.return)) _a.call(nodes_2);
|
|
269
|
-
}
|
|
270
|
-
finally { if (e_6) throw e_6.error; }
|
|
271
|
-
}
|
|
272
|
-
return toReturn;
|
|
273
|
-
var e_6, _a;
|
|
274
|
-
};
|
|
275
|
-
ObsValueAdapter.prototype.processGroup = function (obs, obsPayload) {
|
|
276
|
-
if (obs.question &&
|
|
277
|
-
obs.question.extras &&
|
|
278
|
-
obs.question.extras.questionOptions.rendering === 'group') {
|
|
279
|
-
var members = _.filter(this.getObsPayload(obs.groupMembers), function (o) {
|
|
280
|
-
return o.value !== '';
|
|
281
|
-
});
|
|
282
|
-
var mappedMembers = members.map(function (a) {
|
|
283
|
-
return a.voided;
|
|
284
|
-
});
|
|
285
|
-
if (members.length > 0 && mappedMembers.every(Boolean)) {
|
|
286
|
-
obsPayload.push({
|
|
287
|
-
uuid: obs.node.initialValue.uuid,
|
|
288
|
-
voided: true
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
else if (members.length > 0) {
|
|
292
|
-
if (obs.node.initialValue) {
|
|
293
|
-
obsPayload.push({
|
|
294
|
-
uuid: obs.node.initialValue.uuid,
|
|
295
|
-
groupMembers: members
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
obsPayload.push({
|
|
300
|
-
concept: obs.question.extras.questionOptions.concept,
|
|
301
|
-
groupMembers: members
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
ObsValueAdapter.prototype.mapInitialGroup = function (group) {
|
|
308
|
-
var current = {};
|
|
309
|
-
try {
|
|
310
|
-
for (var _a = tslib_1.__values(group.groupMembers), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
311
|
-
var member = _b.value;
|
|
312
|
-
var value = '';
|
|
313
|
-
if (member.value instanceof Object) {
|
|
314
|
-
value = member.value.uuid;
|
|
315
|
-
}
|
|
316
|
-
else if (member.value) {
|
|
317
|
-
value = member.value;
|
|
318
|
-
}
|
|
319
|
-
else if (member.groupMembers && member.groupMembers.length > 0) {
|
|
320
|
-
current = this.mapInitialGroup(group);
|
|
321
|
-
}
|
|
322
|
-
current[member.concept.uuid + ':' + value] = value;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
326
|
-
finally {
|
|
327
|
-
try {
|
|
328
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
329
|
-
}
|
|
330
|
-
finally { if (e_7) throw e_7.error; }
|
|
331
|
-
}
|
|
332
|
-
return current;
|
|
333
|
-
var e_7, _c;
|
|
334
|
-
};
|
|
335
|
-
ObsValueAdapter.prototype.mapModelGroup = function (node, value) {
|
|
336
|
-
var current = {};
|
|
337
|
-
for (var key in value) {
|
|
338
|
-
if (value.hasOwnProperty(key)) {
|
|
339
|
-
var groupQuestion = _.find(node.question.questions, {
|
|
340
|
-
key: key
|
|
341
|
-
});
|
|
342
|
-
var modelValue = value[key];
|
|
343
|
-
if (modelValue instanceof Object) {
|
|
344
|
-
}
|
|
345
|
-
else if (modelValue !== '') {
|
|
346
|
-
current[groupQuestion.extras.questionOptions.concept + ':' + modelValue] = modelValue;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
return current;
|
|
351
|
-
};
|
|
352
|
-
ObsValueAdapter.prototype.processRepeatingGroups = function (node, obsPayload) {
|
|
353
|
-
var initialValues = [];
|
|
354
|
-
if (node.node.initialValue) {
|
|
355
|
-
try {
|
|
356
|
-
for (var _a = tslib_1.__values(node.node.initialValue), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
357
|
-
var group = _b.value;
|
|
358
|
-
initialValues.push({
|
|
359
|
-
uuid: group.uuid,
|
|
360
|
-
value: this.mapInitialGroup(group)
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
365
|
-
finally {
|
|
366
|
-
try {
|
|
367
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
368
|
-
}
|
|
369
|
-
finally { if (e_8) throw e_8.error; }
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
var repeatingModel = [];
|
|
373
|
-
try {
|
|
374
|
-
for (var _d = tslib_1.__values(node.node.control.value), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
375
|
-
var value = _e.value;
|
|
376
|
-
repeatingModel.push({ value: this.mapModelGroup(node, value) });
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
380
|
-
finally {
|
|
381
|
-
try {
|
|
382
|
-
if (_e && !_e.done && (_f = _d.return)) _f.call(_d);
|
|
383
|
-
}
|
|
384
|
-
finally { if (e_9) throw e_9.error; }
|
|
385
|
-
}
|
|
386
|
-
var deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);
|
|
387
|
-
var newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);
|
|
388
|
-
var groupConcept = node.question.extras.questionOptions.concept;
|
|
389
|
-
var newObsPayload = [];
|
|
390
|
-
if (deleted.length > 0) {
|
|
391
|
-
var deletedObs = this.createGroupDeletedObs(deleted);
|
|
392
|
-
try {
|
|
393
|
-
for (var deletedObs_1 = tslib_1.__values(deletedObs), deletedObs_1_1 = deletedObs_1.next(); !deletedObs_1_1.done; deletedObs_1_1 = deletedObs_1.next()) {
|
|
394
|
-
var d = deletedObs_1_1.value;
|
|
395
|
-
obsPayload.push(d);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
399
|
-
finally {
|
|
400
|
-
try {
|
|
401
|
-
if (deletedObs_1_1 && !deletedObs_1_1.done && (_g = deletedObs_1.return)) _g.call(deletedObs_1);
|
|
402
|
-
}
|
|
403
|
-
finally { if (e_10) throw e_10.error; }
|
|
404
|
-
}
|
|
405
|
-
if (newObs.length > 0) {
|
|
406
|
-
newObsPayload = this.createGroupNewObs(newObs, groupConcept);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
else {
|
|
410
|
-
newObsPayload = this.createGroupNewObs(newObs, groupConcept);
|
|
411
|
-
}
|
|
412
|
-
if (newObsPayload.length > 0) {
|
|
413
|
-
try {
|
|
414
|
-
for (var newObsPayload_1 = tslib_1.__values(newObsPayload), newObsPayload_1_1 = newObsPayload_1.next(); !newObsPayload_1_1.done; newObsPayload_1_1 = newObsPayload_1.next()) {
|
|
415
|
-
var p = newObsPayload_1_1.value;
|
|
416
|
-
obsPayload.push(p);
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
420
|
-
finally {
|
|
421
|
-
try {
|
|
422
|
-
if (newObsPayload_1_1 && !newObsPayload_1_1.done && (_h = newObsPayload_1.return)) _h.call(newObsPayload_1);
|
|
423
|
-
}
|
|
424
|
-
finally { if (e_11) throw e_11.error; }
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
var e_8, _c, e_9, _f, e_10, _g, e_11, _h;
|
|
428
|
-
};
|
|
429
|
-
ObsValueAdapter.prototype.leftOuterJoinArrays = function (first, second) {
|
|
430
|
-
var unique = first.filter(function (obj) {
|
|
431
|
-
return !second.some(function (obj2) {
|
|
432
|
-
return _.isEqual(obj.value, obj2.value);
|
|
433
|
-
});
|
|
434
|
-
});
|
|
435
|
-
return unique;
|
|
436
|
-
};
|
|
437
|
-
ObsValueAdapter.prototype.createGroupNewObs = function (payload, groupConcept) {
|
|
438
|
-
var newPayload = [];
|
|
439
|
-
try {
|
|
440
|
-
for (var payload_1 = tslib_1.__values(payload), payload_1_1 = payload_1.next(); !payload_1_1.done; payload_1_1 = payload_1.next()) {
|
|
441
|
-
var obs = payload_1_1.value;
|
|
442
|
-
var groupPayload = [];
|
|
443
|
-
/* tslint:disable */
|
|
444
|
-
for (var key in obs.value) {
|
|
445
|
-
var concept = key.split(':')[0];
|
|
446
|
-
var value = key.split(':')[1];
|
|
447
|
-
groupPayload.push({ concept: concept, value: value });
|
|
448
|
-
}
|
|
449
|
-
newPayload.push({ concept: groupConcept, groupMembers: groupPayload });
|
|
450
|
-
/* tslint:enable */
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
454
|
-
finally {
|
|
455
|
-
try {
|
|
456
|
-
if (payload_1_1 && !payload_1_1.done && (_a = payload_1.return)) _a.call(payload_1);
|
|
457
|
-
}
|
|
458
|
-
finally { if (e_12) throw e_12.error; }
|
|
459
|
-
}
|
|
460
|
-
return newPayload;
|
|
461
|
-
var e_12, _a;
|
|
462
|
-
};
|
|
463
|
-
ObsValueAdapter.prototype.createGroupDeletedObs = function (payload) {
|
|
464
|
-
var deletedObs = [];
|
|
465
|
-
try {
|
|
466
|
-
for (var payload_2 = tslib_1.__values(payload), payload_2_1 = payload_2.next(); !payload_2_1.done; payload_2_1 = payload_2.next()) {
|
|
467
|
-
var d = payload_2_1.value;
|
|
468
|
-
deletedObs.push({ uuid: d.uuid, voided: true });
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
472
|
-
finally {
|
|
473
|
-
try {
|
|
474
|
-
if (payload_2_1 && !payload_2_1.done && (_a = payload_2.return)) _a.call(payload_2);
|
|
475
|
-
}
|
|
476
|
-
finally { if (e_13) throw e_13.error; }
|
|
477
|
-
}
|
|
478
|
-
return deletedObs;
|
|
479
|
-
var e_13, _a;
|
|
480
|
-
};
|
|
481
|
-
ObsValueAdapter.prototype.getExactTime = function (datetime) {
|
|
482
|
-
return datetime.substring(0, 19).replace('T', ' ');
|
|
483
|
-
};
|
|
484
|
-
ObsValueAdapter.prototype.processObs = function (obs, obsPayload) {
|
|
485
|
-
if (obs.control && obs.question.extras) {
|
|
486
|
-
var obsValue = {
|
|
487
|
-
concept: obs.question.extras.questionOptions.concept,
|
|
488
|
-
value: obs.question.extras.questionOptions.rendering === 'date' &&
|
|
489
|
-
!this.isEmpty(obs.control.value)
|
|
490
|
-
? this.getExactTime(obs.control.value)
|
|
491
|
-
: obs.control.value
|
|
492
|
-
};
|
|
493
|
-
if (obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||
|
|
494
|
-
obs.question.extras.questionOptions.rendering === 'checkbox' ||
|
|
495
|
-
obs.question.extras.questionOptions.rendering === 'multi-select') {
|
|
496
|
-
var multis = this.processMultiSelect(obs.question.extras.questionOptions.concept, obs.control.value);
|
|
497
|
-
if (obs.initialValue) {
|
|
498
|
-
var mappedInitial = obs.initialValue.map(function (a) {
|
|
499
|
-
return {
|
|
500
|
-
uuid: a.uuid,
|
|
501
|
-
value: { concept: a.concept.uuid, value: a.value.uuid }
|
|
502
|
-
};
|
|
503
|
-
});
|
|
504
|
-
var mappedCurrent = multis.map(function (a) {
|
|
505
|
-
return { value: a };
|
|
506
|
-
});
|
|
507
|
-
var deletedObs = this.leftOuterJoinArrays(mappedInitial, mappedCurrent);
|
|
508
|
-
var newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);
|
|
509
|
-
this.processDeletedMultiSelectObs(deletedObs, obsPayload);
|
|
510
|
-
this.processNewMultiSelectObs(newObs, obsPayload);
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
this.processNewMultiSelectObs(multis, obsPayload);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
else {
|
|
517
|
-
if (obs.initialValue && obs.initialValue.value && obsValue) {
|
|
518
|
-
this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);
|
|
519
|
-
}
|
|
520
|
-
else if (obsValue.value !== '' && obsValue.value !== null) {
|
|
521
|
-
obsPayload.push(obsValue);
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
};
|
|
526
|
-
ObsValueAdapter.prototype.processComplexObs = function (node, obsPayload) {
|
|
527
|
-
var valueField;
|
|
528
|
-
var dateField;
|
|
529
|
-
// tslint:disable-next-line:forin
|
|
530
|
-
for (var o in node.children) {
|
|
531
|
-
if (node.children[o].question.extras.questionOptions
|
|
532
|
-
.obsField === 'value') {
|
|
533
|
-
valueField = node.children[o];
|
|
534
|
-
}
|
|
535
|
-
if (node.children[o].question.extras.questionOptions
|
|
536
|
-
.obsField === 'obsDatetime') {
|
|
537
|
-
dateField = node.children[o];
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
if (valueField) {
|
|
541
|
-
// process obs as usual
|
|
542
|
-
this.processObs(valueField, obsPayload);
|
|
543
|
-
// obtain the last inserted obs and set the obsDatetime
|
|
544
|
-
var createdPayload = obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;
|
|
545
|
-
if (createdPayload &&
|
|
546
|
-
((createdPayload.concept &&
|
|
547
|
-
createdPayload.concept ===
|
|
548
|
-
node.question.extras.questionOptions.concept) ||
|
|
549
|
-
(valueField.initialValue &&
|
|
550
|
-
createdPayload.uuid === valueField.initialValue.obsUuid))) {
|
|
551
|
-
if (dateField.initialValue &&
|
|
552
|
-
dateField.control.value !== dateField.initialValue.value) {
|
|
553
|
-
createdPayload.obsDatetime = dateField.control.value;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
};
|
|
558
|
-
ObsValueAdapter.prototype.processDeletedMultiSelectObs = function (values, obsPayload) {
|
|
559
|
-
try {
|
|
560
|
-
for (var values_1 = tslib_1.__values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
|
|
561
|
-
var value = values_1_1.value;
|
|
562
|
-
obsPayload.push({ uuid: value.uuid, voided: true });
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
566
|
-
finally {
|
|
567
|
-
try {
|
|
568
|
-
if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
|
|
569
|
-
}
|
|
570
|
-
finally { if (e_14) throw e_14.error; }
|
|
571
|
-
}
|
|
572
|
-
var e_14, _a;
|
|
573
|
-
};
|
|
574
|
-
ObsValueAdapter.prototype.processNewMultiSelectObs = function (values, obsPayload) {
|
|
575
|
-
try {
|
|
576
|
-
for (var values_2 = tslib_1.__values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {
|
|
577
|
-
var multi = values_2_1.value;
|
|
578
|
-
if (multi.value instanceof Object) {
|
|
579
|
-
obsPayload.push(multi.value);
|
|
580
|
-
}
|
|
581
|
-
else {
|
|
582
|
-
obsPayload.push(multi);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
587
|
-
finally {
|
|
588
|
-
try {
|
|
589
|
-
if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2);
|
|
590
|
-
}
|
|
591
|
-
finally { if (e_15) throw e_15.error; }
|
|
592
|
-
}
|
|
593
|
-
var e_15, _a;
|
|
594
|
-
};
|
|
595
|
-
ObsValueAdapter.prototype.updateOrVoidObs = function (obsValue, initialValue, obsPayload) {
|
|
596
|
-
if (this.isEmpty(obsValue.value) && initialValue.value) {
|
|
597
|
-
obsPayload.push({ uuid: initialValue.obsUuid, voided: true });
|
|
598
|
-
}
|
|
599
|
-
else if (!this.isEmpty(obsValue.value) && initialValue.value) {
|
|
600
|
-
obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });
|
|
601
|
-
}
|
|
602
|
-
};
|
|
603
|
-
ObsValueAdapter.prototype.isEmpty = function (value) {
|
|
604
|
-
if (value === '' ||
|
|
605
|
-
value === null ||
|
|
606
|
-
value === undefined) {
|
|
607
|
-
return true;
|
|
608
|
-
}
|
|
609
|
-
return false;
|
|
610
|
-
};
|
|
611
|
-
ObsValueAdapter.prototype.traverse = function (o, type) {
|
|
612
|
-
var questions = [];
|
|
613
|
-
if (o.children) {
|
|
614
|
-
if (o.children instanceof Array) {
|
|
615
|
-
var returned = this.repeatingGroup(o.children);
|
|
616
|
-
return returned;
|
|
617
|
-
}
|
|
618
|
-
if (o.children instanceof Object) {
|
|
619
|
-
for (var key in o.children) {
|
|
620
|
-
if (o.children.hasOwnProperty(key)) {
|
|
621
|
-
switch (o.children[key].question.renderingType) {
|
|
622
|
-
case 'page':
|
|
623
|
-
var page = this.traverse(o.children[key]);
|
|
624
|
-
questions.push({
|
|
625
|
-
page: page,
|
|
626
|
-
label: o.children[key].question.label
|
|
627
|
-
});
|
|
628
|
-
break;
|
|
629
|
-
case 'section':
|
|
630
|
-
var section = this.traverse(o.children[key]);
|
|
631
|
-
questions.push({
|
|
632
|
-
section: section,
|
|
633
|
-
node: o.children[key],
|
|
634
|
-
label: o.children[key].question.label
|
|
635
|
-
});
|
|
636
|
-
break;
|
|
637
|
-
case 'group':
|
|
638
|
-
var qs = this.traverse(o.children[key]);
|
|
639
|
-
questions.push({
|
|
640
|
-
node: o.children[key],
|
|
641
|
-
question: o.children[key].question,
|
|
642
|
-
groupMembers: qs
|
|
643
|
-
});
|
|
644
|
-
break;
|
|
645
|
-
case 'repeating':
|
|
646
|
-
var rep = this.repeatingGroup(o.children[key].children);
|
|
647
|
-
questions.push({
|
|
648
|
-
node: o.children[key],
|
|
649
|
-
question: o.children[key].question,
|
|
650
|
-
groupMembers: rep
|
|
651
|
-
});
|
|
652
|
-
break;
|
|
653
|
-
default:
|
|
654
|
-
questions.push(o.children[key]);
|
|
655
|
-
break;
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
return questions;
|
|
662
|
-
};
|
|
663
|
-
ObsValueAdapter.prototype.processMultiSelect = function (concept, values) {
|
|
664
|
-
var multiSelectObs = [];
|
|
665
|
-
if (values && values !== null) {
|
|
666
|
-
try {
|
|
667
|
-
for (var values_3 = tslib_1.__values(values), values_3_1 = values_3.next(); !values_3_1.done; values_3_1 = values_3.next()) {
|
|
668
|
-
var value = values_3_1.value;
|
|
669
|
-
var obs = {
|
|
670
|
-
concept: concept,
|
|
671
|
-
value: value
|
|
672
|
-
};
|
|
673
|
-
multiSelectObs.push(obs);
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
677
|
-
finally {
|
|
678
|
-
try {
|
|
679
|
-
if (values_3_1 && !values_3_1.done && (_a = values_3.return)) _a.call(values_3);
|
|
680
|
-
}
|
|
681
|
-
finally { if (e_16) throw e_16.error; }
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
return multiSelectObs;
|
|
685
|
-
var e_16, _a;
|
|
686
|
-
};
|
|
687
|
-
ObsValueAdapter.prototype.isObs = function (node) {
|
|
688
|
-
return (node.question.extras.type === 'obs' ||
|
|
689
|
-
node.question.extras.type === 'obsGroup' ||
|
|
690
|
-
node.question.extras.type === 'complex-obs');
|
|
691
|
-
};
|
|
692
|
-
ObsValueAdapter.prototype.getObsPayload = function (nodes) {
|
|
693
|
-
var obsPayload = [];
|
|
694
|
-
try {
|
|
695
|
-
for (var nodes_3 = tslib_1.__values(nodes), nodes_3_1 = nodes_3.next(); !nodes_3_1.done; nodes_3_1 = nodes_3.next()) {
|
|
696
|
-
var node = nodes_3_1.value;
|
|
697
|
-
if (this.isObs(node)) {
|
|
698
|
-
if ((node.groupMembers,
|
|
699
|
-
node.question.extras.questionOptions.rendering === 'group')) {
|
|
700
|
-
this.processGroup(node, obsPayload);
|
|
701
|
-
}
|
|
702
|
-
else if ((node.groupMembers,
|
|
703
|
-
node.question.extras.questionOptions.rendering === 'repeating')) {
|
|
704
|
-
this.processRepeatingGroups(node, obsPayload);
|
|
705
|
-
}
|
|
706
|
-
else if (node instanceof GroupNode &&
|
|
707
|
-
node.question.extras.type === 'complex-obs') {
|
|
708
|
-
this.processComplexObs(node, obsPayload);
|
|
709
|
-
}
|
|
710
|
-
else {
|
|
711
|
-
this.processObs(node, obsPayload);
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
catch (e_17_1) { e_17 = { error: e_17_1 }; }
|
|
717
|
-
finally {
|
|
718
|
-
try {
|
|
719
|
-
if (nodes_3_1 && !nodes_3_1.done && (_a = nodes_3.return)) _a.call(nodes_3);
|
|
720
|
-
}
|
|
721
|
-
finally { if (e_17) throw e_17.error; }
|
|
722
|
-
}
|
|
723
|
-
return obsPayload;
|
|
724
|
-
var e_17, _a;
|
|
725
|
-
};
|
|
726
|
-
ObsValueAdapter.decorators = [
|
|
727
|
-
{ type: Injectable },
|
|
728
|
-
];
|
|
729
|
-
ObsValueAdapter.ctorParameters = function () { return [
|
|
730
|
-
{ type: ObsAdapterHelper }
|
|
731
|
-
]; };
|
|
732
|
-
return ObsValueAdapter;
|
|
733
|
-
}());
|
|
734
|
-
export { ObsValueAdapter };
|
|
735
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtb3Blbm1ycy1mb3JtZW50cnkvIiwic291cmNlcyI6WyJmb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL29icy5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RDtJQUVFLHlCQUFvQixNQUF3QjtRQUF4QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtJQUFHLENBQUM7SUFFaEQsNkNBQW1CLEdBQW5CLFVBQW9CLElBQVU7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELGdFQUFnRTtRQUNoRSxnQ0FBZ0M7UUFDaEMsNENBQTRDO1FBQzVDLG1DQUFtQztRQUNuQyxvREFBb0Q7UUFDcEQscUJBQXFCO1FBQ3JCLDRDQUE0QztJQUM5QyxDQUFDO0lBRUQsc0NBQVksR0FBWixVQUFhLElBQVUsRUFBRSxPQUFPO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakQsZ0VBQWdFO1FBQ2hFLGdDQUFnQztRQUNoQyw0Q0FBNEM7UUFDNUMsbUNBQW1DO1FBQ25DLG9EQUFvRDtRQUNwRCxxQkFBcUI7UUFDckIsMENBQTBDO0lBQzVDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsNEJBQTRCO0lBRTVCLG1DQUFTLEdBQVQsVUFBVSxLQUFLLEVBQUUsT0FBUSxFQUFFLFVBQVc7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LENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDUixJQUFJLFlBQVksU0FBUzt3QkFDeEIsSUFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxhQUMvQyxDQUFDLENBQUMsQ0FBQzt3QkFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUMzQyxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUM7YUFDRjs7Ozs7Ozs7O1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQzs7SUFDcEIsQ0FBQzs7Z0JBNWxCRixVQUFVOzs7Z0JBRkYsZ0JBQWdCOztJQStsQnpCLHNCQUFDO0NBQUEsQUE3bEJELElBNmxCQztTQTVsQlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAncnhqcyc7XG5cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgTGVhZk5vZGUsIEdyb3VwTm9kZSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtJztcbmltcG9ydCB7IFZhbHVlQWRhcHRlciB9IGZyb20gJy4vdmFsdWUuYWRhcHRlcic7XG5pbXBvcnQgeyBPYnNBZGFwdGVySGVscGVyIH0gZnJvbSAnLi9vYnMtYWRhcHRlci1oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2JzVmFsdWVBZGFwdGVyIGltcGxlbWVudHMgVmFsdWVBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoZWxwZXI6IE9ic0FkYXB0ZXJIZWxwZXIpIHt9XG5cbiAgZ2VuZXJhdGVGb3JtUGF5bG9hZChmb3JtOiBGb3JtKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLmdldE9ic05vZGVQYXlsb2FkKGZvcm0ucm9vdE5vZGUpO1xuICAgIC8vIFRPRE86IEdldCByaWQgb2YgdGhlIHNlY3Rpb24gYmVsb3cgd2hlbiB0aGUgaGVscGVyIGlzIHN0YWJsZS5cbiAgICAvLyAvLyBUcmF2ZXJzZSAgdG8gZ2V0IGFsbCBub2Rlc1xuICAgIC8vIGxldCBwYWdlcyA9IHRoaXMudHJhdmVyc2UoZm9ybS5yb290Tm9kZSk7XG4gICAgLy8gLy8gRXh0cmFjdCBhY3R1YWwgcXVlc3Rpb24gbm9kZXNcbiAgICAvLyBsZXQgcXVlc3Rpb25Ob2RlcyA9IHRoaXMuZ2V0UXVlc3Rpb25Ob2RlcyhwYWdlcyk7XG4gICAgLy8gLy8gR2V0IG9icyBQYXlsb2FkXG4gICAgLy8gcmV0dXJuIHRoaXMuZ2V0T2JzUGF5bG9hZChxdWVzdGlvbk5vZGVzKTtcbiAgfVxuXG4gIHBvcHVsYXRlRm9ybShmb3JtOiBGb3JtLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5oZWxwZXIuc2V0Tm9kZVZhbHVlKGZvcm0ucm9vdE5vZGUsIHBheWxvYWQpO1xuXG4gICAgLy8gVE9ETzogR2V0IHJpZCBvZiB0aGUgc2VjdGlvbiBiZWxvdyB3aGVuIHRoZSBoZWxwZXIgaXMgc3RhYmxlLlxuICAgIC8vIC8vIFRyYXZlcnNlICB0byBnZXQgYWxsIG5vZGVzXG4gICAgLy8gbGV0IHBhZ2VzID0gdGhpcy50cmF2ZXJzZShmb3JtLnJvb3ROb2RlKTtcbiAgICAvLyAvLyBFeHRyYWN0IGFjdHVhbCBxdWVzdGlvbiBub2Rlc1xuICAgIC8vIGxldCBxdWVzdGlvbk5vZGVzID0gdGhpcy5nZXRRdWVzdGlvbk5vZGVzKHBhZ2VzKTtcbiAgICAvLyAvLyBFeHRyYWN0IHNldCBvYnNcbiAgICAvLyB0aGlzLnNldFZhbHVlcyhxdWVzdGlvbk5vZGVzLCBwYXlsb2FkKTtcbiAgfVxuXG4gIC8vIFRPRE86IEdldCByaWQgb2YgYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgYXMgdGhleSB3aWxsIG5vdCBiZSBuZWVkZWRcbiAgLy8gb25jZSB0aGUgaGVscGVyIGlzIHN0YWJsZVxuXG4gIHNldFZhbHVlcyhub2RlcywgcGF5bG9hZD8sIGZvcmNlZ3JvdXA/KSB7XG4gICAgaWYgKG5vZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBMZWFmTm9kZSkge1xuICAgICAgICAgIHRoaXMuc2V0T2JzVmFsdWUobm9kZSwgcGF5bG9hZCk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5lbmFibGVIaXN0b3JpY2FsVmFsdWUgJiZcbiAgICAgICAgICAgIG5vZGUuaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uc2V0SGlzdG9yaWNhbFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKG5vZGUucXVlc3Rpb24gJiZcbiAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzICYmXG4gICAgICAgICAgICBub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdncm91cCcpIHx8XG4gICAgICAgICAgZm9yY2Vncm91cFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBncm91cE9icyA9IF8uZmluZChwYXlsb2FkLCAobzogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBvLmNvbmNlcHQudXVpZCA9PT0gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmNvbmNlcHQgJiZcbiAgICAgICAgICAgICAgby5ncm91cE1lbWJlcnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGdyb3VwT2JzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlKSB7XG4gICAgICAgICAgICAgIG5vZGUubm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBncm91cE9icztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMobm9kZS5ncm91cE1lbWJlcnMsIGdyb3VwT2JzLmdyb3VwTWVtYmVycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb3JjZWdyb3VwICYmIG5vZGUucGF5bG9hZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMobm9kZS5ncm91cE1lbWJlcnMsIG5vZGUucGF5bG9hZC5ncm91cE1lbWJlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlIGluc3RhbmNlb2YgR3JvdXBOb2RlICYmXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2NvbXBsZXgtb2JzJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNldENvbXBsZXhPYnNWYWx1ZShub2RlLCBwYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uICYmXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMgJiZcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdyZXBlYXRpbmcnICYmXG4gICAgICAgICAgIWZvcmNlZ3JvdXBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZXRSZXBlYXRpbmdHcm91cFZhbHVlcyhub2RlLCBwYXlsb2FkKTtcbiAgICAgICAgICBub2RlLm5vZGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldE9ic1ZhbHVlKG5vZGUsIHBheWxvYWQpIHtcbiAgICBpZiAoXG4gICAgICAobm9kZS5xdWVzdGlvbiAmJlxuICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcyAmJlxuICAgICAgICAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ29icycgfHxcbiAgICAgICAgICAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2NvbXBsZXgtb2JzLWNoaWxkJyAmJlxuICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm9ic0ZpZWxkID09PSAndmFsdWUnKSkgJiZcbiAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyAhPT0gJ211bHRpQ2hlY2tib3gnKSB8fFxuICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyAhPT0gJ2NoZWNrYm94JyB8fFxuICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyAhPT0gJ211bHRpLXNlbGVjdCdcbiAgICApIHtcbiAgICAgIGNvbnN0IG9icyA9IF8uZmluZChwYXlsb2FkLCAobzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBvLmNvbmNlcHQudXVpZCA9PT0gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmNvbmNlcHQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChvYnMpIHtcbiAgICAgICAgaWYgKG9icy52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgIG5vZGUuY29udHJvbC5zZXRWYWx1ZShvYnMudmFsdWUudXVpZCk7XG4gICAgICAgICAgbm9kZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLmNvbnRyb2wuc2V0VmFsdWUob2JzLnZhbHVlKTtcbiAgICAgICAgICBub2RlLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVbJ2luaXRpYWxWYWx1ZSddID0geyBvYnNVdWlkOiBvYnMudXVpZCwgdmFsdWU6IG9icy52YWx1ZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtdWx0aU9icyA9IF8uZmlsdGVyKHBheWxvYWQsIChvOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG8uY29uY2VwdC51dWlkID09PSBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdDtcbiAgICAgIH0pO1xuICAgICAgaWYgKG11bHRpT2JzICYmIG11bHRpT2JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9kZS5jb250cm9sLnNldFZhbHVlKHRoaXMuZ2V0TXVsdGlzZWxlY3RWYWx1ZXMobXVsdGlPYnMpKTtcbiAgICAgICAgbm9kZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgbm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBtdWx0aU9icztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDb21wbGV4T2JzVmFsdWUobm9kZSwgcGF5bG9hZCkge1xuICAgIGxldCB2YWx1ZUZpZWxkOiBhbnk7XG4gICAgbGV0IGRhdGVGaWVsZDogYW55O1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXG4gICAgZm9yIChjb25zdCBvIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgKG5vZGUuY2hpbGRyZW5bb10gYXMgTGVhZk5vZGUpLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnNcbiAgICAgICAgICAub2JzRmllbGQgPT09ICd2YWx1ZSdcbiAgICAgICkge1xuICAgICAgICB2YWx1ZUZpZWxkID0gbm9kZS5jaGlsZHJlbltvXTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAobm9kZS5jaGlsZHJlbltvXSBhcyBMZWFmTm9kZSkucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9uc1xuICAgICAgICAgIC5vYnNGaWVsZCA9PT0gJ29ic0RhdGV0aW1lJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGVGaWVsZCA9IG5vZGUuY2hpbGRyZW5bb107XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNldCB0aGUgdXN1YWwgb2JzIHZhbHVlXG4gICAgdGhpcy5zZXRPYnNWYWx1ZSh2YWx1ZUZpZWxkLCBwYXlsb2FkKTtcblxuICAgIC8vIHNldCB0aGUgb2JzIGRhdGVcbiAgICBjb25zdCBvYnMgPSBfLmZpbmQocGF5bG9hZCwgKG86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIG8uY29uY2VwdC51dWlkID09PSBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdDtcbiAgICB9KTtcblxuICAgIGlmIChvYnMpIHtcbiAgICAgIGRhdGVGaWVsZFsnaW5pdGlhbFZhbHVlJ10gPSB7IG9ic1V1aWQ6IG9icy51dWlkLCB2YWx1ZTogb2JzLm9ic0RhdGV0aW1lIH07XG4gICAgICAoZGF0ZUZpZWxkIGFzIExlYWZOb2RlKS5jb250cm9sLnNldFZhbHVlKG9icy5vYnNEYXRldGltZSk7XG4gICAgICAoZGF0ZUZpZWxkIGFzIExlYWZOb2RlKS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRNdWx0aXNlbGVjdFZhbHVlcyhtdWx0aU9icykge1xuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbSBvZiBtdWx0aU9icykge1xuICAgICAgdmFsdWVzLnB1c2gobS52YWx1ZS51dWlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIHNldFJlcGVhdGluZ0dyb3VwVmFsdWVzKG5vZGUsIHBheWxvYWQpIHtcbiAgICBjb25zdCBncm91cFJlcGVhdGluZ09icyA9IF8uZmlsdGVyKHBheWxvYWQsIChvOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID1cbiAgICAgICAgby5jb25jZXB0LnV1aWQgPT09IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0O1xuICAgICAgbGV0IGludGVyc2VjdCA9IGZhbHNlO1xuICAgICAgaWYgKGZvdW5kICYmIG8uZ3JvdXBNZW1iZXJzKSB7XG4gICAgICAgIGNvbnN0IG9icyA9IG8uZ3JvdXBNZW1iZXJzLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhLmNvbmNlcHQudXVpZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NoZW1hUXVlc3Rpb25zID0gbm9kZS5xdWVzdGlvbi5xdWVzdGlvbnMubWFwKChhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEuZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0O1xuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlcnNlY3QgPSBfLmludGVyc2VjdGlvbihvYnMsIHNjaGVtYVF1ZXN0aW9ucykubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3VuZCAmJiBpbnRlcnNlY3Q7XG4gICAgfSk7XG4gICAgaWYgKGdyb3VwUmVwZWF0aW5nT2JzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGUubm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBncm91cFJlcGVhdGluZ09icztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBSZXBlYXRpbmdPYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5ub2RlLmNyZWF0ZUNoaWxkTm9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBncm91cHMgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5rZXlzKGNoaWxkLmNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gY2hpbGQuY2hpbGRyZW5ba2V5XTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ3JvdXBQYXlsb2FkID0gZ3JvdXBSZXBlYXRpbmdPYnNbaW5kZXhdO1xuICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICBxdWVzdGlvbjogbm9kZS5xdWVzdGlvbixcbiAgICAgICAgZ3JvdXBNZW1iZXJzOiBjaGlsZHJlbixcbiAgICAgICAgcGF5bG9hZDogZ3JvdXBQYXlsb2FkXG4gICAgICB9KTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHRoaXMuc2V0VmFsdWVzKGdyb3VwcywgZ3JvdXBSZXBlYXRpbmdPYnMsIHRydWUpO1xuICB9XG5cbiAgZ2V0UXVlc3Rpb25Ob2RlcyhwYWdlcykge1xuICAgIGNvbnN0IG1lcmdlZCA9IFtdO1xuICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHBhZ2UucGFnZSkge1xuICAgICAgICBhcnJheXMucHVzaChzZWN0aW9uLnNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcbiAgfVxuXG4gIHJlcGVhdGluZ0dyb3VwKG5vZGVzKSB7XG4gICAgY29uc3QgdG9SZXR1cm4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIHRvUmV0dXJuLnB1c2goe1xuICAgICAgICBxdWVzdGlvbjogbm9kZS5xdWVzdGlvbixcbiAgICAgICAgZ3JvdXBNZW1iZXJzOiB0aGlzLnRyYXZlcnNlKG5vZGUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG5cbiAgcHJvY2Vzc0dyb3VwKG9icywgb2JzUGF5bG9hZCkge1xuICAgIGlmIChcbiAgICAgIG9icy5xdWVzdGlvbiAmJlxuICAgICAgb2JzLnF1ZXN0aW9uLmV4dHJhcyAmJlxuICAgICAgb2JzLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmVuZGVyaW5nID09PSAnZ3JvdXAnXG4gICAgKSB7XG4gICAgICBjb25zdCBtZW1iZXJzID0gXy5maWx0ZXIoXG4gICAgICAgIHRoaXMuZ2V0T2JzUGF5bG9hZChvYnMuZ3JvdXBNZW1iZXJzKSxcbiAgICAgICAgKG86IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBvLnZhbHVlICE9PSAnJztcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWFwcGVkTWVtYmVycyA9IG1lbWJlcnMubWFwKChhKSA9PiB7XG4gICAgICAgIHJldHVybiBhLnZvaWRlZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1lbWJlcnMubGVuZ3RoID4gMCAmJiBtYXBwZWRNZW1iZXJzLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAgIG9ic1BheWxvYWQucHVzaCh7XG4gICAgICAgICAgdXVpZDogb2JzLm5vZGUuaW5pdGlhbFZhbHVlLnV1aWQsXG4gICAgICAgICAgdm9pZGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChtZW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9icy5ub2RlLmluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIG9ic1BheWxvYWQucHVzaCh7XG4gICAgICAgICAgICB1dWlkOiBvYnMubm9kZS5pbml0aWFsVmFsdWUudXVpZCxcbiAgICAgICAgICAgIGdyb3VwTWVtYmVyczogbWVtYmVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic1BheWxvYWQucHVzaCh7XG4gICAgICAgICAgICBjb25jZXB0OiBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0LFxuICAgICAgICAgICAgZ3JvdXBNZW1iZXJzOiBtZW1iZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXBJbml0aWFsR3JvdXAoZ3JvdXApIHtcbiAgICBsZXQgY3VycmVudCA9IHt9O1xuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGdyb3VwLmdyb3VwTWVtYmVycykge1xuICAgICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcbiAgICAgIGlmIChtZW1iZXIudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdmFsdWUgPSBtZW1iZXIudmFsdWUudXVpZDtcbiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gbWVtYmVyLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChtZW1iZXIuZ3JvdXBNZW1iZXJzICYmIG1lbWJlci5ncm91cE1lbWJlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjdXJyZW50ID0gdGhpcy5tYXBJbml0aWFsR3JvdXAoZ3JvdXApO1xuICAgICAgfVxuICAgICAgY3VycmVudFttZW1iZXIuY29uY2VwdC51dWlkICsgJzonICsgdmFsdWVdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgbWFwTW9kZWxHcm91cChub2RlLCB2YWx1ZSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBRdWVzdGlvbjogYW55ID0gXy5maW5kKG5vZGUucXVlc3Rpb24ucXVlc3Rpb25zLCB7XG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgICBpZiAobW9kZWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgY3VycmVudFtcbiAgICAgICAgICAgIGdyb3VwUXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0ICsgJzonICsgbW9kZWxWYWx1ZVxuICAgICAgICAgIF0gPSBtb2RlbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgcHJvY2Vzc1JlcGVhdGluZ0dyb3Vwcyhub2RlLCBvYnNQYXlsb2FkKSB7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IFtdO1xuICAgIGlmIChub2RlLm5vZGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIG5vZGUubm9kZS5pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICB1dWlkOiBncm91cC51dWlkLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLm1hcEluaXRpYWxHcm91cChncm91cClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcGVhdGluZ01vZGVsID0gW107XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBub2RlLm5vZGUuY29udHJvbC52YWx1ZSkge1xuICAgICAgcmVwZWF0aW5nTW9kZWwucHVzaCh7IHZhbHVlOiB0aGlzLm1hcE1vZGVsR3JvdXAobm9kZSwgdmFsdWUpIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZWxldGVkID0gdGhpcy5sZWZ0T3V0ZXJKb2luQXJyYXlzKGluaXRpYWxWYWx1ZXMsIHJlcGVhdGluZ01vZGVsKTtcbiAgICBjb25zdCBuZXdPYnMgPSB0aGlzLmxlZnRPdXRlckpvaW5BcnJheXMocmVwZWF0aW5nTW9kZWwsIGluaXRpYWxWYWx1ZXMpO1xuICAgIGNvbnN0IGdyb3VwQ29uY2VwdCA9IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0O1xuICAgIGxldCBuZXdPYnNQYXlsb2FkID0gW107XG4gICAgaWYgKGRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGVsZXRlZE9icyA9IHRoaXMuY3JlYXRlR3JvdXBEZWxldGVkT2JzKGRlbGV0ZWQpO1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRlbGV0ZWRPYnMpIHtcbiAgICAgICAgb2JzUGF5bG9hZC5wdXNoKGQpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld09icy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ld09ic1BheWxvYWQgPSB0aGlzLmNyZWF0ZUdyb3VwTmV3T2JzKG5ld09icywgZ3JvdXBDb25jZXB0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T2JzUGF5bG9hZCA9IHRoaXMuY3JlYXRlR3JvdXBOZXdPYnMobmV3T2JzLCBncm91cENvbmNlcHQpO1xuICAgIH1cblxuICAgIGlmIChuZXdPYnNQYXlsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcCBvZiBuZXdPYnNQYXlsb2FkKSB7XG4gICAgICAgIG9ic1BheWxvYWQucHVzaChwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZWZ0T3V0ZXJKb2luQXJyYXlzKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBjb25zdCB1bmlxdWUgPSBmaXJzdC5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuICFzZWNvbmQuc29tZShmdW5jdGlvbiAob2JqMikge1xuICAgICAgICByZXR1cm4gXy5pc0VxdWFsKG9iai52YWx1ZSwgb2JqMi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcXVlO1xuICB9XG5cbiAgY3JlYXRlR3JvdXBOZXdPYnMocGF5bG9hZCwgZ3JvdXBDb25jZXB0KSB7XG4gICAgY29uc3QgbmV3UGF5bG9hZCA9IFtdO1xuICAgIGZvciAoY29uc3Qgb2JzIG9mIHBheWxvYWQpIHtcbiAgICAgIGNvbnN0IGdyb3VwUGF5bG9hZCA9IFtdO1xuICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgIGZvciAobGV0IGtleSBpbiBvYnMudmFsdWUpIHtcbiAgICAgICAgbGV0IGNvbmNlcHQgPSBrZXkuc3BsaXQoJzonKVswXTtcbiAgICAgICAgbGV0IHZhbHVlID0ga2V5LnNwbGl0KCc6JylbMV07XG4gICAgICAgIGdyb3VwUGF5bG9hZC5wdXNoKHsgY29uY2VwdDogY29uY2VwdCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgICAgbmV3UGF5bG9hZC5wdXNoKHsgY29uY2VwdDogZ3JvdXBDb25jZXB0LCBncm91cE1lbWJlcnM6IGdyb3VwUGF5bG9hZCB9KTtcbiAgICAgIC8qIHRzbGludDplbmFibGUgKi9cbiAgICB9XG4gICAgcmV0dXJuIG5ld1BheWxvYWQ7XG4gIH1cblxuICBjcmVhdGVHcm91cERlbGV0ZWRPYnMocGF5bG9hZCkge1xuICAgIGNvbnN0IGRlbGV0ZWRPYnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgcGF5bG9hZCkge1xuICAgICAgZGVsZXRlZE9icy5wdXNoKHsgdXVpZDogZC51dWlkLCB2b2lkZWQ6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkT2JzO1xuICB9XG5cbiAgZ2V0RXhhY3RUaW1lKGRhdGV0aW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZGF0ZXRpbWUuc3Vic3RyaW5nKDAsIDE5KS5yZXBsYWNlKCdUJywgJyAnKTtcbiAgfVxuXG4gIHByb2Nlc3NPYnMob2JzLCBvYnNQYXlsb2FkKSB7XG4gICAgaWYgKG9icy5jb250cm9sICYmIG9icy5xdWVzdGlvbi5leHRyYXMpIHtcbiAgICAgIGNvbnN0IG9ic1ZhbHVlID0ge1xuICAgICAgICBjb25jZXB0OiBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0LFxuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdkYXRlJyAmJlxuICAgICAgICAgICF0aGlzLmlzRW1wdHkob2JzLmNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgICA/IHRoaXMuZ2V0RXhhY3RUaW1lKG9icy5jb250cm9sLnZhbHVlKVxuICAgICAgICAgICAgOiBvYnMuY29udHJvbC52YWx1ZVxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdtdWx0aUNoZWNrYm94JyB8fFxuICAgICAgICBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgb2JzLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmVuZGVyaW5nID09PSAnbXVsdGktc2VsZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG11bHRpcyA9IHRoaXMucHJvY2Vzc011bHRpU2VsZWN0KFxuICAgICAgICAgIG9icy5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmNvbmNlcHQsXG4gICAgICAgICAgb2JzLmNvbnRyb2wudmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9icy5pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBtYXBwZWRJbml0aWFsID0gb2JzLmluaXRpYWxWYWx1ZS5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHV1aWQ6IGEudXVpZCxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgY29uY2VwdDogYS5jb25jZXB0LnV1aWQsIHZhbHVlOiBhLnZhbHVlLnV1aWQgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRDdXJyZW50ID0gbXVsdGlzLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGEgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkZWxldGVkT2JzID0gdGhpcy5sZWZ0T3V0ZXJKb2luQXJyYXlzKFxuICAgICAgICAgICAgbWFwcGVkSW5pdGlhbCxcbiAgICAgICAgICAgIG1hcHBlZEN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG5ld09icyA9IHRoaXMubGVmdE91dGVySm9pbkFycmF5cyhtYXBwZWRDdXJyZW50LCBtYXBwZWRJbml0aWFsKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEZWxldGVkTXVsdGlTZWxlY3RPYnMoZGVsZXRlZE9icywgb2JzUGF5bG9hZCk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzTmV3TXVsdGlTZWxlY3RPYnMobmV3T2JzLCBvYnNQYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NOZXdNdWx0aVNlbGVjdE9icyhtdWx0aXMsIG9ic1BheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob2JzLmluaXRpYWxWYWx1ZSAmJiBvYnMuaW5pdGlhbFZhbHVlLnZhbHVlICYmIG9ic1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPclZvaWRPYnMob2JzVmFsdWUsIG9icy5pbml0aWFsVmFsdWUsIG9ic1BheWxvYWQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9ic1ZhbHVlLnZhbHVlICE9PSAnJyAmJiBvYnNWYWx1ZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG9ic1BheWxvYWQucHVzaChvYnNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcGxleE9icyhub2RlLCBvYnNQYXlsb2FkKSB7XG4gICAgbGV0IHZhbHVlRmllbGQ6IGFueTtcbiAgICBsZXQgZGF0ZUZpZWxkOiBhbnk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICBmb3IgKGNvbnN0IG8gaW4gbm9kZS5jaGlsZHJlbikge1xuICAgICAgaWYgKFxuICAgICAgICAobm9kZS5jaGlsZHJlbltvXSBhcyBMZWFmTm9kZSkucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9uc1xuICAgICAgICAgIC5vYnNGaWVsZCA9PT0gJ3ZhbHVlJ1xuICAgICAgKSB7XG4gICAgICAgIHZhbHVlRmllbGQgPSBub2RlLmNoaWxkcmVuW29dO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChub2RlLmNoaWxkcmVuW29dIGFzIExlYWZOb2RlKS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zXG4gICAgICAgICAgLm9ic0ZpZWxkID09PSAnb2JzRGF0ZXRpbWUnXG4gICAgICApIHtcbiAgICAgICAgZGF0ZUZpZWxkID0gbm9kZS5jaGlsZHJlbltvXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWVGaWVsZCkge1xuICAgICAgLy8gcHJvY2VzcyBvYnMgYXMgdXN1YWxcbiAgICAgIHRoaXMucHJvY2Vzc09icyh2YWx1ZUZpZWxkLCBvYnNQYXlsb2FkKTtcblxuICAgICAgLy8gb2J0YWluIHRoZSBsYXN0IGluc2VydGVkIG9icyBhbmQgc2V0IHRoZSBvYnNEYXRldGltZVxuICAgICAgY29uc3QgY3JlYXRlZFBheWxvYWQgPVxuICAgICAgICBvYnNQYXlsb2FkLmxlbmd0aCA+IDAgPyBvYnNQYXlsb2FkW29ic1BheWxvYWQubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoXG4gICAgICAgIGNyZWF0ZWRQYXlsb2FkICYmXG4gICAgICAgICgoY3JlYXRlZFBheWxvYWQuY29uY2VwdCAmJlxuICAgICAgICAgIGNyZWF0ZWRQYXlsb2FkLmNvbmNlcHQgPT09XG4gICAgICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdCkgfHxcbiAgICAgICAgICAodmFsdWVGaWVsZC5pbml0aWFsVmFsdWUgJiZcbiAgICAgICAgICAgIGNyZWF0ZWRQYXlsb2FkLnV1aWQgPT09IHZhbHVlRmllbGQuaW5pdGlhbFZhbHVlLm9ic1V1aWQpKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRlRmllbGQuaW5pdGlhbFZhbHVlICYmXG4gICAgICAgICAgZGF0ZUZpZWxkLmNvbnRyb2wudmFsdWUgIT09IGRhdGVGaWVsZC5pbml0aWFsVmFsdWUudmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3JlYXRlZFBheWxvYWQub2JzRGF0ZXRpbWUgPSBkYXRlRmllbGQuY29udHJvbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NEZWxldGVkTXVsdGlTZWxlY3RPYnModmFsdWVzLCBvYnNQYXlsb2FkKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIG9ic1BheWxvYWQucHVzaCh7IHV1aWQ6IHZhbHVlLnV1aWQsIHZvaWRlZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzTmV3TXVsdGlTZWxlY3RPYnModmFsdWVzLCBvYnNQYXlsb2FkKSB7XG4gICAgZm9yIChjb25zdCBtdWx0aSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmIChtdWx0aS52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBvYnNQYXlsb2FkLnB1c2gobXVsdGkudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzUGF5bG9hZC5wdXNoKG11bHRpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVPclZvaWRPYnMob2JzVmFsdWUsIGluaXRpYWxWYWx1ZSwgb2JzUGF5bG9hZCkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkob2JzVmFsdWUudmFsdWUpICYmIGluaXRpYWxWYWx1ZS52YWx1ZSkge1xuICAgICAgb2JzUGF5bG9hZC5wdXNoKHsgdXVpZDogaW5pdGlhbFZhbHVlLm9ic1V1aWQsIHZvaWRlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW1wdHkob2JzVmFsdWUudmFsdWUpICYmIGluaXRpYWxWYWx1ZS52YWx1ZSkge1xuICAgICAgb2JzUGF5bG9hZC5wdXNoKHsgdXVpZDogaW5pdGlhbFZhbHVlLm9ic1V1aWQsIHZhbHVlOiBvYnNWYWx1ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBpc0VtcHR5KHZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgLy8gfHwgdmFsdWUgPT09IFtdIHx8XG4gICAgICAvLyB2YWx1ZSA9PT0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cmF2ZXJzZShvLCB0eXBlPykge1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIGlmIChvLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoby5jaGlsZHJlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHJldHVybmVkID0gdGhpcy5yZXBlYXRpbmdHcm91cChvLmNoaWxkcmVuKTtcbiAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuICAgICAgfVxuICAgICAgaWYgKG8uY2hpbGRyZW4gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gby5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChvLmNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGFnZSc6XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMudHJhdmVyc2Uoby5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IG8uY2hpbGRyZW5ba2V5XS5xdWVzdGlvbi5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy50cmF2ZXJzZShvLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICBub2RlOiBvLmNoaWxkcmVuW2tleV0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICBjb25zdCBxcyA9IHRoaXMudHJhdmVyc2Uoby5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBub2RlOiBvLmNoaWxkcmVuW2tleV0sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbjogby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBNZW1iZXJzOiBxc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdyZXBlYXRpbmcnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcCA9IHRoaXMucmVwZWF0aW5nR3JvdXAoby5jaGlsZHJlbltrZXldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBub2RlOiBvLmNoaWxkcmVuW2tleV0sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbjogby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBNZW1iZXJzOiByZXBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChvLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG5cbiAgcHJvY2Vzc011bHRpU2VsZWN0KGNvbmNlcHQsIHZhbHVlcykge1xuICAgIGNvbnN0IG11bHRpU2VsZWN0T2JzID0gW107XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG9icyA9IHtcbiAgICAgICAgICBjb25jZXB0OiBjb25jZXB0LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBtdWx0aVNlbGVjdE9icy5wdXNoKG9icyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtdWx0aVNlbGVjdE9icztcbiAgfVxuXG4gIGlzT2JzKG5vZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ29icycgfHxcbiAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdvYnNHcm91cCcgfHxcbiAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdjb21wbGV4LW9icydcbiAgICApO1xuICB9XG5cbiAgZ2V0T2JzUGF5bG9hZChub2Rlcykge1xuICAgIGNvbnN0IG9ic1BheWxvYWQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGlmICh0aGlzLmlzT2JzKG5vZGUpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAobm9kZS5ncm91cE1lbWJlcnMsXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyA9PT0gJ2dyb3VwJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzR3JvdXAobm9kZSwgb2JzUGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKG5vZGUuZ3JvdXBNZW1iZXJzLFxuICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdyZXBlYXRpbmcnKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NSZXBlYXRpbmdHcm91cHMobm9kZSwgb2JzUGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbm9kZSBpbnN0YW5jZW9mIEdyb3VwTm9kZSAmJlxuICAgICAgICAgIChub2RlIGFzIEdyb3VwTm9kZSkucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdjb21wbGV4LW9icydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzQ29tcGxleE9icyhub2RlLCBvYnNQYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NPYnMobm9kZSwgb2JzUGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9ic1BheWxvYWQ7XG4gIH1cbn1cbiJdfQ==
|