@veloceapps/sdk 7.0.0-8 → 7.0.1-0
Sign up to get free protection for your applications and to get access to all the features.
- package/cms/README.md +45 -0
- package/cms/cms.actions.d.ts +10 -0
- package/cms/components/element-children/element-children.component.d.ts +1 -1
- package/cms/components/element-drop-handle/element-drop-handle.component.d.ts +1 -1
- package/cms/components/element-renderer/element-renderer.component.d.ts +1 -1
- package/cms/components/plugin.component.d.ts +2 -2
- package/cms/components/preview/preview.component.d.ts +4 -3
- package/cms/directives/custom-template.directive.d.ts +1 -1
- package/cms/modules/federated/federated-host.directive.d.ts +8 -0
- package/cms/modules/federated/federated.component.d.ts +5 -7
- package/cms/modules/federated/federated.module.d.ts +4 -3
- package/cms/modules/federated/federated.types.d.ts +1 -5
- package/cms/modules/migrations/types/migrations.types.d.ts +1 -1
- package/cms/plugins/configuration.plugin.d.ts +1 -1
- package/cms/plugins/io.plugin.d.ts +1 -1
- package/cms/plugins/region.plugin.d.ts +1 -1
- package/cms/plugins/script.plugin.d.ts +1 -1
- package/cms/services/templates.service.d.ts +1 -1
- package/cms/types/common.types.d.ts +2 -2
- package/cms/types/elements.types.d.ts +1 -1
- package/cms/types/integration.types.d.ts +1 -1
- package/cms/types/layouts.types.d.ts +1 -1
- package/cms/utils/element.utils.d.ts +2 -2
- package/cms/vendor-map.d.ts +2 -1
- package/core/README.md +5 -0
- package/core/modules/flow-configuration/types/update.types.d.ts +2 -2
- package/core/services/metric-calculation/metric-calculation.types.d.ts +1 -1
- package/core/types/ui-definition.types.d.ts +2 -2
- package/esm2020/cms/cms.actions.mjs +56 -0
- package/esm2020/cms/components/element-children/element-children.component.mjs +35 -0
- package/esm2020/cms/components/element-children/element-children.module.mjs +20 -0
- package/esm2020/cms/components/element-drop-handle/element-drop-handle.component.mjs +28 -0
- package/esm2020/cms/components/element-drop-handle/element-drop-handle.module.mjs +19 -0
- package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +160 -0
- package/{esm2015/cms/components/element-renderer/element-renderer.module.js → esm2020/cms/components/element-renderer/element-renderer.module.mjs} +5 -5
- package/esm2020/cms/components/element.component.mjs +45 -0
- package/esm2020/cms/components/plugin.component.mjs +17 -0
- package/esm2020/cms/components/preview/preview.component.mjs +103 -0
- package/esm2020/cms/components/preview/preview.module.mjs +24 -0
- package/esm2020/cms/directives/custom-template.directive.mjs +26 -0
- package/esm2020/cms/engine/models/entity.mjs +17 -0
- package/esm2020/cms/launcher.module.mjs +24 -0
- package/esm2020/cms/modules/federated/federated-host.directive.mjs +16 -0
- package/esm2020/cms/modules/federated/federated.component.mjs +64 -0
- package/esm2020/cms/modules/federated/federated.module.mjs +20 -0
- package/esm2020/cms/modules/federated/federated.types.mjs +2 -0
- package/esm2020/cms/modules/migrations/migrations.mjs +15 -0
- package/{esm2015/cms/modules/migrations/migrations.module.js → esm2020/cms/modules/migrations/migrations.module.mjs} +5 -5
- package/esm2020/cms/modules/migrations/services/migrations.service.mjs +43 -0
- package/{esm2015/cms/modules/runtime/runtime.module.js → esm2020/cms/modules/runtime/runtime.module.mjs} +6 -6
- package/esm2020/cms/modules/runtime/services/compilation.service.mjs +83 -0
- package/esm2020/cms/modules/runtime/services/runtime-editor.service.mjs +28 -0
- package/esm2020/cms/modules/runtime/services/runtime.service.mjs +74 -0
- package/esm2020/cms/plugins/configuration.plugin.mjs +105 -0
- package/esm2020/cms/plugins/io.plugin.mjs +36 -0
- package/esm2020/cms/plugins/region.plugin.mjs +58 -0
- package/esm2020/cms/plugins/script.plugin.mjs +65 -0
- package/{esm2015/cms/services/element-context.service.js → esm2020/cms/services/element-context.service.mjs} +4 -4
- package/esm2020/cms/services/integration.state.mjs +40 -0
- package/esm2020/cms/services/io-provider.service.mjs +50 -0
- package/esm2020/cms/services/resources.service.mjs +49 -0
- package/{esm2015/cms/services/templates.service.js → esm2020/cms/services/templates.service.mjs} +4 -4
- package/esm2020/cms/utils/element.utils.mjs +160 -0
- package/esm2020/cms/utils/elements-resolver.mjs +189 -0
- package/esm2020/cms/utils/path.utils.mjs +53 -0
- package/esm2020/cms/utils/ui-definition.utils.mjs +87 -0
- package/esm2020/cms/vendor-map.mjs +67 -0
- package/esm2020/core/core.module.mjs +18 -0
- package/{esm2015/core/modules/configuration/configuration.module.js → esm2020/core/modules/configuration/configuration.module.mjs} +6 -6
- package/esm2020/core/modules/configuration/helpers.mjs +18 -0
- package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +106 -0
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +183 -0
- package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +50 -0
- package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +18 -0
- package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +150 -0
- package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +129 -0
- package/esm2020/core/services/context.service.mjs +64 -0
- package/esm2020/core/services/metric-calculation/metric-calculation.service.mjs +85 -0
- package/esm2020/core/services/product-images.service.mjs +31 -0
- package/esm2020/core/services/quote-draft.service.mjs +232 -0
- package/esm2020/core/utils/line-item.utils.mjs +161 -0
- package/esm2020/core/utils/line-item.worker.mjs +19 -0
- package/esm2020/runtime/components/component-preview/component-preview.component.mjs +125 -0
- package/esm2020/runtime/components/section-renderer/section-renderer.component.mjs +67 -0
- package/esm2020/runtime/components/ui-runtime/runtime.component.mjs +440 -0
- package/esm2020/runtime/components/ui-runtime-preview/runtime-preview.component.mjs +108 -0
- package/esm2020/runtime/execution/components/children-placeholder/children-placeholder.component.mjs +60 -0
- package/esm2020/runtime/execution/components/context-provider/context-provider.component.mjs +39 -0
- package/esm2020/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.mjs +67 -0
- package/esm2020/runtime/execution/components/federated/federated.component.mjs +74 -0
- package/esm2020/runtime/execution/components/velo-attribute/velo-attribute.component.mjs +60 -0
- package/esm2020/runtime/execution/components/velo-multiselect/velo-multiselect.component.mjs +130 -0
- package/esm2020/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.mjs +72 -0
- package/esm2020/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.mjs +97 -0
- package/esm2020/runtime/execution/components/velo-port-radio/velo-port-radio.component.mjs +142 -0
- package/esm2020/runtime/execution/components/velo-type/velo-type.component.mjs +119 -0
- package/esm2020/runtime/execution/directives/section-script.directive.mjs +247 -0
- package/esm2020/runtime/execution/directives/sf-query.directive.mjs +35 -0
- package/esm2020/runtime/execution/directives/velo-attribute.directive.mjs +88 -0
- package/esm2020/runtime/execution/directives/velo-port.directive.mjs +376 -0
- package/esm2020/runtime/execution/directives/vl-approval.directive.mjs +23 -0
- package/esm2020/runtime/execution/directives/vl-document-attachments.directive.mjs +36 -0
- package/esm2020/runtime/execution/directives/vl-document-templates.directive.mjs +60 -0
- package/esm2020/runtime/execution/directives/vl-quote.directive.mjs +42 -0
- package/esm2020/runtime/execution/directives/vl-ramp.directive.mjs +55 -0
- package/esm2020/runtime/execution/runtime-execution.module.mjs +133 -0
- package/esm2020/runtime/execution/utils/federated.util.mjs +32 -0
- package/esm2020/runtime/runtime.module.mjs +74 -0
- package/esm2020/runtime/services/cart.service.mjs +29 -0
- package/{esm2015/runtime/services/collapsible-state.service.js → esm2020/runtime/services/collapsible-state.service.mjs} +4 -4
- package/esm2020/runtime/services/configuration.service.mjs +119 -0
- package/{esm2015/runtime/services/current-state.service.js → esm2020/runtime/services/current-state.service.mjs} +4 -4
- package/{esm2015/runtime/services/form-scope.service.js → esm2020/runtime/services/form-scope.service.mjs} +4 -4
- package/esm2020/runtime/services/product-model-cache.service.mjs +31 -0
- package/esm2020/runtime/services/runtime-context.service.mjs +57 -0
- package/esm2020/runtime/services/runtime-form.service.mjs +219 -0
- package/esm2020/runtime/services/runtime.service.mjs +115 -0
- package/{esm2015/runtime/services/section-helper.service.js → esm2020/runtime/services/section-helper.service.mjs} +4 -4
- package/{esm2015/runtime/services/section-scope.service.js → esm2020/runtime/services/section-scope.service.mjs} +4 -4
- package/{esm2015/runtime/services/section-store.service.js → esm2020/runtime/services/section-store.service.mjs} +4 -4
- package/esm2020/runtime/services/section.service.mjs +117 -0
- package/esm2020/runtime/types/script-registry.types.mjs +51 -0
- package/esm2020/runtime/utils/line-item.util.mjs +270 -0
- package/esm2020/src/components/dialog/dialog.component.mjs +36 -0
- package/esm2020/src/components/dialog/dialog.module.mjs +19 -0
- package/esm2020/src/components/doc-gen/doc-gen.component.mjs +107 -0
- package/esm2020/src/components/doc-gen/doc-gen.module.mjs +19 -0
- package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +120 -0
- package/{esm2015/src/components/header/cart-overlay/cart-preview.module.js → esm2020/src/components/header/cart-overlay/cart-preview.module.mjs} +11 -13
- package/esm2020/src/components/header/header.component.mjs +333 -0
- package/{esm2015/src/components/header/header.module.js → esm2020/src/components/header/header.module.mjs} +12 -14
- package/esm2020/src/components/header/metrics/metrics.component.mjs +227 -0
- package/{esm2015/src/components/header/metrics/metrics.module.js → esm2020/src/components/header/metrics/metrics.module.mjs} +17 -19
- package/{esm2015/src/flow-routing.module.js → esm2020/src/flow-routing.module.mjs} +12 -14
- package/esm2020/src/flow.component.mjs +45 -0
- package/esm2020/src/flow.module.mjs +58 -0
- package/esm2020/src/guards/context.guard.mjs +93 -0
- package/esm2020/src/guards/product-unload.guard.mjs +46 -0
- package/esm2020/src/guards/root.guard.mjs +42 -0
- package/esm2020/src/pages/assets/assets.component.mjs +111 -0
- package/esm2020/src/pages/assets/assets.module.mjs +20 -0
- package/esm2020/src/pages/catalog/catalog.component.mjs +111 -0
- package/esm2020/src/pages/catalog/catalog.module.mjs +20 -0
- package/esm2020/src/pages/debug/debug.component.mjs +62 -0
- package/{esm2015/src/pages/debug/debug.module.js → esm2020/src/pages/debug/debug.module.mjs} +12 -14
- package/esm2020/src/pages/empty-account/empty-account.component.mjs +12 -0
- package/esm2020/src/pages/empty-account/empty-account.module.mjs +20 -0
- package/esm2020/src/pages/legacy-product/legacy-product.component.mjs +137 -0
- package/esm2020/src/pages/legacy-product/legacy-product.module.mjs +19 -0
- package/esm2020/src/pages/product/product.component.mjs +94 -0
- package/esm2020/src/pages/product/product.module.mjs +20 -0
- package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +25 -0
- package/esm2020/src/pages/record-not-found/record-not-found.module.mjs +20 -0
- package/esm2020/src/pages/remote/remote.component.mjs +342 -0
- package/esm2020/src/pages/remote/remote.module.mjs +20 -0
- package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +111 -0
- package/esm2020/src/pages/shopping-cart/shopping-cart.module.mjs +20 -0
- package/esm2020/src/resolvers/flow.resolver.mjs +70 -0
- package/esm2020/src/resolvers/quote.resolver.mjs +90 -0
- package/esm2020/src/services/doc-gen.service.mjs +33 -0
- package/esm2020/src/services/flow-dialog.service.mjs +126 -0
- package/esm2020/src/services/flow-router.service.mjs +144 -0
- package/esm2020/src/services/flow.service.mjs +86 -0
- package/esm2020/src/utils/flow.utils.mjs +21 -0
- package/fesm2015/{veloceapps-sdk-cms.js → veloceapps-sdk-cms.mjs} +178 -207
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -0
- package/fesm2015/{veloceapps-sdk-core.js → veloceapps-sdk-core.mjs} +76 -76
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -0
- package/fesm2015/{veloceapps-sdk-runtime.js → veloceapps-sdk-runtime.mjs} +242 -370
- package/fesm2015/veloceapps-sdk-runtime.mjs.map +1 -0
- package/fesm2015/veloceapps-sdk.mjs +2877 -0
- package/fesm2015/veloceapps-sdk.mjs.map +1 -0
- package/fesm2020/veloceapps-sdk-cms.mjs +2036 -0
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -0
- package/fesm2020/veloceapps-sdk-core.mjs +1289 -0
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -0
- package/fesm2020/veloceapps-sdk-runtime.mjs +3764 -0
- package/fesm2020/veloceapps-sdk-runtime.mjs.map +1 -0
- package/fesm2020/veloceapps-sdk.mjs +2857 -0
- package/fesm2020/veloceapps-sdk.mjs.map +1 -0
- package/package.json +59 -33
- package/runtime/README.md +5 -0
- package/runtime/components/component-preview/component-preview.component.d.ts +2 -2
- package/runtime/components/section-renderer/section-renderer.component.d.ts +1 -1
- package/runtime/components/ui-runtime/runtime.component.d.ts +1 -1
- package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +1 -1
- package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +2 -2
- package/runtime/execution/components/context-provider/context-provider.component.d.ts +1 -1
- package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +1 -1
- package/runtime/execution/components/federated/federated.component.d.ts +1 -1
- package/runtime/execution/components/velo-attribute/velo-attribute.component.d.ts +1 -1
- package/runtime/execution/components/velo-multiselect/velo-multiselect.component.d.ts +1 -1
- package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +1 -1
- package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +1 -1
- package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +1 -1
- package/runtime/execution/components/velo-type/velo-type.component.d.ts +1 -1
- package/runtime/execution/directives/section-script.directive.d.ts +1 -1
- package/runtime/execution/directives/sf-query.directive.d.ts +1 -1
- package/runtime/execution/directives/velo-attribute.directive.d.ts +1 -1
- package/runtime/execution/directives/velo-port.directive.d.ts +6 -6
- package/runtime/execution/directives/vl-approval.directive.d.ts +1 -1
- package/runtime/execution/directives/vl-document-attachments.directive.d.ts +1 -1
- package/runtime/execution/directives/vl-document-templates.directive.d.ts +1 -1
- package/runtime/execution/directives/vl-quote.directive.d.ts +1 -1
- package/runtime/execution/directives/vl-ramp.directive.d.ts +1 -1
- package/runtime/execution/runtime-execution.module.d.ts +3 -5
- package/runtime/execution/utils/federated.util.d.ts +1 -1
- package/runtime/runtime.module.d.ts +3 -5
- package/runtime/services/section.service.d.ts +1 -1
- package/src/components/dialog/dialog.component.d.ts +1 -1
- package/src/components/doc-gen/doc-gen.component.d.ts +1 -1
- package/src/components/header/cart-overlay/cart-preview.component.d.ts +2 -2
- package/src/components/header/header.component.d.ts +1 -1
- package/src/components/header/metrics/metrics.component.d.ts +1 -1
- package/src/flow.component.d.ts +1 -1
- package/src/pages/assets/assets.component.d.ts +1 -1
- package/src/pages/catalog/catalog.component.d.ts +1 -1
- package/src/pages/debug/debug.component.d.ts +5 -3
- package/src/pages/empty-account/empty-account.component.d.ts +1 -1
- package/src/pages/legacy-product/legacy-product.component.d.ts +1 -1
- package/src/pages/legacy-product/legacy-product.module.d.ts +1 -2
- package/src/pages/product/product.component.d.ts +1 -1
- package/src/pages/record-not-found/record-not-found.component.d.ts +1 -1
- package/src/pages/remote/remote.component.d.ts +1 -1
- package/src/pages/shopping-cart/shopping-cart.component.d.ts +1 -1
- package/bundles/veloceapps-sdk-cms.umd.js +0 -2531
- package/bundles/veloceapps-sdk-cms.umd.js.map +0 -1
- package/bundles/veloceapps-sdk-core.umd.js +0 -1916
- package/bundles/veloceapps-sdk-core.umd.js.map +0 -1
- package/bundles/veloceapps-sdk-runtime.umd.js +0 -4415
- package/bundles/veloceapps-sdk-runtime.umd.js.map +0 -1
- package/bundles/veloceapps-sdk.umd.js +0 -3583
- package/bundles/veloceapps-sdk.umd.js.map +0 -1
- package/cms/modules/federated/federated.utils.d.ts +0 -1
- package/cms/package.json +0 -10
- package/cms/veloceapps-sdk-cms.d.ts +0 -5
- package/core/package.json +0 -10
- package/core/veloceapps-sdk-core.d.ts +0 -5
- package/esm2015/cms/cms.actions.js +0 -42
- package/esm2015/cms/components/element-children/element-children.component.js +0 -39
- package/esm2015/cms/components/element-children/element-children.module.js +0 -20
- package/esm2015/cms/components/element-drop-handle/element-drop-handle.component.js +0 -32
- package/esm2015/cms/components/element-drop-handle/element-drop-handle.module.js +0 -19
- package/esm2015/cms/components/element-renderer/element-renderer.component.js +0 -169
- package/esm2015/cms/components/element.component.js +0 -44
- package/esm2015/cms/components/plugin.component.js +0 -16
- package/esm2015/cms/components/preview/preview.component.js +0 -93
- package/esm2015/cms/components/preview/preview.module.js +0 -24
- package/esm2015/cms/directives/custom-template.directive.js +0 -25
- package/esm2015/cms/engine/models/entity.js +0 -18
- package/esm2015/cms/launcher.module.js +0 -24
- package/esm2015/cms/modules/federated/federated.component.js +0 -82
- package/esm2015/cms/modules/federated/federated.module.js +0 -19
- package/esm2015/cms/modules/federated/federated.types.js +0 -2
- package/esm2015/cms/modules/federated/federated.utils.js +0 -37
- package/esm2015/cms/modules/migrations/migrations.js +0 -11
- package/esm2015/cms/modules/migrations/services/migrations.service.js +0 -43
- package/esm2015/cms/modules/runtime/services/compilation.service.js +0 -84
- package/esm2015/cms/modules/runtime/services/runtime-editor.service.js +0 -27
- package/esm2015/cms/modules/runtime/services/runtime.service.js +0 -74
- package/esm2015/cms/plugins/configuration.plugin.js +0 -106
- package/esm2015/cms/plugins/io.plugin.js +0 -37
- package/esm2015/cms/plugins/region.plugin.js +0 -58
- package/esm2015/cms/plugins/script.plugin.js +0 -66
- package/esm2015/cms/services/integration.state.js +0 -40
- package/esm2015/cms/services/io-provider.service.js +0 -51
- package/esm2015/cms/services/resources.service.js +0 -50
- package/esm2015/cms/utils/element.utils.js +0 -157
- package/esm2015/cms/utils/elements-resolver.js +0 -163
- package/esm2015/cms/utils/path.utils.js +0 -56
- package/esm2015/cms/utils/ui-definition.utils.js +0 -82
- package/esm2015/cms/vendor-map.js +0 -51
- package/esm2015/core/core.module.js +0 -18
- package/esm2015/core/modules/configuration/helpers.js +0 -10
- package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +0 -87
- package/esm2015/core/modules/configuration/services/configuration.service.js +0 -177
- package/esm2015/core/modules/configuration/services/runtime-context.service.js +0 -51
- package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +0 -18
- package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +0 -150
- package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +0 -129
- package/esm2015/core/services/context.service.js +0 -53
- package/esm2015/core/services/metric-calculation/metric-calculation.service.js +0 -83
- package/esm2015/core/services/product-images.service.js +0 -30
- package/esm2015/core/services/quote-draft.service.js +0 -217
- package/esm2015/core/utils/line-item.utils.js +0 -143
- package/esm2015/core/utils/line-item.worker.js +0 -19
- package/esm2015/runtime/components/component-preview/component-preview.component.js +0 -125
- package/esm2015/runtime/components/section-renderer/section-renderer.component.js +0 -71
- package/esm2015/runtime/components/ui-runtime/runtime.component.js +0 -429
- package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +0 -109
- package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +0 -68
- package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +0 -36
- package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +0 -72
- package/esm2015/runtime/execution/components/federated/federated.component.js +0 -81
- package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +0 -65
- package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +0 -136
- package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +0 -80
- package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +0 -101
- package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +0 -150
- package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +0 -121
- package/esm2015/runtime/execution/directives/section-script.directive.js +0 -242
- package/esm2015/runtime/execution/directives/sf-query.directive.js +0 -34
- package/esm2015/runtime/execution/directives/velo-attribute.directive.js +0 -86
- package/esm2015/runtime/execution/directives/velo-port.directive.js +0 -373
- package/esm2015/runtime/execution/directives/vl-approval.directive.js +0 -22
- package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +0 -35
- package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +0 -59
- package/esm2015/runtime/execution/directives/vl-quote.directive.js +0 -41
- package/esm2015/runtime/execution/directives/vl-ramp.directive.js +0 -51
- package/esm2015/runtime/execution/runtime-execution.module.js +0 -163
- package/esm2015/runtime/execution/utils/federated.util.js +0 -37
- package/esm2015/runtime/runtime.module.js +0 -104
- package/esm2015/runtime/services/cart.service.js +0 -27
- package/esm2015/runtime/services/configuration.service.js +0 -101
- package/esm2015/runtime/services/product-model-cache.service.js +0 -30
- package/esm2015/runtime/services/runtime-context.service.js +0 -56
- package/esm2015/runtime/services/runtime-form.service.js +0 -224
- package/esm2015/runtime/services/runtime.service.js +0 -108
- package/esm2015/runtime/services/section.service.js +0 -124
- package/esm2015/runtime/types/script-registry.types.js +0 -51
- package/esm2015/runtime/utils/line-item.util.js +0 -273
- package/esm2015/src/components/dialog/dialog.component.js +0 -40
- package/esm2015/src/components/dialog/dialog.module.js +0 -19
- package/esm2015/src/components/doc-gen/doc-gen.component.js +0 -109
- package/esm2015/src/components/doc-gen/doc-gen.module.js +0 -19
- package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +0 -122
- package/esm2015/src/components/header/header.component.js +0 -336
- package/esm2015/src/components/header/metrics/metrics.component.js +0 -232
- package/esm2015/src/flow.component.js +0 -45
- package/esm2015/src/flow.module.js +0 -60
- package/esm2015/src/guards/context.guard.js +0 -84
- package/esm2015/src/guards/product-unload.guard.js +0 -43
- package/esm2015/src/guards/root.guard.js +0 -41
- package/esm2015/src/pages/assets/assets.component.js +0 -117
- package/esm2015/src/pages/assets/assets.module.js +0 -20
- package/esm2015/src/pages/catalog/catalog.component.js +0 -117
- package/esm2015/src/pages/catalog/catalog.module.js +0 -20
- package/esm2015/src/pages/debug/debug.component.js +0 -61
- package/esm2015/src/pages/empty-account/empty-account.component.js +0 -17
- package/esm2015/src/pages/empty-account/empty-account.module.js +0 -20
- package/esm2015/src/pages/legacy-product/legacy-product.component.js +0 -132
- package/esm2015/src/pages/legacy-product/legacy-product.module.js +0 -21
- package/esm2015/src/pages/product/product.component.js +0 -101
- package/esm2015/src/pages/product/product.module.js +0 -20
- package/esm2015/src/pages/record-not-found/record-not-found.component.js +0 -29
- package/esm2015/src/pages/record-not-found/record-not-found.module.js +0 -20
- package/esm2015/src/pages/remote/remote.component.js +0 -350
- package/esm2015/src/pages/remote/remote.module.js +0 -20
- package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +0 -117
- package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +0 -20
- package/esm2015/src/resolvers/flow.resolver.js +0 -62
- package/esm2015/src/resolvers/quote.resolver.js +0 -88
- package/esm2015/src/services/doc-gen.service.js +0 -33
- package/esm2015/src/services/flow-dialog.service.js +0 -124
- package/esm2015/src/services/flow-router.service.js +0 -144
- package/esm2015/src/services/flow.service.js +0 -84
- package/esm2015/src/utils/flow.utils.js +0 -22
- package/fesm2015/veloceapps-sdk-cms.js.map +0 -1
- package/fesm2015/veloceapps-sdk-core.js.map +0 -1
- package/fesm2015/veloceapps-sdk-runtime.js.map +0 -1
- package/fesm2015/veloceapps-sdk.js +0 -2953
- package/fesm2015/veloceapps-sdk.js.map +0 -1
- package/runtime/package.json +0 -10
- package/runtime/veloceapps-sdk-runtime.d.ts +0 -5
- package/veloceapps-sdk.d.ts +0 -5
- /package/{esm2015/cms/cms.default.js → esm2020/cms/cms.default.mjs} +0 -0
- /package/{esm2015/cms/cms.elements.js → esm2020/cms/cms.elements.mjs} +0 -0
- /package/{esm2015/cms/cms.layouts.js → esm2020/cms/cms.layouts.mjs} +0 -0
- /package/{esm2015/cms/components/index.js → esm2020/cms/components/index.mjs} +0 -0
- /package/{esm2015/cms/components/preview/index.js → esm2020/cms/components/preview/index.mjs} +0 -0
- /package/{esm2015/cms/components/preview/preview.types.js → esm2020/cms/components/preview/preview.types.mjs} +0 -0
- /package/{esm2015/cms/decorators/element.decorator.js → esm2020/cms/decorators/element.decorator.mjs} +0 -0
- /package/{esm2015/cms/decorators/index.js → esm2020/cms/decorators/index.mjs} +0 -0
- /package/{esm2015/cms/engine/models/plugin.js → esm2020/cms/engine/models/plugin.mjs} +0 -0
- /package/{esm2015/cms/index.js → esm2020/cms/index.mjs} +0 -0
- /package/{esm2015/cms/injection-tokens.js → esm2020/cms/injection-tokens.mjs} +0 -0
- /package/{esm2015/cms/modules/federated/default-options.js → esm2020/cms/modules/federated/default-options.mjs} +0 -0
- /package/{esm2015/cms/modules/federated/export.js → esm2020/cms/modules/federated/export.mjs} +0 -0
- /package/{esm2015/cms/modules/migrations/index.js → esm2020/cms/modules/migrations/index.mjs} +0 -0
- /package/{esm2015/cms/modules/migrations/types/migrations.types.js → esm2020/cms/modules/migrations/types/migrations.types.mjs} +0 -0
- /package/{esm2015/cms/modules/runtime/index.js → esm2020/cms/modules/runtime/index.mjs} +0 -0
- /package/{esm2015/cms/modules/runtime/tokens.js → esm2020/cms/modules/runtime/tokens.mjs} +0 -0
- /package/{esm2015/cms/modules/runtime/types/compilation.types.js → esm2020/cms/modules/runtime/types/compilation.types.mjs} +0 -0
- /package/{esm2015/cms/modules/runtime/types/runtime.actions.js → esm2020/cms/modules/runtime/types/runtime.actions.mjs} +0 -0
- /package/{esm2015/cms/services/index.js → esm2020/cms/services/index.mjs} +0 -0
- /package/{esm2015/cms/types/common.types.js → esm2020/cms/types/common.types.mjs} +0 -0
- /package/{esm2015/cms/types/configuration.types.js → esm2020/cms/types/configuration.types.mjs} +0 -0
- /package/{esm2015/cms/types/elements.types.js → esm2020/cms/types/elements.types.mjs} +0 -0
- /package/{esm2015/cms/types/index.js → esm2020/cms/types/index.mjs} +0 -0
- /package/{esm2015/cms/types/integration.types.js → esm2020/cms/types/integration.types.mjs} +0 -0
- /package/{esm2015/cms/types/layouts.types.js → esm2020/cms/types/layouts.types.mjs} +0 -0
- /package/{esm2015/cms/types/path.types.js → esm2020/cms/types/path.types.mjs} +0 -0
- /package/{esm2015/cms/utils/index.js → esm2020/cms/utils/index.mjs} +0 -0
- /package/{esm2015/cms/veloceapps-sdk-cms.js → esm2020/cms/veloceapps-sdk-cms.mjs} +0 -0
- /package/{esm2015/core/index.js → esm2020/core/index.mjs} +0 -0
- /package/{esm2015/core/modules/configuration/index.js → esm2020/core/modules/configuration/index.mjs} +0 -0
- /package/{esm2015/core/modules/configuration/types/configuration-runtime.types.js → esm2020/core/modules/configuration/types/configuration-runtime.types.mjs} +0 -0
- /package/{esm2015/core/modules/flow-configuration/index.js → esm2020/core/modules/flow-configuration/index.mjs} +0 -0
- /package/{esm2015/core/modules/flow-configuration/types/update.types.js → esm2020/core/modules/flow-configuration/types/update.types.mjs} +0 -0
- /package/{esm2015/core/modules/index.js → esm2020/core/modules/index.mjs} +0 -0
- /package/{esm2015/core/services/index.js → esm2020/core/services/index.mjs} +0 -0
- /package/{esm2015/core/services/metric-calculation/metric-calculation.types.js → esm2020/core/services/metric-calculation/metric-calculation.types.mjs} +0 -0
- /package/{esm2015/core/services/metric-calculation/metric-calculation.utils.js → esm2020/core/services/metric-calculation/metric-calculation.utils.mjs} +0 -0
- /package/{esm2015/core/types/index.js → esm2020/core/types/index.mjs} +0 -0
- /package/{esm2015/core/types/runtime.types.js → esm2020/core/types/runtime.types.mjs} +0 -0
- /package/{esm2015/core/types/ui-definition.types.js → esm2020/core/types/ui-definition.types.mjs} +0 -0
- /package/{esm2015/core/utils/index.js → esm2020/core/utils/index.mjs} +0 -0
- /package/{esm2015/core/utils/ui-definition.utils.js → esm2020/core/utils/ui-definition.utils.mjs} +0 -0
- /package/{esm2015/core/veloceapps-sdk-core.js → esm2020/core/veloceapps-sdk-core.mjs} +0 -0
- /package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- /package/{esm2015/runtime/components/index.js → esm2020/runtime/components/index.mjs} +0 -0
- /package/{esm2015/runtime/index.js → esm2020/runtime/index.mjs} +0 -0
- /package/{esm2015/runtime/services/index.js → esm2020/runtime/services/index.mjs} +0 -0
- /package/{esm2015/runtime/types/bound-data.types.js → esm2020/runtime/types/bound-data.types.mjs} +0 -0
- /package/{esm2015/runtime/types/index.js → esm2020/runtime/types/index.mjs} +0 -0
- /package/{esm2015/runtime/types/quote-states.types.js → esm2020/runtime/types/quote-states.types.mjs} +0 -0
- /package/{esm2015/runtime/types/runtime.types.js → esm2020/runtime/types/runtime.types.mjs} +0 -0
- /package/{esm2015/runtime/utils/section.utils.js → esm2020/runtime/utils/section.utils.mjs} +0 -0
- /package/{esm2015/runtime/utils/sections-binder.helper.js → esm2020/runtime/utils/sections-binder.helper.mjs} +0 -0
- /package/{esm2015/runtime/veloceapps-sdk-runtime.js → esm2020/runtime/veloceapps-sdk-runtime.mjs} +0 -0
- /package/{esm2015/src/components/dialog/dialog.types.js → esm2020/src/components/dialog/dialog.types.mjs} +0 -0
- /package/{esm2015/src/components/header/header.types.js → esm2020/src/components/header/header.types.mjs} +0 -0
- /package/{esm2015/src/components/header/metrics/index.js → esm2020/src/components/header/metrics/index.mjs} +0 -0
- /package/{esm2015/src/components/header/metrics/metrics.definitions.js → esm2020/src/components/header/metrics/metrics.definitions.mjs} +0 -0
- /package/{esm2015/src/constants.js → esm2020/src/constants.mjs} +0 -0
- /package/{esm2015/src/guards/index.js → esm2020/src/guards/index.mjs} +0 -0
- /package/{esm2015/src/index.js → esm2020/src/index.mjs} +0 -0
- /package/{esm2015/src/pages/remote/remote.types.js → esm2020/src/pages/remote/remote.types.mjs} +0 -0
- /package/{esm2015/src/services/index.js → esm2020/src/services/index.mjs} +0 -0
- /package/{esm2015/src/types/context-route.types.js → esm2020/src/types/context-route.types.mjs} +0 -0
- /package/{esm2015/src/types/flow-customization.types.js → esm2020/src/types/flow-customization.types.mjs} +0 -0
- /package/{esm2015/src/types/index.js → esm2020/src/types/index.mjs} +0 -0
- /package/{esm2015/src/types/metrics.types.js → esm2020/src/types/metrics.types.mjs} +0 -0
- /package/{esm2015/src/types/route.types.js → esm2020/src/types/route.types.mjs} +0 -0
- /package/{esm2015/src/utils/index.js → esm2020/src/utils/index.mjs} +0 -0
- /package/{esm2015/veloceapps-sdk.js → esm2020/veloceapps-sdk.mjs} +0 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { ChargeGroupUtils } from '@veloceapps/core';
|
3
|
+
import { flatten } from 'lodash';
|
4
|
+
import moment from 'moment';
|
5
|
+
import { LineItemWorker } from '../../../utils';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
export class FlowUpdateService {
|
8
|
+
update(rootLineItems, updates, charges) {
|
9
|
+
let remainingUpdates = [...updates];
|
10
|
+
let currentLevel = rootLineItems;
|
11
|
+
while (currentLevel.length && remainingUpdates.length) {
|
12
|
+
currentLevel.forEach(li => {
|
13
|
+
const unhandledUpdates = [];
|
14
|
+
remainingUpdates.forEach(update => {
|
15
|
+
let updated = false;
|
16
|
+
switch (update.dataType) {
|
17
|
+
case 'LINEITEM':
|
18
|
+
updated = this.applyLineItemUpdate(li, update, charges);
|
19
|
+
break;
|
20
|
+
case 'CHARGE':
|
21
|
+
updated = this.applyChargeUpdate(li, update);
|
22
|
+
break;
|
23
|
+
case 'GROUP_CHARGE':
|
24
|
+
updated = this.applyChargeGroupUpdate(li, update);
|
25
|
+
break;
|
26
|
+
default:
|
27
|
+
// Unknown dataType. Do not try to handle it anymore
|
28
|
+
updated = true;
|
29
|
+
}
|
30
|
+
if (!updated) {
|
31
|
+
unhandledUpdates.push(update);
|
32
|
+
}
|
33
|
+
});
|
34
|
+
remainingUpdates = unhandledUpdates;
|
35
|
+
});
|
36
|
+
currentLevel = flatten(currentLevel.map(parent => parent.lineItems));
|
37
|
+
}
|
38
|
+
}
|
39
|
+
delete(lineItems, id) {
|
40
|
+
const idsToRemove = [id];
|
41
|
+
const topLevelLineItem = lineItems.find(li => li.id === id);
|
42
|
+
if (topLevelLineItem) {
|
43
|
+
// find term-related line items (which are only top level)
|
44
|
+
// expired term line items won't be deleted
|
45
|
+
let foundTermLineItem = topLevelLineItem;
|
46
|
+
while (foundTermLineItem) {
|
47
|
+
foundTermLineItem = lineItems.find(li => foundTermLineItem && li.rampInstanceId === foundTermLineItem.id);
|
48
|
+
if (foundTermLineItem) {
|
49
|
+
idsToRemove.push(foundTermLineItem.id);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
const filtered = lineItems.filter(lineItem => !idsToRemove.includes(lineItem.id));
|
54
|
+
return filtered.map(lineItem => new LineItemWorker(lineItem).remove(id).li);
|
55
|
+
}
|
56
|
+
applyLineItemUpdate(lineItem, update, charges) {
|
57
|
+
if (lineItem.id !== update.id) {
|
58
|
+
return false;
|
59
|
+
}
|
60
|
+
switch (update.attributeType) {
|
61
|
+
case 'QTY':
|
62
|
+
lineItem.qty = update.newValue;
|
63
|
+
break;
|
64
|
+
case 'EFFECTIVE_START_DATE':
|
65
|
+
lineItem.properties['StartDate'] = moment(update.newValue).format('YYYY-MM-DD');
|
66
|
+
break;
|
67
|
+
case 'END_DATE':
|
68
|
+
lineItem.properties['EndDate'] = moment(update.newValue).format('YYYY-MM-DD');
|
69
|
+
break;
|
70
|
+
case 'PRICE_ADJUSTMENT':
|
71
|
+
{
|
72
|
+
const charge = lineItem.chargeItems.find(charge => (charges || {})[charge.chargeId]?.main);
|
73
|
+
if (charge) {
|
74
|
+
charge.priceAdjustment = update.newValue;
|
75
|
+
}
|
76
|
+
}
|
77
|
+
break;
|
78
|
+
case 'LIST_PRICE_ADJUSTMENT':
|
79
|
+
{
|
80
|
+
const charge = lineItem.chargeItems.find(charge => (charges || {})[charge.chargeId]?.main);
|
81
|
+
if (charge) {
|
82
|
+
charge.listPriceAdjustment = update.newValue;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
break;
|
86
|
+
default:
|
87
|
+
throw new Error(`Not suppored AttributeType for LineItem update: ${update.attributeType}`);
|
88
|
+
}
|
89
|
+
return true;
|
90
|
+
}
|
91
|
+
applyChargeUpdate(lineItem, update) {
|
92
|
+
const foundCharge = lineItem.chargeItems.find(({ id }) => id === update.id);
|
93
|
+
if (!foundCharge) {
|
94
|
+
return false;
|
95
|
+
}
|
96
|
+
if (update.attributeType === 'PRICE_ADJUSTMENT') {
|
97
|
+
foundCharge.priceAdjustment = update.newValue;
|
98
|
+
}
|
99
|
+
else if (update.attributeType === 'LIST_PRICE_ADJUSTMENT') {
|
100
|
+
foundCharge.listPriceAdjustment = update.newValue;
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
throw new Error(`Not suppored AttributeType for Charge Item update: ${update.attributeType}`);
|
104
|
+
}
|
105
|
+
return true;
|
106
|
+
}
|
107
|
+
applyChargeGroupUpdate(lineItem, update) {
|
108
|
+
const foundChargeGroup = ChargeGroupUtils.findChargeGroupById(update.id, lineItem);
|
109
|
+
if (!foundChargeGroup) {
|
110
|
+
return false;
|
111
|
+
}
|
112
|
+
if (update.attributeType === 'PRICE_ADJUSTMENT') {
|
113
|
+
foundChargeGroup.priceAdjustment = update.newValue;
|
114
|
+
}
|
115
|
+
else if (update.attributeType === 'LIST_PRICE_ADJUSTMENT') {
|
116
|
+
foundChargeGroup.listPriceAdjustment = update.newValue;
|
117
|
+
}
|
118
|
+
else {
|
119
|
+
throw new Error(`Not suppored AttributeType for Charge Group Item update: ${update.attributeType}`);
|
120
|
+
}
|
121
|
+
return true;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
125
|
+
FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowUpdateService });
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowUpdateService, decorators: [{
|
127
|
+
type: Injectable
|
128
|
+
}] });
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy11cGRhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvbW9kdWxlcy9mbG93LWNvbmZpZ3VyYXRpb24vc2VydmljZXMvZmxvdy11cGRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBVSxnQkFBZ0IsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJaEQsTUFBTSxPQUFPLGlCQUFpQjtJQUNyQixNQUFNLENBQUMsYUFBeUIsRUFBRSxPQUEyQixFQUFFLE9BQTRCO1FBQ2hHLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksWUFBWSxHQUFHLGFBQWEsQ0FBQztRQUVqQyxPQUFPLFlBQVksQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ3JELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sZ0JBQWdCLEdBQXVCLEVBQUUsQ0FBQztnQkFFaEQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNoQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBRXBCLFFBQVEsTUFBTSxDQUFDLFFBQVEsRUFBRTt3QkFDdkIsS0FBSyxVQUFVOzRCQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzs0QkFDeEQsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJB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UUFBUSxDQUFDO1NBQ25EO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUMvRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFFBQWtCLEVBQUUsTUFBd0I7UUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLGtCQUFrQixFQUFFO1lBQy9DLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQ3BEO2FBQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLHVCQUF1QixFQUFFO1lBQzNELGdCQUFnQixDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDeEQ7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ3JHO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs4R0FsSVUsaUJBQWlCO2tIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJnZSwgQ2hhcmdlR3JvdXBVdGlscywgTGluZUl0ZW0gfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIGZsYXR0ZW4gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgTGluZUl0ZW1Xb3JrZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGbG93VXBkYXRlUGFyYW1zIH0gZnJvbSAnLi4vdHlwZXMvdXBkYXRlLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZsb3dVcGRhdGVTZXJ2aWNlIHtcbiAgcHVibGljIHVwZGF0ZShyb290TGluZUl0ZW1zOiBMaW5lSXRlbVtdLCB1cGRhdGVzOiBGbG93VXBkYXRlUGFyYW1zW10sIGNoYXJnZXM/OiBEaWN0aW9uYXJ5PENoYXJnZT4pOiB2b2lkIHtcbiAgICBsZXQgcmVtYWluaW5nVXBkYXRlcyA9IFsuLi51cGRhdGVzXTtcbiAgICBsZXQgY3VycmVudExldmVsID0gcm9vdExpbmVJdGVtcztcblxuICAgIHdoaWxlIChjdXJyZW50TGV2ZWwubGVuZ3RoICYmIHJlbWFpbmluZ1VwZGF0ZXMubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50TGV2ZWwuZm9yRWFjaChsaSA9PiB7XG4gICAgICAgIGNvbnN0IHVuaGFuZGxlZFVwZGF0ZXM6IEZsb3dVcGRhdGVQYXJhbXNbXSA9IFtdO1xuXG4gICAgICAgIHJlbWFpbmluZ1VwZGF0ZXMuZm9yRWFjaCh1cGRhdGUgPT4ge1xuICAgICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG5cbiAgICAgICAgICBzd2l0Y2ggKHVwZGF0ZS5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnTElORUlURU0nOlxuICAgICAgICAgICAgICB1cGRhdGVkID0gdGhpcy5hcHBseUxpbmVJdGVtVXBkYXRlKGxpLCB1cGRhdGUsIGNoYXJnZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NIQVJHRSc6XG4gICAgICAgICAgICAgIHVwZGF0ZWQgPSB0aGlzLmFwcGx5Q2hhcmdlVXBkYXRlKGxpLCB1cGRhdGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0dST1VQX0NIQVJHRSc6XG4gICAgICAgICAgICAgIHVwZGF0ZWQgPSB0aGlzLmFwcGx5Q2hhcmdlR3JvdXBVcGRhdGUobGksIHVwZGF0ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgLy8gVW5rbm93biBkYXRhVHlwZS4gRG8gbm90IHRyeSB0byBoYW5kbGUgaXQgYW55bW9yZVxuICAgICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHVuaGFuZGxlZFVwZGF0ZXMucHVzaCh1cGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVtYWluaW5nVXBkYXRlcyA9IHVuaGFuZGxlZFVwZGF0ZXM7XG4gICAgICB9KTtcblxuICAgICAgY3VycmVudExldmVsID0gZmxhdHRlbihjdXJyZW50TGV2ZWwubWFwKHBhcmVudCA9PiBwYXJlbnQubGluZUl0ZW1zKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZShsaW5lSXRlbXM6IExpbmVJdGVtW10sIGlkOiBzdHJpbmcpOiBMaW5lSXRlbVtdIHtcbiAgICBjb25zdCBpZHNUb1JlbW92ZTogc3RyaW5nW10gPSBbaWRdO1xuICAgIGNvbnN0IHRvcExldmVsTGluZUl0ZW0gPSBsaW5lSXRlbXMuZmluZChsaSA9PiBsaS5pZCA9PT0gaWQpO1xuXG4gICAgaWYgKHRvcExldmVsTGluZUl0ZW0pIHtcbiAgICAgIC8vIGZpbmQgdGVybS1yZWxhdGVkIGxpbmUgaXRlbXMgKHdoaWNoIGFyZSBvbmx5IHRvcCBsZXZlbClcbiAgICAgIC8vIGV4cGlyZWQgdGVybSBsaW5lIGl0ZW1zIHdvbid0IGJlIGRlbGV0ZWRcbiAgICAgIGxldCBmb3VuZFRlcm1MaW5lSXRlbTogTGluZUl0ZW0gfCB1bmRlZmluZWQgPSB0b3BMZXZlbExpbmVJdGVtO1xuXG4gICAgICB3aGlsZSAoZm91bmRUZXJtTGluZUl0ZW0pIHtcbiAgICAgICAgZm91bmRUZXJtTGluZUl0ZW0gPSBsaW5lSXRlbXMuZmluZChsaSA9PiBmb3VuZFRlcm1MaW5lSXRlbSAmJiBsaS5yYW1wSW5zdGFuY2VJZCA9PT0gZm91bmRUZXJtTGluZUl0ZW0uaWQpO1xuICAgICAgICBpZiAoZm91bmRUZXJtTGluZUl0ZW0pIHtcbiAgICAgICAgICBpZHNUb1JlbW92ZS5wdXNoKGZvdW5kVGVybUxpbmVJdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkID0gbGluZUl0ZW1zLmZpbHRlcihsaW5lSXRlbSA9PiAhaWRzVG9SZW1vdmUuaW5jbHVkZXMobGluZUl0ZW0uaWQpKTtcbiAgICByZXR1cm4gZmlsdGVyZWQubWFwKGxpbmVJdGVtID0+IG5ldyBMaW5lSXRlbVdvcmtlcihsaW5lSXRlbSkucmVtb3ZlKGlkKS5saSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZUl0ZW1VcGRhdGUobGluZUl0ZW06IExpbmVJdGVtLCB1cGRhdGU6IEZsb3dVcGRhdGVQYXJhbXMsIGNoYXJnZXM/OiBEaWN0aW9uYXJ5PENoYXJnZT4pOiBib29sZWFuIHtcbiAgICBpZiAobGluZUl0ZW0uaWQgIT09IHVwZGF0ZS5pZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodXBkYXRlLmF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ1FUWSc6XG4gICAgICAgIGxpbmVJdGVtLnF0eSA9IHVwZGF0ZS5uZXdWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFRkZFQ1RJVkVfU1RBUlRfREFURSc6XG4gICAgICAgIGxpbmVJdGVtLnByb3BlcnRpZXNbJ1N0YXJ0RGF0ZSddID0gbW9tZW50KHVwZGF0ZS5uZXdWYWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRU5EX0RBVEUnOlxuICAgICAgICBsaW5lSXRlbS5wcm9wZXJ0aWVzWydFbmREYXRlJ10gPSBtb21lbnQodXBkYXRlLm5ld1ZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQUklDRV9BREpVU1RNRU5UJzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGNoYXJnZSA9IGxpbmVJdGVtLmNoYXJnZUl0ZW1zLmZpbmQoY2hhcmdlID0+IChjaGFyZ2VzIHx8IHt9KVtjaGFyZ2UuY2hhcmdlSWRdPy5tYWluKTtcbiAgICAgICAgICBpZiAoY2hhcmdlKSB7XG4gICAgICAgICAgICBjaGFyZ2UucHJpY2VBZGp1c3RtZW50ID0gdXBkYXRlLm5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0xJU1RfUFJJQ0VfQURKVVNUTUVOVCc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBjaGFyZ2UgPSBsaW5lSXRlbS5jaGFyZ2VJdGVtcy5maW5kKGNoYXJnZSA9PiAoY2hhcmdlcyB8fCB7fSlbY2hhcmdlLmNoYXJnZUlkXT8ubWFpbik7XG4gICAgICAgICAgaWYgKGNoYXJnZSkge1xuICAgICAgICAgICAgY2hhcmdlLmxpc3RQcmljZUFkanVzdG1lbnQgPSB1cGRhdGUubmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9yZWQgQXR0cmlidXRlVHlwZSBmb3IgTGluZUl0ZW0gdXBkYXRlOiAke3VwZGF0ZS5hdHRyaWJ1dGVUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNoYXJnZVVwZGF0ZShsaW5lSXRlbTogTGluZUl0ZW0sIHVwZGF0ZTogRmxvd1VwZGF0ZVBhcmFtcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvdW5kQ2hhcmdlID0gbGluZUl0ZW0uY2hhcmdlSXRlbXMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gdXBkYXRlLmlkKTtcbiAgICBpZiAoIWZvdW5kQ2hhcmdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZS5hdHRyaWJ1dGVUeXBlID09PSAnUFJJQ0VfQURKVVNUTUVOVCcpIHtcbiAgICAgIGZvdW5kQ2hhcmdlLnByaWNlQWRqdXN0bWVudCA9IHVwZGF0ZS5uZXdWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHVwZGF0ZS5hdHRyaWJ1dGVUeXBlID09PSAnTElTVF9QUklDRV9BREpVU1RNRU5UJykge1xuICAgICAgZm91bmRDaGFyZ2UubGlzdFByaWNlQWRqdXN0bWVudCA9IHVwZGF0ZS5uZXdWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9yZWQgQXR0cmlidXRlVHlwZSBmb3IgQ2hhcmdlIEl0ZW0gdXBkYXRlOiAke3VwZGF0ZS5hdHRyaWJ1dGVUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNoYXJnZUdyb3VwVXBkYXRlKGxpbmVJdGVtOiBMaW5lSXRlbSwgdXBkYXRlOiBGbG93VXBkYXRlUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmRDaGFyZ2VHcm91cCA9IENoYXJnZUdyb3VwVXRpbHMuZmluZENoYXJnZUdyb3VwQnlJZCh1cGRhdGUuaWQsIGxpbmVJdGVtKTtcbiAgICBpZiAoIWZvdW5kQ2hhcmdlR3JvdXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlLmF0dHJpYnV0ZVR5cGUgPT09ICdQUklDRV9BREpVU1RNRU5UJykge1xuICAgICAgZm91bmRDaGFyZ2VHcm91cC5wcmljZUFkanVzdG1lbnQgPSB1cGRhdGUubmV3VmFsdWU7XG4gICAgfSBlbHNlIGlmICh1cGRhdGUuYXR0cmlidXRlVHlwZSA9PT0gJ0xJU1RfUFJJQ0VfQURKVVNUTUVOVCcpIHtcbiAgICAgIGZvdW5kQ2hhcmdlR3JvdXAubGlzdFByaWNlQWRqdXN0bWVudCA9IHVwZGF0ZS5uZXdWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9yZWQgQXR0cmlidXRlVHlwZSBmb3IgQ2hhcmdlIEdyb3VwIEl0ZW0gdXBkYXRlOiAke3VwZGF0ZS5hdHRyaWJ1dGVUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { ContextApiService } from '@veloceapps/api';
|
3
|
+
import { ConfigurationContext } from '@veloceapps/core';
|
4
|
+
import { merge } from 'lodash';
|
5
|
+
import { BehaviorSubject } from 'rxjs';
|
6
|
+
import { filter, map, tap } from 'rxjs/operators';
|
7
|
+
import * as i0 from "@angular/core";
|
8
|
+
import * as i1 from "@veloceapps/api";
|
9
|
+
export class ContextService {
|
10
|
+
constructor(contextApiService) {
|
11
|
+
this.contextApiService = contextApiService;
|
12
|
+
this.context = new BehaviorSubject(null);
|
13
|
+
}
|
14
|
+
get isInitialized() {
|
15
|
+
return Boolean(this.context.value);
|
16
|
+
}
|
17
|
+
get mode() {
|
18
|
+
return this.resolve().properties.mode;
|
19
|
+
}
|
20
|
+
resolve() {
|
21
|
+
if (!this.context.value) {
|
22
|
+
throw new Error('Context is not initialized yet!');
|
23
|
+
}
|
24
|
+
return { ...this.context.value };
|
25
|
+
}
|
26
|
+
resolve$() {
|
27
|
+
return this.context.pipe(filter((ctx) => Boolean(ctx)));
|
28
|
+
}
|
29
|
+
create(headerId, mode) {
|
30
|
+
return this.contextApiService.getContext(headerId, mode).pipe(tap(context => this.context.next(merge(new ConfigurationContext(headerId, mode), context))), map(() => this.resolve()));
|
31
|
+
}
|
32
|
+
update(partialContext) {
|
33
|
+
const originalContext = this.resolve();
|
34
|
+
const updatedContext = {
|
35
|
+
...originalContext,
|
36
|
+
...partialContext,
|
37
|
+
properties: {
|
38
|
+
...originalContext.properties,
|
39
|
+
...partialContext.properties,
|
40
|
+
},
|
41
|
+
};
|
42
|
+
this.context.next(updatedContext);
|
43
|
+
return updatedContext;
|
44
|
+
}
|
45
|
+
set(context) {
|
46
|
+
const originalContext = this.resolve();
|
47
|
+
const updatedContext = {
|
48
|
+
...originalContext,
|
49
|
+
...context,
|
50
|
+
};
|
51
|
+
this.context.next(updatedContext);
|
52
|
+
return updatedContext;
|
53
|
+
}
|
54
|
+
delete() {
|
55
|
+
this.context.next(null);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ContextService, deps: [{ token: i1.ContextApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
59
|
+
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ContextService, providedIn: 'root' });
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ContextService, decorators: [{
|
61
|
+
type: Injectable,
|
62
|
+
args: [{ providedIn: 'root' }]
|
63
|
+
}], ctorParameters: function () { return [{ type: i1.ContextApiService }]; } });
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQTRCLE1BQU0sa0JBQWtCLENBQUM7QUFDbEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHbEQsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFGaEQsWUFBTyxHQUFHLElBQUksZUFBZSxDQUE4QixJQUFJLENBQUMsQ0FBQztJQUVkLENBQUM7SUFFNUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUErQixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQWdCLEVBQUUsSUFBOEI7UUFDNUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQzNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUEwQixDQUFDLENBQ2xELENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQTZDO1FBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV2QyxNQUFNLGNBQWMsR0FBeUI7WUFDM0MsR0FBRyxlQUFlO1lBQ2xCLEdBQUksY0FBdUM7WUFDM0MsVUFBVSxFQUFFO2dCQUNWLEdBQUcsZUFBZSxDQUFDLFVBQVU7Z0JBQzdCLEdBQUcsY0FBYyxDQUFDLFVBQVU7YUFDN0I7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbEMsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxPQUE2QjtRQUN0QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFdkMsTUFBTSxjQUFjLEdBQXlCO1lBQzNDLEdBQUcsZUFBZTtZQUNsQixHQUFHLE9BQU87U0FDWCxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbEMsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDOzsyR0FoRVUsY0FBYzsrR0FBZCxjQUFjLGNBREQsTUFBTTsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0QXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQ29udGV4dCwgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29udGV4dFNlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRleHQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbmZpZ3VyYXRpb25Db250ZXh0IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0QXBpU2VydmljZTogQ29udGV4dEFwaVNlcnZpY2UpIHt9XG5cbiAgcHVibGljIGdldCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuY29udGV4dC52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vZGUoKTogQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlKCkucHJvcGVydGllcy5tb2RlO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmUoKTogQ29uZmlndXJhdGlvbkNvbnRleHQge1xuICAgIGlmICghdGhpcy5jb250ZXh0LnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRleHQgaXMgbm90IGluaXRpYWxpemVkIHlldCEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi50aGlzLmNvbnRleHQudmFsdWUgfTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlJCgpOiBPYnNlcnZhYmxlPENvbmZpZ3VyYXRpb25Db250ZXh0PiB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5waXBlKGZpbHRlcigoY3R4KTogY3R4IGlzIENvbmZpZ3VyYXRpb25Db250ZXh0ID0+IEJvb2xlYW4oY3R4KSkpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShoZWFkZXJJZDogc3RyaW5nLCBtb2RlOiBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUpOiBPYnNlcnZhYmxlPENvbmZpZ3VyYXRpb25Db250ZXh0PiB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dEFwaVNlcnZpY2UuZ2V0Q29udGV4dChoZWFkZXJJZCwgbW9kZSkucGlwZShcbiAgICAgIHRhcChjb250ZXh0ID0+IHRoaXMuY29udGV4dC5uZXh0KG1lcmdlKG5ldyBDb25maWd1cmF0aW9uQ29udGV4dChoZWFkZXJJZCwgbW9kZSksIGNvbnRleHQpKSksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5yZXNvbHZlKCkgYXMgQ29uZmlndXJhdGlvbkNvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKHBhcnRpYWxDb250ZXh0OiBQYXJ0aWFsPENvbmZpZ3VyYXRpb25Db250ZXh0Pik6IENvbmZpZ3VyYXRpb25Db250ZXh0IHtcbiAgICBjb25zdCBvcmlnaW5hbENvbnRleHQgPSB0aGlzLnJlc29sdmUoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRDb250ZXh0OiBDb25maWd1cmF0aW9uQ29udGV4dCA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQ29udGV4dCxcbiAgICAgIC4uLihwYXJ0aWFsQ29udGV4dCBhcyBDb25maWd1cmF0aW9uQ29udGV4dCksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLm9yaWdpbmFsQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAuLi5wYXJ0aWFsQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5jb250ZXh0Lm5leHQodXBkYXRlZENvbnRleHQpO1xuXG4gICAgcmV0dXJuIHVwZGF0ZWRDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIHNldChjb250ZXh0OiBDb25maWd1cmF0aW9uQ29udGV4dCk6IENvbmZpZ3VyYXRpb25Db250ZXh0IHtcbiAgICBjb25zdCBvcmlnaW5hbENvbnRleHQgPSB0aGlzLnJlc29sdmUoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRDb250ZXh0OiBDb25maWd1cmF0aW9uQ29udGV4dCA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQ29udGV4dCxcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgfTtcblxuICAgIHRoaXMuY29udGV4dC5uZXh0KHVwZGF0ZWRDb250ZXh0KTtcblxuICAgIHJldHVybiB1cGRhdGVkQ29udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0Lm5leHQobnVsbCk7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,85 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { ConfigurationSettingsApiService } from '@veloceapps/api';
|
3
|
+
import { uniq } from 'lodash';
|
4
|
+
import { combineLatest, Subject, take } from 'rxjs';
|
5
|
+
import { FlowConfigurationService } from '../../modules/flow-configuration/services/flow-configuration.service';
|
6
|
+
import { QuoteDraftService } from '../quote-draft.service';
|
7
|
+
import { calculateMetricByMethod } from './metric-calculation.utils';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
import * as i1 from "../quote-draft.service";
|
10
|
+
import * as i2 from "../../modules/flow-configuration/services/flow-configuration.service";
|
11
|
+
import * as i3 from "@veloceapps/api";
|
12
|
+
export class MetricsCalculationService {
|
13
|
+
get onMetricsUpdate$() {
|
14
|
+
return this.metricsUpdated$.asObservable();
|
15
|
+
}
|
16
|
+
constructor(quoteDraftService, flowConfiguration, settingsService) {
|
17
|
+
this.quoteDraftService = quoteDraftService;
|
18
|
+
this.flowConfiguration = flowConfiguration;
|
19
|
+
this.settingsService = settingsService;
|
20
|
+
this.metricsUpdated$ = new Subject();
|
21
|
+
this.quoteMetricsSettings = {};
|
22
|
+
this.metricsCalculationMethodMap = {};
|
23
|
+
this.metricsData = {};
|
24
|
+
this.activeMetricRules = [];
|
25
|
+
this.activeMetricRules = this.flowConfiguration.activeMetricsSnapshot.filter(metricRule => metricRule.metrics.some(metric => !!metric.totalName));
|
26
|
+
combineLatest([
|
27
|
+
this.quoteDraftService.currentState$,
|
28
|
+
this.settingsService.fetchSetting('QUOTE_LEVEL_METRIC_CALCULATION_METHOD').pipe(take(1)),
|
29
|
+
]).subscribe(([lineItems, setting]) => {
|
30
|
+
let settingsData = {};
|
31
|
+
try {
|
32
|
+
settingsData = JSON.parse(setting?.value || '{}');
|
33
|
+
}
|
34
|
+
catch (error) {
|
35
|
+
settingsData = {};
|
36
|
+
}
|
37
|
+
this.quoteMetricsSettings = settingsData;
|
38
|
+
this.updateMetrics(lineItems);
|
39
|
+
});
|
40
|
+
}
|
41
|
+
getMetricValue(metric) {
|
42
|
+
return this.metricsData[metric] || 0;
|
43
|
+
}
|
44
|
+
updateMetrics(lineItems) {
|
45
|
+
const metricKeys = this.collectMetricKeys(lineItems).filter(key => !key.includes('Effective_'));
|
46
|
+
this.metricsCalculationMethodMap = this.buildMetricsCalculationMethods(metricKeys, this.metricsCalculationMethodMap);
|
47
|
+
this.metricsData = metricKeys.reduce((acc, key) => ({ ...acc, [key]: this.calculateMetric(lineItems, key) }), {});
|
48
|
+
this.metricsUpdated$.next();
|
49
|
+
}
|
50
|
+
calculateMetric(lineItems, metric) {
|
51
|
+
return calculateMetricByMethod(lineItems, metric, this.metricsCalculationMethodMap[metric] || 'sum');
|
52
|
+
}
|
53
|
+
buildMetricsCalculationMethods(metricKeys, initial) {
|
54
|
+
return metricKeys.reduce((acc, name) => {
|
55
|
+
if (acc[name]) {
|
56
|
+
return acc;
|
57
|
+
}
|
58
|
+
acc = { ...acc, [name]: 'sum' };
|
59
|
+
const metricRule = this.getMetricRuleByTotalMetricName(name);
|
60
|
+
const settingKey = metricRule?.metrics?.find(metric => metric.totalName === name)?.name || name;
|
61
|
+
if (this.quoteMetricsSettings[settingKey]) {
|
62
|
+
acc = { ...acc, [name]: this.quoteMetricsSettings[settingKey] };
|
63
|
+
}
|
64
|
+
return acc;
|
65
|
+
}, initial);
|
66
|
+
}
|
67
|
+
collectMetricKeys(lineItems) {
|
68
|
+
const keys = [];
|
69
|
+
lineItems.forEach(lineItem => {
|
70
|
+
keys.push(...Object.keys(lineItem.totalMetrics || {}));
|
71
|
+
keys.push(...this.collectMetricKeys(lineItem.lineItems));
|
72
|
+
});
|
73
|
+
return uniq(keys);
|
74
|
+
}
|
75
|
+
getMetricRuleByTotalMetricName(name) {
|
76
|
+
return this.activeMetricRules.find(metricRule => metricRule.metrics.find(metric => metric.totalName === name));
|
77
|
+
}
|
78
|
+
}
|
79
|
+
MetricsCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsCalculationService, deps: [{ token: i1.QuoteDraftService }, { token: i2.FlowConfigurationService }, { token: i3.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
80
|
+
MetricsCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsCalculationService, providedIn: 'root' });
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsCalculationService, decorators: [{
|
82
|
+
type: Injectable,
|
83
|
+
args: [{ providedIn: 'root' }]
|
84
|
+
}], ctorParameters: function () { return [{ type: i1.QuoteDraftService }, { type: i2.FlowConfigurationService }, { type: i3.ConfigurationSettingsApiService }]; } });
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljLWNhbGN1bGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL3NlcnZpY2VzL21ldHJpYy1jYWxjdWxhdGlvbi9tZXRyaWMtY2FsY3VsYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxFLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUdyRSxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBUUQsWUFDVSxpQkFBb0MsRUFDcEMsaUJBQTJDLEVBQzNDLGVBQWdEO1FBRmhELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQUMzQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUM7UUFUbEQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3RDLHlCQUFvQixHQUF3QyxFQUFFLENBQUM7UUFDL0QsZ0NBQTJCLEdBQXdDLEVBQUUsQ0FBQztRQUN0RSxnQkFBVyxHQUF1QixFQUFFLENBQUM7UUFDckMsc0JBQWlCLEdBQWlCLEVB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aW1wb3J0IHsgQ29uZmlndXJhdGlvblNldHRpbmdzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBMaW5lSXRlbSwgTWV0cmljUnVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL2Zsb3ctY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9mbG93LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBRdW90ZURyYWZ0U2VydmljZSB9IGZyb20gJy4uL3F1b3RlLWRyYWZ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWV0cmljQ2FsY3VsYXRpb25NZXRob2QgfSBmcm9tICcuL21ldHJpYy1jYWxjdWxhdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVNZXRyaWNCeU1ldGhvZCB9IGZyb20gJy4vbWV0cmljLWNhbGN1bGF0aW9uLnV0aWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIGdldCBvbk1ldHJpY3NVcGRhdGUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3NVcGRhdGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWV0cmljc1VwZGF0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBxdW90ZU1ldHJpY3NTZXR0aW5nczogRGljdGlvbmFyeTxNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZD4gPSB7fTtcbiAgcHJpdmF0ZSBtZXRyaWNzQ2FsY3VsYXRpb25NZXRob2RNYXA6IERpY3Rpb25hcnk8TWV0cmljQ2FsY3VsYXRpb25NZXRob2Q+ID0ge307XG4gIHByaXZhdGUgbWV0cmljc0RhdGE6IERpY3Rpb25hcnk8bnVtYmVyPiA9IHt9O1xuICBwcml2YXRlIGFjdGl2ZU1ldHJpY1J1bGVzOiBNZXRyaWNSdWxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dDb25maWd1cmF0aW9uOiBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXR0aW5nc0FwaVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuYWN0aXZlTWV0cmljUnVsZXMgPSB0aGlzLmZsb3dDb25maWd1cmF0aW9uLmFjdGl2ZU1ldHJpY3NTbmFwc2hvdC5maWx0ZXIobWV0cmljUnVsZSA9PlxuICAgICAgbWV0cmljUnVsZS5tZXRyaWNzLnNvbWUobWV0cmljID0+ICEhbWV0cmljLnRvdGFsTmFtZSksXG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5jdXJyZW50U3RhdGUkLFxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZmV0Y2hTZXR0aW5nKCdRVU9URV9MRVZFTF9NRVRSSUNfQ0FMQ1VMQVRJT05fTUVUSE9EJykucGlwZSh0YWtlKDEpKSxcbiAgICBdKS5zdWJzY3JpYmUoKFtsaW5lSXRlbXMsIHNldHRpbmddKSA9PiB7XG4gICAgICBsZXQgc2V0dGluZ3NEYXRhOiBEaWN0aW9uYXJ5PE1ldHJpY0NhbGN1bGF0aW9uTWV0aG9kPiA9IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0dGluZ3NEYXRhID0gSlNPTi5wYXJzZShzZXR0aW5nPy52YWx1ZSB8fCAne30nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldHRpbmdzRGF0YSA9IHt9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnF1b3RlTWV0cmljc1NldHRpbmdzID0gc2V0dGluZ3NEYXRhO1xuXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY3MobGluZUl0ZW1zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRyaWNWYWx1ZShtZXRyaWM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljc0RhdGFbbWV0cmljXSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNZXRyaWNzKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY0tleXMgPSB0aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtcykuZmlsdGVyKGtleSA9PiAha2V5LmluY2x1ZGVzKCdFZmZlY3RpdmVfJykpO1xuICAgIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uTWV0aG9kTWFwID0gdGhpcy5idWlsZE1ldHJpY3NDYWxjdWxhdGlvbk1ldGhvZHMoXG4gICAgICBtZXRyaWNLZXlzLFxuICAgICAgdGhpcy5tZXRyaWNzQ2FsY3VsYXRpb25NZXRob2RNYXAsXG4gICAgKTtcblxuICAgIHRoaXMubWV0cmljc0RhdGEgPSBtZXRyaWNLZXlzLnJlZHVjZShcbiAgICAgIChhY2M6IERpY3Rpb25hcnk8bnVtYmVyPiwga2V5OiBzdHJpbmcpID0+ICh7IC4uLmFjYywgW2tleV06IHRoaXMuY2FsY3VsYXRlTWV0cmljKGxpbmVJdGVtcywga2V5KSB9KSxcbiAgICAgIHt9LFxuICAgICk7XG5cbiAgICB0aGlzLm1ldHJpY3NVcGRhdGVkJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1ldHJpYyhsaW5lSXRlbXM6IExpbmVJdGVtW10sIG1ldHJpYzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlTWV0cmljQnlNZXRob2QobGluZUl0ZW1zLCBtZXRyaWMsIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uTWV0aG9kTWFwW21ldHJpY10gfHwgJ3N1bScpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE1ldHJpY3NDYWxjdWxhdGlvbk1ldGhvZHMoXG4gICAgbWV0cmljS2V5czogc3RyaW5nW10sXG4gICAgaW5pdGlhbDogRGljdGlvbmFyeTxNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZD4sXG4gICk6IERpY3Rpb25hcnk8TWV0cmljQ2FsY3VsYXRpb25NZXRob2Q+IHtcbiAgICByZXR1cm4gbWV0cmljS2V5cy5yZWR1Y2UoKGFjYzogRGljdGlvbmFyeTxNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZD4sIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGFjY1tuYW1lXSkge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBhY2MgPSB7IC4uLmFjYywgW25hbWVdOiAnc3VtJyB9O1xuXG4gICAgICBjb25zdCBtZXRyaWNSdWxlID0gdGhpcy5nZXRNZXRyaWNSdWxlQnlUb3RhbE1ldHJpY05hbWUobmFtZSk7XG4gICAgICBjb25zdCBzZXR0aW5nS2V5ID0gbWV0cmljUnVsZT8ubWV0cmljcz8uZmluZChtZXRyaWMgPT4gbWV0cmljLnRvdGFsTmFtZSA9PT0gbmFtZSk/Lm5hbWUgfHwgbmFtZTtcblxuICAgICAgaWYgKHRoaXMucXVvdGVNZXRyaWNzU2V0dGluZ3Nbc2V0dGluZ0tleV0pIHtcbiAgICAgICAgYWNjID0geyAuLi5hY2MsIFtuYW1lXTogdGhpcy5xdW90ZU1ldHJpY3NTZXR0aW5nc1tzZXR0aW5nS2V5XSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsaW5lSXRlbXMuZm9yRWFjaChsaW5lSXRlbSA9PiB7XG4gICAgICBrZXlzLnB1c2goLi4uT2JqZWN0LmtleXMobGluZUl0ZW0udG90YWxNZXRyaWNzIHx8IHt9KSk7XG4gICAgICBrZXlzLnB1c2goLi4udGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbS5saW5lSXRlbXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcShrZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0cmljUnVsZUJ5VG90YWxNZXRyaWNOYW1lKG5hbWU6IHN0cmluZyk6IE1ldHJpY1J1bGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZU1ldHJpY1J1bGVzLmZpbmQobWV0cmljUnVsZSA9PiBtZXRyaWNSdWxlLm1ldHJpY3MuZmluZChtZXRyaWMgPT4gbWV0cmljLnRvdGFsTmFtZSA9PT0gbmFtZSkpO1xuICB9XG59XG4iXX0=
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { ProductApiService } from '@veloceapps/api';
|
3
|
+
import { BehaviorSubject, catchError, distinctUntilChanged, map, of, tap } from 'rxjs';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
import * as i1 from "@veloceapps/api";
|
6
|
+
export class ProductImagesService {
|
7
|
+
constructor(productApiService) {
|
8
|
+
this.productApiService = productApiService;
|
9
|
+
this.imagesMap$ = new BehaviorSubject({});
|
10
|
+
}
|
11
|
+
getImageUrl$(productId) {
|
12
|
+
if (this.imagesMap$.value[productId] == null) {
|
13
|
+
this.imagesMap$.next({ ...this.imagesMap$.value, [productId]: '' });
|
14
|
+
this.fetchProductImage(productId);
|
15
|
+
}
|
16
|
+
return this.imagesMap$.pipe(map(imagesMap => imagesMap[productId]), distinctUntilChanged());
|
17
|
+
}
|
18
|
+
fetchProductImage(productId) {
|
19
|
+
this.productApiService
|
20
|
+
.fetchImage$(productId)
|
21
|
+
.pipe(map(file => URL.createObjectURL(file)), catchError(() => of('')), tap(url => this.imagesMap$.next({ ...this.imagesMap$.value, [productId]: url })))
|
22
|
+
.subscribe();
|
23
|
+
}
|
24
|
+
}
|
25
|
+
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.ProductApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
26
|
+
ProductImagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProductImagesService, providedIn: 'root' });
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProductImagesService, decorators: [{
|
28
|
+
type: Injectable,
|
29
|
+
args: [{ providedIn: 'root' }]
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1pbWFnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvc2VydmljZXMvcHJvZHVjdC1pbWFnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFHbkcsTUFBTSxPQUFPLG9CQUFvQjtJQUcvQixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUZoRCxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBRU4sQ0FBQztJQUVyRCxZQUFZLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6QixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDdEMsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUN6QyxJQUFJLENBQUMsaUJBQWlCO2FBQ25CLFdBQVcsQ0FBQyxTQUFTLENBQUM7YUFDdEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQ2pGO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQzs7aUhBMUJVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByb2R1Y3RBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdEltYWdlc1NlcnZpY2Uge1xuICBwcml2YXRlIGltYWdlc01hcCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpY3Rpb25hcnk8c3RyaW5nPj4oe30pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvZHVjdEFwaVNlcnZpY2U6IFByb2R1Y3RBcGlTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBnZXRJbWFnZVVybCQocHJvZHVjdElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5pbWFnZXNNYXAkLnZhbHVlW3Byb2R1Y3RJZF0gPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbWFnZXNNYXAkLm5leHQoeyAuLi50aGlzLmltYWdlc01hcCQudmFsdWUsIFtwcm9kdWN0SWRdOiAnJyB9KTtcbiAgICAgIHRoaXMuZmV0Y2hQcm9kdWN0SW1hZ2UocHJvZHVjdElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbWFnZXNNYXAkLnBpcGUoXG4gICAgICBtYXAoaW1hZ2VzTWFwID0+IGltYWdlc01hcFtwcm9kdWN0SWRdKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hQcm9kdWN0SW1hZ2UocHJvZHVjdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnByb2R1Y3RBcGlTZXJ2aWNlXG4gICAgICAuZmV0Y2hJbWFnZSQocHJvZHVjdElkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWxlID0+IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKCcnKSksXG4gICAgICAgIHRhcCh1cmwgPT4gdGhpcy5pbWFnZXNNYXAkLm5leHQoeyAuLi50aGlzLmltYWdlc01hcCQudmFsdWUsIFtwcm9kdWN0SWRdOiB1cmwgfSkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|
@@ -0,0 +1,232 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { PriceApiService, QuoteApiService } from '@veloceapps/api';
|
3
|
+
import { ConfigurationContextMode } from '@veloceapps/core';
|
4
|
+
import { isEqual } from 'lodash';
|
5
|
+
import { BehaviorSubject, combineLatest, noop, zip } from 'rxjs';
|
6
|
+
import { filter, map, shareReplay, skip, switchMap, take, tap } from 'rxjs/operators';
|
7
|
+
import { ContextService } from './context.service';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
import * as i1 from "./context.service";
|
10
|
+
import * as i2 from "@veloceapps/api";
|
11
|
+
export class QuoteDraftService {
|
12
|
+
get isInitialized() {
|
13
|
+
return this.isInitializedSubj$.getValue();
|
14
|
+
}
|
15
|
+
set isInitialized(value) {
|
16
|
+
if (this.isInitialized !== value) {
|
17
|
+
this.isInitializedSubj$.next(value);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
get hasUnsavedChanges() {
|
21
|
+
return this._hasUnsavedChanges;
|
22
|
+
}
|
23
|
+
set hasUnsavedChanges(value) {
|
24
|
+
this._hasUnsavedChanges = value;
|
25
|
+
if (!this._hasUnsavedChanges) {
|
26
|
+
this.initialCurrentState = this.quoteDraft?.currentState ?? [];
|
27
|
+
}
|
28
|
+
}
|
29
|
+
get hasProducts$() {
|
30
|
+
return this.quoteSubj$.pipe(map(() => this.hasProducts));
|
31
|
+
}
|
32
|
+
get hasProducts() {
|
33
|
+
const quoteDraft = this.quoteSubj$.value;
|
34
|
+
return Boolean(quoteDraft && quoteDraft.currentState.length > 0);
|
35
|
+
}
|
36
|
+
constructor(context, quoteApiService, priceApiService) {
|
37
|
+
this.context = context;
|
38
|
+
this.quoteApiService = quoteApiService;
|
39
|
+
this.priceApiService = priceApiService;
|
40
|
+
this.quoteSubj$ = new BehaviorSubject(null);
|
41
|
+
this.resetSubj$ = new BehaviorSubject(true);
|
42
|
+
this.isInitializedSubj$ = new BehaviorSubject(false);
|
43
|
+
this.initialCurrentState = [];
|
44
|
+
this._hasUnsavedChanges = false;
|
45
|
+
this.allPriceLists = [];
|
46
|
+
this.assetPriceLists = [];
|
47
|
+
this.reset$ = this.resetSubj$.asObservable();
|
48
|
+
this.activePriceList$ = this.context.resolve$().pipe(map(ctx => this.allPriceLists.find(priceList => priceList.id === ctx.properties.PriceListId)), map(priceList => priceList ?? null));
|
49
|
+
this.isInitializedSubj$
|
50
|
+
.pipe(filter(isInitialized => isInitialized), switchMap(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
|
51
|
+
.subscribe();
|
52
|
+
}
|
53
|
+
reset() {
|
54
|
+
this.resetSubj$.next(true);
|
55
|
+
this.quoteSubj$.next(null);
|
56
|
+
this.hasUnsavedChanges = false;
|
57
|
+
}
|
58
|
+
init(quoteId, params) {
|
59
|
+
return zip(this.quoteApiService.getQuoteDraft(quoteId, params), this.priceApiService.getPriceLists()).pipe(tap(([quote, allPriceLists]) => {
|
60
|
+
this.allPriceLists = allPriceLists;
|
61
|
+
this.quoteSubj$.next(quote);
|
62
|
+
this.context.update(quote.context);
|
63
|
+
this.populateActivePriceLists$();
|
64
|
+
}), map(() => noop()), take(1));
|
65
|
+
}
|
66
|
+
setCurrentLineItemState(lineItems) {
|
67
|
+
const quoteDraft = this.quoteSubj$.value;
|
68
|
+
if (!quoteDraft) {
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
this.quoteSubj$.next({
|
72
|
+
...quoteDraft,
|
73
|
+
currentState: lineItems,
|
74
|
+
});
|
75
|
+
}
|
76
|
+
updateQuoteDraft(update) {
|
77
|
+
const quoteDraft = this.quoteSubj$.value;
|
78
|
+
if (!quoteDraft) {
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
if (update.context) {
|
82
|
+
this.context.set(update.context);
|
83
|
+
}
|
84
|
+
this.quoteSubj$.next({
|
85
|
+
...quoteDraft,
|
86
|
+
...update,
|
87
|
+
});
|
88
|
+
}
|
89
|
+
updateByPriceSummary(priceSummary) {
|
90
|
+
const quoteDraft = this.quoteSubj$.value;
|
91
|
+
if (!quoteDraft) {
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
const updatedCurrentState = this.currentState.map(lineItem => {
|
95
|
+
const updated = priceSummary.lineItems.find(li => li.id === lineItem.id);
|
96
|
+
return updated ?? lineItem;
|
97
|
+
});
|
98
|
+
this.quoteSubj$.next({
|
99
|
+
...quoteDraft,
|
100
|
+
currentState: updatedCurrentState,
|
101
|
+
totalPrices: priceSummary.totalPrices,
|
102
|
+
approvalItems: priceSummary.approvalItems,
|
103
|
+
});
|
104
|
+
}
|
105
|
+
get quoteDraft$() {
|
106
|
+
return combineLatest([this.quoteSubj$, this.context.resolve$()]).pipe(map(() => this.quoteDraft), filter((quote) => Boolean(quote)), shareReplay());
|
107
|
+
}
|
108
|
+
get quoteDraft() {
|
109
|
+
const quote = this.quoteSubj$.value;
|
110
|
+
if (!quote) {
|
111
|
+
return null;
|
112
|
+
}
|
113
|
+
return {
|
114
|
+
...quote,
|
115
|
+
context: this.context.resolve(),
|
116
|
+
};
|
117
|
+
}
|
118
|
+
get quoteDraftForActivePriceList() {
|
119
|
+
const quoteDraft = this.quoteDraft;
|
120
|
+
if (!quoteDraft) {
|
121
|
+
return null;
|
122
|
+
}
|
123
|
+
return {
|
124
|
+
...quoteDraft,
|
125
|
+
initialState: this.filterByActivePriceList(quoteDraft.initialState),
|
126
|
+
currentState: this.filterByActivePriceList(quoteDraft.currentState),
|
127
|
+
};
|
128
|
+
}
|
129
|
+
get currentState$() {
|
130
|
+
return this.quoteDraft$.pipe(map(quote => quote.currentState));
|
131
|
+
}
|
132
|
+
get currentState() {
|
133
|
+
return this.quoteDraft?.currentState ?? [];
|
134
|
+
}
|
135
|
+
/**
|
136
|
+
* Stream of activeCurrentState
|
137
|
+
*/
|
138
|
+
get activeCurrentState$() {
|
139
|
+
return this.quoteDraft$.pipe(map(() => this.activeCurrentState));
|
140
|
+
}
|
141
|
+
/**
|
142
|
+
* activeCurrentState is currentState passed through additional filters
|
143
|
+
*/
|
144
|
+
get activeCurrentState() {
|
145
|
+
let currentState = this.quoteDraft?.currentState ?? [];
|
146
|
+
currentState = this.filterByActivePriceList(currentState);
|
147
|
+
return currentState;
|
148
|
+
}
|
149
|
+
/**
|
150
|
+
* Stream of activeInitialState
|
151
|
+
*/
|
152
|
+
get activeInitialState$() {
|
153
|
+
return this.quoteDraft$.pipe(map(() => this.activeInitialState));
|
154
|
+
}
|
155
|
+
/**
|
156
|
+
* activeInitialState is initialState passed through additional filters
|
157
|
+
*/
|
158
|
+
get activeInitialState() {
|
159
|
+
const ctx = this.context.resolve();
|
160
|
+
let initialState = this.quoteDraft?.initialState ?? [];
|
161
|
+
if (ctx.mode === ConfigurationContextMode.ACCOUNT) {
|
162
|
+
initialState = this.filterByActivePriceList(initialState);
|
163
|
+
}
|
164
|
+
return initialState;
|
165
|
+
}
|
166
|
+
get isStandalone() {
|
167
|
+
return this.context.resolve().properties.standalone === 'true';
|
168
|
+
}
|
169
|
+
get isStandalone$() {
|
170
|
+
return this.context.resolve$().pipe(map(() => this.isStandalone));
|
171
|
+
}
|
172
|
+
getInitialCurrentState() {
|
173
|
+
return this.initialCurrentState;
|
174
|
+
}
|
175
|
+
isEditMode$() {
|
176
|
+
return this.context.resolve$().pipe(map(() => this.isEditMode()));
|
177
|
+
}
|
178
|
+
isEditMode() {
|
179
|
+
const context = this.context.resolve();
|
180
|
+
if (context.mode === ConfigurationContextMode.ACCOUNT) {
|
181
|
+
return true;
|
182
|
+
}
|
183
|
+
if (context.mode === ConfigurationContextMode.QUOTE) {
|
184
|
+
return context.properties.Status === 'Draft';
|
185
|
+
}
|
186
|
+
return false;
|
187
|
+
}
|
188
|
+
updateActivePriceList(priceListId) {
|
189
|
+
this.context.update({ properties: { PriceListId: priceListId } });
|
190
|
+
}
|
191
|
+
populateActivePriceLists$() {
|
192
|
+
const ctx = this.context.resolve();
|
193
|
+
const quoteDraft = this.quoteDraft;
|
194
|
+
if (!quoteDraft) {
|
195
|
+
return;
|
196
|
+
}
|
197
|
+
// In ACCOUNT mode populate price lists from related assets
|
198
|
+
if (ctx.mode === ConfigurationContextMode.ACCOUNT) {
|
199
|
+
// Populate list of price lists
|
200
|
+
this.assetPriceLists = quoteDraft.currentState
|
201
|
+
.map(({ priceListId }) => priceListId)
|
202
|
+
.reduce((trunk, priceListId) => {
|
203
|
+
if (!priceListId || trunk.some(item => item.id === priceListId)) {
|
204
|
+
return trunk;
|
205
|
+
}
|
206
|
+
return [
|
207
|
+
...trunk,
|
208
|
+
{ id: priceListId, name: this.allPriceLists.find(item => item.id === priceListId)?.name ?? '' },
|
209
|
+
];
|
210
|
+
}, []);
|
211
|
+
}
|
212
|
+
}
|
213
|
+
filterByActivePriceList(lineItems) {
|
214
|
+
const ctx = this.context.resolve();
|
215
|
+
return lineItems.filter(li => !li.priceListId || li.priceListId === ctx.properties.PriceListId);
|
216
|
+
}
|
217
|
+
markAsUpdated(quote) {
|
218
|
+
if (quote?.context.properties.mode === ConfigurationContextMode.ACCOUNT) {
|
219
|
+
this.hasUnsavedChanges = !!quote && !quote.currentState.every(li => li.actionCode === 'EXIST');
|
220
|
+
}
|
221
|
+
else {
|
222
|
+
this.hasUnsavedChanges = !isEqual(this.initialCurrentState, quote?.currentState);
|
223
|
+
}
|
224
|
+
}
|
225
|
+
}
|
226
|
+
QuoteDraftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: QuoteDraftService, deps: [{ token: i1.ContextService }, { token: i2.QuoteApiService }, { token: i2.PriceApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
227
|
+
QuoteDraftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: QuoteDraftService, providedIn: 'root' });
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: QuoteDraftService, decorators: [{
|
229
|
+
type: Injectable,
|
230
|
+
args: [{ providedIn: 'root' }]
|
231
|
+
}], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i2.QuoteApiService }, { type: i2.PriceApiService }]; } });
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGUtZHJhZnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvc2VydmljZXMvcXVvdGUtZHJhZnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFpRCxNQUFNLGtCQUFrQixDQUFDO0FBQzNHLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBR25ELE1BQU0sT0FBTyxpQkFBaUI7SUFPNUIsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFXLGFBQWEsQ0FBQyxLQUFjO1FBQ3JDLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBVyxpQkFBaUIsQ0FBQyxLQUFjO1FBQ3pDLElBQUksQ0FBQyxr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Q0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ1Y7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsU0FBcUI7UUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVuQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBd0I7UUFDNUMsSUFBSSxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssd0JBQXdCLENBQUMsT0FBTyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQ2hHO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNsRjtJQUNILENBQUM7OzhHQTdSVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQURKLE1BQU07MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmljZUFwaVNlcnZpY2UsIFF1b3RlQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUsIExpbmVJdGVtLCBQcmljZUxpc3QsIFByaWNlU3VtbWFyeSwgUXVvdGVEcmFmdCB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG5vb3AsIE9ic2VydmFibGUsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBza2lwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFF1b3RlRHJhZnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBxdW90ZVN1YmokID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdW90ZURyYWZ0IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVzZXRTdWJqJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZFN1YmokID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgaW5pdGlhbEN1cnJlbnRTdGF0ZTogTGluZUl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9oYXNVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxpemVkU3ViaiQuZ2V0VmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzSW5pdGlhbGl6ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5pc0luaXRpYWxpemVkU3ViaiQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBoYXNVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGFzVW5zYXZlZENoYW5nZXM7XG4gIH1cbiAgcHVibGljIHNldCBoYXNVbnNhdmVkQ2hhbmdlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1Vuc2F2ZWRDaGFuZ2VzID0gdmFsdWU7XG5cbiAgICBpZiAoIXRoaXMuX2hhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluaXRpYWxDdXJyZW50U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnQ/LmN1cnJlbnRTdGF0ZSA/PyBbXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1Byb2R1Y3RzJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZVN1YmokLnBpcGUobWFwKCgpID0+IHRoaXMuaGFzUHJvZHVjdHMpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1Byb2R1Y3RzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlU3ViaiQudmFsdWU7XG4gICAgcmV0dXJuIEJvb2xlYW4ocXVvdGVEcmFmdCAmJiBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIHB1YmxpYyBhbGxQcmljZUxpc3RzOiBQcmljZUxpc3RbXSA9IFtdO1xuICBwdWJsaWMgYXNzZXRQcmljZUxpc3RzOiBQcmljZUxpc3RbXSA9IFtdO1xuICBwdWJsaWMgcmVzZXQkID0gdGhpcy5yZXNldFN1YmokLmFzT2JzZXJ2YWJsZSgpO1xuICBwdWJsaWMgYWN0aXZlUHJpY2VMaXN0JDogT2JzZXJ2YWJsZTxQcmljZUxpc3QgfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRleHQ6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVBcGlTZXJ2aWNlOiBRdW90ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmljZUFwaVNlcnZpY2U6IFByaWNlQXBpU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5hY3RpdmVQcmljZUxpc3QkID0gdGhpcy5jb250ZXh0LnJlc29sdmUkKCkucGlwZShcbiAgICAgIG1hcChjdHggPT4gdGhpcy5hbGxQcmljZUxpc3RzLmZpbmQocHJpY2VMaXN0ID0+IHByaWNlTGlzdC5pZCA9PT0gY3R4LnByb3BlcnRpZXMuUHJpY2VMaXN0SWQpKSxcbiAgICAgIG1hcChwcmljZUxpc3QgPT4gcHJpY2VMaXN0ID8/IG51bGwpLFxuICAgICk7XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWRTdWJqJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpc0luaXRpYWxpemVkID0+IGlzSW5pdGlhbGl6ZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5xdW90ZVN1YmokLmFzT2JzZXJ2YWJsZSgpKSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKHF1b3RlID0+IHRoaXMubWFya0FzVXBkYXRlZChxdW90ZSkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRTdWJqJC5uZXh0KHRydWUpO1xuICAgIHRoaXMucXVvdGVTdWJqJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuaGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KHF1b3RlSWQ6IHN0cmluZywgcGFyYW1zOiBEaWN0aW9uYXJ5PHN0cmluZz4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gemlwKHRoaXMucXVvdGVBcGlTZXJ2aWNlLmdldFF1b3RlRHJhZnQocXVvdGVJZCwgcGFyYW1zKSwgdGhpcy5wcmljZUFwaVNlcnZpY2UuZ2V0UHJpY2VMaXN0cygpKS5waXBlKFxuICAgICAgdGFwKChbcXVvdGUsIGFsbFByaWNlTGlzdHNdKSA9PiB7XG4gICAgICAgIHRoaXMuYWxsUHJpY2VMaXN0cyA9IGFsbFByaWNlTGlzdHM7XG4gICAgICAgIHRoaXMucXVvdGVTdWJqJC5uZXh0KHF1b3RlKTtcblxuICAgICAgICB0aGlzLmNvbnRleHQudXBkYXRlKHF1b3RlLmNvbnRleHQpO1xuXG4gICAgICAgIHRoaXMucG9wdWxhdGVBY3RpdmVQcmljZUxpc3RzJCgpO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4gbm9vcCgpKSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDdXJyZW50TGluZUl0ZW1TdGF0ZShsaW5lSXRlbXM6IExpbmVJdGVtW10pOiB2b2lkIHtcbiAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZVN1YmokLnZhbHVlO1xuXG4gICAgaWYgKCFxdW90ZURyYWZ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5xdW90ZVN1YmokLm5leHQoe1xuICAgICAgLi4ucXVvdGVEcmFmdCxcbiAgICAgIGN1cnJlbnRTdGF0ZTogbGluZUl0ZW1zLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVF1b3RlRHJhZnQodXBkYXRlOiBQYXJ0aWFsPFF1b3RlRHJhZnQ+KTogdm9pZCB7XG4gICAgY29uc3QgcXVvdGVEcmFmdCA9IHRoaXMucXVvdGVTdWJqJC52YWx1ZTtcblxuICAgIGlmICghcXVvdGVEcmFmdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGUuY29udGV4dCkge1xuICAgICAgdGhpcy5jb250ZXh0LnNldCh1cGRhdGUuY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5xdW90ZVN1YmokLm5leHQoe1xuICAgICAgLi4ucXVvdGVEcmFmdCxcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVCeVByaWNlU3VtbWFyeShwcmljZVN1bW1hcnk6IFByaWNlU3VtbWFyeSk6IHZvaWQge1xuICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlU3ViaiQudmFsdWU7XG5cbiAgICBpZiAoIXF1b3RlRHJhZnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkQ3VycmVudFN0YXRlID0gdGhpcy5jdXJyZW50U3RhdGUubWFwKGxpbmVJdGVtID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBwcmljZVN1bW1hcnkubGluZUl0ZW1zLmZpbmQobGkgPT4gbGkuaWQgPT09IGxpbmVJdGVtLmlkKTtcbiAgICAgIHJldHVybiB1cGRhdGVkID8/IGxpbmVJdGVtO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdW90ZVN1YmokLm5leHQoe1xuICAgICAgLi4ucXVvdGVEcmFmdCxcbiAgICAgIGN1cnJlbnRTdGF0ZTogdXBkYXRlZEN1cnJlbnRTdGF0ZSxcbiAgICAgIHRvdGFsUHJpY2VzOiBwcmljZVN1bW1hcnkudG90YWxQcmljZXMsXG4gICAgICBhcHByb3ZhbEl0ZW1zOiBwcmljZVN1bW1hcnkuYXBwcm92YWxJdGVtcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVvdGVEcmFmdCQoKTogT2JzZXJ2YWJsZTxRdW90ZURyYWZ0PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMucXVvdGVTdWJqJCwgdGhpcy5jb250ZXh0LnJlc29sdmUkKCldKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHRoaXMucXVvdGVEcmFmdCksXG4gICAgICBmaWx0ZXIoKHF1b3RlKTogcXVvdGUgaXMgUXVvdGVEcmFmdCA9PiBCb29sZWFuKHF1b3RlKSksXG4gICAgICBzaGFyZVJlcGxheSgpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHF1b3RlRHJhZnQoKTogUXVvdGVEcmFmdCB8IG51bGwge1xuICAgIGNvbnN0IHF1b3RlID0gdGhpcy5xdW90ZVN1YmokLnZhbHVlO1xuXG4gICAgaWYgKCFxdW90ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnF1b3RlLFxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LnJlc29sdmUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBxdW90ZURyYWZ0Rm9yQWN0aXZlUHJpY2VMaXN0KCk6IFF1b3RlRHJhZnQgfCBudWxsIHtcbiAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0O1xuXG4gICAgaWYgKCFxdW90ZURyYWZ0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucXVvdGVEcmFmdCxcbiAgICAgIGluaXRpYWxTdGF0ZTogdGhpcy5maWx0ZXJCeUFjdGl2ZVByaWNlTGlzdChxdW90ZURyYWZ0LmluaXRpYWxTdGF0ZSksXG4gICAgICBjdXJyZW50U3RhdGU6IHRoaXMuZmlsdGVyQnlBY3RpdmVQcmljZUxpc3QocXVvdGVEcmFmdC5jdXJyZW50U3RhdGUpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxMaW5lSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucXVvdGVEcmFmdCQucGlwZShtYXAocXVvdGUgPT4gcXVvdGUuY3VycmVudFN0YXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGF0ZSgpOiBMaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGUgPz8gW107XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIG9mIGFjdGl2ZUN1cnJlbnRTdGF0ZVxuICAgKi9cbiAgcHVibGljIGdldCBhY3RpdmVDdXJyZW50U3RhdGUkKCk6IE9ic2VydmFibGU8TGluZUl0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnQkLnBpcGUobWFwKCgpID0+IHRoaXMuYWN0aXZlQ3VycmVudFN0YXRlKSk7XG4gIH1cblxuICAvKipcbiAgICogYWN0aXZlQ3VycmVudFN0YXRlIGlzIGN1cnJlbnRTdGF0ZSBwYXNzZWQgdGhyb3VnaCBhZGRpdGlvbmFsIGZpbHRlcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgYWN0aXZlQ3VycmVudFN0YXRlKCk6IExpbmVJdGVtW10ge1xuICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnF1b3RlRHJhZnQ/LmN1cnJlbnRTdGF0ZSA/PyBbXTtcblxuICAgIGN1cnJlbnRTdGF0ZSA9IHRoaXMuZmlsdGVyQnlBY3RpdmVQcmljZUxpc3QoY3VycmVudFN0YXRlKTtcblxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIG9mIGFjdGl2ZUluaXRpYWxTdGF0ZVxuICAgKi9cbiAgcHVibGljIGdldCBhY3RpdmVJbml0aWFsU3RhdGUkKCk6IE9ic2VydmFibGU8TGluZUl0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnQkLnBpcGUobWFwKCgpID0+IHRoaXMuYWN0aXZlSW5pdGlhbFN0YXRlKSk7XG4gIH1cblxuICAvKipcbiAgICogYWN0aXZlSW5pdGlhbFN0YXRlIGlzIGluaXRpYWxTdGF0ZSBwYXNzZWQgdGhyb3VnaCBhZGRpdGlvbmFsIGZpbHRlcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgYWN0aXZlSW5pdGlhbFN0YXRlKCk6IExpbmVJdGVtW10ge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29udGV4dC5yZXNvbHZlKCk7XG4gICAgbGV0IGluaXRpYWxTdGF0ZSA9IHRoaXMucXVvdGVEcmFmdD8uaW5pdGlhbFN0YXRlID8/IFtdO1xuXG4gICAgaWYgKGN0eC5tb2RlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuQUNDT1VOVCkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gdGhpcy5maWx0ZXJCeUFjdGl2ZVByaWNlTGlzdChpbml0aWFsU3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU3RhbmRhbG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnJlc29sdmUoKS5wcm9wZXJ0aWVzLnN0YW5kYWxvbmUgPT09ICd0cnVlJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTdGFuZGFsb25lJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnJlc29sdmUkKCkucGlwZShtYXAoKCkgPT4gdGhpcy5pc1N0YW5kYWxvbmUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbml0aWFsQ3VycmVudFN0YXRlKCk6IExpbmVJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxDdXJyZW50U3RhdGU7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0TW9kZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5yZXNvbHZlJCgpLnBpcGUobWFwKCgpID0+IHRoaXMuaXNFZGl0TW9kZSgpKSk7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0LnJlc29sdmUoKTtcblxuICAgIGlmIChjb250ZXh0Lm1vZGUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5BQ0NPVU5UKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5tb2RlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuUVVPVEUpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LnByb3BlcnRpZXMuU3RhdHVzID09PSAnRHJhZnQnO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBY3RpdmVQcmljZUxpc3QocHJpY2VMaXN0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dC51cGRhdGUoeyBwcm9wZXJ0aWVzOiB7IFByaWNlTGlzdElkOiBwcmljZUxpc3RJZCB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUFjdGl2ZVByaWNlTGlzdHMkKCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29udGV4dC5yZXNvbHZlKCk7XG4gICAgY29uc3QgcXVvdGVEcmFmdCA9IHRoaXMucXVvdGVEcmFmdDtcblxuICAgIGlmICghcXVvdGVEcmFmdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluIEFDQ09VTlQgbW9kZSBwb3B1bGF0ZSBwcmljZSBsaXN0cyBmcm9tIHJlbGF0ZWQgYXNzZXRzXG4gICAgaWYgKGN0eC5tb2RlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuQUNDT1VOVCkge1xuICAgICAgLy8gUG9wdWxhdGUgbGlzdCBvZiBwcmljZSBsaXN0c1xuICAgICAgdGhpcy5hc3NldFByaWNlTGlzdHMgPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZVxuICAgICAgICAubWFwKCh7IHByaWNlTGlzdElkIH0pID0+IHByaWNlTGlzdElkKVxuICAgICAgICAucmVkdWNlPFByaWNlTGlzdFtdPigodHJ1bmssIHByaWNlTGlzdElkKSA9PiB7XG4gICAgICAgICAgaWYgKCFwcmljZUxpc3RJZCB8fCB0cnVuay5zb21lKGl0ZW0gPT4gaXRlbS5pZCA9PT0gcHJpY2VMaXN0SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1bms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgeyBpZDogcHJpY2VMaXN0SWQsIG5hbWU6IHRoaXMuYWxsUHJpY2VMaXN0cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gcHJpY2VMaXN0SWQpPy5uYW1lID8/ICcnIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyQnlBY3RpdmVQcmljZUxpc3QobGluZUl0ZW1zOiBMaW5lSXRlbVtdKTogTGluZUl0ZW1bXSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0LnJlc29sdmUoKTtcblxuICAgIHJldHVybiBsaW5lSXRlbXMuZmlsdGVyKGxpID0+ICFsaS5wcmljZUxpc3RJZCB8fCBsaS5wcmljZUxpc3RJZCA9PT0gY3R4LnByb3BlcnRpZXMuUHJpY2VMaXN0SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNVcGRhdGVkKHF1b3RlOiBRdW90ZURyYWZ0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChxdW90ZT8uY29udGV4dC5wcm9wZXJ0aWVzLm1vZGUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5BQ0NPVU5UKSB7XG4gICAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gISFxdW90ZSAmJiAhcXVvdGUuY3VycmVudFN0YXRlLmV2ZXJ5KGxpID0+IGxpLmFjdGlvbkNvZGUgPT09ICdFWElTVCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gIWlzRXF1YWwodGhpcy5pbml0aWFsQ3VycmVudFN0YXRlLCBxdW90ZT8uY3VycmVudFN0YXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|