@veloceapps/sdk 11.0.0-8 → 11.0.0-80
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/cms/cms.actions.d.ts +92 -29
- package/cms/components/element-renderer/element-renderer.component.d.ts +3 -10
- package/cms/components/preview/preview.component.d.ts +5 -6
- package/cms/components/preview/preview.types.d.ts +0 -4
- package/cms/services/element-context.service.d.ts +0 -1
- package/cms/types/common.types.d.ts +2 -0
- package/cms/types/index.d.ts +0 -1
- package/cms/utils/path.utils.d.ts +1 -2
- package/cms/vendor-map.d.ts +17 -40
- package/core/index.d.ts +1 -1
- package/core/modules/configuration/index.d.ts +3 -4
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +8 -19
- package/core/modules/configuration/services/configuration-state.service.d.ts +8 -8
- package/core/modules/configuration/services/configuration.service.d.ts +23 -47
- package/core/modules/configuration/services/test-mode-configuration.service.d.ts +23 -0
- package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -5
- package/core/modules/configuration/types/configuration.types.d.ts +4 -2
- package/core/modules/configuration/types/index.d.ts +2 -0
- package/core/modules/flow-configuration/index.d.ts +0 -3
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +11 -38
- package/core/operators/filter-successful-execute.operator.d.ts +3 -0
- package/core/operators/index.d.ts +1 -0
- package/core/services/catalog-products.service.d.ts +11 -0
- package/core/services/flow-info.service.d.ts +27 -12
- package/core/services/flow-state-configuration.service.d.ts +2 -8
- package/core/services/flow-state.service.d.ts +13 -22
- package/core/services/index.d.ts +3 -3
- package/core/services/integration.state.d.ts +1 -1
- package/core/services/product-images.service.d.ts +3 -3
- package/core/services/runtime-settings.service.d.ts +1 -1
- package/core/services/sales-transaction.service.d.ts +27 -0
- package/core/types/flow-customization.types.d.ts +2 -2
- package/core/types/flow-state.types.d.ts +2 -2
- package/core/types/index.d.ts +0 -1
- package/core/utils/index.d.ts +2 -2
- package/core/utils/transaction-item.utils.d.ts +7 -0
- package/core/utils/transaction-item.worker.d.ts +8 -0
- package/esm2020/cms/cms.actions.mjs +93 -71
- package/esm2020/cms/cms.default.mjs +2 -3
- package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +7 -64
- package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
- package/esm2020/cms/components/preview/preview.component.mjs +19 -28
- package/esm2020/cms/components/preview/preview.types.mjs +1 -1
- package/esm2020/cms/services/element-context.service.mjs +1 -1
- package/esm2020/cms/types/common.types.mjs +1 -1
- package/esm2020/cms/types/index.mjs +1 -2
- package/esm2020/cms/utils/element.utils.mjs +3 -3
- package/esm2020/cms/utils/elements-resolver.mjs +16 -5
- package/esm2020/cms/utils/path.utils.mjs +1 -10
- package/esm2020/cms/vendor-map.mjs +17 -18
- package/esm2020/core/core.module.mjs +7 -7
- package/esm2020/core/index.mjs +2 -2
- package/esm2020/core/modules/configuration/configuration.module.mjs +14 -4
- package/esm2020/core/modules/configuration/index.mjs +4 -5
- package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +16 -101
- package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +65 -77
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +109 -223
- package/esm2020/core/modules/configuration/services/test-mode-configuration.service.mjs +74 -0
- package/esm2020/core/modules/configuration/types/configuration-runtime.types.mjs +1 -1
- package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
- package/esm2020/core/modules/configuration/types/index.mjs +3 -0
- package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +3 -4
- package/esm2020/core/modules/flow-configuration/index.mjs +1 -4
- package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +44 -128
- package/esm2020/core/operators/filter-successful-execute.operator.mjs +5 -0
- package/esm2020/core/operators/index.mjs +2 -0
- package/esm2020/core/services/catalog-products.service.mjs +25 -0
- package/esm2020/core/services/flow-info.service.mjs +82 -31
- package/esm2020/core/services/flow-state-configuration.service.mjs +10 -25
- package/esm2020/core/services/flow-state.service.mjs +60 -172
- package/esm2020/core/services/index.mjs +4 -4
- package/esm2020/core/services/integration.state.mjs +2 -2
- package/esm2020/core/services/product-images.service.mjs +8 -8
- package/esm2020/core/services/runtime-settings.service.mjs +3 -3
- package/esm2020/core/services/sales-transaction.service.mjs +62 -0
- package/esm2020/core/types/flow-customization.types.mjs +1 -1
- package/esm2020/core/types/flow-state.types.mjs +1 -1
- package/esm2020/core/types/index.mjs +1 -2
- package/esm2020/core/utils/index.mjs +3 -3
- package/esm2020/core/utils/transaction-item.utils.mjs +60 -0
- package/esm2020/core/utils/transaction-item.worker.mjs +16 -0
- package/esm2020/src/components/flow-header/flow-header.component.mjs +8 -12
- package/esm2020/src/components/guided-selling/guided-selling.component.mjs +8 -12
- package/esm2020/src/flow-routing.module.mjs +12 -41
- package/esm2020/src/flow.component.mjs +5 -5
- package/esm2020/src/guards/flow.guard.mjs +13 -14
- package/esm2020/src/guards/product-unload.guard.mjs +7 -9
- package/esm2020/src/index.mjs +1 -3
- package/esm2020/src/pages/assets/assets.component.mjs +8 -9
- package/esm2020/src/pages/catalog/catalog.component.mjs +8 -9
- package/esm2020/src/pages/debug/debug.component.mjs +14 -23
- package/esm2020/src/pages/product/product.component.mjs +12 -89
- package/esm2020/src/pages/product/product.module.mjs +5 -5
- package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +5 -6
- package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +8 -9
- package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
- package/esm2020/src/resolvers/pcm-model.resolver.mjs +12 -0
- package/esm2020/src/resolvers/sales-transaction.resolver.mjs +64 -0
- package/esm2020/src/resolvers/ui-definition.resolver.mjs +42 -0
- package/esm2020/src/services/flow-dialog.service.mjs +8 -8
- package/esm2020/src/services/flow-router.service.mjs +16 -33
- package/esm2020/src/services/flow.service.mjs +13 -54
- package/esm2020/src/types/index.mjs +2 -3
- package/esm2020/src/types/route.types.mjs +1 -1
- package/fesm2015/veloceapps-sdk-cms.mjs +162 -309
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk-core.mjs +812 -1657
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +188 -801
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +158 -300
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +875 -1741
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +188 -795
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/flow-header/flow-header.component.d.ts +3 -3
- package/src/components/guided-selling/guided-selling.component.d.ts +3 -3
- package/src/flow-routing.module.d.ts +1 -2
- package/src/flow.component.d.ts +2 -2
- package/src/guards/product-unload.guard.d.ts +5 -6
- package/src/index.d.ts +0 -2
- package/src/pages/assets/assets.component.d.ts +3 -3
- package/src/pages/catalog/catalog.component.d.ts +3 -3
- package/src/pages/debug/debug.component.d.ts +2 -5
- package/src/pages/product/product.component.d.ts +5 -14
- package/src/pages/product/product.module.d.ts +1 -1
- package/src/pages/record-not-found/record-not-found.component.d.ts +2 -3
- package/src/pages/shopping-cart/shopping-cart.component.d.ts +3 -3
- package/src/resolvers/flow.resolver.d.ts +5 -6
- package/src/resolvers/pcm-model.resolver.d.ts +3 -0
- package/src/resolvers/sales-transaction.resolver.d.ts +18 -0
- package/src/resolvers/ui-definition.resolver.d.ts +3 -0
- package/src/services/flow-dialog.service.d.ts +5 -4
- package/src/services/flow-router.service.d.ts +4 -6
- package/src/services/flow.service.d.ts +2 -7
- package/src/types/index.d.ts +1 -2
- package/src/types/route.types.d.ts +0 -5
- package/cms/plugins/configuration.plugin.d.ts +0 -23
- package/cms/types/configuration.types.d.ts +0 -21
- package/core/modules/configuration/helpers.d.ts +0 -6
- package/core/modules/configuration/services/runtime-context.service.d.ts +0 -12
- package/core/modules/flow-configuration/services/flow-update.service.d.ts +0 -13
- package/core/modules/flow-configuration/types/update.types.d.ts +0 -12
- package/core/services/context.service.d.ts +0 -23
- package/core/services/quote-draft.service.d.ts +0 -50
- package/core/types/runtime.types.d.ts +0 -30
- package/core/utils/line-item.utils.d.ts +0 -25
- package/core/utils/line-item.worker.d.ts +0 -9
- package/esm2020/cms/plugins/configuration.plugin.mjs +0 -109
- package/esm2020/cms/types/configuration.types.mjs +0 -2
- package/esm2020/core/modules/configuration/helpers.mjs +0 -73
- package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +0 -45
- package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +0 -138
- package/esm2020/core/modules/flow-configuration/types/update.types.mjs +0 -2
- package/esm2020/core/services/context.service.mjs +0 -91
- package/esm2020/core/services/quote-draft.service.mjs +0 -192
- package/esm2020/core/types/runtime.types.mjs +0 -16
- package/esm2020/core/utils/line-item.utils.mjs +0 -187
- package/esm2020/core/utils/line-item.worker.mjs +0 -19
- package/esm2020/src/guards/context.guard.mjs +0 -91
- package/esm2020/src/guards/index.mjs +0 -2
- package/esm2020/src/pages/remote/remote.component.mjs +0 -342
- package/esm2020/src/pages/remote/remote.module.mjs +0 -20
- package/esm2020/src/pages/remote/remote.types.mjs +0 -2
- package/esm2020/src/resolvers/quote.resolver.mjs +0 -82
- package/esm2020/src/types/context-route.types.mjs +0 -2
- package/esm2020/src/types/metrics.types.mjs +0 -2
- package/esm2020/src/utils/flow.utils.mjs +0 -25
- package/esm2020/src/utils/index.mjs +0 -2
- package/src/guards/context.guard.d.ts +0 -19
- package/src/guards/index.d.ts +0 -1
- package/src/pages/remote/remote.component.d.ts +0 -46
- package/src/pages/remote/remote.module.d.ts +0 -10
- package/src/pages/remote/remote.types.d.ts +0 -4
- package/src/resolvers/quote.resolver.d.ts +0 -19
- package/src/types/context-route.types.d.ts +0 -5
- package/src/types/metrics.types.d.ts +0 -5
- package/src/utils/flow.utils.d.ts +0 -8
- package/src/utils/index.d.ts +0 -1
@@ -1,219 +1,314 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import
|
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
|
-
import * as i1 from '@veloceapps/api';
|
2
|
+
import { Injectable, InjectionToken, Optional, Inject, NgModule, inject, Directive, Input, LOCALE_ID, Pipe } from '@angular/core';
|
3
|
+
import { isDefined, UUID, 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, UITemplateType, SalesforceIdUtils, ConfigurationProcessorTypes, EntityUtil, extractErrorDetails, DEFAULT_TIME_FORMAT, formatNumber } from '@veloceapps/core';
|
4
|
+
import * as i3 from '@veloceapps/api';
|
7
5
|
import { ApiModule } from '@veloceapps/api';
|
8
|
-
import { merge, isEqual, cloneDeep, assign, flatten, entries, sortBy, map as map$2, omit, uniqBy, transform } from 'lodash';
|
9
6
|
import * as i6 from '@veloceapps/components';
|
10
|
-
import { ToastType,
|
11
|
-
import
|
12
|
-
import
|
13
|
-
import
|
14
|
-
import
|
7
|
+
import { ToastType, ConfirmationDialogModule } from '@veloceapps/components';
|
8
|
+
import { tap, BehaviorSubject, map, filter, switchMap, of, forkJoin, throwError, noop, Subject, catchError, combineLatest, finalize, buffer, debounceTime, share, take, distinctUntilChanged, shareReplay, takeUntil, first } from 'rxjs';
|
9
|
+
import * as i1 from '@veloceapps/api/v2';
|
10
|
+
import { flatten, omit, uniqBy, cloneDeep, assign, isEqual } from 'lodash';
|
11
|
+
import { filter as filter$1, map as map$1, tap as tap$1, catchError as catchError$1, finalize as finalize$1 } from 'rxjs/operators';
|
12
|
+
import * as i2 from 'primeng/api';
|
15
13
|
import { NgControl } from '@angular/forms';
|
16
14
|
import { DATE_PIPE_DEFAULT_OPTIONS, formatDate } from '@angular/common';
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
class ConfigurationRuntimeService {
|
17
|
+
constructor(pcmApiService) {
|
18
|
+
this.pcmApiService = pcmApiService;
|
19
|
+
this.uiDefinitionContainer = null;
|
20
|
+
}
|
21
|
+
get uiDefinitionProps() {
|
22
|
+
var _a, _b;
|
23
|
+
return (_b = (_a = this.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {};
|
24
|
+
}
|
25
|
+
reset() {
|
26
|
+
this.uiDefinitionContainer = null;
|
27
|
+
this.initializationProps = undefined;
|
28
|
+
this.pcmModel = undefined;
|
29
|
+
}
|
30
|
+
init$(props) {
|
31
|
+
this.initializationProps = props;
|
32
|
+
return this.pcmApiService.fetchPCMByProductId(props.productId).pipe(tap(pcmModel => (this.pcmModel = pcmModel)));
|
33
|
+
}
|
34
|
+
}
|
35
|
+
ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [{ token: i1.PCMApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
36
|
+
ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService });
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
|
38
|
+
type: Injectable
|
39
|
+
}], ctorParameters: function () { return [{ type: i1.PCMApiService }]; } });
|
40
|
+
|
41
|
+
const findTransactionItem = (id, items) => {
|
42
|
+
return findTransactionItemWithComparator(items, (ti) => ti.id === id);
|
26
43
|
};
|
27
|
-
const
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
const findTransactionItemWithComparator = (items, comparator) => {
|
45
|
+
let currentLevel = items;
|
46
|
+
while (currentLevel.length) {
|
47
|
+
const found = currentLevel.find(comparator);
|
48
|
+
if (found) {
|
49
|
+
return found;
|
50
|
+
}
|
51
|
+
currentLevel = flatten(currentLevel.map(parent => parent.children));
|
52
|
+
}
|
53
|
+
return;
|
54
|
+
};
|
55
|
+
const insertTransactionItem = (item, parentId, toInsert) => {
|
56
|
+
const insertData = item.id === parentId ? [toInsert] : [];
|
57
|
+
return Object.assign(Object.assign({}, item), { children: [
|
58
|
+
...insertData,
|
59
|
+
...item.children.map(ti => {
|
60
|
+
return insertTransactionItem(ti, parentId, toInsert);
|
61
|
+
}),
|
62
|
+
] });
|
63
|
+
};
|
64
|
+
const removeTransactionItem = (item, idToRemove) => {
|
65
|
+
return Object.assign(Object.assign({}, item), { children: item.children
|
66
|
+
.map(ti => {
|
67
|
+
if (ti.id === idToRemove) {
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
else if (ti.children.length) {
|
71
|
+
return removeTransactionItem(ti, idToRemove);
|
72
|
+
}
|
73
|
+
return ti;
|
74
|
+
})
|
75
|
+
.filter(isDefined) });
|
76
|
+
};
|
77
|
+
const replaceTransactionItem = (item, replaceTo) => {
|
78
|
+
if (item.id === replaceTo.id) {
|
79
|
+
return Object.assign({}, replaceTo);
|
80
|
+
}
|
81
|
+
return Object.assign(Object.assign({}, item), { children: item.children.map(ti => replaceTransactionItem(ti, replaceTo)) });
|
50
82
|
};
|
51
|
-
const
|
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 = [];
|
83
|
+
const generateTransactionItem = (productId) => {
|
60
84
|
return {
|
61
|
-
id,
|
62
|
-
|
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 : '',
|
85
|
+
id: UUID.UUID(),
|
86
|
+
productId,
|
70
87
|
};
|
71
88
|
};
|
72
89
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
var RuntimeMode;
|
78
|
-
(function (RuntimeMode) {
|
79
|
-
RuntimeMode[RuntimeMode["TEST"] = 0] = "TEST";
|
80
|
-
RuntimeMode[RuntimeMode["PROD"] = 1] = "PROD";
|
81
|
-
})(RuntimeMode || (RuntimeMode = {}));
|
82
|
-
var RuntimeOperation;
|
83
|
-
(function (RuntimeOperation) {
|
84
|
-
RuntimeOperation["INIT"] = "INIT";
|
85
|
-
RuntimeOperation["UPDATE"] = "UPDATE";
|
86
|
-
})(RuntimeOperation || (RuntimeOperation = {}));
|
87
|
-
var RuntimeStep;
|
88
|
-
(function (RuntimeStep) {
|
89
|
-
RuntimeStep["START"] = "START";
|
90
|
-
RuntimeStep["UPDATE"] = "UPDATE";
|
91
|
-
})(RuntimeStep || (RuntimeStep = {}));
|
92
|
-
|
93
|
-
const UI_DEFINITION_VERSION = 3;
|
94
|
-
|
95
|
-
class ContextService {
|
96
|
-
constructor(contextApiService) {
|
97
|
-
this.contextApiService = contextApiService;
|
98
|
-
this.context = new BehaviorSubject(null);
|
90
|
+
class TransactionItemWorker {
|
91
|
+
constructor(src) {
|
92
|
+
this.ti = Object.assign({}, src);
|
99
93
|
}
|
100
|
-
|
101
|
-
return
|
94
|
+
insert(parentId, toInsert) {
|
95
|
+
return new TransactionItemWorker(insertTransactionItem(this.ti, parentId, toInsert));
|
102
96
|
}
|
103
|
-
|
104
|
-
return this.
|
97
|
+
remove(id) {
|
98
|
+
return new TransactionItemWorker(removeTransactionItem(this.ti, id));
|
99
|
+
}
|
100
|
+
replace(toReplace) {
|
101
|
+
return new TransactionItemWorker(replaceTransactionItem(this.ti, toReplace));
|
105
102
|
}
|
106
|
-
|
107
|
-
|
103
|
+
}
|
104
|
+
|
105
|
+
function extractMetadata(uiDefinition) {
|
106
|
+
return omit(uiDefinition, [
|
107
|
+
'children',
|
108
|
+
'pages',
|
109
|
+
'components',
|
110
|
+
]);
|
111
|
+
}
|
112
|
+
|
113
|
+
const FLOW_CUSTOMIZATION = new InjectionToken('FLOW_CUSTOMIZATION');
|
114
|
+
|
115
|
+
class RuntimeSettingsService {
|
116
|
+
constructor(configurationSettingsApiService) {
|
117
|
+
this.configurationSettingsApiService = configurationSettingsApiService;
|
118
|
+
this.configurationSettings$ = new BehaviorSubject({});
|
119
|
+
this.currencySettings$ = new BehaviorSubject({
|
120
|
+
iso: DEFAULT_CURRENCY_ISO_CODE,
|
121
|
+
symbol: DEFAULT_CURRENCY_SYMBOL,
|
122
|
+
});
|
123
|
+
this.shoppingCartSettings$ = new BehaviorSubject([]);
|
124
|
+
this.getCurrencySymbol = (locale, currency) => {
|
125
|
+
return (0)
|
126
|
+
.toLocaleString(locale, { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0 })
|
127
|
+
.replace(/\d/g, '')
|
128
|
+
.trim();
|
129
|
+
};
|
108
130
|
}
|
109
|
-
|
110
|
-
return this.
|
131
|
+
create() {
|
132
|
+
return this.configurationSettingsApiService.fetchSettings().pipe(map(settings => this.parseConfigurationSettings(settings)), tap(configurationSettings => {
|
133
|
+
var _a;
|
134
|
+
this.configurationSettings$.next(configurationSettings);
|
135
|
+
this.addShoppingCartSettings((_a = configurationSettings['shopping-cart']) !== null && _a !== void 0 ? _a : []);
|
136
|
+
this.formattingSettings = this.getFormattingSettings();
|
137
|
+
}), map(() => undefined));
|
111
138
|
}
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
139
|
+
initCurrency(iso) {
|
140
|
+
if (iso) {
|
141
|
+
const symbol = this.getCurrencySymbol('en-US', iso);
|
142
|
+
this.currencySettings$.next({ iso, symbol });
|
143
|
+
if (this.formattingSettings) {
|
144
|
+
this.formattingSettings.currencySymbol = symbol;
|
145
|
+
}
|
119
146
|
}
|
120
|
-
return false;
|
121
147
|
}
|
122
|
-
|
123
|
-
|
124
|
-
|
148
|
+
getFormattingSettings() {
|
149
|
+
var _a, _b;
|
150
|
+
if (this.formattingSettings) {
|
151
|
+
return this.formattingSettings;
|
125
152
|
}
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
153
|
+
const shoppingCartSettings = (_a = this.getConfigurationSettings()['shopping-cart']) === null || _a === void 0 ? void 0 : _a.reduce((acc, setting) => {
|
154
|
+
return Object.assign(Object.assign({}, acc), { [setting.id]: setting.properties });
|
155
|
+
}, {});
|
156
|
+
const currencySettings = this.getCurrencySettings();
|
157
|
+
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)) ||
|
158
|
+
DEFAULT_DATE_FORMAT;
|
159
|
+
const decimalSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DECIMAL_SEPARATOR;
|
160
|
+
const thousandsSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.THOUSANDS_SEPARATOR;
|
161
|
+
// the number of decimal places can be 0
|
162
|
+
const priceScale = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.PRICE_SCALE;
|
163
|
+
const decimalsCount = priceScale !== null && priceScale !== '' && !isNaN(Number(priceScale)) && Number(priceScale) >= 0
|
164
|
+
? Number(priceScale)
|
165
|
+
: DEFAULT_DECIMALS_COUNT;
|
166
|
+
const actionCodeSettings = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.STATUS_LABEL;
|
167
|
+
return {
|
168
|
+
currencySymbol: currencySettings.symbol,
|
169
|
+
dateFormats: getSupportedDateFormats(dateFormat),
|
170
|
+
decimalsCount,
|
171
|
+
decimalSeparator: decimalSeparator !== undefined && ['.', ','].includes(decimalSeparator)
|
172
|
+
? decimalSeparator
|
173
|
+
: DEFAULT_DECIMAL_SEPARATOR,
|
174
|
+
// thousands separator can be a blank value, so it can also be null
|
175
|
+
thousandsSeparator: thousandsSeparator !== undefined && ['.', ',', '', null].includes(thousandsSeparator)
|
176
|
+
? thousandsSeparator || ''
|
177
|
+
: DEFAULT_THOUSANDS_SEPARATOR,
|
178
|
+
actionCodeLabels: (actionCodeSettings === null || actionCodeSettings === void 0 ? void 0 : actionCodeSettings.length)
|
179
|
+
? actionCodeSettings.reduce((result, setting) => (Object.assign(Object.assign({}, result), { [setting.status_label]: setting.custom_label })), {})
|
180
|
+
: DEFAULT_ACTION_CODE_LABELS,
|
181
|
+
};
|
130
182
|
}
|
131
|
-
|
132
|
-
return this.
|
183
|
+
getConfigurationSettings() {
|
184
|
+
return this.configurationSettings$.value;
|
133
185
|
}
|
134
|
-
|
135
|
-
return this.
|
136
|
-
return this.update({
|
137
|
-
properties: Object.assign(Object.assign({}, context.properties), { RuntimeMode: ConfigurationContextMode.TEST, StartDate: new Date().toISOString().substring(0, 10), standalone: 'true' }),
|
138
|
-
});
|
139
|
-
}));
|
186
|
+
getShoppingCartSettings() {
|
187
|
+
return this.shoppingCartSettings$.value;
|
140
188
|
}
|
141
|
-
|
142
|
-
|
143
|
-
const updatedContext = Object.assign(Object.assign(Object.assign({}, originalContext), partialContext), { properties: Object.assign(Object.assign({}, originalContext.properties), partialContext.properties) });
|
144
|
-
this.context.next(updatedContext);
|
145
|
-
return updatedContext;
|
189
|
+
getCurrencySettings() {
|
190
|
+
return this.currencySettings$.value;
|
146
191
|
}
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
192
|
+
parseConfigurationSettings(settings) {
|
193
|
+
return settings.reduce((acc, setting) => {
|
194
|
+
switch (setting.key) {
|
195
|
+
case 'shopping-cart':
|
196
|
+
acc['shopping-cart'] = parseJsonSafely(setting.value, []);
|
197
|
+
break;
|
198
|
+
case 'navigation':
|
199
|
+
acc.navigation = parseJsonSafely(setting.value, {});
|
200
|
+
break;
|
201
|
+
case 'flows':
|
202
|
+
acc.flows = parseJsonSafely(setting.value, []);
|
203
|
+
break;
|
204
|
+
default:
|
205
|
+
acc[setting.key] = setting.value;
|
206
|
+
}
|
207
|
+
return acc;
|
208
|
+
}, {});
|
152
209
|
}
|
153
|
-
|
154
|
-
|
210
|
+
addShoppingCartSettings(settings) {
|
211
|
+
// uniqBy removes items with the biggest index
|
212
|
+
const newSettings = uniqBy([...settings, ...this.shoppingCartSettings$.value], 'id');
|
213
|
+
this.shoppingCartSettings$.next(newSettings);
|
155
214
|
}
|
156
215
|
}
|
157
|
-
|
158
|
-
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
216
|
+
RuntimeSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, deps: [{ token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
217
|
+
RuntimeSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService });
|
218
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, decorators: [{
|
160
219
|
type: Injectable
|
161
|
-
}], ctorParameters: function () { return [{ type: i1.
|
220
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationSettingsApiService }]; } });
|
162
221
|
|
163
222
|
class FlowInfoService {
|
164
223
|
get flow() {
|
224
|
+
if (!this.flowSubj$.value) {
|
225
|
+
throw new Error(`Flow not initialized yet`);
|
226
|
+
}
|
165
227
|
return this.flowSubj$.value;
|
166
228
|
}
|
167
|
-
|
168
|
-
this.flowSubj$.
|
229
|
+
get isFlowInitialized() {
|
230
|
+
return Boolean(this.flowSubj$.value);
|
169
231
|
}
|
170
|
-
get
|
171
|
-
|
172
|
-
|
232
|
+
get context() {
|
233
|
+
if (!this.contextSubj$.value) {
|
234
|
+
throw new Error('Context is not initialized yet!');
|
235
|
+
}
|
236
|
+
return Object.assign({}, this.contextSubj$.value);
|
237
|
+
}
|
238
|
+
get context$() {
|
239
|
+
return this.contextSubj$.asObservable().pipe(filter(isDefined));
|
240
|
+
}
|
241
|
+
get templates() {
|
242
|
+
return this.templatesSubj$.value;
|
243
|
+
}
|
244
|
+
get isFlowEngineInitialized$() {
|
245
|
+
return this.templates$.pipe(map(v => Boolean(v.FLOW_ENGINE)));
|
173
246
|
}
|
174
247
|
get isStateful() {
|
175
248
|
var _a;
|
176
249
|
return !!((_a = this.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful);
|
177
250
|
}
|
178
|
-
constructor(
|
179
|
-
this.
|
180
|
-
this.
|
251
|
+
constructor(runtimeSettingsService, templatesAdminApiService, customizationService) {
|
252
|
+
this.runtimeSettingsService = runtimeSettingsService;
|
253
|
+
this.templatesAdminApiService = templatesAdminApiService;
|
181
254
|
this.customizationService = customizationService;
|
182
|
-
this.templates = {};
|
183
255
|
this.defaultTemplates = {
|
184
256
|
flowEngine: 'Flow Engine',
|
185
257
|
};
|
186
258
|
this.flowSubj$ = new BehaviorSubject(null);
|
259
|
+
this.templatesSubj$ = new BehaviorSubject({});
|
260
|
+
this.contextSubj$ = new BehaviorSubject(null);
|
187
261
|
this.flow$ = this.flowSubj$.asObservable();
|
262
|
+
this.templates$ = this.templatesSubj$.asObservable();
|
263
|
+
}
|
264
|
+
reset() {
|
265
|
+
this.flowSubj$.next(null);
|
266
|
+
this.templatesSubj$.next({});
|
267
|
+
this.contextSubj$.next(null);
|
188
268
|
}
|
189
269
|
init$(flowId, routeQueryParams) {
|
190
|
-
return this.
|
191
|
-
this.params = Object.assign(Object.assign({}, routeQueryParams), flow.properties.queryParams);
|
192
|
-
this.flowSubj$.next(flow);
|
193
|
-
}), map$1(noop), catchError(e => {
|
194
|
-
this.flowSubj$.next(null);
|
195
|
-
return throwError(() => e);
|
196
|
-
}));
|
270
|
+
return this.initFlow$(flowId, routeQueryParams).pipe(switchMap(() => this.initFlowTemplates$()));
|
197
271
|
}
|
198
|
-
|
199
|
-
this.
|
200
|
-
|
201
|
-
|
272
|
+
updateContext(update) {
|
273
|
+
this.contextSubj$.next(Object.assign(Object.assign({}, this.context), update));
|
274
|
+
}
|
275
|
+
initFlow$(flowId, routeQueryParams) {
|
276
|
+
var _a;
|
277
|
+
const flow = (_a = this.runtimeSettingsService.getConfigurationSettings()['flows']) === null || _a === void 0 ? void 0 : _a.find(({ id }) => flowId === id);
|
278
|
+
if (!flow) {
|
279
|
+
this.flowSubj$.next(null);
|
280
|
+
throw new Error(`Flow with flowId=${flowId} is not defined`);
|
281
|
+
}
|
282
|
+
const headerId = routeQueryParams['headerId'];
|
283
|
+
if (typeof headerId !== 'string') {
|
284
|
+
throw new Error(`Please provide 'headerId'`);
|
285
|
+
}
|
286
|
+
const mode = this.getFlowContextMode(headerId);
|
287
|
+
// Restrict if mode is not defined
|
288
|
+
if (mode == null) {
|
289
|
+
throw new Error('Mode is undefined');
|
290
|
+
}
|
291
|
+
this.contextSubj$.next(Object.assign(Object.assign(Object.assign({}, flow.properties.queryParams), routeQueryParams), { mode }));
|
292
|
+
this.flowSubj$.next(flow);
|
293
|
+
return of(undefined);
|
202
294
|
}
|
203
|
-
initFlowTemplates$(
|
295
|
+
initFlowTemplates$() {
|
204
296
|
var _a, _b, _c;
|
205
297
|
return forkJoin([
|
206
|
-
this.
|
298
|
+
this.templatesAdminApiService.fetchTemplates$(),
|
207
299
|
(_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([]),
|
208
|
-
]).pipe(map
|
209
|
-
|
300
|
+
]).pipe(map(([templates, localTemplates]) => {
|
301
|
+
var _a, _b;
|
302
|
+
const newValue = {};
|
303
|
+
Object.entries(Object.assign(Object.assign({}, this.defaultTemplates), ((_b = (_a = this.flow) === null || _a === void 0 ? void 0 : _a.properties.templates) !== null && _b !== void 0 ? _b : {}))).forEach(([key, name]) => {
|
210
304
|
var _a;
|
211
305
|
const type = this.remapTemplateName(key);
|
212
306
|
if (type) {
|
213
|
-
|
307
|
+
newValue[type] =
|
214
308
|
(_a = localTemplates.find(template => template.name === name && template.type === type)) !== null && _a !== void 0 ? _a : templates.find(template => template.name === name && template.type === type);
|
215
309
|
}
|
216
310
|
});
|
311
|
+
this.templatesSubj$.next(newValue);
|
217
312
|
}));
|
218
313
|
}
|
219
314
|
remapTemplateName(templateType) {
|
@@ -239,13 +334,20 @@ class FlowInfoService {
|
|
239
334
|
}
|
240
335
|
return undefined;
|
241
336
|
}
|
337
|
+
getFlowContextMode(headerId) {
|
338
|
+
const objectName = SalesforceIdUtils.getSfObjectNameById(headerId);
|
339
|
+
if (!objectName) {
|
340
|
+
return;
|
341
|
+
}
|
342
|
+
return objectName.toUpperCase();
|
343
|
+
}
|
242
344
|
}
|
243
|
-
FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token:
|
345
|
+
FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token: RuntimeSettingsService }, { token: i1.UITemplatesAdminApiService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
244
346
|
FlowInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService });
|
245
347
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, decorators: [{
|
246
348
|
type: Injectable
|
247
349
|
}], ctorParameters: function () {
|
248
|
-
return [{ type:
|
350
|
+
return [{ type: RuntimeSettingsService }, { type: i1.UITemplatesAdminApiService }, { type: undefined, decorators: [{
|
249
351
|
type: Optional
|
250
352
|
}, {
|
251
353
|
type: Inject,
|
@@ -253,186 +355,203 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
253
355
|
}] }];
|
254
356
|
} });
|
255
357
|
|
256
|
-
class
|
358
|
+
class TestModeConfigurationService {
|
359
|
+
constructor(flowInfoService, configurationService, configurationRuntimeService, salesTransactionService, runtimeSettingsService) {
|
360
|
+
this.flowInfoService = flowInfoService;
|
361
|
+
this.configurationService = configurationService;
|
362
|
+
this.configurationRuntimeService = configurationRuntimeService;
|
363
|
+
this.salesTransactionService = salesTransactionService;
|
364
|
+
this.runtimeSettingsService = runtimeSettingsService;
|
365
|
+
this.isInitialized = false;
|
366
|
+
}
|
367
|
+
initTestMode$(uiDefinitionContainer, options) {
|
368
|
+
var _a;
|
369
|
+
this.configurationRuntimeService.uiDefinitionContainer = uiDefinitionContainer;
|
370
|
+
if (this.checkInitialized(uiDefinitionContainer)) {
|
371
|
+
this.configurationRuntimeService.pcmModel = this.pcmModel;
|
372
|
+
return of(undefined);
|
373
|
+
}
|
374
|
+
this.configurationService.reset();
|
375
|
+
const { productId, quoteId, flowId } = (_a = uiDefinitionContainer.source.properties) !== null && _a !== void 0 ? _a : {};
|
376
|
+
if (!productId) {
|
377
|
+
return throwError(() => 'Unable to start the Configuration Preview: Product is missing.');
|
378
|
+
}
|
379
|
+
if (!quoteId) {
|
380
|
+
return throwError(() => `Unable to start the Configuration Preview: Quote is missing.`);
|
381
|
+
}
|
382
|
+
if (!flowId) {
|
383
|
+
return throwError(() => `Unable to start the Configuration Preview: Flow is missing.`);
|
384
|
+
}
|
385
|
+
return this.runtimeSettingsService.create().pipe(switchMap(() => this.flowInfoService.init$(flowId, { productId, headerId: quoteId })), switchMap(() => this.configurationRuntimeService.init$({ productId })), tap(pcmModel => (this.pcmModel = pcmModel)), switchMap(() => {
|
386
|
+
if (options === null || options === void 0 ? void 0 : options.customizationMode) {
|
387
|
+
return of(undefined);
|
388
|
+
}
|
389
|
+
return this.initConfiguration$(quoteId);
|
390
|
+
}), tap(() => (this.isInitialized = true)), map(noop));
|
391
|
+
}
|
392
|
+
initConfiguration$(quoteId) {
|
393
|
+
this.salesTransactionService.setState(this.getTestTransactionContext(quoteId));
|
394
|
+
return this.configurationService.init$().pipe(switchMap(() => this.configurationService.state
|
395
|
+
? this.configurationService.configureRequest$(this.configurationService.state)
|
396
|
+
: of(undefined)), map(noop));
|
397
|
+
}
|
398
|
+
getTestTransactionContext(quoteId) {
|
399
|
+
const testTransaction = {
|
400
|
+
id: quoteId,
|
401
|
+
businessObjectType: 'Quote',
|
402
|
+
salesTransactionItems: [],
|
403
|
+
};
|
404
|
+
return {
|
405
|
+
salesTransaction: testTransaction,
|
406
|
+
transactionId: quoteId,
|
407
|
+
businessObjectType: 'Quote',
|
408
|
+
childNodes: {},
|
409
|
+
id: UUID.UUID(),
|
410
|
+
tagAttributes: {},
|
411
|
+
};
|
412
|
+
}
|
413
|
+
checkInitialized(uiDefinitionContainer) {
|
414
|
+
var _a;
|
415
|
+
return this.isInitialized && !!((_a = uiDefinitionContainer.source.properties) === null || _a === void 0 ? void 0 : _a.persistTestState);
|
416
|
+
}
|
417
|
+
}
|
418
|
+
TestModeConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TestModeConfigurationService, deps: [{ token: FlowInfoService }, { token: ConfigurationService }, { token: ConfigurationRuntimeService }, { token: SalesTransactionService }, { token: RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
419
|
+
TestModeConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TestModeConfigurationService });
|
420
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TestModeConfigurationService, decorators: [{
|
421
|
+
type: Injectable
|
422
|
+
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type: ConfigurationService }, { type: ConfigurationRuntimeService }, { type: SalesTransactionService }, { type: RuntimeSettingsService }]; } });
|
423
|
+
|
424
|
+
class SalesTransactionService {
|
257
425
|
get isInitialized$() {
|
258
426
|
return this.isInitializedSubj$.asObservable();
|
259
427
|
}
|
260
428
|
get isInitialized() {
|
261
429
|
return this.isInitializedSubj$.getValue();
|
262
430
|
}
|
263
|
-
set isInitialized(value) {
|
264
|
-
if (this.isInitialized !== value) {
|
265
|
-
this.isInitializedSubj$.next(value);
|
266
|
-
}
|
267
|
-
}
|
268
|
-
get hasUnsavedChanges() {
|
269
|
-
return this._hasUnsavedChanges;
|
270
|
-
}
|
271
431
|
set hasUnsavedChanges(value) {
|
272
432
|
var _a, _b;
|
273
|
-
this.
|
274
|
-
if (!this.
|
275
|
-
this.
|
433
|
+
this.hasUnsavedChangesSubj$.next(value);
|
434
|
+
if (!this.hasUnsavedChanges) {
|
435
|
+
this.initialState = (_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.salesTransaction.salesTransactionItems) !== null && _b !== void 0 ? _b : [];
|
276
436
|
}
|
277
437
|
}
|
278
|
-
get
|
279
|
-
return this.
|
280
|
-
}
|
281
|
-
get hasProducts() {
|
282
|
-
var _a;
|
283
|
-
return Boolean((_a = this.quoteSubj$.value) === null || _a === void 0 ? void 0 : _a.currentState.length);
|
438
|
+
get hasUnsavedChanges() {
|
439
|
+
return this.hasUnsavedChangesSubj$.getValue();
|
284
440
|
}
|
285
|
-
get
|
286
|
-
return this.
|
441
|
+
get state() {
|
442
|
+
return this.stateSubj$.getValue();
|
287
443
|
}
|
288
|
-
get
|
444
|
+
get hasProducts() {
|
289
445
|
var _a;
|
290
|
-
return Boolean((_a = this.
|
446
|
+
return Boolean((_a = this.state) === null || _a === void 0 ? void 0 : _a.salesTransaction.salesTransactionItems.length);
|
291
447
|
}
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
constructor(context, flowInfoService, accountApiService, quoteApiService) {
|
296
|
-
this.context = context;
|
297
|
-
this.flowInfoService = flowInfoService;
|
298
|
-
this.accountApiService = accountApiService;
|
299
|
-
this.quoteApiService = quoteApiService;
|
300
|
-
this.quoteSubj$ = new BehaviorSubject(null);
|
301
|
-
this.assetsSubj$ = new BehaviorSubject(null);
|
302
|
-
this.resetSubj$ = new BehaviorSubject(true);
|
448
|
+
constructor(salesTransactionApiService) {
|
449
|
+
this.salesTransactionApiService = salesTransactionApiService;
|
450
|
+
this.stateSubj$ = new BehaviorSubject(null);
|
303
451
|
this.isInitializedSubj$ = new BehaviorSubject(false);
|
304
|
-
this.
|
305
|
-
this.
|
306
|
-
this.
|
307
|
-
this.
|
308
|
-
.pipe(filter(isInitialized => isInitialized), switchMap$1(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
|
309
|
-
.subscribe();
|
310
|
-
}
|
311
|
-
reset() {
|
312
|
-
this.resetSubj$.next(true);
|
313
|
-
this.quoteSubj$.next(null);
|
314
|
-
this.assetsSubj$.next(null);
|
315
|
-
this.isInitialized = false;
|
316
|
-
this.hasUnsavedChanges = false;
|
452
|
+
this.hasUnsavedChangesSubj$ = new BehaviorSubject(false);
|
453
|
+
this.initialState = [];
|
454
|
+
this.hasUnsavedChanges$ = this.hasUnsavedChangesSubj$.asObservable();
|
455
|
+
this.state$ = this.stateSubj$.asObservable().pipe(filter(isDefined));
|
317
456
|
}
|
318
457
|
init(headerId, params) {
|
319
|
-
|
320
|
-
const isAccountMode = this.context.mode === ConfigurationContextMode.ACCOUNT;
|
321
|
-
const accountId = isAccountMode ? headerId : ctx.properties.AccountId;
|
322
|
-
return zip(accountId ? this.accountApiService.getAssetsState(accountId, params) : of(null), isAccountMode
|
323
|
-
? of(QuoteDraft.emptyQuote(ConfigurationContextMode.ACCOUNT))
|
324
|
-
: this.quoteApiService.getQuoteState(headerId, params)).pipe(tap(([assets, quote]) => {
|
325
|
-
if (assets) {
|
326
|
-
this.assetsSubj$.next(assets);
|
327
|
-
}
|
328
|
-
this.quoteSubj$.next(quote);
|
329
|
-
if (assets && isAccountMode) {
|
330
|
-
this.context.update(assets.context);
|
331
|
-
}
|
332
|
-
else {
|
333
|
-
this.context.update(quote.context);
|
334
|
-
}
|
335
|
-
}), map(() => noop()), take(1));
|
458
|
+
return this.salesTransactionApiService.getState(headerId, params).pipe(tap(res => this.stateSubj$.next(res)));
|
336
459
|
}
|
337
460
|
finalizeInit() {
|
338
|
-
this.
|
461
|
+
this.isInitializedSubj$.next(true);
|
339
462
|
this.hasUnsavedChanges = false;
|
340
463
|
}
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
}
|
346
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: lineItems }));
|
464
|
+
reset() {
|
465
|
+
this.stateSubj$.next(null);
|
466
|
+
this.isInitializedSubj$.next(false);
|
467
|
+
this.hasUnsavedChangesSubj$.next(false);
|
347
468
|
}
|
348
|
-
|
349
|
-
|
350
|
-
if (!quoteDraft) {
|
351
|
-
return;
|
352
|
-
}
|
353
|
-
if (update.context) {
|
354
|
-
this.context.set(update.context);
|
355
|
-
}
|
356
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), update));
|
469
|
+
getInitialState() {
|
470
|
+
return this.initialState;
|
357
471
|
}
|
358
|
-
|
359
|
-
|
360
|
-
if (!quoteDraft) {
|
361
|
-
return;
|
362
|
-
}
|
363
|
-
const updatedCurrentState = this.currentState.map(lineItem => {
|
364
|
-
const updated = priceSummary.lineItems.find(li => li.id === lineItem.id);
|
365
|
-
return updated !== null && updated !== void 0 ? updated : lineItem;
|
366
|
-
});
|
367
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedCurrentState, totalPrices: priceSummary.totalPrices, approvalItems: priceSummary.approvalItems }));
|
472
|
+
setState(state) {
|
473
|
+
this.stateSubj$.next(state);
|
368
474
|
}
|
369
|
-
|
370
|
-
|
475
|
+
}
|
476
|
+
SalesTransactionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService, deps: [{ token: i1.SalesTransactionApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
477
|
+
SalesTransactionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService });
|
478
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService, decorators: [{
|
479
|
+
type: Injectable
|
480
|
+
}], ctorParameters: function () { return [{ type: i1.SalesTransactionApiService }]; } });
|
481
|
+
|
482
|
+
class FlowConfigurationService {
|
483
|
+
constructor(orchestrationsApiService, salesTransactionService, flowInfoService) {
|
484
|
+
this.orchestrationsApiService = orchestrationsApiService;
|
485
|
+
this.salesTransactionService = salesTransactionService;
|
486
|
+
this.flowInfoService = flowInfoService;
|
487
|
+
this.updatedSubj$ = new Subject();
|
488
|
+
this.updated$ = this.updatedSubj$.asObservable();
|
489
|
+
}
|
490
|
+
calculate$(state) {
|
491
|
+
return this.orchestrationsApiService
|
492
|
+
.apply$({ transactionContext: state, flowId: this.flowInfoService.flow.id })
|
493
|
+
.pipe(tap(result => this.salesTransactionService.setState(result)), map(noop));
|
371
494
|
}
|
372
|
-
|
373
|
-
|
495
|
+
calculate(state) {
|
496
|
+
this.calculate$(state).subscribe();
|
374
497
|
}
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
498
|
+
revert$(transactionItemId) {
|
499
|
+
var _a;
|
500
|
+
const state = this.salesTransactionService.state;
|
501
|
+
const initialState = this.salesTransactionService.getInitialState();
|
502
|
+
const currentState = (_a = state === null || state === void 0 ? void 0 : state.salesTransaction.salesTransactionItems) !== null && _a !== void 0 ? _a : [];
|
503
|
+
const currentItemIndex = currentState.findIndex(({ id }) => id === transactionItemId);
|
504
|
+
const currentItem = currentState[currentItemIndex];
|
505
|
+
const initialItem = initialState.find(({ integrationId }) => integrationId === (currentItem === null || currentItem === void 0 ? void 0 : currentItem.integrationId));
|
506
|
+
if (!state || !currentItem || !initialItem) {
|
507
|
+
return of(null);
|
379
508
|
}
|
380
|
-
|
509
|
+
const updatedState = cloneDeep(currentState);
|
510
|
+
updatedState.splice(currentItemIndex, 1, initialItem);
|
511
|
+
return of([]).pipe(map(() => (Object.assign(Object.assign({}, state), { salesTransaction: Object.assign(Object.assign({}, state.salesTransaction), { salesTransactionItems: updatedState }) }))), tap(newState => this.salesTransactionService.setState(newState)), switchMap(newState => this.calculate$(newState)), map(() => this.salesTransactionService.state), tap(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
381
512
|
}
|
382
|
-
|
383
|
-
|
513
|
+
revert(transactionItemId) {
|
514
|
+
this.revert$(transactionItemId).subscribe();
|
384
515
|
}
|
385
|
-
|
386
|
-
|
387
|
-
|
516
|
+
delete$(ids) {
|
517
|
+
const state = this.salesTransactionService.state;
|
518
|
+
if (!state) {
|
519
|
+
return of(null);
|
520
|
+
}
|
521
|
+
return of([]).pipe(map(() => state.salesTransaction.salesTransactionItems.filter(({ id }) => !ids.includes(id))), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, state), { salesTransaction: Object.assign(Object.assign({}, state.salesTransaction), { salesTransactionItems: updatedState }) }))), map(() => this.salesTransactionService.state), tap(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
388
522
|
}
|
389
|
-
|
390
|
-
|
391
|
-
return (_b = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.standalone) !== null && _b !== void 0 ? _b : false;
|
392
|
-
}
|
393
|
-
get isStandalone$() {
|
394
|
-
return this.flowInfoService.flow$.pipe(map(() => this.isStandalone));
|
395
|
-
}
|
396
|
-
getInitialCurrentState() {
|
397
|
-
return this.initialCurrentState;
|
398
|
-
}
|
399
|
-
isEditMode$() {
|
400
|
-
return this.context.resolve$().pipe(map(() => this.isEditMode()));
|
401
|
-
}
|
402
|
-
isEditMode() {
|
403
|
-
const context = this.context.resolve();
|
404
|
-
if (context.mode === ConfigurationContextMode.ACCOUNT) {
|
405
|
-
return true;
|
406
|
-
}
|
407
|
-
if (context.mode === ConfigurationContextMode.QUOTE) {
|
408
|
-
return context.properties.Status === 'Draft';
|
409
|
-
}
|
410
|
-
return false;
|
523
|
+
delete(ids) {
|
524
|
+
this.delete$(ids).subscribe();
|
411
525
|
}
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
526
|
+
handleErrorAndBounceBack() {
|
527
|
+
return (source$) => {
|
528
|
+
return source$.pipe(catchError(error => {
|
529
|
+
console.error(error);
|
530
|
+
// bounce back if configuration call has failed
|
531
|
+
const state = this.salesTransactionService.state;
|
532
|
+
if (state) {
|
533
|
+
this.salesTransactionService.setState(state);
|
534
|
+
this.updatedSubj$.next();
|
535
|
+
}
|
536
|
+
return throwError(() => error);
|
537
|
+
}));
|
538
|
+
};
|
419
539
|
}
|
420
540
|
}
|
421
|
-
|
422
|
-
|
423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
541
|
+
FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i1.OrchestrationsApiService }, { token: SalesTransactionService }, { token: FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
542
|
+
FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService });
|
543
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, decorators: [{
|
424
544
|
type: Injectable
|
425
|
-
}], ctorParameters: function () { return [{ type:
|
545
|
+
}], ctorParameters: function () { return [{ type: i1.OrchestrationsApiService }, { type: SalesTransactionService }, { type: FlowInfoService }]; } });
|
426
546
|
|
427
547
|
class FlowStateService {
|
428
|
-
constructor(
|
429
|
-
this.contextService = contextService;
|
430
|
-
this.quoteDraftService = quoteDraftService;
|
431
|
-
this.flowInfoService = flowInfoService;
|
548
|
+
constructor(flowConfiguration, flowInfoService, flowStateApiService, processorsApiService, salesTransactionApiService, salesTransactionService, toastService, customizationService) {
|
432
549
|
this.flowConfiguration = flowConfiguration;
|
433
|
-
this.
|
550
|
+
this.flowInfoService = flowInfoService;
|
434
551
|
this.flowStateApiService = flowStateApiService;
|
435
|
-
this.
|
552
|
+
this.processorsApiService = processorsApiService;
|
553
|
+
this.salesTransactionApiService = salesTransactionApiService;
|
554
|
+
this.salesTransactionService = salesTransactionService;
|
436
555
|
this.toastService = toastService;
|
437
556
|
this.customizationService = customizationService;
|
438
557
|
this.NOT_INITIALIZED = Symbol();
|
@@ -449,68 +568,22 @@ class FlowStateService {
|
|
449
568
|
this.cleanup$ = new Subject();
|
450
569
|
this.statefulExecutionRequest$ = this.initBufferedRequest$();
|
451
570
|
/*
|
452
|
-
In stateless mode watch
|
453
|
-
all subscriptions get their updates according to updated
|
571
|
+
In stateless mode watch State changes and call executeRequest so that
|
572
|
+
all subscriptions get their updates according to updated State
|
454
573
|
*/
|
455
574
|
this.isInitialized$()
|
456
|
-
.pipe(filter
|
575
|
+
.pipe(filter(Boolean), filter(() => !this.flowInfoService.flow.properties.stateful), switchMap(() => this.flowConfiguration.updated$), switchMap(() => this.executeRequest$({}, true)))
|
457
576
|
.subscribe();
|
458
|
-
this.charges$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(() => {
|
459
|
-
if (this.flowInfoService.isLegacy) {
|
460
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.charges));
|
461
|
-
}
|
462
|
-
else {
|
463
|
-
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'CHARGES', null, {
|
464
|
-
cold: true,
|
465
|
-
}).pipe(map$1(response => (response.success ? response.result : {})));
|
466
|
-
}
|
467
|
-
}), shareReplay$1(1));
|
468
|
-
this.charges$.subscribe();
|
469
|
-
this.pricePlans$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(() => {
|
470
|
-
if (this.flowInfoService.isLegacy) {
|
471
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.pricePlans));
|
472
|
-
}
|
473
|
-
else {
|
474
|
-
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'PRICE_PLANS', null, {
|
475
|
-
cold: true,
|
476
|
-
}).pipe(map$1(response => (response.success ? response.result : {})));
|
477
|
-
}
|
478
|
-
}), shareReplay$1(1));
|
479
|
-
this.pricePlans$.subscribe();
|
480
|
-
this.activeMetrics$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(() => {
|
481
|
-
if (this.flowInfoService.isLegacy) {
|
482
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.activeMetrics));
|
483
|
-
}
|
484
|
-
else {
|
485
|
-
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'ACTIVE_METRICS', null, {
|
486
|
-
cold: true,
|
487
|
-
}).pipe(map$1(response => (response.success ? response.result : [])));
|
488
|
-
}
|
489
|
-
}), shareReplay$1(1));
|
490
|
-
this.activeMetrics$.subscribe();
|
491
|
-
this.isPriceListLocked$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(() => {
|
492
|
-
if (this.flowInfoService.isLegacy) {
|
493
|
-
return of(false);
|
494
|
-
}
|
495
|
-
else {
|
496
|
-
return this.subscribe$(UITemplateType.FLOW_ENGINE, 'IS_PRICE_LIST_LOCKED', null, {
|
497
|
-
cold: true,
|
498
|
-
}).pipe(map$1(response => (response.success ? response.result : false)));
|
499
|
-
}
|
500
|
-
}), shareReplay$1(1));
|
501
|
-
this.isPriceListLocked$.subscribe();
|
502
577
|
}
|
503
578
|
init$() {
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
}
|
511
|
-
}));
|
579
|
+
if (this.flowInfoService.flow.properties.stateful) {
|
580
|
+
return this.initProcessors$().pipe(switchMap(() => this.initStateful$()));
|
581
|
+
}
|
582
|
+
else {
|
583
|
+
return forkJoin([this.initStateless$(), this.initProcessors$()]).pipe(map(noop));
|
584
|
+
}
|
512
585
|
}
|
513
|
-
|
586
|
+
reset() {
|
514
587
|
Object.values(this.subscriptions).forEach(({ data$ }) => data$.complete());
|
515
588
|
this.subscriptions = {};
|
516
589
|
if (this.stateId$.value) {
|
@@ -522,9 +595,9 @@ class FlowStateService {
|
|
522
595
|
this.cleanup$.next();
|
523
596
|
}
|
524
597
|
get hasUnsavedChanges() {
|
525
|
-
return this.
|
598
|
+
return this.flowInfoService.flow.properties.stateful
|
526
599
|
? Array.from(this.trackedStatefulChangesMap.values()).some(Boolean)
|
527
|
-
: this.
|
600
|
+
: this.salesTransactionService.hasUnsavedChanges;
|
528
601
|
}
|
529
602
|
get stateId() {
|
530
603
|
return this.stateId$.value;
|
@@ -533,14 +606,14 @@ class FlowStateService {
|
|
533
606
|
return this.executionInProgress$.asObservable();
|
534
607
|
}
|
535
608
|
isInitialized$() {
|
536
|
-
return combineLatest([this.stateId$, this.
|
609
|
+
return combineLatest([this.stateId$, this.salesTransactionService.isInitialized$]).pipe(map(values => values.some(Boolean)));
|
537
610
|
}
|
538
611
|
isInitialized() {
|
539
|
-
return Boolean(this.stateId$.value) || this.
|
612
|
+
return Boolean(this.stateId$.value) || this.salesTransactionService.isInitialized;
|
540
613
|
}
|
541
614
|
execute$(scope, exec) {
|
542
615
|
const request = this.execToRequest(scope, exec);
|
543
|
-
return this.executeRequest$(request).pipe(map
|
616
|
+
return this.executeRequest$(request).pipe(map(result => {
|
544
617
|
// Keep only requested results
|
545
618
|
const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
|
546
619
|
var _a;
|
@@ -557,7 +630,7 @@ class FlowStateService {
|
|
557
630
|
actions: [{ name: action, inputData }],
|
558
631
|
};
|
559
632
|
const request = this.execToRequest(scope, exec);
|
560
|
-
return this.executeRequest$(request).pipe(map
|
633
|
+
return this.executeRequest$(request).pipe(map(noop));
|
561
634
|
}
|
562
635
|
select$(scope, selectorName, inputData) {
|
563
636
|
const requestId = this.generateRequestId(scope, selectorName, inputData);
|
@@ -569,7 +642,7 @@ class FlowStateService {
|
|
569
642
|
},
|
570
643
|
},
|
571
644
|
});
|
572
|
-
return this.executeRequest$(request).pipe(map
|
645
|
+
return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
|
573
646
|
}
|
574
647
|
subscribe$(scope, selectorName, inputData, options) {
|
575
648
|
const requestId = this.generateRequestId(scope, selectorName, inputData);
|
@@ -595,7 +668,7 @@ class FlowStateService {
|
|
595
668
|
this.executeRequest$(request).subscribe();
|
596
669
|
}
|
597
670
|
}
|
598
|
-
return subscription.data$.pipe(filter
|
671
|
+
return subscription.data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), finalize(() => {
|
599
672
|
var _a;
|
600
673
|
if (!((_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$.observed)) {
|
601
674
|
delete this.subscriptions[requestId];
|
@@ -603,9 +676,9 @@ class FlowStateService {
|
|
603
676
|
}));
|
604
677
|
}
|
605
678
|
save$() {
|
606
|
-
if (this.
|
679
|
+
if (this.flowInfoService.flow.properties.stateful) {
|
607
680
|
if (this.stateId$.value) {
|
608
|
-
return this.flowStateApiService.save(this.stateId$.value).pipe(tap
|
681
|
+
return this.flowStateApiService.save(this.stateId$.value).pipe(map(({ quoteId }) => ({ id: quoteId })), tap(() => {
|
609
682
|
Array.from(this.trackedStatefulChangesMap.keys()).forEach(key => {
|
610
683
|
this.trackedStatefulChangesMap.set(key, false);
|
611
684
|
});
|
@@ -613,30 +686,26 @@ class FlowStateService {
|
|
613
686
|
}
|
614
687
|
}
|
615
688
|
else {
|
616
|
-
const
|
617
|
-
if (
|
618
|
-
return this.
|
619
|
-
this.contextService.update({ properties: { VELOCE_PRISM__VersionId__c: versionId } });
|
620
|
-
}));
|
689
|
+
const state = this.salesTransactionService.state;
|
690
|
+
if (state) {
|
691
|
+
return this.salesTransactionApiService.upsert(state);
|
621
692
|
}
|
622
693
|
}
|
623
|
-
return of({
|
694
|
+
return of({ id: '' });
|
624
695
|
}
|
625
696
|
submit$() {
|
626
|
-
if (this.
|
697
|
+
if (this.flowInfoService.flow.properties.stateful) {
|
627
698
|
if (this.stateId$.value) {
|
628
|
-
return this.flowStateApiService.submit(this.stateId$.value);
|
699
|
+
return this.flowStateApiService.submit(this.stateId$.value).pipe(map(({ quoteId }) => ({ id: quoteId })));
|
629
700
|
}
|
630
701
|
}
|
631
702
|
else {
|
632
|
-
const
|
633
|
-
if (
|
634
|
-
return this.
|
635
|
-
this.contextService.update({ properties: { VELOCE_PRISM__VersionId__c: versionId } });
|
636
|
-
}));
|
703
|
+
const state = this.salesTransactionService.state;
|
704
|
+
if (state) {
|
705
|
+
return this.salesTransactionApiService.submit(state);
|
637
706
|
}
|
638
707
|
}
|
639
|
-
return of({
|
708
|
+
return of({ id: '' });
|
640
709
|
}
|
641
710
|
getFlowStore() {
|
642
711
|
return this.flowStore;
|
@@ -677,10 +746,10 @@ class FlowStateService {
|
|
677
746
|
fullRequest.selectors = assign(fullRequest.selectors, subscription.request.selectors);
|
678
747
|
}
|
679
748
|
}
|
680
|
-
const execution$ = this.
|
749
|
+
const execution$ = this.flowInfoService.flow.properties.stateful
|
681
750
|
? this.executeStateful$(fullRequest)
|
682
751
|
: this.executeStateless$(fullRequest);
|
683
|
-
return execution$.pipe(tap
|
752
|
+
return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
|
684
753
|
}
|
685
754
|
handleSelectorsResponse(selectors) {
|
686
755
|
Object.entries(selectors).forEach(([requestId, selectorResult]) => {
|
@@ -696,32 +765,21 @@ class FlowStateService {
|
|
696
765
|
});
|
697
766
|
}
|
698
767
|
initStateful$() {
|
699
|
-
var _a;
|
700
|
-
// Subscriptions
|
701
|
-
this.subscribe$(UITemplateType.FLOW_ENGINE, 'CONTEXT', null, { cold: true })
|
702
|
-
.pipe(tap$1(response => {
|
703
|
-
if (response.success) {
|
704
|
-
this.contextService.update(response.result);
|
705
|
-
}
|
706
|
-
}), takeUntil(this.cleanup$))
|
707
|
-
.subscribe();
|
708
768
|
const processorsList = flatten(Object.values(this.processors).map(ownerMap => Object.values(ownerMap !== null && ownerMap !== void 0 ? ownerMap : {})));
|
709
769
|
const processors = processorsList.length ? processorsList : undefined;
|
710
770
|
const selectors = Object.values(this.subscriptions)
|
711
771
|
.map(({ request }) => request.selectors)
|
712
772
|
.filter(isDefined)
|
713
773
|
.reduce((trunk, selectors) => (Object.assign(Object.assign({}, trunk), selectors)), {});
|
714
|
-
const request = this.getDefaultExecutionRequestDTO();
|
715
774
|
return this.flowStateApiService
|
716
775
|
.init({
|
717
|
-
quoteId: this.
|
718
|
-
params:
|
776
|
+
quoteId: this.flowInfoService.context.headerId,
|
777
|
+
params: this.flowInfoService.context,
|
719
778
|
actionsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.ACTION),
|
720
779
|
selectorsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
|
721
|
-
selectors:
|
722
|
-
actions: request.actions,
|
780
|
+
selectors: selectors,
|
723
781
|
})
|
724
|
-
.pipe(map
|
782
|
+
.pipe(map(({ stateId, selectors }) => {
|
725
783
|
this.handleSelectorsResponse(selectors);
|
726
784
|
this.stateId$.next(stateId);
|
727
785
|
}));
|
@@ -741,80 +799,50 @@ class FlowStateService {
|
|
741
799
|
};
|
742
800
|
this.executionInProgress$.next(true);
|
743
801
|
return this.flowStateApiService.execute(this.stateId$.value, request);
|
744
|
-
}), tap
|
802
|
+
}), tap(({ stateId }) => this.stateId$.next(stateId)), share(), tap(() => this.executionInProgress$.next(false)), catchError(e => {
|
745
803
|
this.executionInProgress$.next(false);
|
746
804
|
return throwError(() => e);
|
747
805
|
}));
|
748
806
|
}
|
749
807
|
executeStateful$(request) {
|
750
|
-
return this.executionInProgress$.pipe(filter
|
808
|
+
return this.executionInProgress$.pipe(filter(inProgress => !inProgress), take(1), switchMap(() =>
|
751
809
|
// make sure stream switches to statefulExecutionRequest$ before pushing an execution request
|
752
810
|
combineLatest([
|
753
811
|
this.statefulExecutionRequest$,
|
754
|
-
of(undefined).pipe(tap
|
755
|
-
])), map
|
812
|
+
of(undefined).pipe(tap(() => this.statefulRequestStream$.next(request))),
|
813
|
+
])), map(([response]) => response), take(1));
|
756
814
|
}
|
757
815
|
initStateless$() {
|
758
|
-
|
759
|
-
const { headerId } = this.contextService.resolve();
|
760
|
-
return this.quoteDraftService.init(headerId, (_a = this.flowInfoService.params) !== null && _a !== void 0 ? _a : {}).pipe(tap$1(() => {
|
761
|
-
const assets = this.quoteDraftService.assetsState;
|
762
|
-
if (assets) {
|
763
|
-
this.flowStore = Object.assign(Object.assign({}, this.flowStore), { assets });
|
764
|
-
}
|
765
|
-
}), switchMap(() => {
|
766
|
-
if (this.flowInfoService.isLegacy) {
|
767
|
-
return of(null);
|
768
|
-
}
|
769
|
-
return this.executeRequest$(this.getDefaultExecutionRequestDTO());
|
770
|
-
}), switchMap(() => this.calculate$()), tap$1(() => this.quoteDraftService.finalizeInit()), map$1(noop));
|
771
|
-
}
|
772
|
-
calculate$() {
|
773
|
-
var _a;
|
774
|
-
const flowState = this.quoteDraftService.quoteDraft;
|
775
|
-
if (!flowState) {
|
776
|
-
return of(undefined);
|
777
|
-
}
|
778
|
-
/*
|
779
|
-
Don't execute procedures when:
|
780
|
-
* Initializing a standalone product configuration UI, as procedure is execute in /price call
|
781
|
-
* Initializing an empty account (account with no assets)
|
782
|
-
*/
|
783
|
-
const isEmptyAccountMode = this.contextService.mode === ConfigurationContextMode.ACCOUNT &&
|
784
|
-
!this.quoteDraftService.hasProducts &&
|
785
|
-
!this.quoteDraftService.hasAssets &&
|
786
|
-
!((_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.initialState.length);
|
787
|
-
if (this.quoteDraftService.isStandalone || isEmptyAccountMode) {
|
788
|
-
return of(undefined);
|
789
|
-
}
|
790
|
-
return this.flowConfiguration.calculate$(flowState);
|
816
|
+
return this.salesTransactionService.init(this.flowInfoService.context.headerId, this.flowInfoService.context).pipe(switchMap(state => this.flowConfiguration.calculate$(state)), tap(() => this.salesTransactionService.finalizeInit()), map(noop));
|
791
817
|
}
|
792
818
|
executeStateless$(request) {
|
793
819
|
this.executionInProgress$.next(true);
|
794
|
-
return of(undefined).pipe(tap
|
820
|
+
return of(undefined).pipe(tap(() => this.executeStatelessActions(request)), switchMap(() => {
|
795
821
|
var _a;
|
796
822
|
/*
|
797
823
|
Skip price calculation in case
|
798
824
|
1. No actions in the request
|
799
825
|
2. Initialization process execution (state not initialized yet)
|
800
826
|
*/
|
801
|
-
|
827
|
+
const { state } = this.salesTransactionService;
|
828
|
+
if (!state || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length) || !this.isInitialized()) {
|
802
829
|
return of(undefined);
|
803
830
|
}
|
804
831
|
else {
|
805
|
-
return this.calculate$();
|
832
|
+
return this.flowConfiguration.calculate$(state);
|
806
833
|
}
|
807
|
-
}), map
|
834
|
+
}), map(() => this.executeStatelessSelectors(request)), tap(() => this.executionInProgress$.next(false)), catchError(e => {
|
808
835
|
this.executionInProgress$.next(false);
|
809
836
|
return throwError(() => e);
|
810
837
|
}));
|
811
838
|
}
|
812
839
|
executeStatelessActions(request) {
|
813
840
|
var _a;
|
814
|
-
|
841
|
+
const state = this.salesTransactionService.state;
|
842
|
+
if (!state || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
|
815
843
|
return;
|
816
844
|
}
|
817
|
-
let flowState =
|
845
|
+
let flowState = state;
|
818
846
|
request.actions.forEach(action => {
|
819
847
|
var _a;
|
820
848
|
try {
|
@@ -826,1022 +854,126 @@ class FlowStateService {
|
|
826
854
|
throw e;
|
827
855
|
}
|
828
856
|
});
|
829
|
-
this.
|
857
|
+
this.salesTransactionService.setState(flowState);
|
830
858
|
}
|
831
859
|
executeStatelessSelectors(request) {
|
832
860
|
var _a;
|
833
|
-
if (!this.
|
834
|
-
throw '
|
861
|
+
if (!this.salesTransactionService.state) {
|
862
|
+
throw 'State is not initialized';
|
835
863
|
}
|
836
|
-
const flowState = this.
|
864
|
+
const flowState = this.salesTransactionService.state;
|
837
865
|
return EntityUtil.entries((_a = request.selectors) !== null && _a !== void 0 ? _a : {}).reduce((result, [key, selector]) => {
|
838
|
-
try {
|
839
|
-
result.selectors[key] = {
|
840
|
-
success: true,
|
841
|
-
result: this.executeSelectorScript(flowState, selector),
|
842
|
-
};
|
843
|
-
}
|
844
|
-
catch (e) {
|
845
|
-
console.error(e);
|
846
|
-
result.selectors[key] = {
|
847
|
-
success: false,
|
848
|
-
errorMessage: String(e),
|
849
|
-
};
|
850
|
-
}
|
851
|
-
return result;
|
852
|
-
}, { stateId: '', selectors: {} });
|
853
|
-
}
|
854
|
-
getFlowSafe() {
|
855
|
-
if (!this.flowInfoService.flow) {
|
856
|
-
throw 'Flow is not defined';
|
857
|
-
}
|
858
|
-
return this.flowInfoService.flow;
|
859
|
-
}
|
860
|
-
initProcessors$() {
|
861
|
-
var _a;
|
862
|
-
const hasOverrides = Boolean((_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors);
|
863
|
-
const flow = this.getFlowSafe();
|
864
|
-
if (flow.properties.stateful && !hasOverrides) {
|
865
|
-
// Skip initialization as backend will take processors from SF
|
866
|
-
return of(undefined);
|
867
|
-
}
|
868
|
-
const owners$ = Object.values(this.flowInfoService.templates)
|
869
|
-
.map(template => {
|
870
|
-
var _a, _b, _c;
|
871
|
-
if (!template) {
|
872
|
-
return;
|
873
|
-
}
|
874
|
-
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);
|
875
|
-
return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap$1(processors => {
|
876
|
-
const processorsMap = processors.reduce((acc, p) => {
|
877
|
-
acc[p.apiName] = p;
|
878
|
-
return acc;
|
879
|
-
}, {});
|
880
|
-
this.processors[template.id] = processorsMap;
|
881
|
-
}));
|
882
|
-
})
|
883
|
-
.filter(isDefined);
|
884
|
-
if (!owners$.length) {
|
885
|
-
return of(undefined);
|
886
|
-
}
|
887
|
-
return forkJoin(owners$).pipe(map$1(noop));
|
888
|
-
}
|
889
|
-
executeActionScript(request, executable) {
|
890
|
-
var _a;
|
891
|
-
const configurationProcessor = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName];
|
892
|
-
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
893
|
-
const scope = this.getScopeByOwnerId(executable.ownerId);
|
894
|
-
const scopeText = scope ? ` in ${scope}` : '';
|
895
|
-
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
896
|
-
}
|
897
|
-
return this.executeProcessorScript(request, configurationProcessor, executable.inputData);
|
898
|
-
}
|
899
|
-
executeSelectorScript(request, executable) {
|
900
|
-
var _a;
|
901
|
-
const configurationProcessor = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName];
|
902
|
-
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
903
|
-
const scope = this.getScopeByOwnerId(executable.ownerId);
|
904
|
-
const scopeText = scope ? ` in ${scope}` : '';
|
905
|
-
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
906
|
-
}
|
907
|
-
return this.executeProcessorScript(request, configurationProcessor, executable.inputData);
|
908
|
-
}
|
909
|
-
executeProcessorScript(request, configurationProcessor, inputData) {
|
910
|
-
var _a;
|
911
|
-
const scope = this.getScopeByOwnerId((_a = configurationProcessor.ownerId) !== null && _a !== void 0 ? _a : '');
|
912
|
-
let functionToExecute = this.executedFunctions[scope + configurationProcessor.apiName];
|
913
|
-
if (!functionToExecute) {
|
914
|
-
const script = `${configurationProcessor.script}\nreturn transform;`;
|
915
|
-
const sourceMap = `\n//# sourceURL=${scope ? scope + '/' : ''}${configurationProcessor.apiName}.js`;
|
916
|
-
functionToExecute = new Function(script + sourceMap)();
|
917
|
-
this.executedFunctions[scope + configurationProcessor.apiName] = functionToExecute;
|
918
|
-
}
|
919
|
-
return functionToExecute({
|
920
|
-
request,
|
921
|
-
inputData,
|
922
|
-
flowStore: this.flowStore,
|
923
|
-
});
|
924
|
-
}
|
925
|
-
generateRequestId(scope, selectorName, inputData) {
|
926
|
-
const inputDataHash = UUID.hex(JSON.stringify(inputData) || '').slice(0, 8);
|
927
|
-
return `${scope}/${selectorName}/${inputDataHash}`;
|
928
|
-
}
|
929
|
-
getDefaultExecutionRequestDTO() {
|
930
|
-
var _a;
|
931
|
-
const request = {
|
932
|
-
actions: [],
|
933
|
-
selectors: {},
|
934
|
-
};
|
935
|
-
if (this.getFlowSafe().properties.standalone) {
|
936
|
-
return request;
|
937
|
-
}
|
938
|
-
const flowEngineTemplateId = this.getOwnerIdByScope(UITemplateType.FLOW_ENGINE);
|
939
|
-
(_a = request.actions) === null || _a === void 0 ? void 0 : _a.push({
|
940
|
-
apiName: 'UPDATE_CONTEXT_PROPERTIES',
|
941
|
-
ownerId: flowEngineTemplateId,
|
942
|
-
inputData: this.contextService.resolve().properties,
|
943
|
-
});
|
944
|
-
return request;
|
945
|
-
}
|
946
|
-
checkStatefulChanges(requestId, selectorResult) {
|
947
|
-
if (this.trackedStatefulChangesMap.has(requestId)) {
|
948
|
-
if (!this.initialStatefulData[requestId]) {
|
949
|
-
this.initialStatefulData[requestId] = selectorResult;
|
950
|
-
}
|
951
|
-
const hasChanges = !isEqual(this.initialStatefulData[requestId], selectorResult);
|
952
|
-
this.trackedStatefulChangesMap.set(requestId, hasChanges);
|
953
|
-
}
|
954
|
-
}
|
955
|
-
}
|
956
|
-
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 });
|
957
|
-
FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService });
|
958
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, decorators: [{
|
959
|
-
type: Injectable
|
960
|
-
}], ctorParameters: function () {
|
961
|
-
return [{ type: ContextService }, { type: QuoteDraftService }, { type: FlowInfoService }, { type: FlowConfigurationService }, { type: i1.ConfigurationProcessorsApiService }, { type: i1.FlowStateApiService }, { type: i1.QuoteApiService }, { type: i6.ToastService }, { type: undefined, decorators: [{
|
962
|
-
type: Optional
|
963
|
-
}, {
|
964
|
-
type: Inject,
|
965
|
-
args: [FLOW_CUSTOMIZATION]
|
966
|
-
}] }];
|
967
|
-
} });
|
968
|
-
|
969
|
-
const findLineItem = (id, lineItems) => {
|
970
|
-
return findLineItemWithComparator(lineItems, (li) => li.id === id);
|
971
|
-
};
|
972
|
-
const findLineItemWithComparator = (lineItems, comparator) => {
|
973
|
-
let currentLevel = lineItems;
|
974
|
-
while (currentLevel.length) {
|
975
|
-
const found = currentLevel.find(comparator);
|
976
|
-
if (found) {
|
977
|
-
return found;
|
978
|
-
}
|
979
|
-
currentLevel = flatten(currentLevel.map(parent => parent.lineItems));
|
980
|
-
}
|
981
|
-
return;
|
982
|
-
};
|
983
|
-
const insertLineItem = (lineItem, parentId, toInsert) => {
|
984
|
-
const insertData = lineItem.id === parentId ? [toInsert] : [];
|
985
|
-
return Object.assign(Object.assign({}, lineItem), { lineItems: [
|
986
|
-
...insertData,
|
987
|
-
...lineItem.lineItems.map(li => {
|
988
|
-
return insertLineItem(li, parentId, toInsert);
|
989
|
-
}),
|
990
|
-
] });
|
991
|
-
};
|
992
|
-
const removeLineItem = (lineItem, idToRemove) => {
|
993
|
-
return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems
|
994
|
-
.map(li => {
|
995
|
-
if (li.id === idToRemove) {
|
996
|
-
return;
|
997
|
-
}
|
998
|
-
else if (li.lineItems.length) {
|
999
|
-
return removeLineItem(li, idToRemove);
|
1000
|
-
}
|
1001
|
-
return li;
|
1002
|
-
})
|
1003
|
-
.filter(r => !!r) });
|
1004
|
-
};
|
1005
|
-
const replaceLineItem = (lineItem, replaceTo, skipCardinalityCalculation = false) => {
|
1006
|
-
if (lineItem.id === replaceTo.id) {
|
1007
|
-
if (!skipCardinalityCalculation) {
|
1008
|
-
return Object.assign({}, recalculateCardinalityVariables(lineItem, replaceTo));
|
1009
|
-
}
|
1010
|
-
else {
|
1011
|
-
return Object.assign({}, replaceTo);
|
1012
|
-
}
|
1013
|
-
}
|
1014
|
-
return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems.map(li => replaceLineItem(li, replaceTo, skipCardinalityCalculation)) });
|
1015
|
-
};
|
1016
|
-
const collectCardinalityComputations = (portDomains) => {
|
1017
|
-
const cardinalityComputations = new Map();
|
1018
|
-
entries(portDomains).forEach(([key, portDomain]) => {
|
1019
|
-
cardinalityComputations.set(key, portDomain.properties['cardinalityComputation'] === 'true');
|
1020
|
-
});
|
1021
|
-
return cardinalityComputations;
|
1022
|
-
};
|
1023
|
-
const calculateCardinalityVariables = (lineItems, cardinalityComputations) => {
|
1024
|
-
const cardVars = new Map();
|
1025
|
-
lineItems
|
1026
|
-
.filter(({ port, type }) => !!port && !!type)
|
1027
|
-
.forEach(li => {
|
1028
|
-
var _a;
|
1029
|
-
if (cardinalityComputations.get(`${li.port}`)) {
|
1030
|
-
const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
|
1031
|
-
cardVars.set(cardinalityVariableName, ((_a = cardVars.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
|
1032
|
-
}
|
1033
|
-
});
|
1034
|
-
return cardVars;
|
1035
|
-
};
|
1036
|
-
const cardinalityRegexp = new RegExp('#CV-[a-zA-Z0-9_]+@(?<portName>[a-zA-Z0-9_]+)');
|
1037
|
-
const recalculateCardinalityVariables = (original, updated) => {
|
1038
|
-
var _a, _b;
|
1039
|
-
const cardinalityComputations = collectCardinalityComputations((_b = (_a = updated.portDomains) !== null && _a !== void 0 ? _a : original.portDomains) !== null && _b !== void 0 ? _b : {});
|
1040
|
-
const cardinalityVariables = calculateCardinalityVariables(updated.lineItems, cardinalityComputations);
|
1041
|
-
const originalCardinalityVariables = calculateCardinalityVariables(original.lineItems, cardinalityComputations);
|
1042
|
-
originalCardinalityVariables.forEach((value, key) => {
|
1043
|
-
var _a;
|
1044
|
-
const execArray = cardinalityRegexp.exec(key);
|
1045
|
-
const portName = (_a = execArray === null || execArray === void 0 ? void 0 : execArray.groups) === null || _a === void 0 ? void 0 : _a['portName'];
|
1046
|
-
if (!portName || cardinalityComputations.get(portName)) {
|
1047
|
-
if (cardinalityVariables.get(key) === value) {
|
1048
|
-
// no need to update cardinality if no changes
|
1049
|
-
cardinalityVariables.delete(key);
|
1050
|
-
}
|
1051
|
-
else if (!cardinalityVariables.has(key)) {
|
1052
|
-
// remove last item from port
|
1053
|
-
cardinalityVariables.set(key, 0);
|
1054
|
-
}
|
1055
|
-
}
|
1056
|
-
});
|
1057
|
-
return Object.assign(Object.assign({}, updated), { attributes: upsertAttributes(updated.attributes, [...cardinalityVariables].map(([name, value]) => ({ name, value, cfgStatus: 'Changed' }))) });
|
1058
|
-
};
|
1059
|
-
const mapAttributes = (attributes) => {
|
1060
|
-
return attributes.reduce((acc, { name, value }) => (Object.assign(Object.assign({}, acc), { [name]: value })), {});
|
1061
|
-
};
|
1062
|
-
const getAttributes = (attributes, names = []) => {
|
1063
|
-
const filtered = attributes.filter(({ name }) => names.includes(name));
|
1064
|
-
return sortBy(filtered, [({ name }) => names.indexOf(name)]);
|
1065
|
-
};
|
1066
|
-
const upsertAttributes = (originalAttributes, attributesToUpsert) => {
|
1067
|
-
return attributesToUpsert.reduce((acc, { name, value }) => {
|
1068
|
-
const [origAttr] = getAttributes(acc, [name]);
|
1069
|
-
return [
|
1070
|
-
...acc.filter(attr => attr.name !== name),
|
1071
|
-
Object.assign(Object.assign({}, (origAttr !== null && origAttr !== void 0 ? origAttr : { name, type: '' })), { cfgStatus: origAttr ? 'Changed' : 'User', value }),
|
1072
|
-
];
|
1073
|
-
}, originalAttributes);
|
1074
|
-
};
|
1075
|
-
const patchAttributes = (rootLineItem, id, attrs, skipCardinalityCalculation = false) => {
|
1076
|
-
const lineItem = findLineItem(id, [rootLineItem]);
|
1077
|
-
if (!lineItem) {
|
1078
|
-
return rootLineItem;
|
1079
|
-
}
|
1080
|
-
const attributes = upsertAttributes(lineItem.attributes, attrs);
|
1081
|
-
return replaceLineItem(rootLineItem, Object.assign(Object.assign({}, lineItem), { attributes }), skipCardinalityCalculation);
|
1082
|
-
};
|
1083
|
-
const getAttributeValue = (attributes, name) => { var _a; return (_a = attributes.find(attr => attr.name === name)) === null || _a === void 0 ? void 0 : _a.value; };
|
1084
|
-
const generateLineItem = (port, type, parentId, attributes = [], lineItems = []) => {
|
1085
|
-
return {
|
1086
|
-
id: UUID.UUID(),
|
1087
|
-
port,
|
1088
|
-
type,
|
1089
|
-
actionCode: 'ADD',
|
1090
|
-
cfgStatus: 'New',
|
1091
|
-
attributes: attributes.map(({ name, value }) => ({ cfgStatus: 'User', name, value })),
|
1092
|
-
lineItems,
|
1093
|
-
parentId,
|
1094
|
-
qty: 1,
|
1095
|
-
};
|
1096
|
-
};
|
1097
|
-
const getRecommendedPrices = (portDomain, type) => {
|
1098
|
-
var _a, _b;
|
1099
|
-
const domainType = portDomain.domainTypes.find(({ name }) => name === type);
|
1100
|
-
const [net, list] = (_b = (_a = domainType === null || domainType === void 0 ? void 0 : domainType.recommendedPrices) === null || _a === void 0 ? void 0 : _a.filter(({ chargeMethod }) => chargeMethod === 'ONE_TIME').reduce((acc, rp) => {
|
1101
|
-
const [netPrice, listPrice] = acc;
|
1102
|
-
return [netPrice + rp.netPrice, listPrice + rp.listPrice];
|
1103
|
-
}, [0, 0])) !== null && _b !== void 0 ? _b : [0, 0];
|
1104
|
-
return { net, list };
|
1105
|
-
};
|
1106
|
-
const getOriginParent = (lineItems, currentLineItem) => {
|
1107
|
-
let target = currentLineItem;
|
1108
|
-
while (target && target.rampInstanceId) {
|
1109
|
-
target = lineItems.find(sub => sub.id === currentLineItem.rampInstanceId);
|
1110
|
-
}
|
1111
|
-
return target;
|
1112
|
-
};
|
1113
|
-
const assetPredicateFn = (lineItem, assetId) => {
|
1114
|
-
if (!assetId) {
|
1115
|
-
return false;
|
1116
|
-
}
|
1117
|
-
return lineItem.assetId === assetId || lineItem.openOrderLineItemId === assetId;
|
1118
|
-
};
|
1119
|
-
const multiplyLineItems = (lineItem, qty, split) => {
|
1120
|
-
if (split) {
|
1121
|
-
const unifyIds = (lineItem) => (Object.assign(Object.assign({}, lineItem), { id: UUID.UUID(), lineItems: lineItem.lineItems.map(unifyIds) }));
|
1122
|
-
return map$2(new Array(qty), () => unifyIds(lineItem));
|
1123
|
-
}
|
1124
|
-
else {
|
1125
|
-
return [
|
1126
|
-
Object.assign(Object.assign({}, lineItem), { qty: qty }),
|
1127
|
-
];
|
1128
|
-
}
|
1129
|
-
};
|
1130
|
-
const isTechnicalAttribute = (name) => {
|
1131
|
-
return name.startsWith('#') || name.startsWith('$');
|
1132
|
-
};
|
1133
|
-
const filterOutTechnicalAttributes = (attributes) => {
|
1134
|
-
return attributes.filter(({ name }) => !isTechnicalAttribute(name));
|
1135
|
-
};
|
1136
|
-
|
1137
|
-
var lineItem_utils = /*#__PURE__*/Object.freeze({
|
1138
|
-
__proto__: null,
|
1139
|
-
assetPredicateFn: assetPredicateFn,
|
1140
|
-
filterOutTechnicalAttributes: filterOutTechnicalAttributes,
|
1141
|
-
findLineItem: findLineItem,
|
1142
|
-
findLineItemWithComparator: findLineItemWithComparator,
|
1143
|
-
generateLineItem: generateLineItem,
|
1144
|
-
getAttributeValue: getAttributeValue,
|
1145
|
-
getAttributes: getAttributes,
|
1146
|
-
getOriginParent: getOriginParent,
|
1147
|
-
getRecommendedPrices: getRecommendedPrices,
|
1148
|
-
insertLineItem: insertLineItem,
|
1149
|
-
isTechnicalAttribute: isTechnicalAttribute,
|
1150
|
-
mapAttributes: mapAttributes,
|
1151
|
-
multiplyLineItems: multiplyLineItems,
|
1152
|
-
patchAttributes: patchAttributes,
|
1153
|
-
recalculateCardinalityVariables: recalculateCardinalityVariables,
|
1154
|
-
removeLineItem: removeLineItem,
|
1155
|
-
replaceLineItem: replaceLineItem,
|
1156
|
-
upsertAttributes: upsertAttributes
|
1157
|
-
});
|
1158
|
-
|
1159
|
-
class LineItemWorker {
|
1160
|
-
constructor(src) {
|
1161
|
-
this.li = Object.assign({}, src);
|
1162
|
-
}
|
1163
|
-
insert(parentId, toInsert) {
|
1164
|
-
return new LineItemWorker(insertLineItem(this.li, parentId, toInsert));
|
1165
|
-
}
|
1166
|
-
remove(id) {
|
1167
|
-
return new LineItemWorker(removeLineItem(this.li, id));
|
1168
|
-
}
|
1169
|
-
replace(toReplace, skipCardinalityCalculation = false) {
|
1170
|
-
return new LineItemWorker(replaceLineItem(this.li, toReplace, skipCardinalityCalculation));
|
1171
|
-
}
|
1172
|
-
patchAttribute(attrs, id, skipCardinalityCalculation = false) {
|
1173
|
-
return new LineItemWorker(patchAttributes(this.li, id !== null && id !== void 0 ? id : this.li.id, attrs, skipCardinalityCalculation));
|
1174
|
-
}
|
1175
|
-
}
|
1176
|
-
|
1177
|
-
function extractMetadata(uiDefinition) {
|
1178
|
-
return omit(uiDefinition, [
|
1179
|
-
'children',
|
1180
|
-
'pages',
|
1181
|
-
'components',
|
1182
|
-
]);
|
1183
|
-
}
|
1184
|
-
|
1185
|
-
class FlowUpdateService {
|
1186
|
-
update(rootLineItems, updates, charges) {
|
1187
|
-
let remainingUpdates = [...updates];
|
1188
|
-
let currentLevel = rootLineItems;
|
1189
|
-
while (currentLevel.length && remainingUpdates.length) {
|
1190
|
-
currentLevel.forEach(li => {
|
1191
|
-
const unhandledUpdates = [];
|
1192
|
-
remainingUpdates.forEach(update => {
|
1193
|
-
let updated = false;
|
1194
|
-
switch (update.dataType) {
|
1195
|
-
case 'LINEITEM':
|
1196
|
-
updated = this.applyLineItemUpdate(li, update, charges);
|
1197
|
-
break;
|
1198
|
-
case 'CHARGE':
|
1199
|
-
updated = this.applyChargeUpdate(li, update);
|
1200
|
-
break;
|
1201
|
-
case 'GROUP_CHARGE':
|
1202
|
-
updated = this.applyChargeGroupUpdate(li, update);
|
1203
|
-
break;
|
1204
|
-
default:
|
1205
|
-
// Unknown dataType. Do not try to handle it anymore
|
1206
|
-
updated = true;
|
1207
|
-
}
|
1208
|
-
if (!updated) {
|
1209
|
-
unhandledUpdates.push(update);
|
1210
|
-
}
|
1211
|
-
});
|
1212
|
-
remainingUpdates = unhandledUpdates;
|
1213
|
-
});
|
1214
|
-
currentLevel = flatten(currentLevel.map(parent => parent.lineItems));
|
1215
|
-
}
|
1216
|
-
}
|
1217
|
-
delete(lineItems, id) {
|
1218
|
-
const idsToRemove = [id];
|
1219
|
-
const topLevelLineItem = lineItems.find(li => li.id === id);
|
1220
|
-
if (topLevelLineItem) {
|
1221
|
-
// find term-related line items (which are only top level)
|
1222
|
-
// expired term line items won't be deleted
|
1223
|
-
let foundTermLineItem = topLevelLineItem;
|
1224
|
-
while (foundTermLineItem) {
|
1225
|
-
foundTermLineItem = lineItems.find(li => foundTermLineItem && li.rampInstanceId === foundTermLineItem.id);
|
1226
|
-
if (foundTermLineItem) {
|
1227
|
-
idsToRemove.push(foundTermLineItem.id);
|
1228
|
-
}
|
1229
|
-
}
|
1230
|
-
}
|
1231
|
-
const filtered = lineItems.filter(lineItem => !idsToRemove.includes(lineItem.id));
|
1232
|
-
return filtered.map(lineItem => new LineItemWorker(lineItem).remove(id).li);
|
1233
|
-
}
|
1234
|
-
applyLineItemUpdate(lineItem, update, charges) {
|
1235
|
-
if (lineItem.id !== update.id) {
|
1236
|
-
return false;
|
1237
|
-
}
|
1238
|
-
switch (update.attributeType) {
|
1239
|
-
case 'QTY':
|
1240
|
-
lineItem.qty = update.newValue;
|
1241
|
-
break;
|
1242
|
-
case 'EFFECTIVE_START_DATE':
|
1243
|
-
lineItem.properties['StartDate'] = moment(update.newValue).format('YYYY-MM-DD');
|
1244
|
-
break;
|
1245
|
-
case 'END_DATE':
|
1246
|
-
lineItem.properties['EndDate'] = moment(update.newValue).format('YYYY-MM-DD');
|
1247
|
-
break;
|
1248
|
-
case 'PRICE_ADJUSTMENT':
|
1249
|
-
{
|
1250
|
-
const charge = lineItem.chargeItems.find(charge => { var _a; return (_a = (charges || {})[charge.chargeId]) === null || _a === void 0 ? void 0 : _a.main; });
|
1251
|
-
if (charge) {
|
1252
|
-
charge.priceAdjustment = update.newValue;
|
1253
|
-
}
|
1254
|
-
}
|
1255
|
-
break;
|
1256
|
-
case 'LIST_PRICE_ADJUSTMENT':
|
1257
|
-
case 'MARGIN_ADJUSTMENT':
|
1258
|
-
{
|
1259
|
-
const charge = lineItem.chargeItems.find(charge => { var _a; return (_a = (charges || {})[charge.chargeId]) === null || _a === void 0 ? void 0 : _a.main; });
|
1260
|
-
if (charge) {
|
1261
|
-
charge.listPriceAdjustment = update.newValue;
|
1262
|
-
}
|
1263
|
-
}
|
1264
|
-
break;
|
1265
|
-
case 'COST_ADJUSTMENT':
|
1266
|
-
{
|
1267
|
-
const charge = lineItem.chargeItems.find(charge => { var _a; return (_a = (charges || {})[charge.chargeId]) === null || _a === void 0 ? void 0 : _a.main; });
|
1268
|
-
if (charge) {
|
1269
|
-
charge.costAdjustment = update.newValue;
|
1270
|
-
}
|
1271
|
-
}
|
1272
|
-
break;
|
1273
|
-
default:
|
1274
|
-
throw new Error(`Not suppored AttributeType for LineItem update: ${update.attributeType}`);
|
1275
|
-
}
|
1276
|
-
return true;
|
1277
|
-
}
|
1278
|
-
applyChargeUpdate(lineItem, update) {
|
1279
|
-
const foundCharge = lineItem.chargeItems.find(({ id }) => id === update.id);
|
1280
|
-
if (!foundCharge) {
|
1281
|
-
return false;
|
1282
|
-
}
|
1283
|
-
if (update.attributeType === 'PRICE_ADJUSTMENT') {
|
1284
|
-
foundCharge.priceAdjustment = update.newValue;
|
1285
|
-
}
|
1286
|
-
else if (update.attributeType === 'LIST_PRICE_ADJUSTMENT') {
|
1287
|
-
foundCharge.listPriceAdjustment = update.newValue;
|
1288
|
-
}
|
1289
|
-
else {
|
1290
|
-
throw new Error(`Not suppored AttributeType for Charge Item update: ${update.attributeType}`);
|
1291
|
-
}
|
1292
|
-
return true;
|
1293
|
-
}
|
1294
|
-
applyChargeGroupUpdate(lineItem, update) {
|
1295
|
-
const foundChargeGroup = ChargeGroupUtils.findChargeGroupById(update.id, lineItem);
|
1296
|
-
if (!foundChargeGroup) {
|
1297
|
-
return false;
|
1298
|
-
}
|
1299
|
-
if (update.attributeType === 'PRICE_ADJUSTMENT') {
|
1300
|
-
foundChargeGroup.priceAdjustment = update.newValue;
|
1301
|
-
}
|
1302
|
-
else if (update.attributeType === 'LIST_PRICE_ADJUSTMENT') {
|
1303
|
-
foundChargeGroup.listPriceAdjustment = update.newValue;
|
1304
|
-
}
|
1305
|
-
else {
|
1306
|
-
throw new Error(`Not suppored AttributeType for Charge Group Item update: ${update.attributeType}`);
|
1307
|
-
}
|
1308
|
-
return true;
|
1309
|
-
}
|
1310
|
-
}
|
1311
|
-
FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
1312
|
-
FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService });
|
1313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService, decorators: [{
|
1314
|
-
type: Injectable
|
1315
|
-
}] });
|
1316
|
-
|
1317
|
-
class RuntimeSettingsService {
|
1318
|
-
constructor(configurationSettingsApiService) {
|
1319
|
-
this.configurationSettingsApiService = configurationSettingsApiService;
|
1320
|
-
this.configurationSettings$ = new BehaviorSubject({});
|
1321
|
-
this.currencySettings$ = new BehaviorSubject({
|
1322
|
-
iso: DEFAULT_CURRENCY_ISO_CODE,
|
1323
|
-
symbol: DEFAULT_CURRENCY_SYMBOL,
|
1324
|
-
});
|
1325
|
-
this.shoppingCartSettings$ = new BehaviorSubject([]);
|
1326
|
-
this.getCurrencySymbol = (locale, currency) => {
|
1327
|
-
return (0)
|
1328
|
-
.toLocaleString(locale, { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0 })
|
1329
|
-
.replace(/\d/g, '')
|
1330
|
-
.trim();
|
1331
|
-
};
|
1332
|
-
}
|
1333
|
-
create() {
|
1334
|
-
return this.configurationSettingsApiService.fetchSettings().pipe(map$1(settings => this.parseConfigurationSettings(settings)), tap$1(configurationSettings => {
|
1335
|
-
var _a;
|
1336
|
-
this.configurationSettings$.next(configurationSettings);
|
1337
|
-
this.addShoppingCartSettings((_a = configurationSettings['shopping-cart']) !== null && _a !== void 0 ? _a : []);
|
1338
|
-
this.formattingSettings = this.getFormattingSettings();
|
1339
|
-
}), map$1(() => undefined));
|
1340
|
-
}
|
1341
|
-
initCurrency(iso) {
|
1342
|
-
if (iso) {
|
1343
|
-
const symbol = this.getCurrencySymbol('en-US', iso);
|
1344
|
-
this.currencySettings$.next({ iso, symbol });
|
1345
|
-
if (this.formattingSettings) {
|
1346
|
-
this.formattingSettings.currencySymbol = symbol;
|
1347
|
-
}
|
1348
|
-
}
|
1349
|
-
}
|
1350
|
-
getFormattingSettings() {
|
1351
|
-
var _a, _b;
|
1352
|
-
if (this.formattingSettings) {
|
1353
|
-
return this.formattingSettings;
|
1354
|
-
}
|
1355
|
-
const shoppingCartSettings = (_a = this.getConfigurationSettings()['shopping-cart']) === null || _a === void 0 ? void 0 : _a.reduce((acc, setting) => {
|
1356
|
-
return Object.assign(Object.assign({}, acc), { [setting.id]: setting.properties });
|
1357
|
-
}, {});
|
1358
|
-
const currencySettings = this.getCurrencySettings();
|
1359
|
-
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)) ||
|
1360
|
-
DEFAULT_DATE_FORMAT;
|
1361
|
-
const decimalSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DECIMAL_SEPARATOR;
|
1362
|
-
const thousandsSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.THOUSANDS_SEPARATOR;
|
1363
|
-
// the number of decimal places can be 0
|
1364
|
-
const priceScale = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.PRICE_SCALE;
|
1365
|
-
const decimalsCount = priceScale !== null && priceScale !== '' && !isNaN(Number(priceScale)) && Number(priceScale) >= 0
|
1366
|
-
? Number(priceScale)
|
1367
|
-
: DEFAULT_DECIMALS_COUNT;
|
1368
|
-
const actionCodeSettings = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.STATUS_LABEL;
|
1369
|
-
return {
|
1370
|
-
currencySymbol: currencySettings.symbol,
|
1371
|
-
dateFormats: getSupportedDateFormats(dateFormat),
|
1372
|
-
decimalsCount,
|
1373
|
-
decimalSeparator: decimalSeparator !== undefined && ['.', ','].includes(decimalSeparator)
|
1374
|
-
? decimalSeparator
|
1375
|
-
: DEFAULT_DECIMAL_SEPARATOR,
|
1376
|
-
// thousands separator can be a blank value, so it can also be null
|
1377
|
-
thousandsSeparator: thousandsSeparator !== undefined && ['.', ',', '', null].includes(thousandsSeparator)
|
1378
|
-
? thousandsSeparator || ''
|
1379
|
-
: DEFAULT_THOUSANDS_SEPARATOR,
|
1380
|
-
actionCodeLabels: (actionCodeSettings === null || actionCodeSettings === void 0 ? void 0 : actionCodeSettings.length)
|
1381
|
-
? actionCodeSettings.reduce((result, setting) => (Object.assign(Object.assign({}, result), { [setting.status_label]: setting.custom_label })), {})
|
1382
|
-
: DEFAULT_ACTION_CODE_LABELS,
|
1383
|
-
};
|
1384
|
-
}
|
1385
|
-
getConfigurationSettings() {
|
1386
|
-
return this.configurationSettings$.value;
|
1387
|
-
}
|
1388
|
-
getShoppingCartSettings() {
|
1389
|
-
return this.shoppingCartSettings$.value;
|
1390
|
-
}
|
1391
|
-
getCurrencySettings() {
|
1392
|
-
return this.currencySettings$.value;
|
1393
|
-
}
|
1394
|
-
parseConfigurationSettings(settings) {
|
1395
|
-
return settings.reduce((acc, setting) => {
|
1396
|
-
switch (setting.key) {
|
1397
|
-
case 'shopping-cart':
|
1398
|
-
acc['shopping-cart'] = parseJsonSafely(setting.value, []);
|
1399
|
-
break;
|
1400
|
-
case 'navigation':
|
1401
|
-
acc.navigation = parseJsonSafely(setting.value, {});
|
1402
|
-
break;
|
1403
|
-
case 'flows':
|
1404
|
-
acc.flows = parseJsonSafely(setting.value, []);
|
1405
|
-
break;
|
1406
|
-
default:
|
1407
|
-
acc[setting.key] = setting.value;
|
1408
|
-
}
|
1409
|
-
return acc;
|
1410
|
-
}, {});
|
1411
|
-
}
|
1412
|
-
addShoppingCartSettings(settings) {
|
1413
|
-
// uniqBy removes items with the biggest index
|
1414
|
-
const newSettings = uniqBy([...settings, ...this.shoppingCartSettings$.value], 'id');
|
1415
|
-
this.shoppingCartSettings$.next(newSettings);
|
1416
|
-
}
|
1417
|
-
}
|
1418
|
-
RuntimeSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, deps: [{ token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1419
|
-
RuntimeSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService });
|
1420
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, decorators: [{
|
1421
|
-
type: Injectable
|
1422
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigurationSettingsApiService }]; } });
|
1423
|
-
|
1424
|
-
class ConfigurationService {
|
1425
|
-
constructor(quoteDraftService, runtimeService, contextService, configurationApiService, messageService, dialogService, runtimeSettings) {
|
1426
|
-
this.quoteDraftService = quoteDraftService;
|
1427
|
-
this.runtimeService = runtimeService;
|
1428
|
-
this.contextService = contextService;
|
1429
|
-
this.configurationApiService = configurationApiService;
|
1430
|
-
this.messageService = messageService;
|
1431
|
-
this.dialogService = dialogService;
|
1432
|
-
this.runtimeSettings = runtimeSettings;
|
1433
|
-
this.mode = ConfigurationMode.SEARCH;
|
1434
|
-
this.configurationState = new BehaviorSubject(null);
|
1435
|
-
this.previousConfigurationState = new BehaviorSubject(null);
|
1436
|
-
this.isLoadingSubj$ = new BehaviorSubject(false);
|
1437
|
-
this.isLoading$ = this.isLoadingSubj$.asObservable();
|
1438
|
-
this.hasUnsavedChanges = false;
|
1439
|
-
}
|
1440
|
-
reset() {
|
1441
|
-
this.hasUnsavedChanges = false;
|
1442
|
-
this.runtimeService.reset();
|
1443
|
-
this.configurableRamp = undefined;
|
1444
|
-
this.configurationState.next(null);
|
1445
|
-
this.previousConfigurationState.next(null);
|
1446
|
-
}
|
1447
|
-
patch$(lineItem, options) {
|
1448
|
-
const source = this.getSnapshot();
|
1449
|
-
if (!source) {
|
1450
|
-
return throwError(() => new Error(`Source LineItem not found`));
|
1451
|
-
}
|
1452
|
-
const skipCardinalityCalculation = (options === null || options === void 0 ? void 0 : options.skipCardinalityCalculation) || this.contextSnapshot.properties['#skipCardinalityCalculation'] === 'true';
|
1453
|
-
this.configurableRamp = new LineItemWorker(source).replace(lineItem, skipCardinalityCalculation).li;
|
1454
|
-
return this.configure().pipe(catchError$1(error => {
|
1455
|
-
console.error(error);
|
1456
|
-
if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
|
1457
|
-
this.messageService.add({ severity: 'error', summary: error });
|
1458
|
-
}
|
1459
|
-
// bounce back if configuration call has failed
|
1460
|
-
const prevState = this.configurationState.value;
|
1461
|
-
this.configurationState.next(prevState ? Object.assign({}, prevState) : null);
|
1462
|
-
return throwError(() => error);
|
1463
|
-
}), tap(() => {
|
1464
|
-
if (!this.hasUnsavedChanges) {
|
1465
|
-
this.hasUnsavedChanges = true;
|
1466
|
-
}
|
1467
|
-
}));
|
1468
|
-
}
|
1469
|
-
patch(lineItem, options) {
|
1470
|
-
this.patch$(lineItem, options).subscribe();
|
1471
|
-
}
|
1472
|
-
setConfigurableRamp(lineItem) {
|
1473
|
-
this.configurableRamp = lineItem;
|
1474
|
-
}
|
1475
|
-
get() {
|
1476
|
-
return this.configurationState.pipe(map(state => state === null || state === void 0 ? void 0 : state.lineItem), shareReplay$1());
|
1477
|
-
}
|
1478
|
-
getSnapshot() {
|
1479
|
-
var _a, _b;
|
1480
|
-
return ((_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.lineItem) ? Object.assign({}, (_b = this.configurationState.value) === null || _b === void 0 ? void 0 : _b.lineItem) : undefined;
|
1481
|
-
}
|
1482
|
-
getRuntimeModel() {
|
1483
|
-
const runtimeModel = this.runtimeService.runtimeModel;
|
1484
|
-
if (!runtimeModel) {
|
1485
|
-
throw new Error('Runtime model not initialized');
|
1486
|
-
}
|
1487
|
-
return runtimeModel;
|
1488
|
-
}
|
1489
|
-
getRuntimeContext() {
|
1490
|
-
const runtimeContext = this.runtimeService.runtimeContext;
|
1491
|
-
if (!runtimeContext) {
|
1492
|
-
throw new Error('Runtime context not initialized');
|
1493
|
-
}
|
1494
|
-
return runtimeContext;
|
1495
|
-
}
|
1496
|
-
get state$() {
|
1497
|
-
return this.configurationState.asObservable();
|
1498
|
-
}
|
1499
|
-
get stateSnapshot() {
|
1500
|
-
return this.configurationState.value;
|
1501
|
-
}
|
1502
|
-
get previousStateSnapshot() {
|
1503
|
-
return this.previousConfigurationState.value;
|
1504
|
-
}
|
1505
|
-
get contextSnapshot() {
|
1506
|
-
return this.contextService.resolve();
|
1507
|
-
}
|
1508
|
-
get context$() {
|
1509
|
-
return this.contextService.resolve$();
|
1510
|
-
}
|
1511
|
-
get charges$() {
|
1512
|
-
return this.configurationState.pipe(map(state => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.charges) !== null && _a !== void 0 ? _a : {}; }));
|
1513
|
-
}
|
1514
|
-
get chargesSnapshot() {
|
1515
|
-
var _a, _b;
|
1516
|
-
return (_b = (_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.charges) !== null && _b !== void 0 ? _b : {};
|
1517
|
-
}
|
1518
|
-
get pricePlans$() {
|
1519
|
-
return this.configurationState.pipe(map(state => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.pricePlans) !== null && _a !== void 0 ? _a : {}; }));
|
1520
|
-
}
|
1521
|
-
get pricePlansSnapshot() {
|
1522
|
-
var _a, _b;
|
1523
|
-
return (_b = (_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.pricePlans) !== null && _b !== void 0 ? _b : {};
|
1524
|
-
}
|
1525
|
-
get procedureContext$() {
|
1526
|
-
return this.configurationState.pipe(map(state => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.procedureContext) !== null && _a !== void 0 ? _a : {}; }));
|
1527
|
-
}
|
1528
|
-
get procedureContextSnapshot() {
|
1529
|
-
var _a, _b;
|
1530
|
-
return (_b = (_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.procedureContext) !== null && _b !== void 0 ? _b : {};
|
1531
|
-
}
|
1532
|
-
configure() {
|
1533
|
-
return this.configureRequest$(this.generateRequest());
|
1534
|
-
}
|
1535
|
-
configureRequest$(configurationRequest) {
|
1536
|
-
var _a;
|
1537
|
-
const runtimeContext = this.getRuntimeContext();
|
1538
|
-
const runtimeModel = this.getRuntimeModel();
|
1539
|
-
const uiDefinitionProperties = this.getUIDefinitionProperties();
|
1540
|
-
const mainPricingEnabled = (_a = runtimeContext.properties) === null || _a === void 0 ? void 0 : _a.PricingEnabled;
|
1541
|
-
const pricingEnabled = mainPricingEnabled ? mainPricingEnabled === 'true' : uiDefinitionProperties.pricingEnabled;
|
1542
|
-
const customPriceApi = this.runtimeSettings.getConfigurationSettings()['CUSTOM_PRICE_API'];
|
1543
|
-
this.isLoadingSubj$.next(true);
|
1544
|
-
const configure$ = pricingEnabled && customPriceApi
|
1545
|
-
? this.configurationApiService.customConfigurePrice({ url: customPriceApi, configurationRequest, runtimeModel })
|
1546
|
-
: this.configurationApiService.configureLineItem({
|
1547
|
-
configurationRequest,
|
1548
|
-
runtimeModel,
|
1549
|
-
pricingEnabled,
|
1550
|
-
});
|
1551
|
-
return configure$.pipe(tap(result => {
|
1552
|
-
var _a;
|
1553
|
-
this.contextService.update(result.context);
|
1554
|
-
this.configurationState.next(result);
|
1555
|
-
this.previousConfigurationState.next(cloneDeep(result));
|
1556
|
-
if ((_a = result.deletedLineItems) === null || _a === void 0 ? void 0 : _a.length) {
|
1557
|
-
this.showInactiveProductsConfirmation();
|
1558
|
-
}
|
1559
|
-
this.configurableRamp = result.lineItem;
|
1560
|
-
}), map(({ lineItem }) => lineItem), catchError$1(error => throwError(() => {
|
1561
|
-
const resetState = this.previousConfigurationState.value;
|
1562
|
-
if (resetState) {
|
1563
|
-
this.previousConfigurationState.next(cloneDeep(resetState));
|
1564
|
-
this.configurationState.next(resetState);
|
1565
|
-
}
|
1566
|
-
if (error.error) {
|
1567
|
-
return extractErrorDetails(error.error).join('. ');
|
1568
|
-
}
|
1569
|
-
return error.message || JSON.stringify(error);
|
1570
|
-
})), finalize$1(() => this.isLoadingSubj$.next(false)));
|
1571
|
-
}
|
1572
|
-
configureExternal$(props) {
|
1573
|
-
return this.runtimeService
|
1574
|
-
.init({ productId: props.productId, defaultQty: props.qty, attributesMap: props.attributesMap })
|
1575
|
-
.pipe(switchMap$1(() => this.configure()), first(), catchError$1(error => {
|
1576
|
-
this.messageService.add({ severity: ToastType.error, summary: error });
|
1577
|
-
throw error;
|
1578
|
-
}), finalize$1(() => this.reset()));
|
1579
|
-
}
|
1580
|
-
configureGuidedSelling$(data) {
|
1581
|
-
return this.configurationApiService
|
1582
|
-
.configureLineItem({
|
1583
|
-
configurationRequest: getGuidedSellingConfigurationRequest(data, this.contextService.resolve()),
|
1584
|
-
})
|
1585
|
-
.pipe(catchError$1(error => {
|
1586
|
-
if (error instanceof HttpErrorResponse) {
|
1587
|
-
this.messageService.add({ severity: ToastType.error, summary: error.error.message || error.error });
|
1588
|
-
}
|
1589
|
-
throw error;
|
1590
|
-
}));
|
1591
|
-
}
|
1592
|
-
generateRequest(lightMode = true) {
|
1593
|
-
var _a, _b;
|
1594
|
-
const lineItem = this.generateLineItem();
|
1595
|
-
let request = {
|
1596
|
-
lineItem,
|
1597
|
-
mode: this.mode,
|
1598
|
-
step: !((_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.lineItem) ? RuntimeStep.START : RuntimeStep.UPDATE,
|
1599
|
-
attributeDomainMode: 'ALL',
|
1600
|
-
context: this.contextService.resolve(),
|
1601
|
-
lineItems: ((_b = this.quoteDraftService.quoteDraft) === null || _b === void 0 ? void 0 : _b.currentState) || [],
|
1602
|
-
asset: this.getAsset(),
|
1603
|
-
};
|
1604
|
-
if (lightMode) {
|
1605
|
-
request = ConfigurationTranslatorUtils.lightenConfigurationRequest(request);
|
1606
|
-
}
|
1607
|
-
return request;
|
1608
|
-
}
|
1609
|
-
generateLineItem() {
|
1610
|
-
var _a;
|
1611
|
-
const runtimeContext = this.getRuntimeContext();
|
1612
|
-
const uiDefinitionProperties = this.getUIDefinitionProperties();
|
1613
|
-
let lineItem = this.configurableRamp;
|
1614
|
-
if (!lineItem) {
|
1615
|
-
const { initializationProps } = (_a = this.runtimeService) !== null && _a !== void 0 ? _a : {};
|
1616
|
-
lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.defaultQty);
|
1617
|
-
// Set default attributes
|
1618
|
-
if (initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap) {
|
1619
|
-
const attributes = transform(initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
|
1620
|
-
lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
|
1621
|
-
}
|
1622
|
-
}
|
1623
|
-
return lineItem;
|
1624
|
-
}
|
1625
|
-
getAsset() {
|
1626
|
-
var _a, _b;
|
1627
|
-
const lineItem = this.configurableRamp;
|
1628
|
-
if (!lineItem) {
|
1629
|
-
return;
|
1630
|
-
}
|
1631
|
-
const assetId = (_a = lineItem.assetId) !== null && _a !== void 0 ? _a : lineItem.openOrderLineItemId;
|
1632
|
-
return (_b = this.quoteDraftService.assetsState) === null || _b === void 0 ? void 0 : _b.initialState.find(li => assetPredicateFn(li, assetId));
|
1633
|
-
}
|
1634
|
-
getUIDefinitionProperties() {
|
1635
|
-
var _a, _b, _c;
|
1636
|
-
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 : {}));
|
1637
|
-
}
|
1638
|
-
showInactiveProductsConfirmation() {
|
1639
|
-
const confirmationConfig = {
|
1640
|
-
title: ' ',
|
1641
|
-
description: 'This quote contains inactive products. Do you want to remove them?',
|
1642
|
-
primaryButtonLabel: 'Remove products',
|
1643
|
-
secondaryButtonLabel: 'Back to Quote',
|
1644
|
-
};
|
1645
|
-
this.dialogService
|
1646
|
-
.open(ConfirmationComponent, {
|
1647
|
-
dismissableMask: false,
|
1648
|
-
closeOnEscape: false,
|
1649
|
-
closable: false,
|
1650
|
-
showHeader: true,
|
1651
|
-
header: `Inactive Products in Quote`,
|
1652
|
-
width: '440px',
|
1653
|
-
data: { confirmationConfig },
|
1654
|
-
})
|
1655
|
-
.onClose.subscribe(result => {
|
1656
|
-
if (!result) {
|
1657
|
-
const context = this.contextService.resolve();
|
1658
|
-
window['VELO_BACK_FN'].apply(null, [context.headerId]);
|
1659
|
-
}
|
1660
|
-
});
|
1661
|
-
}
|
1662
|
-
}
|
1663
|
-
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 });
|
1664
|
-
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService });
|
1665
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, decorators: [{
|
1666
|
-
type: Injectable
|
1667
|
-
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: ContextService }, { type: i1.ConfigurationApiService }, { type: i5.MessageService }, { type: i6$1.DialogService }, { type: RuntimeSettingsService }]; } });
|
1668
|
-
|
1669
|
-
class FlowConfigurationService {
|
1670
|
-
constructor(proceduresApiService, contextService, quoteDraftService, updateService, configurationService, flowInfoService) {
|
1671
|
-
this.proceduresApiService = proceduresApiService;
|
1672
|
-
this.contextService = contextService;
|
1673
|
-
this.quoteDraftService = quoteDraftService;
|
1674
|
-
this.updateService = updateService;
|
1675
|
-
this.configurationService = configurationService;
|
1676
|
-
this.flowInfoService = flowInfoService;
|
1677
|
-
this.updatedSubj$ = new Subject();
|
1678
|
-
this.updated$ = this.updatedSubj$.asObservable();
|
1679
|
-
}
|
1680
|
-
calculate$(quoteDraft) {
|
1681
|
-
return this.extendedApply$(quoteDraft).pipe(tap$1(result => {
|
1682
|
-
// sort the result current state based on the quote draft initial state
|
1683
|
-
const initialStateIds = quoteDraft.initialState.map(lineItem => lineItem.integrationId);
|
1684
|
-
result.currentState = result.currentState
|
1685
|
-
.slice()
|
1686
|
-
.sort((a, b) => initialStateIds.indexOf(a.integrationId) - initialStateIds.indexOf(b.integrationId));
|
1687
|
-
this.quoteDraftService.updateQuoteDraft(result);
|
1688
|
-
}), map$1(noop));
|
1689
|
-
}
|
1690
|
-
calculate(quoteDraft) {
|
1691
|
-
this.calculate$(quoteDraft).subscribe();
|
866
|
+
try {
|
867
|
+
result.selectors[key] = {
|
868
|
+
success: true,
|
869
|
+
result: this.executeSelectorScript(flowState, selector),
|
870
|
+
};
|
871
|
+
}
|
872
|
+
catch (e) {
|
873
|
+
console.error(e);
|
874
|
+
result.selectors[key] = {
|
875
|
+
success: false,
|
876
|
+
errorMessage: String(e),
|
877
|
+
};
|
878
|
+
}
|
879
|
+
return result;
|
880
|
+
}, { stateId: '', selectors: {} });
|
1692
881
|
}
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
882
|
+
initProcessors$() {
|
883
|
+
var _a;
|
884
|
+
const hasOverrides = Boolean((_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors);
|
885
|
+
if (this.flowInfoService.flow.properties.stateful && !hasOverrides) {
|
886
|
+
// Skip initialization as backend will take processors from SF
|
887
|
+
return of(undefined);
|
1697
888
|
}
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1702
|
-
|
1703
|
-
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1707
|
-
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1711
|
-
|
1712
|
-
|
1713
|
-
|
1714
|
-
if (!
|
1715
|
-
return of(
|
889
|
+
const owners$ = Object.values(this.flowInfoService.templates)
|
890
|
+
.map(template => {
|
891
|
+
var _a, _b, _c;
|
892
|
+
if (!template) {
|
893
|
+
return;
|
894
|
+
}
|
895
|
+
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);
|
896
|
+
return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap(processors => {
|
897
|
+
const processorsMap = processors.reduce((acc, p) => {
|
898
|
+
acc[p.apiName] = p;
|
899
|
+
return acc;
|
900
|
+
}, {});
|
901
|
+
this.processors[template.id] = processorsMap;
|
902
|
+
}));
|
903
|
+
})
|
904
|
+
.filter(isDefined);
|
905
|
+
if (!owners$.length) {
|
906
|
+
return of(undefined);
|
1716
907
|
}
|
1717
|
-
|
1718
|
-
updatedState.splice(currentLineItemIndex, 1, initialLineItem);
|
1719
|
-
return of([]).pipe(tap$1(() => {
|
1720
|
-
this.quoteDraftService.setCurrentLineItemState(updatedState);
|
1721
|
-
}), switchMap(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
908
|
+
return forkJoin(owners$).pipe(map(noop));
|
1722
909
|
}
|
1723
|
-
|
1724
|
-
|
1725
|
-
|
1726
|
-
|
1727
|
-
|
1728
|
-
|
1729
|
-
|
1730
|
-
return of(null);
|
910
|
+
executeActionScript(request, executable) {
|
911
|
+
var _a;
|
912
|
+
const configurationProcessor = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName];
|
913
|
+
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
914
|
+
const scope = this.getScopeByOwnerId(executable.ownerId);
|
915
|
+
const scopeText = scope ? ` in ${scope}` : '';
|
916
|
+
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
1731
917
|
}
|
1732
|
-
return
|
1733
|
-
}
|
1734
|
-
delete(ids) {
|
1735
|
-
this.delete$(ids).subscribe();
|
918
|
+
return this.executeProcessorScript(request, configurationProcessor, executable.inputData);
|
1736
919
|
}
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
920
|
+
executeSelectorScript(request, executable) {
|
921
|
+
var _a;
|
922
|
+
const configurationProcessor = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName];
|
923
|
+
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
924
|
+
const scope = this.getScopeByOwnerId(executable.ownerId);
|
925
|
+
const scopeText = scope ? ` in ${scope}` : '';
|
926
|
+
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
1741
927
|
}
|
1742
|
-
|
1743
|
-
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());
|
928
|
+
return this.executeProcessorScript(request, configurationProcessor, executable.inputData);
|
1744
929
|
}
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
930
|
+
executeProcessorScript(request, configurationProcessor, inputData) {
|
931
|
+
var _a;
|
932
|
+
const scope = this.getScopeByOwnerId((_a = configurationProcessor.ownerId) !== null && _a !== void 0 ? _a : '');
|
933
|
+
let functionToExecute = this.executedFunctions[scope + configurationProcessor.apiName];
|
934
|
+
if (!functionToExecute) {
|
935
|
+
const script = `${configurationProcessor.script}\nreturn transform;`;
|
936
|
+
const sourceMap = `\n//# sourceURL=${scope ? scope + '/' : ''}${configurationProcessor.apiName}.js`;
|
937
|
+
functionToExecute = new Function(script + sourceMap)();
|
938
|
+
this.executedFunctions[scope + configurationProcessor.apiName] = functionToExecute;
|
1749
939
|
}
|
1750
|
-
return
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
return [...quoteDraft.currentState, ...lineItems];
|
1756
|
-
}), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$1(() => this.quoteDraftService.quoteDraft), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
1757
|
-
}
|
1758
|
-
get() {
|
1759
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(() => this.quoteDraftService.currentState), shareReplay$1());
|
1760
|
-
}
|
1761
|
-
getSnapshot() {
|
1762
|
-
var _a, _b;
|
1763
|
-
return (_b = (_a = this.quoteDraftService) === null || _a === void 0 ? void 0 : _a.currentState.slice()) !== null && _b !== void 0 ? _b : [];
|
1764
|
-
}
|
1765
|
-
get charges$() {
|
1766
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(({ charges }) => charges));
|
1767
|
-
}
|
1768
|
-
get pricePlans$() {
|
1769
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(({ pricePlans }) => pricePlans));
|
1770
|
-
}
|
1771
|
-
get activeMetrics$() {
|
1772
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$1(({ activeMetrics }) => activeMetrics));
|
1773
|
-
}
|
1774
|
-
get chargesSnapshot() {
|
1775
|
-
var _a, _b;
|
1776
|
-
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.charges) !== null && _b !== void 0 ? _b : {};
|
1777
|
-
}
|
1778
|
-
get pricePlansSnapshot() {
|
1779
|
-
var _a, _b;
|
1780
|
-
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.pricePlans) !== null && _b !== void 0 ? _b : {};
|
1781
|
-
}
|
1782
|
-
get activeMetricsSnapshot() {
|
1783
|
-
var _a, _b;
|
1784
|
-
return (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.activeMetrics) !== null && _b !== void 0 ? _b : [];
|
1785
|
-
}
|
1786
|
-
get contextSnapshot() {
|
1787
|
-
return this.contextService.resolve();
|
1788
|
-
}
|
1789
|
-
get context$() {
|
1790
|
-
return this.contextService.resolve$();
|
940
|
+
return functionToExecute({
|
941
|
+
request,
|
942
|
+
inputData,
|
943
|
+
flowStore: this.flowStore,
|
944
|
+
});
|
1791
945
|
}
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
console.error(error);
|
1796
|
-
// bounce back if configuration call has failed
|
1797
|
-
const quoteDraft = this.quoteDraftService.quoteDraft;
|
1798
|
-
if (quoteDraft) {
|
1799
|
-
this.quoteDraftService.updateQuoteDraft(quoteDraft);
|
1800
|
-
this.updatedSubj$.next();
|
1801
|
-
}
|
1802
|
-
return throwError(() => error);
|
1803
|
-
}));
|
1804
|
-
};
|
946
|
+
generateRequestId(scope, selectorName, inputData) {
|
947
|
+
const inputDataHash = UUID.hex(JSON.stringify(inputData) || '').slice(0, 8);
|
948
|
+
return `${scope}/${selectorName}/${inputDataHash}`;
|
1805
949
|
}
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
950
|
+
checkStatefulChanges(requestId, selectorResult) {
|
951
|
+
if (this.trackedStatefulChangesMap.has(requestId)) {
|
952
|
+
if (!this.initialStatefulData[requestId]) {
|
953
|
+
this.initialStatefulData[requestId] = selectorResult;
|
954
|
+
}
|
955
|
+
const hasChanges = !isEqual(this.initialStatefulData[requestId], selectorResult);
|
956
|
+
this.trackedStatefulChangesMap.set(requestId, hasChanges);
|
1812
957
|
}
|
1813
|
-
return this.proceduresApiService.apply$(request);
|
1814
958
|
}
|
1815
959
|
}
|
1816
|
-
|
1817
|
-
|
1818
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
960
|
+
FlowStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, deps: [{ token: FlowConfigurationService }, { token: FlowInfoService }, { token: i3.FlowStateApiService }, { token: i1.ConfigurationProcessorsApiService }, { token: i1.SalesTransactionApiService }, { token: SalesTransactionService }, { token: i6.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
961
|
+
FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService });
|
962
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, decorators: [{
|
1819
963
|
type: Injectable
|
1820
|
-
}], ctorParameters: function () {
|
1821
|
-
|
1822
|
-
|
1823
|
-
}
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
type: NgModule,
|
1829
|
-
args: [{
|
1830
|
-
imports: [ApiModule],
|
1831
|
-
providers: [FlowConfigurationService, FlowUpdateService],
|
1832
|
-
}]
|
1833
|
-
}] });
|
964
|
+
}], ctorParameters: function () {
|
965
|
+
return [{ type: FlowConfigurationService }, { type: FlowInfoService }, { type: i3.FlowStateApiService }, { type: i1.ConfigurationProcessorsApiService }, { type: i1.SalesTransactionApiService }, { type: SalesTransactionService }, { type: i6.ToastService }, { type: undefined, decorators: [{
|
966
|
+
type: Optional
|
967
|
+
}, {
|
968
|
+
type: Inject,
|
969
|
+
args: [FLOW_CUSTOMIZATION]
|
970
|
+
}] }];
|
971
|
+
} });
|
1834
972
|
|
1835
973
|
class FlowStateConfigurationService {
|
1836
|
-
constructor(flowInfoService,
|
974
|
+
constructor(flowInfoService, flowStateService) {
|
1837
975
|
this.flowInfoService = flowInfoService;
|
1838
|
-
this.flowConfigurationService = flowConfigurationService;
|
1839
|
-
this.flowStateApiService = flowStateApiService;
|
1840
976
|
this.flowStateService = flowStateService;
|
1841
|
-
this.configurationStateId$ = new BehaviorSubject(null);
|
1842
|
-
}
|
1843
|
-
get configurationStateId() {
|
1844
|
-
return this.configurationStateId$.value;
|
1845
977
|
}
|
1846
978
|
addToCart$(props) {
|
1847
979
|
var _a;
|
@@ -1853,26 +985,22 @@ class FlowStateConfigurationService {
|
|
1853
985
|
request$ = of();
|
1854
986
|
}
|
1855
987
|
else {
|
1856
|
-
|
1857
|
-
request$ =
|
1858
|
-
if (!this.configurationStateId) {
|
1859
|
-
return of();
|
1860
|
-
}
|
1861
|
-
return this.flowStateApiService.saveConfiguration(stateId, this.configurationStateId).pipe(tap$1(() => this.configurationStateId$.next(null)), map$1(noop));
|
1862
|
-
}));
|
988
|
+
// TODO: Implement
|
989
|
+
request$ = of();
|
1863
990
|
}
|
1864
991
|
}
|
1865
992
|
else {
|
1866
|
-
|
993
|
+
// TODO: Implement
|
994
|
+
request$ = of();
|
1867
995
|
}
|
1868
|
-
return request$.pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map
|
996
|
+
return request$.pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map(noop));
|
1869
997
|
}
|
1870
998
|
}
|
1871
|
-
FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: FlowInfoService }, { token:
|
999
|
+
FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: FlowInfoService }, { token: FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1872
1000
|
FlowStateConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService });
|
1873
1001
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, decorators: [{
|
1874
1002
|
type: Injectable
|
1875
|
-
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type:
|
1003
|
+
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type: FlowStateService }]; } });
|
1876
1004
|
|
1877
1005
|
class IntegrationState {
|
1878
1006
|
constructor() {
|
@@ -1892,12 +1020,12 @@ class IntegrationState {
|
|
1892
1020
|
this.action$.next(action);
|
1893
1021
|
}
|
1894
1022
|
listen$(actionType) {
|
1895
|
-
return this.action$.pipe(filter
|
1023
|
+
return this.action$.pipe(filter(action => action.type === actionType), map(action => action.payload));
|
1896
1024
|
}
|
1897
1025
|
listenAll$() {
|
1898
1026
|
return this.action$.asObservable();
|
1899
1027
|
}
|
1900
|
-
|
1028
|
+
reset() {
|
1901
1029
|
this.stateSubj$.next({});
|
1902
1030
|
}
|
1903
1031
|
}
|
@@ -1908,8 +1036,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1908
1036
|
}] });
|
1909
1037
|
|
1910
1038
|
class ProductImagesService {
|
1911
|
-
constructor(
|
1912
|
-
this.
|
1039
|
+
constructor(productsAdminApiService) {
|
1040
|
+
this.productsAdminApiService = productsAdminApiService;
|
1913
1041
|
this.imagesMap$ = new BehaviorSubject({});
|
1914
1042
|
}
|
1915
1043
|
getImageUrl$(productId) {
|
@@ -1917,161 +1045,178 @@ class ProductImagesService {
|
|
1917
1045
|
this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
|
1918
1046
|
this.fetchProductImage(productId);
|
1919
1047
|
}
|
1920
|
-
return this.imagesMap$.pipe(map
|
1048
|
+
return this.imagesMap$.pipe(map(imagesMap => { var _a; return (_a = imagesMap[productId]) !== null && _a !== void 0 ? _a : null; }), distinctUntilChanged());
|
1921
1049
|
}
|
1922
1050
|
fetchProductImage(productId) {
|
1923
|
-
this.
|
1051
|
+
this.productsAdminApiService
|
1924
1052
|
.fetchImage$(productId)
|
1925
|
-
.pipe(map
|
1053
|
+
.pipe(map(file => URL.createObjectURL(file)), catchError(() => of('')), tap(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
|
1926
1054
|
.subscribe();
|
1927
1055
|
}
|
1928
1056
|
}
|
1929
|
-
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.
|
1057
|
+
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.ProductsAdminApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1930
1058
|
ProductImagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService });
|
1931
1059
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductImagesService, decorators: [{
|
1932
1060
|
type: Injectable
|
1933
|
-
}], ctorParameters: function () { return [{ type: i1.
|
1061
|
+
}], ctorParameters: function () { return [{ type: i1.ProductsAdminApiService }]; } });
|
1934
1062
|
|
1935
|
-
class
|
1936
|
-
constructor(
|
1937
|
-
this.
|
1938
|
-
|
1939
|
-
getRuntimeContext(productId, offeringId, defaultUIDefinitionId, requiredUIDefinitionId) {
|
1940
|
-
return this.configurationApiService
|
1941
|
-
.getRuntimeDataByProductId(productId, offeringId, defaultUIDefinitionId, requiredUIDefinitionId)
|
1942
|
-
.pipe(map(runtimeData => {
|
1943
|
-
var _a;
|
1944
|
-
const uiDefinitionContainer = this.getUIDefinitionContainer(runtimeData);
|
1945
|
-
const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
|
1946
|
-
const { productName, properties } = (_a = Array.from(runtimeModel.components.values()).find(c => c.productId === productId)) !== null && _a !== void 0 ? _a : {};
|
1947
|
-
const uiDefinitionProperties = uiDefinitionContainer === null || uiDefinitionContainer === void 0 ? void 0 : uiDefinitionContainer.source.properties;
|
1948
|
-
return {
|
1949
|
-
modelId: runtimeData.modelId,
|
1950
|
-
uiDefinitionContainer: uiDefinitionContainer,
|
1951
|
-
runtimeModel: runtimeModel,
|
1952
|
-
runtimeMode: RuntimeMode.PROD,
|
1953
|
-
productId: productId,
|
1954
|
-
productType: (properties === null || properties === void 0 ? void 0 : properties['displayName']) || productName,
|
1955
|
-
offeringId: offeringId,
|
1956
|
-
properties: {
|
1957
|
-
PricingEnabled: (uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.pricingEnabled) ? 'true' : 'false',
|
1958
|
-
PriceListId: uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.priceList,
|
1959
|
-
},
|
1960
|
-
};
|
1961
|
-
}));
|
1063
|
+
class CatalogProductsService {
|
1064
|
+
constructor() {
|
1065
|
+
this.stateSubj$ = new BehaviorSubject(null);
|
1066
|
+
this.state$ = this.stateSubj$.asObservable().pipe(filter(isDefined));
|
1962
1067
|
}
|
1963
|
-
|
1964
|
-
|
1965
|
-
|
1966
|
-
|
1068
|
+
get state() {
|
1069
|
+
return this.stateSubj$.getValue();
|
1070
|
+
}
|
1071
|
+
reset() {
|
1072
|
+
this.stateSubj$.next(null);
|
1073
|
+
}
|
1074
|
+
setState(state) {
|
1075
|
+
this.stateSubj$.next(state);
|
1967
1076
|
}
|
1968
1077
|
}
|
1969
|
-
|
1970
|
-
|
1971
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
1078
|
+
CatalogProductsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogProductsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
1079
|
+
CatalogProductsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogProductsService });
|
1080
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogProductsService, decorators: [{
|
1972
1081
|
type: Injectable
|
1973
|
-
}]
|
1082
|
+
}] });
|
1974
1083
|
|
1975
|
-
class
|
1976
|
-
|
1977
|
-
this.
|
1978
|
-
this.contextService = contextService;
|
1979
|
-
this.runtimeContextService = runtimeContextService;
|
1980
|
-
this._isInitialized = false;
|
1981
|
-
this.uiDefinitionProperties = {};
|
1084
|
+
class ConfigurationService {
|
1085
|
+
get state$() {
|
1086
|
+
return this.configurationStateSubj$.asObservable().pipe(filter$1(isDefined));
|
1982
1087
|
}
|
1983
|
-
|
1984
|
-
this.
|
1985
|
-
|
1986
|
-
|
1987
|
-
this.
|
1088
|
+
get state() {
|
1089
|
+
return this.configurationStateSubj$.getValue();
|
1090
|
+
}
|
1091
|
+
get previousState() {
|
1092
|
+
return this.previousConfigurationStateSubj$.getValue();
|
1093
|
+
}
|
1094
|
+
get root$() {
|
1095
|
+
return this.state$.pipe(map$1(state => state.salesTransaction.salesTransactionItems[0]), filter$1(isDefined));
|
1988
1096
|
}
|
1989
|
-
|
1097
|
+
get root() {
|
1990
1098
|
var _a, _b;
|
1991
|
-
|
1992
|
-
const uiDefinitionExternals = (_b = uiDefinitionContainer.source.externals) !== null && _b !== void 0 ? _b : {};
|
1993
|
-
return combineLatest([
|
1994
|
-
this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
|
1995
|
-
this.contextService.initTestMode(),
|
1996
|
-
]).pipe(first(), map(([runtimeData, context]) => {
|
1997
|
-
var _a;
|
1998
|
-
this.contextService.update({
|
1999
|
-
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),
|
2000
|
-
});
|
2001
|
-
this._runtimeContext = {
|
2002
|
-
modelId: uiDefinitionContainer.modelId,
|
2003
|
-
runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
|
2004
|
-
runtimeMode: RuntimeMode.TEST,
|
2005
|
-
uiDefinitionContainer,
|
2006
|
-
};
|
2007
|
-
return this._runtimeContext;
|
2008
|
-
}), tap(() => (this._isInitialized = true)));
|
1099
|
+
return (_b = (_a = this.configurationStateSubj$.getValue()) === null || _a === void 0 ? void 0 : _a.salesTransaction.salesTransactionItems[0]) !== null && _b !== void 0 ? _b : null;
|
2009
1100
|
}
|
2010
|
-
|
2011
|
-
this.
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2017
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
this._runtimeContext = mergeContext;
|
2022
|
-
if (context.properties && ((_d = this._runtimeContext.properties) === null || _d === void 0 ? void 0 : _d.StartDate)) {
|
2023
|
-
this.contextService.update({
|
2024
|
-
properties: Object.assign(Object.assign({}, this._runtimeContext.properties), context.properties),
|
2025
|
-
});
|
2026
|
-
}
|
2027
|
-
return this._runtimeContext;
|
2028
|
-
}), tap(() => (this._isInitialized = true)));
|
1101
|
+
constructor(flowInfoService, messageService, configurationRuntimeService, salesTransactionService, orchestrationsApiService) {
|
1102
|
+
this.flowInfoService = flowInfoService;
|
1103
|
+
this.messageService = messageService;
|
1104
|
+
this.configurationRuntimeService = configurationRuntimeService;
|
1105
|
+
this.salesTransactionService = salesTransactionService;
|
1106
|
+
this.orchestrationsApiService = orchestrationsApiService;
|
1107
|
+
this.hasUnsavedChanges = false;
|
1108
|
+
this.configurationStateSubj$ = new BehaviorSubject(null);
|
1109
|
+
this.previousConfigurationStateSubj$ = new BehaviorSubject(null);
|
1110
|
+
this.isLoadingSubj$ = new BehaviorSubject(false);
|
1111
|
+
this.isLoading$ = this.isLoadingSubj$.asObservable();
|
2029
1112
|
}
|
2030
|
-
|
1113
|
+
reset() {
|
1114
|
+
this.hasUnsavedChanges = false;
|
1115
|
+
this.configurationStateSubj$.next(null);
|
1116
|
+
this.previousConfigurationStateSubj$.next(null);
|
1117
|
+
}
|
1118
|
+
init$() {
|
2031
1119
|
var _a;
|
2032
|
-
|
2033
|
-
|
1120
|
+
const { state } = this.salesTransactionService;
|
1121
|
+
const { productId, transactionItemId } = this.flowInfoService.context;
|
1122
|
+
if (!state || !productId) {
|
1123
|
+
return of(undefined);
|
1124
|
+
}
|
1125
|
+
const salesTransactionItems = (_a = state === null || state === void 0 ? void 0 : state.salesTransaction.salesTransactionItems) !== null && _a !== void 0 ? _a : [];
|
1126
|
+
let isRootGenerated = false;
|
1127
|
+
let transactionItem = salesTransactionItems.find(item => item.id === transactionItemId);
|
1128
|
+
if (!transactionItem) {
|
1129
|
+
transactionItem = salesTransactionItems.find(item => item.productId === productId);
|
1130
|
+
}
|
1131
|
+
if (!transactionItem) {
|
1132
|
+
transactionItem = generateTransactionItem(productId);
|
1133
|
+
isRootGenerated = true;
|
2034
1134
|
}
|
2035
|
-
|
2036
|
-
|
1135
|
+
const configurationState = Object.assign(Object.assign({}, state), { salesTransaction: Object.assign(Object.assign({}, state.salesTransaction), { salesTransactionItems: transactionItem ? [transactionItem] : [] }) });
|
1136
|
+
return (isRootGenerated ? this.configureRequest$(configurationState) : of(configurationState)).pipe(tap$1(configurationState => {
|
1137
|
+
this.configurationStateSubj$.next(configurationState);
|
1138
|
+
this.previousConfigurationStateSubj$.next(configurationState);
|
1139
|
+
}), map$1(noop));
|
2037
1140
|
}
|
2038
|
-
|
2039
|
-
|
2040
|
-
|
1141
|
+
patch$(transactionItem) {
|
1142
|
+
const { state, root } = this;
|
1143
|
+
if (!state) {
|
1144
|
+
return throwError(() => new Error(`Configuration State is not initialized`));
|
2041
1145
|
}
|
2042
|
-
|
2043
|
-
|
2044
|
-
source[propertyName] = SalesforceIdUtils.generateId18FromId15(value);
|
1146
|
+
if (!root) {
|
1147
|
+
return throwError(() => new Error(`Root SalesTransactionItem not found`));
|
2045
1148
|
}
|
1149
|
+
const newRoot = new TransactionItemWorker(root).replace(transactionItem).ti;
|
1150
|
+
const newTransactionContext = Object.assign(Object.assign({}, state), { salesTransaction: Object.assign(Object.assign({}, state.salesTransaction), { salesTransactionItems: [newRoot] }) });
|
1151
|
+
return this.configureRequest$(newTransactionContext).pipe(catchError$1(error => {
|
1152
|
+
console.error(error);
|
1153
|
+
if (!this.configurationRuntimeService.uiDefinitionProps.suppressToastMessages) {
|
1154
|
+
this.messageService.add({ severity: 'error', summary: error });
|
1155
|
+
}
|
1156
|
+
return throwError(() => error);
|
1157
|
+
}), tap$1(() => {
|
1158
|
+
if (!this.hasUnsavedChanges) {
|
1159
|
+
this.hasUnsavedChanges = true;
|
1160
|
+
}
|
1161
|
+
}), map$1(noop));
|
2046
1162
|
}
|
2047
|
-
|
2048
|
-
|
1163
|
+
patch(transactionItem) {
|
1164
|
+
this.patch$(transactionItem).subscribe();
|
2049
1165
|
}
|
2050
|
-
|
2051
|
-
|
2052
|
-
|
1166
|
+
configureRequest$(transactionContext) {
|
1167
|
+
const request = {
|
1168
|
+
transactionContext,
|
1169
|
+
flowId: this.flowInfoService.flow.id,
|
1170
|
+
};
|
1171
|
+
this.isLoadingSubj$.next(true);
|
1172
|
+
return this.orchestrationsApiService.apply$(request).pipe(tap$1(result => {
|
1173
|
+
this.configurationStateSubj$.next(result);
|
1174
|
+
this.previousConfigurationStateSubj$.next(cloneDeep(result));
|
1175
|
+
}), catchError$1(error => throwError(() => {
|
1176
|
+
const resetState = this.previousConfigurationStateSubj$.getValue();
|
1177
|
+
if (resetState) {
|
1178
|
+
this.previousConfigurationStateSubj$.next(cloneDeep(resetState));
|
1179
|
+
this.configurationStateSubj$.next(resetState);
|
1180
|
+
}
|
1181
|
+
if (error.error) {
|
1182
|
+
return extractErrorDetails(error.error).join('. ');
|
1183
|
+
}
|
1184
|
+
return error.message || JSON.stringify(error);
|
1185
|
+
})), finalize$1(() => this.isLoadingSubj$.next(false)));
|
1186
|
+
}
|
1187
|
+
configureExternal$(props) {
|
1188
|
+
// TODO: implement
|
1189
|
+
throw new Error('Not implemented');
|
2053
1190
|
}
|
2054
|
-
|
2055
|
-
|
1191
|
+
configureGuidedSelling$(data) {
|
1192
|
+
// TODO: implement
|
1193
|
+
throw new Error('Not implemented');
|
1194
|
+
}
|
1195
|
+
getPCMModel() {
|
1196
|
+
const pcmModel = this.configurationRuntimeService.pcmModel;
|
1197
|
+
if (!pcmModel) {
|
1198
|
+
throw new Error('PCM model not initialized');
|
1199
|
+
}
|
1200
|
+
return pcmModel;
|
2056
1201
|
}
|
2057
1202
|
}
|
2058
|
-
|
2059
|
-
|
2060
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
1203
|
+
ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, deps: [{ token: FlowInfoService }, { token: i2.MessageService }, { token: ConfigurationRuntimeService }, { token: SalesTransactionService }, { token: i1.OrchestrationsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1204
|
+
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService });
|
1205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, decorators: [{
|
2061
1206
|
type: Injectable
|
2062
|
-
}], ctorParameters: function () { return [{ type:
|
1207
|
+
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i2.MessageService }, { type: ConfigurationRuntimeService }, { type: SalesTransactionService }, { type: i1.OrchestrationsApiService }]; } });
|
2063
1208
|
|
2064
1209
|
class ConfigurationStateService {
|
2065
|
-
constructor(configurationRuntimeService, configurationService,
|
1210
|
+
constructor(configurationRuntimeService, configurationService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService, salesTransactionService, salesTransactionApiService, toastService) {
|
2066
1211
|
this.configurationRuntimeService = configurationRuntimeService;
|
2067
1212
|
this.configurationService = configurationService;
|
2068
|
-
this.quoteDraftService = quoteDraftService;
|
2069
|
-
this.toastService = toastService;
|
2070
1213
|
this.flowStateService = flowStateService;
|
2071
1214
|
this.flowInfoService = flowInfoService;
|
2072
1215
|
this.flowConfigurationService = flowConfigurationService;
|
2073
1216
|
this.flowStateApiService = flowStateApiService;
|
2074
|
-
this.
|
1217
|
+
this.salesTransactionService = salesTransactionService;
|
1218
|
+
this.salesTransactionApiService = salesTransactionApiService;
|
1219
|
+
this.toastService = toastService;
|
2075
1220
|
this.isInitialized$ = new BehaviorSubject(false);
|
2076
1221
|
this.canceledConfiguration$ = new Subject();
|
2077
1222
|
this.NOT_INITIALIZED = Symbol();
|
@@ -2095,9 +1240,9 @@ class ConfigurationStateService {
|
|
2095
1240
|
request$ = this.initStateful$();
|
2096
1241
|
}
|
2097
1242
|
else {
|
2098
|
-
request$ = this.
|
1243
|
+
request$ = this.configurationService.init$();
|
2099
1244
|
}
|
2100
|
-
return request$.pipe(
|
1245
|
+
return request$.pipe(take(1), tap(() => {
|
2101
1246
|
this.isInitialized$.next(true);
|
2102
1247
|
this.canceledConfiguration$ = new Subject();
|
2103
1248
|
}));
|
@@ -2111,10 +1256,11 @@ class ConfigurationStateService {
|
|
2111
1256
|
this.configurationStore = {};
|
2112
1257
|
this.executedFunctions = {};
|
2113
1258
|
this.configurationService.reset();
|
1259
|
+
this.configurationRuntimeService.reset();
|
2114
1260
|
}
|
2115
1261
|
execute$(exec) {
|
2116
1262
|
const request = this.execToRequest(exec);
|
2117
|
-
return this.executeRequest$(request).pipe(map
|
1263
|
+
return this.executeRequest$(request).pipe(map(result => {
|
2118
1264
|
// Keep only requested results
|
2119
1265
|
const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
|
2120
1266
|
var _a;
|
@@ -2137,7 +1283,7 @@ class ConfigurationStateService {
|
|
2137
1283
|
}
|
2138
1284
|
// prevent parallel configuration requests in stateless mode
|
2139
1285
|
if (!this.statelessExecutionRequest$) {
|
2140
|
-
this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay
|
1286
|
+
this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay(), take(1), finalize(() => (this.statelessExecutionRequest$ = null)));
|
2141
1287
|
}
|
2142
1288
|
return this.statelessExecutionRequest$;
|
2143
1289
|
}
|
@@ -2151,7 +1297,7 @@ class ConfigurationStateService {
|
|
2151
1297
|
},
|
2152
1298
|
},
|
2153
1299
|
});
|
2154
|
-
return this.executeRequest$(request).pipe(map
|
1300
|
+
return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
|
2155
1301
|
}
|
2156
1302
|
subscribe$(selectorName, inputData = {}, options) {
|
2157
1303
|
const requestId = UUID.UUID();
|
@@ -2174,58 +1320,42 @@ class ConfigurationStateService {
|
|
2174
1320
|
this.executeRequest$(request).subscribe();
|
2175
1321
|
}
|
2176
1322
|
}
|
2177
|
-
return subscription.data$.pipe(filter
|
1323
|
+
return subscription.data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), distinctUntilChanged(), finalize(() => {
|
2178
1324
|
var _a;
|
2179
1325
|
if (!((_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$.observed)) {
|
2180
1326
|
delete this.subscriptions[requestId];
|
2181
1327
|
}
|
2182
1328
|
}), takeUntil(this.canceledConfiguration$));
|
2183
1329
|
}
|
2184
|
-
saveConfiguration(
|
2185
|
-
var _a, _b
|
1330
|
+
saveConfiguration() {
|
1331
|
+
var _a, _b;
|
2186
1332
|
if (this.isStatefulConfiguration) {
|
2187
|
-
return this.flowStateApiService
|
2188
|
-
|
2189
|
-
|
1333
|
+
return this.flowStateApiService.saveConfiguration((_a = this.flowStateService.stateId) !== null && _a !== void 0 ? _a : '', (_b = this.stateId) !== null && _b !== void 0 ? _b : '').pipe(switchMap(r => this.flowStateService.executeRequest$({}, true).pipe(map(() => r))), map(r => ({ id: r.quoteId })));
|
1334
|
+
}
|
1335
|
+
const state = this.salesTransactionService.state;
|
1336
|
+
if (!state) {
|
1337
|
+
return of({ id: '' });
|
1338
|
+
}
|
1339
|
+
const { standalone } = this.flowInfoService.flow.properties;
|
1340
|
+
if (standalone) {
|
1341
|
+
return this.salesTransactionApiService.upsert(state);
|
1342
|
+
}
|
1343
|
+
const transactionContext = this.salesTransactionService.state;
|
1344
|
+
const configurationRoot = this.configurationService.root;
|
1345
|
+
if (!transactionContext || !configurationRoot) {
|
1346
|
+
return of({ id: '' });
|
1347
|
+
}
|
1348
|
+
const stateItems = transactionContext.salesTransaction.salesTransactionItems;
|
1349
|
+
const isNewTransactionItem = stateItems.every(ti => ti.id !== configurationRoot.id);
|
1350
|
+
let salesTransactionItems;
|
1351
|
+
if (isNewTransactionItem) {
|
1352
|
+
salesTransactionItems = [...stateItems, configurationRoot];
|
2190
1353
|
}
|
2191
1354
|
else {
|
2192
|
-
|
2193
|
-
const quoteDraft = this.quoteDraftService.quoteDraft;
|
2194
|
-
if (!quoteDraft) {
|
2195
|
-
return of({ quoteId: '' });
|
2196
|
-
}
|
2197
|
-
const rootLineItem = this.configurationService.getSnapshot();
|
2198
|
-
const asset = this.configurationService.getAsset();
|
2199
|
-
const currentState = rootLineItem ? [rootLineItem] : [];
|
2200
|
-
const initialState = asset ? [asset] : [];
|
2201
|
-
return this.quoteApiService.upsertQuote(Object.assign(Object.assign({}, quoteDraft), { currentState, initialState }));
|
2202
|
-
}
|
2203
|
-
else {
|
2204
|
-
const quoteDraft = this.quoteDraftService.quoteDraft;
|
2205
|
-
const lineItem = this.configurationService.getSnapshot();
|
2206
|
-
if (!quoteDraft || !lineItem) {
|
2207
|
-
return of({ quoteId: '' });
|
2208
|
-
}
|
2209
|
-
const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
|
2210
|
-
let currentState;
|
2211
|
-
if (isNewLineItem) {
|
2212
|
-
currentState = [...quoteDraft.currentState, lineItem];
|
2213
|
-
}
|
2214
|
-
else {
|
2215
|
-
currentState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
|
2216
|
-
}
|
2217
|
-
const asset = this.configurationService.getAsset();
|
2218
|
-
const initialState = [...((_d = (_c = this.quoteDraftService.quoteDraft) === null || _c === void 0 ? void 0 : _c.initialState) !== null && _d !== void 0 ? _d : [])];
|
2219
|
-
if (asset) {
|
2220
|
-
if (!initialState.some(li => li.id === asset.id)) {
|
2221
|
-
initialState.push(asset);
|
2222
|
-
}
|
2223
|
-
}
|
2224
|
-
return this.flowConfigurationService
|
2225
|
-
.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState, initialState }))
|
2226
|
-
.pipe(map$1(() => ({ quoteId: '' })));
|
2227
|
-
}
|
1355
|
+
salesTransactionItems = stateItems.map(ti => (ti.id === configurationRoot.id ? configurationRoot : ti));
|
2228
1356
|
}
|
1357
|
+
const newState = Object.assign(Object.assign({}, transactionContext), { salesTransaction: Object.assign(Object.assign({}, transactionContext.salesTransaction), { salesTransactionItems }) });
|
1358
|
+
return this.flowConfigurationService.calculate$(newState).pipe(map(() => ({ id: '' })));
|
2229
1359
|
}
|
2230
1360
|
cancelConfiguration() {
|
2231
1361
|
var _a, _b;
|
@@ -2246,37 +1376,33 @@ class ConfigurationStateService {
|
|
2246
1376
|
return (_b = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful) !== null && _b !== void 0 ? _b : false;
|
2247
1377
|
}
|
2248
1378
|
initStateful$() {
|
2249
|
-
var _a, _b, _c, _d, _e, _f
|
2250
|
-
this.ownerId = (
|
2251
|
-
const
|
2252
|
-
if (!this.flowStateService.stateId) {
|
1379
|
+
var _a, _b, _c, _d, _e, _f;
|
1380
|
+
this.ownerId = (_b = (_a = this.configurationRuntimeService.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : '';
|
1381
|
+
const { productId, transactionItemId } = this.flowInfoService.context;
|
1382
|
+
if (!productId || !this.flowStateService.stateId) {
|
2253
1383
|
return of(undefined);
|
2254
1384
|
}
|
2255
|
-
const container =
|
2256
|
-
const lineItem = this.configurationService.generateLineItem();
|
1385
|
+
const container = this.configurationRuntimeService.uiDefinitionContainer;
|
2257
1386
|
let request$;
|
2258
|
-
if (!
|
1387
|
+
if (!transactionItemId) {
|
2259
1388
|
request$ = this.flowStateApiService.newConfiguration(this.flowStateService.stateId, {
|
2260
|
-
|
2261
|
-
actionsOverride: (
|
2262
|
-
selectorsOverride: (
|
1389
|
+
transactionItem: generateTransactionItem(productId),
|
1390
|
+
actionsOverride: (_c = container === null || container === void 0 ? void 0 : container.actions) === null || _c === void 0 ? void 0 : _c.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
|
1391
|
+
selectorsOverride: (_d = container === null || container === void 0 ? void 0 : container.selectors) === null || _d === void 0 ? void 0 : _d.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
|
2263
1392
|
});
|
2264
1393
|
}
|
2265
1394
|
else {
|
2266
1395
|
request$ = this.flowStateApiService.startConfiguration(this.flowStateService.stateId, {
|
2267
|
-
|
2268
|
-
actionsOverride: (
|
2269
|
-
selectorsOverride: (
|
1396
|
+
transactionItemId,
|
1397
|
+
actionsOverride: (_e = container === null || container === void 0 ? void 0 : container.actions) === null || _e === void 0 ? void 0 : _e.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
|
1398
|
+
selectorsOverride: (_f = container === null || container === void 0 ? void 0 : container.selectors) === null || _f === void 0 ? void 0 : _f.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
|
2270
1399
|
});
|
2271
1400
|
}
|
2272
|
-
return request$.pipe(map
|
1401
|
+
return request$.pipe(map(r => {
|
2273
1402
|
this.stateId = r.stateId;
|
2274
1403
|
return undefined;
|
2275
1404
|
}));
|
2276
1405
|
}
|
2277
|
-
initStateless$() {
|
2278
|
-
return this.configurationService.configure().pipe(map$1(() => undefined));
|
2279
|
-
}
|
2280
1406
|
execToRequest(exec) {
|
2281
1407
|
var _a;
|
2282
1408
|
return {
|
@@ -2322,39 +1448,37 @@ class ConfigurationStateService {
|
|
2322
1448
|
else {
|
2323
1449
|
execution$ = this.executeStateless$(fullRequest);
|
2324
1450
|
}
|
2325
|
-
return execution$.pipe(tap
|
1451
|
+
return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
|
2326
1452
|
}
|
2327
1453
|
executeStateless$(request) {
|
2328
1454
|
this.executionInProgress$.next(true);
|
2329
|
-
return
|
1455
|
+
return this.configurationService.state$.pipe(first(), switchMap(state => {
|
2330
1456
|
var _a;
|
2331
1457
|
// Apply actions and execute configuration/price call
|
2332
1458
|
// No need to run configuration if no actions in the request
|
2333
1459
|
if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
|
2334
1460
|
return of(undefined);
|
2335
1461
|
}
|
2336
|
-
let configurationRequest = this.configurationService.generateRequest(false);
|
2337
1462
|
request.actions.forEach(action => {
|
2338
1463
|
var _a;
|
2339
|
-
|
1464
|
+
state = (_a = this.executeActionScript(state, action)) !== null && _a !== void 0 ? _a : state;
|
2340
1465
|
});
|
2341
|
-
|
2342
|
-
|
2343
|
-
}), map$1(() => {
|
1466
|
+
return this.configurationService.configureRequest$(state);
|
1467
|
+
}), map(() => {
|
2344
1468
|
// Run selectors and apply them to the state
|
2345
|
-
const configurationState = this.configurationService.
|
1469
|
+
const configurationState = this.configurationService.state;
|
2346
1470
|
if (!configurationState) {
|
2347
1471
|
return { stateId: '', selectors: {} };
|
2348
1472
|
}
|
2349
1473
|
return this.runStatelessSelectors(request, configurationState);
|
2350
|
-
}), tap
|
2351
|
-
const configurationState = this.configurationService.
|
1474
|
+
}), tap(() => this.executionInProgress$.next(false)), catchError(error => {
|
1475
|
+
const configurationState = this.configurationService.previousState;
|
2352
1476
|
if (configurationState) {
|
2353
1477
|
const selectorsResult = this.runStatelessSelectors(request, configurationState);
|
2354
1478
|
this.handleSelectorsResponse(selectorsResult.selectors);
|
2355
1479
|
}
|
2356
1480
|
this.executionInProgress$.next(false);
|
2357
|
-
if (!this.configurationRuntimeService.
|
1481
|
+
if (!this.configurationRuntimeService.uiDefinitionProps.suppressToastMessages) {
|
2358
1482
|
this.toastService.add({ severity: ToastType.error, summary: String(error) });
|
2359
1483
|
}
|
2360
1484
|
return throwError(() => error);
|
@@ -2375,22 +1499,22 @@ class ConfigurationStateService {
|
|
2375
1499
|
};
|
2376
1500
|
this.executionInProgress$.next(true);
|
2377
1501
|
return this.flowStateApiService.executeConfiguration(this.flowStateService.stateId, this.stateId, request);
|
2378
|
-
}), tap
|
1502
|
+
}), tap(({ stateId }) => (this.stateId = stateId)), share(), tap(() => this.executionInProgress$.next(false)), catchError(e => {
|
2379
1503
|
this.executionInProgress$.next(false);
|
2380
1504
|
return throwError(() => e);
|
2381
1505
|
}));
|
2382
1506
|
}
|
2383
1507
|
executeStateful$(request) {
|
2384
|
-
return this.executionInProgress$.pipe(filter
|
1508
|
+
return this.executionInProgress$.pipe(filter(inProgress => !inProgress), take(1), switchMap(() =>
|
2385
1509
|
// make sure stream switches to statefulExecutionRequest$ before pushing an execution request
|
2386
1510
|
combineLatest([
|
2387
1511
|
this.statefulExecutionRequest$,
|
2388
|
-
of(undefined).pipe(tap
|
2389
|
-
])), map
|
1512
|
+
of(undefined).pipe(tap(() => this.statefulRequestStream$.next(request))),
|
1513
|
+
])), map(([response]) => response), take(1));
|
2390
1514
|
}
|
2391
1515
|
executeActionScript(request, processor) {
|
2392
|
-
var _a
|
2393
|
-
const { actions } = (
|
1516
|
+
var _a;
|
1517
|
+
const { actions } = (_a = this.configurationRuntimeService.uiDefinitionContainer) !== null && _a !== void 0 ? _a : {};
|
2394
1518
|
const configurationProcessor = actions === null || actions === void 0 ? void 0 : actions.find(action => action.apiName === processor.apiName);
|
2395
1519
|
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
2396
1520
|
throw `ConfigurationProcessor ${processor.apiName} not found`;
|
@@ -2398,8 +1522,8 @@ class ConfigurationStateService {
|
|
2398
1522
|
return this.executeProcessorScript(request, configurationProcessor, processor.inputData);
|
2399
1523
|
}
|
2400
1524
|
executeSelectorScript(request, processor) {
|
2401
|
-
var _a
|
2402
|
-
const { selectors } = (
|
1525
|
+
var _a;
|
1526
|
+
const { selectors } = (_a = this.configurationRuntimeService.uiDefinitionContainer) !== null && _a !== void 0 ? _a : {};
|
2403
1527
|
const configurationProcessor = selectors === null || selectors === void 0 ? void 0 : selectors.find(selector => selector.apiName === processor.apiName);
|
2404
1528
|
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
2405
1529
|
throw `ConfigurationProcessor ${processor.apiName} not found`;
|
@@ -2441,25 +1565,52 @@ class ConfigurationStateService {
|
|
2441
1565
|
}, { stateId: '', selectors: {} });
|
2442
1566
|
}
|
2443
1567
|
}
|
2444
|
-
ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: ConfigurationRuntimeService }, { token: ConfigurationService }, { token:
|
1568
|
+
ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: ConfigurationRuntimeService }, { token: ConfigurationService }, { token: FlowStateService }, { token: FlowInfoService }, { token: FlowConfigurationService }, { token: i3.FlowStateApiService }, { token: SalesTransactionService }, { token: i1.SalesTransactionApiService }, { token: i6.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
|
2445
1569
|
ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService });
|
2446
1570
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
|
2447
1571
|
type: Injectable
|
2448
|
-
}], ctorParameters: function () { return [{ type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type:
|
1572
|
+
}], ctorParameters: function () { return [{ type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type: FlowStateService }, { type: FlowInfoService }, { type: FlowConfigurationService }, { type: i3.FlowStateApiService }, { type: SalesTransactionService }, { type: i1.SalesTransactionApiService }, { type: i6.ToastService }]; } });
|
2449
1573
|
|
2450
1574
|
class ConfigurationModule {
|
2451
1575
|
}
|
2452
1576
|
ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
2453
1577
|
ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, imports: [ConfirmationDialogModule, ApiModule] });
|
2454
|
-
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [
|
1578
|
+
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [
|
1579
|
+
ConfigurationService,
|
1580
|
+
ConfigurationStateService,
|
1581
|
+
ConfigurationRuntimeService,
|
1582
|
+
TestModeConfigurationService,
|
1583
|
+
], imports: [ConfirmationDialogModule, ApiModule] });
|
2455
1584
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, decorators: [{
|
2456
1585
|
type: NgModule,
|
2457
1586
|
args: [{
|
2458
1587
|
imports: [ConfirmationDialogModule, ApiModule],
|
2459
|
-
providers: [
|
1588
|
+
providers: [
|
1589
|
+
ConfigurationService,
|
1590
|
+
ConfigurationStateService,
|
1591
|
+
ConfigurationRuntimeService,
|
1592
|
+
TestModeConfigurationService,
|
1593
|
+
],
|
1594
|
+
}]
|
1595
|
+
}] });
|
1596
|
+
|
1597
|
+
class FlowConfigurationModule {
|
1598
|
+
}
|
1599
|
+
FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
1600
|
+
FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, imports: [ApiModule] });
|
1601
|
+
FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService], imports: [ApiModule] });
|
1602
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, decorators: [{
|
1603
|
+
type: NgModule,
|
1604
|
+
args: [{
|
1605
|
+
imports: [ApiModule],
|
1606
|
+
providers: [FlowConfigurationService],
|
2460
1607
|
}]
|
2461
1608
|
}] });
|
2462
1609
|
|
1610
|
+
const FORMATTING_SETTINGS_TOKEN = new InjectionToken('Summary of formatting settings for variant types of data, e.g. numbers, text, dates, etc');
|
1611
|
+
|
1612
|
+
const UI_DEFINITION_VERSION = 3;
|
1613
|
+
|
2463
1614
|
const DEFAULT_FORMATTING_SETTINGS = {
|
2464
1615
|
currencySymbol: DEFAULT_CURRENCY_SYMBOL,
|
2465
1616
|
decimalsCount: DEFAULT_DECIMALS_COUNT,
|
@@ -2473,14 +1624,14 @@ class SdkCoreModule {
|
|
2473
1624
|
SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
2474
1625
|
SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, imports: [ConfigurationModule, FlowConfigurationModule] });
|
2475
1626
|
SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, providers: [
|
2476
|
-
ContextService,
|
2477
1627
|
FlowInfoService,
|
2478
|
-
QuoteDraftService,
|
2479
1628
|
ProductImagesService,
|
2480
1629
|
IntegrationState,
|
2481
1630
|
FlowStateService,
|
2482
1631
|
FlowStateConfigurationService,
|
2483
1632
|
RuntimeSettingsService,
|
1633
|
+
SalesTransactionService,
|
1634
|
+
CatalogProductsService,
|
2484
1635
|
{
|
2485
1636
|
provide: FORMATTING_SETTINGS_TOKEN,
|
2486
1637
|
useExisting: RuntimeSettingsService,
|
@@ -2491,14 +1642,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
2491
1642
|
args: [{
|
2492
1643
|
imports: [ConfigurationModule, FlowConfigurationModule],
|
2493
1644
|
providers: [
|
2494
|
-
ContextService,
|
2495
1645
|
FlowInfoService,
|
2496
|
-
QuoteDraftService,
|
2497
1646
|
ProductImagesService,
|
2498
1647
|
IntegrationState,
|
2499
1648
|
FlowStateService,
|
2500
1649
|
FlowStateConfigurationService,
|
2501
1650
|
RuntimeSettingsService,
|
1651
|
+
SalesTransactionService,
|
1652
|
+
CatalogProductsService,
|
2502
1653
|
{
|
2503
1654
|
provide: FORMATTING_SETTINGS_TOKEN,
|
2504
1655
|
useExisting: RuntimeSettingsService,
|
@@ -2556,6 +1707,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
2556
1707
|
}]
|
2557
1708
|
}] });
|
2558
1709
|
|
1710
|
+
function filterSuccessfulExecute() {
|
1711
|
+
return (source) => source.pipe(filter((result) => result.success), map(r => r.result));
|
1712
|
+
}
|
1713
|
+
|
2559
1714
|
class DatePipe {
|
2560
1715
|
constructor() {
|
2561
1716
|
var _a;
|
@@ -2683,5 +1838,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
2683
1838
|
* Generated bundle index. Do not edit.
|
2684
1839
|
*/
|
2685
1840
|
|
2686
|
-
export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService,
|
1841
|
+
export { ActionCodePipe, CalendarDirective, CatalogProductsService, ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, IntegrationState, NumberPipe, PricePipe, ProductImagesService, RuntimeSettingsService, SalesTransactionService, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, TestModeConfigurationService, TransactionItemWorker, UI_DEFINITION_VERSION, extractMetadata, filterSuccessfulExecute, findTransactionItem, findTransactionItemWithComparator, generateTransactionItem, insertTransactionItem, removeTransactionItem, replaceTransactionItem };
|
2687
1842
|
//# sourceMappingURL=veloceapps-sdk-core.mjs.map
|