@ecodev/natural 41.3.0 → 42.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ecodev-natural.d.ts +1 -9
- package/esm2020/ecodev-natural.mjs +5 -0
- package/esm2020/lib/classes/abstract-controller.mjs +30 -0
- package/esm2020/lib/classes/abstract-detail.mjs +152 -0
- package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
- package/esm2020/lib/classes/abstract-list.mjs +406 -0
- package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
- package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
- package/esm2020/lib/classes/data-source.mjs +76 -0
- package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
- package/esm2020/lib/classes/query-variable-manager.mjs +161 -0
- package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
- package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
- package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
- package/esm2020/lib/classes/validators.mjs +179 -0
- package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
- package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
- package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
- package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
- package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
- package/esm2020/lib/modules/avatar/component/avatar.component.mjs +187 -0
- package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
- package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
- package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
- package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
- package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/common-module.mjs +54 -0
- package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
- package/esm2020/lib/modules/common/directives/reactive-asterisk.directive.mjs +33 -0
- package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
- package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
- package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
- package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
- package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
- package/{esm2015/lib/modules/common/public-api.js → esm2020/lib/modules/common/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
- package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
- package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
- package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
- package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
- package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
- package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
- package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
- package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
- package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
- package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
- package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
- package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
- package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
- package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
- package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
- package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
- package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
- package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
- package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
- package/esm2020/lib/modules/file/file.module.mjs +24 -0
- package/esm2020/lib/modules/file/file.service.mjs +48 -0
- package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
- package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
- package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
- package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
- package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
- package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
- package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
- package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
- package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
- package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
- package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
- package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
- package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
- package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
- package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
- package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
- package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
- package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
- package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
- package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
- package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
- package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
- package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
- package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
- package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
- package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
- package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
- package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
- package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
- package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
- package/esm2020/lib/modules/search/search.module.mjs +84 -0
- package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
- package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
- package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
- package/esm2020/lib/modules/select/select/select.component.mjs +208 -0
- package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +42 -0
- package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +128 -0
- package/esm2020/lib/modules/select/select.module.mjs +68 -0
- package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
- package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
- package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
- package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
- package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
- package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
- package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
- package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
- package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
- package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
- package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
- package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
- package/esm2020/lib/services/abstract-model.service.mjs +509 -0
- package/esm2020/lib/services/enum.service.mjs +67 -0
- package/esm2020/lib/services/link-mutation.service.mjs +153 -0
- package/esm2020/lib/services/persistence.service.mjs +113 -0
- package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
- package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2791 -2361
- package/fesm2015/ecodev-natural.mjs.map +1 -0
- package/fesm2020/ecodev-natural.mjs +10506 -0
- package/fesm2020/ecodev-natural.mjs.map +1 -0
- package/lib/classes/abstract-controller.d.ts +3 -0
- package/lib/classes/abstract-detail.d.ts +3 -0
- package/lib/classes/abstract-editable-list.d.ts +3 -0
- package/lib/classes/abstract-list.d.ts +3 -0
- package/lib/classes/abstract-navigable-list.d.ts +3 -0
- package/lib/directives/http-prefix.directive.d.ts +3 -0
- package/lib/modules/alert/alert.module.d.ts +9 -0
- package/lib/modules/alert/alert.service.d.ts +3 -0
- package/lib/modules/alert/confirm.component.d.ts +3 -0
- package/lib/modules/avatar/avatar.module.d.ts +6 -0
- package/lib/modules/avatar/component/avatar.component.d.ts +3 -0
- package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
- package/lib/modules/common/common-module.d.ts +16 -0
- package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
- package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +3 -0
- package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
- package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
- package/lib/modules/common/services/memory-storage.d.ts +3 -0
- package/lib/modules/common/services/seo.service.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
- package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
- package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
- package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
- package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
- package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
- package/lib/modules/file/abstract-file.d.ts +3 -0
- package/lib/modules/file/component/file.component.d.ts +3 -0
- package/lib/modules/file/file-drop.directive.d.ts +3 -0
- package/lib/modules/file/file-select.directive.d.ts +3 -0
- package/lib/modules/file/file.module.d.ts +11 -0
- package/lib/modules/file/file.service.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
- package/lib/modules/icon/icon.component.d.ts +3 -0
- package/lib/modules/icon/icon.module.d.ts +7 -0
- package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
- package/lib/modules/matomo/matomo.service.d.ts +3 -0
- package/lib/modules/panels/abstract-panel.d.ts +3 -0
- package/lib/modules/panels/panels.component.d.ts +3 -0
- package/lib/modules/panels/panels.module.d.ts +8 -0
- package/lib/modules/panels/panels.service.d.ts +3 -0
- package/lib/modules/relations/relations.component.d.ts +3 -0
- package/lib/modules/relations/relations.module.d.ts +15 -0
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
- package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
- package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
- package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
- package/lib/modules/search/group/group.component.d.ts +3 -0
- package/lib/modules/search/input/input.component.d.ts +3 -0
- package/lib/modules/search/search/search.component.d.ts +3 -0
- package/lib/modules/search/search.module.d.ts +19 -0
- package/lib/modules/select/abstract-select.component.d.ts +4 -1
- package/lib/modules/select/select/select.component.d.ts +3 -0
- package/lib/modules/select/select-enum/select-enum.component.d.ts +3 -0
- package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
- package/lib/modules/select/select.module.d.ts +19 -0
- package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
- package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
- package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
- package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
- package/lib/modules/stamp/stamp.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.module.d.ts +9 -0
- package/lib/services/enum.service.d.ts +3 -0
- package/lib/services/link-mutation.service.d.ts +3 -0
- package/lib/services/persistence.service.d.ts +3 -0
- package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
- package/package.json +25 -12
- package/src/lib/modules/alert/_alert.theme.scss +1 -1
- package/src/lib/modules/file/component/_file.theme.scss +1 -1
- package/src/lib/modules/icon/_icon.theme.scss +1 -1
- package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
- package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
- package/src/lib/styles/_table.scss +1 -1
- package/theming/_natural.theme.scss +1 -1
- package/bundles/ecodev-natural.umd.js +0 -11318
- package/bundles/ecodev-natural.umd.js.map +0 -1
- package/ecodev-natural.metadata.json +0 -1
- package/esm2015/ecodev-natural.js +0 -14
- package/esm2015/lib/classes/abstract-controller.js +0 -29
- package/esm2015/lib/classes/abstract-detail.js +0 -157
- package/esm2015/lib/classes/abstract-editable-list.js +0 -97
- package/esm2015/lib/classes/abstract-list.js +0 -409
- package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
- package/esm2015/lib/classes/data-source.js +0 -76
- package/esm2015/lib/classes/query-variable-manager.js +0 -161
- package/esm2015/lib/classes/validators.js +0 -176
- package/esm2015/lib/directives/http-prefix.directive.js +0 -46
- package/esm2015/lib/modules/alert/alert.module.js +0 -15
- package/esm2015/lib/modules/alert/alert.service.js +0 -59
- package/esm2015/lib/modules/alert/confirm.component.js +0 -17
- package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
- package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
- package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
- package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
- package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
- package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
- package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
- package/esm2015/lib/modules/common/common-module.js +0 -35
- package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
- package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
- package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
- package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
- package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
- package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
- package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
- package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
- package/esm2015/lib/modules/common/services/seo.service.js +0 -120
- package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
- package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
- package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
- package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
- package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
- package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
- package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
- package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
- package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
- package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
- package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
- package/esm2015/lib/modules/file/abstract-file.js +0 -223
- package/esm2015/lib/modules/file/component/file.component.js +0 -133
- package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
- package/esm2015/lib/modules/file/file-select.directive.js +0 -25
- package/esm2015/lib/modules/file/file.module.js +0 -19
- package/esm2015/lib/modules/file/file.service.js +0 -47
- package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
- package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
- package/esm2015/lib/modules/icon/icon.component.js +0 -78
- package/esm2015/lib/modules/icon/icon.module.js +0 -25
- package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
- package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
- package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
- package/esm2015/lib/modules/panels/panels.component.js +0 -26
- package/esm2015/lib/modules/panels/panels.module.js +0 -28
- package/esm2015/lib/modules/panels/panels.service.js +0 -331
- package/esm2015/lib/modules/relations/relations.component.js +0 -181
- package/esm2015/lib/modules/relations/relations.module.js +0 -33
- package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
- package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
- package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
- package/esm2015/lib/modules/search/group/group.component.js +0 -39
- package/esm2015/lib/modules/search/input/input.component.js +0 -316
- package/esm2015/lib/modules/search/search/search.component.js +0 -71
- package/esm2015/lib/modules/search/search.module.js +0 -52
- package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
- package/esm2015/lib/modules/select/select/select.component.js +0 -190
- package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
- package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
- package/esm2015/lib/modules/select/select.module.js +0 -39
- package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
- package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
- package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
- package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
- package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
- package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
- package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
- package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
- package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
- package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
- package/esm2015/lib/services/abstract-model.service.js +0 -509
- package/esm2015/lib/services/enum.service.js +0 -68
- package/esm2015/lib/services/link-mutation.service.js +0 -155
- package/esm2015/lib/services/persistence.service.js +0 -114
- package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
- package/fesm2015/ecodev-natural.js.map +0 -1
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Data source to provide what data should be rendered in the table. The observable provided
|
|
3
|
-
* in connect should emit exactly the data that should be rendered by the table. If the data is
|
|
4
|
-
* altered, the observable should emit that new set of data on the stream. In our case here,
|
|
5
|
-
* we return a stream that contains only one set of data that doesn't change.
|
|
6
|
-
*/
|
|
7
|
-
import { DataSource } from '@angular/cdk/collections';
|
|
8
|
-
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
9
|
-
import { map, takeUntil } from 'rxjs/operators';
|
|
10
|
-
/**
|
|
11
|
-
* A NaturalDataSource will connect immediately, in order to know as soon as possible if
|
|
12
|
-
* we need to show a template at all (as seen in my-ichtus)
|
|
13
|
-
*
|
|
14
|
-
* It also allow some extra data manipulation
|
|
15
|
-
*/
|
|
16
|
-
export class NaturalDataSource extends DataSource {
|
|
17
|
-
constructor(value) {
|
|
18
|
-
super();
|
|
19
|
-
this.ngUnsubscribe = new Subject();
|
|
20
|
-
if (value instanceof Observable) {
|
|
21
|
-
this.internalData = new BehaviorSubject(null);
|
|
22
|
-
value.pipe(takeUntil(this.ngUnsubscribe)).subscribe(res => (this.data = res));
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
this.internalData = new BehaviorSubject(value);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
get internalDataObservable() {
|
|
29
|
-
return this.internalData;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Array of data that should be rendered by the table, where each object represents one row.
|
|
33
|
-
*/
|
|
34
|
-
get data() {
|
|
35
|
-
return this.internalData.value;
|
|
36
|
-
}
|
|
37
|
-
set data(data) {
|
|
38
|
-
this.internalData.next(data);
|
|
39
|
-
}
|
|
40
|
-
connect() {
|
|
41
|
-
return this.internalData.pipe(takeUntil(this.ngUnsubscribe), map(data => (data ? data.items : [])));
|
|
42
|
-
}
|
|
43
|
-
disconnect() {
|
|
44
|
-
this.ngUnsubscribe.next(); // unsubscribe everybody
|
|
45
|
-
this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again
|
|
46
|
-
}
|
|
47
|
-
push(item) {
|
|
48
|
-
if (!this.data) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const fullList = this.data.items;
|
|
52
|
-
fullList.push(item);
|
|
53
|
-
this.data = Object.assign(this.data, { items: fullList, length: fullList.length });
|
|
54
|
-
}
|
|
55
|
-
pop() {
|
|
56
|
-
if (!this.data) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
const fullList = this.data.items;
|
|
60
|
-
const removedElement = fullList.pop();
|
|
61
|
-
this.data = Object.assign(this.data, { items: fullList, length: fullList.length });
|
|
62
|
-
return removedElement;
|
|
63
|
-
}
|
|
64
|
-
remove(item) {
|
|
65
|
-
if (!this.data) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
const index = this.data.items.indexOf(item);
|
|
69
|
-
if (index > -1) {
|
|
70
|
-
this.data.items.splice(index, 1);
|
|
71
|
-
this.data.length--;
|
|
72
|
-
this.data = this.data;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvY2xhc3Nlcy9kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQVc5Qzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBNkUsU0FBUSxVQUVqRztJQUtHLFlBQVksS0FBd0I7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFMSyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFPakQsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVcsSUFBSSxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakY7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVcsS0FBSyxDQUFDLENBQUM7U0FDNUQ7SUFDTCxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNGLENBQUM7SUFFTSxJQUFJLENBQUMsSUFBbUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLEdBQUc7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLE9BQU87U0FDVjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBRWpGLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBbUI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixPQUFPO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhIHNvdXJjZSB0byBwcm92aWRlIHdoYXQgZGF0YSBzaG91bGQgYmUgcmVuZGVyZWQgaW4gdGhlIHRhYmxlLiBUaGUgb2JzZXJ2YWJsZSBwcm92aWRlZFxuICogaW4gY29ubmVjdCBzaG91bGQgZW1pdCBleGFjdGx5IHRoZSBkYXRhIHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIGJ5IHRoZSB0YWJsZS4gSWYgdGhlIGRhdGEgaXNcbiAqIGFsdGVyZWQsIHRoZSBvYnNlcnZhYmxlIHNob3VsZCBlbWl0IHRoYXQgbmV3IHNldCBvZiBkYXRhIG9uIHRoZSBzdHJlYW0uIEluIG91ciBjYXNlIGhlcmUsXG4gKiB3ZSByZXR1cm4gYSBzdHJlYW0gdGhhdCBjb250YWlucyBvbmx5IG9uZSBzZXQgb2YgZGF0YSB0aGF0IGRvZXNuJ3QgY2hhbmdlLlxuICovXG5cbmltcG9ydCB7RGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZERhdGE8VD4ge1xuICAgIGl0ZW1zOiBUW107XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgcGFnZUluZGV4OiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBOYXR1cmFsRGF0YVNvdXJjZSB3aWxsIGNvbm5lY3QgaW1tZWRpYXRlbHksIGluIG9yZGVyIHRvIGtub3cgYXMgc29vbiBhcyBwb3NzaWJsZSBpZlxuICogd2UgbmVlZCB0byBzaG93IGEgdGVtcGxhdGUgYXQgYWxsIChhcyBzZWVuIGluIG15LWljaHR1cylcbiAqXG4gKiBJdCBhbHNvIGFsbG93IHNvbWUgZXh0cmEgZGF0YSBtYW5pcHVsYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdHVyYWxEYXRhU291cmNlPFQgZXh0ZW5kcyBQYWdpbmF0ZWREYXRhPExpdGVyYWw+ID0gUGFnaW5hdGVkRGF0YTxMaXRlcmFsPj4gZXh0ZW5kcyBEYXRhU291cmNlPFxuICAgIFRbJ2l0ZW1zJ11bMF1cbj4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsRGF0YTogQmVoYXZpb3JTdWJqZWN0PFQgfCBudWxsPjtcblxuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBPYnNlcnZhYmxlPFQ+IHwgVCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD4obnVsbCk7XG4gICAgICAgICAgICB2YWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUocmVzID0+ICh0aGlzLmRhdGEgPSByZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGludGVybmFsRGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZGF0YSB0aGF0IHNob3VsZCBiZSByZW5kZXJlZCBieSB0aGUgdGFibGUsIHdoZXJlIGVhY2ggb2JqZWN0IHJlcHJlc2VudHMgb25lIHJvdy5cbiAgICAgKi9cbiAgICBnZXQgZGF0YSgpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YShkYXRhOiBUIHwgbnVsbCkge1xuICAgICAgICB0aGlzLmludGVybmFsRGF0YS5uZXh0KGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25uZWN0KCk6IE9ic2VydmFibGU8VFsnaXRlbXMnXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERhdGEucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gKGRhdGEgPyBkYXRhLml0ZW1zIDogW10pKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTsgLy8gdW5zdWJzY3JpYmUgZXZlcnlib2R5XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpOyAvLyBjb21wbGV0ZSB0aGUgc3RyZWFtLCBiZWNhdXNlIHdlIHdpbGwgbmV2ZXIgZW1pdCBhZ2FpblxuICAgIH1cblxuICAgIHB1YmxpYyBwdXNoKGl0ZW06IFRbJ2l0ZW1zJ11bMF0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZ1bGxMaXN0ID0gdGhpcy5kYXRhLml0ZW1zO1xuICAgICAgICBmdWxsTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLmRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwge2l0ZW1zOiBmdWxsTGlzdCwgbGVuZ3RoOiBmdWxsTGlzdC5sZW5ndGh9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9wKCk6IFRbJ2l0ZW1zJ11bMF0gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnVsbExpc3QgPSB0aGlzLmRhdGEuaXRlbXM7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50ID0gZnVsbExpc3QucG9wKCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCB7aXRlbXM6IGZ1bGxMaXN0LCBsZW5ndGg6IGZ1bGxMaXN0Lmxlbmd0aH0pO1xuXG4gICAgICAgIHJldHVybiByZW1vdmVkRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKGl0ZW06IFRbJ2l0ZW1zJ11bMF0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhLml0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGgtLTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { cloneDeep, defaultsDeep, isArray, mergeWith, omit } from 'lodash-es';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { mergeOverrideArray } from './utility';
|
|
4
|
-
import { hasMixedGroupLogic } from './query-variable-manager-utils';
|
|
5
|
-
export var SortingOrder;
|
|
6
|
-
(function (SortingOrder) {
|
|
7
|
-
SortingOrder["ASC"] = "ASC";
|
|
8
|
-
SortingOrder["DESC"] = "DESC";
|
|
9
|
-
})(SortingOrder || (SortingOrder = {}));
|
|
10
|
-
/**
|
|
11
|
-
* During lodash merge, concat arrays
|
|
12
|
-
*/
|
|
13
|
-
function mergeConcatArray(destValue, source) {
|
|
14
|
-
if (isArray(source)) {
|
|
15
|
-
if (destValue) {
|
|
16
|
-
return destValue.concat(source);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
return source;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Filter manager stores a set of channels that contain a variable object and exposes an observable "variables" that updates with the result
|
|
25
|
-
* of all channels merged together.
|
|
26
|
-
*
|
|
27
|
-
* A channel is supposed to be used by an aspect of the GUI (pagination, sorting, search, others ?).
|
|
28
|
-
* Each
|
|
29
|
-
*
|
|
30
|
-
* const fm = new QueryVariablesManager();
|
|
31
|
-
* fm.merge('componentA-variables', {a : [1, 2, 3]});
|
|
32
|
-
*
|
|
33
|
-
* Variables attributes is a BehaviorSubject. That mean it's not mandatory to subscribe, we can just call getValue or value attributes on
|
|
34
|
-
* it : console.log(fm.variables.value); // {a : [1, 2, 3]}
|
|
35
|
-
*
|
|
36
|
-
* Set new variables for 'componentA-variables'
|
|
37
|
-
* fm.merge('componentA-variables', {a : [1, 2]);
|
|
38
|
-
* console.log(fm.variables.value); // {a : [1, 2, 3]}
|
|
39
|
-
*
|
|
40
|
-
* Set new variables for new channel
|
|
41
|
-
* fm.merge('componentB-variables', {a : [3, 4]);
|
|
42
|
-
* console.log(fm.variables.value); // {a : [1, 2, 3, 4]}
|
|
43
|
-
*/
|
|
44
|
-
export class NaturalQueryVariablesManager {
|
|
45
|
-
constructor(queryVariablesManager) {
|
|
46
|
-
this.variables = new BehaviorSubject(undefined);
|
|
47
|
-
this.channels = new Map();
|
|
48
|
-
if (queryVariablesManager) {
|
|
49
|
-
this.channels = queryVariablesManager.getChannelsCopy();
|
|
50
|
-
this.updateVariables();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Set or override all the variables that may exist in the given channel
|
|
55
|
-
*/
|
|
56
|
-
set(channelName, variables) {
|
|
57
|
-
// cloneDeep to change reference and prevent some interactions when merge
|
|
58
|
-
if (variables) {
|
|
59
|
-
this.channels.set(channelName, cloneDeep(variables));
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
this.channels.delete(channelName);
|
|
63
|
-
}
|
|
64
|
-
this.updateVariables();
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Return a deep clone of the variables for the given channel name.
|
|
68
|
-
*
|
|
69
|
-
* Avoid returning the same reference to prevent an attribute change, then another channel update that would
|
|
70
|
-
* used this changed attribute without having explicitly asked QueryVariablesManager to update it.
|
|
71
|
-
*/
|
|
72
|
-
get(channelName) {
|
|
73
|
-
return cloneDeep(this.channels.get(channelName));
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Merge variable into a channel, overriding arrays in same channel / key
|
|
77
|
-
*/
|
|
78
|
-
merge(channelName, newVariables) {
|
|
79
|
-
const variables = this.channels.get(channelName);
|
|
80
|
-
if (variables) {
|
|
81
|
-
mergeWith(variables, cloneDeep(newVariables), mergeOverrideArray); // merge preserves references, cloneDeep prevent that
|
|
82
|
-
this.updateVariables();
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
this.set(channelName, newVariables);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Apply default values to a channel
|
|
90
|
-
* Note : lodash defaults only defines values on destinations keys that are undefined
|
|
91
|
-
*/
|
|
92
|
-
defaults(channelName, newVariables) {
|
|
93
|
-
const variables = this.channels.get(channelName);
|
|
94
|
-
if (variables) {
|
|
95
|
-
defaultsDeep(variables, newVariables);
|
|
96
|
-
this.updateVariables();
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
this.set(channelName, newVariables);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
getChannelsCopy() {
|
|
103
|
-
return new Map(this.channels);
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Merge channels in a single object
|
|
107
|
-
* Arrays are concatenated
|
|
108
|
-
* Filter groups are combined smartly (see mergeGroupList)
|
|
109
|
-
*/
|
|
110
|
-
updateVariables() {
|
|
111
|
-
const merged = {};
|
|
112
|
-
this.channels.forEach((channelVariables) => {
|
|
113
|
-
if (channelVariables.filter) {
|
|
114
|
-
// Merge filter's groups first
|
|
115
|
-
const groups = this.mergeGroupList(merged.filter && merged.filter.groups ? merged.filter.groups : [], channelVariables.filter.groups || []);
|
|
116
|
-
// Merge filter key (that contain groups)
|
|
117
|
-
if (groups && groups.length) {
|
|
118
|
-
if (merged.filter) {
|
|
119
|
-
merged.filter.groups = groups;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
merged.filter = { groups: groups };
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
mergeWith(merged, { filter: channelVariables.filter }, mergeConcatArray);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// Merge other attributes than filter
|
|
130
|
-
mergeWith(merged, omit(channelVariables, 'filter'), mergeConcatArray);
|
|
131
|
-
});
|
|
132
|
-
this.variables.next(merged);
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Cross merge two filters
|
|
136
|
-
* Only accepts groups with same groupLogic (ignores the first one, because there is no groupLogic in this one)
|
|
137
|
-
* @throws In case two non-empty lists of groups are given and at one of them mix groupLogic value, throws an error
|
|
138
|
-
*/
|
|
139
|
-
mergeGroupList(groupsA, groupsB) {
|
|
140
|
-
if (groupsA.length === 0 && groupsB.length === 0) {
|
|
141
|
-
return []; // empty listings, return empty lists
|
|
142
|
-
}
|
|
143
|
-
if (groupsA.length === 0 && groupsB.length > 0) {
|
|
144
|
-
return groupsB; // One list is empty, return the one that is not
|
|
145
|
-
}
|
|
146
|
-
if (groupsB.length === 0 && groupsA.length > 0) {
|
|
147
|
-
return groupsA; // One list is empty, return the one that is not
|
|
148
|
-
}
|
|
149
|
-
const groups = [];
|
|
150
|
-
if (hasMixedGroupLogic(groupsA) || hasMixedGroupLogic(groupsB)) {
|
|
151
|
-
throw Error('QueryVariables groups contain mixed group logics');
|
|
152
|
-
}
|
|
153
|
-
groupsA.forEach(groupA => {
|
|
154
|
-
groupsB.forEach(groupB => {
|
|
155
|
-
groups.push(mergeWith(cloneDeep(groupA), groupB, mergeConcatArray));
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
return groups;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdmFyaWFibGUtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFvQmxFLE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIsMkJBQVcsQ0FBQTtJQUNYLDZCQUFhLENBQUE7QUFDakIsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQWMsRUFBRSxNQUFXO0lBQ2pELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pCLElBQUksU0FBUyxFQUFFO1lBQ1gsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDSCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtLQUNKO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyw0QkFBNEI7SUFJckMsWUFBWSxxQkFBdUQ7UUFIbkQsY0FBUyxHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsU0FBUyxDQUFDLENBQUM7UUFDekYsYUFBUSxHQUE0QixJQUFJLEdBQUcsRUFBc0IsQ0FBQztRQUcvRSxJQUFJLHFCQUFxQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdB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QUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbG9uZURlZXAsIGRlZmF1bHRzRGVlcCwgaXNBcnJheSwgbWVyZ2VXaXRoLCBvbWl0fSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge21lcmdlT3ZlcnJpZGVBcnJheX0gZnJvbSAnLi91dGlsaXR5JztcbmltcG9ydCB7aGFzTWl4ZWRHcm91cExvZ2ljfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXItdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VmFyaWFibGVzIHtcbiAgICBmaWx0ZXI/OiBhbnkgfCBudWxsO1xuICAgIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsO1xuICAgIHNvcnRpbmc/OiBBcnJheTxTb3J0aW5nPiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbklucHV0IHtcbiAgICBvZmZzZXQ/OiBudW1iZXIgfCBudWxsO1xuICAgIHBhZ2VJbmRleD86IG51bWJlciB8IG51bGw7XG4gICAgcGFnZVNpemU/OiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRpbmcge1xuICAgIGZpZWxkOiBhbnk7XG4gICAgb3JkZXI/OiBTb3J0aW5nT3JkZXIgfCBudWxsO1xuICAgIG51bGxBc0hpZ2hlc3Q/OiBib29sZWFuIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gU29ydGluZ09yZGVyIHtcbiAgICBBU0MgPSAnQVNDJyxcbiAgICBERVNDID0gJ0RFU0MnLFxufVxuXG4vKipcbiAqIER1cmluZyBsb2Rhc2ggbWVyZ2UsIGNvbmNhdCBhcnJheXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25jYXRBcnJheShkZXN0VmFsdWU6IGFueSwgc291cmNlOiBhbnkpOiBhbnkge1xuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgaWYgKGRlc3RWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlc3RWYWx1ZS5jb25jYXQoc291cmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRmlsdGVyIG1hbmFnZXIgc3RvcmVzIGEgc2V0IG9mIGNoYW5uZWxzIHRoYXQgY29udGFpbiBhIHZhcmlhYmxlIG9iamVjdCBhbmQgZXhwb3NlcyBhbiBvYnNlcnZhYmxlIFwidmFyaWFibGVzXCIgdGhhdCB1cGRhdGVzIHdpdGggdGhlIHJlc3VsdFxuICogb2YgYWxsIGNoYW5uZWxzIG1lcmdlZCB0b2dldGhlci5cbiAqXG4gKiBBIGNoYW5uZWwgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBieSBhbiBhc3BlY3Qgb2YgdGhlIEdVSSAocGFnaW5hdGlvbiwgc29ydGluZywgc2VhcmNoLCBvdGhlcnMgPykuXG4gKiBFYWNoXG4gKlxuICogY29uc3QgZm0gPSBuZXcgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG4gKiBmbS5tZXJnZSgnY29tcG9uZW50QS12YXJpYWJsZXMnLCB7YSA6IFsxLCAyLCAzXX0pO1xuICpcbiAqIFZhcmlhYmxlcyBhdHRyaWJ1dGVzIGlzIGEgQmVoYXZpb3JTdWJqZWN0LiBUaGF0IG1lYW4gaXQncyBub3QgbWFuZGF0b3J5IHRvIHN1YnNjcmliZSwgd2UgY2FuIGp1c3QgY2FsbCBnZXRWYWx1ZSBvciB2YWx1ZSBhdHRyaWJ1dGVzIG9uXG4gKiBpdCA6IGNvbnNvbGUubG9nKGZtLnZhcmlhYmxlcy52YWx1ZSk7IC8vICB7YSA6IFsxLCAyLCAzXX1cbiAqXG4gKiBTZXQgbmV3IHZhcmlhYmxlcyBmb3IgJ2NvbXBvbmVudEEtdmFyaWFibGVzJ1xuICogZm0ubWVyZ2UoJ2NvbXBvbmVudEEtdmFyaWFibGVzJywge2EgOiBbMSwgMl0pO1xuICogY29uc29sZS5sb2coZm0udmFyaWFibGVzLnZhbHVlKTsgLy8gIHthIDogWzEsIDIsIDNdfVxuICpcbiAqIFNldCBuZXcgdmFyaWFibGVzIGZvciBuZXcgY2hhbm5lbFxuICogZm0ubWVyZ2UoJ2NvbXBvbmVudEItdmFyaWFibGVzJywge2EgOiBbMywgNF0pO1xuICogY29uc29sZS5sb2coZm0udmFyaWFibGVzLnZhbHVlKTsgLy8ge2EgOiBbMSwgMiwgMywgNF19XG4gKi9cbmV4cG9ydCBjbGFzcyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFQgZXh0ZW5kcyBRdWVyeVZhcmlhYmxlcyA9IFF1ZXJ5VmFyaWFibGVzPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHZhcmlhYmxlczogQmVoYXZpb3JTdWJqZWN0PFQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbm5lbHM6IE1hcDxzdHJpbmcsIFBhcnRpYWw8VD4+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcnRpYWw8VD4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihxdWVyeVZhcmlhYmxlc01hbmFnZXI/OiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFQ+KSB7XG4gICAgICAgIGlmIChxdWVyeVZhcmlhYmxlc01hbmFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMgPSBxdWVyeVZhcmlhYmxlc01hbmFnZXIuZ2V0Q2hhbm5lbHNDb3B5KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IG9yIG92ZXJyaWRlIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgbWF5IGV4aXN0IGluIHRoZSBnaXZlbiBjaGFubmVsXG4gICAgICovXG4gICAgcHVibGljIHNldChjaGFubmVsTmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFBhcnRpYWw8VD4gfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIC8vIGNsb25lRGVlcCB0byBjaGFuZ2UgcmVmZXJlbmNlIGFuZCBwcmV2ZW50IHNvbWUgaW50ZXJhY3Rpb25zIHdoZW4gbWVyZ2VcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIGNsb25lRGVlcCh2YXJpYWJsZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMuZGVsZXRlKGNoYW5uZWxOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGRlZXAgY2xvbmUgb2YgdGhlIHZhcmlhYmxlcyBmb3IgdGhlIGdpdmVuIGNoYW5uZWwgbmFtZS5cbiAgICAgKlxuICAgICAqIEF2b2lkIHJldHVybmluZyB0aGUgc2FtZSByZWZlcmVuY2UgdG8gcHJldmVudCBhbiBhdHRyaWJ1dGUgY2hhbmdlLCB0aGVuIGFub3RoZXIgY2hhbm5lbCB1cGRhdGUgdGhhdCB3b3VsZFxuICAgICAqIHVzZWQgdGhpcyBjaGFuZ2VkIGF0dHJpYnV0ZSB3aXRob3V0IGhhdmluZyBleHBsaWNpdGx5IGFza2VkIFF1ZXJ5VmFyaWFibGVzTWFuYWdlciB0byB1cGRhdGUgaXQuXG4gICAgICovXG4gICAgcHVibGljIGdldChjaGFubmVsTmFtZTogc3RyaW5nKTogUGFydGlhbDxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAodGhpcy5jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZSB2YXJpYWJsZSBpbnRvIGEgY2hhbm5lbCwgb3ZlcnJpZGluZyBhcnJheXMgaW4gc2FtZSBjaGFubmVsIC8ga2V5XG4gICAgICovXG4gICAgcHVibGljIG1lcmdlKGNoYW5uZWxOYW1lOiBzdHJpbmcsIG5ld1ZhcmlhYmxlczogUGFydGlhbDxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIG1lcmdlV2l0aCh2YXJpYWJsZXMsIGNsb25lRGVlcChuZXdWYXJpYWJsZXMpLCBtZXJnZU92ZXJyaWRlQXJyYXkpOyAvLyBtZXJnZSBwcmVzZXJ2ZXMgcmVmZXJlbmNlcywgY2xvbmVEZWVwIHByZXZlbnQgdGhhdFxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYXJpYWJsZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNoYW5uZWxOYW1lLCBuZXdWYXJpYWJsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgZGVmYXVsdCB2YWx1ZXMgdG8gYSBjaGFubmVsXG4gICAgICogTm90ZSA6IGxvZGFzaCBkZWZhdWx0cyBvbmx5IGRlZmluZXMgdmFsdWVzIG9uIGRlc3RpbmF0aW9ucyBrZXlzIHRoYXQgYXJlIHVuZGVmaW5lZFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWZhdWx0cyhjaGFubmVsTmFtZTogc3RyaW5nLCBuZXdWYXJpYWJsZXM6IFBhcnRpYWw8VD4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpO1xuICAgICAgICBpZiAodmFyaWFibGVzKSB7XG4gICAgICAgICAgICBkZWZhdWx0c0RlZXAodmFyaWFibGVzLCBuZXdWYXJpYWJsZXMpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYXJpYWJsZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNoYW5uZWxOYW1lLCBuZXdWYXJpYWJsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGFubmVsc0NvcHkoKTogTWFwPHN0cmluZywgUGFydGlhbDxUPj4ge1xuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIFBhcnRpYWw8VD4+KHRoaXMuY2hhbm5lbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlIGNoYW5uZWxzIGluIGEgc2luZ2xlIG9iamVjdFxuICAgICAqIEFycmF5cyBhcmUgY29uY2F0ZW5hdGVkXG4gICAgICogRmlsdGVyIGdyb3VwcyBhcmUgY29tYmluZWQgc21hcnRseSAoc2VlIG1lcmdlR3JvdXBMaXN0KVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlVmFyaWFibGVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXJnZWQ6IExpdGVyYWwgPSB7fTtcblxuICAgICAgICB0aGlzLmNoYW5uZWxzLmZvckVhY2goKGNoYW5uZWxWYXJpYWJsZXM6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGFubmVsVmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgICAgICAgICAgIC8vIE1lcmdlIGZpbHRlcidzIGdyb3VwcyBmaXJzdFxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMubWVyZ2VHcm91cExpc3QoXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXIgJiYgbWVyZ2VkLmZpbHRlci5ncm91cHMgPyBtZXJnZWQuZmlsdGVyLmdyb3VwcyA6IFtdLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsVmFyaWFibGVzLmZpbHRlci5ncm91cHMgfHwgW10sXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIE1lcmdlIGZpbHRlciBrZXkgKHRoYXQgY29udGFpbiBncm91cHMpXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwcyAmJiBncm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQuZmlsdGVyLmdyb3VwcyA9IGdyb3VwcztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXIgPSB7Z3JvdXBzOiBncm91cHN9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VXaXRoKG1lcmdlZCwge2ZpbHRlcjogY2hhbm5lbFZhcmlhYmxlcy5maWx0ZXJ9LCBtZXJnZUNvbmNhdEFycmF5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1lcmdlIG90aGVyIGF0dHJpYnV0ZXMgdGhhbiBmaWx0ZXJcbiAgICAgICAgICAgIG1lcmdlV2l0aChtZXJnZWQsIG9taXQoY2hhbm5lbFZhcmlhYmxlcywgJ2ZpbHRlcicpLCBtZXJnZUNvbmNhdEFycmF5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXMubmV4dChtZXJnZWQgYXMgVCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3Jvc3MgbWVyZ2UgdHdvIGZpbHRlcnNcbiAgICAgKiBPbmx5IGFjY2VwdHMgZ3JvdXBzIHdpdGggc2FtZSBncm91cExvZ2ljIChpZ25vcmVzIHRoZSBmaXJzdCBvbmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ3JvdXBMb2dpYyBpbiB0aGlzIG9uZSlcbiAgICAgKiBAdGhyb3dzIEluIGNhc2UgdHdvIG5vbi1lbXB0eSBsaXN0cyBvZiBncm91cHMgYXJlIGdpdmVuIGFuZCBhdCBvbmUgb2YgdGhlbSBtaXggZ3JvdXBMb2dpYyB2YWx1ZSwgdGhyb3dzIGFuIGVycm9yXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZUdyb3VwTGlzdChncm91cHNBOiBMaXRlcmFsW10sIGdyb3Vwc0I6IExpdGVyYWxbXSk6IExpdGVyYWwge1xuICAgICAgICBpZiAoZ3JvdXBzQS5sZW5ndGggPT09IDAgJiYgZ3JvdXBzQi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTsgLy8gZW1wdHkgbGlzdGluZ3MsIHJldHVybiBlbXB0eSBsaXN0c1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyb3Vwc0EubGVuZ3RoID09PSAwICYmIGdyb3Vwc0IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdyb3Vwc0I7IC8vIE9uZSBsaXN0IGlzIGVtcHR5LCByZXR1cm4gdGhlIG9uZSB0aGF0IGlzIG5vdFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyb3Vwc0IubGVuZ3RoID09PSAwICYmIGdyb3Vwc0EubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdyb3Vwc0E7IC8vIE9uZSBsaXN0IGlzIGVtcHR5LCByZXR1cm4gdGhlIG9uZSB0aGF0IGlzIG5vdFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBzOiBMaXRlcmFsW10gPSBbXTtcblxuICAgICAgICBpZiAoaGFzTWl4ZWRHcm91cExvZ2ljKGdyb3Vwc0EpIHx8IGhhc01peGVkR3JvdXBMb2dpYyhncm91cHNCKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1F1ZXJ5VmFyaWFibGVzIGdyb3VwcyBjb250YWluIG1peGVkIGdyb3VwIGxvZ2ljcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBzQS5mb3JFYWNoKGdyb3VwQSA9PiB7XG4gICAgICAgICAgICBncm91cHNCLmZvckVhY2goZ3JvdXBCID0+IHtcbiAgICAgICAgICAgICAgICBncm91cHMucHVzaChtZXJnZVdpdGgoY2xvbmVEZWVwKGdyb3VwQSksIGdyb3VwQiwgbWVyZ2VDb25jYXRBcnJheSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfVxufVxuIl19
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { FormArray, FormGroup, Validators, } from '@angular/forms';
|
|
2
|
-
import { of, timer } from 'rxjs';
|
|
3
|
-
import { filter, first, map, switchMap } from 'rxjs/operators';
|
|
4
|
-
import { NaturalQueryVariablesManager } from './query-variable-manager';
|
|
5
|
-
import { validTlds } from './tld';
|
|
6
|
-
/**
|
|
7
|
-
* Returns an async validator function that checks that the form control value is unique
|
|
8
|
-
*/
|
|
9
|
-
export function unique(fieldName, excludedId, modelService) {
|
|
10
|
-
return (control) => {
|
|
11
|
-
if (!control.value || !control.dirty) {
|
|
12
|
-
return of(null);
|
|
13
|
-
}
|
|
14
|
-
const condition = {};
|
|
15
|
-
condition[fieldName] = { equal: { value: control.value } };
|
|
16
|
-
if (excludedId) {
|
|
17
|
-
condition['id'] = { equal: { value: excludedId, not: true } };
|
|
18
|
-
}
|
|
19
|
-
const variables = {
|
|
20
|
-
pagination: { pageIndex: 0, pageSize: 0 },
|
|
21
|
-
filter: { groups: [{ conditions: [condition] }] },
|
|
22
|
-
};
|
|
23
|
-
const qvm = new NaturalQueryVariablesManager();
|
|
24
|
-
qvm.set('variables', variables);
|
|
25
|
-
return timer(500).pipe(switchMap(() => modelService.count(qvm).pipe(map(count => (count > 0 ? { duplicateValue: count } : null)))));
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Returns an async validator function that checks that the form control value is available
|
|
30
|
-
*
|
|
31
|
-
* Similar to `unique` validator, but allows to use a custom query for when the client does
|
|
32
|
-
* not have permissions for `modelService.count()`.
|
|
33
|
-
*/
|
|
34
|
-
export function available(getAvailableQuery, excludedId = null) {
|
|
35
|
-
return (control) => {
|
|
36
|
-
if (!control.value || !control.dirty) {
|
|
37
|
-
return of(null);
|
|
38
|
-
}
|
|
39
|
-
return timer(500).pipe(switchMap(() => getAvailableQuery(control.value, excludedId).pipe(map(isAvailable => (isAvailable ? null : { available: true })))));
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Return all errors recursively for the given Form or control
|
|
44
|
-
*/
|
|
45
|
-
export function collectErrors(control) {
|
|
46
|
-
let errors = null;
|
|
47
|
-
if (control instanceof FormGroup || control instanceof FormArray) {
|
|
48
|
-
errors = Object.entries(control.controls).reduce((acc, [key, childControl]) => {
|
|
49
|
-
const childErrors = collectErrors(childControl);
|
|
50
|
-
if (childErrors) {
|
|
51
|
-
acc = Object.assign(Object.assign({}, acc), { [key]: childErrors });
|
|
52
|
-
}
|
|
53
|
-
return acc;
|
|
54
|
-
}, null);
|
|
55
|
-
}
|
|
56
|
-
if (!errors) {
|
|
57
|
-
errors = control.errors;
|
|
58
|
-
}
|
|
59
|
-
return errors;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Force validation of all form controls recursively.
|
|
63
|
-
*
|
|
64
|
-
* Recursively mark descending form tree as dirty and touched in order to show all invalid fields on demand.
|
|
65
|
-
* Typically used when creating a new object and user clicked on create button but several fields were not
|
|
66
|
-
* touched and are invalid.
|
|
67
|
-
*/
|
|
68
|
-
export function validateAllFormControls(control) {
|
|
69
|
-
control.markAsDirty({ onlySelf: true });
|
|
70
|
-
control.markAsTouched({ onlySelf: true });
|
|
71
|
-
if (control instanceof FormGroup || control instanceof FormArray) {
|
|
72
|
-
for (const [, child] of Object.entries(control.controls)) {
|
|
73
|
-
validateAllFormControls(child);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Emits exactly 0 or 1 time:
|
|
79
|
-
*
|
|
80
|
-
* - if the form is VALID, emits immediately
|
|
81
|
-
* - if the form is PENDING emits if it changes from PENDING to VALID
|
|
82
|
-
* - any other cases will **never** emit
|
|
83
|
-
*/
|
|
84
|
-
export function ifValid(control) {
|
|
85
|
-
const observable = control.pending ? control.statusChanges.pipe(first()) : of(control.status);
|
|
86
|
-
return observable.pipe(filter(status => status === 'VALID'));
|
|
87
|
-
}
|
|
88
|
-
// This is is an approximation of RFC_5322 where the hostname:
|
|
89
|
-
//
|
|
90
|
-
// - is too strict because it rejects IP address
|
|
91
|
-
// - is too lax because it accepts pretty much anything else
|
|
92
|
-
//
|
|
93
|
-
// but the TLD will be validated against a whitelist so that should make the whole thing acceptable
|
|
94
|
-
const RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[^@ ]+\.[^@]+$/u;
|
|
95
|
-
/**
|
|
96
|
-
* Validate an email address according to RFC, and also that it is publicly deliverable (not "root@localhost" or "root@127.0.0.1")
|
|
97
|
-
*
|
|
98
|
-
* This is meant to replace **all** usages of Angular too permissive `Validators.email`
|
|
99
|
-
*/
|
|
100
|
-
export function deliverableEmail(control) {
|
|
101
|
-
// don't validate empty values to allow optional controls
|
|
102
|
-
const value = control.value;
|
|
103
|
-
if (!value) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
const error = { email: true };
|
|
107
|
-
if (value.length > 254) {
|
|
108
|
-
return error;
|
|
109
|
-
}
|
|
110
|
-
if (!RFC_5322.test(value)) {
|
|
111
|
-
return error;
|
|
112
|
-
}
|
|
113
|
-
const tld = value.split('.').pop();
|
|
114
|
-
if (!validTlds.includes(tld)) {
|
|
115
|
-
return error;
|
|
116
|
-
}
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Naive URL validator for "normal" web links, that is a bit too permissive
|
|
121
|
-
*
|
|
122
|
-
* It enforces:
|
|
123
|
-
*
|
|
124
|
-
* - http/https protocol
|
|
125
|
-
* - one domain
|
|
126
|
-
* - one tld
|
|
127
|
-
*
|
|
128
|
-
* It allows:
|
|
129
|
-
*
|
|
130
|
-
* - any number of subdomains
|
|
131
|
-
* - any parameters
|
|
132
|
-
* - any fragments
|
|
133
|
-
* - any characters for any parts (does not conform to rfc1738)
|
|
134
|
-
*/
|
|
135
|
-
export const urlValidator = Validators.pattern(/^https?:\/\/(?:[^.\s]+\.)+[^.\s]+$/);
|
|
136
|
-
/**
|
|
137
|
-
* Validates that the value is an integer (non-float)
|
|
138
|
-
*/
|
|
139
|
-
export function integer(control) {
|
|
140
|
-
// Don't validate empty values to allow optional controls
|
|
141
|
-
if (control.value === null || control.value === undefined || control.value === '') {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
return Number.isInteger(parseFloat(control.value)) ? null : { integer: true };
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Validate that the value is a decimal number with up to `scale` digits
|
|
148
|
-
*
|
|
149
|
-
* The error contains the expected scale, so that the error message can explain
|
|
150
|
-
* it to the end-user.
|
|
151
|
-
*/
|
|
152
|
-
export function decimal(scale) {
|
|
153
|
-
const regExp = new RegExp(`^-?\\d+(\\.\\d{0,${scale}})?$`);
|
|
154
|
-
return control => {
|
|
155
|
-
// Don't validate empty values to allow optional controls
|
|
156
|
-
if (control.value === null || control.value === undefined || control.value === '') {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
const value = '' + control.value;
|
|
160
|
-
if (value.match(regExp)) {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
return { decimal: scale };
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* For internal use to avoid re-creating regexp on each call of `money`
|
|
168
|
-
*/
|
|
169
|
-
const twoDecimals = decimal(2);
|
|
170
|
-
/**
|
|
171
|
-
* Validate that the value is an amount of money, meaning a number with at most 2 decimals
|
|
172
|
-
*/
|
|
173
|
-
export function money(control) {
|
|
174
|
-
return twoDecimals(control) ? { money: true } : null;
|
|
175
|
-
}
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBR1QsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBR2hDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsU0FBaUIsRUFDakIsVUFBcUMsRUFDckMsWUFBc0I7SUFFdEIsT0FBTyxDQUFDLE9BQXdCLEVBQXVDLEVBQUU7UUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBRUQsTUFBTSxTQUFTLEdBQXlCLEVBQUUsQ0FBQztRQUMzQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUM7UUFFdkQsSUFBSSxVQUFVLEVBQUU7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDO1NBQzdEO1FBRUQsTUFBTSxTQUFTLEdBQW1CO1lB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QUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFL0I7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLE9BQXdCO0lBQzFDLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBBc3luY1ZhbGlkYXRvckZuLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtR3JvdXAsXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcbiAgICBWYWxpZGF0b3JGbixcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgZmlyc3QsIG1hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHt2YWxpZFRsZHN9IGZyb20gJy4vdGxkJztcbmltcG9ydCB7RmlsdGVyR3JvdXBDb25kaXRpb259IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3MgdGhhdCB0aGUgZm9ybSBjb250cm9sIHZhbHVlIGlzIHVuaXF1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFRTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT4+KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGV4Y2x1ZGVkSWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbW9kZWxTZXJ2aWNlOiBUU2VydmljZSxcbik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgIWNvbnRyb2wuZGlydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjogRmlsdGVyR3JvdXBDb25kaXRpb24gPSB7fTtcbiAgICAgICAgY29uZGl0aW9uW2ZpZWxkTmFtZV0gPSB7ZXF1YWw6IHt2YWx1ZTogY29udHJvbC52YWx1ZX19O1xuXG4gICAgICAgIGlmIChleGNsdWRlZElkKSB7XG4gICAgICAgICAgICBjb25kaXRpb25bJ2lkJ10gPSB7ZXF1YWw6IHt2YWx1ZTogZXhjbHVkZWRJZCwgbm90OiB0cnVlfX07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjoge3BhZ2VJbmRleDogMCwgcGFnZVNpemU6IDB9LFxuICAgICAgICAgICAgZmlsdGVyOiB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtjb25kaXRpb25dfV19LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHF2bSA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG4gICAgICAgIHF2bS5zZXQoJ3ZhcmlhYmxlcycsIHZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyKDUwMCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBtb2RlbFNlcnZpY2UuY291bnQocXZtKS5waXBlKG1hcChjb3VudCA9PiAoY291bnQgPiAwID8ge2R1cGxpY2F0ZVZhbHVlOiBjb3VudH0gOiBudWxsKSkpKSxcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoYXQgdGhlIGZvcm0gY29udHJvbCB2YWx1ZSBpcyBhdmFpbGFibGVcbiAqXG4gKiBTaW1pbGFyIHRvIGB1bmlxdWVgIHZhbGlkYXRvciwgYnV0IGFsbG93cyB0byB1c2UgYSBjdXN0b20gcXVlcnkgZm9yIHdoZW4gdGhlIGNsaWVudCBkb2VzXG4gKiBub3QgaGF2ZSBwZXJtaXNzaW9ucyBmb3IgYG1vZGVsU2VydmljZS5jb3VudCgpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YWlsYWJsZShcbiAgICBnZXRBdmFpbGFibGVRdWVyeTogKHZhbHVlOiBzdHJpbmcsIGV4Y2x1ZGVkSWQ6IHN0cmluZyB8IG51bGwpID0+IE9ic2VydmFibGU8Ym9vbGVhbj4sXG4gICAgZXhjbHVkZWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ID0+IHtcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICFjb250cm9sLmRpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXIoNTAwKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgZ2V0QXZhaWxhYmxlUXVlcnkoY29udHJvbC52YWx1ZSwgZXhjbHVkZWRJZCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKGlzQXZhaWxhYmxlID0+IChpc0F2YWlsYWJsZSA/IG51bGwgOiB7YXZhaWxhYmxlOiB0cnVlfSkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBlcnJvcnMgcmVjdXJzaXZlbHkgZm9yIHRoZSBnaXZlbiBGb3JtIG9yIGNvbnRyb2xcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RFcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIGVycm9ycyA9IE9iamVjdC5lbnRyaWVzKGNvbnRyb2wuY29udHJvbHMpLnJlZHVjZSgoYWNjOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCwgW2tleSwgY2hpbGRDb250cm9sXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRFcnJvcnMgPSBjb2xsZWN0RXJyb3JzKGNoaWxkQ29udHJvbCk7XG4gICAgICAgICAgICBpZiAoY2hpbGRFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhY2MgPSB7Li4uYWNjLCBba2V5XTogY2hpbGRFcnJvcnN9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvcnMpIHtcbiAgICAgICAgZXJyb3JzID0gY29udHJvbC5lcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBGb3JjZSB2YWxpZGF0aW9uIG9mIGFsbCBmb3JtIGNvbnRyb2xzIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFJlY3Vyc2l2ZWx5IG1hcmsgZGVzY2VuZGluZyBmb3JtIHRyZWUgYXMgZGlydHkgYW5kIHRvdWNoZWQgaW4gb3JkZXIgdG8gc2hvdyBhbGwgaW52YWxpZCBmaWVsZHMgb24gZGVtYW5kLlxuICogVHlwaWNhbGx5IHVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIHVzZXIgY2xpY2tlZCBvbiBjcmVhdGUgYnV0dG9uIGJ1dCBzZXZlcmFsIGZpZWxkcyB3ZXJlIG5vdFxuICogdG91Y2hlZCBhbmQgYXJlIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFsbEZvcm1Db250cm9scyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcbiAgICBjb250cm9sLm1hcmtBc0RpcnR5KHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgZm9yIChjb25zdCBbLCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMoY29udHJvbC5jb250cm9scykpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBleGFjdGx5IDAgb3IgMSB0aW1lOlxuICpcbiAqIC0gaWYgdGhlIGZvcm0gaXMgVkFMSUQsIGVtaXRzIGltbWVkaWF0ZWx5XG4gKiAtIGlmIHRoZSBmb3JtIGlzIFBFTkRJTkcgZW1pdHMgaWYgaXQgY2hhbmdlcyBmcm9tIFBFTkRJTkcgdG8gVkFMSURcbiAqIC0gYW55IG90aGVyIGNhc2VzIHdpbGwgKipuZXZlcioqIGVtaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmVmFsaWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTwnVkFMSUQnPiB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IGNvbnRyb2wucGVuZGluZyA/IGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKGZpcnN0KCkpIDogb2YoY29udHJvbC5zdGF0dXMpO1xuXG4gICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShmaWx0ZXIoc3RhdHVzID0+IHN0YXR1cyA9PT0gJ1ZBTElEJykpO1xufVxuXG4vLyBUaGlzIGlzIGlzIGFuIGFwcHJveGltYXRpb24gb2YgUkZDXzUzMjIgd2hlcmUgdGhlIGhvc3RuYW1lOlxuLy9cbi8vIC0gaXMgdG9vIHN0cmljdCBiZWNhdXNlIGl0IHJlamVjdHMgSVAgYWRkcmVzc1xuLy8gLSBpcyB0b28gbGF4IGJlY2F1c2UgaXQgYWNjZXB0cyBwcmV0dHkgbXVjaCBhbnl0aGluZyBlbHNlXG4vL1xuLy8gYnV0IHRoZSBUTEQgd2lsbCBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBhIHdoaXRlbGlzdCBzbyB0aGF0IHNob3VsZCBtYWtlIHRoZSB3aG9sZSB0aGluZyBhY2NlcHRhYmxlXG5jb25zdCBSRkNfNTMyMiA9IC9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbXkAgXStcXC5bXkBdKyQvdTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzIGFjY29yZGluZyB0byBSRkMsIGFuZCBhbHNvIHRoYXQgaXQgaXMgcHVibGljbHkgZGVsaXZlcmFibGUgKG5vdCBcInJvb3RAbG9jYWxob3N0XCIgb3IgXCJyb290QDEyNy4wLjAuMVwiKVxuICpcbiAqIFRoaXMgaXMgbWVhbnQgdG8gcmVwbGFjZSAqKmFsbCoqIHVzYWdlcyBvZiBBbmd1bGFyIHRvbyBwZXJtaXNzaXZlIGBWYWxpZGF0b3JzLmVtYWlsYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaXZlcmFibGVFbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgLy8gZG9uJ3QgdmFsaWRhdGUgZW1wdHkgdmFsdWVzIHRvIGFsbG93IG9wdGlvbmFsIGNvbnRyb2xzXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB7ZW1haWw6IHRydWV9O1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyNTQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGlmICghUkZDXzUzMjIudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IHRsZCA9IHZhbHVlLnNwbGl0KCcuJykucG9wKCk7XG4gICAgaWYgKCF2YWxpZFRsZHMuaW5jbHVkZXModGxkKSkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTmFpdmUgVVJMIHZhbGlkYXRvciBmb3IgXCJub3JtYWxcIiB3ZWIgbGlua3MsIHRoYXQgaXMgYSBiaXQgdG9vIHBlcm1pc3NpdmVcbiAqXG4gKiBJdCBlbmZvcmNlczpcbiAqXG4gKiAgICAgLSBodHRwL2h0dHBzIHByb3RvY29sXG4gKiAgICAgLSBvbmUgZG9tYWluXG4gKiAgICAgLSBvbmUgdGxkXG4gKlxuICogSXQgYWxsb3dzOlxuICpcbiAqICAgICAtIGFueSBudW1iZXIgb2Ygc3ViZG9tYWluc1xuICogICAgIC0gYW55IHBhcmFtZXRlcnNcbiAqICAgICAtIGFueSBmcmFnbWVudHNcbiAqICAgICAtIGFueSBjaGFyYWN0ZXJzIGZvciBhbnkgcGFydHMgKGRvZXMgbm90IGNvbmZvcm0gdG8gcmZjMTczOClcbiAqL1xuZXhwb3J0IGNvbnN0IHVybFZhbGlkYXRvciA9IFZhbGlkYXRvcnMucGF0dGVybigvXmh0dHBzPzpcXC9cXC8oPzpbXi5cXHNdK1xcLikrW14uXFxzXSskLyk7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIgKG5vbi1mbG9hdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIC8vIERvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIGlmIChjb250cm9sLnZhbHVlID09PSBudWxsIHx8IGNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjb250cm9sLnZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpKSA/IG51bGwgOiB7aW50ZWdlcjogdHJ1ZX07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCB0aGUgdmFsdWUgaXMgYSBkZWNpbWFsIG51bWJlciB3aXRoIHVwIHRvIGBzY2FsZWAgZGlnaXRzXG4gKlxuICogVGhlIGVycm9yIGNvbnRhaW5zIHRoZSBleHBlY3RlZCBzY2FsZSwgc28gdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4gZXhwbGFpblxuICogaXQgdG8gdGhlIGVuZC11c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaW1hbChzY2FsZTogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4tP1xcXFxkKyhcXFxcLlxcXFxkezAsJHtzY2FsZX19KT8kYCk7XG4gICAgcmV0dXJuIGNvbnRyb2wgPT4ge1xuICAgICAgICAvLyBEb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgb3B0aW9uYWwgY29udHJvbHNcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gJycgKyBjb250cm9sLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUubWF0Y2gocmVnRXhwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge2RlY2ltYWw6IHNjYWxlfTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEZvciBpbnRlcm5hbCB1c2UgdG8gYXZvaWQgcmUtY3JlYXRpbmcgcmVnZXhwIG9uIGVhY2ggY2FsbCBvZiBgbW9uZXlgXG4gKi9cbmNvbnN0IHR3b0RlY2ltYWxzID0gZGVjaW1hbCgyKTtcblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBhbW91bnQgb2YgbW9uZXksIG1lYW5pbmcgYSBudW1iZXIgd2l0aCBhdCBtb3N0IDIgZGVjaW1hbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbmV5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdHdvRGVjaW1hbHMoY29udHJvbCkgPyB7bW9uZXk6IHRydWV9IDogbnVsbDtcbn1cbiJdfQ==
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
-
import { NaturalAbstractController } from '../classes/abstract-controller';
|
|
3
|
-
/**
|
|
4
|
-
* Need to add http:// prefix if we don't have prefix already AND we don't have part of it
|
|
5
|
-
*/
|
|
6
|
-
export function ensureHttpPrefix(value) {
|
|
7
|
-
if (!value) {
|
|
8
|
-
return value;
|
|
9
|
-
}
|
|
10
|
-
const completePrefix = /^(https?):\/\//i.test(value);
|
|
11
|
-
const startingPrefix = 'https://'.indexOf(value) === 0 || 'http://'.indexOf(value) === 0;
|
|
12
|
-
if (!completePrefix && !startingPrefix) {
|
|
13
|
-
return 'http://' + value;
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
return value;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* This directive only supports ReactiveForms due to ngModel/ngControl encapsulation and changes emissions.
|
|
21
|
-
*/
|
|
22
|
-
export class NaturalHttpPrefixDirective extends NaturalAbstractController {
|
|
23
|
-
constructor() {
|
|
24
|
-
super();
|
|
25
|
-
this.naturalHttpPrefix = null;
|
|
26
|
-
}
|
|
27
|
-
httpize($event) {
|
|
28
|
-
if (this.naturalHttpPrefix) {
|
|
29
|
-
const newValue = ensureHttpPrefix($event) || $event;
|
|
30
|
-
if ($event !== newValue) {
|
|
31
|
-
this.naturalHttpPrefix.setValue(newValue);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
NaturalHttpPrefixDirective.decorators = [
|
|
37
|
-
{ type: Directive, args: [{
|
|
38
|
-
selector: '[naturalHttpPrefix]',
|
|
39
|
-
},] }
|
|
40
|
-
];
|
|
41
|
-
NaturalHttpPrefixDirective.ctorParameters = () => [];
|
|
42
|
-
NaturalHttpPrefixDirective.propDecorators = {
|
|
43
|
-
naturalHttpPrefix: [{ type: Input }],
|
|
44
|
-
httpize: [{ type: HostListener, args: ['ngModelChange', ['$event'],] }]
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1wcmVmaXguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2RpcmVjdGl2ZXMvaHR0cC1wcmVmaXguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RTs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFvQjtJQUNqRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1IsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFekYsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNwQyxPQUFPLFNBQVMsR0FBRyxLQUFLLENBQUM7S0FDNUI7U0FBTTtRQUNILE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBSUgsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHlCQUF5QjtJQUdyRTtRQUNJLEtBQUssRUFBRSxDQUFDO1FBSEksc0JBQWlCLEdBQTJCLElBQUksQ0FBQztJQUlqRSxDQUFDO0lBR00sT0FBTyxDQUFDLE1BQWM7UUFDekIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDO1lBQ3BELElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3QztTQUNKO0lBQ0wsQ0FBQzs7O1lBbEJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2FBQ2xDOzs7O2dDQUVJLEtBQUs7c0JBTUwsWUFBWSxTQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5cbi8qKlxuICogTmVlZCB0byBhZGQgIGh0dHA6Ly8gcHJlZml4IGlmIHdlIGRvbid0IGhhdmUgcHJlZml4IGFscmVhZHkgQU5EIHdlIGRvbid0IGhhdmUgcGFydCBvZiBpdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlSHR0cFByZWZpeCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlUHJlZml4ID0gL14oaHR0cHM/KTpcXC9cXC8vaS50ZXN0KHZhbHVlKTtcbiAgICBjb25zdCBzdGFydGluZ1ByZWZpeCA9ICdodHRwczovLycuaW5kZXhPZih2YWx1ZSkgPT09IDAgfHwgJ2h0dHA6Ly8nLmluZGV4T2YodmFsdWUpID09PSAwO1xuXG4gICAgaWYgKCFjb21wbGV0ZVByZWZpeCAmJiAhc3RhcnRpbmdQcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuICdodHRwOi8vJyArIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgb25seSBzdXBwb3J0cyBSZWFjdGl2ZUZvcm1zIGR1ZSB0byBuZ01vZGVsL25nQ29udHJvbCBlbmNhcHN1bGF0aW9uIGFuZCBjaGFuZ2VzIGVtaXNzaW9ucy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbmF0dXJhbEh0dHBQcmVmaXhdJyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEh0dHBQcmVmaXhEaXJlY3RpdmUgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyIHtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF0dXJhbEh0dHBQcmVmaXg6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbmdNb2RlbENoYW5nZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGh0dHBpemUoJGV2ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0dXJhbEh0dHBQcmVmaXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZW5zdXJlSHR0cFByZWZpeCgkZXZlbnQpIHx8ICRldmVudDtcbiAgICAgICAgICAgIGlmICgkZXZlbnQgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsSHR0cFByZWZpeC5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
5
|
-
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
6
|
-
import { NaturalConfirmComponent } from './confirm.component';
|
|
7
|
-
export class NaturalAlertModule {
|
|
8
|
-
}
|
|
9
|
-
NaturalAlertModule.decorators = [
|
|
10
|
-
{ type: NgModule, args: [{
|
|
11
|
-
declarations: [NaturalConfirmComponent],
|
|
12
|
-
imports: [CommonModule, MatDialogModule, MatSnackBarModule, MatButtonModule],
|
|
13
|
-
},] }
|
|
14
|
-
];
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvYWxlcnQvYWxlcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFNNUQsTUFBTSxPQUFPLGtCQUFrQjs7O1lBSjlCLFFBQVEsU0FBQztnQkFDTixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUM7YUFDL0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdERpYWxvZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7TWF0U25hY2tCYXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQge05hdHVyYWxDb25maXJtQ29tcG9uZW50fSBmcm9tICcuL2NvbmZpcm0uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtOYXR1cmFsQ29uZmlybUNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0RGlhbG9nTW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFsZXJ0TW9kdWxlIHt9XG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
4
|
-
import { NaturalConfirmComponent } from './confirm.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/dialog";
|
|
7
|
-
import * as i2 from "@angular/material/snack-bar";
|
|
8
|
-
export class NaturalAlertService {
|
|
9
|
-
constructor(dialog, snackBar) {
|
|
10
|
-
this.dialog = dialog;
|
|
11
|
-
this.snackBar = snackBar;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Show an informative message in a snack bar
|
|
15
|
-
*/
|
|
16
|
-
info(message, duration = 2500) {
|
|
17
|
-
return this.snackBar.open(message, undefined, {
|
|
18
|
-
duration: duration === null ? undefined : duration,
|
|
19
|
-
verticalPosition: 'top',
|
|
20
|
-
horizontalPosition: 'end',
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Show an error in a snack bar
|
|
25
|
-
*/
|
|
26
|
-
error(message, duration = 2500, action) {
|
|
27
|
-
return this.snackBar.open(message, action, {
|
|
28
|
-
duration: duration === null ? undefined : duration,
|
|
29
|
-
panelClass: ['snackbar-error'],
|
|
30
|
-
verticalPosition: 'top',
|
|
31
|
-
horizontalPosition: 'end',
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Show a simple confirmation dialog and returns true if user confirmed it
|
|
36
|
-
*/
|
|
37
|
-
confirm(title, message, confirmText, cancelText = $localize `Annuler`) {
|
|
38
|
-
const dialog = this.dialog.open(NaturalConfirmComponent, {
|
|
39
|
-
data: {
|
|
40
|
-
title: title,
|
|
41
|
-
message: message,
|
|
42
|
-
confirmText: confirmText,
|
|
43
|
-
cancelText: cancelText,
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
return dialog.afterClosed();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
NaturalAlertService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NaturalAlertService_Factory() { return new NaturalAlertService(i0.ɵɵinject(i1.MatDialog), i0.ɵɵinject(i2.MatSnackBar)); }, token: NaturalAlertService, providedIn: "root" });
|
|
50
|
-
NaturalAlertService.decorators = [
|
|
51
|
-
{ type: Injectable, args: [{
|
|
52
|
-
providedIn: 'root',
|
|
53
|
-
},] }
|
|
54
|
-
];
|
|
55
|
-
NaturalAlertService.ctorParameters = () => [
|
|
56
|
-
{ type: MatDialog },
|
|
57
|
-
{ type: MatSnackBar }
|
|
58
|
-
];
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBaUMsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RixPQUFPLEVBQUMsdUJBQXVCLEVBQXFCLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFLaEYsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixZQUE2QixNQUFpQixFQUFtQixRQUFxQjtRQUF6RCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQW1CLGFBQVEsR0FBUixRQUFRLENBQWE7SUFBRyxDQUFDO0lBRTFGOztPQUVHO0lBQ0ksSUFBSSxDQUFDLE9BQWUsRUFBRSxXQUEwQixJQUFJO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUMxQyxRQUFRLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ2xELGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsa0JBQWtCLEVBQUUsS0FBSztTQUM1QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBZSxFQUFFLFdBQTBCLElBQUksRUFBRSxNQUFlO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUN2QyxRQUFRLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ2xELFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQzlCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsa0JBQWtCLEVBQUUsS0FBSztTQUM1QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQ1YsS0FBYSxFQUNiLE9BQWUsRUFDZixXQUFtQixFQUNuQixhQUFxQixTQUFTLENBQUEsU0FBUztRQUV2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBdUQsdUJBQXVCLEVBQUU7WUFDM0csSUFBSSxFQUFFO2dCQUNGLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsV0FBVztnQkFDeEIsVUFBVSxFQUFFLFVBQVU7YUFDekI7U0FDSixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7O1lBaERKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBUE8sU0FBUztZQUNULFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge01hdFNuYWNrQmFyLCBNYXRTbmFja0JhclJlZiwgU2ltcGxlU25hY2tCYXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQ29uZmlybUNvbXBvbmVudCwgTmF0dXJhbENvbmZpcm1EYXRhfSBmcm9tICcuL2NvbmZpcm0uY29tcG9uZW50JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFsZXJ0U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByZWFkb25seSBzbmFja0JhcjogTWF0U25hY2tCYXIpIHt9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGFuIGluZm9ybWF0aXZlIG1lc3NhZ2UgaW4gYSBzbmFjayBiYXJcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgfCBudWxsID0gMjUwMCk6IE1hdFNuYWNrQmFyUmVmPFNpbXBsZVNuYWNrQmFyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gPT09IG51bGwgPyB1bmRlZmluZWQgOiBkdXJhdGlvbixcbiAgICAgICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnLFxuICAgICAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uOiAnZW5kJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyBhbiBlcnJvciBpbiBhIHNuYWNrIGJhclxuICAgICAqL1xuICAgIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgfCBudWxsID0gMjUwMCwgYWN0aW9uPzogc3RyaW5nKTogTWF0U25hY2tCYXJSZWY8U2ltcGxlU25hY2tCYXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCBhY3Rpb24sIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGR1cmF0aW9uLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddLFxuICAgICAgICAgICAgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zaXRpb246ICdlbmQnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGEgc2ltcGxlIGNvbmZpcm1hdGlvbiBkaWFsb2cgYW5kIHJldHVybnMgdHJ1ZSBpZiB1c2VyIGNvbmZpcm1lZCBpdFxuICAgICAqL1xuICAgIHB1YmxpYyBjb25maXJtKFxuICAgICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGNvbmZpcm1UZXh0OiBzdHJpbmcsXG4gICAgICAgIGNhbmNlbFRleHQ6IHN0cmluZyA9ICRsb2NhbGl6ZWBBbm51bGVyYCxcbiAgICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbjxOYXR1cmFsQ29uZmlybUNvbXBvbmVudCwgTmF0dXJhbENvbmZpcm1EYXRhLCBib29sZWFuPihOYXR1cmFsQ29uZmlybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRpYWxvZy5hZnRlckNsb3NlZCgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
-
export class NaturalConfirmComponent {
|
|
4
|
-
constructor(data) {
|
|
5
|
-
this.data = data;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
NaturalConfirmComponent.decorators = [
|
|
9
|
-
{ type: Component, args: [{
|
|
10
|
-
template: "<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions>\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n",
|
|
11
|
-
styles: ["mat-dialog-content{max-width:40em}mat-dialog-actions{display:flex;justify-content:flex-end}mat-dialog-actions>*{margin-left:10px}\n"]
|
|
12
|
-
},] }
|
|
13
|
-
];
|
|
14
|
-
NaturalConfirmComponent.ctorParameters = () => [
|
|
15
|
-
{ type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
|
|
16
|
-
];
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9hbGVydC9jb25maXJtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFhekQsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQyxZQUE0QyxJQUF3QjtRQUF4QixTQUFJLEdBQUosSUFBSSxDQUFvQjtJQUFHLENBQUM7OztZQUwzRSxTQUFTLFNBQUM7Z0JBQ1Asb1lBQXVDOzthQUUxQzs7OzRDQUVnQixNQUFNLFNBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEF9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF0dXJhbENvbmZpcm1EYXRhIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBjb25maXJtVGV4dDogc3RyaW5nO1xuICAgIGNhbmNlbFRleHQ6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbmZpcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbENvbmZpcm1Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogTmF0dXJhbENvbmZpcm1EYXRhKSB7fVxufVxuIl19
|