@mtna/web-form-angular 1.0.1 → 1.0.2-SNAPSHOT.2
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/_index.scss +18 -16
- package/bundles/mtna-web-form-angular.umd.js +6683 -4919
- package/bundles/mtna-web-form-angular.umd.js.map +1 -1
- package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.component.js +30 -0
- package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.module.js +21 -0
- package/esm2015/lib/components/acknowledge-dialog/index.js +3 -0
- package/esm2015/lib/components/base-items/base-form-item-control.component.js +42 -0
- package/esm2015/lib/components/base-items/base-form-item.component.js +53 -0
- package/esm2015/lib/components/base-items/base-group-item.component.js +30 -0
- package/esm2015/lib/components/base-items/base-parent-value-item.component.js +43 -0
- package/esm2015/lib/components/base-items/base-section-item.component.js +29 -0
- package/esm2015/lib/components/base-items/base-single-selection-parent-value-item.component.js +62 -0
- package/esm2015/lib/components/base-items/base-value-item.component.js +41 -0
- package/esm2015/lib/components/base-items/index.js +7 -0
- package/esm2015/lib/components/form/form.component.js +250 -0
- package/esm2015/lib/components/form/form.module.js +60 -0
- package/esm2015/lib/components/form/index.js +3 -0
- package/esm2015/lib/{form → components/form-disabler}/form-disabler.component.js +1 -1
- package/esm2015/lib/components/form-disabler/form-disabler.module.js +18 -0
- package/esm2015/lib/components/form-disabler/index.js +3 -0
- package/esm2015/lib/components/form-item/form-item.component.js +128 -0
- package/esm2015/lib/components/form-item/form-item.module.js +42 -0
- package/esm2015/lib/components/form-item/index.js +3 -0
- package/esm2015/lib/components/form-item-component-provider/form-item-component-provider.js +8 -0
- package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +120 -0
- package/esm2015/lib/components/form-item-component-provider/index.js +3 -0
- package/esm2015/lib/components/form-item-dialog/form-item-dialog.component.js +29 -0
- package/esm2015/lib/components/form-item-dialog/form-item-dialog.module.js +20 -0
- package/esm2015/lib/components/form-item-dialog/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/boolean/boolean.component.js +34 -0
- package/esm2015/lib/components/form-item-impl/boolean/boolean.module.js +45 -0
- package/esm2015/lib/components/form-item-impl/boolean/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/checkbox/checkbox.component.js +91 -0
- package/esm2015/lib/components/form-item-impl/checkbox/checkbox.module.js +65 -0
- package/esm2015/lib/components/form-item-impl/checkbox/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/date/date.component.js +92 -0
- package/esm2015/lib/components/form-item-impl/date/date.module.js +53 -0
- package/esm2015/lib/components/form-item-impl/date/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +31 -0
- package/esm2015/lib/components/form-item-impl/date-range/date-range.module.js +45 -0
- package/esm2015/lib/components/form-item-impl/date-range/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +29 -0
- package/esm2015/lib/components/form-item-impl/dropdown/dropdown.module.js +59 -0
- package/esm2015/lib/components/form-item-impl/dropdown/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/file-upload/file-upload.component.js +56 -0
- package/esm2015/lib/components/form-item-impl/file-upload/file-upload.module.js +49 -0
- package/esm2015/lib/components/form-item-impl/file-upload/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +50 -0
- package/esm2015/lib/components/form-item-impl/form-group/form-group.module.js +49 -0
- package/esm2015/lib/components/form-item-impl/form-group/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +23 -0
- package/esm2015/lib/components/form-item-impl/form-section/form-section.module.js +23 -0
- package/esm2015/lib/components/form-item-impl/form-section/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.component.js +56 -0
- package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.module.js +52 -0
- package/esm2015/lib/components/form-item-impl/i18n-input/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/index.js +23 -0
- package/esm2015/lib/components/form-item-impl/input/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/input/input.component.js +45 -0
- package/esm2015/lib/components/form-item-impl/input/input.module.js +52 -0
- package/esm2015/lib/components/form-item-impl/multiple-choice/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +25 -0
- package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.module.js +49 -0
- package/esm2015/lib/components/form-item-impl/ordered-list/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/ordered-list/ordered-list-item.component.js +21 -0
- package/esm2015/lib/components/form-item-impl/ordered-list/ordered-list-item.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item/repeatable-item.component.js +23 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item/repeatable-item.module.js +18 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item-container/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +57 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.js +57 -0
- package/esm2015/lib/components/form-item-impl/search/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +56 -0
- package/esm2015/lib/components/form-item-impl/search/resource-search.module.js +22 -0
- package/esm2015/lib/components/form-item-impl/table-item/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/table-item/table-item.component.js +27 -0
- package/esm2015/lib/components/form-item-impl/table-item/table-item.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/text/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/text/text.component.js +20 -0
- package/esm2015/lib/components/form-item-impl/text/text.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/title/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/title/title.component.js +19 -0
- package/esm2015/lib/components/form-item-impl/title/title.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/unordered-list/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/unordered-list/unordered-list-item.component.js +21 -0
- package/esm2015/lib/components/form-item-impl/unordered-list/unordered-list-item.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/year-quarter/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +166 -0
- package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.module.js +55 -0
- package/esm2015/lib/components/form-item-impl/year-quarter-range/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.component.js +39 -0
- package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.js +22 -0
- package/esm2015/lib/components/form-item-injector/form-item-injector.component.js +163 -0
- package/esm2015/lib/components/form-item-injector/form-item-injector.module.js +18 -0
- package/esm2015/lib/components/form-item-injector/index.js +3 -0
- package/esm2015/lib/components/form-stepper/form-step/form-step.component.js +68 -0
- package/esm2015/lib/components/form-stepper/form-step/index.js +2 -0
- package/esm2015/lib/components/form-stepper/form-step-group/form-step-group.component.js +53 -0
- package/esm2015/lib/components/form-stepper/form-step-group/index.js +2 -0
- package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +59 -0
- package/esm2015/lib/components/form-stepper/form-stepper/index.js +2 -0
- package/esm2015/lib/components/form-stepper/form-stepper.module.js +56 -0
- package/esm2015/lib/components/form-stepper/index.js +5 -0
- package/esm2015/lib/components/index.js +13 -0
- package/esm2015/lib/components/item-header/index.js +3 -0
- package/esm2015/lib/components/item-header/item-header.component.js +71 -0
- package/esm2015/lib/components/item-header/item-header.module.js +19 -0
- package/esm2015/lib/components/step-card/index.js +3 -0
- package/esm2015/lib/{step-card → components/step-card}/step-card.component.js +2 -2
- package/esm2015/lib/components/step-card/step-card.module.js +23 -0
- package/esm2015/lib/directives/base-form-item-control.directive.js +58 -0
- package/esm2015/lib/directives/base-parent-item-control.directive.js +42 -0
- package/esm2015/lib/directives/base-single-selection-parent.directive.js +53 -0
- package/esm2015/lib/{form → directives}/form-item.directive.js +1 -1
- package/esm2015/lib/directives/index.js +5 -0
- package/esm2015/lib/models/api-config.js +3 -0
- package/esm2015/lib/models/base-form-item.model.js +2 -0
- package/esm2015/lib/{groups → models}/form-item-dialog-data.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/form-step.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/index.js +1 -1
- package/esm2015/lib/models/index.js +7 -0
- package/esm2015/lib/models/toggle-form-item-data.model.js +2 -0
- package/esm2015/lib/models/white-list.model.js +11 -0
- package/esm2015/lib/pipes/coerce-date-item.pipe.js +37 -0
- package/esm2015/lib/pipes/coerce-form-control.pipe.js +36 -0
- package/esm2015/lib/pipes/coerce-form-group.pipe.js +47 -0
- package/esm2015/lib/pipes/coerce-form-item.pipe.js +36 -0
- package/esm2015/lib/pipes/date-quarter.pipe.js +55 -0
- package/esm2015/lib/pipes/form-step-group.pipe.js +32 -0
- package/esm2015/lib/pipes/get-auto-complete.pipe.js +54 -0
- package/esm2015/lib/pipes/get-available-quarters.pipe.js +41 -0
- package/esm2015/lib/pipes/get-form-control-error.pipe.js +32 -0
- package/esm2015/lib/pipes/get-list-icon.pipe.js +65 -0
- package/esm2015/lib/pipes/get-object-type.pipe.js +29 -0
- package/esm2015/lib/pipes/get-selected-option.pipe.js +32 -0
- package/esm2015/lib/pipes/index.js +15 -0
- package/esm2015/lib/pipes/items-with-value.pipe.js +42 -0
- package/esm2015/lib/pipes/sanitize-html.pipe.js +35 -0
- package/esm2015/lib/services/api.service.js +67 -0
- package/esm2015/lib/services/dialog.service.js +47 -0
- package/esm2015/lib/services/form-manager.service.js +465 -0
- package/esm2015/lib/services/index.js +7 -0
- package/esm2015/lib/services/ng-form.service.js +150 -0
- package/esm2015/lib/services/resource-search-selection.service.js +24 -0
- package/esm2015/lib/services/ui.service.js +333 -0
- package/esm2015/lib/utilities/animations.js +8 -0
- package/esm2015/lib/utilities/find-form-control.js +29 -0
- package/esm2015/lib/utilities/find-form-item.js +25 -0
- package/esm2015/lib/utilities/flatten-steps.js +10 -0
- package/esm2015/lib/utilities/form-step.util.js +28 -0
- package/esm2015/lib/utilities/generate-form-steps.js +38 -0
- package/esm2015/lib/utilities/get-item-class-suffix.js +17 -0
- package/esm2015/lib/utilities/index.js +13 -0
- package/esm2015/lib/utilities/is-form-control.js +5 -0
- package/esm2015/lib/utilities/is-form-group.js +6 -0
- package/esm2015/lib/utilities/serializer-util.js +396 -0
- package/esm2015/lib/utilities/update-step-status.js +38 -0
- package/esm2015/lib/validators/index.js +3 -0
- package/esm2015/lib/validators/instant-validation-result-error-state-matcher.js +23 -0
- package/esm2015/lib/validators/validation-result-validator.js +19 -0
- package/esm2015/public-api.js +8 -10
- package/fesm2015/mtna-web-form-angular.js +4180 -3443
- package/fesm2015/mtna-web-form-angular.js.map +1 -1
- package/lib/components/acknowledge-dialog/acknowledge-dialog.component.d.ts +13 -0
- package/lib/components/acknowledge-dialog/acknowledge-dialog.module.d.ts +11 -0
- package/lib/components/acknowledge-dialog/index.d.ts +2 -0
- package/lib/components/base-items/base-form-item-control.component.d.ts +19 -0
- package/lib/components/base-items/base-form-item.component.d.ts +27 -0
- package/lib/components/base-items/base-group-item.component.d.ts +12 -0
- package/lib/components/base-items/base-parent-value-item.component.d.ts +17 -0
- package/lib/components/base-items/base-section-item.component.d.ts +13 -0
- package/lib/components/base-items/base-single-selection-parent-value-item.component.d.ts +19 -0
- package/lib/components/base-items/base-value-item.component.d.ts +17 -0
- package/lib/components/base-items/index.d.ts +6 -0
- package/lib/{form → components/form}/form.component.d.ts +2 -2
- package/lib/components/form/form.module.d.ts +16 -0
- package/lib/components/form/index.d.ts +2 -0
- package/lib/components/form-disabler/form-disabler.module.d.ts +8 -0
- package/lib/components/form-disabler/index.d.ts +2 -0
- package/lib/components/form-item/form-item.component.d.ts +54 -0
- package/lib/components/form-item/form-item.module.d.ts +13 -0
- package/lib/components/form-item/index.d.ts +2 -0
- package/lib/components/form-item-component-provider/form-item-component-provider.d.ts +4 -0
- package/lib/components/form-item-component-provider/form-item-injected-components.d.ts +2 -0
- package/lib/components/form-item-component-provider/index.d.ts +2 -0
- package/lib/components/form-item-dialog/form-item-dialog.component.d.ts +13 -0
- package/lib/components/form-item-dialog/form-item-dialog.module.d.ts +10 -0
- package/lib/components/form-item-dialog/index.d.ts +2 -0
- package/lib/components/form-item-impl/boolean/boolean.component.d.ts +18 -0
- package/lib/components/form-item-impl/boolean/boolean.module.d.ts +13 -0
- package/lib/components/form-item-impl/boolean/index.d.ts +2 -0
- package/lib/components/form-item-impl/checkbox/checkbox.component.d.ts +29 -0
- package/lib/components/form-item-impl/checkbox/checkbox.module.d.ts +18 -0
- package/lib/components/form-item-impl/checkbox/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/date}/date.component.d.ts +8 -8
- package/lib/components/form-item-impl/date/date.module.d.ts +15 -0
- package/lib/components/form-item-impl/date/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/date-range}/date-range.component.d.ts +2 -2
- package/lib/components/form-item-impl/date-range/date-range.module.d.ts +13 -0
- package/lib/components/form-item-impl/date-range/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/dropdown}/dropdown.component.d.ts +2 -4
- package/lib/components/form-item-impl/dropdown/dropdown.module.d.ts +17 -0
- package/lib/components/form-item-impl/dropdown/index.d.ts +2 -0
- package/lib/components/form-item-impl/file-upload/file-upload.component.d.ts +19 -0
- package/lib/components/form-item-impl/file-upload/file-upload.module.d.ts +14 -0
- package/lib/{file-upload → components/form-item-impl/file-upload}/index.d.ts +1 -0
- package/lib/components/form-item-impl/form-group/form-group.component.d.ts +17 -0
- package/lib/components/form-item-impl/form-group/form-group.module.d.ts +14 -0
- package/lib/components/form-item-impl/form-group/index.d.ts +2 -0
- package/lib/components/form-item-impl/form-section/form-section.component.d.ts +7 -0
- package/lib/components/form-item-impl/form-section/form-section.module.d.ts +13 -0
- package/lib/components/form-item-impl/form-section/index.d.ts +2 -0
- package/lib/components/form-item-impl/i18n-input/i18n-input.component.d.ts +13 -0
- package/lib/components/form-item-impl/i18n-input/i18n-input.module.d.ts +15 -0
- package/lib/components/form-item-impl/i18n-input/index.d.ts +2 -0
- package/lib/components/form-item-impl/index.d.ts +21 -0
- package/lib/components/form-item-impl/input/index.d.ts +2 -0
- package/lib/components/form-item-impl/input/input.component.d.ts +12 -0
- package/lib/components/form-item-impl/input/input.module.d.ts +15 -0
- package/lib/components/form-item-impl/multiple-choice/index.d.ts +2 -0
- package/lib/components/form-item-impl/multiple-choice/multiple-choice.component.d.ts +7 -0
- package/lib/components/form-item-impl/multiple-choice/multiple-choice.module.d.ts +14 -0
- package/lib/components/form-item-impl/ordered-list/index.d.ts +2 -0
- package/lib/components/form-item-impl/ordered-list/ordered-list-item.component.d.ts +7 -0
- package/lib/components/form-item-impl/ordered-list/ordered-list-item.module.d.ts +10 -0
- package/lib/{groups → components/form-item-impl/repeatable-item}/index.d.ts +1 -1
- package/lib/components/form-item-impl/repeatable-item/repeatable-item.component.d.ts +5 -0
- package/lib/components/form-item-impl/repeatable-item/repeatable-item.module.d.ts +8 -0
- package/lib/components/form-item-impl/repeatable-item-container/index.d.ts +2 -0
- package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +14 -0
- package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +16 -0
- package/lib/components/form-item-impl/search/index.d.ts +2 -0
- package/lib/components/form-item-impl/search/resource-search.component.d.ts +16 -0
- package/lib/components/form-item-impl/search/resource-search.module.d.ts +12 -0
- package/lib/components/form-item-impl/table-item/index.d.ts +2 -0
- package/lib/components/form-item-impl/table-item/table-item.component.d.ts +9 -0
- package/lib/components/form-item-impl/table-item/table-item.module.d.ts +10 -0
- package/lib/components/form-item-impl/text/index.d.ts +2 -0
- package/lib/components/form-item-impl/text/text.component.d.ts +7 -0
- package/lib/components/form-item-impl/text/text.module.d.ts +10 -0
- package/lib/components/form-item-impl/title/_title-theme.scss +28 -0
- package/lib/components/form-item-impl/title/index.d.ts +2 -0
- package/lib/components/form-item-impl/title/title.component.d.ts +7 -0
- package/lib/components/form-item-impl/title/title.module.d.ts +10 -0
- package/lib/components/form-item-impl/unordered-list/index.d.ts +2 -0
- package/lib/components/form-item-impl/unordered-list/unordered-list-item.component.d.ts +7 -0
- package/lib/components/form-item-impl/unordered-list/unordered-list-item.module.d.ts +10 -0
- package/lib/components/form-item-impl/year-quarter/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/year-quarter}/year-quarter.component.d.ts +9 -7
- package/lib/components/form-item-impl/year-quarter/year-quarter.module.d.ts +16 -0
- package/lib/components/form-item-impl/year-quarter-range/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/year-quarter-range}/year-quarter-range.component.d.ts +6 -2
- package/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.d.ts +12 -0
- package/lib/components/form-item-injector/form-item-injector.component.d.ts +52 -0
- package/lib/components/form-item-injector/form-item-injector.module.d.ts +8 -0
- package/lib/components/form-item-injector/index.d.ts +2 -0
- package/lib/{form-stepper → components/form-stepper/form-step}/form-step.component.d.ts +1 -1
- package/lib/components/form-stepper/form-step/index.d.ts +1 -0
- package/lib/{form-stepper → components/form-stepper/form-step-group}/form-step-group.component.d.ts +1 -1
- package/lib/components/form-stepper/form-step-group/index.d.ts +1 -0
- package/lib/{form-stepper → components/form-stepper/form-stepper}/form-stepper.component.d.ts +1 -2
- package/lib/components/form-stepper/form-stepper/index.d.ts +1 -0
- package/lib/components/form-stepper/form-stepper.module.d.ts +18 -0
- package/lib/components/form-stepper/index.d.ts +4 -0
- package/lib/components/index.d.ts +12 -0
- package/lib/{item-header → components/item-header}/index.d.ts +1 -0
- package/lib/{item-header → components/item-header}/item-header.component.d.ts +3 -3
- package/lib/components/item-header/item-header.module.d.ts +9 -0
- package/lib/{step-card → components/step-card}/index.d.ts +1 -0
- package/lib/{step-card → components/step-card}/step-card.component.d.ts +1 -1
- package/lib/components/step-card/step-card.module.d.ts +13 -0
- package/lib/core/_all-color.scss +15 -15
- package/lib/core/_all-theme.scss +15 -18
- package/lib/core/_all-typography.scss +15 -15
- package/lib/core/_core-theme.scss +0 -18
- package/lib/{form-item-controls → directives}/base-single-selection-parent.directive.d.ts +1 -1
- package/lib/directives/index.d.ts +4 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/toggle-form-item-data.model.d.ts +7 -0
- package/lib/pipes/coerce-date-item.pipe.d.ts +17 -0
- package/lib/pipes/coerce-form-control.pipe.d.ts +13 -0
- package/lib/{core/pipes → pipes}/coerce-form-group.pipe.d.ts +5 -0
- package/lib/pipes/coerce-form-item.pipe.d.ts +14 -0
- package/lib/pipes/date-quarter.pipe.d.ts +12 -0
- package/lib/{form-stepper → pipes}/form-step-group.pipe.d.ts +6 -1
- package/lib/pipes/get-auto-complete.pipe.d.ts +12 -0
- package/lib/{core/pipes → pipes}/get-available-quarters.pipe.d.ts +5 -0
- package/lib/pipes/get-form-control-error.pipe.d.ts +19 -0
- package/lib/pipes/get-list-icon.pipe.d.ts +12 -0
- package/lib/pipes/get-object-type.pipe.d.ts +12 -0
- package/lib/{core/pipes → pipes}/get-selected-option.pipe.d.ts +5 -0
- package/lib/pipes/index.d.ts +14 -0
- package/lib/{core/pipes → pipes}/items-with-value.pipe.d.ts +5 -0
- package/lib/{core/pipes → pipes}/sanitize-html.pipe.d.ts +5 -0
- package/lib/{core/services → services}/api.service.d.ts +1 -1
- package/lib/services/dialog.service.d.ts +21 -0
- package/lib/{core/services → services}/form-manager.service.d.ts +1 -1
- package/lib/{core/services → services}/index.d.ts +2 -0
- package/lib/services/resource-search-selection.service.d.ts +10 -0
- package/lib/{core/services → services}/ui.service.d.ts +1 -1
- package/lib/{core/utilities → utilities}/flatten-steps.d.ts +1 -1
- package/lib/{form-stepper → utilities}/form-step.util.d.ts +1 -1
- package/lib/{core/utilities → utilities}/generate-form-steps.d.ts +1 -1
- package/lib/utilities/get-item-class-suffix.d.ts +1 -0
- package/lib/{core/utilities → utilities}/index.d.ts +4 -0
- package/lib/utilities/is-form-control.d.ts +2 -0
- package/lib/{core/utilities → utilities}/update-step-status.d.ts +1 -1
- package/package.json +3 -1
- package/public-api.d.ts +7 -9
- package/esm2015/lib/core/animations.js +0 -8
- package/esm2015/lib/core/api-config.js +0 -3
- package/esm2015/lib/core/index.js +0 -7
- package/esm2015/lib/core/pipes/coerce-date-item.pipe.js +0 -23
- package/esm2015/lib/core/pipes/coerce-form-group.pipe.js +0 -35
- package/esm2015/lib/core/pipes/date-quarter.pipe.js +0 -43
- package/esm2015/lib/core/pipes/get-auto-complete.pipe.js +0 -42
- package/esm2015/lib/core/pipes/get-available-quarters.pipe.js +0 -29
- package/esm2015/lib/core/pipes/get-form-control-error.pipe.js +0 -20
- package/esm2015/lib/core/pipes/get-list-icon.pipe.js +0 -53
- package/esm2015/lib/core/pipes/get-object-type.pipe.js +0 -17
- package/esm2015/lib/core/pipes/get-selected-option.pipe.js +0 -20
- package/esm2015/lib/core/pipes/index.js +0 -71
- package/esm2015/lib/core/pipes/items-with-value.pipe.js +0 -30
- package/esm2015/lib/core/pipes/sanitize-html.pipe.js +0 -23
- package/esm2015/lib/core/services/api.service.js +0 -67
- package/esm2015/lib/core/services/form-manager.service.js +0 -465
- package/esm2015/lib/core/services/index.js +0 -5
- package/esm2015/lib/core/services/ng-form.service.js +0 -150
- package/esm2015/lib/core/services/ui.service.js +0 -333
- package/esm2015/lib/core/utilities/find-form-control.js +0 -29
- package/esm2015/lib/core/utilities/find-form-item.js +0 -25
- package/esm2015/lib/core/utilities/flatten-steps.js +0 -10
- package/esm2015/lib/core/utilities/generate-form-steps.js +0 -38
- package/esm2015/lib/core/utilities/index.js +0 -9
- package/esm2015/lib/core/utilities/is-form-group.js +0 -6
- package/esm2015/lib/core/utilities/serializer-util.js +0 -358
- package/esm2015/lib/core/utilities/update-step-status.js +0 -38
- package/esm2015/lib/core/validators/index.js +0 -3
- package/esm2015/lib/core/validators/instant-validation-result-error-state-matcher.js +0 -23
- package/esm2015/lib/core/validators/validation-result-validator.js +0 -19
- package/esm2015/lib/file-upload/file-upload.component.js +0 -66
- package/esm2015/lib/file-upload/index.js +0 -2
- package/esm2015/lib/form/base-form-item.model.js +0 -2
- package/esm2015/lib/form/form.component.js +0 -250
- package/esm2015/lib/form/form.module.js +0 -214
- package/esm2015/lib/form/index.js +0 -5
- package/esm2015/lib/form/white-list.model.js +0 -11
- package/esm2015/lib/form-item-controls/base-form-item-control.directive.js +0 -58
- package/esm2015/lib/form-item-controls/base-parent-item-control.directive.js +0 -42
- package/esm2015/lib/form-item-controls/base-single-selection-parent.directive.js +0 -53
- package/esm2015/lib/form-item-controls/date-range.component.js +0 -84
- package/esm2015/lib/form-item-controls/date.component.js +0 -134
- package/esm2015/lib/form-item-controls/dropdown.component.js +0 -109
- package/esm2015/lib/form-item-controls/index.js +0 -8
- package/esm2015/lib/form-item-controls/input.component.js +0 -149
- package/esm2015/lib/form-item-controls/year-quarter-range.component.js +0 -75
- package/esm2015/lib/form-item-controls/year-quarter.component.js +0 -228
- package/esm2015/lib/form-stepper/form-step-group.component.js +0 -95
- package/esm2015/lib/form-stepper/form-step-group.pipe.js +0 -20
- package/esm2015/lib/form-stepper/form-step.component.js +0 -110
- package/esm2015/lib/form-stepper/form-step.util.js +0 -28
- package/esm2015/lib/form-stepper/form-stepper.component.js +0 -115
- package/esm2015/lib/form-stepper/form-stepper.module.js +0 -53
- package/esm2015/lib/form-stepper/index.js +0 -8
- package/esm2015/lib/groups/group-components.js +0 -646
- package/esm2015/lib/groups/index.js +0 -3
- package/esm2015/lib/groups/repeatable-item.component.js +0 -23
- package/esm2015/lib/item-header/index.js +0 -2
- package/esm2015/lib/item-header/item-header.component.js +0 -108
- package/esm2015/lib/static-form-items/index.js +0 -3
- package/esm2015/lib/static-form-items/ordered-list-item.js +0 -50
- package/esm2015/lib/static-form-items/unordered-list-item.js +0 -52
- package/esm2015/lib/step-card/index.js +0 -2
- package/lib/_index.scss +0 -24
- package/lib/core/index.d.ts +0 -6
- package/lib/core/pipes/coerce-date-item.pipe.d.ts +0 -11
- package/lib/core/pipes/date-quarter.pipe.d.ts +0 -7
- package/lib/core/pipes/get-auto-complete.pipe.d.ts +0 -7
- package/lib/core/pipes/get-form-control-error.pipe.d.ts +0 -14
- package/lib/core/pipes/get-list-icon.pipe.d.ts +0 -7
- package/lib/core/pipes/get-object-type.pipe.d.ts +0 -7
- package/lib/core/pipes/index.d.ts +0 -28
- package/lib/file-upload/file-upload.component.d.ts +0 -23
- package/lib/form/form.module.d.ts +0 -52
- package/lib/form/index.d.ts +0 -4
- package/lib/form-item-controls/index.d.ts +0 -7
- package/lib/form-item-controls/input.component.d.ts +0 -14
- package/lib/form-stepper/form-stepper.module.d.ts +0 -18
- package/lib/form-stepper/index.d.ts +0 -7
- package/lib/groups/group-components.d.ts +0 -221
- package/lib/groups/repeatable-item.component.d.ts +0 -5
- package/lib/static-form-items/index.d.ts +0 -2
- package/lib/static-form-items/ordered-list-item.d.ts +0 -11
- package/lib/static-form-items/unordered-list-item.d.ts +0 -11
- /package/lib/{form → components/form-disabler}/form-disabler.component.d.ts +0 -0
- /package/lib/{groups → components/form-item-impl/checkbox}/_checkbox-theme.scss +0 -0
- /package/lib/{form-item-controls → components/form-item-impl/date}/_date-item-theme.scss +0 -0
- /package/lib/{groups → components/form-item-impl/form-group}/_form-group-theme.scss +0 -0
- /package/lib/{groups → components/form-item-impl/multiple-choice}/_multiple-choice-theme.scss +0 -0
- /package/lib/{groups/_repeatable-item-theme.scss → components/form-item-impl/repeatable-item-container/_repeatable-item-container-theme.scss} +0 -0
- /package/lib/{form-item-controls → components/form-item-impl/year-quarter}/_year-quarter-item-theme.scss +0 -0
- /package/lib/{form-stepper → components/form-stepper/form-step-group}/_form-step-group-theme.scss +0 -0
- /package/lib/{form-stepper → components/form-stepper/form-stepper}/_form-stepper-theme.scss +0 -0
- /package/lib/{item-header → components/item-header}/_item-header-theme.scss +0 -0
- /package/lib/{step-card → components/step-card}/_step-card-theme.scss +0 -0
- /package/lib/{form-item-controls → core}/_form-control-theme.scss +0 -0
- /package/lib/{form-item-controls → directives}/base-form-item-control.directive.d.ts +0 -0
- /package/lib/{form-item-controls → directives}/base-parent-item-control.directive.d.ts +0 -0
- /package/lib/{form → directives}/form-item.directive.d.ts +0 -0
- /package/lib/{core → models}/api-config.d.ts +0 -0
- /package/lib/{form → models}/base-form-item.model.d.ts +0 -0
- /package/lib/{groups → models}/form-item-dialog-data.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/form-step.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/index.d.ts +0 -0
- /package/lib/{form → models}/white-list.model.d.ts +0 -0
- /package/lib/{core/services → services}/ng-form.service.d.ts +0 -0
- /package/lib/{core → utilities}/animations.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/find-form-control.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/find-form-item.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/is-form-group.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/serializer-util.d.ts +0 -0
- /package/lib/{core/validators → validators}/index.d.ts +0 -0
- /package/lib/{core/validators → validators}/instant-validation-result-error-state-matcher.d.ts +0 -0
- /package/lib/{core/validators → validators}/validation-result-validator.d.ts +0 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { skipWhile, take } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class MtnaWfNgFormService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.unsavedChanges$ = new BehaviorSubject(false);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Informs a caller when the MtnaForm is dirty and has unsaved changes.
|
|
11
|
+
*/
|
|
12
|
+
get unsavedChanges() {
|
|
13
|
+
return this.unsavedChanges$.asObservable();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Add a control from the ngForm
|
|
17
|
+
* @param controlId id of the control being added
|
|
18
|
+
* @param parentIds array of ids representing the path to the parent control
|
|
19
|
+
* @param newControl the new form control to be added
|
|
20
|
+
*/
|
|
21
|
+
addControl(controlId, parentIds, newControl) {
|
|
22
|
+
if (!this.ngForm) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const parentControl = this.ngForm.get(parentIds);
|
|
26
|
+
parentControl.addControl(controlId, newControl);
|
|
27
|
+
parentControl.markAsTouched();
|
|
28
|
+
parentControl.markAsDirty();
|
|
29
|
+
this.forceUnsavedChange();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Remove a control from the ngForm.
|
|
33
|
+
*
|
|
34
|
+
* @param controlId is of the control to remove
|
|
35
|
+
* @param parentIds rray of ids representing the path to the parent control
|
|
36
|
+
*/
|
|
37
|
+
removeControl(controlId, parentIds) {
|
|
38
|
+
if (!this.ngForm) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const parentControl = this.ngForm.get(parentIds);
|
|
42
|
+
parentControl.removeControl(controlId);
|
|
43
|
+
parentControl.markAsTouched();
|
|
44
|
+
parentControl.markAsDirty();
|
|
45
|
+
this.forceUnsavedChange();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the form if it exists
|
|
49
|
+
* @returns the angular form or null
|
|
50
|
+
*/
|
|
51
|
+
getForm() {
|
|
52
|
+
return this.ngForm;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns a JSON representation of form values
|
|
56
|
+
*/
|
|
57
|
+
getFormValue() {
|
|
58
|
+
var _a;
|
|
59
|
+
// This includes values for disabled controls.
|
|
60
|
+
// We loop through MtnaForm to insert values,
|
|
61
|
+
// so we need the disabled controls to ensure no info loss.
|
|
62
|
+
return (_a = this.ngForm) === null || _a === void 0 ? void 0 : _a.getRawValue();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @returns Whether a form has been set on this service
|
|
66
|
+
*/
|
|
67
|
+
hasForm() {
|
|
68
|
+
return !!this.ngForm;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @returns Whether the form is dirty.
|
|
72
|
+
*/
|
|
73
|
+
isFormDirty() {
|
|
74
|
+
return !!this.ngForm && this.ngForm.dirty;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Unsubscribes from value changes & sets the ngForm to null.
|
|
78
|
+
* Should be called when any component using an MtnaForm is destroyed.
|
|
79
|
+
*/
|
|
80
|
+
disposeForm() {
|
|
81
|
+
this.unsubscribeValueChanges();
|
|
82
|
+
this.ngForm = undefined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Forces the unsavedChanges observable to emit true.
|
|
86
|
+
* Use with care, one example is when repeatable items are added/removed from the form.
|
|
87
|
+
*/
|
|
88
|
+
forceUnsavedChange() {
|
|
89
|
+
this.unsubscribeValueChanges();
|
|
90
|
+
this.unsavedChanges$.next(true);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Marks ngForm as pristine & untouched.
|
|
94
|
+
*/
|
|
95
|
+
markAsPristineAndUntouched() {
|
|
96
|
+
if (this.ngForm) {
|
|
97
|
+
this.ngForm.markAsPristine();
|
|
98
|
+
this.ngForm.markAsUntouched();
|
|
99
|
+
this.unsavedChanges$.next(this.ngForm.dirty);
|
|
100
|
+
this.observeNgFormChanges();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Resets the ngForm.
|
|
105
|
+
*/
|
|
106
|
+
resetForm() {
|
|
107
|
+
if (this.ngForm) {
|
|
108
|
+
this.ngForm.reset();
|
|
109
|
+
this.unsavedChanges$.next(this.ngForm.dirty);
|
|
110
|
+
this.observeNgFormChanges();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Sets a FormGroup on the service so an external source may observe changes.
|
|
115
|
+
* @param ngForm FormGroup to be registered.
|
|
116
|
+
*/
|
|
117
|
+
setForm(ngForm) {
|
|
118
|
+
this.ngForm = ngForm;
|
|
119
|
+
this.unsavedChanges$.next(this.ngForm.dirty);
|
|
120
|
+
if (this.ngForm.pristine) {
|
|
121
|
+
this.observeNgFormChanges();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Subscribes to ngForm status changes & updates the unsavedChanges observable
|
|
126
|
+
*/
|
|
127
|
+
observeNgFormChanges() {
|
|
128
|
+
this.unsubscribeValueChanges();
|
|
129
|
+
if (this.ngForm) {
|
|
130
|
+
this.valueChangeSubscription = this.ngForm.valueChanges
|
|
131
|
+
.pipe(skipWhile(() => (this.ngForm ? this.ngForm.pristine : true)), take(1))
|
|
132
|
+
.subscribe(() => { var _a; return this.unsavedChanges$.next((_a = this.ngForm) === null || _a === void 0 ? void 0 : _a.dirty); });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Removes the ngForm status change subscription.
|
|
137
|
+
*/
|
|
138
|
+
unsubscribeValueChanges() {
|
|
139
|
+
if (!!this.valueChangeSubscription && !this.valueChangeSubscription.closed) {
|
|
140
|
+
this.valueChangeSubscription.unsubscribe();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
MtnaWfNgFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfNgFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
145
|
+
MtnaWfNgFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfNgFormService, providedIn: 'root' });
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfNgFormService, decorators: [{
|
|
147
|
+
type: Injectable,
|
|
148
|
+
args: [{ providedIn: 'root' }]
|
|
149
|
+
}] });
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL25nLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQXFDLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR2pELE1BQU0sT0FBTyxtQkFBbUI7SUFEaEM7UUFHVSxvQkFBZSxHQUFxQixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztLQTBKakY7SUF2SkM7O09BRUc7SUFDSCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxTQUFpQixFQUFFLFNBQW1CLEVBQUUsVUFBMkI7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFjLENBQUM7UUFDOUQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsU0FBaUIsRUFBRSxTQUFtQjtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFP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QSxTQUFTLENBQUMsR0FBRyxFQUFFLFdBQUMsT0FBQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7WUFDMUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7aUhBM0pVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRE4sTUFBTTs0RkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE10bmFXZk5nRm9ybVNlcnZpY2Uge1xuICBwcml2YXRlIG5nRm9ybTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVuc2F2ZWRDaGFuZ2VzJDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZm9ybXMgYSBjYWxsZXIgd2hlbiB0aGUgTXRuYUZvcm0gaXMgZGlydHkgYW5kIGhhcyB1bnNhdmVkIGNoYW5nZXMuXG4gICAqL1xuICBnZXQgdW5zYXZlZENoYW5nZXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudW5zYXZlZENoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbnRyb2wgZnJvbSB0aGUgbmdGb3JtXG4gICAqIEBwYXJhbSBjb250cm9sSWQgaWQgb2YgdGhlIGNvbnRyb2wgYmVpbmcgYWRkZWRcbiAgICogQHBhcmFtIHBhcmVudElkcyBhcnJheSBvZiBpZHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgY29udHJvbFxuICAgKiBAcGFyYW0gbmV3Q29udHJvbCB0aGUgbmV3IGZvcm0gY29udHJvbCB0byBiZSBhZGRlZFxuICAgKi9cbiAgYWRkQ29udHJvbChjb250cm9sSWQ6IHN0cmluZywgcGFyZW50SWRzOiBzdHJpbmdbXSwgbmV3Q29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCF0aGlzLm5nRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRyb2wgPSB0aGlzLm5nRm9ybS5nZXQocGFyZW50SWRzKSBhcyBGb3JtR3JvdXA7XG4gICAgcGFyZW50Q29udHJvbC5hZGRDb250cm9sKGNvbnRyb2xJZCwgbmV3Q29udHJvbCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9yY2VVbnNhdmVkQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29udHJvbCBmcm9tIHRoZSBuZ0Zvcm0uXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sSWQgaXMgb2YgdGhlIGNvbnRyb2wgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBwYXJlbnRJZHMgcnJheSBvZiBpZHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgY29udHJvbFxuICAgKi9cbiAgcmVtb3ZlQ29udHJvbChjb250cm9sSWQ6IHN0cmluZywgcGFyZW50SWRzOiBzdHJpbmdbXSkge1xuICAgIGlmICghdGhpcy5uZ0Zvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRDb250cm9sID0gdGhpcy5uZ0Zvcm0uZ2V0KHBhcmVudElkcykgYXMgRm9ybUdyb3VwO1xuICAgIHBhcmVudENvbnRyb2wucmVtb3ZlQ29udHJvbChjb250cm9sSWQpO1xuICAgIHBhcmVudENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIHBhcmVudENvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcmNlVW5zYXZlZENoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZm9ybSBpZiBpdCBleGlzdHNcbiAgICogQHJldHVybnMgdGhlIGFuZ3VsYXIgZm9ybSBvciBudWxsXG4gICAqL1xuICBnZXRGb3JtKCk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubmdGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGZvcm0gdmFsdWVzXG4gICAqL1xuICBnZXRGb3JtVmFsdWUoKSB7XG4gICAgLy8gVGhpcyBpbmNsdWRlcyB2YWx1ZXMgZm9yIGRpc2FibGVkIGNvbnRyb2xzLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBNdG5hRm9ybSB0byBpbnNlcnQgdmFsdWVzLFxuICAgIC8vIHNvIHdlIG5lZWQgdGhlIGRpc2FibGVkIGNvbnRyb2xzIHRvIGVuc3VyZSBubyBpbmZvIGxvc3MuXG4gICAgcmV0dXJuIHRoaXMubmdGb3JtPy5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYSBmb3JtIGhhcyBiZWVuIHNldCBvbiB0aGlzIHNlcnZpY2VcbiAgICovXG4gIGhhc0Zvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5uZ0Zvcm07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgZm9ybSBpcyBkaXJ0eS5cbiAgICovXG4gIGlzRm9ybURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubmdGb3JtICYmIHRoaXMubmdGb3JtLmRpcnR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlcyBmcm9tIHZhbHVlIGNoYW5nZXMgJiBzZXRzIHRoZSBuZ0Zvcm0gdG8gbnVsbC5cbiAgICogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGFueSBjb21wb25lbnQgdXNpbmcgYW4gTXRuYUZvcm0gaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgZGlzcG9zZUZvcm0oKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMubmdGb3JtID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgdW5zYXZlZENoYW5nZXMgb2JzZXJ2YWJsZSB0byBlbWl0IHRydWUuXG4gICAqIFVzZSB3aXRoIGNhcmUsIG9uZSBleGFtcGxlIGlzIHdoZW4gcmVwZWF0YWJsZSBpdGVtcyBhcmUgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBmb3JtLlxuICAgKi9cbiAgZm9yY2VVbnNhdmVkQ2hhbmdlKCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVWYWx1ZUNoYW5nZXMoKTtcbiAgICB0aGlzLnVuc2F2ZWRDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIG5nRm9ybSBhcyBwcmlzdGluZSAmIHVudG91Y2hlZC5cbiAgICovXG4gIG1hcmtBc1ByaXN0aW5lQW5kVW50b3VjaGVkKCkge1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy5uZ0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubmdGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybS5kaXJ0eSk7XG4gICAgICB0aGlzLm9ic2VydmVOZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgbmdGb3JtLlxuICAgKi9cbiAgcmVzZXRGb3JtKCkge1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy5uZ0Zvcm0ucmVzZXQoKTtcbiAgICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodGhpcy5uZ0Zvcm0uZGlydHkpO1xuICAgICAgdGhpcy5vYnNlcnZlTmdGb3JtQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgRm9ybUdyb3VwIG9uIHRoZSBzZXJ2aWNlIHNvIGFuIGV4dGVybmFsIHNvdXJjZSBtYXkgb2JzZXJ2ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gbmdGb3JtIEZvcm1Hcm91cCB0byBiZSByZWdpc3RlcmVkLlxuICAgKi9cbiAgc2V0Rm9ybShuZ0Zvcm06IEZvcm1Hcm91cCkge1xuICAgIHRoaXMubmdGb3JtID0gbmdGb3JtO1xuICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodGhpcy5uZ0Zvcm0uZGlydHkpO1xuICAgIGlmICh0aGlzLm5nRm9ybS5wcmlzdGluZSkge1xuICAgICAgdGhpcy5vYnNlcnZlTmdGb3JtQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIG5nRm9ybSBzdGF0dXMgY2hhbmdlcyAmIHVwZGF0ZXMgdGhlIHVuc2F2ZWRDaGFuZ2VzIG9ic2VydmFibGVcbiAgICovXG4gIHByaXZhdGUgb2JzZXJ2ZU5nRm9ybUNoYW5nZXMoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubmdGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwV2hpbGUoKCkgPT4gKHRoaXMubmdGb3JtID8gdGhpcy5uZ0Zvcm0ucHJpc3RpbmUgOiB0cnVlKSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybT8uZGlydHkpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbmdGb3JtIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpIHtcbiAgICBpZiAoISF0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uICYmICF0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { MtnaSearchSelectionService } from '@mtna/search-manager-angular';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class MtnaWfResourceSearchSelectionService extends MtnaSearchSelectionService {
|
|
5
|
+
getModelFromResult(result) {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
const referenceDetails = {
|
|
8
|
+
// FIXME these need to come from the item.
|
|
9
|
+
uri: ((_a = result.getFieldByName('uri')) === null || _a === void 0 ? void 0 : _a.value) || '',
|
|
10
|
+
display: ((_b = result.getFieldByName('title')) === null || _b === void 0 ? void 0 : _b.value) || '',
|
|
11
|
+
};
|
|
12
|
+
return referenceDetails;
|
|
13
|
+
}
|
|
14
|
+
modelIsResult(model, result) {
|
|
15
|
+
var _a;
|
|
16
|
+
return model.uri === ((_a = result.getFieldByName('uri')) === null || _a === void 0 ? void 0 : _a.value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
MtnaWfResourceSearchSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfResourceSearchSelectionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
20
|
+
MtnaWfResourceSearchSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfResourceSearchSelectionService });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfResourceSearchSelectionService, decorators: [{
|
|
22
|
+
type: Injectable
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utc2VhcmNoLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3Jlc291cmNlLXNlYXJjaC1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUcxRSxNQUFNLE9BQU8sb0NBQXFDLFNBQVEsMEJBQTZDO0lBQ3JHLGtCQUFrQixDQUFDLE1BQWM7O1FBQy9CLE1BQU0sZ0JBQWdCLEdBQXNCO1lBQzFDLDBDQUEwQztZQUMxQyxHQUFHLEVBQUUsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxjQUFjLENBQVMsS0FBSyxDQUFDLDBDQUFFLEtBQUssS0FBSSxFQUFFO1lBQ3RELE9BQU8sRUFBRSxDQUFBLE1BQUEsTUFBTSxDQUFDLGNBQWMsQ0FBUyxPQUFPLENBQUMsMENBQUUsS0FBSyxLQUFJLEVBQUU7U0FDN0QsQ0FBQztRQUNGLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUF3QixFQUFFLE1BQWM7O1FBQ3BELE9BQU8sS0FBSyxDQUFDLEdBQUcsTUFBSyxNQUFBLE1BQU0sQ0FBQyxjQUFjLENBQVMsS0FBSyxDQUFDLDBDQUFFLEtBQUssQ0FBQSxDQUFDO0lBQ25FLENBQUM7O2tJQVpVLG9DQUFvQztzSUFBcEMsb0NBQW9DOzRGQUFwQyxvQ0FBb0M7a0JBRGhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNvdXJjZVJlZmVyZW5jZSB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gJ0BtdG5hL3NlYXJjaC1tYW5hZ2VyLXRzJztcbmltcG9ydCB7IE10bmFTZWFyY2hTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnQG10bmEvc2VhcmNoLW1hbmFnZXItYW5ndWxhcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNdG5hV2ZSZXNvdXJjZVNlYXJjaFNlbGVjdGlvblNlcnZpY2UgZXh0ZW5kcyBNdG5hU2VhcmNoU2VsZWN0aW9uU2VydmljZTxSZXNvdXJjZVJlZmVyZW5jZT4ge1xuICBnZXRNb2RlbEZyb21SZXN1bHQocmVzdWx0OiBSZXN1bHQpOiBSZXNvdXJjZVJlZmVyZW5jZSB7XG4gICAgY29uc3QgcmVmZXJlbmNlRGV0YWlsczogUmVzb3VyY2VSZWZlcmVuY2UgPSB7XG4gICAgICAvLyBGSVhNRSB0aGVzZSBuZWVkIHRvIGNvbWUgZnJvbSB0aGUgaXRlbS5cbiAgICAgIHVyaTogcmVzdWx0LmdldEZpZWxkQnlOYW1lPHN0cmluZz4oJ3VyaScpPy52YWx1ZSB8fCAnJyxcbiAgICAgIGRpc3BsYXk6IHJlc3VsdC5nZXRGaWVsZEJ5TmFtZTxzdHJpbmc+KCd0aXRsZScpPy52YWx1ZSB8fCAnJyxcbiAgICB9O1xuICAgIHJldHVybiByZWZlcmVuY2VEZXRhaWxzO1xuICB9XG5cbiAgbW9kZWxJc1Jlc3VsdChtb2RlbDogUmVzb3VyY2VSZWZlcmVuY2UsIHJlc3VsdDogUmVzdWx0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGVsLnVyaSA9PT0gcmVzdWx0LmdldEZpZWxkQnlOYW1lPHN0cmluZz4oJ3VyaScpPy52YWx1ZTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { isPresent, isType } from '@mtna/core-ts';
|
|
4
|
+
import { isConditionalItem, isOptionGroupItemImpl, isOptionItemImpl } from '@mtna/web-form-ts';
|
|
5
|
+
import { BehaviorSubject } from 'rxjs';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/material/dialog";
|
|
8
|
+
/** List of default error messages to display */
|
|
9
|
+
export const DEFAULT_ERROR_MESSAGES = {
|
|
10
|
+
email: 'This field must include a valid email format.',
|
|
11
|
+
max: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.maxValue)
|
|
12
|
+
? `This field's value must be less.`
|
|
13
|
+
: `${isPresent(item === null || item === void 0 ? void 0 : item.minValue) ? `Min value: ${item === null || item === void 0 ? void 0 : item.minValue} - ` : ''}Max value: ${item === null || item === void 0 ? void 0 : item.minValue}`,
|
|
14
|
+
maxlength: 'This field has exceeded the allowed maximum.',
|
|
15
|
+
maxSelected: null,
|
|
16
|
+
min: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.minValue)
|
|
17
|
+
? `This field's value must be greater.`
|
|
18
|
+
: `Min value: ${item === null || item === void 0 ? void 0 : item.minValue}${!isPresent(item === null || item === void 0 ? void 0 : item.maxValue) ? '' : ` - Max value: ${item === null || item === void 0 ? void 0 : item.maxValue}`}`,
|
|
19
|
+
minlength: 'This field has not met the required minimum.',
|
|
20
|
+
minSelected: null,
|
|
21
|
+
nonDigit: `This field's value must be numeric.`,
|
|
22
|
+
pattern: `This field's input does not meet the accepted pattern.`,
|
|
23
|
+
positive: `This field's value cannot be negative.`,
|
|
24
|
+
required: 'This field is required.',
|
|
25
|
+
requiredTrue: `This field's value must be 'true'.`,
|
|
26
|
+
wholeNumber: `This field cannot contain a decimal.`,
|
|
27
|
+
matDatepickerParse: `This field's value is not an accepted format.`,
|
|
28
|
+
};
|
|
29
|
+
export const WEB_FORM_CUSTOM_ERRORS = new InjectionToken('mtnaWebFormCustomFormErrors');
|
|
30
|
+
export class MtnaWfUIService {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
+
constructor(dialog, errors) {
|
|
33
|
+
this.dialog = dialog;
|
|
34
|
+
/** Map of annotation counts for each annotatable item */
|
|
35
|
+
this.annotations = {};
|
|
36
|
+
/** Map of components in the MtnaForm */
|
|
37
|
+
this.components = {};
|
|
38
|
+
/** Map of item.disabled values that have changed */
|
|
39
|
+
this.disabledState = {};
|
|
40
|
+
/** Map of toggler ID's for components that have multiple togglers */
|
|
41
|
+
this.multipleEnablers = {};
|
|
42
|
+
// Workaround for: Metadata collected contains an error that will be reported at runtime: Could not resolve type CustomErrors.
|
|
43
|
+
// see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642
|
|
44
|
+
this.errors = errors;
|
|
45
|
+
}
|
|
46
|
+
getDisabledStates() {
|
|
47
|
+
return Object.assign({}, this.disabledState);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns an error message matching the error id
|
|
51
|
+
* @param errorId Id of the error, to find the associated error message
|
|
52
|
+
* @param item FormItem to pass to ValidationErrors that are functions. For instance,
|
|
53
|
+
* this is useful for 'min' & 'max' value limits to display more helpful messages
|
|
54
|
+
*/
|
|
55
|
+
getError(errorId, item) {
|
|
56
|
+
// default when no custom message exists
|
|
57
|
+
let error = DEFAULT_ERROR_MESSAGES[errorId];
|
|
58
|
+
if (!!this.errors && !!item) {
|
|
59
|
+
// check for instance specific, via instanceId
|
|
60
|
+
if (isPresent(this.errors[item.instanceId]) && isPresent(this.errors[item.instanceId][errorId])) {
|
|
61
|
+
error = this.errors[item.instanceId][errorId];
|
|
62
|
+
// check for item specific, via itemId
|
|
63
|
+
}
|
|
64
|
+
else if (isPresent(this.errors[item.itemId]) && isPresent(this.errors[item.itemId][errorId])) {
|
|
65
|
+
error = this.errors[item.itemId][errorId];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return typeof error === 'function' ? error(item) : error;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get a registered component by intance id.
|
|
72
|
+
* @param id the instanceId
|
|
73
|
+
* @returns the {@link FormItemComponent} that represents that ID or undefined if not registered.
|
|
74
|
+
*/
|
|
75
|
+
getItem(id) {
|
|
76
|
+
return this.components[id];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Sets the initial map of annotation counts, and/or pushes the new count onto the component observable stream
|
|
80
|
+
* @param map AnnotatableNumberMap of counts mapped to their annotatableIds
|
|
81
|
+
*/
|
|
82
|
+
registerAnnotations(map) {
|
|
83
|
+
for (const id in map) {
|
|
84
|
+
if (Object.prototype.hasOwnProperty.call(map, id)) {
|
|
85
|
+
if (!this.annotations[id]) {
|
|
86
|
+
this.annotations[id] = new BehaviorSubject(map[id]);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.annotations[id].next(map[id]);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Maps a component to its items instanceId.
|
|
96
|
+
* @param component component calling this method, i.e. 'this'
|
|
97
|
+
*/
|
|
98
|
+
registerSelf(component) {
|
|
99
|
+
this.components[component.item.instanceId] = component;
|
|
100
|
+
if (!!component.item.annotatableId && component.item.annotationEnabled) {
|
|
101
|
+
if (!this.annotations[component.item.annotatableId]) {
|
|
102
|
+
this.annotations[component.item.annotatableId] = new BehaviorSubject(null);
|
|
103
|
+
}
|
|
104
|
+
component.annotations$ = this.annotations[component.item.annotatableId].asObservable();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Toggles a FormItem's visiblity and enable/disable state
|
|
109
|
+
*
|
|
110
|
+
* @param enabledItemIds array of component IDs for enabled items.
|
|
111
|
+
* @param disabledItemIds array of component IDs for disabled items.
|
|
112
|
+
* @param enabled Whether the enabledItemIds are enabled.
|
|
113
|
+
* @param callerId instanceId of the item invoking this function
|
|
114
|
+
* @param reset Whether to reset the multiple enabler map of the toggled item
|
|
115
|
+
*/
|
|
116
|
+
toggleFormItems(enabledItemIds, disabledItemIds, enabled, callerId, reset = false) {
|
|
117
|
+
if ((!enabledItemIds || !enabledItemIds.length) && (!disabledItemIds || !disabledItemIds.length)) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const allIds = [enabledItemIds, disabledItemIds];
|
|
121
|
+
for (let i = 0; i < allIds.length; i++) {
|
|
122
|
+
const itemIds = allIds[i];
|
|
123
|
+
const isEnabled = i === 0 ? enabled : !enabled;
|
|
124
|
+
for (const id of itemIds) {
|
|
125
|
+
const component = this.components[id];
|
|
126
|
+
// If component is registered, toggle it
|
|
127
|
+
if (component) {
|
|
128
|
+
const item = component.item;
|
|
129
|
+
const hasMultipleEnablers = isConditionalItem(item) && item.condition ? item.condition.itemIds.length > 1 : false;
|
|
130
|
+
// If item has more than 1 enabler, handle multiple enablers
|
|
131
|
+
if (hasMultipleEnablers) {
|
|
132
|
+
if (reset) {
|
|
133
|
+
this.multipleEnablers[item.instanceId] = null;
|
|
134
|
+
}
|
|
135
|
+
// If a map has not been registered, then build up a map to register
|
|
136
|
+
// Should only happen the first time an item is toggled.
|
|
137
|
+
if (!this.multipleEnablers[item.instanceId] && isConditionalItem(item)) {
|
|
138
|
+
this.multipleEnablers[item.instanceId] = this._registerCurrentEnablers(item);
|
|
139
|
+
}
|
|
140
|
+
// handle Multiple Enablers
|
|
141
|
+
this._handleMultipleEnablers(component, isEnabled, callerId);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Not multiple enablers
|
|
145
|
+
this._toggleDisabledStateAndControl(component, isEnabled);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.error('[toggleFormItems] component has not been registerd', id, enabled, callerId);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Generates map of all IDs currently influencing an item.
|
|
156
|
+
* @param toggledItem item being toggled
|
|
157
|
+
*/
|
|
158
|
+
_registerCurrentEnablers(toggledItem) {
|
|
159
|
+
var _a;
|
|
160
|
+
const enablers = {};
|
|
161
|
+
const allIds = ((_a = toggledItem.condition) === null || _a === void 0 ? void 0 : _a.itemIds) || [];
|
|
162
|
+
for (const id of allIds) {
|
|
163
|
+
const component = this.components[id];
|
|
164
|
+
if (component) {
|
|
165
|
+
if (this._isCurrentlyToggling(component, toggledItem.instanceId)) {
|
|
166
|
+
enablers[component.item.instanceId] = component.item.instanceId;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
console.error('[registerCurrentEnablers] component has not been registered.', id);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return enablers;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Resets the map of components. This should be called by the form when
|
|
177
|
+
* it is destroyed.
|
|
178
|
+
*/
|
|
179
|
+
resetComponentMap() {
|
|
180
|
+
this.annotations = {};
|
|
181
|
+
this.components = {};
|
|
182
|
+
this.disabledState = {};
|
|
183
|
+
this.multipleEnablers = {};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Determines if an influencer is currently toggling the specified toggledItemId.
|
|
187
|
+
* @param influencer Item to check whether it's currently influencing the toggledItemId
|
|
188
|
+
* @param toggledId InstanceId of the item being toggled
|
|
189
|
+
* @returns Whether the influencer is currently toggling the toggled item
|
|
190
|
+
*/
|
|
191
|
+
_isCurrentlyToggling(influencer, toggledId) {
|
|
192
|
+
var _a, _b, _c;
|
|
193
|
+
const item = influencer.item;
|
|
194
|
+
// Item has single option property, so check if selected, or item.value is 'true'
|
|
195
|
+
if (isOptionItemImpl(item)) {
|
|
196
|
+
return item.option.selected || !!item.value || !!((_a = influencer.control) === null || _a === void 0 ? void 0 : _a.value);
|
|
197
|
+
}
|
|
198
|
+
else if (isOptionGroupItemImpl(item)) {
|
|
199
|
+
const value = (_c = (_b = influencer.control) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : item.value;
|
|
200
|
+
if (Array.isArray(value)) {
|
|
201
|
+
// find the index of options that contain the 'toggledId' in their enabledItems
|
|
202
|
+
// & check if at least 1 is selected, or its 'true' in the value
|
|
203
|
+
const optionIndexes = item.options.map((o, i) => (o.enabledItems.some((id) => id === toggledId) ? i : null)).filter(isPresent);
|
|
204
|
+
return optionIndexes.some((i) => !!value[i]);
|
|
205
|
+
}
|
|
206
|
+
else if (typeof value === 'string' && value.length) {
|
|
207
|
+
// if the value is a single value, get the enabling option ids and check for the value in them
|
|
208
|
+
return item.options.some((o) => o.option.id === value && o.enabledItems.some((id) => id === toggledId));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Handles component visibility for a FormItem with multiple enablers in its condition
|
|
215
|
+
* @param component FormItemComponent being toggled
|
|
216
|
+
* @param enabled Whether the component is being enabled
|
|
217
|
+
* @param callerId ID of the caller toggling this component
|
|
218
|
+
*/
|
|
219
|
+
_handleMultipleEnablers(component, enabled, callerId) {
|
|
220
|
+
var _a;
|
|
221
|
+
const item = component.item;
|
|
222
|
+
const enablers = Object.assign({}, this.multipleEnablers[item.instanceId]);
|
|
223
|
+
let isEnabled;
|
|
224
|
+
if (enabled) {
|
|
225
|
+
enablers[callerId] = callerId;
|
|
226
|
+
isEnabled =
|
|
227
|
+
isConditionalItem(item) &&
|
|
228
|
+
!!item.condition &&
|
|
229
|
+
(!item.condition.allRequired || item.condition.itemIds.every((id) => !!enablers[id]));
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
delete enablers[callerId];
|
|
233
|
+
isEnabled = !((isConditionalItem(item) && ((_a = item.condition) === null || _a === void 0 ? void 0 : _a.allRequired)) || !Object.keys(enablers).length);
|
|
234
|
+
}
|
|
235
|
+
// If enabled === disabled, then the state has changed
|
|
236
|
+
if (this._isDisabled(item) === isEnabled) {
|
|
237
|
+
this._toggleDisabledStateAndControl(component, isEnabled);
|
|
238
|
+
}
|
|
239
|
+
// set the new enabler map
|
|
240
|
+
this.multipleEnablers[item.instanceId] = enablers;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Enables or disables the control on a FormItemComponent
|
|
244
|
+
* @param component FormItemComponent to enable or disable its control
|
|
245
|
+
* @param enabled whether to enable the control
|
|
246
|
+
*/
|
|
247
|
+
_toggleControlState(component, enabled) {
|
|
248
|
+
var _a, _b, _c;
|
|
249
|
+
if (enabled && !((_a = component.control) === null || _a === void 0 ? void 0 : _a.enabled)) {
|
|
250
|
+
// Enable the control if it isn't already
|
|
251
|
+
if (component.control instanceof FormGroup) {
|
|
252
|
+
this._enableIndividualControls(component);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
(_b = component.control) === null || _b === void 0 ? void 0 : _b.enable();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else if (!enabled && ((_c = component.control) === null || _c === void 0 ? void 0 : _c.enabled)) {
|
|
259
|
+
// Disable the control if it isn't already
|
|
260
|
+
component.control.disable();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Toggles both the component visiblity and the control's enable/disable status
|
|
265
|
+
* @param component FormItemComponent to show or hide and enable or disable
|
|
266
|
+
* @param enabled whether to show the component and whether to enable the component
|
|
267
|
+
*/
|
|
268
|
+
_toggleDisabledStateAndControl(component, enabled) {
|
|
269
|
+
this.disabledState[component.item.instanceId] = !enabled;
|
|
270
|
+
this._toggleControlState(component, enabled);
|
|
271
|
+
if (isConditionalItem(component.item) && component.item.hideOnDisable) {
|
|
272
|
+
component.visible = enabled;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Enables controls individually using recursion.
|
|
277
|
+
* FormGroups should only exist for items with 'items' arrays, or
|
|
278
|
+
* if the component is a BaseParentItemControl
|
|
279
|
+
* @param comp FormItemComponent
|
|
280
|
+
*/
|
|
281
|
+
_enableIndividualControls(comp) {
|
|
282
|
+
const group = comp.control;
|
|
283
|
+
if (isOptionItemImpl(comp.item) || isOptionGroupItemImpl(comp.item)) {
|
|
284
|
+
const map = comp.item.optionItemMap;
|
|
285
|
+
const self = group.get(comp.item.instanceId);
|
|
286
|
+
self === null || self === void 0 ? void 0 : self.enable();
|
|
287
|
+
for (const optionId in map) {
|
|
288
|
+
if (Object.prototype.hasOwnProperty.call(map, optionId)) {
|
|
289
|
+
const childComp = this.components[map[optionId].instanceId];
|
|
290
|
+
if (!this._isDisabled(childComp.item)) {
|
|
291
|
+
this._toggleControlState(childComp, true);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else if (isType(comp.item, 'items') && comp.item.items.length) {
|
|
297
|
+
// Item must have 'items' array
|
|
298
|
+
for (const item of comp.item.items) {
|
|
299
|
+
const childComp = this.components[item.instanceId];
|
|
300
|
+
if (!this._isDisabled(item)) {
|
|
301
|
+
this._toggleControlState(childComp, true);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
group.updateValueAndValidity();
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Determines if a component is disabled. Prioritizes the disabledState value,
|
|
309
|
+
* if it exists, otherwise returns the item's previous disabled value
|
|
310
|
+
* @param item item to check for its disabled state
|
|
311
|
+
*/
|
|
312
|
+
_isDisabled(item) {
|
|
313
|
+
const existsInDisabledStatMap = isPresent(this.disabledState[item.instanceId]);
|
|
314
|
+
if (!existsInDisabledStatMap) {
|
|
315
|
+
return isConditionalItem(item) ? item.disabled : false;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
return this.disabledState[item.instanceId];
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
MtnaWfUIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfUIService, deps: [{ token: i1.MatDialog }, { token: WEB_FORM_CUSTOM_ERRORS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
323
|
+
MtnaWfUIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfUIService, providedIn: 'root' });
|
|
324
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfUIService, decorators: [{
|
|
325
|
+
type: Injectable,
|
|
326
|
+
args: [{ providedIn: 'root' }]
|
|
327
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: undefined, decorators: [{
|
|
328
|
+
type: Optional
|
|
329
|
+
}, {
|
|
330
|
+
type: Inject,
|
|
331
|
+
args: [WEB_FORM_CUSTOM_ERRORS]
|
|
332
|
+
}] }]; } });
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQTJDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBbUJ2QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXFCO0lBQ3RELEtBQUssRUFBRSwrQ0FBK0M7SUFDdEQsR0FBRyxFQUFFLENBQUMsSUFBb0UsRUFBRSxFQUFFLENBQzVFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLENBQUM7UUFDNUMsQ0FBQyxDQUFDLGtDQUFrQztRQUNwQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEVBQUU7SUFDekcsU0FBUyxFQUFFLDhDQUE4QztJQUN6RCxXQUFXLEVB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QyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7NkdBcFNVLGVBQWUsMkNBWWlDLHNCQUFzQjtpSEFadEUsZUFBZSxjQURGLE1BQU07NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFhUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEFubm90YXRhYmxlTnVtYmVyTWFwIH0gZnJvbSAnQG10bmEvcG9qby1zb2NpYWwtYW5ndWxhcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbEl0ZW0sIEZvcm1JdGVtLCBGb3JtSXRlbUltcGwsIGlzQ29uZGl0aW9uYWxJdGVtLCBpc09wdGlvbkdyb3VwSXRlbUltcGwsIGlzT3B0aW9uSXRlbUltcGwgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2Zvcm0taXRlbS9mb3JtLWl0ZW0uY29tcG9uZW50JztcblxuLyoqIFJlZ2lzdHJ5IG9mIGN1c3RvbSBlcnJvciBtZXNzYWdlcyBmb3IgYSBzcGVjaWZpYyBmb3JtIGl0ZW0uIEEgY3VzdG9tIGVycm9yIGNhbiBhbHNvXG4gKiBiZSBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZy4gVGhlIEZvcm1JdGVtIG9iamVjdCBpcyBwYXNzZWQgdG8gYW55IFZhbGlkYXRpb25FcnJvcnNcbiAqIHRoYXQgYXJlIGZ1bmN0aW9ucywgc28gaXRlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQuXG4gKiBAZXhhbXBsZSB7XG4gKiBtYXg6IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBsZXNzLmAsXG4gKiBtaW46IChpdGVtOiBGb3JtSXRlbUltcGw8YW55PikgPT4gaW5zdGFuY2VvZldob2xlTnVtYmVySXRlbShpdGVtKVxuICogPyBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICR7aXRlbS5taW5WYWx1ZX0uYFxuICogOiBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlci5gXG4gKiB9XG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTppbnRlcmZhY2Utb3Zlci10eXBlLWxpdGVyYWxcbmV4cG9ydCB0eXBlIEN1c3RvbUVycm9ycyA9IHtcbiAgW2lkOiBzdHJpbmddOiBWYWxpZGF0aW9uRXJyb3JzO1xufTtcblxuLyoqIExpc3Qgb2YgZGVmYXVsdCBlcnJvciBtZXNzYWdlcyB0byBkaXNwbGF5ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUzogVmFsaWRhdGlvbkVycm9ycyA9IHtcbiAgZW1haWw6ICdUaGlzIGZpZWxkIG11c3QgaW5jbHVkZSBhIHZhbGlkIGVtYWlsIGZvcm1hdC4nLFxuICBtYXg6IChpdGVtPzogRm9ybUl0ZW1JbXBsPG51bWJlcj4gJiB7IG1heFZhbHVlOiBudW1iZXI7IG1pblZhbHVlOiBudW1iZXIgfSkgPT5cbiAgICAhaXNQcmVzZW50KGl0ZW0pIHx8ICFpc1ByZXNlbnQoaXRlbT8ubWF4VmFsdWUpXG4gICAgICA/IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBsZXNzLmBcbiAgICAgIDogYCR7aXNQcmVzZW50KGl0ZW0/Lm1pblZhbHVlKSA/IGBNaW4gdmFsdWU6ICR7aXRlbT8ubWluVmFsdWV9IC0gYCA6ICcnfU1heCB2YWx1ZTogJHtpdGVtPy5taW5WYWx1ZX1gLFxuICBtYXhsZW5ndGg6ICdUaGlzIGZpZWxkIGhhcyBleGNlZWRlZCB0aGUgYWxsb3dlZCBtYXhpbXVtLicsXG4gIG1heFNlbGVjdGVkOiBudWxsLFxuICBtaW46IChpdGVtPzogRm9ybUl0ZW1JbXBsPG51bWJlcj4gJiB7IG1heFZhbHVlOiBudW1iZXI7IG1pblZhbHVlOiBudW1iZXIgfSkgPT5cbiAgICAhaXNQcmVzZW50KGl0ZW0pIHx8ICFpc1ByZXNlbnQoaXRlbT8ubWluVmFsdWUpXG4gICAgICA/IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBncmVhdGVyLmBcbiAgICAgIDogYE1pbiB2YWx1ZTogJHtpdGVtPy5taW5WYWx1ZX0keyFpc1ByZXNlbnQoaXRlbT8ubWF4VmFsdWUpID8gJycgOiBgIC0gTWF4IHZhbHVlOiAke2l0ZW0/Lm1heFZhbHVlfWB9YCxcbiAgbWlubGVuZ3RoOiAnVGhpcyBmaWVsZCBoYXMgbm90IG1ldCB0aGUgcmVxdWlyZWQgbWluaW11bS4nLFxuICBtaW5TZWxlY3RlZDogbnVsbCxcbiAgbm9uRGlnaXQ6IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBudW1lcmljLmAsXG4gIHBhdHRlcm46IGBUaGlzIGZpZWxkJ3MgaW5wdXQgZG9lcyBub3QgbWVldCB0aGUgYWNjZXB0ZWQgcGF0dGVybi5gLFxuICBwb3NpdGl2ZTogYFRoaXMgZmllbGQncyB2YWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuYCxcbiAgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicsXG4gIHJlcXVpcmVkVHJ1ZTogYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlICd0cnVlJy5gLFxuICB3aG9sZU51bWJlcjogYFRoaXMgZmllbGQgY2Fubm90IGNvbnRhaW4gYSBkZWNpbWFsLmAsXG4gIG1hdERhdGVwaWNrZXJQYXJzZTogYFRoaXMgZmllbGQncyB2YWx1ZSBpcyBub3QgYW4gYWNjZXB0ZWQgZm9ybWF0LmAsXG59O1xuXG5leHBvcnQgY29uc3QgV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDdXN0b21FcnJvcnM+KCdtdG5hV2ViRm9ybUN1c3RvbUZvcm1FcnJvcnMnKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZVSVNlcnZpY2Uge1xuICAvKiogTWFwIG9mIGFubm90YXRpb24gY291bnRzIGZvciBlYWNoIGFubm90YXRhYmxlIGl0ZW0gKi9cbiAgcHJpdmF0ZSBhbm5vdGF0aW9uczogeyBbaWQ6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPiB9ID0ge307XG4gIC8qKiBNYXAgb2YgY29tcG9uZW50cyBpbiB0aGUgTXRuYUZvcm0gKi9cbiAgcHJpdmF0ZSBjb21wb25lbnRzOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCB9ID0ge307XG4gIC8qKiBNYXAgb2YgaXRlbS5kaXNhYmxlZCB2YWx1ZXMgdGhhdCBoYXZlIGNoYW5nZWQgKi9cbiAgcHJpdmF0ZSBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgLyoqIE1hcCBvZiB0b2dnbGVyIElEJ3MgZm9yIGNvbXBvbmVudHMgdGhhdCBoYXZlIG11bHRpcGxlIHRvZ2dsZXJzICovXG4gIHByaXZhdGUgbXVsdGlwbGVFbmFibGVyczogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogeyBbdG9nZ2xlcklkOiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgfSA9IHt9O1xuICBwcml2YXRlIGVycm9yczogQ3VzdG9tRXJyb3JzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIEBPcHRpb25hbCgpIEBJbmplY3QoV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUykgZXJyb3JzPzogYW55KSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3I6IE1ldGFkYXRhIGNvbGxlY3RlZCBjb250YWlucyBhbiBlcnJvciB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgYXQgcnVudGltZTogQ291bGQgbm90IHJlc29sdmUgdHlwZSBDdXN0b21FcnJvcnMuXG4gICAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5NTEzMzU5L2NvdWxkLW5vdC1yZXNvbHZlLXR5cGUtZG9jdW1lbnQtaW4tYW5ndWxhcjUvNTM3MTU2NDIjNTM3MTU2NDJcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycyBhcyBDdXN0b21FcnJvcnM7XG4gIH1cblxuICBnZXREaXNhYmxlZFN0YXRlcygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc2FibGVkU3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGVycm9yIGlkXG4gICAqIEBwYXJhbSBlcnJvcklkIElkIG9mIHRoZSBlcnJvciwgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRvIHBhc3MgdG8gVmFsaWRhdGlvbkVycm9ycyB0aGF0IGFyZSBmdW5jdGlvbnMuIEZvciBpbnN0YW5jZSxcbiAgICogdGhpcyBpcyB1c2VmdWwgZm9yICdtaW4nICYgJ21heCcgdmFsdWUgbGltaXRzIHRvIGRpc3BsYXkgbW9yZSBoZWxwZnVsIG1lc3NhZ2VzXG4gICAqL1xuICBnZXRFcnJvcihlcnJvcklkOiBzdHJpbmcsIGl0ZW0/OiBGb3JtSXRlbUltcGw8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGRlZmF1bHQgd2hlbiBubyBjdXN0b20gbWVzc2FnZSBleGlzdHNcbiAgICBsZXQgZXJyb3IgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTW2Vycm9ySWRdO1xuICAgIGlmICghIXRoaXMuZXJyb3JzICYmICEhaXRlbSkge1xuICAgICAgLy8gY2hlY2sgZm9yIGluc3RhbmNlIHNwZWNpZmljLCB2aWEgaW5zdGFuY2VJZFxuICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pbnN0YW5jZUlkXVtlcnJvcklkXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdW2Vycm9ySWRdO1xuICAgICAgICAvLyBjaGVjayBmb3IgaXRlbSBzcGVjaWZpYywgdmlhIGl0ZW1JZFxuICAgICAgfSBlbHNlIGlmIChpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdW2Vycm9ySWRdKSkge1xuICAgICAgICBlcnJvciA9IHRoaXMuZXJyb3JzW2l0ZW0uaXRlbUlkXVtlcnJvcklkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGVycm9yKGl0ZW0pIDogZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVnaXN0ZXJlZCBjb21wb25lbnQgYnkgaW50YW5jZSBpZC5cbiAgICogQHBhcmFtIGlkIHRoZSBpbnN0YW5jZUlkXG4gICAqIEByZXR1cm5zIHRoZSB7QGxpbmsgRm9ybUl0ZW1Db21wb25lbnR9IHRoYXQgcmVwcmVzZW50cyB0aGF0IElEIG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZC5cbiAgICovXG4gIGdldEl0ZW0oaWQ6IHN0cmluZyk6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIG1hcCBvZiBhbm5vdGF0aW9uIGNvdW50cywgYW5kL29yIHB1c2hlcyB0aGUgbmV3IGNvdW50IG9udG8gdGhlIGNvbXBvbmVudCBvYnNlcnZhYmxlIHN0cmVhbVxuICAgKiBAcGFyYW0gbWFwIEFubm90YXRhYmxlTnVtYmVyTWFwIG9mIGNvdW50cyBtYXBwZWQgdG8gdGhlaXIgYW5ub3RhdGFibGVJZHNcbiAgICovXG4gIHJlZ2lzdGVyQW5ub3RhdGlvbnMobWFwOiBBbm5vdGF0YWJsZU51bWJlck1hcCkge1xuICAgIGZvciAoY29uc3QgaWQgaW4gbWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1tpZF0pIHtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2lkXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obWFwW2lkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1tpZF0ubmV4dChtYXBbaWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGEgY29tcG9uZW50IHRvIGl0cyBpdGVtcyBpbnN0YW5jZUlkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IGNvbXBvbmVudCBjYWxsaW5nIHRoaXMgbWV0aG9kLCBpLmUuICd0aGlzJ1xuICAgKi9cbiAgcmVnaXN0ZXJTZWxmKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSBjb21wb25lbnQ7XG4gICAgaWYgKCEhY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZCAmJiBjb21wb25lbnQuaXRlbS5hbm5vdGF0aW9uRW5hYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmFubm90YXRpb25zW2NvbXBvbmVudC5pdGVtLmFubm90YXRhYmxlSWRdKSB7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50LmFubm90YXRpb25zJCA9IHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSBGb3JtSXRlbSdzIHZpc2libGl0eSBhbmQgZW5hYmxlL2Rpc2FibGUgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIGVuYWJsZWRJdGVtSWRzIGFycmF5IG9mIGNvbXBvbmVudCBJRHMgZm9yIGVuYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBkaXNhYmxlZEl0ZW1JZHMgYXJyYXkgb2YgY29tcG9uZW50IElEcyBmb3IgZGlzYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGVuYWJsZWRJdGVtSWRzIGFyZSBlbmFibGVkLlxuICAgKiBAcGFyYW0gY2FsbGVySWQgaW5zdGFuY2VJZCBvZiB0aGUgaXRlbSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZXNldCBXaGV0aGVyIHRvIHJlc2V0IHRoZSBtdWx0aXBsZSBlbmFibGVyIG1hcCBvZiB0aGUgdG9nZ2xlZCBpdGVtXG4gICAqL1xuICB0b2dnbGVGb3JtSXRlbXMoZW5hYmxlZEl0ZW1JZHM6IEFycmF5PHN0cmluZz4sIGRpc2FibGVkSXRlbUlkczogQXJyYXk8c3RyaW5nPiwgZW5hYmxlZDogYm9vbGVhbiwgY2FsbGVySWQ6IHN0cmluZywgcmVzZXQgPSBmYWxzZSkge1xuICAgIGlmICgoIWVuYWJsZWRJdGVtSWRzIHx8ICFlbmFibGVkSXRlbUlkcy5sZW5ndGgpICYmICghZGlzYWJsZWRJdGVtSWRzIHx8ICFkaXNhYmxlZEl0ZW1JZHMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGxJZHMgPSBbZW5hYmxlZEl0ZW1JZHMsIGRpc2FibGVkSXRlbUlkc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW1JZHMgPSBhbGxJZHNbaV07XG4gICAgICBjb25zdCBpc0VuYWJsZWQgPSBpID09PSAwID8gZW5hYmxlZCA6ICFlbmFibGVkO1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBpdGVtSWRzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkLCB0b2dnbGUgaXRcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnQuaXRlbTtcbiAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUVuYWJsZXJzID0gaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24gPyBpdGVtLmNvbmRpdGlvbi5pdGVtSWRzLmxlbmd0aCA+IDEgOiBmYWxzZTtcbiAgICAgICAgICAvLyBJZiBpdGVtIGhhcyBtb3JlIHRoYW4gMSBlbmFibGVyLCBoYW5kbGUgbXVsdGlwbGUgZW5hYmxlcnNcbiAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVFbmFibGVycykge1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGEgbWFwIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCB0aGVuIGJ1aWxkIHVwIGEgbWFwIHRvIHJlZ2lzdGVyXG4gICAgICAgICAgICAvLyBTaG91bGQgb25seSBoYXBwZW4gdGhlIGZpcnN0IHRpbWUgYW4gaXRlbSBpcyB0b2dnbGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSAmJiBpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSkge1xuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IHRoaXMuX3JlZ2lzdGVyQ3VycmVudEVuYWJsZXJzKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIE11bHRpcGxlIEVuYWJsZXJzXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aXBsZUVuYWJsZXJzKGNvbXBvbmVudCwgaXNFbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBtdWx0aXBsZSBlbmFibGVyc1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRGlzYWJsZWRTdGF0ZUFuZENvbnRyb2woY29tcG9uZW50LCBpc0VuYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9nZ2xlRm9ybUl0ZW1zXSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZCcsIGlkLCBlbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIG1hcCBvZiBhbGwgSURzIGN1cnJlbnRseSBpbmZsdWVuY2luZyBhbiBpdGVtLlxuICAgKiBAcGFyYW0gdG9nZ2xlZEl0ZW0gaXRlbSBiZWluZyB0b2dnbGVkXG4gICAqL1xuICBwcml2YXRlIF9yZWdpc3RlckN1cnJlbnRFbmFibGVycyh0b2dnbGVkSXRlbTogQ29uZGl0aW9uYWxJdGVtKTogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBlbmFibGVyczogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgY29uc3QgYWxsSWRzID0gdG9nZ2xlZEl0ZW0uY29uZGl0aW9uPy5pdGVtSWRzIHx8IFtdO1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBhbGxJZHMpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0N1cnJlbnRseVRvZ2dsaW5nKGNvbXBvbmVudCwgdG9nZ2xlZEl0ZW0uaW5zdGFuY2VJZCkpIHtcbiAgICAgICAgICBlbmFibGVyc1tjb21wb25lbnQuaXRlbS5pbnN0YW5jZUlkXSA9IGNvbXBvbmVudC5pdGVtLmluc3RhbmNlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWdpc3RlckN1cnJlbnRFbmFibGVyc10gY29tcG9uZW50IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLicsIGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5hYmxlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBtYXAgb2YgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBmb3JtIHdoZW5cbiAgICogaXQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgcmVzZXRDb21wb25lbnRNYXAoKSB7XG4gICAgdGhpcy5hbm5vdGF0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMuZGlzYWJsZWRTdGF0ZSA9IHt9O1xuICAgIHRoaXMubXVsdGlwbGVFbmFibGVycyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHNwZWNpZmllZCB0b2dnbGVkSXRlbUlkLlxuICAgKiBAcGFyYW0gaW5mbHVlbmNlciBJdGVtIHRvIGNoZWNrIHdoZXRoZXIgaXQncyBjdXJyZW50bHkgaW5mbHVlbmNpbmcgdGhlIHRvZ2dsZWRJdGVtSWRcbiAgICogQHBhcmFtIHRvZ2dsZWRJZCBJbnN0YW5jZUlkIG9mIHRoZSBpdGVtIGJlaW5nIHRvZ2dsZWRcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHRvZ2dsZWQgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfaXNDdXJyZW50bHlUb2dnbGluZyhpbmZsdWVuY2VyOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgdG9nZ2xlZElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtID0gaW5mbHVlbmNlci5pdGVtO1xuICAgIC8vIEl0ZW0gaGFzIHNpbmdsZSBvcHRpb24gcHJvcGVydHksIHNvIGNoZWNrIGlmIHNlbGVjdGVkLCBvciBpdGVtLnZhbHVlIGlzICd0cnVlJ1xuICAgIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gaXRlbS5vcHRpb24uc2VsZWN0ZWQgfHwgISFpdGVtLnZhbHVlIHx8ICEhaW5mbHVlbmNlci5jb250cm9sPy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmZsdWVuY2VyLmNvbnRyb2w/LnZhbHVlID8/IGl0ZW0udmFsdWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZmluZCB0aGUgaW5kZXggb2Ygb3B0aW9ucyB0aGF0IGNvbnRhaW4gdGhlICd0b2dnbGVkSWQnIGluIHRoZWlyIGVuYWJsZWRJdGVtc1xuICAgICAgICAvLyAmIGNoZWNrIGlmIGF0IGxlYXN0IDEgaXMgc2VsZWN0ZWQsIG9yIGl0cyAndHJ1ZScgaW4gdGhlIHZhbHVlXG4gICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ZXMgPSBpdGVtLm9wdGlvbnMubWFwKChvLCBpKSA9PiAoby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpID8gaSA6IG51bGwpKS5maWx0ZXIoaXNQcmVzZW50KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4ZXMuc29tZSgoaSkgPT4gISF2YWx1ZVtpXSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHNpbmdsZSB2YWx1ZSwgZ2V0IHRoZSBlbmFibGluZyBvcHRpb24gaWRzIGFuZCBjaGVjayBmb3IgdGhlIHZhbHVlIGluIHRoZW1cbiAgICAgICAgcmV0dXJuIGl0ZW0ub3B0aW9ucy5zb21lKChvKSA9PiBvLm9wdGlvbi5pZCA9PT0gdmFsdWUgJiYgby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY29tcG9uZW50IHZpc2liaWxpdHkgZm9yIGEgRm9ybUl0ZW0gd2l0aCBtdWx0aXBsZSBlbmFibGVycyBpbiBpdHMgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBjb21wb25lbnQgRm9ybUl0ZW1Db21wb25lbnQgYmVpbmcgdG9nZ2xlZFxuICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZW5hYmxlZFxuICAgKiBAcGFyYW0gY2FsbGVySWQgSUQgb2YgdGhlIGNhbGxlciB0b2dnbGluZyB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlwbGVFbmFibGVycyhjb21wb25lbnQ6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50LCBlbmFibGVkOiBib29sZWFuLCBjYWxsZXJJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudC5pdGVtO1xuICAgIGNvbnN0IGVuYWJsZXJzID0geyAuLi50aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSB9O1xuICAgIGxldCBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGVuYWJsZXJzW2NhbGxlcklkXSA9IGNhbGxlcklkO1xuICAgICAgaXNFbmFibGVkID1cbiAgICAgICAgaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiZcbiAgICAgICAgISFpdGVtLmNvbmRpdGlvbiAmJlxuICAgICAgICAoIWl0ZW0uY29uZGl0aW9uLmFsbFJlcXVpcmVkIHx8IGl0ZW0uY29uZGl0aW9uLml0ZW1JZHMuZXZlcnkoKGlkKSA9PiAhIWVuYWJsZXJzW2lkXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgZW5hYmxlcnNbY2FsbGVySWRdO1xuICAgICAgaXNFbmFibGVkID0gISgoaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24/LmFsbFJlcXVpcmVkKSB8fCAhT2JqZWN0LmtleXMoZW5hYmxlcnMpLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIElmIGVuYWJsZWQgPT09IGRpc2FibGVkLCB0aGVuIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZFxuICAgIGlmICh0aGlzLl9pc0Rpc2FibGVkKGl0ZW0pID09PSBpc0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudCwgaXNFbmFibGVkKTtcbiAgICB9XG4gICAgLy8gc2V0IHRoZSBuZXcgZW5hYmxlciBtYXBcbiAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IGVuYWJsZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGNvbnRyb2wgb24gYSBGb3JtSXRlbUNvbXBvbmVudFxuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0cyBjb250cm9sXG4gICAqIEBwYXJhbSBlbmFibGVkIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIF90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50OiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGVkICYmICFjb21wb25lbnQuY29udHJvbD8uZW5hYmxlZCkge1xuICAgICAgLy8gRW5hYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGlmIChjb21wb25lbnQuY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLl9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcG9uZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFlbmFibGVkICYmIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGVkKSB7XG4gICAgICAvLyBEaXNhYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGNvbXBvbmVudC5jb250cm9sLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBib3RoIHRoZSBjb21wb25lbnQgdmlzaWJsaXR5IGFuZCB0aGUgY29udHJvbCdzIGVuYWJsZS9kaXNhYmxlIHN0YXR1c1xuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIHNob3cgb3IgaGlkZSBhbmQgZW5hYmxlIG9yIGRpc2FibGVcbiAgICogQHBhcmFtIGVuYWJsZWQgd2hldGhlciB0byBzaG93IHRoZSBjb21wb25lbnQgYW5kIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkU3RhdGVbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSAhZW5hYmxlZDtcbiAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50LCBlbmFibGVkKTtcbiAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oY29tcG9uZW50Lml0ZW0pICYmIGNvbXBvbmVudC5pdGVtLmhpZGVPbkRpc2FibGUpIHtcbiAgICAgIGNvbXBvbmVudC52aXNpYmxlID0gZW5hYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBjb250cm9scyBpbmRpdmlkdWFsbHkgdXNpbmcgcmVjdXJzaW9uLlxuICAgKiBGb3JtR3JvdXBzIHNob3VsZCBvbmx5IGV4aXN0IGZvciBpdGVtcyB3aXRoICdpdGVtcycgYXJyYXlzLCBvclxuICAgKiBpZiB0aGUgY29tcG9uZW50IGlzIGEgQmFzZVBhcmVudEl0ZW1Db250cm9sXG4gICAqIEBwYXJhbSBjb21wIEZvcm1JdGVtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICBjb25zdCBncm91cCA9IGNvbXAuY29udHJvbCBhcyBGb3JtR3JvdXA7XG5cbiAgICBpZiAoaXNPcHRpb25JdGVtSW1wbChjb21wLml0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChjb21wLml0ZW0pKSB7XG4gICAgICBjb25zdCBtYXAgPSBjb21wLml0ZW0ub3B0aW9uSXRlbU1hcDtcbiAgICAgIGNvbnN0IHNlbGYgPSBncm91cC5nZXQoY29tcC5pdGVtLmluc3RhbmNlSWQpO1xuICAgICAgc2VsZj8uZW5hYmxlKCk7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbklkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgb3B0aW9uSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRDb21wID0gdGhpcy5jb21wb25lbnRzW21hcFtvcHRpb25JZF0uaW5zdGFuY2VJZF07XG4gICAgICAgICAgaWYgKCF0aGlzLl9pc0Rpc2FibGVkKGNoaWxkQ29tcC5pdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ29udHJvbFN0YXRlKGNoaWxkQ29tcCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGU8eyBpdGVtczogRm9ybUl0ZW1JbXBsPHVua25vd24+W10gfT4oY29tcC5pdGVtLCAnaXRlbXMnKSAmJiBjb21wLml0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBJdGVtIG11c3QgaGF2ZSAnaXRlbXMnIGFycmF5XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29tcC5pdGVtLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ29tcCA9IHRoaXMuY29tcG9uZW50c1tpdGVtLmluc3RhbmNlSWRdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY2hpbGRDb21wLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gUHJpb3JpdGl6ZXMgdGhlIGRpc2FibGVkU3RhdGUgdmFsdWUsXG4gICAqIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGl0ZW0ncyBwcmV2aW91cyBkaXNhYmxlZCB2YWx1ZVxuICAgKiBAcGFyYW0gaXRlbSBpdGVtIHRvIGNoZWNrIGZvciBpdHMgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgX2lzRGlzYWJsZWQoaXRlbTogQ29uZGl0aW9uYWxJdGVtIHwgRm9ybUl0ZW0pOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdHNJbkRpc2FibGVkU3RhdE1hcCA9IGlzUHJlc2VudCh0aGlzLmRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXSk7XG4gICAgaWYgKCFleGlzdHNJbkRpc2FibGVkU3RhdE1hcCkge1xuICAgICAgcmV0dXJuIGlzQ29uZGl0aW9uYWxJdGVtKGl0ZW0pID8gaXRlbS5kaXNhYmxlZCA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFN0YXRlW2l0ZW0uaW5zdGFuY2VJZF07XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
+
export const COMPLEX_STANDARD = '300ms cubic-bezier(0.4, 0.0, 0.2, 1)';
|
|
3
|
+
export const MTNA_WF_EXPAND_COLLAPSE = trigger('mtnaWfExpandCollapse', [
|
|
4
|
+
state('1', style({ height: '*', marginTop: '*', marginBottom: '*', opacity: 1 })),
|
|
5
|
+
state('0', style({ height: 0, marginTop: 0, marginBottom: 0, opacity: 0, overflow: 'hidden', visibility: 'hidden' })),
|
|
6
|
+
transition('1 <=> 0', [animate(COMPLEX_STANDARD)]),
|
|
7
|
+
]);
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvYW5pbWF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLHNDQUFzQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtJQUNyRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JILFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0NBQ25ELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgQ09NUExFWF9TVEFOREFSRCA9ICczMDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknO1xuXG5leHBvcnQgY29uc3QgTVROQV9XRl9FWFBBTkRfQ09MTEFQU0UgPSB0cmlnZ2VyKCdtdG5hV2ZFeHBhbmRDb2xsYXBzZScsIFtcbiAgc3RhdGUoJzEnLCBzdHlsZSh7IGhlaWdodDogJyonLCBtYXJnaW5Ub3A6ICcqJywgbWFyZ2luQm90dG9tOiAnKicsIG9wYWNpdHk6IDEgfSkpLFxuICBzdGF0ZSgnMCcsIHN0eWxlKHsgaGVpZ2h0OiAwLCBtYXJnaW5Ub3A6IDAsIG1hcmdpbkJvdHRvbTogMCwgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXG4gIHRyYW5zaXRpb24oJzEgPD0+IDAnLCBbYW5pbWF0ZShDT01QTEVYX1NUQU5EQVJEKV0pLFxuXSk7XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isFormGroup } from './is-form-group';
|
|
2
|
+
/**
|
|
3
|
+
* Recursively find a form control by name in a form group.
|
|
4
|
+
* Depth first search down the tree of form groups to find a control.
|
|
5
|
+
*
|
|
6
|
+
* @note This will only work if the entire form has unique form control names.
|
|
7
|
+
* @param name The unique name of the form cotrol to find.
|
|
8
|
+
* @param group The {@link FormGroup} to search through.
|
|
9
|
+
* @returns the found control or null
|
|
10
|
+
*/
|
|
11
|
+
export function findFormControl(name, group) {
|
|
12
|
+
for (const key in group.controls) {
|
|
13
|
+
if (Object.prototype.hasOwnProperty.call(group.controls, key)) {
|
|
14
|
+
const control = group.controls[key];
|
|
15
|
+
if (key === name) {
|
|
16
|
+
return control;
|
|
17
|
+
}
|
|
18
|
+
// Recurse down if it's a FormGroup
|
|
19
|
+
if (isFormGroup(control)) {
|
|
20
|
+
const found = findFormControl(name, control);
|
|
21
|
+
if (found) {
|
|
22
|
+
return found;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL2ZpbmQtZm9ybS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5Qzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWdCO0lBQzVELEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtRQUNoQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzdELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUNoQixPQUFPLE9BQU8sQ0FBQzthQUNoQjtZQUVELG1DQUFtQztZQUNuQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgaXNGb3JtR3JvdXAgfSBmcm9tICcuL2lzLWZvcm0tZ3JvdXAnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZpbmQgYSBmb3JtIGNvbnRyb2wgYnkgbmFtZSBpbiBhIGZvcm0gZ3JvdXAuXG4gKiBEZXB0aCBmaXJzdCBzZWFyY2ggZG93biB0aGUgdHJlZSBvZiBmb3JtIGdyb3VwcyB0byBmaW5kIGEgY29udHJvbC5cbiAqXG4gKiBAbm90ZSBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBlbnRpcmUgZm9ybSBoYXMgdW5pcXVlIGZvcm0gY29udHJvbCBuYW1lcy5cbiAqIEBwYXJhbSBuYW1lIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgZm9ybSBjb3Ryb2wgdG8gZmluZC5cbiAqIEBwYXJhbSBncm91cCBUaGUge0BsaW5rIEZvcm1Hcm91cH0gdG8gc2VhcmNoIHRocm91Z2guXG4gKiBAcmV0dXJucyB0aGUgZm91bmQgY29udHJvbCBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRm9ybUNvbnRyb2wobmFtZTogc3RyaW5nLCBncm91cDogRm9ybUdyb3VwKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gIGZvciAoY29uc3Qga2V5IGluIGdyb3VwLmNvbnRyb2xzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChncm91cC5jb250cm9scywga2V5KSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmNvbnRyb2xzW2tleV07XG4gICAgICBpZiAoa2V5ID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWN1cnNlIGRvd24gaWYgaXQncyBhIEZvcm1Hcm91cFxuICAgICAgaWYgKGlzRm9ybUdyb3VwKGNvbnRyb2wpKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZvcm1Db250cm9sKG5hbWUsIGNvbnRyb2wpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|