@openmrs/ngx-formentry 3.0.0
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/abstract-controls-extension/afe-control-type.d.ts +6 -0
- package/abstract-controls-extension/afe-form-array.d.ts +43 -0
- package/abstract-controls-extension/afe-form-control.d.ts +46 -0
- package/abstract-controls-extension/afe-form-group.d.ts +38 -0
- package/abstract-controls-extension/control-extensions.d.ts +4 -0
- package/abstract-controls-extension/index.d.ts +4 -0
- package/abstract-controls-extension/value-change.listener.d.ts +4 -0
- package/bundles/openmrs-ngx-formentry.umd.js +16104 -0
- package/bundles/openmrs-ngx-formentry.umd.js.map +1 -0
- package/change-tracking/control-relation.d.ts +12 -0
- package/change-tracking/control-relations.d.ts +12 -0
- package/components/afe-ng-select.component.d.ts +28 -0
- package/components/appointments-overview/appointments-overview.component.d.ts +17 -0
- package/components/check-box/checkbox.component.d.ts +19 -0
- package/components/check-box/checkbox.module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +12 -0
- package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +10 -0
- package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +28 -0
- package/components/date-time-picker/date-picker/date-picker.component.d.ts +45 -0
- package/components/date-time-picker/date-time-picker.component.d.ts +28 -0
- package/components/date-time-picker/date-time-picker.module.d.ts +13 -0
- package/components/date-time-picker/index.d.ts +8 -0
- package/components/date-time-picker/picker-modal/modal.component.d.ts +12 -0
- package/components/date-time-picker/pipes/moment.pipe.d.ts +11 -0
- package/components/date-time-picker/time-picker/time-picker.component.d.ts +32 -0
- package/components/file-upload/file-upload.component.d.ts +29 -0
- package/components/file-upload/file-upload.module.d.ts +12 -0
- package/components/file-upload/secure.pipe.d.ts +26 -0
- package/components/input/input.directive.d.ts +31 -0
- package/components/input/input.module.d.ts +11 -0
- package/components/input/label.component.d.ts +90 -0
- package/components/input/text-area.directive.d.ts +24 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +21 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +11 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +189 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +76 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +139 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +108 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +120 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +137 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +92 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +121 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +149 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +20 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +156 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +89 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +23 -0
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +35 -0
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +128 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +93 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +58 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +49 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +11 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/utils/index.d.ts +4 -0
- package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +11 -0
- package/components/ngx-remote-select/ngx-remote-select.component.d.ts +40 -0
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +10 -0
- package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +19 -0
- package/components/ngx-tabset/components/tab.component.d.ts +13 -0
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +11 -0
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +19 -0
- package/components/number-input/number-input.component.d.ts +151 -0
- package/components/number-input/number-input.module.d.ts +9 -0
- package/components/radio-button/radio.component.d.ts +22 -0
- package/components/radio-button/radio.module.d.ts +9 -0
- package/components/select/optgroup.directive.d.ts +6 -0
- package/components/select/option.directive.d.ts +6 -0
- package/components/select/select.component.d.ts +115 -0
- package/components/select/select.module.d.ts +11 -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 +2 -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 +101 -0
- package/esm2015/components/appointments-overview/appointments-overview.component.js +121 -0
- package/esm2015/components/check-box/checkbox.component.js +90 -0
- package/esm2015/components/check-box/checkbox.module.js +19 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +21 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +23 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +22 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +73 -0
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +192 -0
- package/esm2015/components/date-time-picker/date-time-picker.component.js +119 -0
- package/esm2015/components/date-time-picker/date-time-picker.module.js +47 -0
- package/esm2015/components/date-time-picker/index.js +9 -0
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +31 -0
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +17 -0
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +125 -0
- package/esm2015/components/file-upload/file-upload.component.js +122 -0
- package/esm2015/components/file-upload/file-upload.module.js +39 -0
- package/esm2015/components/file-upload/secure.pipe.js +101 -0
- package/esm2015/components/input/input.directive.js +78 -0
- package/esm2015/components/input/input.module.js +23 -0
- package/esm2015/components/input/label.component.js +263 -0
- package/esm2015/components/input/text-area.directive.js +54 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +80 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +38 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +114 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +7 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +347 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +16 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +39 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +149 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +445 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +378 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +373 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +348 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +265 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +399 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +614 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +62 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +70 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +21 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +528 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +166 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +83 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +28 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +96 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +298 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +56 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +247 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +119 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +27 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +233 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +5 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +26 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +135 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +21 -0
- package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +76 -0
- package/esm2015/components/ngx-tabset/components/tab.component.js +37 -0
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +30 -0
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +38 -0
- package/esm2015/components/number-input/number-input.component.js +233 -0
- package/esm2015/components/number-input/number-input.module.js +20 -0
- package/esm2015/components/radio-button/radio.component.js +87 -0
- package/esm2015/components/radio-button/radio.module.js +19 -0
- package/esm2015/components/select/optgroup.directive.js +19 -0
- package/esm2015/components/select/option.directive.js +19 -0
- package/esm2015/components/select/select.component.js +187 -0
- package/esm2015/components/select/select.module.js +23 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -0
- package/esm2015/form-entry/control-calculators/can-calculate.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +32 -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/collapse-animations.js +11 -0
- package/esm2015/form-entry/directives/collapse.directive.js +172 -0
- package/esm2015/form-entry/directives/historical-value.directive.js +67 -0
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +56 -0
- package/esm2015/form-entry/expression-runner/expression-runner.js +170 -0
- package/esm2015/form-entry/form-entry.module.js +187 -0
- package/esm2015/form-entry/form-factory/control-relations.factory.js +238 -0
- package/esm2015/form-entry/form-factory/form-control.service.js +119 -0
- package/esm2015/form-entry/form-factory/form-node.js +96 -0
- package/esm2015/form-entry/form-factory/form.factory.js +141 -0
- package/esm2015/form-entry/form-factory/form.js +189 -0
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +67 -0
- package/esm2015/form-entry/form-factory/question.factory.js +942 -0
- package/esm2015/form-entry/form-factory/show-messages.factory.js +31 -0
- package/esm2015/form-entry/form-factory/validation.factory.js +147 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +268 -0
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +42 -0
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +39 -0
- package/esm2015/form-entry/helpers/js-expression-helper.js +275 -0
- package/esm2015/form-entry/helpers/risk-dataset-table.js +247 -0
- package/esm2015/form-entry/pipes/time-ago.pipe.js +107 -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/custom-control-question.model.js +10 -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 +2 -0
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
- package/esm2015/form-entry/question-models/interfaces/radio-button-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -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 +13 -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 +26 -0
- package/esm2015/form-entry/question-models/radio-button.model.js +12 -0
- package/esm2015/form-entry/question-models/rendering-type.js +9 -0
- 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 +24 -0
- package/esm2015/form-entry/services/form-errors.service.js +21 -0
- package/esm2015/form-entry/services/form-schema-compiler.service.js +248 -0
- package/esm2015/form-entry/services/historical-encounter-data.service.js +172 -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 +171 -0
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +512 -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 +88 -0
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm2015/lib/index.js +58 -0
- package/esm2015/openmrs-ngx-formentry.js +5 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/shared.module.js +21 -0
- package/fesm2015/openmrs-ngx-formentry.js +14323 -0
- package/fesm2015/openmrs-ngx-formentry.js.map +1 -0
- package/form-entry/control-alerts/alert-helpers.d.ts +9 -0
- package/form-entry/control-alerts/can-generate-alert.d.ts +18 -0
- package/form-entry/control-calculators/can-calculate.d.ts +5 -0
- package/form-entry/control-hiders-disablers/can-disable.d.ts +19 -0
- package/form-entry/control-hiders-disablers/can-hide.d.ts +20 -0
- package/form-entry/control-hiders-disablers/disabler-helper.d.ts +7 -0
- package/form-entry/control-hiders-disablers/hider-helpers.d.ts +9 -0
- package/form-entry/data-sources/data-sources.d.ts +10 -0
- package/form-entry/data-sources/dummy-data-source.d.ts +18 -0
- package/form-entry/directives/collapse-animations.d.ts +4 -0
- package/form-entry/directives/collapse.directive.d.ts +45 -0
- package/form-entry/directives/historical-value.directive.d.ts +16 -0
- package/form-entry/error-renderer/error-renderer.component.d.ts +18 -0
- package/form-entry/expression-runner/expression-runner.d.ts +18 -0
- package/form-entry/form-entry.module.d.ts +30 -0
- package/form-entry/form-factory/control-relations.factory.d.ts +18 -0
- package/form-entry/form-factory/form-control.service.d.ts +25 -0
- package/form-entry/form-factory/form-node.d.ts +52 -0
- package/form-entry/form-factory/form.d.ts +28 -0
- package/form-entry/form-factory/form.factory.d.ts +27 -0
- package/form-entry/form-factory/hiders-disablers.factory.d.ts +20 -0
- package/form-entry/form-factory/question.factory.d.ts +62 -0
- package/form-entry/form-factory/show-messages.factory.d.ts +15 -0
- package/form-entry/form-factory/validation.factory.d.ts +25 -0
- package/form-entry/form-renderer/form-renderer.component.d.ts +63 -0
- package/form-entry/helpers/historical-expression-helper-service.d.ts +8 -0
- package/form-entry/helpers/historical-field-helper-service.d.ts +7 -0
- package/form-entry/helpers/js-expression-helper.d.ts +37 -0
- package/form-entry/helpers/risk-dataset-table.d.ts +1 -0
- package/form-entry/pipes/time-ago.pipe.d.ts +14 -0
- package/form-entry/question-models/checkbox.model.d.ts +9 -0
- package/form-entry/question-models/conditional-validation.model.d.ts +6 -0
- package/form-entry/question-models/custom-control-question.model.d.ts +6 -0
- package/form-entry/question-models/date-question.d.ts +7 -0
- package/form-entry/question-models/date-validation.model.d.ts +5 -0
- package/form-entry/question-models/file-upload-question.d.ts +8 -0
- package/form-entry/question-models/group-question.d.ts +8 -0
- package/form-entry/question-models/interfaces/base-options.d.ts +30 -0
- package/form-entry/question-models/interfaces/checkbox-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/data-source.d.ts +10 -0
- package/form-entry/question-models/interfaces/date-question-options.d.ts +3 -0
- package/form-entry/question-models/interfaces/file-upload-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/group-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/multi-select-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/nested-questions.d.ts +6 -0
- package/form-entry/question-models/interfaces/radio-button-options.d.ts +8 -0
- package/form-entry/question-models/interfaces/repeating-question-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/select-option.d.ts +4 -0
- package/form-entry/question-models/interfaces/select-question-options.d.ts +9 -0
- package/form-entry/question-models/interfaces/test-order-question-options.d.ts +14 -0
- package/form-entry/question-models/interfaces/text-area-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/text-question-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/ui-select-question-options.d.ts +9 -0
- package/form-entry/question-models/js-expression-validation.model.d.ts +5 -0
- package/form-entry/question-models/max-validation.model.d.ts +5 -0
- package/form-entry/question-models/min-validation.model.d.ts +5 -0
- package/form-entry/question-models/models.d.ts +16 -0
- package/form-entry/question-models/multi-select-question.d.ts +9 -0
- package/form-entry/question-models/pair.model.d.ts +5 -0
- package/form-entry/question-models/question-base.d.ts +45 -0
- package/form-entry/question-models/radio-button.model.d.ts +7 -0
- package/form-entry/question-models/rendering-type.d.ts +7 -0
- package/form-entry/question-models/repeating-question.d.ts +7 -0
- package/form-entry/question-models/select-option.d.ts +6 -0
- package/form-entry/question-models/select-question.d.ts +10 -0
- package/form-entry/question-models/test-order-question.d.ts +13 -0
- package/form-entry/question-models/text-area-input-question.d.ts +7 -0
- package/form-entry/question-models/text-input-question.d.ts +6 -0
- package/form-entry/question-models/ui-select-question.d.ts +11 -0
- package/form-entry/question-models/validation.model.d.ts +5 -0
- package/form-entry/services/debug-mode.service.d.ts +8 -0
- package/form-entry/services/form-errors.service.d.ts +13 -0
- package/form-entry/services/form-schema-compiler.service.d.ts +23 -0
- package/form-entry/services/historical-encounter-data.service.d.ts +15 -0
- package/form-entry/utils/messages.d.ts +11 -0
- package/form-entry/validators/conditional-answered.validator.d.ts +8 -0
- package/form-entry/validators/conditional-required.validator.d.ts +8 -0
- package/form-entry/validators/date.validator.d.ts +7 -0
- package/form-entry/validators/future-date-restriction.validator.d.ts +7 -0
- package/form-entry/validators/js-expression.validator.d.ts +8 -0
- package/form-entry/validators/max-date.validator.d.ts +6 -0
- package/form-entry/validators/max.validator.d.ts +6 -0
- package/form-entry/validators/min-date.validator.d.ts +6 -0
- package/form-entry/validators/min.validator.d.ts +6 -0
- package/form-entry/validators/required.validator.d.ts +6 -0
- package/form-entry/validators/validations.d.ts +4 -0
- package/form-entry/value-adapters/encounter.adapter.d.ts +26 -0
- package/form-entry/value-adapters/obs-adapter-helper.d.ts +34 -0
- package/form-entry/value-adapters/obs.adapter.d.ts +38 -0
- package/form-entry/value-adapters/order.adapter.d.ts +20 -0
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +15 -0
- package/form-entry/value-adapters/value.adapter.d.ts +5 -0
- package/lib/index.d.ts +58 -0
- package/openmrs-ngx-formentry.d.ts +5 -0
- package/package.json +34 -0
- package/public_api.d.ts +1 -0
- package/shared.module.d.ts +9 -0
- package/styles/ngx-formentry.css +374 -0
- package/styles/picker.min.css +770 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
+
// import { NoopAnimationsModule} from '@angular/platform-browser/animations';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { FormBuilder } from '@angular/forms';
|
|
6
|
+
import { DebugModeService } from '../form-entry/services/debug-mode.service';
|
|
7
|
+
import { TimeAgoPipe } from './pipes/time-ago.pipe';
|
|
8
|
+
import { FormErrorsService } from './services/form-errors.service';
|
|
9
|
+
import { FormControlService } from './form-factory/form-control.service';
|
|
10
|
+
import { ValidationFactory } from './form-factory/validation.factory';
|
|
11
|
+
import { FormRendererComponent } from './form-renderer/form-renderer.component';
|
|
12
|
+
import { ErrorRendererComponent } from './error-renderer/error-renderer.component';
|
|
13
|
+
import { HistoricalValueDirective } from './directives/historical-value.directive';
|
|
14
|
+
import { CollapseDirective } from './directives/collapse.directive';
|
|
15
|
+
import { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';
|
|
16
|
+
import { NumberInputModule } from '../components/number-input/number-input.module';
|
|
17
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
18
|
+
import { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';
|
|
19
|
+
import { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';
|
|
20
|
+
import { NgxDateTimePickerModule } from '../components/ngx-datetime-picker/ngx-datetime-picker.module';
|
|
21
|
+
import { AfeNgSelectComponent } from '../components/afe-ng-select.component';
|
|
22
|
+
import { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';
|
|
23
|
+
import { AlertsFactory } from './form-factory/show-messages.factory';
|
|
24
|
+
import { ExpressionRunner } from './expression-runner/expression-runner';
|
|
25
|
+
import { JsExpressionHelper } from './helpers/js-expression-helper';
|
|
26
|
+
import { FormSchemaCompiler } from './services/form-schema-compiler.service';
|
|
27
|
+
import { FormFactory } from './form-factory/form.factory';
|
|
28
|
+
import { QuestionFactory } from './form-factory/question.factory';
|
|
29
|
+
import { ControlRelationsFactory } from './form-factory/control-relations.factory';
|
|
30
|
+
import { EncounterAdapter } from './value-adapters/encounter.adapter';
|
|
31
|
+
import { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';
|
|
32
|
+
import { OrderValueAdapter } from './value-adapters/order.adapter';
|
|
33
|
+
import { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';
|
|
34
|
+
import { ObsValueAdapter } from './value-adapters/obs.adapter';
|
|
35
|
+
import { NgxRemoteSelectModule } from '../components/ngx-remote-select/ngx-remote-select.module';
|
|
36
|
+
import { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';
|
|
37
|
+
import { CheckboxModule } from '../components/check-box/checkbox.module';
|
|
38
|
+
import { RadioModule } from '../components/radio-button/radio.module';
|
|
39
|
+
import { SharedModule } from '../shared.module';
|
|
40
|
+
import { NgxTabSetModule } from '../components/ngx-tabset/modules/ngx-tabset.module';
|
|
41
|
+
import { SelectModule as SelectModuleCarbon } from '../components/select/select.module';
|
|
42
|
+
import { InputModule } from '../components/input/input.module';
|
|
43
|
+
import { CustomControlWrapperModule } from '../components/custom-control-wrapper/custom-control-wrapper..module';
|
|
44
|
+
import { CustomComponentWrapperModule } from '../components/custom-component-wrapper/custom-component-wrapper..module';
|
|
45
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
46
|
+
import * as i0 from "@angular/core";
|
|
47
|
+
import * as i1 from "../components/ngx-tabset/modules/ngx-tabset.module";
|
|
48
|
+
import * as i2 from "@ngx-translate/core";
|
|
49
|
+
export class FormEntryModule {
|
|
50
|
+
}
|
|
51
|
+
FormEntryModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormEntryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
52
|
+
FormEntryModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormEntryModule, declarations: [FormRendererComponent,
|
|
53
|
+
AfeNgSelectComponent,
|
|
54
|
+
AppointmentsOverviewComponent,
|
|
55
|
+
HistoricalValueDirective,
|
|
56
|
+
ErrorRendererComponent,
|
|
57
|
+
TimeAgoPipe,
|
|
58
|
+
CollapseDirective], imports: [CommonModule,
|
|
59
|
+
ReactiveFormsModule,
|
|
60
|
+
SelectModuleCarbon,
|
|
61
|
+
NgSelectModule,
|
|
62
|
+
NumberInputModule,
|
|
63
|
+
InputModule,
|
|
64
|
+
DateTimePickerModule,
|
|
65
|
+
NgxRemoteSelectModule,
|
|
66
|
+
// NoopAnimationsModule,
|
|
67
|
+
RemoteFileUploadModule,
|
|
68
|
+
CheckboxModule,
|
|
69
|
+
RadioModule,
|
|
70
|
+
NgxDateTimePickerModule,
|
|
71
|
+
SharedModule,
|
|
72
|
+
CustomControlWrapperModule,
|
|
73
|
+
CustomComponentWrapperModule, i1.NgxTabSetModule, i2.TranslateModule], exports: [FormRendererComponent,
|
|
74
|
+
AfeNgSelectComponent,
|
|
75
|
+
ErrorRendererComponent,
|
|
76
|
+
DateTimePickerModule,
|
|
77
|
+
NgxDateTimePickerModule,
|
|
78
|
+
TranslateModule] });
|
|
79
|
+
FormEntryModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormEntryModule, providers: [
|
|
80
|
+
FormBuilder,
|
|
81
|
+
FormControlService,
|
|
82
|
+
FormErrorsService,
|
|
83
|
+
ValidationFactory,
|
|
84
|
+
HidersDisablersFactory,
|
|
85
|
+
AlertsFactory,
|
|
86
|
+
ExpressionRunner,
|
|
87
|
+
JsExpressionHelper,
|
|
88
|
+
HistoricalFieldHelperService,
|
|
89
|
+
FormSchemaCompiler,
|
|
90
|
+
FormFactory,
|
|
91
|
+
QuestionFactory,
|
|
92
|
+
ValidationFactory,
|
|
93
|
+
ControlRelationsFactory,
|
|
94
|
+
ObsAdapterHelper,
|
|
95
|
+
ObsValueAdapter,
|
|
96
|
+
EncounterAdapter,
|
|
97
|
+
PersonAttribuAdapter,
|
|
98
|
+
OrderValueAdapter,
|
|
99
|
+
DebugModeService
|
|
100
|
+
], imports: [[
|
|
101
|
+
CommonModule,
|
|
102
|
+
ReactiveFormsModule,
|
|
103
|
+
SelectModuleCarbon,
|
|
104
|
+
NgSelectModule,
|
|
105
|
+
NumberInputModule,
|
|
106
|
+
InputModule,
|
|
107
|
+
DateTimePickerModule,
|
|
108
|
+
NgxRemoteSelectModule,
|
|
109
|
+
// NoopAnimationsModule,
|
|
110
|
+
RemoteFileUploadModule,
|
|
111
|
+
CheckboxModule,
|
|
112
|
+
RadioModule,
|
|
113
|
+
NgxDateTimePickerModule,
|
|
114
|
+
SharedModule,
|
|
115
|
+
CustomControlWrapperModule,
|
|
116
|
+
CustomComponentWrapperModule,
|
|
117
|
+
NgxTabSetModule.forRoot(),
|
|
118
|
+
TranslateModule.forRoot()
|
|
119
|
+
], DateTimePickerModule,
|
|
120
|
+
NgxDateTimePickerModule,
|
|
121
|
+
TranslateModule] });
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormEntryModule, decorators: [{
|
|
123
|
+
type: NgModule,
|
|
124
|
+
args: [{
|
|
125
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
126
|
+
imports: [
|
|
127
|
+
CommonModule,
|
|
128
|
+
ReactiveFormsModule,
|
|
129
|
+
SelectModuleCarbon,
|
|
130
|
+
NgSelectModule,
|
|
131
|
+
NumberInputModule,
|
|
132
|
+
InputModule,
|
|
133
|
+
DateTimePickerModule,
|
|
134
|
+
NgxRemoteSelectModule,
|
|
135
|
+
// NoopAnimationsModule,
|
|
136
|
+
RemoteFileUploadModule,
|
|
137
|
+
CheckboxModule,
|
|
138
|
+
RadioModule,
|
|
139
|
+
NgxDateTimePickerModule,
|
|
140
|
+
SharedModule,
|
|
141
|
+
CustomControlWrapperModule,
|
|
142
|
+
CustomComponentWrapperModule,
|
|
143
|
+
NgxTabSetModule.forRoot(),
|
|
144
|
+
TranslateModule.forRoot()
|
|
145
|
+
],
|
|
146
|
+
declarations: [
|
|
147
|
+
FormRendererComponent,
|
|
148
|
+
AfeNgSelectComponent,
|
|
149
|
+
AppointmentsOverviewComponent,
|
|
150
|
+
HistoricalValueDirective,
|
|
151
|
+
ErrorRendererComponent,
|
|
152
|
+
TimeAgoPipe,
|
|
153
|
+
CollapseDirective
|
|
154
|
+
],
|
|
155
|
+
providers: [
|
|
156
|
+
FormBuilder,
|
|
157
|
+
FormControlService,
|
|
158
|
+
FormErrorsService,
|
|
159
|
+
ValidationFactory,
|
|
160
|
+
HidersDisablersFactory,
|
|
161
|
+
AlertsFactory,
|
|
162
|
+
ExpressionRunner,
|
|
163
|
+
JsExpressionHelper,
|
|
164
|
+
HistoricalFieldHelperService,
|
|
165
|
+
FormSchemaCompiler,
|
|
166
|
+
FormFactory,
|
|
167
|
+
QuestionFactory,
|
|
168
|
+
ValidationFactory,
|
|
169
|
+
ControlRelationsFactory,
|
|
170
|
+
ObsAdapterHelper,
|
|
171
|
+
ObsValueAdapter,
|
|
172
|
+
EncounterAdapter,
|
|
173
|
+
PersonAttribuAdapter,
|
|
174
|
+
OrderValueAdapter,
|
|
175
|
+
DebugModeService
|
|
176
|
+
],
|
|
177
|
+
exports: [
|
|
178
|
+
FormRendererComponent,
|
|
179
|
+
AfeNgSelectComponent,
|
|
180
|
+
ErrorRendererComponent,
|
|
181
|
+
DateTimePickerModule,
|
|
182
|
+
NgxDateTimePickerModule,
|
|
183
|
+
TranslateModule
|
|
184
|
+
]
|
|
185
|
+
}]
|
|
186
|
+
}] });
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbnRyeS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L2Zvcm0tZW50cnkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsOEVBQThFO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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QVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQiw0QkFBNEI7d0JBQzVCLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLGVBQWU7cUJBQ2hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIGltcG9ydCB7IE5vb3BBbmltYXRpb25zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERlYnVnTW9kZVNlcnZpY2UgfSBmcm9tICcuLi9mb3JtLWVudHJ5L3NlcnZpY2VzL2RlYnVnLW1vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lQWdvUGlwZSB9IGZyb20gJy4vcGlwZXMvdGltZS1hZ28ucGlwZSc7XG5cbmltcG9ydCB7IEZvcm1FcnJvcnNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9mb3JtLWVycm9ycy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db250cm9sU2VydmljZSB9IGZyb20gJy4vZm9ybS1mYWN0b3J5L2Zvcm0tY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25GYWN0b3J5IH0gZnJvbSAnLi9mb3JtLWZhY3RvcnkvdmFsaWRhdGlvbi5mYWN0b3J5JztcbmltcG9ydCB7IEZvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1yZW5kZXJlci9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9lcnJvci1yZW5kZXJlci9lcnJvci1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGlzdG9yaWNhbFZhbHVlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2hpc3RvcmljYWwtdmFsdWUuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbGxhcHNlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NvbGxhcHNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIaXN0b3JpY2FsRmllbGRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9oZWxwZXJzL2hpc3RvcmljYWwtZmllbGQtaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVySW5wdXRNb2R1bGUgfSBmcm9tICcuLi9jb21wb25lbnRzL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQubW9kdWxlJztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHsgUmVtb3RlRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQubW9kdWxlJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyTW9kdWxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIubW9kdWxlJztcbmltcG9ydCB7IE5neERhdGVUaW1lUGlja2VyTW9kdWxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9uZ3gtZGF0ZXRpbWUtcGlja2VyL25neC1kYXRldGltZS1waWNrZXIubW9kdWxlJztcbmltcG9ydCB7IEFmZU5nU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZmUtbmctc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaWRlcnNEaXNhYmxlcnNGYWN0b3J5IH0gZnJvbSAnLi9mb3JtLWZhY3RvcnkvaGlkZXJzLWRpc2FibGVycy5mYWN0b3J5JztcbmltcG9ydCB7IEFsZXJ0c0ZhY3RvcnkgfSBmcm9tICcuL2Zvcm0tZmFjdG9yeS9zaG93LW1lc3NhZ2VzLmZhY3RvcnknO1xuaW1wb3J0IHsgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gJy4vZXhwcmVzc2lvbi1ydW5uZXIvZXhwcmVzc2lvbi1ydW5uZXInO1xuaW1wb3J0IHsgSnNFeHByZXNzaW9uSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2pzLWV4cHJlc3Npb24taGVscGVyJztcbmltcG9ydCB7IEZvcm1TY2hlbWFDb21waWxlciB9IGZyb20gJy4vc2VydmljZXMvZm9ybS1zY2hlbWEtY29tcGlsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtRmFjdG9yeSB9IGZyb20gJy4vZm9ybS1mYWN0b3J5L2Zvcm0uZmFjdG9yeSc7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tICcuL2Zvcm0tZmFjdG9yeS9xdWVzdGlvbi5mYWN0b3J5JztcbmltcG9ydCB7IENvbnRyb2xSZWxhdGlvbnNGYWN0b3J5IH0gZnJvbSAnLi9mb3JtLWZhY3RvcnkvY29udHJvbC1yZWxhdGlvbnMuZmFjdG9yeSc7XG5pbXBvcnQgeyBFbmNvdW50ZXJBZGFwdGVyIH0gZnJvbSAnLi92YWx1ZS1hZGFwdGVycy9lbmNvdW50ZXIuYWRhcHRlcic7XG5pbXBvcnQgeyBQZXJzb25BdHRyaWJ1QWRhcHRlciB9IGZyb20gJy4vdmFsdWUtYWRhcHRlcnMvcGVyc29uLWF0dHJpYnV0ZS5hZGFwdGVyJztcbmltcG9ydCB7IE9yZGVyVmFsdWVBZGFwdGVyIH0gZnJvbSAnLi92YWx1ZS1hZGFwdGVycy9vcmRlci5hZGFwdGVyJztcbmltcG9ydCB7IE9ic0FkYXB0ZXJIZWxwZXIgfSBmcm9tICcuL3ZhbHVlLWFkYXB0ZXJzL29icy1hZGFwdGVyLWhlbHBlcic7XG5pbXBvcnQgeyBPYnNWYWx1ZUFkYXB0ZXIgfSBmcm9tICcuL3ZhbHVlLWFkYXB0ZXJzL29icy5hZGFwdGVyJztcbmltcG9ydCB7IE5neFJlbW90ZVNlbGVjdE1vZHVsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbmd4LXJlbW90ZS1zZWxlY3Qvbmd4LXJlbW90ZS1zZWxlY3QubW9kdWxlJztcbmltcG9ydCB7IEFwcG9pbnRtZW50c092ZXJ2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hcHBvaW50bWVudHMtb3ZlcnZpZXcvYXBwb2ludG1lbnRzLW92ZXJ2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY2hlY2stYm94L2NoZWNrYm94Lm1vZHVsZSc7XG5pbXBvcnQgeyBSYWRpb01vZHVsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvcmFkaW8tYnV0dG9uL3JhZGlvLm1vZHVsZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7IE5neFRhYlNldE1vZHVsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbmd4LXRhYnNldC9tb2R1bGVzL25neC10YWJzZXQubW9kdWxlJztcbmltcG9ydCB7IFNlbGVjdE1vZHVsZSBhcyBTZWxlY3RNb2R1bGVDYXJib24gfSBmcm9tICcuLi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QubW9kdWxlJztcbmltcG9ydCB7IElucHV0TW9kdWxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9pbnB1dC9pbnB1dC5tb2R1bGUnO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbFdyYXBwZXJNb2R1bGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2N1c3RvbS1jb250cm9sLXdyYXBwZXIvY3VzdG9tLWNvbnRyb2wtd3JhcHBlci4ubW9kdWxlJztcbmltcG9ydCB7IExhenlFbGVtZW50c01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLWV4dGVuc2lvbnMvZWxlbWVudHMnO1xuaW1wb3J0IHsgQ3VzdG9tQ29tcG9uZW50V3JhcHBlck1vZHVsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY3VzdG9tLWNvbXBvbmVudC13cmFwcGVyL2N1c3RvbS1jb21wb25lbnQtd3JhcHBlci4ubW9kdWxlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTZWxlY3RNb2R1bGVDYXJib24sXG4gICAgTmdTZWxlY3RNb2R1bGUsXG4gICAgTnVtYmVySW5wdXRNb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgRGF0ZVRpbWVQaWNrZXJNb2R1bGUsXG4gICAgTmd4UmVtb3RlU2VsZWN0TW9kdWxlLFxuICAgIC8vIE5vb3BBbmltYXRpb25zTW9kdWxlLFxuICAgIFJlbW90ZUZpbGVVcGxvYWRNb2R1bGUsXG4gICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgUmFkaW9Nb2R1bGUsXG4gICAgTmd4RGF0ZVRpbWVQaWNrZXJNb2R1bGUsXG4gICAgU2hhcmVkTW9kdWxlLFxuICAgIEN1c3RvbUNvbnRyb2xXcmFwcGVyTW9kdWxlLFxuICAgIEN1c3RvbUNvbXBvbmVudFdyYXBwZXJNb2R1bGUsXG4gICAgTmd4VGFiU2V0TW9kdWxlLmZvclJvb3QoKSxcbiAgICBUcmFuc2xhdGVNb2R1bGUuZm9yUm9vdCgpXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICBBZmVOZ1NlbGVjdENvbXBvbmVudCxcbiAgICBBcHBvaW50bWVudHNPdmVydmlld0NvbXBvbmVudCxcbiAgICBIaXN0b3JpY2FsVmFsdWVEaXJlY3RpdmUsXG4gICAgRXJyb3JSZW5kZXJlckNvbXBvbmVudCxcbiAgICBUaW1lQWdvUGlwZSxcbiAgICBDb2xsYXBzZURpcmVjdGl2ZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtQ29udHJvbFNlcnZpY2UsXG4gICAgRm9ybUVycm9yc1NlcnZpY2UsXG4gICAgVmFsaWRhdGlvbkZhY3RvcnksXG4gICAgSGlkZXJzRGlzYWJsZXJzRmFjdG9yeSxcbiAgICBBbGVydHNGYWN0b3J5LFxuICAgIEV4cHJlc3Npb25SdW5uZXIsXG4gICAgSnNFeHByZXNzaW9uSGVscGVyLFxuICAgIEhpc3RvcmljYWxGaWVsZEhlbHBlclNlcnZpY2UsXG4gICAgRm9ybVNjaGVtYUNvbXBpbGVyLFxuICAgIEZvcm1GYWN0b3J5LFxuICAgIFF1ZXN0aW9uRmFjdG9yeSxcbiAgICBWYWxpZGF0aW9uRmFjdG9yeSxcbiAgICBDb250cm9sUmVsYXRpb25zRmFjdG9yeSxcbiAgICBPYnNBZGFwdGVySGVscGVyLFxuICAgIE9ic1ZhbHVlQWRhcHRlcixcbiAgICBFbmNvdW50ZXJBZGFwdGVyLFxuICAgIFBlcnNvbkF0dHJpYnVBZGFwdGVyLFxuICAgIE9yZGVyVmFsdWVBZGFwdGVyLFxuICAgIERlYnVnTW9kZVNlcnZpY2VcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEZvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICBBZmVOZ1NlbGVjdENvbXBvbmVudCxcbiAgICBFcnJvclJlbmRlcmVyQ29tcG9uZW50LFxuICAgIERhdGVUaW1lUGlja2VyTW9kdWxlLFxuICAgIE5neERhdGVUaW1lUGlja2VyTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FbnRyeU1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';
|
|
3
|
+
import { ConditionalValidationModel } from '../question-models/conditional-validation.model';
|
|
4
|
+
import { GroupNode, LeafNode, ArrayNode } from './form-node';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class ControlRelationsFactory {
|
|
7
|
+
constructor() { }
|
|
8
|
+
buildRelations(rootNode) {
|
|
9
|
+
const controlsStore = this.mapControlIds(rootNode, {});
|
|
10
|
+
for (const key in controlsStore) {
|
|
11
|
+
if (controlsStore.hasOwnProperty(key)) {
|
|
12
|
+
const nodeBase = controlsStore[key];
|
|
13
|
+
this.setRelations(controlsStore, nodeBase);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
buildArrayNodeRelations(node) {
|
|
18
|
+
const form = node.form;
|
|
19
|
+
if (!form) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const rootNode = form.rootNode;
|
|
23
|
+
// build relations for controls in the same array
|
|
24
|
+
this.buildRelations(node);
|
|
25
|
+
// build relations for control outside the array
|
|
26
|
+
const rootControlsStore = this.mapControlIds(rootNode, {});
|
|
27
|
+
const arrayControlStore = this.mapControlIds(node, {});
|
|
28
|
+
for (const key in rootControlsStore) {
|
|
29
|
+
if (rootControlsStore.hasOwnProperty(key)) {
|
|
30
|
+
const child = rootControlsStore[key];
|
|
31
|
+
if (child instanceof LeafNode) {
|
|
32
|
+
const questionBase = child.question;
|
|
33
|
+
if (questionBase.key && questionBase.key.length > 0) {
|
|
34
|
+
this.setRelations(arrayControlStore, child);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// define relations for controls outside the group to controls in this group
|
|
40
|
+
this.createRelationsToArrayControls(node);
|
|
41
|
+
// fire relations
|
|
42
|
+
for (const id in arrayControlStore) {
|
|
43
|
+
if (arrayControlStore.hasOwnProperty(id)) {
|
|
44
|
+
const child = arrayControlStore[id];
|
|
45
|
+
const control = child.control;
|
|
46
|
+
control.updateHiddenState();
|
|
47
|
+
control.updateAlert();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
createRelationsToArrayControls(node) {
|
|
52
|
+
const form = node.form;
|
|
53
|
+
const rootNode = form.rootNode;
|
|
54
|
+
// build relations for control outside the array
|
|
55
|
+
const rootControlsStore = this.mapControlIds(rootNode, {});
|
|
56
|
+
const arrayControlStore = this.mapControlIds(node, {});
|
|
57
|
+
// loop through form controls
|
|
58
|
+
for (const key in rootControlsStore) {
|
|
59
|
+
if (rootControlsStore.hasOwnProperty(key)) {
|
|
60
|
+
const rChild = rootControlsStore[key];
|
|
61
|
+
const parentNodePath = node.path.substring(0, node.path.lastIndexOf('.'));
|
|
62
|
+
if (rChild.path.indexOf(parentNodePath + '.') === -1) {
|
|
63
|
+
// loop through controls in the array group
|
|
64
|
+
for (const id in arrayControlStore) {
|
|
65
|
+
if (arrayControlStore.hasOwnProperty(id)) {
|
|
66
|
+
const aChild = arrayControlStore[id];
|
|
67
|
+
const aChildId = aChild.question.key;
|
|
68
|
+
if (this.hasRelation(aChildId, rChild.question)) {
|
|
69
|
+
const nodes = node.form.searchNodeByPath(rootNode, parentNodePath, []);
|
|
70
|
+
if (nodes.length > 0) {
|
|
71
|
+
const an = nodes[0];
|
|
72
|
+
const rootControl = rChild.control;
|
|
73
|
+
if (rootControl.controlRelations.otherRelations.indexOf(an) ===
|
|
74
|
+
-1) {
|
|
75
|
+
rootControl.controlRelations.otherRelations.push(an);
|
|
76
|
+
}
|
|
77
|
+
aChild.control.addValueChangeListener((value) => {
|
|
78
|
+
if (rootControl.updateCalculatedValue) {
|
|
79
|
+
rootControl.updateCalculatedValue();
|
|
80
|
+
}
|
|
81
|
+
rootControl.updateValueAndValidity();
|
|
82
|
+
if (rootControl.updateHiddenState) {
|
|
83
|
+
rootControl.updateHiddenState();
|
|
84
|
+
}
|
|
85
|
+
if (rootControl.updateAlert) {
|
|
86
|
+
rootControl.updateAlert();
|
|
87
|
+
}
|
|
88
|
+
if (rootControl.updateDisabledState) {
|
|
89
|
+
rootControl.updateDisabledState();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getRelationsForControl(id, node) {
|
|
101
|
+
const relations = new Array();
|
|
102
|
+
const nodeBaseArray = node.form.searchNodeByQuestionId(id);
|
|
103
|
+
if (nodeBaseArray.length > 0) {
|
|
104
|
+
const nodeBase = nodeBaseArray[0];
|
|
105
|
+
const controlList = this.mapControlIds(node, {});
|
|
106
|
+
for (const key in controlList) {
|
|
107
|
+
if (controlList.hasOwnProperty(key)) {
|
|
108
|
+
if (this.hasRelation(controlList[key].question.key, nodeBase.question)) {
|
|
109
|
+
relations.push(controlList[key].control);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return relations;
|
|
115
|
+
}
|
|
116
|
+
mapControlIds(node, controlsStore) {
|
|
117
|
+
const children = node.children;
|
|
118
|
+
for (const key in children) {
|
|
119
|
+
if (children.hasOwnProperty(key)) {
|
|
120
|
+
const child = children[key];
|
|
121
|
+
if (child instanceof GroupNode) {
|
|
122
|
+
this.mapControlIds(child, controlsStore);
|
|
123
|
+
}
|
|
124
|
+
else if (child instanceof LeafNode) {
|
|
125
|
+
const questionBase = child.question;
|
|
126
|
+
if (questionBase.key && questionBase.key.length > 0) {
|
|
127
|
+
controlsStore[questionBase.key] = child;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (child instanceof ArrayNode) {
|
|
131
|
+
const questionBase = child.question;
|
|
132
|
+
if (questionBase.key && questionBase.key.length > 0) {
|
|
133
|
+
controlsStore[questionBase.key] = child;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return controlsStore;
|
|
139
|
+
}
|
|
140
|
+
setRelations(controlsStore, nodeBase) {
|
|
141
|
+
const questionBase = nodeBase.question;
|
|
142
|
+
const id = questionBase.key;
|
|
143
|
+
for (const key in controlsStore) {
|
|
144
|
+
if (controlsStore.hasOwnProperty(key) && key !== id) {
|
|
145
|
+
const node = controlsStore[key];
|
|
146
|
+
const question = node.question;
|
|
147
|
+
if (this.hasRelation(id, question, nodeBase)) {
|
|
148
|
+
this.addRelationToControl(node.control, nodeBase.control);
|
|
149
|
+
}
|
|
150
|
+
// add conditional required and conditional answered relations
|
|
151
|
+
if (typeof question.required === 'object') {
|
|
152
|
+
const required = question.required;
|
|
153
|
+
if (required.type === 'conditionalRequired') {
|
|
154
|
+
if (required.referenceQuestionId === id) {
|
|
155
|
+
this.addRelationToControl(node.control, nodeBase.control);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
hasRelation(id, questionBase, nodeBase) {
|
|
163
|
+
let hasRelation = false;
|
|
164
|
+
if (questionBase.validators && questionBase.validators.length > 0) {
|
|
165
|
+
questionBase.validators.forEach((element) => {
|
|
166
|
+
if (element instanceof JsExpressionValidationModel) {
|
|
167
|
+
const model = element;
|
|
168
|
+
const failsWhenExpression = model.failsWhenExpression;
|
|
169
|
+
if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {
|
|
170
|
+
hasRelation = true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (element instanceof ConditionalValidationModel &&
|
|
174
|
+
element.type === 'conditionalAnswered' &&
|
|
175
|
+
element.referenceQuestionId === id) {
|
|
176
|
+
hasRelation = true;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// add hiders and disablers relations
|
|
181
|
+
if (!hasRelation) {
|
|
182
|
+
if (typeof questionBase.hide === 'string') {
|
|
183
|
+
const hide = questionBase.hide;
|
|
184
|
+
if (hide.length > 0 && hide.indexOf(id) !== -1) {
|
|
185
|
+
hasRelation = true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (typeof questionBase.hide === 'object') {
|
|
189
|
+
const hideObj = questionBase.hide;
|
|
190
|
+
if (hideObj.field === id) {
|
|
191
|
+
hasRelation = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (questionBase.alert && typeof questionBase.alert === 'object') {
|
|
195
|
+
hasRelation = true;
|
|
196
|
+
}
|
|
197
|
+
if (typeof questionBase.disable === 'string') {
|
|
198
|
+
const disable = questionBase.disable;
|
|
199
|
+
if (disable.length > 0 && disable.indexOf(id) !== -1) {
|
|
200
|
+
hasRelation = true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// add calculate expressions relations
|
|
205
|
+
if (!hasRelation &&
|
|
206
|
+
questionBase.calculateExpression &&
|
|
207
|
+
questionBase.calculateExpression.length > 0 &&
|
|
208
|
+
questionBase.calculateExpression.indexOf(id) !== -1) {
|
|
209
|
+
hasRelation = true;
|
|
210
|
+
}
|
|
211
|
+
return hasRelation;
|
|
212
|
+
}
|
|
213
|
+
addRelationToControl(control, related) {
|
|
214
|
+
// let relations = control.controlRelations.relations;
|
|
215
|
+
//
|
|
216
|
+
// let hasRelation = false;
|
|
217
|
+
//
|
|
218
|
+
// relations.forEach(element => {
|
|
219
|
+
//
|
|
220
|
+
// let controlRelation: ControlRelation = element as ControlRelation;
|
|
221
|
+
//
|
|
222
|
+
// let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;
|
|
223
|
+
//
|
|
224
|
+
// if ( control.uuid !== undefined && control.uuid === relation.uuid ) {
|
|
225
|
+
// hasRelation = true;
|
|
226
|
+
// }
|
|
227
|
+
// });
|
|
228
|
+
// if ( !hasRelation ) {
|
|
229
|
+
control.controlRelations.addRelatedControls(related);
|
|
230
|
+
// }
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
ControlRelationsFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ControlRelationsFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
234
|
+
ControlRelationsFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ControlRelationsFactory });
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ControlRelationsFactory, decorators: [{
|
|
236
|
+
type: Injectable
|
|
237
|
+
}], ctorParameters: function () { return []; } });
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC1yZWxhdGlvbnMuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtZW50cnkvc3JjL2Zvcm0tZW50cnkvZm9ybS1mYWN0b3J5L2NvbnRyb2wtcmVsYXRpb25zLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQVksU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTXZFLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsZ0JBQWUsQ0FBQztJQUVoQixjQUFjLENBQUMsUUFBbUI7UUFDaEMsTUFBTSxhQUFhLEdBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUU7WUFDL0IsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxNQUFNLFFBQVEsR0FBYSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRTlDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzVDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBZTtRQUNyQyxNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTdCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRTFDLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsY0FBYyxD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dEMsdURBQXVEO1FBQ3ZELEVBQUU7UUFDRiw0QkFBNEI7UUFDNUIsRUFBRTtRQUNGLG1DQUFtQztRQUNuQyxFQUFFO1FBQ0YseUVBQXlFO1FBQ3pFLEVBQUU7UUFDRiw4R0FBOEc7UUFDOUcsRUFBRTtRQUNGLDRFQUE0RTtRQUM1RSw0QkFBNEI7UUFDNUIsUUFBUTtRQUNSLFFBQVE7UUFFUix3QkFBd0I7UUFDeEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELElBQUk7SUFDTixDQUFDOztxSEFyVFUsdUJBQXVCO3lIQUF2Qix1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gaW1wb3J0IHsgQ29udHJvbFJlbGF0aW9uIH0gZnJvbSAgJy4uLy4uL2NoYW5nZS10cmFja2luZy9jb250cm9sLXJlbGF0aW9uJztcbmltcG9ydCB7IFF1ZXN0aW9uQmFzZSB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9xdWVzdGlvbi1iYXNlJztcbmltcG9ydCB7IEpzRXhwcmVzc2lvblZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9qcy1leHByZXNzaW9uLXZhbGlkYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvY29uZGl0aW9uYWwtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlQmFzZSwgR3JvdXBOb2RlLCBMZWFmTm9kZSwgQXJyYXlOb2RlIH0gZnJvbSAnLi9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgQWZlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24vYWZlLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBBZmVGb3JtQXJyYXkgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24vYWZlLWZvcm0tYXJyYXknO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4vZm9ybSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sUmVsYXRpb25zRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBidWlsZFJlbGF0aW9ucyhyb290Tm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgY29udHJvbHNTdG9yZTogYW55ID0gdGhpcy5tYXBDb250cm9sSWRzKHJvb3ROb2RlLCB7fSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cm9sc1N0b3JlKSB7XG4gICAgICBpZiAoY29udHJvbHNTdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IG5vZGVCYXNlOiBOb2RlQmFzZSA9IGNvbnRyb2xzU3RvcmVba2V5XTtcblxuICAgICAgICB0aGlzLnNldFJlbGF0aW9ucyhjb250cm9sc1N0b3JlLCBub2RlQmFzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYnVpbGRBcnJheU5vZGVSZWxhdGlvbnMobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgZm9ybTogRm9ybSA9IG5vZGUuZm9ybTtcblxuICAgIGlmICghZm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb290Tm9kZTogR3JvdXBOb2RlID0gZm9ybS5yb290Tm9kZTtcblxuICAgIC8vIGJ1aWxkIHJlbGF0aW9ucyBmb3IgY29udHJvbHMgaW4gdGhlIHNhbWUgYXJyYXlcbiAgICB0aGlzLmJ1aWxkUmVsYXRpb25zKG5vZGUpO1xuXG4gICAgLy8gYnVpbGQgcmVsYXRpb25zIGZvciBjb250cm9sIG91dHNpZGUgdGhlIGFycmF5XG4gICAgY29uc3Qgcm9vdENvbnRyb2xzU3RvcmU6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhyb290Tm9kZSwge30pO1xuICAgIGNvbnN0IGFycmF5Q29udHJvbFN0b3JlOiBhbnkgPSB0aGlzLm1hcENvbnRyb2xJZHMobm9kZSwge30pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcm9vdENvbnRyb2xzU3RvcmUpIHtcbiAgICAgIGlmIChyb290Q29udHJvbHNTdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBOb2RlQmFzZSA9IHJvb3RDb250cm9sc1N0b3JlW2tleV07XG5cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBMZWFmTm9kZSkucXVlc3Rpb247XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb25CYXNlLmtleSAmJiBxdWVzdGlvbkJhc2Uua2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVsYXRpb25zKGFycmF5Q29udHJvbFN0b3JlLCBjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHJlbGF0aW9ucyBmb3IgY29udHJvbHMgb3V0c2lkZSB0aGUgZ3JvdXAgdG8gY29udHJvbHMgaW4gdGhpcyBncm91cFxuICAgIHRoaXMuY3JlYXRlUmVsYXRpb25zVG9BcnJheUNvbnRyb2xzKG5vZGUpO1xuXG4gICAgLy8gZmlyZSByZWxhdGlvbnNcbiAgICBmb3IgKGNvbnN0IGlkIGluIGFycmF5Q29udHJvbFN0b3JlKSB7XG4gICAgICBpZiAoYXJyYXlDb250cm9sU3RvcmUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBOb2RlQmFzZSA9IGFycmF5Q29udHJvbFN0b3JlW2lkXTtcbiAgICAgICAgY29uc3QgY29udHJvbDogQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXkgPSBjaGlsZC5jb250cm9sIGFzXG4gICAgICAgICAgfCBBZmVGb3JtQ29udHJvbFxuICAgICAgICAgIHwgQWZlRm9ybUFycmF5O1xuICAgICAgICBjb250cm9sLnVwZGF0ZUhpZGRlblN0YXRlKCk7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlQWxlcnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVSZWxhdGlvbnNUb0FycmF5Q29udHJvbHMobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgZm9ybTogRm9ybSA9IG5vZGUuZm9ybTtcblxuICAgIGNvbnN0IHJvb3ROb2RlOiBHcm91cE5vZGUgPSBmb3JtLnJvb3ROb2RlO1xuXG4gICAgLy8gYnVpbGQgcmVsYXRpb25zIGZvciBjb250cm9sIG91dHNpZGUgdGhlIGFycmF5XG4gICAgY29uc3Qgcm9vdENvbnRyb2xzU3RvcmU6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhyb290Tm9kZSwge30pO1xuICAgIGNvbnN0IGFycmF5Q29udHJvbFN0b3JlOiBhbnkgPSB0aGlzLm1hcENvbnRyb2xJZHMobm9kZSwge30pO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIGZvcm0gY29udHJvbHNcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByb290Q29udHJvbHNTdG9yZSkge1xuICAgICAgaWYgKHJvb3RDb250cm9sc1N0b3JlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgckNoaWxkOiBOb2RlQmFzZSA9IHJvb3RDb250cm9sc1N0b3JlW2tleV07XG5cbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZVBhdGggPSBub2RlLnBhdGguc3Vic3RyaW5nKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgbm9kZS5wYXRoLmxhc3RJbmRleE9mKCcuJylcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAockNoaWxkLnBhdGguaW5kZXhPZihwYXJlbnROb2RlUGF0aCArICcuJykgPT09IC0xKSB7XG4gICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGNvbnRyb2xzIGluIHRoZSBhcnJheSBncm91cFxuICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gYXJyYXlDb250cm9sU3RvcmUpIHtcbiAgICAgICAgICAgIGlmIChhcnJheUNvbnRyb2xTdG9yZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYUNoaWxkOiBOb2RlQmFzZSA9IGFycmF5Q29udHJvbFN0b3JlW2lkXTtcbiAgICAgICAgICAgICAgY29uc3QgYUNoaWxkSWQgPSBhQ2hpbGQucXVlc3Rpb24ua2V5O1xuICAgICAgICAgICAgICBpZiAodGhpcy5oYXNSZWxhdGlvbihhQ2hpbGRJZCwgckNoaWxkLnF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzOiBBcnJheTxOb2RlQmFzZT4gPSBub2RlLmZvcm0uc2VhcmNoTm9kZUJ5UGF0aChcbiAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuID0gbm9kZXNbMF0gYXMgQXJyYXlOb2RlO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdENvbnRyb2wgPSByQ2hpbGQuY29udHJvbCBhc1xuICAgICAgICAgICAgICAgICAgICB8IEFmZUZvcm1Db250cm9sXG4gICAgICAgICAgICAgICAgICAgIHwgQWZlRm9ybUFycmF5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb250cm9sLmNvbnRyb2xSZWxhdGlvbnMub3RoZXJSZWxhdGlvbnMuaW5kZXhPZihhbikgPT09XG4gICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdENvbnRyb2wuY29udHJvbFJlbGF0aW9ucy5vdGhlclJlbGF0aW9ucy5wdXNoKGFuKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgKGFDaGlsZC5jb250cm9sIGFzXG4gICAgICAgICAgICAgICAgICAgIHwgQWZlRm9ybUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgfCBBZmVGb3JtQXJyYXkpLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVDYWxjdWxhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVDYWxjdWxhdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZUhpZGRlblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgKHJvb3RDb250cm9sIGFzIGFueSkudXBkYXRlSGlkZGVuU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVBbGVydCkge1xuICAgICAgICAgICAgICAgICAgICAgIChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZUFsZXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJvb3RDb250cm9sIGFzIGFueSkudXBkYXRlRGlzYWJsZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVsYXRpb25zRm9yQ29udHJvbChcbiAgICBpZCxcbiAgICBub2RlOiBHcm91cE5vZGVcbiAgKTogQXJyYXk8QWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXk+IHtcbiAgICBjb25zdCByZWxhdGlvbnM6IEFycmF5PEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5PiA9IG5ldyBBcnJheTxcbiAgICAgIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICAgPigpO1xuXG4gICAgY29uc3Qgbm9kZUJhc2VBcnJheTogQXJyYXk8Tm9kZUJhc2U+ID0gbm9kZS5mb3JtLnNlYXJjaE5vZGVCeVF1ZXN0aW9uSWQoaWQpO1xuXG4gICAgaWYgKG5vZGVCYXNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZUJhc2U6IE5vZGVCYXNlID0gbm9kZUJhc2VBcnJheVswXTtcblxuICAgICAgY29uc3QgY29udHJvbExpc3Q6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhub2RlLCB7fSk7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2xMaXN0KSB7XG4gICAgICAgIGlmIChjb250cm9sTGlzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNSZWxhdGlvbihjb250cm9sTGlzdFtrZXldLnF1ZXN0aW9uLmtleSwgbm9kZUJhc2UucXVlc3Rpb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZWxhdGlvbnMucHVzaChjb250cm9sTGlzdFtrZXldLmNvbnRyb2wpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpb25zO1xuICB9XG5cbiAgbWFwQ29udHJvbElkcyhub2RlOiBHcm91cE5vZGUsIGNvbnRyb2xzU3RvcmU6IGFueSkge1xuICAgIGNvbnN0IGNoaWxkcmVuOiBOb2RlQmFzZSA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZHJlbikge1xuICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgY2hpbGQ6IE5vZGVCYXNlID0gY2hpbGRyZW5ba2V5XTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBHcm91cE5vZGUpIHtcbiAgICAgICAgICB0aGlzLm1hcENvbnRyb2xJZHMoY2hpbGQsIGNvbnRyb2xzU3RvcmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBMZWFmTm9kZSkucXVlc3Rpb247XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb25CYXNlLmtleSAmJiBxdWVzdGlvbkJhc2Uua2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRyb2xzU3RvcmVbcXVlc3Rpb25CYXNlLmtleV0gPSBjaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBBcnJheU5vZGUpLnF1ZXN0aW9uO1xuXG4gICAgICAgICAgaWYgKHF1ZXN0aW9uQmFzZS5rZXkgJiYgcXVlc3Rpb25CYXNlLmtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb250cm9sc1N0b3JlW3F1ZXN0aW9uQmFzZS5rZXldID0gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzU3RvcmU7XG4gIH1cblxuICBzZXRSZWxhdGlvbnMoY29udHJvbHNTdG9yZTogYW55LCBub2RlQmFzZTogTm9kZUJhc2UpIHtcbiAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IG5vZGVCYXNlLnF1ZXN0aW9uO1xuXG4gICAgY29uc3QgaWQgPSBxdWVzdGlvbkJhc2Uua2V5O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbHNTdG9yZSkge1xuICAgICAgaWYgKGNvbnRyb2xzU3RvcmUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgIT09IGlkKSB7XG4gICAgICAgIGNvbnN0IG5vZGU6IE5vZGVCYXNlID0gY29udHJvbHNTdG9yZVtrZXldO1xuICAgICAgICBjb25zdCBxdWVzdGlvbjogUXVlc3Rpb25CYXNlID0gbm9kZS5xdWVzdGlvbjtcblxuICAgICAgICBpZiAodGhpcy5oYXNSZWxhdGlvbihpZCwgcXVlc3Rpb24sIG5vZGVCYXNlKSkge1xuICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25Ub0NvbnRyb2woXG4gICAgICAgICAgICBub2RlLmNvbnRyb2wgYXMgQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXksXG4gICAgICAgICAgICBub2RlQmFzZS5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb25kaXRpb25hbCByZXF1aXJlZCBhbmQgY29uZGl0aW9uYWwgYW5zd2VyZWQgcmVsYXRpb25zXG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24ucmVxdWlyZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQ6IGFueSA9IHF1ZXN0aW9uLnJlcXVpcmVkO1xuXG4gICAgICAgICAgaWYgKHJlcXVpcmVkLnR5cGUgPT09ICdjb25kaXRpb25hbFJlcXVpcmVkJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkLnJlZmVyZW5jZVF1ZXN0aW9uSWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25Ub0NvbnRyb2woXG4gICAgICAgICAgICAgICAgbm9kZS5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5LFxuICAgICAgICAgICAgICAgIG5vZGVCYXNlLmNvbnRyb2wgYXMgQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNSZWxhdGlvbihpZDogc3RyaW5nLCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSwgbm9kZUJhc2U/OiBOb2RlQmFzZSkge1xuICAgIGxldCBoYXNSZWxhdGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzICYmIHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBKc0V4cHJlc3Npb25WYWxpZGF0aW9uTW9kZWwpIHtcbiAgICAgICAgICBjb25zdCBtb2RlbDogSnNFeHByZXNzaW9uVmFsaWRhdGlvbk1vZGVsID0gZWxlbWVudCBhcyBKc0V4cHJlc3Npb25WYWxpZGF0aW9uTW9kZWw7XG5cbiAgICAgICAgICBjb25zdCBmYWlsc1doZW5FeHByZXNzaW9uOiBzdHJpbmcgPSBtb2RlbC5mYWlsc1doZW5FeHByZXNzaW9uO1xuICAgICAgICAgIGlmIChmYWlsc1doZW5FeHByZXNzaW9uICYmIGZhaWxzV2hlbkV4cHJlc3Npb24uaW5kZXhPZihpZCkgIT09IC0xKSB7XG4gICAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBDb25kaXRpb25hbFZhbGlkYXRpb25Nb2RlbCAmJlxuICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gJ2NvbmRpdGlvbmFsQW5zd2VyZWQnICYmXG4gICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VRdWVzdGlvbklkID09PSBpZFxuICAgICAgICApIHtcbiAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFkZCBoaWRlcnMgYW5kIGRpc2FibGVycyByZWxhdGlvbnNcbiAgICBpZiAoIWhhc1JlbGF0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uQmFzZS5oaWRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBoaWRlOiBzdHJpbmcgPSBxdWVzdGlvbkJhc2UuaGlkZSBhcyBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGhpZGUubGVuZ3RoID4gMCAmJiBoaWRlLmluZGV4T2YoaWQpICE9PSAtMSkge1xuICAgICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcXVlc3Rpb25CYXNlLmhpZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGhpZGVPYmo6IGFueSA9IHF1ZXN0aW9uQmFzZS5oaWRlO1xuXG4gICAgICAgIGlmIChoaWRlT2JqLmZpZWxkID09PSBpZCkge1xuICAgICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocXVlc3Rpb25CYXNlLmFsZXJ0ICYmIHR5cGVvZiBxdWVzdGlvbkJhc2UuYWxlcnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbkJhc2UuZGlzYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgZGlzYWJsZTogc3RyaW5nID0gcXVlc3Rpb25CYXNlLmRpc2FibGUgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChkaXNhYmxlLmxlbmd0aCA+IDAgJiYgZGlzYWJsZS5pbmRleE9mKGlkKSAhPT0gLTEpIHtcbiAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQgY2FsY3VsYXRlIGV4cHJlc3Npb25zIHJlbGF0aW9uc1xuICAgIGlmIChcbiAgICAgICFoYXNSZWxhdGlvbiAmJlxuICAgICAgcXVlc3Rpb25CYXNlLmNhbGN1bGF0ZUV4cHJlc3Npb24gJiZcbiAgICAgIHF1ZXN0aW9uQmFzZS5jYWxjdWxhdGVFeHByZXNzaW9uLmxlbmd0aCA+IDAgJiZcbiAgICAgIHF1ZXN0aW9uQmFzZS5jYWxjdWxhdGVFeHByZXNzaW9uLmluZGV4T2YoaWQpICE9PSAtMVxuICAgICkge1xuICAgICAgaGFzUmVsYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZWxhdGlvbjtcbiAgfVxuXG4gIGFkZFJlbGF0aW9uVG9Db250cm9sKFxuICAgIGNvbnRyb2w6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5LFxuICAgIHJlbGF0ZWQ6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICkge1xuICAgIC8vICBsZXQgcmVsYXRpb25zID0gY29udHJvbC5jb250cm9sUmVsYXRpb25zLnJlbGF0aW9ucztcbiAgICAvL1xuICAgIC8vICBsZXQgaGFzUmVsYXRpb24gPSBmYWxzZTtcbiAgICAvL1xuICAgIC8vICAgcmVsYXRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgLy9cbiAgICAvLyAgICAgbGV0IGNvbnRyb2xSZWxhdGlvbjogQ29udHJvbFJlbGF0aW9uID0gZWxlbWVudCBhcyBDb250cm9sUmVsYXRpb247XG4gICAgLy9cbiAgICAvLyAgICAgbGV0IHJlbGF0aW9uOiBBZmVGb3JtQ29udHJvbCB8IEFmZUZvcm1BcnJheSA9IGNvbnRyb2xSZWxhdGlvbi5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5O1xuICAgIC8vXG4gICAgLy8gICAgIGlmICggY29udHJvbC51dWlkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbC51dWlkID09PSByZWxhdGlvbi51dWlkICkge1xuICAgIC8vICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG5cbiAgICAvLyBpZiAoICFoYXNSZWxhdGlvbiApIHtcbiAgICBjb250cm9sLmNvbnRyb2xSZWxhdGlvbnMuYWRkUmVsYXRlZENvbnRyb2xzKHJlbGF0ZWQpO1xuICAgIC8vIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { AfeFormControl, AfeFormArray, AfeFormGroup, AfeControlType } from '../../abstract-controls-extension';
|
|
3
|
+
import { QuestionBase } from '../question-models/question-base';
|
|
4
|
+
import { ValidationFactory } from '../form-factory/validation.factory';
|
|
5
|
+
import { HidersDisablersFactory } from './hiders-disablers.factory';
|
|
6
|
+
import { AlertsFactory } from './show-messages.factory';
|
|
7
|
+
import { ExpressionRunner } from '../expression-runner/expression-runner';
|
|
8
|
+
import { JsExpressionHelper } from '../helpers/js-expression-helper';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../form-factory/validation.factory";
|
|
11
|
+
import * as i2 from "./hiders-disablers.factory";
|
|
12
|
+
import * as i3 from "./show-messages.factory";
|
|
13
|
+
export class FormControlService {
|
|
14
|
+
constructor(validationFactory, hidersDisablersFactory, alertsFactory) {
|
|
15
|
+
this.alertsFactory = alertsFactory;
|
|
16
|
+
this.controls = [];
|
|
17
|
+
this.validationFactory = validationFactory;
|
|
18
|
+
this.hidersDisablersFactory = hidersDisablersFactory;
|
|
19
|
+
}
|
|
20
|
+
generateControlModel(questionModel, parentControl, generateChildren, form) {
|
|
21
|
+
if (questionModel instanceof QuestionBase) {
|
|
22
|
+
if (questionModel.controlType === AfeControlType.AfeFormArray) {
|
|
23
|
+
return this.generateFormArray(questionModel, parentControl, form);
|
|
24
|
+
}
|
|
25
|
+
if (questionModel.controlType === AfeControlType.AfeFormGroup) {
|
|
26
|
+
return this.generateFormGroupModel(questionModel, generateChildren, parentControl, form);
|
|
27
|
+
}
|
|
28
|
+
if (questionModel.controlType === AfeControlType.AfeFormControl) {
|
|
29
|
+
return this.generateFormControl(questionModel, parentControl, form);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
generateFormGroupModel(question, generateChildren, parentControl, form) {
|
|
35
|
+
const formGroup = new AfeFormGroup({});
|
|
36
|
+
this.wireHidersDisablers(question, formGroup, form);
|
|
37
|
+
this.wireAlerts(question, formGroup, form);
|
|
38
|
+
if (parentControl instanceof AfeFormGroup) {
|
|
39
|
+
parentControl.setControl(question.key, formGroup);
|
|
40
|
+
}
|
|
41
|
+
const asGroup = question;
|
|
42
|
+
if (generateChildren && asGroup && asGroup.questions.length > 0) {
|
|
43
|
+
this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);
|
|
44
|
+
}
|
|
45
|
+
return formGroup;
|
|
46
|
+
}
|
|
47
|
+
_generateFormGroupChildrenModel(questions, parentControl, form) {
|
|
48
|
+
if (questions.length > 0) {
|
|
49
|
+
questions.forEach((element) => {
|
|
50
|
+
const generated = this.generateControlModel(element, parentControl, true, form);
|
|
51
|
+
if (generated !== null) {
|
|
52
|
+
parentControl.addControl(element.key, generated);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
generateFormArray(question, parentControl, form) {
|
|
58
|
+
const validators = this.validationFactory.getValidators(question, form);
|
|
59
|
+
let formArray;
|
|
60
|
+
if (validators && validators.length > 0) {
|
|
61
|
+
formArray = new AfeFormArray([], validators[0]);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
formArray = new AfeFormArray([]);
|
|
65
|
+
}
|
|
66
|
+
formArray.uuid = question.key;
|
|
67
|
+
this.wireHidersDisablers(question, formArray, form);
|
|
68
|
+
this.wireAlerts(question, formArray, form);
|
|
69
|
+
if (parentControl instanceof AfeFormGroup) {
|
|
70
|
+
parentControl.setControl(question.key, formArray);
|
|
71
|
+
}
|
|
72
|
+
return formArray;
|
|
73
|
+
}
|
|
74
|
+
generateFormControl(question, parentControl, form) {
|
|
75
|
+
var _a;
|
|
76
|
+
const value = question.defaultValue || '';
|
|
77
|
+
const validators = this.validationFactory.getValidators(question, form);
|
|
78
|
+
const control = new AfeFormControl(value, validators);
|
|
79
|
+
control.uuid = question.key;
|
|
80
|
+
this.wireHidersDisablers(question, control, form);
|
|
81
|
+
this.wireAlerts(question, control, form);
|
|
82
|
+
this.wireCalculator(question, control, form, (_a = form === null || form === void 0 ? void 0 : form.dataSourcesContainer) === null || _a === void 0 ? void 0 : _a.dataSources);
|
|
83
|
+
if (parentControl instanceof AfeFormGroup) {
|
|
84
|
+
parentControl.setControl(question.key, control);
|
|
85
|
+
}
|
|
86
|
+
return control;
|
|
87
|
+
}
|
|
88
|
+
wireAlerts(question, control, form) {
|
|
89
|
+
if (question.alert && question.alert !== '') {
|
|
90
|
+
const alert = this.alertsFactory.getJsExpressionshowAlert(question, control, form);
|
|
91
|
+
control.setAlertFn(alert);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
wireHidersDisablers(question, control, form) {
|
|
95
|
+
if (question.hide && question.hide !== '') {
|
|
96
|
+
const hider = this.hidersDisablersFactory.getJsExpressionHider(question, control, form);
|
|
97
|
+
control.setHidingFn(hider);
|
|
98
|
+
}
|
|
99
|
+
if (question.disable && question.disable !== '') {
|
|
100
|
+
const disable = this.hidersDisablersFactory.getJsExpressionDisabler(question, control, form);
|
|
101
|
+
control.setDisablingFn(disable);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
wireCalculator(question, control, form, dataSource) {
|
|
105
|
+
if (question.calculateExpression && question.calculateExpression !== '') {
|
|
106
|
+
const helper = new JsExpressionHelper();
|
|
107
|
+
const runner = new ExpressionRunner();
|
|
108
|
+
const runnable = runner.getRunnable(question.calculateExpression, control, helper.helperFunctions, dataSource, form);
|
|
109
|
+
// this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class
|
|
110
|
+
control.setCalculatorFn(runnable.run);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
FormControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormControlService, deps: [{ token: i1.ValidationFactory }, { token: i2.HidersDisablersFactory }, { token: i3.AlertsFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
115
|
+
FormControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormControlService });
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FormControlService, decorators: [{
|
|
117
|
+
type: Injectable
|
|
118
|
+
}], ctorParameters: function () { return [{ type: i1.ValidationFactory }, { type: i2.HidersDisablersFactory }, { type: i3.AlertsFactory }]; } });
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L2Zvcm0tZmFjdG9yeS9mb3JtLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2YsTUFBTSxtQ0FBbUMsQ0FBQztBQUkzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhELE9BQU8sRUFDTCxnQkFBZ0IsRUFFakIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFHckUsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUNFLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDdEMsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQVNaLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFDdkQsQ0FBQztJQUVELG9CQUFvQixDQUNsQixhQUE0QyxFQUM1QyxhQUEyQixFQUMzQixnQkFBeUIsRUFDekIsSUFBVztRQUVYLElBQUksYUFBYSxZQUFZLFlBQVksRUFBRTtZQUN6QyxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtB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SUFBSSxDQUNMLENBQUM7WUFDRix3SEFBd0g7WUFDeEgsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDOztnSEEzTFUsa0JBQWtCO29IQUFsQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgQWZlRm9ybUNvbnRyb2wsXG4gIEFmZUZvcm1BcnJheSxcbiAgQWZlRm9ybUdyb3VwLFxuICBBZmVDb250cm9sVHlwZVxufSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24nO1xuXG5pbXBvcnQgeyBOZXN0ZWRRdWVzdGlvbiB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9pbnRlcmZhY2VzL25lc3RlZC1xdWVzdGlvbnMnO1xuXG5pbXBvcnQgeyBRdWVzdGlvbkJhc2UgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvcXVlc3Rpb24tYmFzZSc7XG5pbXBvcnQgeyBRdWVzdGlvbkdyb3VwIH0gZnJvbSAnLi4vcXVlc3Rpb24tbW9kZWxzL2dyb3VwLXF1ZXN0aW9uJztcbmltcG9ydCB7IFZhbGlkYXRpb25GYWN0b3J5IH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L3ZhbGlkYXRpb24uZmFjdG9yeSc7XG5pbXBvcnQgeyBIaWRlcnNEaXNhYmxlcnNGYWN0b3J5IH0gZnJvbSAnLi9oaWRlcnMtZGlzYWJsZXJzLmZhY3RvcnknO1xuaW1wb3J0IHsgQWxlcnRzRmFjdG9yeSB9IGZyb20gJy4vc2hvdy1tZXNzYWdlcy5mYWN0b3J5JztcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuL2Zvcm0nO1xuaW1wb3J0IHtcbiAgRXhwcmVzc2lvblJ1bm5lcixcbiAgUnVubmFibGVcbn0gZnJvbSAnLi4vZXhwcmVzc2lvbi1ydW5uZXIvZXhwcmVzc2lvbi1ydW5uZXInO1xuaW1wb3J0IHsgSnNFeHByZXNzaW9uSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9qcy1leHByZXNzaW9uLWhlbHBlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtQ29udHJvbFNlcnZpY2Uge1xuICBjb250cm9scyA9IFtdO1xuICB2YWxpZGF0aW9uRmFjdG9yeTogVmFsaWRhdGlvbkZhY3Rvcnk7XG4gIGhpZGVyc0Rpc2FibGVyc0ZhY3Rvcnk6IEhpZGVyc0Rpc2FibGVyc0ZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdmFsaWRhdGlvbkZhY3Rvcnk6IFZhbGlkYXRpb25GYWN0b3J5LFxuICAgIGhpZGVyc0Rpc2FibGVyc0ZhY3Rvcnk6IEhpZGVyc0Rpc2FibGVyc0ZhY3RvcnksXG4gICAgcHJpdmF0ZSBhbGVydHNGYWN0b3J5OiBBbGVydHNGYWN0b3J5XG4gICkge1xuICAgIHRoaXMudmFsaWRhdGlvbkZhY3RvcnkgPSB2YWxpZGF0aW9uRmFjdG9yeTtcbiAgICB0aGlzLmhpZGVyc0Rpc2FibGVyc0ZhY3RvcnkgPSBoaWRlcnNEaXNhYmxlcnNGYWN0b3J5O1xuICB9XG5cbiAgZ2VuZXJhdGVDb250cm9sTW9kZWwoXG4gICAgcXVlc3Rpb25Nb2RlbDogUXVlc3Rpb25CYXNlIHwgTmVzdGVkUXVlc3Rpb24sXG4gICAgcGFyZW50Q29udHJvbDogQWZlRm9ybUdyb3VwLFxuICAgIGdlbmVyYXRlQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgZm9ybT86IEZvcm1cbiAgKTogQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXkgfCBBZmVGb3JtR3JvdXAge1xuICAgIGlmIChxdWVzdGlvbk1vZGVsIGluc3RhbmNlb2YgUXVlc3Rpb25CYXNlKSB7XG4gICAgICBpZiAocXVlc3Rpb25Nb2RlbC5jb250cm9sVHlwZSA9PT0gQWZlQ29udHJvbFR5cGUuQWZlRm9ybUFycmF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRm9ybUFycmF5KHF1ZXN0aW9uTW9kZWwsIHBhcmVudENvbnRyb2wsIGZvcm0pO1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXN0aW9uTW9kZWwuY29udHJvbFR5cGUgPT09IEFmZUNvbnRyb2xUeXBlLkFmZUZvcm1Hcm91cCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZvcm1Hcm91cE1vZGVsKFxuICAgICAgICAgIHF1ZXN0aW9uTW9kZWwsXG4gICAgICAgICAgZ2VuZXJhdGVDaGlsZHJlbixcbiAgICAgICAgICBwYXJlbnRDb250cm9sLFxuICAgICAgICAgIGZvcm1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1ZXN0aW9uTW9kZWwuY29udHJvbFR5cGUgPT09IEFmZUNvbnRyb2xUeXBlLkFmZUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2wocXVlc3Rpb25Nb2RlbCwgcGFyZW50Q29udHJvbCwgZm9ybSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2VuZXJhdGVGb3JtR3JvdXBNb2RlbChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25CYXNlLFxuICAgIGdlbmVyYXRlQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgcGFyZW50Q29udHJvbD86IEFmZUZvcm1Hcm91cCxcbiAgICBmb3JtPzogRm9ybVxuICApOiBBZmVGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBBZmVGb3JtR3JvdXAoe30pO1xuICAgIHRoaXMud2lyZUhpZGVyc0Rpc2FibGVycyhxdWVzdGlvbiwgZm9ybUdyb3VwLCBmb3JtKTtcbiAgICB0aGlzLndpcmVBbGVydHMocXVlc3Rpb24sIGZvcm1Hcm91cCwgZm9ybSk7XG4gICAgaWYgKHBhcmVudENvbnRyb2wgaW5zdGFuY2VvZiBBZmVGb3JtR3JvdXApIHtcbiAgICAgIHBhcmVudENvbnRyb2wuc2V0Q29udHJvbChxdWVzdGlvbi5rZXksIGZvcm1Hcm91cCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNHcm91cCA9IHF1ZXN0aW9uIGFzIFF1ZXN0aW9uR3JvdXA7XG5cbiAgICBpZiAoZ2VuZXJhdGVDaGlsZHJlbiAmJiBhc0dyb3VwICYmIGFzR3JvdXAucXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2dlbmVyYXRlRm9ybUdyb3VwQ2hpbGRyZW5Nb2RlbChhc0dyb3VwLnF1ZXN0aW9ucywgZm9ybUdyb3VwLCBmb3JtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybUdyb3VwO1xuICB9XG5cbiAgX2dlbmVyYXRlRm9ybUdyb3VwQ2hpbGRyZW5Nb2RlbChcbiAgICBxdWVzdGlvbnM6IFF1ZXN0aW9uQmFzZVtdLFxuICAgIHBhcmVudENvbnRyb2w6IEFmZUZvcm1Hcm91cCxcbiAgICBmb3JtPzogRm9ybVxuICApIHtcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sTW9kZWwoXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBwYXJlbnRDb250cm9sLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgZm9ybVxuICAgICAgICApO1xuICAgICAgICBpZiAoZ2VuZXJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyZW50Q29udHJvbC5hZGRDb250cm9sKGVsZW1lbnQua2V5LCBnZW5lcmF0ZWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUZvcm1BcnJheShcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25CYXNlLFxuICAgIHBhcmVudENvbnRyb2w/OiBBZmVGb3JtR3JvdXAsXG4gICAgZm9ybT86IEZvcm1cbiAgKTogQWZlRm9ybUFycmF5IHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy52YWxpZGF0aW9uRmFjdG9yeS5nZXRWYWxpZGF0b3JzKHF1ZXN0aW9uLCBmb3JtKTtcbiAgICBsZXQgZm9ybUFycmF5OiBBZmVGb3JtQXJyYXk7XG4gICAgaWYgKHZhbGlkYXRvcnMgJiYgdmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3JtQXJyYXkgPSBuZXcgQWZlRm9ybUFycmF5KFtdLCB2YWxpZGF0b3JzWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybUFycmF5ID0gbmV3IEFmZUZvcm1BcnJheShbXSk7XG4gICAgfVxuICAgIGZvcm1BcnJheS51dWlkID0gcXVlc3Rpb24ua2V5O1xuICAgIHRoaXMud2lyZUhpZGVyc0Rpc2FibGVycyhxdWVzdGlvbiwgZm9ybUFycmF5LCBmb3JtKTtcbiAgICB0aGlzLndpcmVBbGVydHMocXVlc3Rpb24sIGZvcm1BcnJheSwgZm9ybSk7XG4gICAgaWYgKHBhcmVudENvbnRyb2wgaW5zdGFuY2VvZiBBZmVGb3JtR3JvdXApIHtcbiAgICAgIHBhcmVudENvbnRyb2wuc2V0Q29udHJvbChxdWVzdGlvbi5rZXksIGZvcm1BcnJheSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1BcnJheTtcbiAgfVxuXG4gIGdlbmVyYXRlRm9ybUNvbnRyb2woXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uQmFzZSxcbiAgICBwYXJlbnRDb250cm9sPzogQWZlRm9ybUdyb3VwLFxuICAgIGZvcm0/OiBGb3JtXG4gICk6IEFmZUZvcm1Db250cm9sIHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSB8fCAnJztcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy52YWxpZGF0aW9uRmFjdG9yeS5nZXRWYWxpZGF0b3JzKHF1ZXN0aW9uLCBmb3JtKTtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgQWZlRm9ybUNvbnRyb2wodmFsdWUsIHZhbGlkYXRvcnMpO1xuICAgIGNvbnRyb2wudXVpZCA9IHF1ZXN0aW9uLmtleTtcbiAgICB0aGlzLndpcmVIaWRlcnNEaXNhYmxlcnMocXVlc3Rpb24sIGNvbnRyb2wsIGZvcm0pO1xuICAgIHRoaXMud2lyZUFsZXJ0cyhxdWVzdGlvbiwgY29udHJvbCwgZm9ybSk7XG4gICAgdGhpcy53aXJlQ2FsY3VsYXRvcihcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29udHJvbCxcbiAgICAgIGZvcm0sXG4gICAgICBmb3JtPy5kYXRhU291cmNlc0NvbnRhaW5lcj8uZGF0YVNvdXJjZXNcbiAgICApO1xuXG4gICAgaWYgKHBhcmVudENvbnRyb2wgaW5zdGFuY2VvZiBBZmVGb3JtR3JvdXApIHtcbiAgICAgIHBhcmVudENvbnRyb2wuc2V0Q29udHJvbChxdWVzdGlvbi5rZXksIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXJlQWxlcnRzKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UsXG4gICAgY29udHJvbDogQWZlRm9ybUFycmF5IHwgQWZlRm9ybUdyb3VwIHwgQWZlRm9ybUNvbnRyb2wsXG4gICAgZm9ybT86IEZvcm1cbiAgKSB7XG4gICAgaWYgKHF1ZXN0aW9uLmFsZXJ0ICYmIHF1ZXN0aW9uLmFsZXJ0ICE9PSAnJykge1xuICAgICAgY29uc3QgYWxlcnQgPSB0aGlzLmFsZXJ0c0ZhY3RvcnkuZ2V0SnNFeHByZXNzaW9uc2hvd0FsZXJ0KFxuICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgZm9ybVxuICAgICAgKTtcbiAgICAgIGNvbnRyb2wuc2V0QWxlcnRGbihhbGVydCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgd2lyZUhpZGVyc0Rpc2FibGVycyhcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25CYXNlLFxuICAgIGNvbnRyb2w6IEFmZUZvcm1BcnJheSB8IEFmZUZvcm1Hcm91cCB8IEFmZUZvcm1Db250cm9sLFxuICAgIGZvcm0/OiBGb3JtXG4gICkge1xuICAgIGlmIChxdWVzdGlvbi5oaWRlICYmIHF1ZXN0aW9uLmhpZGUgIT09ICcnKSB7XG4gICAgICBjb25zdCBoaWRlciA9IHRoaXMuaGlkZXJzRGlzYWJsZXJzRmFjdG9yeS5nZXRKc0V4cHJlc3Npb25IaWRlcihcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIGZvcm1cbiAgICAgICk7XG4gICAgICBjb250cm9sLnNldEhpZGluZ0ZuKGhpZGVyKTtcbiAgICB9XG5cbiAgICBpZiAocXVlc3Rpb24uZGlzYWJsZSAmJiBxdWVzdGlvbi5kaXNhYmxlICE9PSAnJykge1xuICAgICAgY29uc3QgZGlzYWJsZSA9IHRoaXMuaGlkZXJzRGlzYWJsZXJzRmFjdG9yeS5nZXRKc0V4cHJlc3Npb25EaXNhYmxlcihcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIGZvcm1cbiAgICAgICk7XG4gICAgICBjb250cm9sLnNldERpc2FibGluZ0ZuKGRpc2FibGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2lyZUNhbGN1bGF0b3IoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uQmFzZSxcbiAgICBjb250cm9sOiBBZmVGb3JtQ29udHJvbCxcbiAgICBmb3JtOiBGb3JtLFxuICAgIGRhdGFTb3VyY2U/OiBhbnlcbiAgKSB7XG4gICAgaWYgKHF1ZXN0aW9uLmNhbGN1bGF0ZUV4cHJlc3Npb24gJiYgcXVlc3Rpb24uY2FsY3VsYXRlRXhwcmVzc2lvbiAhPT0gJycpIHtcbiAgICAgIGNvbnN0IGhlbHBlcjogSnNFeHByZXNzaW9uSGVscGVyID0gbmV3IEpzRXhwcmVzc2lvbkhlbHBlcigpO1xuICAgICAgY29uc3QgcnVubmVyOiBFeHByZXNzaW9uUnVubmVyID0gbmV3IEV4cHJlc3Npb25SdW5uZXIoKTtcbiAgICAgIGNvbnN0IHJ1bm5hYmxlOiBSdW5uYWJsZSA9IHJ1bm5lci5nZXRSdW5uYWJsZShcbiAgICAgICAgcXVlc3Rpb24uY2FsY3VsYXRlRXhwcmVzc2lvbixcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgaGVscGVyLmhlbHBlckZ1bmN0aW9ucyxcbiAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgZm9ybVxuICAgICAgKTtcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb25hbGl0eSBzdHJpY3RseSBhc3N1bWVzIHRoZSBjYWxjdWxhdGVFeHByZXNzaW9uIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIEpzRXhwcmVzc2lvbkhlbHBlciBjbGFzc1xuICAgICAgY29udHJvbC5zZXRDYWxjdWxhdG9yRm4ocnVubmFibGUucnVuKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|