@mediusinc/mng-commons 0.12.2 → 0.12.3-rc.1
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/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
- package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
- package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
- package/esm2020/lib/api/models/index.mjs +8 -8
- package/esm2020/lib/api/models/mappers.mjs +12 -12
- package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
- package/esm2020/lib/api/models/query-param.model.mjs +67 -67
- package/esm2020/lib/api/models/query-result.model.mjs +17 -17
- package/esm2020/lib/api/models/serialization.model.mjs +1 -1
- package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
- package/esm2020/lib/api/services/crud-api.abstract.service.mjs +67 -67
- package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
- package/esm2020/lib/api/services/index.mjs +3 -3
- package/esm2020/lib/api/utils/index.mjs +2 -2
- package/esm2020/lib/api/utils/medius-rest.util.mjs +151 -151
- package/esm2020/lib/api/utils/object-serializer.util.mjs +243 -243
- package/esm2020/lib/components/action/action.component.mjs +201 -201
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +247 -247
- package/esm2020/lib/components/action/index.mjs +3 -3
- package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
- package/esm2020/lib/components/action/models/action-execution.model.mjs +235 -235
- package/esm2020/lib/components/action/models/index.mjs +4 -3
- package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +11 -0
- package/esm2020/lib/components/action/route/action-route.component.mjs +124 -124
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +281 -281
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +194 -189
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +211 -211
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +48 -48
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +43 -43
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +24 -24
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +101 -101
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +22 -22
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +179 -179
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +173 -173
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +149 -149
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
- package/esm2020/lib/components/form/formly/fields/index.mjs +9 -9
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +14 -14
- package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +14 -14
- package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
- package/esm2020/lib/components/form/index.mjs +3 -3
- package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
- package/esm2020/lib/components/form/models/index.mjs +1 -1
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
- package/esm2020/lib/components/layout/footer.component.mjs +16 -16
- package/esm2020/lib/components/layout/index.mjs +7 -7
- package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
- package/esm2020/lib/components/layout/menu-item.component.mjs +238 -238
- package/esm2020/lib/components/layout/menu.component.mjs +20 -20
- package/esm2020/lib/components/layout/services/index.mjs +1 -1
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
- package/esm2020/lib/components/layout/topbar.component.mjs +57 -57
- package/esm2020/lib/components/layout/version.component.mjs +57 -57
- package/esm2020/lib/components/tableview/index.mjs +6 -6
- package/esm2020/lib/components/tableview/models/index.mjs +1 -1
- package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +80 -58
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +53 -61
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +104 -104
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +70 -70
- package/esm2020/lib/components/tableview/table/table.component.mjs +531 -509
- package/esm2020/lib/components/tableview/tableview.component.mjs +92 -92
- package/esm2020/lib/config/formly.config.mjs +180 -180
- package/esm2020/lib/config/index.mjs +1 -1
- package/esm2020/lib/config/models/index.mjs +2 -2
- package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
- package/esm2020/lib/config/models/mng-formly-config-model.mjs +1 -1
- package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
- package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
- package/esm2020/lib/data-providers/index.mjs +5 -5
- package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
- package/esm2020/lib/data-providers/table.data-provider.mjs +24 -17
- package/esm2020/lib/data-providers/tableview.data-provider.mjs +46 -17
- package/esm2020/lib/descriptors/action.descriptor.mjs +620 -616
- package/esm2020/lib/descriptors/column.descriptor.mjs +342 -265
- package/esm2020/lib/descriptors/editor.descriptor.mjs +285 -147
- package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
- package/esm2020/lib/descriptors/field.descriptor.mjs +854 -820
- package/esm2020/lib/descriptors/filter.descriptor.mjs +290 -290
- package/esm2020/lib/descriptors/index.mjs +9 -9
- package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
- package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
- package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
- package/esm2020/lib/descriptors/model.descriptor.mjs +33 -33
- package/esm2020/lib/descriptors/table.descriptor.mjs +522 -198
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +355 -135
- package/esm2020/lib/descriptors/types/action.type.mjs +52 -52
- package/esm2020/lib/descriptors/types/column.type.mjs +10 -10
- package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
- package/esm2020/lib/descriptors/types/field.type.mjs +52 -52
- package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
- package/esm2020/lib/descriptors/types/index.mjs +6 -6
- package/esm2020/lib/descriptors/types/table.type.mjs +16 -16
- package/esm2020/lib/descriptors/types/tableview-attr.model.mjs +2 -0
- package/esm2020/lib/directives/component.directive.mjs +43 -43
- package/esm2020/lib/directives/index.mjs +2 -2
- package/esm2020/lib/directives/template.directive.mjs +27 -27
- package/esm2020/lib/mng-commons.module.mjs +439 -439
- package/esm2020/lib/models/column-value.model.mjs +1 -1
- package/esm2020/lib/models/enum.model.mjs +1 -1
- package/esm2020/lib/models/error.model.mjs +1 -1
- package/esm2020/lib/models/formly-field.model.mjs +1 -1
- package/esm2020/lib/models/index.mjs +8 -8
- package/esm2020/lib/models/menu.model.mjs +1 -1
- package/esm2020/lib/models/user.model.mjs +1 -1
- package/esm2020/lib/models/version.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +1 -1
- package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
- package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
- package/esm2020/lib/pipes/index.mjs +5 -5
- package/esm2020/lib/pipes/json-path.pipe.mjs +79 -79
- package/esm2020/lib/pipes/link-formatter.pipe.mjs +38 -38
- package/esm2020/lib/router/index.mjs +2 -2
- package/esm2020/lib/router/models/index.mjs +1 -1
- package/esm2020/lib/router/models/router.model.mjs +2 -2
- package/esm2020/lib/router/route-builder.mjs +425 -425
- package/esm2020/lib/router/tableview-route-builder.mjs +184 -160
- package/esm2020/lib/security/authorization.guard.mjs +25 -25
- package/esm2020/lib/security/authorization.service.mjs +46 -46
- package/esm2020/lib/security/authorization.util.mjs +15 -15
- package/esm2020/lib/security/index.mjs +3 -3
- package/esm2020/lib/security/model/authorization.type.mjs +7 -7
- package/esm2020/lib/security/model/index.mjs +3 -3
- package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
- package/esm2020/lib/security/model/permissions.model.mjs +87 -95
- package/esm2020/lib/services/action-executor.service.mjs +537 -537
- package/esm2020/lib/services/commons.service.mjs +342 -342
- package/esm2020/lib/services/configuration.service.mjs +119 -119
- package/esm2020/lib/services/error-mapper.service.mjs +13 -13
- package/esm2020/lib/services/index.mjs +6 -6
- package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
- package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
- package/esm2020/lib/services/internal/index.mjs +2 -2
- package/esm2020/lib/services/navigation.service.mjs +47 -47
- package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
- package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
- package/esm2020/lib/services/providers/index.mjs +2 -2
- package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
- package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
- package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
- package/esm2020/lib/services/tokens/index.mjs +4 -4
- package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
- package/esm2020/lib/services/version.service.mjs +38 -38
- package/esm2020/lib/services/view-container.component.service.mjs +34 -34
- package/esm2020/lib/styles/button-style.builder.mjs +111 -111
- package/esm2020/lib/styles/index.mjs +2 -2
- package/esm2020/lib/styles/styles.util.mjs +40 -40
- package/esm2020/lib/types/index.mjs +2 -2
- package/esm2020/lib/types/type.decorator.mjs +12 -12
- package/esm2020/lib/types/type.model.mjs +1 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
- package/esm2020/lib/utils/column.util.mjs +37 -0
- package/esm2020/lib/utils/editor-formly.util.mjs +250 -250
- package/esm2020/lib/utils/enum.util.mjs +81 -81
- package/esm2020/lib/utils/field.util.mjs +60 -0
- package/esm2020/lib/utils/i18n.util.mjs +232 -232
- package/esm2020/lib/utils/index.mjs +11 -9
- package/esm2020/lib/utils/model.util.mjs +61 -60
- package/esm2020/lib/utils/notification.util.mjs +45 -45
- package/esm2020/lib/utils/route.util.mjs +23 -23
- package/esm2020/lib/utils/string.util.mjs +23 -23
- package/esm2020/lib/utils/tableview.util.mjs +58 -0
- package/esm2020/lib/utils/type.util.mjs +76 -76
- package/esm2020/mediusinc-mng-commons.mjs +4 -4
- package/esm2020/public-api.mjs +53 -53
- package/fesm2015/mediusinc-mng-commons.mjs +11898 -10853
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +11746 -10706
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/api/models/builders/query-param.builder.d.ts +13 -13
- package/lib/api/models/filter-match-type.model.d.ts +23 -23
- package/lib/api/models/filter-param.model.d.ts +23 -23
- package/lib/api/models/index.d.ts +8 -8
- package/lib/api/models/mappers.d.ts +6 -6
- package/lib/api/models/query-mode.model.d.ts +16 -16
- package/lib/api/models/query-param.model.d.ts +31 -31
- package/lib/api/models/query-result.model.d.ts +23 -23
- package/lib/api/models/serialization.model.d.ts +8 -8
- package/lib/api/services/api.abstract.service.d.ts +24 -24
- package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
- package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
- package/lib/api/services/index.d.ts +3 -3
- package/lib/api/utils/index.d.ts +2 -2
- package/lib/api/utils/medius-rest.util.d.ts +15 -15
- package/lib/api/utils/object-serializer.util.d.ts +33 -33
- package/lib/components/action/action.component.d.ts +68 -68
- package/lib/components/action/editor/action-editor.component.d.ts +64 -64
- package/lib/components/action/index.d.ts +3 -3
- package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
- package/lib/components/action/models/action-execution.model.d.ts +129 -129
- package/lib/components/action/models/index.d.ts +3 -2
- package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -0
- package/lib/components/action/route/action-route.component.d.ts +31 -31
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +56 -56
- package/lib/components/form/dropdown/dropdown.component.d.ts +52 -50
- package/lib/components/form/editor/form-editor.component.d.ts +45 -45
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +15 -15
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -14
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +13 -13
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +23 -23
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +10 -10
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +45 -45
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +23 -23
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +38 -38
- package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
- package/lib/components/form/formly/fields/index.d.ts +9 -9
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
- package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +6 -6
- package/lib/components/form/formly/wrappers/index.d.ts +2 -2
- package/lib/components/form/index.d.ts +3 -3
- package/lib/components/form/models/form-editor.event.d.ts +37 -37
- package/lib/components/form/models/index.d.ts +1 -1
- package/lib/components/layout/breadcrumb.component.d.ts +8 -8
- package/lib/components/layout/footer.component.d.ts +9 -9
- package/lib/components/layout/index.d.ts +7 -7
- package/lib/components/layout/main-layout.component.d.ts +20 -20
- package/lib/components/layout/menu-item.component.d.ts +44 -44
- package/lib/components/layout/menu.component.d.ts +10 -10
- package/lib/components/layout/services/index.d.ts +1 -1
- package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
- package/lib/components/layout/topbar.component.d.ts +24 -24
- package/lib/components/layout/version.component.d.ts +19 -19
- package/lib/components/tableview/index.d.ts +6 -6
- package/lib/components/tableview/models/index.d.ts +1 -1
- package/lib/components/tableview/models/table.event.d.ts +17 -17
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +25 -20
- package/lib/components/tableview/route/tableview-route.component.d.ts +18 -23
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +32 -32
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +29 -29
- package/lib/components/tableview/table/table.component.d.ts +110 -108
- package/lib/components/tableview/tableview.component.d.ts +41 -41
- package/lib/config/formly.config.d.ts +16 -16
- package/lib/config/index.d.ts +1 -1
- package/lib/config/models/index.d.ts +2 -2
- package/lib/config/models/mng-config.model.d.ts +36 -36
- package/lib/config/models/mng-formly-config-model.d.ts +17 -17
- package/lib/data-providers/base.data-provider.d.ts +14 -14
- package/lib/data-providers/editor.data-provider.d.ts +25 -25
- package/lib/data-providers/index.d.ts +5 -5
- package/lib/data-providers/lookup.data-provider.d.ts +14 -14
- package/lib/data-providers/table.data-provider.d.ts +19 -14
- package/lib/data-providers/tableview.data-provider.d.ts +29 -15
- package/lib/descriptors/action.descriptor.d.ts +263 -259
- package/lib/descriptors/column.descriptor.d.ts +116 -82
- package/lib/descriptors/editor.descriptor.d.ts +102 -37
- package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
- package/lib/descriptors/field.descriptor.d.ts +305 -300
- package/lib/descriptors/filter.descriptor.d.ts +106 -106
- package/lib/descriptors/index.d.ts +9 -9
- package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
- package/lib/descriptors/interfaces/index.d.ts +2 -2
- package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
- package/lib/descriptors/model.descriptor.d.ts +15 -15
- package/lib/descriptors/table.descriptor.d.ts +208 -66
- package/lib/descriptors/tableview.descriptor.d.ts +141 -42
- package/lib/descriptors/types/action.type.d.ts +45 -45
- package/lib/descriptors/types/column.type.d.ts +9 -9
- package/lib/descriptors/types/editor.type.d.ts +6 -6
- package/lib/descriptors/types/field.type.d.ts +44 -44
- package/lib/descriptors/types/filter.type.d.ts +27 -27
- package/lib/descriptors/types/index.d.ts +6 -6
- package/lib/descriptors/types/table.type.d.ts +13 -13
- package/lib/descriptors/types/tableview-attr.model.d.ts +9 -0
- package/lib/directives/component.directive.d.ts +16 -16
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/template.directive.d.ts +13 -13
- package/lib/mng-commons.module.d.ts +87 -87
- package/lib/models/column-value.model.d.ts +4 -4
- package/lib/models/enum.model.d.ts +6 -6
- package/lib/models/error.model.d.ts +14 -14
- package/lib/models/formly-field.model.d.ts +16 -16
- package/lib/models/index.d.ts +8 -8
- package/lib/models/menu.model.d.ts +27 -27
- package/lib/models/user.model.d.ts +8 -8
- package/lib/models/version.model.d.ts +18 -18
- package/lib/models/view-container.model.d.ts +6 -6
- package/lib/pipes/boolean.pipe.d.ts +7 -7
- package/lib/pipes/enum.pipe.d.ts +8 -8
- package/lib/pipes/i18n-property.pipe.d.ts +8 -8
- package/lib/pipes/index.d.ts +5 -5
- package/lib/pipes/json-path.pipe.d.ts +13 -13
- package/lib/pipes/link-formatter.pipe.d.ts +11 -11
- package/lib/router/index.d.ts +2 -2
- package/lib/router/models/index.d.ts +1 -1
- package/lib/router/models/router.model.d.ts +33 -27
- package/lib/router/route-builder.d.ts +98 -98
- package/lib/router/tableview-route-builder.d.ts +37 -34
- package/lib/security/authorization.guard.d.ts +11 -11
- package/lib/security/authorization.service.d.ts +19 -19
- package/lib/security/authorization.util.d.ts +5 -5
- package/lib/security/index.d.ts +3 -3
- package/lib/security/model/authorization.type.d.ts +6 -6
- package/lib/security/model/index.d.ts +3 -3
- package/lib/security/model/permission-service.interface.d.ts +6 -6
- package/lib/security/model/permissions.model.d.ts +37 -44
- package/lib/services/action-executor.service.d.ts +149 -149
- package/lib/services/commons.service.d.ts +78 -78
- package/lib/services/configuration.service.d.ts +45 -45
- package/lib/services/error-mapper.service.d.ts +7 -7
- package/lib/services/index.d.ts +6 -6
- package/lib/services/internal/commons-init.provider.d.ts +3 -3
- package/lib/services/internal/commons-init.service.d.ts +16 -16
- package/lib/services/internal/index.d.ts +2 -2
- package/lib/services/navigation.service.d.ts +14 -14
- package/lib/services/providers/config-service.provider.d.ts +6 -6
- package/lib/services/providers/formly-config.provider.d.ts +4 -4
- package/lib/services/providers/index.d.ts +2 -2
- package/lib/services/tokens/browser-storage.token.d.ts +2 -2
- package/lib/services/tokens/commons-init.token.d.ts +3 -3
- package/lib/services/tokens/default-setting.token.d.ts +2 -2
- package/lib/services/tokens/index.d.ts +4 -4
- package/lib/services/tokens/module-config.token.d.ts +3 -3
- package/lib/services/version.service.d.ts +13 -13
- package/lib/services/view-container.component.service.d.ts +22 -22
- package/lib/styles/button-style.builder.d.ts +26 -26
- package/lib/styles/index.d.ts +2 -2
- package/lib/styles/styles.util.d.ts +14 -14
- package/lib/types/index.d.ts +2 -2
- package/lib/types/type.decorator.d.ts +4 -4
- package/lib/types/type.model.d.ts +23 -23
- package/lib/utils/action-data-provider.util.d.ts +20 -20
- package/lib/utils/column.util.d.ts +8 -0
- package/lib/utils/editor-formly.util.d.ts +11 -11
- package/lib/utils/enum.util.d.ts +50 -50
- package/lib/utils/field.util.d.ts +13 -0
- package/lib/utils/i18n.util.d.ts +56 -56
- package/lib/utils/index.d.ts +10 -8
- package/lib/utils/model.util.d.ts +8 -8
- package/lib/utils/notification.util.d.ts +11 -11
- package/lib/utils/route.util.d.ts +4 -4
- package/lib/utils/string.util.d.ts +4 -4
- package/lib/utils/tableview.util.d.ts +23 -0
- package/lib/utils/type.util.d.ts +36 -36
- package/mediusinc-mng-commons-0.12.3-rc.1.tgz +0 -0
- package/package.json +1 -1
- package/public-api.d.ts +33 -33
- package/version-info.json +6 -6
|
@@ -1,251 +1,251 @@
|
|
|
1
|
-
import { map } from 'rxjs/operators';
|
|
2
|
-
import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
|
|
3
|
-
import { FieldInputTypeEnum, FieldLookupTypeEnum } from '../descriptors/types';
|
|
4
|
-
export class EditorFormlyUtil {
|
|
5
|
-
static createFormlyConfigFromDescriptor(descriptor) {
|
|
6
|
-
const fields = [];
|
|
7
|
-
if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
|
|
8
|
-
// dont use tabs
|
|
9
|
-
fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
|
|
13
|
-
}
|
|
14
|
-
return fields;
|
|
15
|
-
}
|
|
16
|
-
static createFormlyTabType(tabGroups) {
|
|
17
|
-
const tabsField = {
|
|
18
|
-
type: 'tabs',
|
|
19
|
-
fieldGroup: []
|
|
20
|
-
};
|
|
21
|
-
for (const tab of tabGroups) {
|
|
22
|
-
const tabField = {
|
|
23
|
-
id: tab.name,
|
|
24
|
-
props: {},
|
|
25
|
-
expressions: {},
|
|
26
|
-
fieldGroup: []
|
|
27
|
-
};
|
|
28
|
-
if (tab.title) {
|
|
29
|
-
tabField.props.label = tab.title;
|
|
30
|
-
}
|
|
31
|
-
tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
|
|
32
|
-
tabsField.fieldGroup.push(tabField);
|
|
33
|
-
}
|
|
34
|
-
return [tabsField];
|
|
35
|
-
}
|
|
36
|
-
static createFormlyGroupType(groups) {
|
|
37
|
-
if (groups.length === 1 && groups[0].default) {
|
|
38
|
-
// dont use fieldset, just create fields
|
|
39
|
-
return EditorFormlyUtil.createFormlyFields(groups[0]);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
const groupsField = {
|
|
43
|
-
type: 'fieldset',
|
|
44
|
-
fieldGroup: [],
|
|
45
|
-
props: {},
|
|
46
|
-
expressions: {}
|
|
47
|
-
};
|
|
48
|
-
for (const group of groups) {
|
|
49
|
-
const groupField = {
|
|
50
|
-
id: group.name,
|
|
51
|
-
props: {
|
|
52
|
-
descriptor: group
|
|
53
|
-
},
|
|
54
|
-
expressions: {},
|
|
55
|
-
fieldGroup: []
|
|
56
|
-
};
|
|
57
|
-
if (group.title) {
|
|
58
|
-
groupField.props.label = group.title;
|
|
59
|
-
}
|
|
60
|
-
groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
|
|
61
|
-
groupsField.fieldGroup.push(groupField);
|
|
62
|
-
}
|
|
63
|
-
return [groupsField];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
static createFormlyFields(descriptor) {
|
|
67
|
-
const fields = [];
|
|
68
|
-
for (const descriptorField of descriptor.fields) {
|
|
69
|
-
fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
|
|
70
|
-
}
|
|
71
|
-
// wrap in group to be able to use flex grid
|
|
72
|
-
const wrapperGroup = {
|
|
73
|
-
fieldGroupClassName: 'p-fluid formgrid grid',
|
|
74
|
-
fieldGroup: fields
|
|
75
|
-
};
|
|
76
|
-
EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
|
|
77
|
-
return [wrapperGroup];
|
|
78
|
-
}
|
|
79
|
-
static createFormlyField(descriptor) {
|
|
80
|
-
const field = {
|
|
81
|
-
key: descriptor.property,
|
|
82
|
-
props: {
|
|
83
|
-
descriptor
|
|
84
|
-
},
|
|
85
|
-
expressions: {}
|
|
86
|
-
};
|
|
87
|
-
let className = descriptor.className;
|
|
88
|
-
if (!className) {
|
|
89
|
-
// assign default field width through entire row
|
|
90
|
-
className = 'col-12';
|
|
91
|
-
}
|
|
92
|
-
field.className = className;
|
|
93
|
-
if (descriptor instanceof FieldInputDescriptor) {
|
|
94
|
-
switch (descriptor.fieldType) {
|
|
95
|
-
case FieldInputTypeEnum.Hidden:
|
|
96
|
-
break;
|
|
97
|
-
case FieldInputTypeEnum.Label:
|
|
98
|
-
field.type = 'label';
|
|
99
|
-
delete field.key;
|
|
100
|
-
break;
|
|
101
|
-
case FieldInputTypeEnum.Textarea:
|
|
102
|
-
field.type = 'textarea';
|
|
103
|
-
field.props.maxLength = descriptor.maxLength;
|
|
104
|
-
field.props.minLength = descriptor.minLength;
|
|
105
|
-
field.props.pattern = descriptor.pattern;
|
|
106
|
-
break;
|
|
107
|
-
case FieldInputTypeEnum.Number:
|
|
108
|
-
field.type = 'number';
|
|
109
|
-
field.props.min = descriptor.numberMin;
|
|
110
|
-
field.props.max = descriptor.numberMax;
|
|
111
|
-
break;
|
|
112
|
-
case FieldInputTypeEnum.Currency:
|
|
113
|
-
field.type = 'currency';
|
|
114
|
-
field.props.min = descriptor.numberMin;
|
|
115
|
-
field.props.max = descriptor.numberMax;
|
|
116
|
-
break;
|
|
117
|
-
case FieldInputTypeEnum.Switch:
|
|
118
|
-
field.type = 'switch';
|
|
119
|
-
break;
|
|
120
|
-
case FieldInputTypeEnum.Radio:
|
|
121
|
-
field.type = 'radio';
|
|
122
|
-
break;
|
|
123
|
-
case FieldInputTypeEnum.Datepicker:
|
|
124
|
-
field.type = 'datepicker';
|
|
125
|
-
break;
|
|
126
|
-
case FieldInputTypeEnum.Mask:
|
|
127
|
-
field.type = 'mask';
|
|
128
|
-
break;
|
|
129
|
-
case FieldInputTypeEnum.File:
|
|
130
|
-
field.type = 'file';
|
|
131
|
-
break;
|
|
132
|
-
case FieldInputTypeEnum.Custom:
|
|
133
|
-
field.type = descriptor.customComponentName;
|
|
134
|
-
break;
|
|
135
|
-
default:
|
|
136
|
-
field.type = 'input';
|
|
137
|
-
field.props.minLength = descriptor.minLength;
|
|
138
|
-
field.props.maxLength = descriptor.maxLength;
|
|
139
|
-
field.props.pattern = descriptor.pattern;
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else if (descriptor instanceof FieldLookupEnumDescriptor) {
|
|
144
|
-
field.type = 'enum';
|
|
145
|
-
}
|
|
146
|
-
else if (descriptor instanceof FieldLookupDescriptor) {
|
|
147
|
-
switch (descriptor.lookupType) {
|
|
148
|
-
case FieldLookupTypeEnum.Autocomplete:
|
|
149
|
-
field.type = 'autocomplete';
|
|
150
|
-
break;
|
|
151
|
-
case FieldLookupTypeEnum.Dialog:
|
|
152
|
-
field.type = 'dialog';
|
|
153
|
-
break;
|
|
154
|
-
case FieldLookupTypeEnum.Dropdown:
|
|
155
|
-
default:
|
|
156
|
-
field.type = 'dropdown';
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
|
|
161
|
-
field.type = 'table-dialog-multiselect';
|
|
162
|
-
}
|
|
163
|
-
else if (descriptor instanceof FieldManyEditorDescriptor) {
|
|
164
|
-
field.type = 'table-dialog-form';
|
|
165
|
-
}
|
|
166
|
-
if (descriptor.label) {
|
|
167
|
-
field.props.label = descriptor.label;
|
|
168
|
-
}
|
|
169
|
-
if (descriptor.requiredExpression) {
|
|
170
|
-
field.expressions['props.required'] = descriptor.requiredExpression;
|
|
171
|
-
}
|
|
172
|
-
if (descriptor.required) {
|
|
173
|
-
field.props.required = true;
|
|
174
|
-
if (descriptor.requiredHideLabelMarker) {
|
|
175
|
-
field.props['hideRequiredMarker'] = true;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (descriptor.hiddenExpression) {
|
|
179
|
-
field.expressions['hide'] = descriptor.hiddenExpression;
|
|
180
|
-
}
|
|
181
|
-
if (descriptor.disabledExpression) {
|
|
182
|
-
field.expressions['props.disabled'] = descriptor.disabledExpression;
|
|
183
|
-
}
|
|
184
|
-
else if (descriptor.disabled) {
|
|
185
|
-
field.props.disabled = true;
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
field.expressions['props.disabled'] = 'formState.disabled';
|
|
189
|
-
}
|
|
190
|
-
if (typeof descriptor.defaultValue !== 'undefined') {
|
|
191
|
-
field.defaultValue = descriptor.defaultValue;
|
|
192
|
-
}
|
|
193
|
-
EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
|
|
194
|
-
EditorFormlyUtil.addAsyncValidationsToFormlyField(field, descriptor.asyncValidations);
|
|
195
|
-
return field;
|
|
196
|
-
}
|
|
197
|
-
static addValidationsToFormlyField(config, validations) {
|
|
198
|
-
if (!config.validators) {
|
|
199
|
-
config.validators = {};
|
|
200
|
-
}
|
|
201
|
-
for (const validation of validations) {
|
|
202
|
-
if (typeof validation.validator === 'function') {
|
|
203
|
-
config.validators[validation.name] = {
|
|
204
|
-
expression: (control, field, options) => {
|
|
205
|
-
const validatorRes = validation.validator(control, field, options);
|
|
206
|
-
// formly validator only excepts true/false for validation
|
|
207
|
-
// map possible angular validator result to true/false
|
|
208
|
-
return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
if (typeof validation.message === 'function') {
|
|
212
|
-
config.validators[validation.name].message = validation.message;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
if (!Array.isArray(config.validators.validation)) {
|
|
217
|
-
config.validators.validation = [];
|
|
218
|
-
}
|
|
219
|
-
config.validators.validation.push(validation.name);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
static addAsyncValidationsToFormlyField(config, asyncValidations) {
|
|
224
|
-
if (!config.asyncValidators) {
|
|
225
|
-
config.asyncValidators = {};
|
|
226
|
-
}
|
|
227
|
-
for (const validation of asyncValidations) {
|
|
228
|
-
if (typeof validation.validator === 'function') {
|
|
229
|
-
config.asyncValidators[validation.name] = {
|
|
230
|
-
expression: (control, field, options) => {
|
|
231
|
-
const validator = validation.validator;
|
|
232
|
-
const validatorObs = validator(control, field, options);
|
|
233
|
-
// formly validator only excepts true/false for validation
|
|
234
|
-
// map possible angular validator result to true/false
|
|
235
|
-
return validatorObs.pipe(map(value => (typeof value === 'boolean' ? value : value === null)));
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
if (typeof validation.message === 'function') {
|
|
239
|
-
config.asyncValidators[validation.name].message = validation.message;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
if (!Array.isArray(config.asyncValidators.validation)) {
|
|
244
|
-
config.asyncValidators.validation = [];
|
|
245
|
-
}
|
|
246
|
-
config.asyncValidators.validation.push(validation.name);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
1
|
+
import { map } from 'rxjs/operators';
|
|
2
|
+
import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
|
|
3
|
+
import { FieldInputTypeEnum, FieldLookupTypeEnum } from '../descriptors/types';
|
|
4
|
+
export class EditorFormlyUtil {
|
|
5
|
+
static createFormlyConfigFromDescriptor(descriptor) {
|
|
6
|
+
const fields = [];
|
|
7
|
+
if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
|
|
8
|
+
// dont use tabs
|
|
9
|
+
fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
|
|
13
|
+
}
|
|
14
|
+
return fields;
|
|
15
|
+
}
|
|
16
|
+
static createFormlyTabType(tabGroups) {
|
|
17
|
+
const tabsField = {
|
|
18
|
+
type: 'tabs',
|
|
19
|
+
fieldGroup: []
|
|
20
|
+
};
|
|
21
|
+
for (const tab of tabGroups) {
|
|
22
|
+
const tabField = {
|
|
23
|
+
id: tab.name,
|
|
24
|
+
props: {},
|
|
25
|
+
expressions: {},
|
|
26
|
+
fieldGroup: []
|
|
27
|
+
};
|
|
28
|
+
if (tab.title) {
|
|
29
|
+
tabField.props.label = tab.title;
|
|
30
|
+
}
|
|
31
|
+
tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
|
|
32
|
+
tabsField.fieldGroup.push(tabField);
|
|
33
|
+
}
|
|
34
|
+
return [tabsField];
|
|
35
|
+
}
|
|
36
|
+
static createFormlyGroupType(groups) {
|
|
37
|
+
if (groups.length === 1 && groups[0].default) {
|
|
38
|
+
// dont use fieldset, just create fields
|
|
39
|
+
return EditorFormlyUtil.createFormlyFields(groups[0]);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const groupsField = {
|
|
43
|
+
type: 'fieldset',
|
|
44
|
+
fieldGroup: [],
|
|
45
|
+
props: {},
|
|
46
|
+
expressions: {}
|
|
47
|
+
};
|
|
48
|
+
for (const group of groups) {
|
|
49
|
+
const groupField = {
|
|
50
|
+
id: group.name,
|
|
51
|
+
props: {
|
|
52
|
+
descriptor: group
|
|
53
|
+
},
|
|
54
|
+
expressions: {},
|
|
55
|
+
fieldGroup: []
|
|
56
|
+
};
|
|
57
|
+
if (group.title) {
|
|
58
|
+
groupField.props.label = group.title;
|
|
59
|
+
}
|
|
60
|
+
groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
|
|
61
|
+
groupsField.fieldGroup.push(groupField);
|
|
62
|
+
}
|
|
63
|
+
return [groupsField];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
static createFormlyFields(descriptor) {
|
|
67
|
+
const fields = [];
|
|
68
|
+
for (const descriptorField of descriptor.fields) {
|
|
69
|
+
fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
|
|
70
|
+
}
|
|
71
|
+
// wrap in group to be able to use flex grid
|
|
72
|
+
const wrapperGroup = {
|
|
73
|
+
fieldGroupClassName: 'p-fluid formgrid grid',
|
|
74
|
+
fieldGroup: fields
|
|
75
|
+
};
|
|
76
|
+
EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
|
|
77
|
+
return [wrapperGroup];
|
|
78
|
+
}
|
|
79
|
+
static createFormlyField(descriptor) {
|
|
80
|
+
const field = {
|
|
81
|
+
key: descriptor.property,
|
|
82
|
+
props: {
|
|
83
|
+
descriptor
|
|
84
|
+
},
|
|
85
|
+
expressions: {}
|
|
86
|
+
};
|
|
87
|
+
let className = descriptor.className;
|
|
88
|
+
if (!className) {
|
|
89
|
+
// assign default field width through entire row
|
|
90
|
+
className = 'col-12';
|
|
91
|
+
}
|
|
92
|
+
field.className = className;
|
|
93
|
+
if (descriptor instanceof FieldInputDescriptor) {
|
|
94
|
+
switch (descriptor.fieldType) {
|
|
95
|
+
case FieldInputTypeEnum.Hidden:
|
|
96
|
+
break;
|
|
97
|
+
case FieldInputTypeEnum.Label:
|
|
98
|
+
field.type = 'label';
|
|
99
|
+
delete field.key;
|
|
100
|
+
break;
|
|
101
|
+
case FieldInputTypeEnum.Textarea:
|
|
102
|
+
field.type = 'textarea';
|
|
103
|
+
field.props.maxLength = descriptor.maxLength;
|
|
104
|
+
field.props.minLength = descriptor.minLength;
|
|
105
|
+
field.props.pattern = descriptor.pattern;
|
|
106
|
+
break;
|
|
107
|
+
case FieldInputTypeEnum.Number:
|
|
108
|
+
field.type = 'number';
|
|
109
|
+
field.props.min = descriptor.numberMin;
|
|
110
|
+
field.props.max = descriptor.numberMax;
|
|
111
|
+
break;
|
|
112
|
+
case FieldInputTypeEnum.Currency:
|
|
113
|
+
field.type = 'currency';
|
|
114
|
+
field.props.min = descriptor.numberMin;
|
|
115
|
+
field.props.max = descriptor.numberMax;
|
|
116
|
+
break;
|
|
117
|
+
case FieldInputTypeEnum.Switch:
|
|
118
|
+
field.type = 'switch';
|
|
119
|
+
break;
|
|
120
|
+
case FieldInputTypeEnum.Radio:
|
|
121
|
+
field.type = 'radio';
|
|
122
|
+
break;
|
|
123
|
+
case FieldInputTypeEnum.Datepicker:
|
|
124
|
+
field.type = 'datepicker';
|
|
125
|
+
break;
|
|
126
|
+
case FieldInputTypeEnum.Mask:
|
|
127
|
+
field.type = 'mask';
|
|
128
|
+
break;
|
|
129
|
+
case FieldInputTypeEnum.File:
|
|
130
|
+
field.type = 'file';
|
|
131
|
+
break;
|
|
132
|
+
case FieldInputTypeEnum.Custom:
|
|
133
|
+
field.type = descriptor.customComponentName;
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
field.type = 'input';
|
|
137
|
+
field.props.minLength = descriptor.minLength;
|
|
138
|
+
field.props.maxLength = descriptor.maxLength;
|
|
139
|
+
field.props.pattern = descriptor.pattern;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (descriptor instanceof FieldLookupEnumDescriptor) {
|
|
144
|
+
field.type = 'enum';
|
|
145
|
+
}
|
|
146
|
+
else if (descriptor instanceof FieldLookupDescriptor) {
|
|
147
|
+
switch (descriptor.lookupType) {
|
|
148
|
+
case FieldLookupTypeEnum.Autocomplete:
|
|
149
|
+
field.type = 'autocomplete';
|
|
150
|
+
break;
|
|
151
|
+
case FieldLookupTypeEnum.Dialog:
|
|
152
|
+
field.type = 'dialog';
|
|
153
|
+
break;
|
|
154
|
+
case FieldLookupTypeEnum.Dropdown:
|
|
155
|
+
default:
|
|
156
|
+
field.type = 'dropdown';
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
|
|
161
|
+
field.type = 'table-dialog-multiselect';
|
|
162
|
+
}
|
|
163
|
+
else if (descriptor instanceof FieldManyEditorDescriptor) {
|
|
164
|
+
field.type = 'table-dialog-form';
|
|
165
|
+
}
|
|
166
|
+
if (descriptor.label) {
|
|
167
|
+
field.props.label = descriptor.label;
|
|
168
|
+
}
|
|
169
|
+
if (descriptor.requiredExpression) {
|
|
170
|
+
field.expressions['props.required'] = descriptor.requiredExpression;
|
|
171
|
+
}
|
|
172
|
+
if (descriptor.required) {
|
|
173
|
+
field.props.required = true;
|
|
174
|
+
if (descriptor.requiredHideLabelMarker) {
|
|
175
|
+
field.props['hideRequiredMarker'] = true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (descriptor.hiddenExpression) {
|
|
179
|
+
field.expressions['hide'] = descriptor.hiddenExpression;
|
|
180
|
+
}
|
|
181
|
+
if (descriptor.disabledExpression) {
|
|
182
|
+
field.expressions['props.disabled'] = descriptor.disabledExpression;
|
|
183
|
+
}
|
|
184
|
+
else if (descriptor.disabled) {
|
|
185
|
+
field.props.disabled = true;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
field.expressions['props.disabled'] = 'formState.disabled';
|
|
189
|
+
}
|
|
190
|
+
if (typeof descriptor.defaultValue !== 'undefined') {
|
|
191
|
+
field.defaultValue = descriptor.defaultValue;
|
|
192
|
+
}
|
|
193
|
+
EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
|
|
194
|
+
EditorFormlyUtil.addAsyncValidationsToFormlyField(field, descriptor.asyncValidations);
|
|
195
|
+
return field;
|
|
196
|
+
}
|
|
197
|
+
static addValidationsToFormlyField(config, validations) {
|
|
198
|
+
if (!config.validators) {
|
|
199
|
+
config.validators = {};
|
|
200
|
+
}
|
|
201
|
+
for (const validation of validations) {
|
|
202
|
+
if (typeof validation.validator === 'function') {
|
|
203
|
+
config.validators[validation.name] = {
|
|
204
|
+
expression: (control, field, options) => {
|
|
205
|
+
const validatorRes = validation.validator(control, field, options);
|
|
206
|
+
// formly validator only excepts true/false for validation
|
|
207
|
+
// map possible angular validator result to true/false
|
|
208
|
+
return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
if (typeof validation.message === 'function') {
|
|
212
|
+
config.validators[validation.name].message = validation.message;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
if (!Array.isArray(config.validators.validation)) {
|
|
217
|
+
config.validators.validation = [];
|
|
218
|
+
}
|
|
219
|
+
config.validators.validation.push(validation.name);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
static addAsyncValidationsToFormlyField(config, asyncValidations) {
|
|
224
|
+
if (!config.asyncValidators) {
|
|
225
|
+
config.asyncValidators = {};
|
|
226
|
+
}
|
|
227
|
+
for (const validation of asyncValidations) {
|
|
228
|
+
if (typeof validation.validator === 'function') {
|
|
229
|
+
config.asyncValidators[validation.name] = {
|
|
230
|
+
expression: (control, field, options) => {
|
|
231
|
+
const validator = validation.validator;
|
|
232
|
+
const validatorObs = validator(control, field, options);
|
|
233
|
+
// formly validator only excepts true/false for validation
|
|
234
|
+
// map possible angular validator result to true/false
|
|
235
|
+
return validatorObs.pipe(map(value => (typeof value === 'boolean' ? value : value === null)));
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
if (typeof validation.message === 'function') {
|
|
239
|
+
config.asyncValidators[validation.name].message = validation.message;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
if (!Array.isArray(config.asyncValidators.validation)) {
|
|
244
|
+
config.asyncValidators.validation = [];
|
|
245
|
+
}
|
|
246
|
+
config.asyncValidators.validation.push(validation.name);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
251
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFJSCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBR2xDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFJN0UsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixNQUFNLENBQUMsZ0NBQWdDLENBQUMsVUFBaUM7UUFDNUUsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUV2QyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM1RCxnQkFBZ0I7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNyRjthQUFNO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUF5QztRQUN2RSxNQUFNLFNBQVMsR0FBc0I7WUFDakMsSUFBSSxFQUFFLE1BQU07WUFDWixVQUFVLEVBQUUsRUFBRTtTQUNqQixDQUFDO1FBQ0YsS0FBSyxN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QUN2RywwREFBMEQ7d0JBQzFELHNEQUFzRDt3QkFDdEQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xHLENBQUM7aUJBQ0osQ0FBQztnQkFDRixJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQzFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2lCQUN4RTthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ25ELE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztpQkFDMUM7Z0JBQ0QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzRDtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRJbnB1dERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3Jcbn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtGaWVsZElucHV0VHlwZUVudW0sIEZpZWxkTG9va3VwVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nRm9ybWx5RmllbGRDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0ZpZWxkQXN5bmNWYWxpZGF0b3J9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckZvcm1seVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxhbnk+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnRhYnMubGVuZ3RoID09PSAxICYmIGRlc2NyaXB0b3IudGFic1swXS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBkb250IHVzZSB0YWJzXG4gICAgICAgICAgICBmaWVsZHMucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUdyb3VwVHlwZShkZXNjcmlwdG9yLnRhYnNbMF0uZmllbGRzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seVRhYlR5cGUoZGVzY3JpcHRvci50YWJzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5VGFiVHlwZSh0YWJHcm91cHM6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPGFueT5bXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCB0YWJzRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RhYnMnLFxuICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgdGFiR3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRhYi5uYW1lLFxuICAgICAgICAgICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uczoge30sXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGFiLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGFiRmllbGQucHJvcHMubGFiZWwgPSB0YWIudGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5R3JvdXBUeXBlKHRhYi5maWVsZHMpKTtcbiAgICAgICAgICAgIHRhYnNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKHRhYkZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RhYnNGaWVsZF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlHcm91cFR5cGUoZ3JvdXBzOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggPT09IDEgJiYgZ3JvdXBzWzBdLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgdXNlIGZpZWxkc2V0LCBqdXN0IGNyZWF0ZSBmaWVsZHNcbiAgICAgICAgICAgIHJldHVybiBFZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cHNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzRmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmaWVsZHNldCcsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW10sXG4gICAgICAgICAgICAgICAgcHJvcHM6IHt9LFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBncm91cC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQucHJvcHMubGFiZWwgPSBncm91cC50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGRzKGdyb3VwKSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBzRmllbGQuZmllbGRHcm91cCEucHVzaChncm91cEZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbZ3JvdXBzRmllbGRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZHMoZGVzY3JpcHRvcjogRmllbGRHcm91cERlc2NyaXB0b3I8YW55Pik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yRmllbGQgb2YgZGVzY3JpcHRvci5maWVsZHMpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKEVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGQoZGVzY3JpcHRvckZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JhcCBpbiBncm91cCB0byBiZSBhYmxlIHRvIHVzZSBmbGV4IGdyaWRcbiAgICAgICAgY29uc3Qgd3JhcHBlckdyb3VwOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdwLWZsdWlkIGZvcm1ncmlkIGdyaWQnLFxuICAgICAgICAgICAgZmllbGRHcm91cDogZmllbGRzXG4gICAgICAgIH07XG5cbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQod3JhcHBlckdyb3VwLCBkZXNjcmlwdG9yLnZhbGlkYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gW3dyYXBwZXJHcm91cF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yOiBBRmllbGREZXNjcmlwdG9yPGFueSwgYW55Pik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGRlc2NyaXB0b3IuY2xhc3NOYW1lO1xuICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgLy8gYXNzaWduIGRlZmF1bHQgZmllbGQgd2lkdGggdGhyb3VnaCBlbnRpcmUgcm93XG4gICAgICAgICAgICBjbGFzc05hbWUgPSAnY29sLTEyJztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkhpZGRlbjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbGFiZWwnO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmllbGQua2V5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0YXJlYTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0ZXh0YXJlYSc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1heExlbmd0aCA9IGRlc2NyaXB0b3IubWF4TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5taW5MZW5ndGggPSBkZXNjcmlwdG9yLm1pbkxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uQ3VycmVuY3k6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnY3VycmVuY3knO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5taW4gPSBkZXNjcmlwdG9yLm51bWJlck1pbjtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWF4ID0gZGVzY3JpcHRvci5udW1iZXJNYXg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdzd2l0Y2gnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk1hc2s6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbWFzayc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXhMZW5ndGggPSBkZXNjcmlwdG9yLm1heExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZW51bSc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmxvb2t1cFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2F1dG9jb21wbGV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBUeXBlRW51bS5EaWFsb2c6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGlhbG9nJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cFR5cGVFbnVtLkRyb3Bkb3duOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZHJvcGRvd24nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0YWJsZS1kaWFsb2ctbXVsdGlzZWxlY3QnO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1mb3JtJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmxhYmVsKSB7XG4gICAgICAgICAgICBmaWVsZC5wcm9wcy5sYWJlbCA9IGRlc2NyaXB0b3IubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zWydwcm9wcy5yZXF1aXJlZCddID0gZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzIS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcikge1xuICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzIVsnaGlkZVJlcXVpcmVkTWFya2VyJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydoaWRlJ10gPSBkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zWydwcm9wcy5kaXNhYmxlZCddID0gZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZmllbGQucHJvcHMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnNbJ3Byb3BzLmRpc2FibGVkJ10gPSAnZm9ybVN0YXRlLmRpc2FibGVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEVkaXRvckZvcm1seVV0aWwuYWRkVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGZpZWxkLCBkZXNjcmlwdG9yLnZhbGlkYXRpb25zKTtcbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRBc3luY1ZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChmaWVsZCwgZGVzY3JpcHRvci5hc3luY1ZhbGlkYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoY29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgdmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+KSB7XG4gICAgICAgIGlmICghY29uZmlnLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXTogYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvclJlcyA9IHZhbGlkYXRpb24udmFsaWRhdG9yIShjb250cm9sLCBmaWVsZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtbHkgdmFsaWRhdG9yIG9ubHkgZXhjZXB0cyB0cnVlL2ZhbHNlIGZvciB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsaWRhdG9yUmVzID09PSAnYm9vbGVhbicgPyB2YWxpZGF0b3JSZXMgOiB2YWxpZGF0b3JSZXMgPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0ubWVzc2FnZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRBc3luY1ZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChjb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCBhc3luY1ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPikge1xuICAgICAgICBpZiAoIWNvbmZpZy5hc3luY1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBhc3luY1ZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXTogYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IDxNbmdGaWVsZEFzeW5jVmFsaWRhdG9yPnZhbGlkYXRpb24udmFsaWRhdG9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JPYnM6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IGJvb2xlYW4gfCBudWxsPiA9IHZhbGlkYXRvcihjb250cm9sLCBmaWVsZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtbHkgdmFsaWRhdG9yIG9ubHkgZXhjZXB0cyB0cnVlL2ZhbHNlIGZvciB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JPYnMucGlwZShtYXAodmFsdWUgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB2YWx1ZSA9PT0gbnVsbCkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLm1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdLm1lc3NhZ2UgPSB2YWxpZGF0aW9uLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLmFzeW5jVmFsaWRhdG9ycy52YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzLnZhbGlkYXRpb24gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9ycy52YWxpZGF0aW9uLnB1c2godmFsaWRhdGlvbi5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|