@veloceapps/sdk 8.0.0-12 → 8.0.0-120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/cms/README.md +0 -20
- package/cms/cms.actions.d.ts +7 -1
- package/cms/components/preview/preview.component.d.ts +1 -2
- package/cms/components/preview/preview.types.d.ts +4 -0
- package/cms/index.d.ts +1 -0
- package/cms/modules/runtime/services/runtime.service.d.ts +1 -1
- package/cms/services/index.d.ts +0 -1
- package/cms/types/index.d.ts +0 -1
- package/cms/utils/element-metadata-worker.d.ts +11 -0
- package/cms/utils/element.utils.d.ts +1 -0
- package/cms/utils/elements-resolver.d.ts +0 -2
- package/cms/utils/index.d.ts +3 -0
- package/cms/utils/transpilation-worker.d.ts +13 -0
- package/cms/vendor-map.d.ts +26 -13
- package/core/README.md +20 -0
- package/core/modules/configuration/helpers.d.ts +4 -3
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +1 -1
- package/core/modules/configuration/services/configuration.service.d.ts +6 -1
- package/core/modules/configuration/types/configuration.types.d.ts +4 -0
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +5 -0
- package/core/pipes/action-code.pipe.d.ts +8 -0
- package/core/pipes/date.pipe.d.ts +2 -1
- package/core/pipes/index.d.ts +1 -0
- package/core/pipes/pipes.module.d.ts +2 -1
- package/core/services/context.service.d.ts +3 -0
- package/core/services/flow-info.service.d.ts +27 -0
- package/core/services/flow-state-configuration.service.d.ts +20 -0
- package/core/services/flow-state.service.d.ts +70 -0
- package/core/services/index.d.ts +4 -0
- package/core/services/quote-draft.service.d.ts +8 -1
- package/core/services/runtime-settings.service.d.ts +4 -1
- package/core/types/flow-customization.types.d.ts +22 -0
- package/core/types/flow-state.types.d.ts +6 -0
- package/core/types/formatting-settings.types.d.ts +2 -0
- package/core/types/index.d.ts +3 -0
- package/{cms → core}/types/integration.types.d.ts +1 -0
- package/core/types/pipe.types.d.ts +1 -0
- package/esm2020/cms/cms.actions.mjs +15 -1
- package/esm2020/cms/components/element-children/element-children.component.mjs +3 -3
- package/esm2020/cms/components/element-children/element-children.module.mjs +4 -4
- package/esm2020/cms/components/element-drop-handle/element-drop-handle.component.mjs +3 -3
- package/esm2020/cms/components/element-drop-handle/element-drop-handle.module.mjs +4 -4
- package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +3 -3
- package/esm2020/cms/components/element-renderer/element-renderer.module.mjs +4 -4
- package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +5 -5
- package/esm2020/cms/components/plugin.component.mjs +3 -3
- package/esm2020/cms/components/preview/preview.component.mjs +11 -11
- package/esm2020/cms/components/preview/preview.module.mjs +6 -6
- package/esm2020/cms/components/preview/preview.types.mjs +1 -1
- package/esm2020/cms/directives/custom-template.directive.mjs +7 -7
- package/esm2020/cms/index.mjs +2 -1
- package/esm2020/cms/launcher.module.mjs +7 -7
- package/esm2020/cms/modules/federated/federated-host.directive.mjs +3 -3
- package/esm2020/cms/modules/federated/federated.component.mjs +3 -3
- package/esm2020/cms/modules/federated/federated.module.mjs +4 -4
- package/esm2020/cms/modules/migrations/migrations.module.mjs +4 -4
- package/esm2020/cms/modules/migrations/services/migrations.service.mjs +3 -3
- package/esm2020/cms/modules/runtime/runtime.module.mjs +4 -4
- package/esm2020/cms/modules/runtime/services/compilation.service.mjs +12 -8
- package/esm2020/cms/modules/runtime/services/runtime-editor.service.mjs +3 -3
- package/esm2020/cms/modules/runtime/services/runtime.service.mjs +7 -7
- package/esm2020/cms/plugins/configuration.plugin.mjs +3 -3
- package/esm2020/cms/plugins/element-hover.plugin.mjs +3 -3
- package/esm2020/cms/plugins/io.plugin.mjs +8 -7
- package/esm2020/cms/plugins/page.plugin.mjs +3 -3
- package/esm2020/cms/plugins/region.plugin.mjs +3 -3
- package/esm2020/cms/plugins/script.plugin.mjs +3 -3
- package/esm2020/cms/services/element-context.service.mjs +3 -3
- package/esm2020/cms/services/index.mjs +1 -2
- package/esm2020/cms/services/io-provider.service.mjs +3 -3
- package/esm2020/cms/services/resources.service.mjs +3 -3
- package/esm2020/cms/services/templates.service.mjs +3 -3
- package/esm2020/cms/types/index.mjs +1 -2
- package/esm2020/cms/utils/element-metadata-worker.mjs +31 -0
- package/esm2020/cms/utils/element.utils.mjs +10 -3
- package/esm2020/cms/utils/elements-resolver.mjs +14 -28
- package/esm2020/cms/utils/index.mjs +4 -1
- package/esm2020/cms/utils/transpilation-worker.mjs +52 -0
- package/esm2020/cms/vendor-map.mjs +18 -5
- package/esm2020/core/core.module.mjs +12 -17
- package/esm2020/core/directives/directives.module.mjs +4 -4
- package/esm2020/core/directives/primeng-calendar.directive.mjs +3 -3
- package/esm2020/core/modules/configuration/configuration.module.mjs +4 -4
- package/esm2020/core/modules/configuration/helpers.mjs +28 -3
- package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +11 -14
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +29 -10
- package/esm2020/core/modules/configuration/services/configuration.state.mjs +5 -5
- package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +9 -9
- package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
- package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +4 -4
- package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +15 -11
- package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +3 -3
- package/esm2020/core/pipes/action-code.pipe.mjs +20 -0
- package/esm2020/core/pipes/date.pipe.mjs +13 -7
- package/esm2020/core/pipes/index.mjs +2 -1
- package/esm2020/core/pipes/number.pipe.mjs +3 -3
- package/esm2020/core/pipes/pipes.module.mjs +8 -7
- package/esm2020/core/pipes/price.pipe.mjs +3 -3
- package/esm2020/core/services/context.service.mjs +32 -5
- package/esm2020/core/services/flow-info.service.mjs +94 -0
- package/esm2020/core/services/flow-state-configuration.service.mjs +52 -0
- package/esm2020/core/services/flow-state.service.mjs +435 -0
- package/esm2020/core/services/index.mjs +5 -1
- package/esm2020/core/services/integration.state.mjs +37 -0
- package/esm2020/core/services/metric-calculation/metric-calculation.service.mjs +3 -3
- package/esm2020/core/services/product-images.service.mjs +3 -3
- package/esm2020/core/services/quote-draft.service.mjs +31 -6
- package/esm2020/core/services/runtime-settings.service.mjs +20 -5
- package/esm2020/core/types/flow-customization.types.mjs +3 -0
- package/esm2020/core/types/flow-state.types.mjs +2 -0
- package/esm2020/core/types/formatting-settings.types.mjs +1 -1
- package/esm2020/core/types/index.mjs +4 -1
- package/esm2020/core/types/integration.types.mjs +2 -0
- package/esm2020/core/types/pipe.types.mjs +2 -0
- package/esm2020/src/components/dialog/dialog.component.mjs +3 -3
- package/esm2020/src/components/dialog/dialog.module.mjs +4 -4
- package/esm2020/src/components/doc-gen/doc-gen.component.mjs +45 -54
- package/esm2020/src/components/doc-gen/doc-gen.module.mjs +4 -4
- package/esm2020/src/components/flow-header/flow-header.component.mjs +108 -0
- package/esm2020/src/components/flow-header/flow-header.module.mjs +19 -0
- package/esm2020/src/components/flow-header/index.mjs +2 -0
- package/esm2020/src/components/guided-selling/guided-selling.component.mjs +42 -51
- package/esm2020/src/components/guided-selling/guided-selling.module.mjs +4 -4
- package/esm2020/src/configure-primeng.mjs +33 -0
- package/esm2020/src/flow-routing.module.mjs +66 -75
- package/esm2020/src/flow.component.mjs +21 -29
- package/esm2020/src/flow.module.mjs +11 -9
- package/esm2020/src/guards/context.guard.mjs +7 -12
- package/esm2020/src/guards/flow.guard.mjs +31 -0
- package/esm2020/src/guards/product-unload.guard.mjs +7 -4
- package/esm2020/src/guards/root.guard.mjs +17 -13
- package/esm2020/src/pages/assets/assets.component.mjs +34 -38
- package/esm2020/src/pages/assets/assets.module.mjs +4 -4
- package/esm2020/src/pages/catalog/catalog.component.mjs +34 -38
- package/esm2020/src/pages/catalog/catalog.module.mjs +4 -4
- package/esm2020/src/pages/debug/debug.component.mjs +12 -16
- package/esm2020/src/pages/debug/debug.module.mjs +4 -4
- package/esm2020/src/pages/empty-account/empty-account.component.mjs +3 -3
- package/esm2020/src/pages/empty-account/empty-account.module.mjs +4 -4
- package/esm2020/src/pages/product/product.component.mjs +7 -10
- package/esm2020/src/pages/product/product.module.mjs +4 -4
- package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +3 -3
- package/esm2020/src/pages/record-not-found/record-not-found.module.mjs +4 -4
- package/esm2020/src/pages/remote/remote.component.mjs +13 -14
- package/esm2020/src/pages/remote/remote.module.mjs +4 -4
- package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +35 -39
- package/esm2020/src/pages/shopping-cart/shopping-cart.module.mjs +4 -4
- package/esm2020/src/resolvers/flow.resolver.mjs +37 -51
- package/esm2020/src/resolvers/quote.resolver.mjs +40 -65
- package/esm2020/src/services/doc-gen.service.mjs +7 -6
- package/esm2020/src/services/flow-dialog.service.mjs +22 -7
- package/esm2020/src/services/flow-router.service.mjs +31 -10
- package/esm2020/src/services/flow.service.mjs +36 -11
- package/esm2020/src/services/guided-selling.service.mjs +8 -7
- package/esm2020/src/services/index.mjs +3 -1
- package/esm2020/src/types/index.mjs +1 -2
- package/esm2020/src/utils/flow.utils.mjs +6 -2
- package/fesm2015/veloceapps-sdk-cms.mjs +329 -248
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk-core.mjs +1545 -826
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +743 -1542
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +343 -270
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +1860 -1158
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +855 -1653
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +7 -13
- package/src/components/doc-gen/doc-gen.component.d.ts +8 -12
- package/src/components/flow-header/flow-header.component.d.ts +25 -0
- package/src/components/flow-header/flow-header.module.d.ts +9 -0
- package/src/components/flow-header/index.d.ts +1 -0
- package/src/components/guided-selling/guided-selling.component.d.ts +7 -11
- package/src/configure-primeng.d.ts +1 -0
- package/src/flow-routing.module.d.ts +6 -7
- package/src/flow.component.d.ts +7 -10
- package/src/flow.module.d.ts +2 -2
- package/src/guards/context.guard.d.ts +4 -5
- package/src/guards/flow.guard.d.ts +2 -0
- package/src/guards/product-unload.guard.d.ts +2 -2
- package/src/guards/root.guard.d.ts +0 -1
- package/src/pages/assets/assets.component.d.ts +5 -7
- package/src/pages/catalog/catalog.component.d.ts +5 -7
- package/src/pages/debug/debug.component.d.ts +5 -8
- package/src/pages/product/product.component.d.ts +2 -3
- package/src/pages/remote/remote.component.d.ts +1 -2
- package/src/pages/shopping-cart/shopping-cart.component.d.ts +5 -7
- package/src/resolvers/flow.resolver.d.ts +6 -7
- package/src/resolvers/quote.resolver.d.ts +6 -12
- package/src/services/doc-gen.service.d.ts +1 -1
- package/src/services/flow-dialog.service.d.ts +5 -2
- package/src/services/flow-router.service.d.ts +4 -2
- package/src/services/flow.service.d.ts +4 -2
- package/src/services/guided-selling.service.d.ts +1 -1
- package/src/services/index.d.ts +2 -0
- package/src/types/index.d.ts +0 -1
- package/esm2020/cms/services/integration.state.mjs +0 -37
- package/esm2020/cms/types/integration.types.mjs +0 -2
- package/esm2020/runtime/components/component-preview/component-preview.component.mjs +0 -125
- package/esm2020/runtime/components/index.mjs +0 -5
- package/esm2020/runtime/components/section-renderer/section-renderer.component.mjs +0 -67
- package/esm2020/runtime/components/ui-runtime/runtime.component.mjs +0 -440
- package/esm2020/runtime/components/ui-runtime-preview/runtime-preview.component.mjs +0 -108
- package/esm2020/runtime/execution/components/children-placeholder/children-placeholder.component.mjs +0 -60
- package/esm2020/runtime/execution/components/context-provider/context-provider.component.mjs +0 -39
- package/esm2020/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.mjs +0 -67
- package/esm2020/runtime/execution/components/federated/federated.component.mjs +0 -74
- package/esm2020/runtime/execution/components/velo-attribute/velo-attribute.component.mjs +0 -60
- package/esm2020/runtime/execution/components/velo-multiselect/velo-multiselect.component.mjs +0 -130
- package/esm2020/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.mjs +0 -72
- package/esm2020/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.mjs +0 -97
- package/esm2020/runtime/execution/components/velo-port-radio/velo-port-radio.component.mjs +0 -142
- package/esm2020/runtime/execution/components/velo-type/velo-type.component.mjs +0 -119
- package/esm2020/runtime/execution/directives/section-script.directive.mjs +0 -247
- package/esm2020/runtime/execution/directives/sf-query.directive.mjs +0 -35
- package/esm2020/runtime/execution/directives/velo-attribute.directive.mjs +0 -88
- package/esm2020/runtime/execution/directives/velo-port.directive.mjs +0 -376
- package/esm2020/runtime/execution/directives/vl-approval.directive.mjs +0 -23
- package/esm2020/runtime/execution/directives/vl-document-attachments.directive.mjs +0 -36
- package/esm2020/runtime/execution/directives/vl-document-templates.directive.mjs +0 -60
- package/esm2020/runtime/execution/directives/vl-quote.directive.mjs +0 -42
- package/esm2020/runtime/execution/directives/vl-ramp.directive.mjs +0 -55
- package/esm2020/runtime/execution/runtime-execution.module.mjs +0 -133
- package/esm2020/runtime/execution/utils/federated.util.mjs +0 -32
- package/esm2020/runtime/index.mjs +0 -5
- package/esm2020/runtime/runtime.module.mjs +0 -74
- package/esm2020/runtime/services/cart.service.mjs +0 -29
- package/esm2020/runtime/services/collapsible-state.service.mjs +0 -34
- package/esm2020/runtime/services/configuration.service.mjs +0 -119
- package/esm2020/runtime/services/current-state.service.mjs +0 -17
- package/esm2020/runtime/services/form-scope.service.mjs +0 -30
- package/esm2020/runtime/services/index.mjs +0 -4
- package/esm2020/runtime/services/product-model-cache.service.mjs +0 -31
- package/esm2020/runtime/services/runtime-context.service.mjs +0 -60
- package/esm2020/runtime/services/runtime-form.service.mjs +0 -219
- package/esm2020/runtime/services/runtime.service.mjs +0 -115
- package/esm2020/runtime/services/section-helper.service.mjs +0 -27
- package/esm2020/runtime/services/section-scope.service.mjs +0 -36
- package/esm2020/runtime/services/section-store.service.mjs +0 -22
- package/esm2020/runtime/services/section.service.mjs +0 -117
- package/esm2020/runtime/types/bound-data.types.mjs +0 -7
- package/esm2020/runtime/types/index.mjs +0 -3
- package/esm2020/runtime/types/quote-states.types.mjs +0 -2
- package/esm2020/runtime/types/runtime.types.mjs +0 -2
- package/esm2020/runtime/types/script-registry.types.mjs +0 -51
- package/esm2020/runtime/utils/line-item.util.mjs +0 -270
- package/esm2020/runtime/utils/section.utils.mjs +0 -26
- package/esm2020/runtime/utils/sections-binder.helper.mjs +0 -105
- package/esm2020/runtime/veloceapps-sdk-runtime.mjs +0 -5
- package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +0 -119
- package/esm2020/src/components/header/cart-overlay/cart-preview.module.mjs +0 -47
- package/esm2020/src/components/header/header.component.mjs +0 -355
- package/esm2020/src/components/header/header.module.mjs +0 -52
- package/esm2020/src/components/header/header.types.mjs +0 -2
- package/esm2020/src/components/header/metrics/index.mjs +0 -2
- package/esm2020/src/components/header/metrics/metrics.component.mjs +0 -255
- package/esm2020/src/components/header/metrics/metrics.definitions.mjs +0 -2
- package/esm2020/src/components/header/metrics/metrics.module.mjs +0 -69
- package/esm2020/src/pages/legacy-product/legacy-product.component.mjs +0 -137
- package/esm2020/src/pages/legacy-product/legacy-product.module.mjs +0 -19
- package/esm2020/src/types/flow-customization.types.mjs +0 -3
- package/fesm2015/veloceapps-sdk-runtime.mjs +0 -3770
- package/fesm2015/veloceapps-sdk-runtime.mjs.map +0 -1
- package/fesm2020/veloceapps-sdk-runtime.mjs +0 -3767
- package/fesm2020/veloceapps-sdk-runtime.mjs.map +0 -1
- package/runtime/README.md +0 -5
- package/runtime/components/component-preview/component-preview.component.d.ts +0 -27
- package/runtime/components/index.d.ts +0 -4
- package/runtime/components/section-renderer/section-renderer.component.d.ts +0 -25
- package/runtime/components/ui-runtime/runtime.component.d.ts +0 -53
- package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +0 -27
- package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +0 -30
- package/runtime/execution/components/context-provider/context-provider.component.d.ts +0 -14
- package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +0 -25
- package/runtime/execution/components/federated/federated.component.d.ts +0 -36
- package/runtime/execution/components/velo-attribute/velo-attribute.component.d.ts +0 -19
- package/runtime/execution/components/velo-multiselect/velo-multiselect.component.d.ts +0 -35
- package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +0 -22
- package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +0 -22
- package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +0 -28
- package/runtime/execution/components/velo-type/velo-type.component.d.ts +0 -31
- package/runtime/execution/directives/section-script.directive.d.ts +0 -59
- package/runtime/execution/directives/sf-query.directive.d.ts +0 -15
- package/runtime/execution/directives/velo-attribute.directive.d.ts +0 -26
- package/runtime/execution/directives/velo-port.directive.d.ts +0 -74
- package/runtime/execution/directives/vl-approval.directive.d.ts +0 -10
- package/runtime/execution/directives/vl-document-attachments.directive.d.ts +0 -15
- package/runtime/execution/directives/vl-document-templates.directive.d.ts +0 -33
- package/runtime/execution/directives/vl-quote.directive.d.ts +0 -14
- package/runtime/execution/directives/vl-ramp.directive.d.ts +0 -15
- package/runtime/execution/runtime-execution.module.d.ts +0 -25
- package/runtime/execution/utils/federated.util.d.ts +0 -6
- package/runtime/index.d.ts +0 -4
- package/runtime/runtime.module.d.ts +0 -16
- package/runtime/services/cart.service.d.ts +0 -15
- package/runtime/services/collapsible-state.service.d.ts +0 -15
- package/runtime/services/configuration.service.d.ts +0 -20
- package/runtime/services/current-state.service.d.ts +0 -8
- package/runtime/services/form-scope.service.d.ts +0 -20
- package/runtime/services/index.d.ts +0 -3
- package/runtime/services/product-model-cache.service.d.ts +0 -14
- package/runtime/services/runtime-context.service.d.ts +0 -16
- package/runtime/services/runtime-form.service.d.ts +0 -24
- package/runtime/services/runtime.service.d.ts +0 -44
- package/runtime/services/section-helper.service.d.ts +0 -8
- package/runtime/services/section-scope.service.d.ts +0 -14
- package/runtime/services/section-store.service.d.ts +0 -11
- package/runtime/services/section.service.d.ts +0 -30
- package/runtime/types/bound-data.types.d.ts +0 -13
- package/runtime/types/index.d.ts +0 -2
- package/runtime/types/quote-states.types.d.ts +0 -6
- package/runtime/types/runtime.types.d.ts +0 -19
- package/runtime/types/script-registry.types.d.ts +0 -13
- package/runtime/utils/line-item.util.d.ts +0 -34
- package/runtime/utils/section.utils.d.ts +0 -2
- package/runtime/utils/sections-binder.helper.d.ts +0 -16
- package/src/components/header/cart-overlay/cart-preview.component.d.ts +0 -36
- package/src/components/header/cart-overlay/cart-preview.module.d.ts +0 -14
- package/src/components/header/header.component.d.ts +0 -70
- package/src/components/header/header.module.d.ts +0 -16
- package/src/components/header/header.types.d.ts +0 -20
- package/src/components/header/metrics/index.d.ts +0 -1
- package/src/components/header/metrics/metrics.component.d.ts +0 -67
- package/src/components/header/metrics/metrics.definitions.d.ts +0 -1
- package/src/components/header/metrics/metrics.module.d.ts +0 -18
- package/src/pages/legacy-product/legacy-product.component.d.ts +0 -37
- package/src/pages/legacy-product/legacy-product.module.d.ts +0 -9
- package/src/types/flow-customization.types.d.ts +0 -12
- /package/{cms → core}/services/integration.state.d.ts +0 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Injectable, NgModule, inject, Directive, Input, LOCALE_ID, Pipe } from '@angular/core';
|
|
3
|
-
import { UUID, ConfigurationContextMode, ConfigurationContext,
|
|
4
|
-
import { BehaviorSubject,
|
|
5
|
-
import { filter, tap,
|
|
2
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, inject, Directive, Input, LOCALE_ID, Pipe } from '@angular/core';
|
|
3
|
+
import { UUID, ConfigurationContextMode, ConfigurationContext, UITemplateType, isDefined, ConfigurationProcessorTypes, EntityUtil, ChargeGroupUtils, DEFAULT_CURRENCY_ISO_CODE, DEFAULT_CURRENCY_SYMBOL, validateDateFormat, DEFAULT_DATE_FORMAT, DEFAULT_DECIMALS_COUNT, getSupportedDateFormats, DEFAULT_DECIMAL_SEPARATOR, DEFAULT_THOUSANDS_SEPARATOR, DEFAULT_ACTION_CODE_LABELS, parseJsonSafely, ConfigurationMode, ConfigurationTranslatorUtils, RuntimeModel, isNotLegacyUIDefinition, SalesforceIdUtils, DEFAULT_TIME_FORMAT, formatNumber } from '@veloceapps/core';
|
|
4
|
+
import { BehaviorSubject, switchMap, map as map$1, tap as tap$1, noop, catchError, throwError, of, forkJoin, Subject, filter as filter$1, zip, combineLatest, shareReplay as shareReplay$1, finalize, takeUntil, take as take$1, distinctUntilChanged } from 'rxjs';
|
|
5
|
+
import { map, filter, tap, switchMap as switchMap$1, skip, take, shareReplay, catchError as catchError$1, finalize as finalize$1, first } from 'rxjs/operators';
|
|
6
6
|
import * as i1 from '@veloceapps/api';
|
|
7
7
|
import { PriceApiService, ContextApiService, ProductModelApiService, ConfigurationApiService } from '@veloceapps/api';
|
|
8
|
-
import { merge, flatten, sortBy, map as map$
|
|
9
|
-
import
|
|
10
|
-
import * as i4 from '@veloceapps/components';
|
|
8
|
+
import { merge, isEmpty, flatten, sortBy, map as map$2, omit, isEqual, cloneDeep, assign, uniqBy, transform, uniq } from 'lodash';
|
|
9
|
+
import * as i6 from '@veloceapps/components';
|
|
11
10
|
import { ToastType, ConfirmationComponent, ConfirmationDialogModule } from '@veloceapps/components';
|
|
12
|
-
import * as i5 from 'primeng/api';
|
|
13
|
-
import * as i6 from 'primeng/dynamicdialog';
|
|
14
11
|
import moment from 'moment';
|
|
12
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
13
|
+
import * as i5 from 'primeng/api';
|
|
14
|
+
import * as i6$1 from 'primeng/dynamicdialog';
|
|
15
15
|
import { NgControl } from '@angular/forms';
|
|
16
16
|
import { DATE_PIPE_DEFAULT_OPTIONS, formatDate } from '@angular/common';
|
|
17
17
|
|
|
@@ -24,21 +24,16 @@ const getDefaultLineItem = (context, uiDefinitionProperties, qty = 1) => {
|
|
|
24
24
|
attributes,
|
|
25
25
|
lineItems, productName: ((_b = context.properties) === null || _b === void 0 ? void 0 : _b['displayName']) || context.productName, productId: (_c = context.productId) !== null && _c !== void 0 ? _c : '' }, (uiDefinitionProperties.offeringId ? { offeringId: uiDefinitionProperties.offeringId } : {}));
|
|
26
26
|
};
|
|
27
|
-
const getGuidedSellingConfigurationRequest = (data) => {
|
|
27
|
+
const getGuidedSellingConfigurationRequest = (data, context) => {
|
|
28
|
+
const _context = Object.assign({}, context);
|
|
29
|
+
delete _context.configurationToken;
|
|
30
|
+
const properties = Object.assign({}, context.properties);
|
|
31
|
+
delete properties['ConfigurationToken'];
|
|
28
32
|
return {
|
|
29
33
|
mode: 'SEARCH',
|
|
30
34
|
step: 'START',
|
|
31
35
|
attributeDomainMode: 'ALL',
|
|
32
|
-
context: {
|
|
33
|
-
headerId: 'TestId',
|
|
34
|
-
mode: ConfigurationContextMode.TEST,
|
|
35
|
-
properties: {
|
|
36
|
-
ModelId: data.modelId,
|
|
37
|
-
Name: 'Veloce Guided Selling',
|
|
38
|
-
PricingEnabled: 'false',
|
|
39
|
-
RuntimeMode: 'TEST',
|
|
40
|
-
},
|
|
41
|
-
},
|
|
36
|
+
context: Object.assign(Object.assign({}, _context), { mode: ConfigurationContextMode.TEST, properties: Object.assign(Object.assign({}, properties), { ModelId: data.modelId, Name: 'Veloce Guided Selling', PricingEnabled: 'false', RuntimeMode: 'TEST' }) }),
|
|
42
37
|
lineItem: {
|
|
43
38
|
actionCode: 'ADD',
|
|
44
39
|
cfgStatus: 'Default',
|
|
@@ -53,6 +48,29 @@ const getGuidedSellingConfigurationRequest = (data) => {
|
|
|
53
48
|
},
|
|
54
49
|
};
|
|
55
50
|
};
|
|
51
|
+
const generateConfigurationLineItem = (props, qty = 1) => {
|
|
52
|
+
var _a, _b, _c;
|
|
53
|
+
const id = UUID.UUID();
|
|
54
|
+
const attributes = Object.entries((_a = props.attributesMap) !== null && _a !== void 0 ? _a : {}).map(([name, value]) => ({
|
|
55
|
+
name,
|
|
56
|
+
value,
|
|
57
|
+
cfgStatus: 'User',
|
|
58
|
+
}));
|
|
59
|
+
const lineItems = [];
|
|
60
|
+
return {
|
|
61
|
+
id,
|
|
62
|
+
type: (_b = props.product.typeName) !== null && _b !== void 0 ? _b : '',
|
|
63
|
+
cfgStatus: 'Default',
|
|
64
|
+
actionCode: 'ADD',
|
|
65
|
+
qty,
|
|
66
|
+
attributes,
|
|
67
|
+
lineItems,
|
|
68
|
+
productName: props.product.name,
|
|
69
|
+
productId: (_c = props.product.id) !== null && _c !== void 0 ? _c : '',
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const FLOW_CUSTOMIZATION = new InjectionToken('FLOW_CUSTOMIZATION');
|
|
56
74
|
|
|
57
75
|
const FORMATTING_SETTINGS_TOKEN = new InjectionToken('Summary of formatting settings for variant types of data, e.g. numbers, text, dates, etc');
|
|
58
76
|
|
|
@@ -82,9 +100,24 @@ class ContextService {
|
|
|
82
100
|
get isInitialized() {
|
|
83
101
|
return Boolean(this.context.value);
|
|
84
102
|
}
|
|
103
|
+
get isInitialized$() {
|
|
104
|
+
return this.context.pipe(map(Boolean));
|
|
105
|
+
}
|
|
85
106
|
get mode() {
|
|
86
107
|
return this.resolve().properties.mode;
|
|
87
108
|
}
|
|
109
|
+
get isEditMode$() {
|
|
110
|
+
return this.resolve$().pipe(map(() => {
|
|
111
|
+
const context = this.resolve();
|
|
112
|
+
if (context.mode === ConfigurationContextMode.ACCOUNT) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
if (context.mode === ConfigurationContextMode.QUOTE) {
|
|
116
|
+
return context.properties.Status === 'Draft';
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
88
121
|
resolve() {
|
|
89
122
|
if (!this.context.value) {
|
|
90
123
|
throw new Error('Context is not initialized yet!');
|
|
@@ -97,6 +130,13 @@ class ContextService {
|
|
|
97
130
|
create(headerId, mode) {
|
|
98
131
|
return this.contextApiService.getContext(headerId, mode).pipe(tap(context => this.context.next(merge(new ConfigurationContext(headerId, mode), context))), map(() => this.resolve()));
|
|
99
132
|
}
|
|
133
|
+
initTestMode() {
|
|
134
|
+
return this.create('TestId', ConfigurationContextMode.TEST).pipe(map(context => {
|
|
135
|
+
return this.update({
|
|
136
|
+
properties: Object.assign(Object.assign({}, context.properties), { RuntimeMode: ConfigurationContextMode.TEST, StartDate: new Date().toISOString().substring(0, 10), standalone: 'true' }),
|
|
137
|
+
});
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
100
140
|
update(partialContext) {
|
|
101
141
|
const originalContext = this.resolve();
|
|
102
142
|
const updatedContext = Object.assign(Object.assign(Object.assign({}, originalContext), partialContext), { properties: Object.assign(Object.assign({}, originalContext.properties), partialContext.properties) });
|
|
@@ -113,136 +153,101 @@ class ContextService {
|
|
|
113
153
|
this.context.next(null);
|
|
114
154
|
}
|
|
115
155
|
}
|
|
116
|
-
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
117
|
-
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
156
|
+
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextService, deps: [{ token: i1.ContextApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
157
|
+
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextService, providedIn: 'root' });
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextService, decorators: [{
|
|
119
159
|
type: Injectable,
|
|
120
160
|
args: [{ providedIn: 'root' }]
|
|
121
161
|
}], ctorParameters: function () { return [{ type: i1.ContextApiService }]; } });
|
|
122
162
|
|
|
123
|
-
class
|
|
124
|
-
|
|
125
|
-
this.
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
};
|
|
163
|
+
class FlowInfoService {
|
|
164
|
+
get flow() {
|
|
165
|
+
return this.flowSubj$.value;
|
|
166
|
+
}
|
|
167
|
+
set flow(value) {
|
|
168
|
+
this.flowSubj$.next(value);
|
|
169
|
+
}
|
|
170
|
+
constructor(flowsApiService, templatesApiService, customizationService) {
|
|
171
|
+
this.flowsApiService = flowsApiService;
|
|
172
|
+
this.templatesApiService = templatesApiService;
|
|
173
|
+
this.customizationService = customizationService;
|
|
174
|
+
this.templates = {};
|
|
175
|
+
this.defaultTemplates = {
|
|
176
|
+
flowEngine: 'Flow Engine',
|
|
177
|
+
};
|
|
178
|
+
this.flowSubj$ = new BehaviorSubject(null);
|
|
179
|
+
this.flow$ = this.flowSubj$.asObservable();
|
|
180
|
+
}
|
|
181
|
+
init$(flowId, params) {
|
|
182
|
+
this.params = params;
|
|
183
|
+
return this.flowsApiService.getFlow(flowId).pipe(switchMap(flow => this.initFlowTemplates$(flow).pipe(map$1(() => flow))), tap$1(flow => this.flowSubj$.next(flow)), map$1(noop), catchError(e => {
|
|
184
|
+
this.flowSubj$.next(null);
|
|
185
|
+
return throwError(() => e);
|
|
147
186
|
}));
|
|
148
187
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
156
|
-
RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeContextService });
|
|
157
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeContextService, decorators: [{
|
|
158
|
-
type: Injectable
|
|
159
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }]; } });
|
|
160
|
-
|
|
161
|
-
class ConfigurationRuntimeService {
|
|
162
|
-
constructor(apiService, contextService, runtimeContextService) {
|
|
163
|
-
this.apiService = apiService;
|
|
164
|
-
this.contextService = contextService;
|
|
165
|
-
this.runtimeContextService = runtimeContextService;
|
|
166
|
-
this._isInitialized = false;
|
|
167
|
-
this.uiDefinitionProperties = {};
|
|
168
|
-
}
|
|
169
|
-
reset() {
|
|
170
|
-
this._isInitialized = false;
|
|
171
|
-
this._runtimeContext = undefined;
|
|
172
|
-
this.initializationProps = undefined;
|
|
173
|
-
this.uiDefinitionProperties = {};
|
|
174
|
-
}
|
|
175
|
-
initTestMode(uiDefinitionContainer) {
|
|
176
|
-
var _a;
|
|
177
|
-
this.uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
|
|
178
|
-
const uiDefinitionExternals = (_a = uiDefinitionContainer.source.externals) !== null && _a !== void 0 ? _a : {};
|
|
179
|
-
return combineLatest([
|
|
180
|
-
this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
|
|
181
|
-
this.contextService.create('TestId', ConfigurationContextMode.TEST),
|
|
182
|
-
]).pipe(first(), map(([runtimeData, context]) => {
|
|
183
|
-
var _a;
|
|
184
|
-
this.contextService.update({
|
|
185
|
-
properties: Object.assign(Object.assign(Object.assign(Object.assign({}, (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.properties), context.properties), { ModelId: uiDefinitionContainer.modelId, RuntimeMode: ConfigurationContextMode.TEST, PricingEnabled: this.uiDefinitionProperties.pricingEnabled ? 'true' : 'false', StartDate: new Date().toISOString().substring(0, 10), PriceListId: this.uiDefinitionProperties.priceList, offeringId: this.uiDefinitionProperties.offeringId, standalone: 'true' }), uiDefinitionExternals),
|
|
186
|
-
});
|
|
187
|
-
this._runtimeContext = {
|
|
188
|
-
modelId: uiDefinitionContainer.modelId,
|
|
189
|
-
runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
|
|
190
|
-
runtimeMode: RuntimeMode.TEST,
|
|
191
|
-
uiDefinitionContainer,
|
|
192
|
-
};
|
|
193
|
-
return this._runtimeContext;
|
|
194
|
-
}), tap(() => (this._isInitialized = true)));
|
|
195
|
-
}
|
|
196
|
-
init(props) {
|
|
197
|
-
this.initializationProps = props;
|
|
198
|
-
const context = this.contextService.resolve();
|
|
199
|
-
return this.runtimeContextService.getRuntimeContext(props.productId, props.offeringId).pipe(tap(runtimeContext => {
|
|
200
|
-
var _a, _b;
|
|
201
|
-
this.uiDefinitionProperties = getUIDefinitionProperties(runtimeContext.uiDefinitionContainer);
|
|
202
|
-
const { PriceListId } = (_a = context.properties) !== null && _a !== void 0 ? _a : {};
|
|
203
|
-
const mergeContext = Object.assign(Object.assign({}, runtimeContext), { properties: Object.assign(Object.assign(Object.assign({}, runtimeContext.properties), context.properties), { PricingEnabled: PriceListId ? 'true' : 'false' }) });
|
|
204
|
-
this.id15to18('AccountId', mergeContext.properties);
|
|
205
|
-
this._runtimeContext = mergeContext;
|
|
206
|
-
if (context.properties && ((_b = this._runtimeContext.properties) === null || _b === void 0 ? void 0 : _b.StartDate)) {
|
|
207
|
-
this.contextService.update({
|
|
208
|
-
properties: Object.assign(Object.assign({}, this._runtimeContext.properties), context.properties),
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
return this._runtimeContext;
|
|
212
|
-
}), tap(() => (this._isInitialized = true)));
|
|
188
|
+
cleanup() {
|
|
189
|
+
this.flowSubj$.next(null);
|
|
190
|
+
this.params = undefined;
|
|
191
|
+
this.templates = {};
|
|
213
192
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
193
|
+
initFlowTemplates$(flow) {
|
|
194
|
+
var _a, _b, _c;
|
|
195
|
+
if (isEmpty(flow.properties.templates)) {
|
|
196
|
+
return of(undefined);
|
|
217
197
|
}
|
|
218
|
-
|
|
219
|
-
|
|
198
|
+
return forkJoin([
|
|
199
|
+
this.templatesApiService.fetchTemplates$(),
|
|
200
|
+
(_c = (_b = (_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplates) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : of([]),
|
|
201
|
+
]).pipe(map$1(([templates, localTemplates]) => {
|
|
202
|
+
Object.entries(Object.assign(Object.assign({}, this.defaultTemplates), flow.properties.templates)).forEach(([key, name]) => {
|
|
203
|
+
var _a;
|
|
204
|
+
const type = this.remapTemplateName(key);
|
|
205
|
+
if (type) {
|
|
206
|
+
this.templates[type] =
|
|
207
|
+
(_a = localTemplates.find(template => template.name === name && template.type === type)) !== null && _a !== void 0 ? _a : templates.find(template => template.name === name && template.type === type);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}));
|
|
220
211
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
212
|
+
remapTemplateName(templateType) {
|
|
213
|
+
switch (templateType) {
|
|
214
|
+
case 'flowEngine':
|
|
215
|
+
return UITemplateType.FLOW_ENGINE;
|
|
216
|
+
default:
|
|
217
|
+
break;
|
|
224
218
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
219
|
+
switch (templateType) {
|
|
220
|
+
case 'assets':
|
|
221
|
+
case 'shoppingCart':
|
|
222
|
+
// No separate Assets template at the moment
|
|
223
|
+
return UITemplateType.SHOPPING_CART;
|
|
224
|
+
case 'catalog':
|
|
225
|
+
return UITemplateType.CATALOG;
|
|
226
|
+
case 'docGen':
|
|
227
|
+
return UITemplateType.DOCGEN;
|
|
228
|
+
case 'guidedSelling':
|
|
229
|
+
return UITemplateType.GUIDED_SELLING;
|
|
230
|
+
case 'flowHeader':
|
|
231
|
+
return UITemplateType.FLOW_HEADER;
|
|
232
|
+
default:
|
|
233
|
+
break;
|
|
228
234
|
}
|
|
229
|
-
|
|
230
|
-
get isInitialized() {
|
|
231
|
-
return this._isInitialized;
|
|
232
|
-
}
|
|
233
|
-
get runtimeModel() {
|
|
234
|
-
var _a;
|
|
235
|
-
return (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.runtimeModel;
|
|
236
|
-
}
|
|
237
|
-
get runtimeContext() {
|
|
238
|
-
return this._runtimeContext;
|
|
235
|
+
return undefined;
|
|
239
236
|
}
|
|
240
237
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
244
|
-
type: Injectable
|
|
245
|
-
|
|
238
|
+
FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token: i1.FlowsApiService }, { token: i1.UITemplatesApiService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
239
|
+
FlowInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, providedIn: 'root' });
|
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, decorators: [{
|
|
241
|
+
type: Injectable,
|
|
242
|
+
args: [{ providedIn: 'root' }]
|
|
243
|
+
}], ctorParameters: function () {
|
|
244
|
+
return [{ type: i1.FlowsApiService }, { type: i1.UITemplatesApiService }, { type: undefined, decorators: [{
|
|
245
|
+
type: Optional
|
|
246
|
+
}, {
|
|
247
|
+
type: Inject,
|
|
248
|
+
args: [FLOW_CUSTOMIZATION]
|
|
249
|
+
}] }];
|
|
250
|
+
} });
|
|
246
251
|
|
|
247
252
|
const findLineItem = (id, lineItems) => {
|
|
248
253
|
return findLineItemWithComparator(lineItems, (li) => li.id === id);
|
|
@@ -395,7 +400,7 @@ const isLineItemModified = (lineItem) => {
|
|
|
395
400
|
const multiplyLineItems = (lineItem, qty, split) => {
|
|
396
401
|
if (split) {
|
|
397
402
|
const unifyIds = (lineItem) => (Object.assign(Object.assign({}, lineItem), { id: UUID.UUID(), lineItems: lineItem.lineItems.map(unifyIds) }));
|
|
398
|
-
return map$
|
|
403
|
+
return map$2(new Array(qty), () => unifyIds(lineItem));
|
|
399
404
|
}
|
|
400
405
|
else {
|
|
401
406
|
return [
|
|
@@ -452,7 +457,52 @@ class LineItemWorker {
|
|
|
452
457
|
}
|
|
453
458
|
}
|
|
454
459
|
|
|
460
|
+
function extractMetadata(uiDefinition) {
|
|
461
|
+
return omit(uiDefinition, [
|
|
462
|
+
'children',
|
|
463
|
+
'pages',
|
|
464
|
+
'components',
|
|
465
|
+
]);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
class IntegrationState {
|
|
469
|
+
constructor() {
|
|
470
|
+
this.stateSubj$ = new BehaviorSubject({});
|
|
471
|
+
this.action$ = new Subject();
|
|
472
|
+
}
|
|
473
|
+
get state$() {
|
|
474
|
+
return this.stateSubj$.asObservable();
|
|
475
|
+
}
|
|
476
|
+
get state() {
|
|
477
|
+
return this.stateSubj$.getValue();
|
|
478
|
+
}
|
|
479
|
+
patchState(update) {
|
|
480
|
+
this.stateSubj$.next(Object.assign(Object.assign({}, this.stateSubj$.getValue()), update));
|
|
481
|
+
}
|
|
482
|
+
dispatch(action) {
|
|
483
|
+
this.action$.next(action);
|
|
484
|
+
}
|
|
485
|
+
listen$(actionType) {
|
|
486
|
+
return this.action$.pipe(filter$1(action => action.type === actionType), map$1(action => action.payload));
|
|
487
|
+
}
|
|
488
|
+
listenAll$() {
|
|
489
|
+
return this.action$.asObservable();
|
|
490
|
+
}
|
|
491
|
+
clear() {
|
|
492
|
+
this.stateSubj$.next({});
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
IntegrationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: IntegrationState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
496
|
+
IntegrationState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: IntegrationState, providedIn: 'root' });
|
|
497
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: IntegrationState, decorators: [{
|
|
498
|
+
type: Injectable,
|
|
499
|
+
args: [{ providedIn: 'root' }]
|
|
500
|
+
}] });
|
|
501
|
+
|
|
455
502
|
class QuoteDraftService {
|
|
503
|
+
get isInitialized$() {
|
|
504
|
+
return this.isInitializedSubj$.asObservable();
|
|
505
|
+
}
|
|
456
506
|
get isInitialized() {
|
|
457
507
|
return this.isInitializedSubj$.getValue();
|
|
458
508
|
}
|
|
@@ -478,10 +528,19 @@ class QuoteDraftService {
|
|
|
478
528
|
const quoteDraft = this.quoteSubj$.value;
|
|
479
529
|
return Boolean(quoteDraft && quoteDraft.currentState.length > 0);
|
|
480
530
|
}
|
|
481
|
-
|
|
531
|
+
get hasAssets$() {
|
|
532
|
+
return this.quoteSubj$.pipe(map(() => this.hasAssets));
|
|
533
|
+
}
|
|
534
|
+
get hasAssets() {
|
|
535
|
+
var _a;
|
|
536
|
+
const quoteDraft = this.quoteSubj$.value;
|
|
537
|
+
return (_a = quoteDraft === null || quoteDraft === void 0 ? void 0 : quoteDraft.currentState.some(li => li.assetId || li.openOrderLineItemId)) !== null && _a !== void 0 ? _a : false;
|
|
538
|
+
}
|
|
539
|
+
constructor(context, quoteApiService, priceApiService, integrationState) {
|
|
482
540
|
this.context = context;
|
|
483
541
|
this.quoteApiService = quoteApiService;
|
|
484
542
|
this.priceApiService = priceApiService;
|
|
543
|
+
this.integrationState = integrationState;
|
|
485
544
|
this.quoteSubj$ = new BehaviorSubject(null);
|
|
486
545
|
this.resetSubj$ = new BehaviorSubject(true);
|
|
487
546
|
this.isInitializedSubj$ = new BehaviorSubject(false);
|
|
@@ -492,12 +551,13 @@ class QuoteDraftService {
|
|
|
492
551
|
this.reset$ = this.resetSubj$.asObservable();
|
|
493
552
|
this.activePriceList$ = this.context.resolve$().pipe(map(ctx => this.allPriceLists.find(priceList => priceList.id === ctx.properties.PriceListId)), map(priceList => priceList !== null && priceList !== void 0 ? priceList : null));
|
|
494
553
|
this.isInitializedSubj$
|
|
495
|
-
.pipe(filter(isInitialized => isInitialized), switchMap(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
|
|
554
|
+
.pipe(filter(isInitialized => isInitialized), switchMap$1(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
|
|
496
555
|
.subscribe();
|
|
497
556
|
}
|
|
498
557
|
reset() {
|
|
499
558
|
this.resetSubj$.next(true);
|
|
500
559
|
this.quoteSubj$.next(null);
|
|
560
|
+
this.isInitialized = false;
|
|
501
561
|
this.hasUnsavedChanges = false;
|
|
502
562
|
}
|
|
503
563
|
init(quoteId, params) {
|
|
@@ -508,6 +568,11 @@ class QuoteDraftService {
|
|
|
508
568
|
this.populateActivePriceLists$();
|
|
509
569
|
}), map(() => noop()), take(1));
|
|
510
570
|
}
|
|
571
|
+
finalizeInit() {
|
|
572
|
+
this.initializeModifiedAssetsMap();
|
|
573
|
+
this.isInitialized = true;
|
|
574
|
+
this.hasUnsavedChanges = false;
|
|
575
|
+
}
|
|
511
576
|
setCurrentLineItemState(lineItems) {
|
|
512
577
|
const quoteDraft = this.quoteSubj$.value;
|
|
513
578
|
if (!quoteDraft) {
|
|
@@ -653,333 +718,415 @@ class QuoteDraftService {
|
|
|
653
718
|
this.hasUnsavedChanges = !isEqual(this.initialCurrentState, quote === null || quote === void 0 ? void 0 : quote.currentState);
|
|
654
719
|
}
|
|
655
720
|
}
|
|
721
|
+
initializeModifiedAssetsMap() {
|
|
722
|
+
this.integrationState.patchState({
|
|
723
|
+
modifiedAssets: generateModifiedAssetsMap(this.currentState),
|
|
724
|
+
});
|
|
725
|
+
}
|
|
656
726
|
}
|
|
657
|
-
QuoteDraftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
658
|
-
QuoteDraftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
659
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
727
|
+
QuoteDraftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteDraftService, deps: [{ token: ContextService }, { token: i1.QuoteApiService }, { token: i1.PriceApiService }, { token: IntegrationState }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
728
|
+
QuoteDraftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteDraftService, providedIn: 'root' });
|
|
729
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteDraftService, decorators: [{
|
|
660
730
|
type: Injectable,
|
|
661
731
|
args: [{ providedIn: 'root' }]
|
|
662
|
-
}], ctorParameters: function () { return [{ type: ContextService }, { type: i1.QuoteApiService }, { type: i1.PriceApiService }]; } });
|
|
732
|
+
}], ctorParameters: function () { return [{ type: ContextService }, { type: i1.QuoteApiService }, { type: i1.PriceApiService }, { type: IntegrationState }]; } });
|
|
663
733
|
|
|
664
|
-
class
|
|
665
|
-
constructor(quoteDraftService,
|
|
666
|
-
this.quoteDraftService = quoteDraftService;
|
|
667
|
-
this.runtimeService = runtimeService;
|
|
734
|
+
class FlowStateService {
|
|
735
|
+
constructor(contextService, quoteDraftService, flowInfoService, flowConfiguration, processorsApiService, flowStateApiService, quoteApiService, toastService, customizationService) {
|
|
668
736
|
this.contextService = contextService;
|
|
669
|
-
this.
|
|
670
|
-
this.
|
|
671
|
-
this.
|
|
672
|
-
this.
|
|
673
|
-
this.
|
|
674
|
-
this.
|
|
675
|
-
this.
|
|
676
|
-
this.
|
|
677
|
-
this.
|
|
678
|
-
this.
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
this.
|
|
682
|
-
this.
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
737
|
+
this.quoteDraftService = quoteDraftService;
|
|
738
|
+
this.flowInfoService = flowInfoService;
|
|
739
|
+
this.flowConfiguration = flowConfiguration;
|
|
740
|
+
this.processorsApiService = processorsApiService;
|
|
741
|
+
this.flowStateApiService = flowStateApiService;
|
|
742
|
+
this.quoteApiService = quoteApiService;
|
|
743
|
+
this.toastService = toastService;
|
|
744
|
+
this.customizationService = customizationService;
|
|
745
|
+
this.NOT_INITIALIZED = Symbol();
|
|
746
|
+
this._hasStatefulUnsavedChanges = false;
|
|
747
|
+
this.stateId$ = new BehaviorSubject(null);
|
|
748
|
+
this.processors = {};
|
|
749
|
+
this.subscriptions = {};
|
|
750
|
+
this.cleanup$ = new Subject();
|
|
751
|
+
/*
|
|
752
|
+
In stateless mode watch QuoteDraft changes and call executeRequest so that
|
|
753
|
+
all subscriptions get their updates according to updated QuoteDraft
|
|
754
|
+
*/
|
|
755
|
+
this.isInitialized$()
|
|
756
|
+
.pipe(filter$1(Boolean), filter$1(() => !this.getFlowSafe().properties.stateful), switchMap(() => this.flowConfiguration.updated$), switchMap(() => this.executeRequest$({}, true)))
|
|
757
|
+
.subscribe();
|
|
758
|
+
this.charges$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(flow => {
|
|
759
|
+
if (!flow.properties.stateful) {
|
|
760
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.charges));
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'CHARGES', null, {
|
|
764
|
+
cold: true,
|
|
765
|
+
}).pipe(map$1(response => (response.success ? response.result : {})));
|
|
766
|
+
}
|
|
767
|
+
}), filter$1(isDefined), shareReplay$1());
|
|
768
|
+
this.charges$.subscribe();
|
|
769
|
+
this.pricePlans$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(flow => {
|
|
770
|
+
if (!flow.properties.stateful) {
|
|
771
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.pricePlans));
|
|
772
|
+
}
|
|
773
|
+
else {
|
|
774
|
+
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'PRICE_PLANS', null, {
|
|
775
|
+
cold: true,
|
|
776
|
+
}).pipe(map$1(response => (response.success ? response.result : {})));
|
|
777
|
+
}
|
|
778
|
+
}), filter$1(isDefined), shareReplay$1());
|
|
779
|
+
this.pricePlans$.subscribe();
|
|
780
|
+
this.activeMetrics$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(flow => {
|
|
781
|
+
if (!flow.properties.stateful) {
|
|
782
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.activeMetrics));
|
|
783
|
+
}
|
|
784
|
+
else {
|
|
785
|
+
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'ACTIVE_METRICS', null, {
|
|
786
|
+
cold: true,
|
|
787
|
+
}).pipe(map$1(response => (response.success ? response.result : [])));
|
|
788
|
+
}
|
|
789
|
+
}), filter$1(isDefined), shareReplay$1());
|
|
790
|
+
this.activeMetrics$.subscribe();
|
|
687
791
|
}
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
const skipCardinalityCalculation = (options === null || options === void 0 ? void 0 : options.skipCardinalityCalculation) || this.contextSnapshot.properties['#skipCardinalityCalculation'] === 'true';
|
|
693
|
-
this.configurableRamp = new LineItemWorker(this.lineItem.value).replace(lineItem, skipCardinalityCalculation).li;
|
|
694
|
-
return this.configure().pipe(catchError(error => {
|
|
695
|
-
console.error(error);
|
|
696
|
-
if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
|
|
697
|
-
this.messageService.add({ severity: 'error', summary: error });
|
|
792
|
+
init$() {
|
|
793
|
+
return this.initProcessors$().pipe(switchMap(() => {
|
|
794
|
+
if (this.getFlowSafe().properties.stateful) {
|
|
795
|
+
return this.initStateful$();
|
|
698
796
|
}
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
return throwError(() => error);
|
|
702
|
-
}), tap(() => {
|
|
703
|
-
if (!this.hasUnsavedChanges) {
|
|
704
|
-
this.hasUnsavedChanges = true;
|
|
797
|
+
else {
|
|
798
|
+
return this.initStateless$();
|
|
705
799
|
}
|
|
706
800
|
}));
|
|
707
801
|
}
|
|
708
|
-
|
|
709
|
-
this.
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
get() {
|
|
715
|
-
return this.lineItem.asObservable().pipe(shareReplay$1());
|
|
716
|
-
}
|
|
717
|
-
getSnapshot() {
|
|
718
|
-
return this.lineItem.value ? Object.assign({}, this.lineItem.value) : undefined;
|
|
719
|
-
}
|
|
720
|
-
getRuntimeModel() {
|
|
721
|
-
const runtimeModel = this.runtimeService.runtimeModel;
|
|
722
|
-
if (!runtimeModel) {
|
|
723
|
-
throw new Error('Runtime model not initialized');
|
|
802
|
+
cleanup() {
|
|
803
|
+
Object.values(this.subscriptions).forEach(({ data$ }) => data$.complete());
|
|
804
|
+
this.subscriptions = {};
|
|
805
|
+
if (this.stateId$.value) {
|
|
806
|
+
this.flowStateApiService.cancel(this.stateId$.value).subscribe();
|
|
807
|
+
this.stateId$.next(null);
|
|
724
808
|
}
|
|
725
|
-
|
|
809
|
+
this.processors = {};
|
|
810
|
+
this.cleanup$.next();
|
|
726
811
|
}
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
}
|
|
732
|
-
return runtimeContext;
|
|
812
|
+
get hasUnsavedChanges() {
|
|
813
|
+
return this.getFlowSafe().properties.stateful
|
|
814
|
+
? this._hasStatefulUnsavedChanges
|
|
815
|
+
: this.quoteDraftService.hasUnsavedChanges;
|
|
733
816
|
}
|
|
734
|
-
get
|
|
735
|
-
return this.
|
|
817
|
+
get stateId() {
|
|
818
|
+
return this.stateId$.value;
|
|
736
819
|
}
|
|
737
|
-
|
|
738
|
-
return this.
|
|
820
|
+
isInitialized$() {
|
|
821
|
+
return combineLatest([this.stateId$, this.quoteDraftService.isInitialized$]).pipe(map$1(values => values.some(Boolean)));
|
|
739
822
|
}
|
|
740
|
-
|
|
741
|
-
return this.
|
|
823
|
+
isInitialized() {
|
|
824
|
+
return Boolean(this.stateId$.value) || this.quoteDraftService.isInitialized;
|
|
742
825
|
}
|
|
743
|
-
|
|
744
|
-
|
|
826
|
+
execute$(scope, exec) {
|
|
827
|
+
const request = this.execToRequest(scope, exec);
|
|
828
|
+
return this.executeRequest$(request).pipe(map$1(result => {
|
|
829
|
+
// Keep only requested results
|
|
830
|
+
const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
|
|
831
|
+
var _a;
|
|
832
|
+
if ((_a = exec.selectors) === null || _a === void 0 ? void 0 : _a[requestId]) {
|
|
833
|
+
trunk[requestId] = result;
|
|
834
|
+
}
|
|
835
|
+
return trunk;
|
|
836
|
+
}, {});
|
|
837
|
+
return actualSelectors;
|
|
838
|
+
}));
|
|
745
839
|
}
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
configure() {
|
|
753
|
-
return this.configureRequest$(this.generateRequest());
|
|
840
|
+
dispatch$(scope, action, inputData) {
|
|
841
|
+
const exec = {
|
|
842
|
+
actions: [{ name: action, inputData }],
|
|
843
|
+
};
|
|
844
|
+
const request = this.execToRequest(scope, exec);
|
|
845
|
+
return this.executeRequest$(request).pipe(map$1(noop));
|
|
754
846
|
}
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
const
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
847
|
+
select$(scope, selectorName, inputData) {
|
|
848
|
+
const requestId = this.generateRequestId(scope, selectorName, inputData);
|
|
849
|
+
const request = this.execToRequest(scope, {
|
|
850
|
+
selectors: {
|
|
851
|
+
[requestId]: {
|
|
852
|
+
name: selectorName,
|
|
853
|
+
inputData,
|
|
854
|
+
},
|
|
855
|
+
},
|
|
856
|
+
});
|
|
857
|
+
return this.executeRequest$(request).pipe(map$1(response => response.selectors[requestId]));
|
|
858
|
+
}
|
|
859
|
+
subscribe$(scope, selectorName, inputData, options) {
|
|
860
|
+
const requestId = this.generateRequestId(scope, selectorName, inputData);
|
|
861
|
+
if (!this.subscriptions[requestId]) {
|
|
862
|
+
const request = this.execToRequest(scope, {
|
|
863
|
+
selectors: {
|
|
864
|
+
[requestId]: {
|
|
865
|
+
name: selectorName,
|
|
866
|
+
inputData,
|
|
867
|
+
},
|
|
868
|
+
},
|
|
869
|
+
});
|
|
870
|
+
this.subscriptions[requestId] = {
|
|
871
|
+
request,
|
|
872
|
+
data$: new BehaviorSubject(this.NOT_INITIALIZED),
|
|
873
|
+
};
|
|
874
|
+
if (!(options === null || options === void 0 ? void 0 : options.cold)) {
|
|
875
|
+
this.executeRequest$(request).subscribe();
|
|
769
876
|
}
|
|
770
|
-
|
|
771
|
-
|
|
877
|
+
}
|
|
878
|
+
return this.subscriptions[requestId].data$.pipe(filter$1(data => data != this.NOT_INITIALIZED), map$1(data => data), finalize(() => {
|
|
879
|
+
if (!this.subscriptions[requestId].data$.observed) {
|
|
880
|
+
delete this.subscriptions[requestId];
|
|
772
881
|
}
|
|
773
|
-
|
|
774
|
-
}), map(({ lineItem }) => lineItem), catchError(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })), finalize(() => this.isLoadingSubj$.next(false)));
|
|
882
|
+
}));
|
|
775
883
|
}
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
884
|
+
save$() {
|
|
885
|
+
if (this.getFlowSafe().properties.stateful) {
|
|
886
|
+
if (this.stateId$.value) {
|
|
887
|
+
return this.flowStateApiService.save(this.stateId$.value);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
else {
|
|
891
|
+
const quoteDraft = this.quoteDraftService.quoteDraftForActivePriceList;
|
|
892
|
+
if (quoteDraft) {
|
|
893
|
+
return this.quoteApiService.upsertQuote(quoteDraft);
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
return of({ quoteId: '' });
|
|
783
897
|
}
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
.
|
|
787
|
-
|
|
788
|
-
})
|
|
789
|
-
.pipe(catchError(error => {
|
|
790
|
-
if (error instanceof HttpErrorResponse) {
|
|
791
|
-
this.messageService.add({ severity: ToastType.error, summary: error.error.message || error.error });
|
|
898
|
+
submit$() {
|
|
899
|
+
if (this.getFlowSafe().properties.stateful) {
|
|
900
|
+
if (this.stateId$.value) {
|
|
901
|
+
return this.flowStateApiService.submit(this.stateId$.value);
|
|
792
902
|
}
|
|
793
|
-
|
|
794
|
-
|
|
903
|
+
}
|
|
904
|
+
else {
|
|
905
|
+
const quoteDraft = this.quoteDraftService.quoteDraftForActivePriceList;
|
|
906
|
+
if (quoteDraft) {
|
|
907
|
+
return this.quoteApiService.submitQuote(quoteDraft);
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
return of({ quoteId: '' });
|
|
795
911
|
}
|
|
796
|
-
|
|
797
|
-
var _a
|
|
798
|
-
const
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
912
|
+
getOwnerIdByScope(scope) {
|
|
913
|
+
var _a;
|
|
914
|
+
const ownerId = (_a = this.flowInfoService.templates[scope]) === null || _a === void 0 ? void 0 : _a.id;
|
|
915
|
+
if (!ownerId) {
|
|
916
|
+
throw `OwnerId is not found for scope ${scope}`;
|
|
917
|
+
}
|
|
918
|
+
return ownerId;
|
|
919
|
+
}
|
|
920
|
+
getScopeByOwnerId(id) {
|
|
921
|
+
for (const template of Object.values(this.flowInfoService.templates)) {
|
|
922
|
+
if (template.id === id) {
|
|
923
|
+
return template.type;
|
|
808
924
|
}
|
|
809
925
|
}
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
926
|
+
return;
|
|
927
|
+
}
|
|
928
|
+
execToRequest(scope, exec) {
|
|
929
|
+
var _a;
|
|
930
|
+
const ownerId = this.getOwnerIdByScope(scope);
|
|
931
|
+
return {
|
|
932
|
+
actions: (_a = exec.actions) === null || _a === void 0 ? void 0 : _a.map(action => { var _a; return ({ apiName: action.name, ownerId, inputData: (_a = action.inputData) !== null && _a !== void 0 ? _a : {} }); }),
|
|
933
|
+
selectors: exec.selectors &&
|
|
934
|
+
Object.entries(exec.selectors).reduce((trunk, [key, selector]) => {
|
|
935
|
+
var _a;
|
|
936
|
+
return (Object.assign(Object.assign({}, trunk), { [key]: { apiName: selector.name, ownerId, inputData: (_a = selector.inputData) !== null && _a !== void 0 ? _a : {} } }));
|
|
937
|
+
}, {}),
|
|
818
938
|
};
|
|
819
|
-
request = ConfigurationTranslatorUtils.lightenConfigurationRequest(request);
|
|
820
|
-
return request;
|
|
821
939
|
}
|
|
822
|
-
|
|
940
|
+
executeRequest$(request, forceSubscriptions = false) {
|
|
823
941
|
var _a;
|
|
824
|
-
|
|
942
|
+
const fullRequest = cloneDeep(request);
|
|
943
|
+
if (((_a = fullRequest.actions) === null || _a === void 0 ? void 0 : _a.length) || forceSubscriptions) {
|
|
944
|
+
for (const subscription of Object.values(this.subscriptions)) {
|
|
945
|
+
fullRequest.selectors = assign(fullRequest.selectors, subscription.request.selectors);
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
const execution$ = this.getFlowSafe().properties.stateful
|
|
949
|
+
? this.executeStateful$(fullRequest)
|
|
950
|
+
: this.executeStateless$(fullRequest);
|
|
951
|
+
return execution$.pipe(tap$1(result => this.handleSelectorsResponse(result.selectors)));
|
|
825
952
|
}
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
dismissableMask: false,
|
|
836
|
-
closeOnEscape: false,
|
|
837
|
-
closable: false,
|
|
838
|
-
showHeader: true,
|
|
839
|
-
header: `Inactive Products in Quote`,
|
|
840
|
-
width: '440px',
|
|
841
|
-
data: { confirmationConfig },
|
|
842
|
-
})
|
|
843
|
-
.onClose.subscribe(result => {
|
|
844
|
-
if (!result) {
|
|
845
|
-
const context = this.contextService.resolve();
|
|
846
|
-
window['VELO_BACK_FN'].apply(null, [context.headerId]);
|
|
953
|
+
handleSelectorsResponse(selectors) {
|
|
954
|
+
Object.entries(selectors).forEach(([requestId, selectorResult]) => {
|
|
955
|
+
var _a;
|
|
956
|
+
if (!selectorResult.success) {
|
|
957
|
+
this.toastService.add({ severity: ToastType.error, summary: selectorResult.errorMessage });
|
|
958
|
+
}
|
|
959
|
+
const subscription$ = (_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$;
|
|
960
|
+
if (subscription$) {
|
|
961
|
+
subscription$.next(selectorResult);
|
|
847
962
|
}
|
|
848
963
|
});
|
|
849
964
|
}
|
|
850
|
-
|
|
965
|
+
initStateful$() {
|
|
851
966
|
var _a;
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
}
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
this.
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
967
|
+
// Subscriptions
|
|
968
|
+
this.subscribe$(UITemplateType.FLOW_ENGINE, 'CONTEXT', null, { cold: true })
|
|
969
|
+
.pipe(tap$1(response => {
|
|
970
|
+
if (response.success) {
|
|
971
|
+
this.contextService.update(response.result);
|
|
972
|
+
}
|
|
973
|
+
}), takeUntil(this.cleanup$))
|
|
974
|
+
.subscribe();
|
|
975
|
+
const processorsList = flatten(Object.values(this.processors).map(ownerMap => Object.values(ownerMap !== null && ownerMap !== void 0 ? ownerMap : {})));
|
|
976
|
+
const processors = processorsList.length ? processorsList : undefined;
|
|
977
|
+
const selectors = Object.values(this.subscriptions)
|
|
978
|
+
.map(({ request }) => request.selectors)
|
|
979
|
+
.filter(isDefined)
|
|
980
|
+
.reduce((trunk, selectors) => (Object.assign(Object.assign({}, trunk), selectors)), {});
|
|
981
|
+
const request = this.getDefaultExecutionRequestDTO();
|
|
982
|
+
return this.flowStateApiService
|
|
983
|
+
.init({
|
|
984
|
+
quoteId: this.contextService.resolve().headerId,
|
|
985
|
+
params: (_a = this.flowInfoService.params) !== null && _a !== void 0 ? _a : {},
|
|
986
|
+
actionsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.ACTION),
|
|
987
|
+
selectorsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
|
|
988
|
+
selectors: Object.assign(Object.assign({}, selectors), request.selectors),
|
|
989
|
+
actions: request.actions,
|
|
990
|
+
})
|
|
991
|
+
.pipe(map$1(({ stateId, selectors }) => {
|
|
992
|
+
this.handleSelectorsResponse(selectors);
|
|
993
|
+
this.stateId$.next(stateId);
|
|
994
|
+
}));
|
|
874
995
|
}
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
996
|
+
executeStateful$(request) {
|
|
997
|
+
if (!this.stateId$.value) {
|
|
998
|
+
throw 'Stateful session is not initialized';
|
|
999
|
+
}
|
|
1000
|
+
return this.flowStateApiService.execute(this.stateId$.value, request).pipe(tap$1(() => {
|
|
1001
|
+
var _a;
|
|
1002
|
+
if ((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length) {
|
|
1003
|
+
this._hasStatefulUnsavedChanges = true;
|
|
880
1004
|
}
|
|
881
|
-
|
|
882
|
-
return this.statefulConfigurationApiService.init({
|
|
883
|
-
request: this.configurationService.generateRequest(),
|
|
884
|
-
actions: actions === null || actions === void 0 ? void 0 : actions.map(action => ({ name: action.apiName, script: action.script })),
|
|
885
|
-
selectors: selectors === null || selectors === void 0 ? void 0 : selectors.map(selector => ({ name: selector.apiName, script: selector.script })),
|
|
886
|
-
});
|
|
887
|
-
}), tap$1(stateId => (this.stateId = stateId || null)), map$2(() => undefined));
|
|
1005
|
+
}), tap$1(response => this.stateId$.next(response.stateId)));
|
|
888
1006
|
}
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
this.
|
|
892
|
-
this.
|
|
1007
|
+
initStateless$() {
|
|
1008
|
+
var _a;
|
|
1009
|
+
const { headerId } = this.contextService.resolve();
|
|
1010
|
+
const stateInit$ = this.quoteDraftService.init(headerId, (_a = this.flowInfoService.params) !== null && _a !== void 0 ? _a : {}).pipe(switchMap(() => this.executeRequest$(this.getDefaultExecutionRequestDTO())), switchMap(() => this.calculate$()));
|
|
1011
|
+
return stateInit$.pipe(tap$1(() => this.quoteDraftService.finalizeInit()), map$1(noop));
|
|
893
1012
|
}
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
1013
|
+
calculate$() {
|
|
1014
|
+
const flowState = this.quoteDraftService.quoteDraft;
|
|
1015
|
+
if (!flowState) {
|
|
1016
|
+
return of(undefined);
|
|
897
1017
|
}
|
|
898
|
-
|
|
899
|
-
|
|
1018
|
+
/*
|
|
1019
|
+
Don't execute procedures when:
|
|
1020
|
+
* Initializing a standalone product configuration UI, as procedure is execute in /price call
|
|
1021
|
+
* Initializing an empty account (account with no assets)
|
|
1022
|
+
*/
|
|
1023
|
+
const isEmptyAccountMode = this.contextService.mode === ConfigurationContextMode.ACCOUNT && !this.quoteDraftService.hasProducts;
|
|
1024
|
+
if (this.quoteDraftService.isStandalone || isEmptyAccountMode) {
|
|
1025
|
+
return of(undefined);
|
|
900
1026
|
}
|
|
901
|
-
|
|
902
|
-
dispatch$(actionName, inputData) {
|
|
903
|
-
return this.execute$({ actions: [{ name: actionName, inputData }] });
|
|
904
|
-
}
|
|
905
|
-
select$(selectorName, inputData) {
|
|
906
|
-
const requestId = UUID.UUID();
|
|
907
|
-
return this.execute$({
|
|
908
|
-
selectors: {
|
|
909
|
-
[requestId]: {
|
|
910
|
-
name: selectorName,
|
|
911
|
-
inputData,
|
|
912
|
-
},
|
|
913
|
-
},
|
|
914
|
-
}).pipe(map$2(() => this.stateSubj$.value[requestId]), tap$1(() => this.stateSubj$.next(omit(this.stateSubj$.value, requestId))));
|
|
915
|
-
}
|
|
916
|
-
get isStatefulConfiguration() {
|
|
917
|
-
var _a;
|
|
918
|
-
return (_a = this.runtimeService.uiDefinitionProperties.statefulConfigurationEnabled) !== null && _a !== void 0 ? _a : false;
|
|
1027
|
+
return this.flowConfiguration.calculate$(flowState);
|
|
919
1028
|
}
|
|
920
1029
|
executeStateless$(request) {
|
|
921
|
-
return of(undefined).pipe(
|
|
1030
|
+
return of(undefined).pipe(tap$1(() => this.executeStatelessActions(request)), switchMap(() => {
|
|
922
1031
|
var _a;
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
1032
|
+
/*
|
|
1033
|
+
Skip price calculation in case
|
|
1034
|
+
1. No actions in the request
|
|
1035
|
+
2. Initialization process execution (state not initialized yet)
|
|
1036
|
+
*/
|
|
1037
|
+
if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length) || !this.isInitialized()) {
|
|
926
1038
|
return of(undefined);
|
|
927
1039
|
}
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
var _a;
|
|
931
|
-
configurationRequest = (_a = this.executeActionScript(configurationRequest, action)) !== null && _a !== void 0 ? _a : configurationRequest;
|
|
932
|
-
});
|
|
933
|
-
return this.configurationService.configureRequest$(configurationRequest);
|
|
934
|
-
}), tap$1(() => {
|
|
935
|
-
if (!request.selectors) {
|
|
936
|
-
return;
|
|
1040
|
+
else {
|
|
1041
|
+
return this.calculate$();
|
|
937
1042
|
}
|
|
938
|
-
|
|
939
|
-
const finalConfigurationRequest = this.configurationService.generateRequest();
|
|
940
|
-
const selectorsResult = EntityUtil.entries(request.selectors).reduce((trunk, [key, selector]) => {
|
|
941
|
-
trunk[key] = this.executeSelectorScript(finalConfigurationRequest, selector);
|
|
942
|
-
return trunk;
|
|
943
|
-
}, {});
|
|
944
|
-
this.stateSubj$.next(Object.assign(Object.assign({}, this.stateSubj$.value), selectorsResult));
|
|
945
|
-
}), map$2(() => undefined));
|
|
1043
|
+
}), map$1(() => this.executeStatelessSelectors(request)));
|
|
946
1044
|
}
|
|
947
|
-
|
|
948
|
-
|
|
1045
|
+
executeStatelessActions(request) {
|
|
1046
|
+
var _a;
|
|
1047
|
+
if (!this.quoteDraftService.quoteDraft || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
let flowState = this.quoteDraftService.quoteDraft;
|
|
1051
|
+
request.actions.forEach(action => {
|
|
1052
|
+
var _a;
|
|
1053
|
+
flowState = (_a = this.executeActionScript(flowState, action)) !== null && _a !== void 0 ? _a : flowState;
|
|
1054
|
+
});
|
|
1055
|
+
this.quoteDraftService.updateQuoteDraft(flowState);
|
|
1056
|
+
}
|
|
1057
|
+
executeStatelessSelectors(request) {
|
|
1058
|
+
var _a;
|
|
1059
|
+
if (!this.quoteDraftService.quoteDraft) {
|
|
1060
|
+
throw 'QuoteDraft is not initialized';
|
|
1061
|
+
}
|
|
1062
|
+
const flowState = this.quoteDraftService.quoteDraft;
|
|
1063
|
+
return EntityUtil.entries((_a = request.selectors) !== null && _a !== void 0 ? _a : {}).reduce((result, [key, selector]) => {
|
|
1064
|
+
try {
|
|
1065
|
+
result.selectors[key] = {
|
|
1066
|
+
success: true,
|
|
1067
|
+
result: this.executeSelectorScript(flowState, selector),
|
|
1068
|
+
};
|
|
1069
|
+
}
|
|
1070
|
+
catch (e) {
|
|
1071
|
+
result.selectors[key] = {
|
|
1072
|
+
success: false,
|
|
1073
|
+
errorMessage: String(e),
|
|
1074
|
+
};
|
|
1075
|
+
}
|
|
1076
|
+
return result;
|
|
1077
|
+
}, { stateId: '', selectors: {} });
|
|
1078
|
+
}
|
|
1079
|
+
getFlowSafe() {
|
|
1080
|
+
if (!this.flowInfoService.flow) {
|
|
1081
|
+
throw 'Flow is not defined';
|
|
1082
|
+
}
|
|
1083
|
+
return this.flowInfoService.flow;
|
|
1084
|
+
}
|
|
1085
|
+
initProcessors$() {
|
|
1086
|
+
var _a;
|
|
1087
|
+
const hasOverrides = Boolean((_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors);
|
|
1088
|
+
const flow = this.getFlowSafe();
|
|
1089
|
+
if (flow.properties.stateful && !hasOverrides) {
|
|
1090
|
+
// Skip initialization as backend will take processors from SF
|
|
949
1091
|
return of(undefined);
|
|
950
1092
|
}
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
1093
|
+
const owners$ = Object.values(this.flowInfoService.templates)
|
|
1094
|
+
.map(template => {
|
|
1095
|
+
var _a, _b, _c;
|
|
1096
|
+
if (!template) {
|
|
1097
|
+
return;
|
|
1098
|
+
}
|
|
1099
|
+
const localProcessors$ = (_c = (_b = (_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors) === null || _b === void 0 ? void 0 : _b.call(_a, template.name)) !== null && _c !== void 0 ? _c : of(null);
|
|
1100
|
+
return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap$1(processors => {
|
|
1101
|
+
const processorsMap = processors.reduce((acc, p) => {
|
|
1102
|
+
acc[p.apiName] = p;
|
|
1103
|
+
return acc;
|
|
1104
|
+
}, {});
|
|
1105
|
+
this.processors[template.id] = processorsMap;
|
|
1106
|
+
}));
|
|
1107
|
+
})
|
|
1108
|
+
.filter(isDefined);
|
|
1109
|
+
return forkJoin(owners$).pipe(map$1(noop));
|
|
965
1110
|
}
|
|
966
|
-
executeActionScript(request,
|
|
967
|
-
var _a, _b
|
|
968
|
-
const
|
|
969
|
-
const script = (_c = actions === null || actions === void 0 ? void 0 : actions.find(action => action.apiName === processor.name)) === null || _c === void 0 ? void 0 : _c.script;
|
|
1111
|
+
executeActionScript(request, executable) {
|
|
1112
|
+
var _a, _b;
|
|
1113
|
+
const script = (_b = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName]) === null || _b === void 0 ? void 0 : _b.script;
|
|
970
1114
|
if (!script) {
|
|
971
|
-
|
|
1115
|
+
const scope = this.getScopeByOwnerId(executable.ownerId);
|
|
1116
|
+
const scopeText = scope ? ` in ${scope}` : '';
|
|
1117
|
+
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
|
972
1118
|
}
|
|
973
|
-
return this.executeProcessorScript(request, script,
|
|
1119
|
+
return this.executeProcessorScript(request, script, executable.inputData);
|
|
974
1120
|
}
|
|
975
|
-
executeSelectorScript(request,
|
|
976
|
-
var _a, _b
|
|
977
|
-
const
|
|
978
|
-
const script = (_c = selectors === null || selectors === void 0 ? void 0 : selectors.find(selector => selector.apiName === processor.name)) === null || _c === void 0 ? void 0 : _c.script;
|
|
1121
|
+
executeSelectorScript(request, executable) {
|
|
1122
|
+
var _a, _b;
|
|
1123
|
+
const script = (_b = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName]) === null || _b === void 0 ? void 0 : _b.script;
|
|
979
1124
|
if (!script) {
|
|
980
|
-
|
|
1125
|
+
const scope = this.getScopeByOwnerId(executable.ownerId);
|
|
1126
|
+
const scopeText = scope ? ` in ${scope}` : '';
|
|
1127
|
+
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
|
981
1128
|
}
|
|
982
|
-
return this.executeProcessorScript(request, script,
|
|
1129
|
+
return this.executeProcessorScript(request, script, executable.inputData);
|
|
983
1130
|
}
|
|
984
1131
|
executeProcessorScript(request, script, inputData) {
|
|
985
1132
|
return new Function(`${script}\nreturn transform;`)()({
|
|
@@ -987,20 +1134,38 @@ class ConfigurationState {
|
|
|
987
1134
|
inputData: inputData,
|
|
988
1135
|
});
|
|
989
1136
|
}
|
|
1137
|
+
generateRequestId(scope, selectorName, inputData) {
|
|
1138
|
+
const inputDataHash = UUID.hex(JSON.stringify(inputData) || '').slice(0, 8);
|
|
1139
|
+
return `${scope}/${selectorName}/${inputDataHash}`;
|
|
1140
|
+
}
|
|
1141
|
+
getDefaultExecutionRequestDTO() {
|
|
1142
|
+
var _a;
|
|
1143
|
+
const request = {
|
|
1144
|
+
actions: [],
|
|
1145
|
+
selectors: {},
|
|
1146
|
+
};
|
|
1147
|
+
const ownerId = this.getOwnerIdByScope(UITemplateType.FLOW_ENGINE);
|
|
1148
|
+
(_a = request.actions) === null || _a === void 0 ? void 0 : _a.push({
|
|
1149
|
+
apiName: 'INITIALIZE_STATE',
|
|
1150
|
+
ownerId,
|
|
1151
|
+
inputData: {},
|
|
1152
|
+
});
|
|
1153
|
+
return request;
|
|
1154
|
+
}
|
|
990
1155
|
}
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
994
|
-
type: Injectable
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
}
|
|
1156
|
+
FlowStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, deps: [{ token: ContextService }, { token: QuoteDraftService }, { token: FlowInfoService }, { token: FlowConfigurationService }, { token: i1.ConfigurationProcessorsApiService }, { token: i1.FlowStateApiService }, { token: i1.QuoteApiService }, { token: i6.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1157
|
+
FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, providedIn: 'root' });
|
|
1158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, decorators: [{
|
|
1159
|
+
type: Injectable,
|
|
1160
|
+
args: [{ providedIn: 'root' }]
|
|
1161
|
+
}], ctorParameters: function () {
|
|
1162
|
+
return [{ type: ContextService }, { type: QuoteDraftService }, { type: FlowInfoService }, { type: FlowConfigurationService }, { type: i1.ConfigurationProcessorsApiService }, { type: i1.FlowStateApiService }, { type: i1.QuoteApiService }, { type: i6.ToastService }, { type: undefined, decorators: [{
|
|
1163
|
+
type: Optional
|
|
1164
|
+
}, {
|
|
1165
|
+
type: Inject,
|
|
1166
|
+
args: [FLOW_CUSTOMIZATION]
|
|
1167
|
+
}] }];
|
|
1168
|
+
} });
|
|
1004
1169
|
|
|
1005
1170
|
class FlowUpdateService {
|
|
1006
1171
|
update(rootLineItems, updates, charges) {
|
|
@@ -1128,170 +1293,937 @@ class FlowUpdateService {
|
|
|
1128
1293
|
return true;
|
|
1129
1294
|
}
|
|
1130
1295
|
}
|
|
1131
|
-
FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1132
|
-
FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
1133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
1296
|
+
FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1297
|
+
FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService });
|
|
1298
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService, decorators: [{
|
|
1134
1299
|
type: Injectable
|
|
1135
1300
|
}] });
|
|
1136
1301
|
|
|
1137
|
-
class
|
|
1138
|
-
constructor(
|
|
1139
|
-
this.
|
|
1140
|
-
this.
|
|
1141
|
-
this.
|
|
1142
|
-
|
|
1143
|
-
|
|
1302
|
+
class RuntimeSettingsService {
|
|
1303
|
+
constructor(configurationSettingsApiService) {
|
|
1304
|
+
this.configurationSettingsApiService = configurationSettingsApiService;
|
|
1305
|
+
this.configurationSettings$ = new BehaviorSubject({});
|
|
1306
|
+
this.currencySettings$ = new BehaviorSubject({
|
|
1307
|
+
iso: DEFAULT_CURRENCY_ISO_CODE,
|
|
1308
|
+
symbol: DEFAULT_CURRENCY_SYMBOL,
|
|
1309
|
+
});
|
|
1310
|
+
this.shoppingCartSettings$ = new BehaviorSubject([]);
|
|
1311
|
+
this.getCurrencySymbol = (locale, currency) => {
|
|
1312
|
+
return (0)
|
|
1313
|
+
.toLocaleString(locale, { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0 })
|
|
1314
|
+
.replace(/\d/g, '')
|
|
1315
|
+
.trim();
|
|
1316
|
+
};
|
|
1144
1317
|
}
|
|
1145
|
-
|
|
1146
|
-
return this.
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
this.quoteDraftService.updateQuoteDraft(result);
|
|
1153
|
-
}), map$2(noop));
|
|
1318
|
+
create() {
|
|
1319
|
+
return this.configurationSettingsApiService.fetchSettings().pipe(map$1(settings => this.parseConfigurationSettings(settings)), tap$1(configurationSettings => {
|
|
1320
|
+
var _a;
|
|
1321
|
+
this.configurationSettings$.next(configurationSettings);
|
|
1322
|
+
this.addShoppingCartSettings((_a = configurationSettings['shopping-cart']) !== null && _a !== void 0 ? _a : []);
|
|
1323
|
+
this.formattingSettings = this.getFormattingSettings();
|
|
1324
|
+
}), map$1(() => undefined));
|
|
1154
1325
|
}
|
|
1155
|
-
|
|
1156
|
-
|
|
1326
|
+
initCurrency(iso) {
|
|
1327
|
+
if (iso) {
|
|
1328
|
+
const symbol = this.getCurrencySymbol('en-US', iso);
|
|
1329
|
+
this.currencySettings$.next({ iso, symbol });
|
|
1330
|
+
}
|
|
1157
1331
|
}
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
if (
|
|
1161
|
-
return
|
|
1332
|
+
getFormattingSettings() {
|
|
1333
|
+
var _a, _b;
|
|
1334
|
+
if (this.formattingSettings) {
|
|
1335
|
+
return this.formattingSettings;
|
|
1162
1336
|
}
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1337
|
+
const shoppingCartSettings = (_a = this.getConfigurationSettings()['shopping-cart']) === null || _a === void 0 ? void 0 : _a.reduce((acc, setting) => {
|
|
1338
|
+
return Object.assign(Object.assign({}, acc), { [setting.id]: setting.properties });
|
|
1339
|
+
}, {});
|
|
1340
|
+
const currencySettings = this.getCurrencySettings();
|
|
1341
|
+
const dateFormat = (validateDateFormat((_b = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DATE_FORMAT) !== null && _b !== void 0 ? _b : '') && (shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DATE_FORMAT)) ||
|
|
1342
|
+
DEFAULT_DATE_FORMAT;
|
|
1343
|
+
const decimalSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DECIMAL_SEPARATOR;
|
|
1344
|
+
const thousandsSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.THOUSANDS_SEPARATOR;
|
|
1345
|
+
// the number of decimal places can be 0
|
|
1346
|
+
const priceScale = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.PRICE_SCALE;
|
|
1347
|
+
const decimalsCount = priceScale !== null && priceScale !== '' && !isNaN(Number(priceScale)) && Number(priceScale) >= 0
|
|
1348
|
+
? Number(priceScale)
|
|
1349
|
+
: DEFAULT_DECIMALS_COUNT;
|
|
1350
|
+
const actionCodeSettings = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.STATUS_LABEL;
|
|
1351
|
+
return {
|
|
1352
|
+
currencySymbol: currencySettings.symbol,
|
|
1353
|
+
dateFormats: getSupportedDateFormats(dateFormat),
|
|
1354
|
+
decimalsCount,
|
|
1355
|
+
decimalSeparator: decimalSeparator !== undefined && ['.', ','].includes(decimalSeparator)
|
|
1356
|
+
? decimalSeparator
|
|
1357
|
+
: DEFAULT_DECIMAL_SEPARATOR,
|
|
1358
|
+
// thousands separator can be a blank value, so it can also be null
|
|
1359
|
+
thousandsSeparator: thousandsSeparator !== undefined && ['.', ',', '', null].includes(thousandsSeparator)
|
|
1360
|
+
? thousandsSeparator || ''
|
|
1361
|
+
: DEFAULT_THOUSANDS_SEPARATOR,
|
|
1362
|
+
actionCodeLabels: (actionCodeSettings === null || actionCodeSettings === void 0 ? void 0 : actionCodeSettings.length)
|
|
1363
|
+
? actionCodeSettings.reduce((result, setting) => (Object.assign(Object.assign({}, result), { [setting.status_label]: setting.custom_label })), {})
|
|
1364
|
+
: DEFAULT_ACTION_CODE_LABELS,
|
|
1365
|
+
};
|
|
1168
1366
|
}
|
|
1169
|
-
|
|
1170
|
-
this.
|
|
1367
|
+
getConfigurationSettings() {
|
|
1368
|
+
return this.configurationSettings$.value;
|
|
1171
1369
|
}
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
const initialCurrentState = this.quoteDraftService.getInitialCurrentState();
|
|
1175
|
-
const currentState = this.quoteDraftService.activeCurrentState;
|
|
1176
|
-
const currentLineItemIndex = currentState.findIndex(({ id }) => id === lineItemId);
|
|
1177
|
-
const currentLineItem = currentState[currentLineItemIndex];
|
|
1178
|
-
const initialLineItem = initialCurrentState.find(({ integrationId }) => integrationId === (currentLineItem === null || currentLineItem === void 0 ? void 0 : currentLineItem.integrationId));
|
|
1179
|
-
if (!quoteDraft || !currentLineItem || !initialLineItem) {
|
|
1180
|
-
return of(null);
|
|
1181
|
-
}
|
|
1182
|
-
const updatedState = cloneDeep(currentState);
|
|
1183
|
-
updatedState.splice(currentLineItemIndex, 1, initialLineItem);
|
|
1184
|
-
return of([]).pipe(tap$1(() => {
|
|
1185
|
-
this.quoteDraftService.setCurrentLineItemState(updatedState);
|
|
1186
|
-
}), switchMap$1(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$2(() => this.quoteDraftService.quoteDraft), this.handleErrorAndBounceBack());
|
|
1370
|
+
getShoppingCartSettings() {
|
|
1371
|
+
return this.shoppingCartSettings$.value;
|
|
1187
1372
|
}
|
|
1188
|
-
|
|
1189
|
-
this.
|
|
1373
|
+
getCurrencySettings() {
|
|
1374
|
+
return this.currencySettings$.value;
|
|
1190
1375
|
}
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1376
|
+
parseConfigurationSettings(settings) {
|
|
1377
|
+
return settings.reduce((acc, setting) => {
|
|
1378
|
+
switch (setting.key) {
|
|
1379
|
+
case 'shopping-cart':
|
|
1380
|
+
acc['shopping-cart'] = parseJsonSafely(setting.value, []);
|
|
1381
|
+
break;
|
|
1382
|
+
case 'navigation':
|
|
1383
|
+
acc.navigation = parseJsonSafely(setting.value, {});
|
|
1384
|
+
break;
|
|
1385
|
+
case 'flows':
|
|
1386
|
+
acc.flows = parseJsonSafely(setting.value, []);
|
|
1387
|
+
break;
|
|
1388
|
+
default:
|
|
1389
|
+
acc[setting.key] = setting.value;
|
|
1390
|
+
}
|
|
1391
|
+
return acc;
|
|
1392
|
+
}, {});
|
|
1198
1393
|
}
|
|
1199
|
-
|
|
1200
|
-
|
|
1394
|
+
addShoppingCartSettings(settings) {
|
|
1395
|
+
// uniqBy removes items with the biggest index
|
|
1396
|
+
const newSettings = uniqBy([...settings, ...this.shoppingCartSettings$.value], 'id');
|
|
1397
|
+
this.shoppingCartSettings$.next(newSettings);
|
|
1201
1398
|
}
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1399
|
+
}
|
|
1400
|
+
RuntimeSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, deps: [{ token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1401
|
+
RuntimeSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, providedIn: 'root' });
|
|
1402
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, decorators: [{
|
|
1403
|
+
type: Injectable,
|
|
1404
|
+
args: [{ providedIn: 'root' }]
|
|
1405
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationSettingsApiService }]; } });
|
|
1406
|
+
|
|
1407
|
+
class ConfigurationService {
|
|
1408
|
+
constructor(quoteDraftService, runtimeService, contextService, configurationApiService, messageService, dialogService, runtimeSettings) {
|
|
1409
|
+
this.quoteDraftService = quoteDraftService;
|
|
1410
|
+
this.runtimeService = runtimeService;
|
|
1411
|
+
this.contextService = contextService;
|
|
1412
|
+
this.configurationApiService = configurationApiService;
|
|
1413
|
+
this.messageService = messageService;
|
|
1414
|
+
this.dialogService = dialogService;
|
|
1415
|
+
this.runtimeSettings = runtimeSettings;
|
|
1416
|
+
this.mode = ConfigurationMode.SEARCH;
|
|
1417
|
+
this.lineItem = new BehaviorSubject(undefined);
|
|
1418
|
+
this.charges = new BehaviorSubject({});
|
|
1419
|
+
this.pricePlans = new BehaviorSubject({});
|
|
1420
|
+
this.procedureContext = new BehaviorSubject({});
|
|
1421
|
+
this.isLoadingSubj$ = new BehaviorSubject(false);
|
|
1422
|
+
this.isLoading$ = this.isLoadingSubj$.asObservable();
|
|
1423
|
+
this.hasUnsavedChanges = false;
|
|
1209
1424
|
}
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1425
|
+
reset() {
|
|
1426
|
+
this.hasUnsavedChanges = false;
|
|
1427
|
+
this.runtimeService.reset();
|
|
1428
|
+
this.configurableRamp = undefined;
|
|
1429
|
+
this.lineItem.next(undefined);
|
|
1430
|
+
this.charges.next({});
|
|
1431
|
+
this.pricePlans.next({});
|
|
1432
|
+
}
|
|
1433
|
+
patch$(lineItem, options) {
|
|
1434
|
+
if (!this.lineItem.value) {
|
|
1435
|
+
return throwError(() => new Error(`Source LineItem not found`));
|
|
1214
1436
|
}
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1437
|
+
const skipCardinalityCalculation = (options === null || options === void 0 ? void 0 : options.skipCardinalityCalculation) || this.contextSnapshot.properties['#skipCardinalityCalculation'] === 'true';
|
|
1438
|
+
this.configurableRamp = new LineItemWorker(this.lineItem.value).replace(lineItem, skipCardinalityCalculation).li;
|
|
1439
|
+
return this.configure().pipe(catchError$1(error => {
|
|
1440
|
+
console.error(error);
|
|
1441
|
+
if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
|
|
1442
|
+
this.messageService.add({ severity: 'error', summary: error });
|
|
1443
|
+
}
|
|
1444
|
+
// bounce back if configuration call has failed
|
|
1445
|
+
this.lineItem.next(this.lineItem.value ? Object.assign({}, this.lineItem.value) : undefined);
|
|
1446
|
+
return throwError(() => error);
|
|
1447
|
+
}), tap(() => {
|
|
1448
|
+
if (!this.hasUnsavedChanges) {
|
|
1449
|
+
this.hasUnsavedChanges = true;
|
|
1450
|
+
}
|
|
1451
|
+
}));
|
|
1452
|
+
}
|
|
1453
|
+
patch(lineItem, options) {
|
|
1454
|
+
this.patch$(lineItem, options).subscribe();
|
|
1455
|
+
}
|
|
1456
|
+
setConfigurableRamp(lineItem) {
|
|
1457
|
+
this.configurableRamp = lineItem;
|
|
1222
1458
|
}
|
|
1223
1459
|
get() {
|
|
1224
|
-
return this.
|
|
1460
|
+
return this.lineItem.asObservable().pipe(shareReplay$1());
|
|
1225
1461
|
}
|
|
1226
1462
|
getSnapshot() {
|
|
1227
|
-
|
|
1228
|
-
return (_b = (_a = this.quoteDraftService) === null || _a === void 0 ? void 0 : _a.currentState.slice()) !== null && _b !== void 0 ? _b : [];
|
|
1463
|
+
return this.lineItem.value ? Object.assign({}, this.lineItem.value) : undefined;
|
|
1229
1464
|
}
|
|
1230
|
-
|
|
1231
|
-
|
|
1465
|
+
getRuntimeModel() {
|
|
1466
|
+
const runtimeModel = this.runtimeService.runtimeModel;
|
|
1467
|
+
if (!runtimeModel) {
|
|
1468
|
+
throw new Error('Runtime model not initialized');
|
|
1469
|
+
}
|
|
1470
|
+
return runtimeModel;
|
|
1232
1471
|
}
|
|
1233
|
-
|
|
1234
|
-
|
|
1472
|
+
getRuntimeContext() {
|
|
1473
|
+
const runtimeContext = this.runtimeService.runtimeContext;
|
|
1474
|
+
if (!runtimeContext) {
|
|
1475
|
+
throw new Error('Runtime context not initialized');
|
|
1476
|
+
}
|
|
1477
|
+
return runtimeContext;
|
|
1235
1478
|
}
|
|
1236
|
-
get
|
|
1237
|
-
return this.
|
|
1479
|
+
get contextSnapshot() {
|
|
1480
|
+
return this.contextService.resolve();
|
|
1481
|
+
}
|
|
1482
|
+
get context$() {
|
|
1483
|
+
return this.contextService.resolve$();
|
|
1484
|
+
}
|
|
1485
|
+
get charges$() {
|
|
1486
|
+
return this.charges.asObservable();
|
|
1238
1487
|
}
|
|
1239
1488
|
get chargesSnapshot() {
|
|
1240
|
-
|
|
1241
|
-
|
|
1489
|
+
return this.charges.value;
|
|
1490
|
+
}
|
|
1491
|
+
get pricePlans$() {
|
|
1492
|
+
return this.pricePlans.asObservable();
|
|
1242
1493
|
}
|
|
1243
1494
|
get pricePlansSnapshot() {
|
|
1244
|
-
|
|
1245
|
-
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.pricePlans) !== null && _b !== void 0 ? _b : {};
|
|
1495
|
+
return this.pricePlans.value;
|
|
1246
1496
|
}
|
|
1247
|
-
get
|
|
1248
|
-
|
|
1249
|
-
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.activeMetrics) !== null && _b !== void 0 ? _b : [];
|
|
1497
|
+
get procedureContext$() {
|
|
1498
|
+
return this.procedureContext.asObservable();
|
|
1250
1499
|
}
|
|
1251
|
-
get
|
|
1252
|
-
return this.
|
|
1500
|
+
get procedureContextSnapshot() {
|
|
1501
|
+
return this.procedureContext.value;
|
|
1253
1502
|
}
|
|
1254
|
-
|
|
1255
|
-
return this.
|
|
1503
|
+
configure() {
|
|
1504
|
+
return this.configureRequest$(this.generateRequest());
|
|
1256
1505
|
}
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
})
|
|
1268
|
-
|
|
1506
|
+
configureRequest$(configurationRequest) {
|
|
1507
|
+
var _a;
|
|
1508
|
+
const runtimeContext = this.getRuntimeContext();
|
|
1509
|
+
const runtimeModel = this.getRuntimeModel();
|
|
1510
|
+
const uiDefinitionProperties = this.getUIDefinitionProperties();
|
|
1511
|
+
const mainPricingEnabled = (_a = runtimeContext.properties) === null || _a === void 0 ? void 0 : _a.PricingEnabled;
|
|
1512
|
+
const pricingEnabled = mainPricingEnabled ? mainPricingEnabled === 'true' : uiDefinitionProperties.pricingEnabled;
|
|
1513
|
+
const customPriceApi = this.runtimeSettings.getConfigurationSettings()['CUSTOM_PRICE_API'];
|
|
1514
|
+
this.isLoadingSubj$.next(true);
|
|
1515
|
+
const configure$ = pricingEnabled && customPriceApi
|
|
1516
|
+
? this.configurationApiService.customConfigurePrice({ url: customPriceApi, configurationRequest, runtimeModel })
|
|
1517
|
+
: this.configurationApiService.configureLineItem({
|
|
1518
|
+
configurationRequest,
|
|
1519
|
+
runtimeModel,
|
|
1520
|
+
pricingEnabled,
|
|
1521
|
+
});
|
|
1522
|
+
return configure$.pipe(tap(({ lineItem, context, charges, pricePlans, deletedLineItems, procedureContext }) => {
|
|
1523
|
+
this.contextService.update(context !== null && context !== void 0 ? context : {});
|
|
1524
|
+
this.charges.next(charges !== null && charges !== void 0 ? charges : {});
|
|
1525
|
+
this.pricePlans.next(pricePlans !== null && pricePlans !== void 0 ? pricePlans : {});
|
|
1526
|
+
this.procedureContext.next(procedureContext !== null && procedureContext !== void 0 ? procedureContext : {});
|
|
1527
|
+
if (lineItem) {
|
|
1528
|
+
this.lineItem.next(lineItem);
|
|
1529
|
+
}
|
|
1530
|
+
if (deletedLineItems === null || deletedLineItems === void 0 ? void 0 : deletedLineItems.length) {
|
|
1531
|
+
this.showInactiveProductsConfirmation();
|
|
1532
|
+
}
|
|
1533
|
+
this.configurableRamp = lineItem;
|
|
1534
|
+
}), map(({ lineItem }) => lineItem), catchError$1(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })), finalize$1(() => this.isLoadingSubj$.next(false)));
|
|
1535
|
+
}
|
|
1536
|
+
configureExternal$(props) {
|
|
1537
|
+
return this.runtimeService
|
|
1538
|
+
.init({ productId: props.productId, defaultQty: props.qty, attributesMap: props.attributesMap })
|
|
1539
|
+
.pipe(switchMap$1(() => this.configure()), first(), catchError$1(error => {
|
|
1540
|
+
this.messageService.add({ severity: ToastType.error, summary: error });
|
|
1541
|
+
throw error;
|
|
1542
|
+
}), finalize$1(() => this.reset()));
|
|
1543
|
+
}
|
|
1544
|
+
configureGuidedSelling$(data) {
|
|
1545
|
+
return this.configurationApiService
|
|
1546
|
+
.configureLineItem({
|
|
1547
|
+
configurationRequest: getGuidedSellingConfigurationRequest(data, this.contextService.resolve()),
|
|
1548
|
+
})
|
|
1549
|
+
.pipe(catchError$1(error => {
|
|
1550
|
+
if (error instanceof HttpErrorResponse) {
|
|
1551
|
+
this.messageService.add({ severity: ToastType.error, summary: error.error.message || error.error });
|
|
1552
|
+
}
|
|
1553
|
+
throw error;
|
|
1554
|
+
}));
|
|
1555
|
+
}
|
|
1556
|
+
generateRequest() {
|
|
1557
|
+
var _a, _b;
|
|
1558
|
+
const runtimeContext = this.getRuntimeContext();
|
|
1559
|
+
const uiDefinitionProperties = this.getUIDefinitionProperties();
|
|
1560
|
+
let lineItem = this.configurableRamp;
|
|
1561
|
+
if (!lineItem) {
|
|
1562
|
+
const { initializationProps } = (_a = this.runtimeService) !== null && _a !== void 0 ? _a : {};
|
|
1563
|
+
lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.defaultQty);
|
|
1564
|
+
// Set default attributes
|
|
1565
|
+
if (initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap) {
|
|
1566
|
+
const attributes = transform(initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
|
|
1567
|
+
lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
let request = {
|
|
1571
|
+
lineItem,
|
|
1572
|
+
mode: this.mode,
|
|
1573
|
+
step: !this.lineItem.value ? RuntimeStep.START : RuntimeStep.UPDATE,
|
|
1574
|
+
attributeDomainMode: 'ALL',
|
|
1575
|
+
context: this.contextService.resolve(),
|
|
1576
|
+
lineItems: ((_b = this.quoteDraftService.quoteDraft) === null || _b === void 0 ? void 0 : _b.currentState) || [],
|
|
1577
|
+
asset: this.getAsset(),
|
|
1578
|
+
};
|
|
1579
|
+
request = ConfigurationTranslatorUtils.lightenConfigurationRequest(request);
|
|
1580
|
+
return request;
|
|
1581
|
+
}
|
|
1582
|
+
getUIDefinitionProperties() {
|
|
1583
|
+
var _a, _b, _c;
|
|
1584
|
+
return Object.assign(Object.assign({}, ((_b = (_a = this.getRuntimeContext().uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {})), ((_c = this.runtimeService.uiDefinitionProperties) !== null && _c !== void 0 ? _c : {}));
|
|
1585
|
+
}
|
|
1586
|
+
showInactiveProductsConfirmation() {
|
|
1587
|
+
const confirmationConfig = {
|
|
1588
|
+
title: ' ',
|
|
1589
|
+
description: 'This quote contains inactive products. Do you want to remove them?',
|
|
1590
|
+
primaryButtonLabel: 'Remove products',
|
|
1591
|
+
secondaryButtonLabel: 'Back to Quote',
|
|
1592
|
+
};
|
|
1593
|
+
this.dialogService
|
|
1594
|
+
.open(ConfirmationComponent, {
|
|
1595
|
+
dismissableMask: false,
|
|
1596
|
+
closeOnEscape: false,
|
|
1597
|
+
closable: false,
|
|
1598
|
+
showHeader: true,
|
|
1599
|
+
header: `Inactive Products in Quote`,
|
|
1600
|
+
width: '440px',
|
|
1601
|
+
data: { confirmationConfig },
|
|
1602
|
+
})
|
|
1603
|
+
.onClose.subscribe(result => {
|
|
1604
|
+
if (!result) {
|
|
1605
|
+
const context = this.contextService.resolve();
|
|
1606
|
+
window['VELO_BACK_FN'].apply(null, [context.headerId]);
|
|
1607
|
+
}
|
|
1608
|
+
});
|
|
1609
|
+
}
|
|
1610
|
+
getAsset() {
|
|
1611
|
+
var _a;
|
|
1612
|
+
const lineItem = this.configurableRamp;
|
|
1613
|
+
if (!lineItem) {
|
|
1614
|
+
return;
|
|
1615
|
+
}
|
|
1616
|
+
return (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.initialState.find(a => a.id === lineItem.openOrderLineItemId || a.id === lineItem.assetId);
|
|
1617
|
+
}
|
|
1618
|
+
}
|
|
1619
|
+
ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, deps: [{ token: QuoteDraftService }, { token: ConfigurationRuntimeService }, { token: ContextService }, { token: i1.ConfigurationApiService }, { token: i5.MessageService }, { token: i6$1.DialogService }, { token: RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1620
|
+
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService });
|
|
1621
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, decorators: [{
|
|
1622
|
+
type: Injectable
|
|
1623
|
+
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: ContextService }, { type: i1.ConfigurationApiService }, { type: i5.MessageService }, { type: i6$1.DialogService }, { type: RuntimeSettingsService }]; } });
|
|
1624
|
+
|
|
1625
|
+
class FlowConfigurationService {
|
|
1626
|
+
constructor(proceduresApiService, contextService, quoteDraftService, updateService, configurationService) {
|
|
1627
|
+
this.proceduresApiService = proceduresApiService;
|
|
1628
|
+
this.contextService = contextService;
|
|
1629
|
+
this.quoteDraftService = quoteDraftService;
|
|
1630
|
+
this.updateService = updateService;
|
|
1631
|
+
this.configurationService = configurationService;
|
|
1632
|
+
this.updatedSubj$ = new Subject();
|
|
1633
|
+
this.updated$ = this.updatedSubj$.asObservable();
|
|
1634
|
+
}
|
|
1635
|
+
calculate$(quoteDraft) {
|
|
1636
|
+
return this.proceduresApiService.apply$(quoteDraft).pipe(tap$1(result => {
|
|
1637
|
+
// sort the result current state based on the quote draft initial state
|
|
1638
|
+
const initialStateIds = quoteDraft.initialState.map(lineItem => lineItem.integrationId);
|
|
1639
|
+
result.currentState = result.currentState
|
|
1640
|
+
.slice()
|
|
1641
|
+
.sort((a, b) => initialStateIds.indexOf(a.integrationId) - initialStateIds.indexOf(b.integrationId));
|
|
1642
|
+
this.quoteDraftService.updateQuoteDraft(result);
|
|
1643
|
+
}), map$1(noop));
|
|
1644
|
+
}
|
|
1645
|
+
calculate(quoteDraft) {
|
|
1646
|
+
this.calculate$(quoteDraft).subscribe();
|
|
1647
|
+
}
|
|
1648
|
+
update$(updates) {
|
|
1649
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
1650
|
+
if (!quoteDraft) {
|
|
1651
|
+
return of(null);
|
|
1652
|
+
}
|
|
1653
|
+
return of([]).pipe(map$1(() => {
|
|
1654
|
+
const updatedState = cloneDeep(quoteDraft.currentState);
|
|
1655
|
+
this.updateService.update(updatedState, updates, quoteDraft.charges);
|
|
1656
|
+
return updatedState;
|
|
1657
|
+
}), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
1658
|
+
}
|
|
1659
|
+
update(updates) {
|
|
1660
|
+
this.update$(updates).subscribe();
|
|
1661
|
+
}
|
|
1662
|
+
revert$(lineItemId) {
|
|
1663
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
1664
|
+
const initialCurrentState = this.quoteDraftService.getInitialCurrentState();
|
|
1665
|
+
const currentState = this.quoteDraftService.activeCurrentState;
|
|
1666
|
+
const currentLineItemIndex = currentState.findIndex(({ id }) => id === lineItemId);
|
|
1667
|
+
const currentLineItem = currentState[currentLineItemIndex];
|
|
1668
|
+
const initialLineItem = initialCurrentState.find(({ integrationId }) => integrationId === (currentLineItem === null || currentLineItem === void 0 ? void 0 : currentLineItem.integrationId));
|
|
1669
|
+
if (!quoteDraft || !currentLineItem || !initialLineItem) {
|
|
1670
|
+
return of(null);
|
|
1671
|
+
}
|
|
1672
|
+
const updatedState = cloneDeep(currentState);
|
|
1673
|
+
updatedState.splice(currentLineItemIndex, 1, initialLineItem);
|
|
1674
|
+
return of([]).pipe(tap$1(() => {
|
|
1675
|
+
this.quoteDraftService.setCurrentLineItemState(updatedState);
|
|
1676
|
+
}), switchMap(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
1677
|
+
}
|
|
1678
|
+
revert(lineItemId) {
|
|
1679
|
+
this.revert$(lineItemId).subscribe();
|
|
1680
|
+
}
|
|
1681
|
+
delete$(ids) {
|
|
1682
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
1683
|
+
const currentState = this.quoteDraftService.currentState;
|
|
1684
|
+
if (!quoteDraft) {
|
|
1685
|
+
return of(null);
|
|
1686
|
+
}
|
|
1687
|
+
return of([]).pipe(map$1(() => ids.reduce((result, id) => this.updateService.delete(result, id), currentState)), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
1688
|
+
}
|
|
1689
|
+
delete(ids) {
|
|
1690
|
+
this.delete$(ids).subscribe();
|
|
1691
|
+
}
|
|
1692
|
+
addTerm$(term) {
|
|
1693
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
1694
|
+
if (!quoteDraft) {
|
|
1695
|
+
return of(null);
|
|
1696
|
+
}
|
|
1697
|
+
const updatedState = [...quoteDraft.currentState, term];
|
|
1698
|
+
return of([]).pipe(switchMap(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
1699
|
+
}
|
|
1700
|
+
addToCart$(props) {
|
|
1701
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
1702
|
+
if (!quoteDraft) {
|
|
1703
|
+
return of(null);
|
|
1704
|
+
}
|
|
1705
|
+
return this.configurationService.configureExternal$(props).pipe(map$1(lineItem => {
|
|
1706
|
+
var _a, _b, _c;
|
|
1707
|
+
const model = this.configurationService.getRuntimeModel();
|
|
1708
|
+
const split = (_b = (_a = model === null || model === void 0 ? void 0 : model.types.find(type => type.name === lineItem.type)) === null || _a === void 0 ? void 0 : _a.split) !== null && _b !== void 0 ? _b : false;
|
|
1709
|
+
const lineItems = multiplyLineItems(lineItem, (_c = props.qty) !== null && _c !== void 0 ? _c : 1, split);
|
|
1710
|
+
return [...quoteDraft.currentState, ...lineItems];
|
|
1711
|
+
}), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
1712
|
+
}
|
|
1713
|
+
get() {
|
|
1714
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(() => this.quoteDraftService.activeCurrentState), shareReplay$1());
|
|
1715
|
+
}
|
|
1716
|
+
getSnapshot() {
|
|
1717
|
+
var _a, _b;
|
|
1718
|
+
return (_b = (_a = this.quoteDraftService) === null || _a === void 0 ? void 0 : _a.currentState.slice()) !== null && _b !== void 0 ? _b : [];
|
|
1719
|
+
}
|
|
1720
|
+
get charges$() {
|
|
1721
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(({ charges }) => charges));
|
|
1722
|
+
}
|
|
1723
|
+
get pricePlans$() {
|
|
1724
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(({ pricePlans }) => pricePlans));
|
|
1725
|
+
}
|
|
1726
|
+
get activeMetrics$() {
|
|
1727
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$1(({ activeMetrics }) => activeMetrics));
|
|
1728
|
+
}
|
|
1729
|
+
get chargesSnapshot() {
|
|
1730
|
+
var _a, _b;
|
|
1731
|
+
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.charges) !== null && _b !== void 0 ? _b : {};
|
|
1732
|
+
}
|
|
1733
|
+
get pricePlansSnapshot() {
|
|
1734
|
+
var _a, _b;
|
|
1735
|
+
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.pricePlans) !== null && _b !== void 0 ? _b : {};
|
|
1736
|
+
}
|
|
1737
|
+
get activeMetricsSnapshot() {
|
|
1738
|
+
var _a, _b;
|
|
1739
|
+
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.activeMetrics) !== null && _b !== void 0 ? _b : [];
|
|
1740
|
+
}
|
|
1741
|
+
get contextSnapshot() {
|
|
1742
|
+
return this.contextService.resolve();
|
|
1743
|
+
}
|
|
1744
|
+
get context$() {
|
|
1745
|
+
return this.contextService.resolve$();
|
|
1746
|
+
}
|
|
1747
|
+
handleErrorAndBounceBack() {
|
|
1748
|
+
return (source$) => {
|
|
1749
|
+
return source$.pipe(catchError(error => {
|
|
1750
|
+
console.error(error);
|
|
1751
|
+
// bounce back if configuration call has failed
|
|
1752
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
1753
|
+
if (quoteDraft) {
|
|
1754
|
+
this.quoteDraftService.updateQuoteDraft(quoteDraft);
|
|
1755
|
+
this.updatedSubj$.next();
|
|
1756
|
+
}
|
|
1757
|
+
return throwError(() => error);
|
|
1758
|
+
}));
|
|
1759
|
+
};
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i1.ProceduresApiService }, { token: ContextService }, { token: QuoteDraftService }, { token: FlowUpdateService }, { token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1763
|
+
FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, providedIn: 'root' });
|
|
1764
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, decorators: [{
|
|
1765
|
+
type: Injectable,
|
|
1766
|
+
args: [{ providedIn: 'root' }]
|
|
1767
|
+
}], ctorParameters: function () { return [{ type: i1.ProceduresApiService }, { type: ContextService }, { type: QuoteDraftService }, { type: FlowUpdateService }, { type: ConfigurationService }]; } });
|
|
1768
|
+
|
|
1769
|
+
class FlowConfigurationModule {
|
|
1770
|
+
}
|
|
1771
|
+
FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1772
|
+
FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule });
|
|
1773
|
+
FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService, FlowUpdateService, PriceApiService] });
|
|
1774
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, decorators: [{
|
|
1775
|
+
type: NgModule,
|
|
1776
|
+
args: [{
|
|
1777
|
+
imports: [],
|
|
1778
|
+
providers: [FlowConfigurationService, FlowUpdateService, PriceApiService],
|
|
1779
|
+
}]
|
|
1780
|
+
}] });
|
|
1781
|
+
|
|
1782
|
+
class FlowStateConfigurationService {
|
|
1783
|
+
constructor(flowStateService, flowInfoService, configurationService, flowConfigurationService, flowStateApiService) {
|
|
1784
|
+
this.flowStateService = flowStateService;
|
|
1785
|
+
this.flowInfoService = flowInfoService;
|
|
1786
|
+
this.configurationService = configurationService;
|
|
1787
|
+
this.flowConfigurationService = flowConfigurationService;
|
|
1788
|
+
this.flowStateApiService = flowStateApiService;
|
|
1789
|
+
this.configurationStateId$ = new BehaviorSubject(null);
|
|
1790
|
+
}
|
|
1791
|
+
get configurationStateId() {
|
|
1792
|
+
return this.configurationStateId$.value;
|
|
1793
|
+
}
|
|
1794
|
+
addToCart$(props) {
|
|
1795
|
+
var _a;
|
|
1796
|
+
const stateful = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful;
|
|
1797
|
+
if (stateful) {
|
|
1798
|
+
const stateId = this.flowStateService.stateId;
|
|
1799
|
+
if (!stateId) {
|
|
1800
|
+
return of();
|
|
1801
|
+
}
|
|
1802
|
+
const lineItem = generateConfigurationLineItem(props, props.qty);
|
|
1803
|
+
return this.flowStateApiService.newConfiguration(stateId, { lineItem }).pipe(tap$1(r => this.configurationStateId$.next(r.stateId)), switchMap(() => {
|
|
1804
|
+
if (!this.configurationStateId) {
|
|
1805
|
+
return of();
|
|
1806
|
+
}
|
|
1807
|
+
return this.flowStateApiService.saveConfiguration(stateId, this.configurationStateId).pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), tap$1(() => this.configurationStateId$.next(null)), map$1(noop));
|
|
1808
|
+
}));
|
|
1809
|
+
}
|
|
1810
|
+
else {
|
|
1811
|
+
return this.flowConfigurationService.addToCart$(props).pipe(map$1(noop));
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: FlowStateService }, { token: FlowInfoService }, { token: ConfigurationService }, { token: FlowConfigurationService }, { token: i1.FlowStateApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1816
|
+
FlowStateConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, providedIn: 'root' });
|
|
1817
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, decorators: [{
|
|
1818
|
+
type: Injectable,
|
|
1819
|
+
args: [{ providedIn: 'root' }]
|
|
1820
|
+
}], ctorParameters: function () { return [{ type: FlowStateService }, { type: FlowInfoService }, { type: ConfigurationService }, { type: FlowConfigurationService }, { type: i1.FlowStateApiService }]; } });
|
|
1821
|
+
|
|
1822
|
+
function calculateMetricByMethod(lineItems, metric, method) {
|
|
1823
|
+
const items = getLineItemsByMethod(lineItems, method);
|
|
1824
|
+
return items.reduce((acc, li) => {
|
|
1825
|
+
let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
|
|
1826
|
+
if (method === 'avg' && li.length > 0) {
|
|
1827
|
+
value /= li.length;
|
|
1828
|
+
}
|
|
1829
|
+
return acc + value;
|
|
1830
|
+
}, 0);
|
|
1831
|
+
}
|
|
1832
|
+
function getLineItemsByMethod(lineItems, method) {
|
|
1833
|
+
switch (method) {
|
|
1834
|
+
case 'first': {
|
|
1835
|
+
return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
|
|
1836
|
+
}
|
|
1837
|
+
case 'last': {
|
|
1838
|
+
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
|
1839
|
+
const products = rootTermItems.map(lineItem => [
|
|
1840
|
+
lineItem,
|
|
1841
|
+
...lineItems.filter(li => li.rampInstanceId === lineItem.id),
|
|
1842
|
+
]);
|
|
1843
|
+
return products
|
|
1844
|
+
.map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
|
|
1845
|
+
.filter((li) => Boolean(li))
|
|
1846
|
+
.map(item => [item]);
|
|
1847
|
+
}
|
|
1848
|
+
case 'avg': {
|
|
1849
|
+
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
|
1850
|
+
return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
|
|
1851
|
+
}
|
|
1852
|
+
case 'sum': {
|
|
1853
|
+
return lineItems.map(item => [item]);
|
|
1854
|
+
}
|
|
1855
|
+
default: {
|
|
1856
|
+
return lineItems.map(item => [item]);
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
}
|
|
1860
|
+
function getDateValue(date) {
|
|
1861
|
+
return date ? new Date(date).getTime() : 0;
|
|
1862
|
+
}
|
|
1863
|
+
|
|
1864
|
+
class MetricsCalculationService {
|
|
1865
|
+
get onMetricsUpdate$() {
|
|
1866
|
+
return this.metricsUpdated$.asObservable();
|
|
1867
|
+
}
|
|
1868
|
+
constructor(quoteDraftService, flowConfiguration, settingsService) {
|
|
1869
|
+
this.quoteDraftService = quoteDraftService;
|
|
1870
|
+
this.flowConfiguration = flowConfiguration;
|
|
1871
|
+
this.settingsService = settingsService;
|
|
1872
|
+
this.metricsUpdated$ = new Subject();
|
|
1873
|
+
this.quoteMetricsSettings = {};
|
|
1874
|
+
this.metricsCalculationMethodMap = {};
|
|
1875
|
+
this.metricsData = {};
|
|
1876
|
+
this.activeMetricRules = [];
|
|
1877
|
+
this.activeMetricRules = this.flowConfiguration.activeMetricsSnapshot.filter(metricRule => metricRule.metrics.some(metric => !!metric.totalName));
|
|
1878
|
+
combineLatest([
|
|
1879
|
+
this.quoteDraftService.currentState$,
|
|
1880
|
+
this.settingsService.fetchSetting('QUOTE_LEVEL_METRIC_CALCULATION_METHOD').pipe(take$1(1)),
|
|
1881
|
+
]).subscribe(([lineItems, setting]) => {
|
|
1882
|
+
let settingsData = {};
|
|
1883
|
+
try {
|
|
1884
|
+
settingsData = JSON.parse((setting === null || setting === void 0 ? void 0 : setting.value) || '{}');
|
|
1885
|
+
}
|
|
1886
|
+
catch (error) {
|
|
1887
|
+
settingsData = {};
|
|
1888
|
+
}
|
|
1889
|
+
this.quoteMetricsSettings = settingsData;
|
|
1890
|
+
this.updateMetrics(lineItems);
|
|
1891
|
+
});
|
|
1892
|
+
}
|
|
1893
|
+
getMetricValue(metric) {
|
|
1894
|
+
return this.metricsData[metric] || 0;
|
|
1895
|
+
}
|
|
1896
|
+
updateMetrics(lineItems) {
|
|
1897
|
+
const metricKeys = this.collectMetricKeys(lineItems).filter(key => !key.includes('Effective_'));
|
|
1898
|
+
this.metricsCalculationMethodMap = this.buildMetricsCalculationMethods(metricKeys, this.metricsCalculationMethodMap);
|
|
1899
|
+
this.metricsData = metricKeys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: this.calculateMetric(lineItems, key) })), {});
|
|
1900
|
+
this.metricsUpdated$.next();
|
|
1901
|
+
}
|
|
1902
|
+
calculateMetric(lineItems, metric) {
|
|
1903
|
+
return calculateMetricByMethod(lineItems, metric, this.metricsCalculationMethodMap[metric] || 'sum');
|
|
1904
|
+
}
|
|
1905
|
+
buildMetricsCalculationMethods(metricKeys, initial) {
|
|
1906
|
+
return metricKeys.reduce((acc, name) => {
|
|
1907
|
+
var _a, _b;
|
|
1908
|
+
if (acc[name]) {
|
|
1909
|
+
return acc;
|
|
1910
|
+
}
|
|
1911
|
+
acc = Object.assign(Object.assign({}, acc), { [name]: 'sum' });
|
|
1912
|
+
const metricRule = this.getMetricRuleByTotalMetricName(name);
|
|
1913
|
+
const settingKey = ((_b = (_a = metricRule === null || metricRule === void 0 ? void 0 : metricRule.metrics) === null || _a === void 0 ? void 0 : _a.find(metric => metric.totalName === name)) === null || _b === void 0 ? void 0 : _b.name) || name;
|
|
1914
|
+
if (this.quoteMetricsSettings[settingKey]) {
|
|
1915
|
+
acc = Object.assign(Object.assign({}, acc), { [name]: this.quoteMetricsSettings[settingKey] });
|
|
1916
|
+
}
|
|
1917
|
+
return acc;
|
|
1918
|
+
}, initial);
|
|
1919
|
+
}
|
|
1920
|
+
collectMetricKeys(lineItems) {
|
|
1921
|
+
const keys = [];
|
|
1922
|
+
lineItems.forEach(lineItem => {
|
|
1923
|
+
keys.push(...Object.keys(lineItem.totalMetrics || {}));
|
|
1924
|
+
keys.push(...this.collectMetricKeys(lineItem.lineItems));
|
|
1925
|
+
});
|
|
1926
|
+
return uniq(keys);
|
|
1927
|
+
}
|
|
1928
|
+
getMetricRuleByTotalMetricName(name) {
|
|
1929
|
+
return this.activeMetricRules.find(metricRule => metricRule.metrics.find(metric => metric.totalName === name));
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
MetricsCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsCalculationService, deps: [{ token: QuoteDraftService }, { token: FlowConfigurationService }, { token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1933
|
+
MetricsCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsCalculationService, providedIn: 'root' });
|
|
1934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsCalculationService, decorators: [{
|
|
1935
|
+
type: Injectable,
|
|
1936
|
+
args: [{ providedIn: 'root' }]
|
|
1937
|
+
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: FlowConfigurationService }, { type: i1.ConfigurationSettingsApiService }]; } });
|
|
1938
|
+
|
|
1939
|
+
class ProductImagesService {
|
|
1940
|
+
constructor(productApiService) {
|
|
1941
|
+
this.productApiService = productApiService;
|
|
1942
|
+
this.imagesMap$ = new BehaviorSubject({});
|
|
1943
|
+
}
|
|
1944
|
+
getImageUrl$(productId) {
|
|
1945
|
+
if (this.imagesMap$.value[productId] == null) {
|
|
1946
|
+
this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
|
|
1947
|
+
this.fetchProductImage(productId);
|
|
1948
|
+
}
|
|
1949
|
+
return this.imagesMap$.pipe(map$1(imagesMap => imagesMap[productId]), distinctUntilChanged());
|
|
1950
|
+
}
|
|
1951
|
+
fetchProductImage(productId) {
|
|
1952
|
+
this.productApiService
|
|
1953
|
+
.fetchImage$(productId)
|
|
1954
|
+
.pipe(map$1(file => URL.createObjectURL(file)), catchError(() => of('')), tap$1(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
|
|
1955
|
+
.subscribe();
|
|
1956
|
+
}
|
|
1957
|
+
}
|
|
1958
|
+
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.ProductApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1959
|
+
ProductImagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService, providedIn: 'root' });
|
|
1960
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService, decorators: [{
|
|
1961
|
+
type: Injectable,
|
|
1962
|
+
args: [{ providedIn: 'root' }]
|
|
1963
|
+
}], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
|
|
1964
|
+
|
|
1965
|
+
class RuntimeContextService {
|
|
1966
|
+
constructor(configurationApiService) {
|
|
1967
|
+
this.configurationApiService = configurationApiService;
|
|
1968
|
+
}
|
|
1969
|
+
getRuntimeContext(productId, offeringId) {
|
|
1970
|
+
return this.configurationApiService.getRuntimeDataByProductId(productId, offeringId).pipe(map(runtimeData => {
|
|
1971
|
+
var _a;
|
|
1972
|
+
const uiDefinitionContainer = this.getUIDefinitionContainer(runtimeData);
|
|
1973
|
+
const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
|
|
1974
|
+
const { productName, properties } = (_a = Array.from(runtimeModel.components.values()).find(c => c.productId === productId)) !== null && _a !== void 0 ? _a : {};
|
|
1975
|
+
const uiDefinitionProperties = uiDefinitionContainer === null || uiDefinitionContainer === void 0 ? void 0 : uiDefinitionContainer.source.properties;
|
|
1976
|
+
return {
|
|
1977
|
+
modelId: runtimeData.modelId,
|
|
1978
|
+
uiDefinitionContainer: uiDefinitionContainer,
|
|
1979
|
+
runtimeModel: runtimeModel,
|
|
1980
|
+
runtimeMode: RuntimeMode.PROD,
|
|
1981
|
+
productId: productId,
|
|
1982
|
+
productType: (properties === null || properties === void 0 ? void 0 : properties['displayName']) || productName,
|
|
1983
|
+
offeringId: offeringId,
|
|
1984
|
+
properties: {
|
|
1985
|
+
PricingEnabled: (uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.pricingEnabled) ? 'true' : 'false',
|
|
1986
|
+
PriceListId: uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.priceList,
|
|
1987
|
+
},
|
|
1988
|
+
};
|
|
1989
|
+
}));
|
|
1990
|
+
}
|
|
1991
|
+
getUIDefinitionContainer(runtimeData) {
|
|
1992
|
+
var _a;
|
|
1993
|
+
const containers = runtimeData.uiDefinitions.filter(container => isNotLegacyUIDefinition(container.source));
|
|
1994
|
+
return (_a = containers.find(container => container.source.primary)) !== null && _a !== void 0 ? _a : containers[0];
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1998
|
+
RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService });
|
|
1999
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService, decorators: [{
|
|
2000
|
+
type: Injectable
|
|
2001
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }]; } });
|
|
2002
|
+
|
|
2003
|
+
class ConfigurationRuntimeService {
|
|
2004
|
+
constructor(apiService, contextService, runtimeContextService) {
|
|
2005
|
+
this.apiService = apiService;
|
|
2006
|
+
this.contextService = contextService;
|
|
2007
|
+
this.runtimeContextService = runtimeContextService;
|
|
2008
|
+
this._isInitialized = false;
|
|
2009
|
+
this.uiDefinitionProperties = {};
|
|
2010
|
+
}
|
|
2011
|
+
reset() {
|
|
2012
|
+
this._isInitialized = false;
|
|
2013
|
+
this._runtimeContext = undefined;
|
|
2014
|
+
this.initializationProps = undefined;
|
|
2015
|
+
this.uiDefinitionProperties = {};
|
|
2016
|
+
}
|
|
2017
|
+
initTestMode(uiDefinitionContainer) {
|
|
2018
|
+
var _a, _b;
|
|
2019
|
+
this.uiDefinitionProperties = (_a = uiDefinitionContainer.source.properties) !== null && _a !== void 0 ? _a : {};
|
|
2020
|
+
const uiDefinitionExternals = (_b = uiDefinitionContainer.source.externals) !== null && _b !== void 0 ? _b : {};
|
|
2021
|
+
return combineLatest([
|
|
2022
|
+
this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
|
|
2023
|
+
this.contextService.initTestMode(),
|
|
2024
|
+
]).pipe(first(), map(([runtimeData, context]) => {
|
|
2025
|
+
var _a;
|
|
2026
|
+
this.contextService.update({
|
|
2027
|
+
properties: Object.assign(Object.assign(Object.assign(Object.assign({}, (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.properties), context.properties), { ModelId: uiDefinitionContainer.modelId, PricingEnabled: this.uiDefinitionProperties.pricingEnabled ? 'true' : 'false', PriceListId: this.uiDefinitionProperties.priceList, offeringId: this.uiDefinitionProperties.offeringId }), uiDefinitionExternals),
|
|
2028
|
+
});
|
|
2029
|
+
this._runtimeContext = {
|
|
2030
|
+
modelId: uiDefinitionContainer.modelId,
|
|
2031
|
+
runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
|
|
2032
|
+
runtimeMode: RuntimeMode.TEST,
|
|
2033
|
+
uiDefinitionContainer,
|
|
2034
|
+
};
|
|
2035
|
+
return this._runtimeContext;
|
|
2036
|
+
}), tap(() => (this._isInitialized = true)));
|
|
2037
|
+
}
|
|
2038
|
+
init(props) {
|
|
2039
|
+
this.initializationProps = props;
|
|
2040
|
+
const context = this.contextService.resolve();
|
|
2041
|
+
return this.runtimeContextService.getRuntimeContext(props.productId, props.offeringId).pipe(tap(runtimeContext => {
|
|
2042
|
+
var _a, _b, _c, _d;
|
|
2043
|
+
this.uiDefinitionProperties = (_b = (_a = runtimeContext.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {};
|
|
2044
|
+
const { PriceListId } = (_c = context.properties) !== null && _c !== void 0 ? _c : {};
|
|
2045
|
+
const mergeContext = Object.assign(Object.assign({}, runtimeContext), { properties: Object.assign(Object.assign(Object.assign({}, runtimeContext.properties), context.properties), { PricingEnabled: PriceListId ? 'true' : 'false' }) });
|
|
2046
|
+
this.id15to18('AccountId', mergeContext.properties);
|
|
2047
|
+
this._runtimeContext = mergeContext;
|
|
2048
|
+
if (context.properties && ((_d = this._runtimeContext.properties) === null || _d === void 0 ? void 0 : _d.StartDate)) {
|
|
2049
|
+
this.contextService.update({
|
|
2050
|
+
properties: Object.assign(Object.assign({}, this._runtimeContext.properties), context.properties),
|
|
2051
|
+
});
|
|
2052
|
+
}
|
|
2053
|
+
return this._runtimeContext;
|
|
2054
|
+
}), tap(() => (this._isInitialized = true)));
|
|
2055
|
+
}
|
|
2056
|
+
overrideUIDefinition(uiDefinitionContainer) {
|
|
2057
|
+
var _a;
|
|
2058
|
+
if (!this._runtimeContext) {
|
|
2059
|
+
return;
|
|
2060
|
+
}
|
|
2061
|
+
this._runtimeContext.uiDefinitionContainer = uiDefinitionContainer;
|
|
2062
|
+
this.uiDefinitionProperties = (_a = uiDefinitionContainer.source.properties) !== null && _a !== void 0 ? _a : {};
|
|
2063
|
+
}
|
|
2064
|
+
id15to18(propertyName, source) {
|
|
2065
|
+
if (!source) {
|
|
2066
|
+
return;
|
|
2067
|
+
}
|
|
2068
|
+
const value = source[propertyName];
|
|
2069
|
+
if (typeof value === 'string' && value.length === 15) {
|
|
2070
|
+
source[propertyName] = SalesforceIdUtils.generateId18FromId15(value);
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
get isInitialized() {
|
|
2074
|
+
return this._isInitialized;
|
|
2075
|
+
}
|
|
2076
|
+
get runtimeModel() {
|
|
2077
|
+
var _a;
|
|
2078
|
+
return (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.runtimeModel;
|
|
2079
|
+
}
|
|
2080
|
+
get runtimeContext() {
|
|
2081
|
+
return this._runtimeContext;
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [{ token: i1.ConfigurationApiService }, { token: ContextService }, { token: RuntimeContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2085
|
+
ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService });
|
|
2086
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
|
|
2087
|
+
type: Injectable
|
|
2088
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: ContextService }, { type: RuntimeContextService }]; } });
|
|
2089
|
+
|
|
2090
|
+
class ConfigurationState {
|
|
2091
|
+
constructor(statefulConfigurationApiService, runtimeService, configurationService, toastService) {
|
|
2092
|
+
this.statefulConfigurationApiService = statefulConfigurationApiService;
|
|
2093
|
+
this.runtimeService = runtimeService;
|
|
2094
|
+
this.configurationService = configurationService;
|
|
2095
|
+
this.toastService = toastService;
|
|
2096
|
+
this.stateSubj$ = new BehaviorSubject({});
|
|
2097
|
+
this.state$ = this.stateSubj$.asObservable();
|
|
2098
|
+
this.stateId = null;
|
|
2099
|
+
}
|
|
2100
|
+
init$() {
|
|
2101
|
+
return this.configurationService.configure().pipe(switchMap(() => {
|
|
2102
|
+
var _a, _b;
|
|
2103
|
+
if (!this.isStatefulConfiguration) {
|
|
2104
|
+
return of(undefined);
|
|
2105
|
+
}
|
|
2106
|
+
const { actions, selectors } = (_b = (_a = this.runtimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
|
|
2107
|
+
return this.statefulConfigurationApiService.init({
|
|
2108
|
+
item: this.configurationService.generateRequest(),
|
|
2109
|
+
actions: actions === null || actions === void 0 ? void 0 : actions.map(action => ({ name: action.apiName, script: action.script })),
|
|
2110
|
+
selectors: selectors === null || selectors === void 0 ? void 0 : selectors.map(selector => ({ name: selector.apiName, script: selector.script })),
|
|
2111
|
+
});
|
|
2112
|
+
}), tap$1(stateId => (this.stateId = stateId || null)), map$1(() => undefined));
|
|
2113
|
+
}
|
|
2114
|
+
cleanup() {
|
|
2115
|
+
this.stateId = null;
|
|
2116
|
+
this.configurationService.reset();
|
|
2117
|
+
this.stateSubj$.next({});
|
|
2118
|
+
}
|
|
2119
|
+
execute$(req) {
|
|
2120
|
+
if (this.isStatefulConfiguration) {
|
|
2121
|
+
return this.executeStateful$(req);
|
|
2122
|
+
}
|
|
2123
|
+
else {
|
|
2124
|
+
return this.executeStateless$(req);
|
|
2125
|
+
}
|
|
2126
|
+
}
|
|
2127
|
+
dispatch$(actionName, inputData) {
|
|
2128
|
+
return this.execute$({ actions: [{ name: actionName, inputData }] });
|
|
2129
|
+
}
|
|
2130
|
+
select$(selectorName, inputData) {
|
|
2131
|
+
const requestId = UUID.UUID();
|
|
2132
|
+
return this.execute$({
|
|
2133
|
+
selectors: {
|
|
2134
|
+
[requestId]: {
|
|
2135
|
+
name: selectorName,
|
|
2136
|
+
inputData,
|
|
2137
|
+
},
|
|
2138
|
+
},
|
|
2139
|
+
}).pipe(map$1(() => this.stateSubj$.value[requestId]), tap$1(() => this.stateSubj$.next(omit(this.stateSubj$.value, requestId))));
|
|
2140
|
+
}
|
|
2141
|
+
get isStatefulConfiguration() {
|
|
2142
|
+
var _a;
|
|
2143
|
+
return (_a = this.runtimeService.uiDefinitionProperties.statefulConfigurationEnabled) !== null && _a !== void 0 ? _a : false;
|
|
2144
|
+
}
|
|
2145
|
+
executeStateless$(request) {
|
|
2146
|
+
return of(undefined).pipe(switchMap(() => {
|
|
2147
|
+
var _a;
|
|
2148
|
+
// Apply actions and execute configuration/price call
|
|
2149
|
+
// No need to run configuration if no actions in the request
|
|
2150
|
+
if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
2151
|
+
return of(undefined);
|
|
2152
|
+
}
|
|
2153
|
+
let configurationRequest = this.configurationService.generateRequest();
|
|
2154
|
+
request.actions.forEach(action => {
|
|
2155
|
+
var _a;
|
|
2156
|
+
configurationRequest = (_a = this.executeActionScript(configurationRequest, action)) !== null && _a !== void 0 ? _a : configurationRequest;
|
|
2157
|
+
});
|
|
2158
|
+
return this.configurationService.configureRequest$(configurationRequest);
|
|
2159
|
+
}), tap$1(() => {
|
|
2160
|
+
if (!request.selectors) {
|
|
2161
|
+
return;
|
|
2162
|
+
}
|
|
2163
|
+
// Run selectors and apply them to the state
|
|
2164
|
+
const finalConfigurationRequest = this.configurationService.generateRequest();
|
|
2165
|
+
const selectorsResult = EntityUtil.entries(request.selectors).reduce((trunk, [key, selector]) => {
|
|
2166
|
+
trunk[key] = this.executeSelectorScript(finalConfigurationRequest, selector);
|
|
2167
|
+
return trunk;
|
|
2168
|
+
}, {});
|
|
2169
|
+
this.stateSubj$.next(Object.assign(Object.assign({}, this.stateSubj$.value), selectorsResult));
|
|
2170
|
+
}), map$1(() => undefined));
|
|
2171
|
+
}
|
|
2172
|
+
executeStateful$(request) {
|
|
2173
|
+
if (!this.stateId) {
|
|
2174
|
+
return of(undefined);
|
|
2175
|
+
}
|
|
2176
|
+
return this.statefulConfigurationApiService.execute(this.stateId, request).pipe(tap$1(response => {
|
|
2177
|
+
this.stateId = response.stateId;
|
|
2178
|
+
const updatedState = this.stateSubj$.value;
|
|
2179
|
+
EntityUtil.entries(response.selectors).forEach(([key, value]) => {
|
|
2180
|
+
if (!value.success) {
|
|
2181
|
+
if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
|
|
2182
|
+
this.toastService.add({ summary: value.errorMessage, severity: ToastType.error });
|
|
2183
|
+
}
|
|
2184
|
+
return;
|
|
2185
|
+
}
|
|
2186
|
+
updatedState[key] = value.result;
|
|
2187
|
+
});
|
|
2188
|
+
this.stateSubj$.next(updatedState);
|
|
2189
|
+
}), map$1(() => undefined));
|
|
2190
|
+
}
|
|
2191
|
+
executeActionScript(request, processor) {
|
|
2192
|
+
var _a, _b, _c;
|
|
2193
|
+
const { actions } = (_b = (_a = this.runtimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
|
|
2194
|
+
const script = (_c = actions === null || actions === void 0 ? void 0 : actions.find(action => action.apiName === processor.name)) === null || _c === void 0 ? void 0 : _c.script;
|
|
2195
|
+
if (!script) {
|
|
2196
|
+
return null;
|
|
2197
|
+
}
|
|
2198
|
+
return this.executeProcessorScript(request, script, processor.inputData);
|
|
2199
|
+
}
|
|
2200
|
+
executeSelectorScript(request, processor) {
|
|
2201
|
+
var _a, _b, _c;
|
|
2202
|
+
const { selectors } = (_b = (_a = this.runtimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
|
|
2203
|
+
const script = (_c = selectors === null || selectors === void 0 ? void 0 : selectors.find(selector => selector.apiName === processor.name)) === null || _c === void 0 ? void 0 : _c.script;
|
|
2204
|
+
if (!script) {
|
|
2205
|
+
return null;
|
|
2206
|
+
}
|
|
2207
|
+
return this.executeProcessorScript(request, script, processor.inputData);
|
|
2208
|
+
}
|
|
2209
|
+
executeProcessorScript(request, script, inputData) {
|
|
2210
|
+
return new Function(`${script}\nreturn transform;`)()({
|
|
2211
|
+
request,
|
|
2212
|
+
inputData: inputData,
|
|
2213
|
+
});
|
|
1269
2214
|
}
|
|
1270
2215
|
}
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2216
|
+
ConfigurationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationState, deps: [{ token: i1.StatefulConfigurationApiService }, { token: ConfigurationRuntimeService }, { token: ConfigurationService }, { token: i6.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2217
|
+
ConfigurationState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationState });
|
|
2218
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationState, decorators: [{
|
|
1274
2219
|
type: Injectable
|
|
1275
|
-
}], ctorParameters: function () { return [{ type: i1.
|
|
1276
|
-
|
|
1277
|
-
class FlowConfigurationModule {
|
|
1278
|
-
}
|
|
1279
|
-
FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1280
|
-
FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: FlowConfigurationModule });
|
|
1281
|
-
FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService, FlowUpdateService, PriceApiService] });
|
|
1282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowConfigurationModule, decorators: [{
|
|
1283
|
-
type: NgModule,
|
|
1284
|
-
args: [{
|
|
1285
|
-
imports: [],
|
|
1286
|
-
providers: [FlowConfigurationService, FlowUpdateService, PriceApiService],
|
|
1287
|
-
}]
|
|
1288
|
-
}] });
|
|
2220
|
+
}], ctorParameters: function () { return [{ type: i1.StatefulConfigurationApiService }, { type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type: i6.ToastService }]; } });
|
|
1289
2221
|
|
|
1290
2222
|
class ConfigurationModule {
|
|
1291
2223
|
}
|
|
1292
|
-
ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1293
|
-
ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
1294
|
-
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
2224
|
+
ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2225
|
+
ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, imports: [ConfirmationDialogModule] });
|
|
2226
|
+
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [
|
|
1295
2227
|
ContextApiService,
|
|
1296
2228
|
ProductModelApiService,
|
|
1297
2229
|
ConfigurationApiService,
|
|
@@ -1300,7 +2232,7 @@ ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ver
|
|
|
1300
2232
|
ConfigurationService,
|
|
1301
2233
|
ConfigurationState,
|
|
1302
2234
|
], imports: [ConfirmationDialogModule] });
|
|
1303
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, decorators: [{
|
|
1304
2236
|
type: NgModule,
|
|
1305
2237
|
args: [{
|
|
1306
2238
|
imports: [ConfirmationDialogModule],
|
|
@@ -1316,271 +2248,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
1316
2248
|
}]
|
|
1317
2249
|
}] });
|
|
1318
2250
|
|
|
1319
|
-
function calculateMetricByMethod(lineItems, metric, method) {
|
|
1320
|
-
const items = getLineItemsByMethod(lineItems, method);
|
|
1321
|
-
return items.reduce((acc, li) => {
|
|
1322
|
-
let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
|
|
1323
|
-
if (method === 'avg' && li.length > 0) {
|
|
1324
|
-
value /= li.length;
|
|
1325
|
-
}
|
|
1326
|
-
return acc + value;
|
|
1327
|
-
}, 0);
|
|
1328
|
-
}
|
|
1329
|
-
function getLineItemsByMethod(lineItems, method) {
|
|
1330
|
-
switch (method) {
|
|
1331
|
-
case 'first': {
|
|
1332
|
-
return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
|
|
1333
|
-
}
|
|
1334
|
-
case 'last': {
|
|
1335
|
-
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
|
1336
|
-
const products = rootTermItems.map(lineItem => [
|
|
1337
|
-
lineItem,
|
|
1338
|
-
...lineItems.filter(li => li.rampInstanceId === lineItem.id),
|
|
1339
|
-
]);
|
|
1340
|
-
return products
|
|
1341
|
-
.map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
|
|
1342
|
-
.filter((li) => Boolean(li))
|
|
1343
|
-
.map(item => [item]);
|
|
1344
|
-
}
|
|
1345
|
-
case 'avg': {
|
|
1346
|
-
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
|
1347
|
-
return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
|
|
1348
|
-
}
|
|
1349
|
-
case 'sum': {
|
|
1350
|
-
return lineItems.map(item => [item]);
|
|
1351
|
-
}
|
|
1352
|
-
default: {
|
|
1353
|
-
return lineItems.map(item => [item]);
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
}
|
|
1357
|
-
function getDateValue(date) {
|
|
1358
|
-
return date ? new Date(date).getTime() : 0;
|
|
1359
|
-
}
|
|
1360
|
-
|
|
1361
|
-
class MetricsCalculationService {
|
|
1362
|
-
get onMetricsUpdate$() {
|
|
1363
|
-
return this.metricsUpdated$.asObservable();
|
|
1364
|
-
}
|
|
1365
|
-
constructor(quoteDraftService, flowConfiguration, settingsService) {
|
|
1366
|
-
this.quoteDraftService = quoteDraftService;
|
|
1367
|
-
this.flowConfiguration = flowConfiguration;
|
|
1368
|
-
this.settingsService = settingsService;
|
|
1369
|
-
this.metricsUpdated$ = new Subject();
|
|
1370
|
-
this.quoteMetricsSettings = {};
|
|
1371
|
-
this.metricsCalculationMethodMap = {};
|
|
1372
|
-
this.metricsData = {};
|
|
1373
|
-
this.activeMetricRules = [];
|
|
1374
|
-
this.activeMetricRules = this.flowConfiguration.activeMetricsSnapshot.filter(metricRule => metricRule.metrics.some(metric => !!metric.totalName));
|
|
1375
|
-
combineLatest([
|
|
1376
|
-
this.quoteDraftService.currentState$,
|
|
1377
|
-
this.settingsService.fetchSetting('QUOTE_LEVEL_METRIC_CALCULATION_METHOD').pipe(take$1(1)),
|
|
1378
|
-
]).subscribe(([lineItems, setting]) => {
|
|
1379
|
-
let settingsData = {};
|
|
1380
|
-
try {
|
|
1381
|
-
settingsData = JSON.parse((setting === null || setting === void 0 ? void 0 : setting.value) || '{}');
|
|
1382
|
-
}
|
|
1383
|
-
catch (error) {
|
|
1384
|
-
settingsData = {};
|
|
1385
|
-
}
|
|
1386
|
-
this.quoteMetricsSettings = settingsData;
|
|
1387
|
-
this.updateMetrics(lineItems);
|
|
1388
|
-
});
|
|
1389
|
-
}
|
|
1390
|
-
getMetricValue(metric) {
|
|
1391
|
-
return this.metricsData[metric] || 0;
|
|
1392
|
-
}
|
|
1393
|
-
updateMetrics(lineItems) {
|
|
1394
|
-
const metricKeys = this.collectMetricKeys(lineItems).filter(key => !key.includes('Effective_'));
|
|
1395
|
-
this.metricsCalculationMethodMap = this.buildMetricsCalculationMethods(metricKeys, this.metricsCalculationMethodMap);
|
|
1396
|
-
this.metricsData = metricKeys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: this.calculateMetric(lineItems, key) })), {});
|
|
1397
|
-
this.metricsUpdated$.next();
|
|
1398
|
-
}
|
|
1399
|
-
calculateMetric(lineItems, metric) {
|
|
1400
|
-
return calculateMetricByMethod(lineItems, metric, this.metricsCalculationMethodMap[metric] || 'sum');
|
|
1401
|
-
}
|
|
1402
|
-
buildMetricsCalculationMethods(metricKeys, initial) {
|
|
1403
|
-
return metricKeys.reduce((acc, name) => {
|
|
1404
|
-
var _a, _b;
|
|
1405
|
-
if (acc[name]) {
|
|
1406
|
-
return acc;
|
|
1407
|
-
}
|
|
1408
|
-
acc = Object.assign(Object.assign({}, acc), { [name]: 'sum' });
|
|
1409
|
-
const metricRule = this.getMetricRuleByTotalMetricName(name);
|
|
1410
|
-
const settingKey = ((_b = (_a = metricRule === null || metricRule === void 0 ? void 0 : metricRule.metrics) === null || _a === void 0 ? void 0 : _a.find(metric => metric.totalName === name)) === null || _b === void 0 ? void 0 : _b.name) || name;
|
|
1411
|
-
if (this.quoteMetricsSettings[settingKey]) {
|
|
1412
|
-
acc = Object.assign(Object.assign({}, acc), { [name]: this.quoteMetricsSettings[settingKey] });
|
|
1413
|
-
}
|
|
1414
|
-
return acc;
|
|
1415
|
-
}, initial);
|
|
1416
|
-
}
|
|
1417
|
-
collectMetricKeys(lineItems) {
|
|
1418
|
-
const keys = [];
|
|
1419
|
-
lineItems.forEach(lineItem => {
|
|
1420
|
-
keys.push(...Object.keys(lineItem.totalMetrics || {}));
|
|
1421
|
-
keys.push(...this.collectMetricKeys(lineItem.lineItems));
|
|
1422
|
-
});
|
|
1423
|
-
return uniq(keys);
|
|
1424
|
-
}
|
|
1425
|
-
getMetricRuleByTotalMetricName(name) {
|
|
1426
|
-
return this.activeMetricRules.find(metricRule => metricRule.metrics.find(metric => metric.totalName === name));
|
|
1427
|
-
}
|
|
1428
|
-
}
|
|
1429
|
-
MetricsCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsCalculationService, deps: [{ token: QuoteDraftService }, { token: FlowConfigurationService }, { token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1430
|
-
MetricsCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsCalculationService, providedIn: 'root' });
|
|
1431
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsCalculationService, decorators: [{
|
|
1432
|
-
type: Injectable,
|
|
1433
|
-
args: [{ providedIn: 'root' }]
|
|
1434
|
-
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: FlowConfigurationService }, { type: i1.ConfigurationSettingsApiService }]; } });
|
|
1435
|
-
|
|
1436
|
-
class ProductImagesService {
|
|
1437
|
-
constructor(productApiService) {
|
|
1438
|
-
this.productApiService = productApiService;
|
|
1439
|
-
this.imagesMap$ = new BehaviorSubject({});
|
|
1440
|
-
}
|
|
1441
|
-
getImageUrl$(productId) {
|
|
1442
|
-
if (this.imagesMap$.value[productId] == null) {
|
|
1443
|
-
this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
|
|
1444
|
-
this.fetchProductImage(productId);
|
|
1445
|
-
}
|
|
1446
|
-
return this.imagesMap$.pipe(map$2(imagesMap => imagesMap[productId]), distinctUntilChanged());
|
|
1447
|
-
}
|
|
1448
|
-
fetchProductImage(productId) {
|
|
1449
|
-
this.productApiService
|
|
1450
|
-
.fetchImage$(productId)
|
|
1451
|
-
.pipe(map$2(file => URL.createObjectURL(file)), catchError$1(() => of('')), tap$1(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
|
|
1452
|
-
.subscribe();
|
|
1453
|
-
}
|
|
1454
|
-
}
|
|
1455
|
-
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.ProductApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1456
|
-
ProductImagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProductImagesService, providedIn: 'root' });
|
|
1457
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProductImagesService, decorators: [{
|
|
1458
|
-
type: Injectable,
|
|
1459
|
-
args: [{ providedIn: 'root' }]
|
|
1460
|
-
}], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
|
|
1461
|
-
|
|
1462
|
-
class RuntimeSettingsService {
|
|
1463
|
-
constructor(configurationSettingsApiService) {
|
|
1464
|
-
this.configurationSettingsApiService = configurationSettingsApiService;
|
|
1465
|
-
this.configurationSettings$ = new BehaviorSubject({});
|
|
1466
|
-
this.currencySettings$ = new BehaviorSubject({
|
|
1467
|
-
iso: DEFAULT_CURRENCY_ISO_CODE,
|
|
1468
|
-
symbol: DEFAULT_CURRENCY_SYMBOL,
|
|
1469
|
-
});
|
|
1470
|
-
this.getCurrencySymbol = (locale, currency) => {
|
|
1471
|
-
return (0)
|
|
1472
|
-
.toLocaleString(locale, { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0 })
|
|
1473
|
-
.replace(/\d/g, '')
|
|
1474
|
-
.trim();
|
|
1475
|
-
};
|
|
1476
|
-
}
|
|
1477
|
-
create() {
|
|
1478
|
-
return this.configurationSettingsApiService.fetchSettings().pipe(map$2(settings => this.parseConfigurationSettings(settings)), tap$1(configurationSettings => {
|
|
1479
|
-
this.configurationSettings$.next(configurationSettings);
|
|
1480
|
-
this.formattingSettings = this.getFormattingSettings();
|
|
1481
|
-
}), map$2(() => undefined));
|
|
1482
|
-
}
|
|
1483
|
-
initCurrency(iso) {
|
|
1484
|
-
if (iso) {
|
|
1485
|
-
const symbol = this.getCurrencySymbol('en-US', iso);
|
|
1486
|
-
this.currencySettings$.next({ iso, symbol });
|
|
1487
|
-
}
|
|
1488
|
-
}
|
|
1489
|
-
getFormattingSettings() {
|
|
1490
|
-
var _a, _b;
|
|
1491
|
-
if (this.formattingSettings) {
|
|
1492
|
-
return this.formattingSettings;
|
|
1493
|
-
}
|
|
1494
|
-
const shoppingCartSettings = (_a = this.getConfigurationSettings()['shopping-cart']) === null || _a === void 0 ? void 0 : _a.reduce((acc, setting) => {
|
|
1495
|
-
return Object.assign(Object.assign({}, acc), { [setting.id]: setting.properties });
|
|
1496
|
-
}, {});
|
|
1497
|
-
const currencySettings = this.getCurrencySettings();
|
|
1498
|
-
const dateFormat = (validateDateFormat((_b = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DATE_FORMAT) !== null && _b !== void 0 ? _b : '') && (shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DATE_FORMAT)) ||
|
|
1499
|
-
DEFAULT_DATE_FORMAT;
|
|
1500
|
-
const decimalSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DECIMAL_SEPARATOR;
|
|
1501
|
-
const thousandsSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.THOUSANDS_SEPARATOR;
|
|
1502
|
-
// the number of decimal places can be 0
|
|
1503
|
-
const priceScale = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.PRICE_SCALE;
|
|
1504
|
-
const decimalsCount = priceScale !== null && priceScale !== '' && !isNaN(Number(priceScale)) && Number(priceScale) >= 0
|
|
1505
|
-
? Number(priceScale)
|
|
1506
|
-
: DEFAULT_DECIMALS_COUNT;
|
|
1507
|
-
return {
|
|
1508
|
-
currencySymbol: currencySettings.symbol,
|
|
1509
|
-
dateFormats: getSupportedDateFormats(dateFormat),
|
|
1510
|
-
decimalsCount,
|
|
1511
|
-
decimalSeparator: decimalSeparator !== undefined && ['.', ','].includes(decimalSeparator)
|
|
1512
|
-
? decimalSeparator
|
|
1513
|
-
: DEFAULT_DECIMAL_SEPARATOR,
|
|
1514
|
-
// thousands separator can be a blank value, so it can also be null
|
|
1515
|
-
thousandsSeparator: thousandsSeparator !== undefined && ['.', ',', '', null].includes(thousandsSeparator)
|
|
1516
|
-
? thousandsSeparator || ''
|
|
1517
|
-
: DEFAULT_THOUSANDS_SEPARATOR,
|
|
1518
|
-
};
|
|
1519
|
-
}
|
|
1520
|
-
getConfigurationSettings() {
|
|
1521
|
-
return this.configurationSettings$.value;
|
|
1522
|
-
}
|
|
1523
|
-
getCurrencySettings() {
|
|
1524
|
-
return this.currencySettings$.value;
|
|
1525
|
-
}
|
|
1526
|
-
parseConfigurationSettings(settings) {
|
|
1527
|
-
return settings.reduce((acc, setting) => {
|
|
1528
|
-
switch (setting.key) {
|
|
1529
|
-
case 'shopping-cart':
|
|
1530
|
-
acc['shopping-cart'] = parseJsonSafely(setting.value, []);
|
|
1531
|
-
break;
|
|
1532
|
-
case 'navigation':
|
|
1533
|
-
acc.navigation = parseJsonSafely(setting.value, {});
|
|
1534
|
-
break;
|
|
1535
|
-
case 'flows':
|
|
1536
|
-
acc.flows = parseJsonSafely(setting.value, []);
|
|
1537
|
-
break;
|
|
1538
|
-
default:
|
|
1539
|
-
acc[setting.key] = setting.value;
|
|
1540
|
-
}
|
|
1541
|
-
return acc;
|
|
1542
|
-
}, {});
|
|
1543
|
-
}
|
|
1544
|
-
}
|
|
1545
|
-
RuntimeSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeSettingsService, deps: [{ token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1546
|
-
RuntimeSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeSettingsService, providedIn: 'root' });
|
|
1547
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeSettingsService, decorators: [{
|
|
1548
|
-
type: Injectable,
|
|
1549
|
-
args: [{ providedIn: 'root' }]
|
|
1550
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigurationSettingsApiService }]; } });
|
|
1551
|
-
|
|
1552
2251
|
const DEFAULT_FORMATTING_SETTINGS = {
|
|
1553
2252
|
currencySymbol: DEFAULT_CURRENCY_SYMBOL,
|
|
1554
2253
|
decimalsCount: DEFAULT_DECIMALS_COUNT,
|
|
1555
2254
|
dateFormats: getSupportedDateFormats(DEFAULT_DATE_FORMAT),
|
|
1556
2255
|
decimalSeparator: DEFAULT_DECIMAL_SEPARATOR,
|
|
1557
2256
|
thousandsSeparator: DEFAULT_THOUSANDS_SEPARATOR,
|
|
2257
|
+
actionCodeLabels: DEFAULT_ACTION_CODE_LABELS,
|
|
1558
2258
|
};
|
|
1559
2259
|
class SdkCoreModule {
|
|
1560
2260
|
}
|
|
1561
|
-
SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1562
|
-
SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
1563
|
-
SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
ProductImagesService,
|
|
1567
|
-
MetricsCalculationService,
|
|
1568
|
-
RuntimeSettingsService,
|
|
2261
|
+
SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2262
|
+
SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, imports: [ConfigurationModule, FlowConfigurationModule] });
|
|
2263
|
+
SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, providers: [
|
|
2264
|
+
IntegrationState,
|
|
2265
|
+
FlowStateService,
|
|
1569
2266
|
{
|
|
1570
2267
|
provide: FORMATTING_SETTINGS_TOKEN,
|
|
1571
2268
|
useExisting: RuntimeSettingsService,
|
|
1572
2269
|
},
|
|
1573
2270
|
], imports: [ConfigurationModule, FlowConfigurationModule] });
|
|
1574
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, decorators: [{
|
|
1575
2272
|
type: NgModule,
|
|
1576
2273
|
args: [{
|
|
1577
2274
|
imports: [ConfigurationModule, FlowConfigurationModule],
|
|
1578
2275
|
providers: [
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
ProductImagesService,
|
|
1582
|
-
MetricsCalculationService,
|
|
1583
|
-
RuntimeSettingsService,
|
|
2276
|
+
IntegrationState,
|
|
2277
|
+
FlowStateService,
|
|
1584
2278
|
{
|
|
1585
2279
|
provide: FORMATTING_SETTINGS_TOKEN,
|
|
1586
2280
|
useExisting: RuntimeSettingsService,
|
|
@@ -1614,9 +2308,9 @@ class CalendarDirective {
|
|
|
1614
2308
|
}
|
|
1615
2309
|
}
|
|
1616
2310
|
}
|
|
1617
|
-
CalendarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1618
|
-
CalendarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
1619
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2311
|
+
CalendarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2312
|
+
CalendarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: CalendarDirective, selector: "[vlCalendar]", inputs: { vlCalendar: "vlCalendar" }, ngImport: i0 });
|
|
2313
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarDirective, decorators: [{
|
|
1620
2314
|
type: Directive,
|
|
1621
2315
|
args: [{
|
|
1622
2316
|
selector: '[vlCalendar]',
|
|
@@ -1627,10 +2321,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
1627
2321
|
|
|
1628
2322
|
class SdkDirectivesModule {
|
|
1629
2323
|
}
|
|
1630
|
-
SdkDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1631
|
-
SdkDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
1632
|
-
SdkDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
1633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2324
|
+
SdkDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2325
|
+
SdkDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SdkDirectivesModule, declarations: [CalendarDirective], exports: [CalendarDirective] });
|
|
2326
|
+
SdkDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkDirectivesModule });
|
|
2327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkDirectivesModule, decorators: [{
|
|
1634
2328
|
type: NgModule,
|
|
1635
2329
|
args: [{
|
|
1636
2330
|
declarations: [CalendarDirective],
|
|
@@ -1650,22 +2344,28 @@ class DatePipe {
|
|
|
1650
2344
|
this.destroy$.next();
|
|
1651
2345
|
this.destroy$.complete();
|
|
1652
2346
|
}
|
|
1653
|
-
transform(date) {
|
|
2347
|
+
transform(date, type = 'date') {
|
|
1654
2348
|
var _a, _b;
|
|
1655
2349
|
if (!date) {
|
|
1656
2350
|
return '';
|
|
1657
2351
|
}
|
|
2352
|
+
const dateFormat = ((_a = this.formattingSettings) === null || _a === void 0 ? void 0 : _a.dateFormats.datePipeFormat) || DEFAULT_DATE_FORMAT;
|
|
2353
|
+
const formatMap = {
|
|
2354
|
+
date: dateFormat,
|
|
2355
|
+
time: DEFAULT_TIME_FORMAT,
|
|
2356
|
+
datetime: `${dateFormat} ${DEFAULT_TIME_FORMAT}`,
|
|
2357
|
+
};
|
|
1658
2358
|
try {
|
|
1659
|
-
return formatDate(date,
|
|
2359
|
+
return formatDate(date, formatMap[type], this.locale, (_b = this.defaultOptions) === null || _b === void 0 ? void 0 : _b.timezone);
|
|
1660
2360
|
}
|
|
1661
2361
|
catch (error) {
|
|
1662
2362
|
return new Date(date).toString();
|
|
1663
2363
|
}
|
|
1664
2364
|
}
|
|
1665
2365
|
}
|
|
1666
|
-
DatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1667
|
-
DatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.
|
|
1668
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2366
|
+
DatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2367
|
+
DatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: DatePipe, name: "vlDate" });
|
|
2368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatePipe, decorators: [{
|
|
1669
2369
|
type: Pipe,
|
|
1670
2370
|
args: [{
|
|
1671
2371
|
name: 'vlDate',
|
|
@@ -1687,9 +2387,9 @@ class NumberPipe {
|
|
|
1687
2387
|
return formatNumber(price, (_a = this.formattingSettings) === null || _a === void 0 ? void 0 : _a.thousandsSeparator, (_b = this.formattingSettings) === null || _b === void 0 ? void 0 : _b.decimalSeparator, (_c = this.formattingSettings) === null || _c === void 0 ? void 0 : _c.decimalsCount);
|
|
1688
2388
|
}
|
|
1689
2389
|
}
|
|
1690
|
-
NumberPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1691
|
-
NumberPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.
|
|
1692
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2390
|
+
NumberPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2391
|
+
NumberPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NumberPipe, name: "vlNumber" });
|
|
2392
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NumberPipe, decorators: [{
|
|
1693
2393
|
type: Pipe,
|
|
1694
2394
|
args: [{
|
|
1695
2395
|
name: 'vlNumber',
|
|
@@ -1714,25 +2414,44 @@ class PricePipe {
|
|
|
1714
2414
|
return `${((_a = this.formattingSettings) === null || _a === void 0 ? void 0 : _a.currencySymbol) || DEFAULT_CURRENCY_SYMBOL}${formatNumber(price, (_b = this.formattingSettings) === null || _b === void 0 ? void 0 : _b.thousandsSeparator, (_c = this.formattingSettings) === null || _c === void 0 ? void 0 : _c.decimalSeparator, (_d = this.formattingSettings) === null || _d === void 0 ? void 0 : _d.decimalsCount)}`;
|
|
1715
2415
|
}
|
|
1716
2416
|
}
|
|
1717
|
-
PricePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1718
|
-
PricePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.
|
|
1719
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2417
|
+
PricePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PricePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2418
|
+
PricePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: PricePipe, name: "vlPrice" });
|
|
2419
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PricePipe, decorators: [{
|
|
1720
2420
|
type: Pipe,
|
|
1721
2421
|
args: [{
|
|
1722
2422
|
name: 'vlPrice',
|
|
1723
2423
|
}]
|
|
1724
2424
|
}] });
|
|
1725
2425
|
|
|
2426
|
+
class ActionCodePipe {
|
|
2427
|
+
constructor() {
|
|
2428
|
+
var _a;
|
|
2429
|
+
this.formattingSettings = (_a = inject(FORMATTING_SETTINGS_TOKEN, { optional: true })) === null || _a === void 0 ? void 0 : _a.getFormattingSettings();
|
|
2430
|
+
}
|
|
2431
|
+
transform(actionCode) {
|
|
2432
|
+
var _a, _b;
|
|
2433
|
+
return (_b = (_a = this.formattingSettings) === null || _a === void 0 ? void 0 : _a.actionCodeLabels[actionCode]) !== null && _b !== void 0 ? _b : actionCode;
|
|
2434
|
+
}
|
|
2435
|
+
}
|
|
2436
|
+
ActionCodePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActionCodePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2437
|
+
ActionCodePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ActionCodePipe, name: "vlActionCode" });
|
|
2438
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActionCodePipe, decorators: [{
|
|
2439
|
+
type: Pipe,
|
|
2440
|
+
args: [{
|
|
2441
|
+
name: 'vlActionCode',
|
|
2442
|
+
}]
|
|
2443
|
+
}] });
|
|
2444
|
+
|
|
1726
2445
|
class SdkPipesModule {
|
|
1727
2446
|
}
|
|
1728
|
-
SdkPipesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
1729
|
-
SdkPipesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
1730
|
-
SdkPipesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
1731
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2447
|
+
SdkPipesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2448
|
+
SdkPipesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SdkPipesModule, declarations: [NumberPipe, PricePipe, DatePipe, ActionCodePipe], exports: [NumberPipe, PricePipe, DatePipe, ActionCodePipe] });
|
|
2449
|
+
SdkPipesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkPipesModule });
|
|
2450
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkPipesModule, decorators: [{
|
|
1732
2451
|
type: NgModule,
|
|
1733
2452
|
args: [{
|
|
1734
|
-
declarations: [NumberPipe, PricePipe, DatePipe],
|
|
1735
|
-
exports: [NumberPipe, PricePipe, DatePipe],
|
|
2453
|
+
declarations: [NumberPipe, PricePipe, DatePipe, ActionCodePipe],
|
|
2454
|
+
exports: [NumberPipe, PricePipe, DatePipe, ActionCodePipe],
|
|
1736
2455
|
}]
|
|
1737
2456
|
}] });
|
|
1738
2457
|
|
|
@@ -1740,5 +2459,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
1740
2459
|
* Generated bundle index. Do not edit.
|
|
1741
2460
|
*/
|
|
1742
2461
|
|
|
1743
|
-
export { CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowUpdateService, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, calculateCardinalityVariables, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
|
|
2462
|
+
export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, FlowUpdateService, IntegrationState, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, calculateCardinalityVariables, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateConfigurationLineItem, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
|
|
1744
2463
|
//# sourceMappingURL=veloceapps-sdk-core.mjs.map
|