@veloceapps/sdk 11.0.0-2 → 11.0.0-21
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/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 +19 -40
- package/core/index.d.ts +0 -1
- package/core/modules/configuration/index.d.ts +1 -4
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +3 -22
- 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/flow-configuration/index.d.ts +0 -3
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +10 -39
- package/core/services/catalog-products.service.d.ts +11 -0
- package/core/services/flow-info.service.d.ts +25 -11
- 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 +2 -3
- package/core/services/integration.state.d.ts +1 -1
- package/core/services/sales-transaction.service.d.ts +30 -0
- 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/preview/preview.component.mjs +3 -3
- 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/path.utils.mjs +1 -10
- package/esm2020/cms/vendor-map.mjs +12 -17
- package/esm2020/core/core.module.mjs +9 -7
- package/esm2020/core/index.mjs +1 -2
- package/esm2020/core/modules/configuration/configuration.module.mjs +3 -4
- package/esm2020/core/modules/configuration/index.mjs +2 -5
- package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +9 -102
- package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +60 -76
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +96 -225
- 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 +33 -126
- package/esm2020/core/services/catalog-products.service.mjs +25 -0
- package/esm2020/core/services/flow-info.service.mjs +77 -29
- package/esm2020/core/services/flow-state-configuration.service.mjs +10 -25
- package/esm2020/core/services/flow-state.service.mjs +62 -169
- package/esm2020/core/services/index.mjs +3 -4
- package/esm2020/core/services/integration.state.mjs +2 -2
- package/esm2020/core/services/sales-transaction.service.mjs +68 -0
- 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 +3 -7
- package/esm2020/src/components/guided-selling/guided-selling.component.mjs +3 -7
- package/esm2020/src/flow-routing.module.mjs +11 -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 +3 -4
- package/esm2020/src/pages/catalog/catalog.component.mjs +3 -4
- package/esm2020/src/pages/debug/debug.component.mjs +12 -21
- package/esm2020/src/pages/product/product.component.mjs +12 -82
- 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 +3 -4
- package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
- package/esm2020/src/resolvers/sales-transaction.resolver.mjs +83 -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 +126 -268
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk-core.mjs +712 -1644
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +167 -763
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +114 -262
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +758 -1725
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +167 -757
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/flow-header/flow-header.component.d.ts +1 -1
- package/src/components/guided-selling/guided-selling.component.d.ts +1 -1
- 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 +1 -1
- package/src/pages/catalog/catalog.component.d.ts +1 -1
- package/src/pages/debug/debug.component.d.ts +1 -4
- 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 +1 -1
- package/src/resolvers/flow.resolver.d.ts +5 -6
- 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/configuration/types/configuration-runtime.types.d.ts +0 -6
- 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 -43
- package/esm2020/core/modules/configuration/types/configuration-runtime.types.mjs +0 -2
- 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,304 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { BehaviorSubject, switchMap, map as map$1, tap as tap$1, noop, catchError, throwError, forkJoin, of, zip, combineLatest, Subject, filter as filter$1, shareReplay as shareReplay$1, finalize, takeUntil, buffer, debounceTime, share, take as take$1, distinctUntilChanged } from 'rxjs';
|
|
5
|
-
import { map, filter, tap, switchMap as switchMap$1, skip, take, shareReplay, catchError as catchError$1, finalize as finalize$1, first } from 'rxjs/operators';
|
|
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';
|
|
6
4
|
import * as i1 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 * as
|
|
7
|
+
import { ToastType, ConfirmationDialogModule } from '@veloceapps/components';
|
|
8
|
+
import { flatten, omit, uniqBy, cloneDeep, assign, isEqual } from 'lodash';
|
|
9
|
+
import { BehaviorSubject, map, tap, switchMap, of, forkJoin, filter, Subject, noop, catchError, throwError, combineLatest, finalize, buffer, debounceTime, share, take, distinctUntilChanged, shareReplay, takeUntil } from 'rxjs';
|
|
10
|
+
import { filter as filter$1, map as map$1, catchError as catchError$1, tap as tap$1, finalize as finalize$1 } from 'rxjs/operators';
|
|
11
|
+
import * as i4 from '@veloceapps/api/v2';
|
|
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() {
|
|
18
|
+
this.uiDefinitionContainer = null;
|
|
19
|
+
}
|
|
20
|
+
get uiDefinitionProps() {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
return (_b = (_a = this.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {};
|
|
23
|
+
}
|
|
24
|
+
reset() {
|
|
25
|
+
this.uiDefinitionContainer = null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
29
|
+
ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
|
|
31
|
+
type: Injectable
|
|
32
|
+
}] });
|
|
33
|
+
|
|
34
|
+
const findTransactionItem = (id, items) => {
|
|
35
|
+
return findTransactionItemWithComparator(items, (ti) => ti.id === id);
|
|
26
36
|
};
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
const findTransactionItemWithComparator = (items, comparator) => {
|
|
38
|
+
let currentLevel = items;
|
|
39
|
+
while (currentLevel.length) {
|
|
40
|
+
const found = currentLevel.find(comparator);
|
|
41
|
+
if (found) {
|
|
42
|
+
return found;
|
|
43
|
+
}
|
|
44
|
+
currentLevel = flatten(currentLevel.map(parent => parent.children));
|
|
45
|
+
}
|
|
46
|
+
return;
|
|
47
|
+
};
|
|
48
|
+
const insertTransactionItem = (item, parentId, toInsert) => {
|
|
49
|
+
const insertData = item.id === parentId ? [toInsert] : [];
|
|
50
|
+
return Object.assign(Object.assign({}, item), { children: [
|
|
51
|
+
...insertData,
|
|
52
|
+
...item.children.map(ti => {
|
|
53
|
+
return insertTransactionItem(ti, parentId, toInsert);
|
|
54
|
+
}),
|
|
55
|
+
] });
|
|
56
|
+
};
|
|
57
|
+
const removeTransactionItem = (item, idToRemove) => {
|
|
58
|
+
return Object.assign(Object.assign({}, item), { children: item.children
|
|
59
|
+
.map(ti => {
|
|
60
|
+
if (ti.id === idToRemove) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
else if (ti.children.length) {
|
|
64
|
+
return removeTransactionItem(ti, idToRemove);
|
|
65
|
+
}
|
|
66
|
+
return ti;
|
|
67
|
+
})
|
|
68
|
+
.filter(isDefined) });
|
|
50
69
|
};
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}));
|
|
59
|
-
const lineItems = [];
|
|
70
|
+
const replaceTransactionItem = (item, replaceTo) => {
|
|
71
|
+
if (item.id === replaceTo.id) {
|
|
72
|
+
return Object.assign({}, replaceTo);
|
|
73
|
+
}
|
|
74
|
+
return Object.assign(Object.assign({}, item), { children: item.children.map(ti => replaceTransactionItem(ti, replaceTo)) });
|
|
75
|
+
};
|
|
76
|
+
const generateTransactionItem = (productId) => {
|
|
60
77
|
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 : '',
|
|
78
|
+
id: UUID.UUID(),
|
|
79
|
+
productId,
|
|
70
80
|
};
|
|
71
81
|
};
|
|
72
82
|
|
|
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);
|
|
83
|
+
class TransactionItemWorker {
|
|
84
|
+
constructor(src) {
|
|
85
|
+
this.ti = Object.assign({}, src);
|
|
99
86
|
}
|
|
100
|
-
|
|
101
|
-
return
|
|
87
|
+
insert(parentId, toInsert) {
|
|
88
|
+
return new TransactionItemWorker(insertTransactionItem(this.ti, parentId, toInsert));
|
|
102
89
|
}
|
|
103
|
-
|
|
104
|
-
return this.
|
|
90
|
+
remove(id) {
|
|
91
|
+
return new TransactionItemWorker(removeTransactionItem(this.ti, id));
|
|
92
|
+
}
|
|
93
|
+
replace(toReplace) {
|
|
94
|
+
return new TransactionItemWorker(replaceTransactionItem(this.ti, toReplace));
|
|
105
95
|
}
|
|
106
|
-
|
|
107
|
-
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function extractMetadata(uiDefinition) {
|
|
99
|
+
return omit(uiDefinition, [
|
|
100
|
+
'children',
|
|
101
|
+
'pages',
|
|
102
|
+
'components',
|
|
103
|
+
]);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const FLOW_CUSTOMIZATION = new InjectionToken('FLOW_CUSTOMIZATION');
|
|
107
|
+
|
|
108
|
+
class RuntimeSettingsService {
|
|
109
|
+
constructor(configurationSettingsApiService) {
|
|
110
|
+
this.configurationSettingsApiService = configurationSettingsApiService;
|
|
111
|
+
this.configurationSettings$ = new BehaviorSubject({});
|
|
112
|
+
this.currencySettings$ = new BehaviorSubject({
|
|
113
|
+
iso: DEFAULT_CURRENCY_ISO_CODE,
|
|
114
|
+
symbol: DEFAULT_CURRENCY_SYMBOL,
|
|
115
|
+
});
|
|
116
|
+
this.shoppingCartSettings$ = new BehaviorSubject([]);
|
|
117
|
+
this.getCurrencySymbol = (locale, currency) => {
|
|
118
|
+
return (0)
|
|
119
|
+
.toLocaleString(locale, { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0 })
|
|
120
|
+
.replace(/\d/g, '')
|
|
121
|
+
.trim();
|
|
122
|
+
};
|
|
108
123
|
}
|
|
109
|
-
|
|
110
|
-
return this.
|
|
124
|
+
create() {
|
|
125
|
+
return this.configurationSettingsApiService.fetchSettings().pipe(map(settings => this.parseConfigurationSettings(settings)), tap(configurationSettings => {
|
|
126
|
+
var _a;
|
|
127
|
+
this.configurationSettings$.next(configurationSettings);
|
|
128
|
+
this.addShoppingCartSettings((_a = configurationSettings['shopping-cart']) !== null && _a !== void 0 ? _a : []);
|
|
129
|
+
this.formattingSettings = this.getFormattingSettings();
|
|
130
|
+
}), map(() => undefined));
|
|
111
131
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
initCurrency(iso) {
|
|
133
|
+
if (iso) {
|
|
134
|
+
const symbol = this.getCurrencySymbol('en-US', iso);
|
|
135
|
+
this.currencySettings$.next({ iso, symbol });
|
|
136
|
+
if (this.formattingSettings) {
|
|
137
|
+
this.formattingSettings.currencySymbol = symbol;
|
|
138
|
+
}
|
|
119
139
|
}
|
|
120
|
-
return false;
|
|
121
140
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
141
|
+
getFormattingSettings() {
|
|
142
|
+
var _a, _b;
|
|
143
|
+
if (this.formattingSettings) {
|
|
144
|
+
return this.formattingSettings;
|
|
125
145
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
146
|
+
const shoppingCartSettings = (_a = this.getConfigurationSettings()['shopping-cart']) === null || _a === void 0 ? void 0 : _a.reduce((acc, setting) => {
|
|
147
|
+
return Object.assign(Object.assign({}, acc), { [setting.id]: setting.properties });
|
|
148
|
+
}, {});
|
|
149
|
+
const currencySettings = this.getCurrencySettings();
|
|
150
|
+
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)) ||
|
|
151
|
+
DEFAULT_DATE_FORMAT;
|
|
152
|
+
const decimalSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.DECIMAL_SEPARATOR;
|
|
153
|
+
const thousandsSeparator = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.THOUSANDS_SEPARATOR;
|
|
154
|
+
// the number of decimal places can be 0
|
|
155
|
+
const priceScale = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.PRICE_SCALE;
|
|
156
|
+
const decimalsCount = priceScale !== null && priceScale !== '' && !isNaN(Number(priceScale)) && Number(priceScale) >= 0
|
|
157
|
+
? Number(priceScale)
|
|
158
|
+
: DEFAULT_DECIMALS_COUNT;
|
|
159
|
+
const actionCodeSettings = shoppingCartSettings === null || shoppingCartSettings === void 0 ? void 0 : shoppingCartSettings.STATUS_LABEL;
|
|
160
|
+
return {
|
|
161
|
+
currencySymbol: currencySettings.symbol,
|
|
162
|
+
dateFormats: getSupportedDateFormats(dateFormat),
|
|
163
|
+
decimalsCount,
|
|
164
|
+
decimalSeparator: decimalSeparator !== undefined && ['.', ','].includes(decimalSeparator)
|
|
165
|
+
? decimalSeparator
|
|
166
|
+
: DEFAULT_DECIMAL_SEPARATOR,
|
|
167
|
+
// thousands separator can be a blank value, so it can also be null
|
|
168
|
+
thousandsSeparator: thousandsSeparator !== undefined && ['.', ',', '', null].includes(thousandsSeparator)
|
|
169
|
+
? thousandsSeparator || ''
|
|
170
|
+
: DEFAULT_THOUSANDS_SEPARATOR,
|
|
171
|
+
actionCodeLabels: (actionCodeSettings === null || actionCodeSettings === void 0 ? void 0 : actionCodeSettings.length)
|
|
172
|
+
? actionCodeSettings.reduce((result, setting) => (Object.assign(Object.assign({}, result), { [setting.status_label]: setting.custom_label })), {})
|
|
173
|
+
: DEFAULT_ACTION_CODE_LABELS,
|
|
174
|
+
};
|
|
130
175
|
}
|
|
131
|
-
|
|
132
|
-
return this.
|
|
176
|
+
getConfigurationSettings() {
|
|
177
|
+
return this.configurationSettings$.value;
|
|
133
178
|
}
|
|
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
|
-
}));
|
|
179
|
+
getShoppingCartSettings() {
|
|
180
|
+
return this.shoppingCartSettings$.value;
|
|
140
181
|
}
|
|
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;
|
|
182
|
+
getCurrencySettings() {
|
|
183
|
+
return this.currencySettings$.value;
|
|
146
184
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
185
|
+
parseConfigurationSettings(settings) {
|
|
186
|
+
return settings.reduce((acc, setting) => {
|
|
187
|
+
switch (setting.key) {
|
|
188
|
+
case 'shopping-cart':
|
|
189
|
+
acc['shopping-cart'] = parseJsonSafely(setting.value, []);
|
|
190
|
+
break;
|
|
191
|
+
case 'navigation':
|
|
192
|
+
acc.navigation = parseJsonSafely(setting.value, {});
|
|
193
|
+
break;
|
|
194
|
+
case 'flows':
|
|
195
|
+
acc.flows = parseJsonSafely(setting.value, []);
|
|
196
|
+
break;
|
|
197
|
+
default:
|
|
198
|
+
acc[setting.key] = setting.value;
|
|
199
|
+
}
|
|
200
|
+
return acc;
|
|
201
|
+
}, {});
|
|
152
202
|
}
|
|
153
|
-
|
|
154
|
-
|
|
203
|
+
addShoppingCartSettings(settings) {
|
|
204
|
+
// uniqBy removes items with the biggest index
|
|
205
|
+
const newSettings = uniqBy([...settings, ...this.shoppingCartSettings$.value], 'id');
|
|
206
|
+
this.shoppingCartSettings$.next(newSettings);
|
|
155
207
|
}
|
|
156
208
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
|
209
|
+
RuntimeSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, deps: [{ token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
210
|
+
RuntimeSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService });
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeSettingsService, decorators: [{
|
|
160
212
|
type: Injectable
|
|
161
|
-
}], ctorParameters: function () { return [{ type: i1.
|
|
213
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationSettingsApiService }]; } });
|
|
162
214
|
|
|
163
215
|
class FlowInfoService {
|
|
164
216
|
get flow() {
|
|
217
|
+
if (!this.flowSubj$.value) {
|
|
218
|
+
throw new Error(`Flow not initialized yet`);
|
|
219
|
+
}
|
|
165
220
|
return this.flowSubj$.value;
|
|
166
221
|
}
|
|
167
|
-
|
|
168
|
-
this.flowSubj$.
|
|
222
|
+
get isFlowInitialized() {
|
|
223
|
+
return Boolean(this.flowSubj$.value);
|
|
169
224
|
}
|
|
170
|
-
get
|
|
171
|
-
|
|
172
|
-
|
|
225
|
+
get context() {
|
|
226
|
+
if (!this.contextSubj$.value) {
|
|
227
|
+
throw new Error('Context is not initialized yet!');
|
|
228
|
+
}
|
|
229
|
+
return Object.assign({}, this.contextSubj$.value);
|
|
230
|
+
}
|
|
231
|
+
get templates() {
|
|
232
|
+
return this.templatesSubj$.value;
|
|
233
|
+
}
|
|
234
|
+
get isFlowEngineInitialized$() {
|
|
235
|
+
return this.templates$.pipe(map(v => Boolean(v.FLOW_ENGINE)));
|
|
173
236
|
}
|
|
174
237
|
get isStateful() {
|
|
175
238
|
var _a;
|
|
176
239
|
return !!((_a = this.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful);
|
|
177
240
|
}
|
|
178
|
-
constructor(
|
|
179
|
-
this.
|
|
241
|
+
constructor(runtimeSettingsService, templatesApiService, customizationService) {
|
|
242
|
+
this.runtimeSettingsService = runtimeSettingsService;
|
|
180
243
|
this.templatesApiService = templatesApiService;
|
|
181
244
|
this.customizationService = customizationService;
|
|
182
|
-
this.templates = {};
|
|
183
245
|
this.defaultTemplates = {
|
|
184
246
|
flowEngine: 'Flow Engine',
|
|
185
247
|
};
|
|
186
248
|
this.flowSubj$ = new BehaviorSubject(null);
|
|
249
|
+
this.templatesSubj$ = new BehaviorSubject({});
|
|
250
|
+
this.contextSubj$ = new BehaviorSubject(null);
|
|
187
251
|
this.flow$ = this.flowSubj$.asObservable();
|
|
252
|
+
this.templates$ = this.templatesSubj$.asObservable();
|
|
253
|
+
}
|
|
254
|
+
reset() {
|
|
255
|
+
this.flowSubj$.next(null);
|
|
256
|
+
this.templatesSubj$.next({});
|
|
257
|
+
this.contextSubj$.next(null);
|
|
188
258
|
}
|
|
189
259
|
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
|
-
}));
|
|
260
|
+
return this.initFlow$(flowId, routeQueryParams).pipe(switchMap(() => this.initFlowTemplates$()));
|
|
197
261
|
}
|
|
198
|
-
|
|
199
|
-
this.
|
|
200
|
-
|
|
201
|
-
|
|
262
|
+
updateContext(update) {
|
|
263
|
+
this.contextSubj$.next(Object.assign(Object.assign({}, this.context), update));
|
|
264
|
+
}
|
|
265
|
+
initFlow$(flowId, routeQueryParams) {
|
|
266
|
+
var _a;
|
|
267
|
+
const flow = (_a = this.runtimeSettingsService.getConfigurationSettings()['flows']) === null || _a === void 0 ? void 0 : _a.find(({ id }) => flowId === id);
|
|
268
|
+
if (!flow) {
|
|
269
|
+
this.flowSubj$.next(null);
|
|
270
|
+
throw new Error(`Flow with flowId=${flowId} is not defined`);
|
|
271
|
+
}
|
|
272
|
+
const headerId = routeQueryParams['headerId'];
|
|
273
|
+
if (typeof headerId !== 'string') {
|
|
274
|
+
throw new Error(`Please provide 'headerId'`);
|
|
275
|
+
}
|
|
276
|
+
const mode = this.getFlowContextMode(headerId);
|
|
277
|
+
// Restrict if mode is not defined
|
|
278
|
+
if (mode == null) {
|
|
279
|
+
throw new Error('Mode is undefined');
|
|
280
|
+
}
|
|
281
|
+
this.contextSubj$.next(Object.assign(Object.assign(Object.assign({}, flow.properties.queryParams), routeQueryParams), { mode }));
|
|
282
|
+
this.flowSubj$.next(flow);
|
|
283
|
+
return of(undefined);
|
|
202
284
|
}
|
|
203
|
-
initFlowTemplates$(
|
|
285
|
+
initFlowTemplates$() {
|
|
204
286
|
var _a, _b, _c;
|
|
205
287
|
return forkJoin([
|
|
206
288
|
this.templatesApiService.fetchTemplates$(),
|
|
207
289
|
(_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
|
-
|
|
290
|
+
]).pipe(map(([templates, localTemplates]) => {
|
|
291
|
+
var _a, _b;
|
|
292
|
+
const newValue = {};
|
|
293
|
+
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
294
|
var _a;
|
|
211
295
|
const type = this.remapTemplateName(key);
|
|
212
296
|
if (type) {
|
|
213
|
-
|
|
297
|
+
newValue[type] =
|
|
214
298
|
(_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
299
|
}
|
|
216
300
|
});
|
|
301
|
+
this.templatesSubj$.next(newValue);
|
|
217
302
|
}));
|
|
218
303
|
}
|
|
219
304
|
remapTemplateName(templateType) {
|
|
@@ -239,13 +324,20 @@ class FlowInfoService {
|
|
|
239
324
|
}
|
|
240
325
|
return undefined;
|
|
241
326
|
}
|
|
327
|
+
getFlowContextMode(headerId) {
|
|
328
|
+
const objectName = SalesforceIdUtils.getSfObjectNameById(headerId);
|
|
329
|
+
if (!objectName) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
return objectName.toUpperCase();
|
|
333
|
+
}
|
|
242
334
|
}
|
|
243
|
-
FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token:
|
|
335
|
+
FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token: RuntimeSettingsService }, { token: i4.UITemplatesApiService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
244
336
|
FlowInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService });
|
|
245
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, decorators: [{
|
|
246
338
|
type: Injectable
|
|
247
339
|
}], ctorParameters: function () {
|
|
248
|
-
return [{ type:
|
|
340
|
+
return [{ type: RuntimeSettingsService }, { type: i4.UITemplatesApiService }, { type: undefined, decorators: [{
|
|
249
341
|
type: Optional
|
|
250
342
|
}, {
|
|
251
343
|
type: Inject,
|
|
@@ -253,186 +345,141 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
253
345
|
}] }];
|
|
254
346
|
} });
|
|
255
347
|
|
|
256
|
-
class
|
|
348
|
+
class SalesTransactionService {
|
|
257
349
|
get isInitialized$() {
|
|
258
350
|
return this.isInitializedSubj$.asObservable();
|
|
259
351
|
}
|
|
260
352
|
get isInitialized() {
|
|
261
353
|
return this.isInitializedSubj$.getValue();
|
|
262
354
|
}
|
|
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
355
|
set hasUnsavedChanges(value) {
|
|
272
356
|
var _a, _b;
|
|
273
|
-
this.
|
|
274
|
-
if (!this.
|
|
275
|
-
this.
|
|
357
|
+
this.hasUnsavedChangesSubj$.next(value);
|
|
358
|
+
if (!this.hasUnsavedChanges) {
|
|
359
|
+
this.initialState = (_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.salesTransactionItems) !== null && _b !== void 0 ? _b : [];
|
|
276
360
|
}
|
|
277
361
|
}
|
|
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);
|
|
362
|
+
get hasUnsavedChanges() {
|
|
363
|
+
return this.hasUnsavedChangesSubj$.getValue();
|
|
284
364
|
}
|
|
285
|
-
get
|
|
286
|
-
return this.
|
|
365
|
+
get state() {
|
|
366
|
+
return this.stateSubj$.getValue();
|
|
287
367
|
}
|
|
288
368
|
get hasAssets() {
|
|
289
369
|
var _a;
|
|
290
|
-
return Boolean((_a = this.
|
|
370
|
+
return Boolean((_a = this.state) === null || _a === void 0 ? void 0 : _a.assets.length);
|
|
291
371
|
}
|
|
292
|
-
get
|
|
293
|
-
|
|
372
|
+
get hasProducts() {
|
|
373
|
+
var _a;
|
|
374
|
+
return Boolean((_a = this.state) === null || _a === void 0 ? void 0 : _a.salesTransactionItems.length);
|
|
294
375
|
}
|
|
295
|
-
constructor(
|
|
296
|
-
this.context = context;
|
|
376
|
+
constructor(flowInfoService, salesTransactionApiService) {
|
|
297
377
|
this.flowInfoService = flowInfoService;
|
|
298
|
-
this.
|
|
299
|
-
this.
|
|
300
|
-
this.quoteSubj$ = new BehaviorSubject(null);
|
|
301
|
-
this.assetsSubj$ = new BehaviorSubject(null);
|
|
302
|
-
this.resetSubj$ = new BehaviorSubject(true);
|
|
378
|
+
this.salesTransactionApiService = salesTransactionApiService;
|
|
379
|
+
this.stateSubj$ = new BehaviorSubject(null);
|
|
303
380
|
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;
|
|
381
|
+
this.hasUnsavedChangesSubj$ = new BehaviorSubject(false);
|
|
382
|
+
this.initialState = [];
|
|
383
|
+
this.hasUnsavedChanges$ = this.hasUnsavedChangesSubj$.asObservable();
|
|
384
|
+
this.state$ = this.stateSubj$.asObservable().pipe(filter(isDefined));
|
|
317
385
|
}
|
|
318
386
|
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));
|
|
387
|
+
return this.salesTransactionApiService.getState(headerId, params).pipe(tap(res => this.stateSubj$.next(res.salesTransaction)), map(res => res.salesTransaction));
|
|
336
388
|
}
|
|
337
389
|
finalizeInit() {
|
|
338
|
-
this.
|
|
390
|
+
this.isInitializedSubj$.next(true);
|
|
339
391
|
this.hasUnsavedChanges = false;
|
|
340
392
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
}
|
|
346
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: lineItems }));
|
|
347
|
-
}
|
|
348
|
-
updateQuoteDraft(update) {
|
|
349
|
-
const quoteDraft = this.quoteSubj$.value;
|
|
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));
|
|
357
|
-
}
|
|
358
|
-
updateByPriceSummary(priceSummary) {
|
|
359
|
-
const quoteDraft = this.quoteSubj$.value;
|
|
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 }));
|
|
368
|
-
}
|
|
369
|
-
setAssetsState(assetsState) {
|
|
370
|
-
this.assetsSubj$.next(assetsState);
|
|
371
|
-
}
|
|
372
|
-
get quoteDraft$() {
|
|
373
|
-
return combineLatest([this.quoteSubj$, this.context.resolve$()]).pipe(map(() => this.quoteDraft), filter((quote) => Boolean(quote)), shareReplay());
|
|
393
|
+
reset() {
|
|
394
|
+
this.stateSubj$.next(null);
|
|
395
|
+
this.isInitializedSubj$.next(false);
|
|
396
|
+
this.hasUnsavedChangesSubj$.next(false);
|
|
374
397
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
if (!quote) {
|
|
378
|
-
return null;
|
|
379
|
-
}
|
|
380
|
-
return Object.assign(Object.assign({}, quote), { context: this.context.resolve() });
|
|
398
|
+
getInitialState() {
|
|
399
|
+
return this.initialState;
|
|
381
400
|
}
|
|
382
|
-
|
|
383
|
-
|
|
401
|
+
setState(state) {
|
|
402
|
+
this.stateSubj$.next(state);
|
|
384
403
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
404
|
+
}
|
|
405
|
+
SalesTransactionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService, deps: [{ token: FlowInfoService }, { token: i4.SalesTransactionApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
406
|
+
SalesTransactionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService });
|
|
407
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService, decorators: [{
|
|
408
|
+
type: Injectable
|
|
409
|
+
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i4.SalesTransactionApiService }]; } });
|
|
410
|
+
|
|
411
|
+
class FlowConfigurationService {
|
|
412
|
+
constructor(proceduresApiService, salesTransactionService) {
|
|
413
|
+
this.proceduresApiService = proceduresApiService;
|
|
414
|
+
this.salesTransactionService = salesTransactionService;
|
|
415
|
+
this.updatedSubj$ = new Subject();
|
|
416
|
+
this.updated$ = this.updatedSubj$.asObservable();
|
|
388
417
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
return (_b = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.standalone) !== null && _b !== void 0 ? _b : false;
|
|
418
|
+
calculate$(state) {
|
|
419
|
+
return this.proceduresApiService.apply$({ salesTransaction: state }).pipe(tap(result => this.salesTransactionService.setState(result.salesTransaction)), map(noop));
|
|
392
420
|
}
|
|
393
|
-
|
|
394
|
-
|
|
421
|
+
calculate(state) {
|
|
422
|
+
this.calculate$(state).subscribe();
|
|
395
423
|
}
|
|
396
|
-
|
|
397
|
-
|
|
424
|
+
revert$(transactionItemId) {
|
|
425
|
+
var _a;
|
|
426
|
+
const state = this.salesTransactionService.state;
|
|
427
|
+
const initialState = this.salesTransactionService.getInitialState();
|
|
428
|
+
const currentState = (_a = state === null || state === void 0 ? void 0 : state.salesTransactionItems) !== null && _a !== void 0 ? _a : [];
|
|
429
|
+
const currentItemIndex = currentState.findIndex(({ id }) => id === transactionItemId);
|
|
430
|
+
const currentItem = currentState[currentItemIndex];
|
|
431
|
+
const initialItem = initialState.find(({ integrationId }) => integrationId === (currentItem === null || currentItem === void 0 ? void 0 : currentItem.integrationId));
|
|
432
|
+
if (!state || !currentItem || !initialItem) {
|
|
433
|
+
return of(null);
|
|
434
|
+
}
|
|
435
|
+
const updatedState = cloneDeep(currentState);
|
|
436
|
+
updatedState.splice(currentItemIndex, 1, initialItem);
|
|
437
|
+
return of([]).pipe(tap(() => {
|
|
438
|
+
this.salesTransactionService.setState(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }));
|
|
439
|
+
}), switchMap(() => this.calculate$(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }))), map(() => this.salesTransactionService.state), tap(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
398
440
|
}
|
|
399
|
-
|
|
400
|
-
|
|
441
|
+
revert(transactionItemId) {
|
|
442
|
+
this.revert$(transactionItemId).subscribe();
|
|
401
443
|
}
|
|
402
|
-
|
|
403
|
-
const
|
|
404
|
-
if (
|
|
405
|
-
return
|
|
406
|
-
}
|
|
407
|
-
if (context.mode === ConfigurationContextMode.QUOTE) {
|
|
408
|
-
return context.properties.Status === 'Draft';
|
|
444
|
+
delete$(ids) {
|
|
445
|
+
const state = this.salesTransactionService.state;
|
|
446
|
+
if (!state) {
|
|
447
|
+
return of(null);
|
|
409
448
|
}
|
|
410
|
-
return
|
|
449
|
+
return of([]).pipe(map(() => state.salesTransactionItems.filter(({ id }) => !ids.includes(id))), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }))), map(() => this.salesTransactionService.state), tap(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
|
|
411
450
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
451
|
+
delete(ids) {
|
|
452
|
+
this.delete$(ids).subscribe();
|
|
453
|
+
}
|
|
454
|
+
handleErrorAndBounceBack() {
|
|
455
|
+
return (source$) => {
|
|
456
|
+
return source$.pipe(catchError(error => {
|
|
457
|
+
console.error(error);
|
|
458
|
+
// bounce back if configuration call has failed
|
|
459
|
+
const state = this.salesTransactionService.state;
|
|
460
|
+
if (state) {
|
|
461
|
+
this.salesTransactionService.setState(state);
|
|
462
|
+
this.updatedSubj$.next();
|
|
463
|
+
}
|
|
464
|
+
return throwError(() => error);
|
|
465
|
+
}));
|
|
466
|
+
};
|
|
419
467
|
}
|
|
420
468
|
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
|
469
|
+
FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i4.ProceduresApiService }, { token: SalesTransactionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
470
|
+
FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService });
|
|
471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, decorators: [{
|
|
424
472
|
type: Injectable
|
|
425
|
-
}], ctorParameters: function () { return [{ type:
|
|
473
|
+
}], ctorParameters: function () { return [{ type: i4.ProceduresApiService }, { type: SalesTransactionService }]; } });
|
|
426
474
|
|
|
427
475
|
class FlowStateService {
|
|
428
|
-
constructor(
|
|
429
|
-
this.contextService = contextService;
|
|
430
|
-
this.quoteDraftService = quoteDraftService;
|
|
431
|
-
this.flowInfoService = flowInfoService;
|
|
476
|
+
constructor(flowConfiguration, flowInfoService, flowStateApiService, processorsApiService, salesTransactionApiService, salesTransactionService, toastService, customizationService) {
|
|
432
477
|
this.flowConfiguration = flowConfiguration;
|
|
433
|
-
this.
|
|
478
|
+
this.flowInfoService = flowInfoService;
|
|
434
479
|
this.flowStateApiService = flowStateApiService;
|
|
435
|
-
this.
|
|
480
|
+
this.processorsApiService = processorsApiService;
|
|
481
|
+
this.salesTransactionApiService = salesTransactionApiService;
|
|
482
|
+
this.salesTransactionService = salesTransactionService;
|
|
436
483
|
this.toastService = toastService;
|
|
437
484
|
this.customizationService = customizationService;
|
|
438
485
|
this.NOT_INITIALIZED = Symbol();
|
|
@@ -449,68 +496,22 @@ class FlowStateService {
|
|
|
449
496
|
this.cleanup$ = new Subject();
|
|
450
497
|
this.statefulExecutionRequest$ = this.initBufferedRequest$();
|
|
451
498
|
/*
|
|
452
|
-
In stateless mode watch
|
|
453
|
-
all subscriptions get their updates according to updated
|
|
499
|
+
In stateless mode watch State changes and call executeRequest so that
|
|
500
|
+
all subscriptions get their updates according to updated State
|
|
454
501
|
*/
|
|
455
502
|
this.isInitialized$()
|
|
456
|
-
.pipe(filter
|
|
503
|
+
.pipe(filter(Boolean), filter(() => !this.flowInfoService.flow.properties.stateful), switchMap(() => this.flowConfiguration.updated$), switchMap(() => this.executeRequest$({}, true)))
|
|
457
504
|
.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
505
|
}
|
|
503
506
|
init$() {
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
}
|
|
511
|
-
}));
|
|
507
|
+
if (this.flowInfoService.flow.properties.stateful) {
|
|
508
|
+
return this.initProcessors$().pipe(switchMap(() => this.initStateful$()));
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
return forkJoin([this.initStateless$(), this.initProcessors$()]).pipe(map(noop));
|
|
512
|
+
}
|
|
512
513
|
}
|
|
513
|
-
|
|
514
|
+
reset() {
|
|
514
515
|
Object.values(this.subscriptions).forEach(({ data$ }) => data$.complete());
|
|
515
516
|
this.subscriptions = {};
|
|
516
517
|
if (this.stateId$.value) {
|
|
@@ -522,9 +523,9 @@ class FlowStateService {
|
|
|
522
523
|
this.cleanup$.next();
|
|
523
524
|
}
|
|
524
525
|
get hasUnsavedChanges() {
|
|
525
|
-
return this.
|
|
526
|
+
return this.flowInfoService.flow.properties.stateful
|
|
526
527
|
? Array.from(this.trackedStatefulChangesMap.values()).some(Boolean)
|
|
527
|
-
: this.
|
|
528
|
+
: this.salesTransactionService.hasUnsavedChanges;
|
|
528
529
|
}
|
|
529
530
|
get stateId() {
|
|
530
531
|
return this.stateId$.value;
|
|
@@ -533,14 +534,14 @@ class FlowStateService {
|
|
|
533
534
|
return this.executionInProgress$.asObservable();
|
|
534
535
|
}
|
|
535
536
|
isInitialized$() {
|
|
536
|
-
return combineLatest([this.stateId$, this.
|
|
537
|
+
return combineLatest([this.stateId$, this.salesTransactionService.isInitialized$]).pipe(map(values => values.some(Boolean)));
|
|
537
538
|
}
|
|
538
539
|
isInitialized() {
|
|
539
|
-
return Boolean(this.stateId$.value) || this.
|
|
540
|
+
return Boolean(this.stateId$.value) || this.salesTransactionService.isInitialized;
|
|
540
541
|
}
|
|
541
542
|
execute$(scope, exec) {
|
|
542
543
|
const request = this.execToRequest(scope, exec);
|
|
543
|
-
return this.executeRequest$(request).pipe(map
|
|
544
|
+
return this.executeRequest$(request).pipe(map(result => {
|
|
544
545
|
// Keep only requested results
|
|
545
546
|
const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
|
|
546
547
|
var _a;
|
|
@@ -557,7 +558,7 @@ class FlowStateService {
|
|
|
557
558
|
actions: [{ name: action, inputData }],
|
|
558
559
|
};
|
|
559
560
|
const request = this.execToRequest(scope, exec);
|
|
560
|
-
return this.executeRequest$(request).pipe(map
|
|
561
|
+
return this.executeRequest$(request).pipe(map(noop));
|
|
561
562
|
}
|
|
562
563
|
select$(scope, selectorName, inputData) {
|
|
563
564
|
const requestId = this.generateRequestId(scope, selectorName, inputData);
|
|
@@ -569,7 +570,7 @@ class FlowStateService {
|
|
|
569
570
|
},
|
|
570
571
|
},
|
|
571
572
|
});
|
|
572
|
-
return this.executeRequest$(request).pipe(map
|
|
573
|
+
return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
|
|
573
574
|
}
|
|
574
575
|
subscribe$(scope, selectorName, inputData, options) {
|
|
575
576
|
const requestId = this.generateRequestId(scope, selectorName, inputData);
|
|
@@ -595,7 +596,7 @@ class FlowStateService {
|
|
|
595
596
|
this.executeRequest$(request).subscribe();
|
|
596
597
|
}
|
|
597
598
|
}
|
|
598
|
-
return subscription.data$.pipe(filter
|
|
599
|
+
return subscription.data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), finalize(() => {
|
|
599
600
|
var _a;
|
|
600
601
|
if (!((_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$.observed)) {
|
|
601
602
|
delete this.subscriptions[requestId];
|
|
@@ -603,9 +604,9 @@ class FlowStateService {
|
|
|
603
604
|
}));
|
|
604
605
|
}
|
|
605
606
|
save$() {
|
|
606
|
-
if (this.
|
|
607
|
+
if (this.flowInfoService.flow.properties.stateful) {
|
|
607
608
|
if (this.stateId$.value) {
|
|
608
|
-
return this.flowStateApiService.save(this.stateId$.value).pipe(tap
|
|
609
|
+
return this.flowStateApiService.save(this.stateId$.value).pipe(map(({ quoteId }) => ({ id: quoteId })), tap(() => {
|
|
609
610
|
Array.from(this.trackedStatefulChangesMap.keys()).forEach(key => {
|
|
610
611
|
this.trackedStatefulChangesMap.set(key, false);
|
|
611
612
|
});
|
|
@@ -613,30 +614,26 @@ class FlowStateService {
|
|
|
613
614
|
}
|
|
614
615
|
}
|
|
615
616
|
else {
|
|
616
|
-
const
|
|
617
|
-
if (
|
|
618
|
-
return this.
|
|
619
|
-
this.contextService.update({ properties: { VELOCE_PRISM__VersionId__c: versionId } });
|
|
620
|
-
}));
|
|
617
|
+
const state = this.salesTransactionService.state;
|
|
618
|
+
if (state) {
|
|
619
|
+
return this.salesTransactionApiService.upsert(state);
|
|
621
620
|
}
|
|
622
621
|
}
|
|
623
|
-
return of({
|
|
622
|
+
return of({ id: '' });
|
|
624
623
|
}
|
|
625
624
|
submit$() {
|
|
626
|
-
if (this.
|
|
625
|
+
if (this.flowInfoService.flow.properties.stateful) {
|
|
627
626
|
if (this.stateId$.value) {
|
|
628
|
-
return this.flowStateApiService.submit(this.stateId$.value);
|
|
627
|
+
return this.flowStateApiService.submit(this.stateId$.value).pipe(map(({ quoteId }) => ({ id: quoteId })));
|
|
629
628
|
}
|
|
630
629
|
}
|
|
631
630
|
else {
|
|
632
|
-
const
|
|
633
|
-
if (
|
|
634
|
-
return this.
|
|
635
|
-
this.contextService.update({ properties: { VELOCE_PRISM__VersionId__c: versionId } });
|
|
636
|
-
}));
|
|
631
|
+
const state = this.salesTransactionService.state;
|
|
632
|
+
if (state) {
|
|
633
|
+
return this.salesTransactionApiService.submit(state);
|
|
637
634
|
}
|
|
638
635
|
}
|
|
639
|
-
return of({
|
|
636
|
+
return of({ id: '' });
|
|
640
637
|
}
|
|
641
638
|
getFlowStore() {
|
|
642
639
|
return this.flowStore;
|
|
@@ -677,10 +674,10 @@ class FlowStateService {
|
|
|
677
674
|
fullRequest.selectors = assign(fullRequest.selectors, subscription.request.selectors);
|
|
678
675
|
}
|
|
679
676
|
}
|
|
680
|
-
const execution$ = this.
|
|
677
|
+
const execution$ = this.flowInfoService.flow.properties.stateful
|
|
681
678
|
? this.executeStateful$(fullRequest)
|
|
682
679
|
: this.executeStateless$(fullRequest);
|
|
683
|
-
return execution$.pipe(tap
|
|
680
|
+
return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
|
|
684
681
|
}
|
|
685
682
|
handleSelectorsResponse(selectors) {
|
|
686
683
|
Object.entries(selectors).forEach(([requestId, selectorResult]) => {
|
|
@@ -696,32 +693,21 @@ class FlowStateService {
|
|
|
696
693
|
});
|
|
697
694
|
}
|
|
698
695
|
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
696
|
const processorsList = flatten(Object.values(this.processors).map(ownerMap => Object.values(ownerMap !== null && ownerMap !== void 0 ? ownerMap : {})));
|
|
709
697
|
const processors = processorsList.length ? processorsList : undefined;
|
|
710
698
|
const selectors = Object.values(this.subscriptions)
|
|
711
699
|
.map(({ request }) => request.selectors)
|
|
712
700
|
.filter(isDefined)
|
|
713
701
|
.reduce((trunk, selectors) => (Object.assign(Object.assign({}, trunk), selectors)), {});
|
|
714
|
-
const request = this.getDefaultExecutionRequestDTO();
|
|
715
702
|
return this.flowStateApiService
|
|
716
703
|
.init({
|
|
717
|
-
quoteId: this.
|
|
718
|
-
params:
|
|
704
|
+
quoteId: this.flowInfoService.context.headerId,
|
|
705
|
+
params: this.flowInfoService.context,
|
|
719
706
|
actionsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.ACTION),
|
|
720
707
|
selectorsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
|
|
721
|
-
selectors:
|
|
722
|
-
actions: request.actions,
|
|
708
|
+
selectors: selectors,
|
|
723
709
|
})
|
|
724
|
-
.pipe(map
|
|
710
|
+
.pipe(map(({ stateId, selectors }) => {
|
|
725
711
|
this.handleSelectorsResponse(selectors);
|
|
726
712
|
this.stateId$.next(stateId);
|
|
727
713
|
}));
|
|
@@ -741,80 +727,56 @@ class FlowStateService {
|
|
|
741
727
|
};
|
|
742
728
|
this.executionInProgress$.next(true);
|
|
743
729
|
return this.flowStateApiService.execute(this.stateId$.value, request);
|
|
744
|
-
}), tap
|
|
730
|
+
}), tap(({ stateId }) => this.stateId$.next(stateId)), share(), tap(() => this.executionInProgress$.next(false)), catchError(e => {
|
|
745
731
|
this.executionInProgress$.next(false);
|
|
746
732
|
return throwError(() => e);
|
|
747
733
|
}));
|
|
748
734
|
}
|
|
749
735
|
executeStateful$(request) {
|
|
750
|
-
return this.executionInProgress$.pipe(filter
|
|
736
|
+
return this.executionInProgress$.pipe(filter(inProgress => !inProgress), take(1), switchMap(() =>
|
|
751
737
|
// make sure stream switches to statefulExecutionRequest$ before pushing an execution request
|
|
752
738
|
combineLatest([
|
|
753
739
|
this.statefulExecutionRequest$,
|
|
754
|
-
of(undefined).pipe(tap
|
|
755
|
-
])), map
|
|
740
|
+
of(undefined).pipe(tap(() => this.statefulRequestStream$.next(request))),
|
|
741
|
+
])), map(([response]) => response), take(1));
|
|
756
742
|
}
|
|
757
743
|
initStateless$() {
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
const assets = this.quoteDraftService.assetsState;
|
|
744
|
+
return this.salesTransactionService.init(this.flowInfoService.context.headerId, this.flowInfoService.context).pipe(tap(() => {
|
|
745
|
+
var _a;
|
|
746
|
+
const assets = (_a = this.salesTransactionService.state) === null || _a === void 0 ? void 0 : _a.assets;
|
|
762
747
|
if (assets) {
|
|
763
748
|
this.flowStore = Object.assign(Object.assign({}, this.flowStore), { assets });
|
|
764
749
|
}
|
|
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);
|
|
750
|
+
}), switchMap(state => this.flowConfiguration.calculate$(state)), tap(() => this.salesTransactionService.finalizeInit()), map(noop));
|
|
791
751
|
}
|
|
792
752
|
executeStateless$(request) {
|
|
793
753
|
this.executionInProgress$.next(true);
|
|
794
|
-
return of(undefined).pipe(tap
|
|
754
|
+
return of(undefined).pipe(tap(() => this.executeStatelessActions(request)), switchMap(() => {
|
|
795
755
|
var _a;
|
|
796
756
|
/*
|
|
797
757
|
Skip price calculation in case
|
|
798
758
|
1. No actions in the request
|
|
799
759
|
2. Initialization process execution (state not initialized yet)
|
|
800
760
|
*/
|
|
801
|
-
|
|
761
|
+
const { state } = this.salesTransactionService;
|
|
762
|
+
if (!state || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length) || !this.isInitialized()) {
|
|
802
763
|
return of(undefined);
|
|
803
764
|
}
|
|
804
765
|
else {
|
|
805
|
-
return this.calculate$();
|
|
766
|
+
return this.flowConfiguration.calculate$(state);
|
|
806
767
|
}
|
|
807
|
-
}), map
|
|
768
|
+
}), map(() => this.executeStatelessSelectors(request)), tap(() => this.executionInProgress$.next(false)), catchError(e => {
|
|
808
769
|
this.executionInProgress$.next(false);
|
|
809
770
|
return throwError(() => e);
|
|
810
771
|
}));
|
|
811
772
|
}
|
|
812
773
|
executeStatelessActions(request) {
|
|
813
774
|
var _a;
|
|
814
|
-
|
|
775
|
+
const state = this.salesTransactionService.state;
|
|
776
|
+
if (!state || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
815
777
|
return;
|
|
816
778
|
}
|
|
817
|
-
let flowState =
|
|
779
|
+
let flowState = state;
|
|
818
780
|
request.actions.forEach(action => {
|
|
819
781
|
var _a;
|
|
820
782
|
try {
|
|
@@ -826,1022 +788,126 @@ class FlowStateService {
|
|
|
826
788
|
throw e;
|
|
827
789
|
}
|
|
828
790
|
});
|
|
829
|
-
this.
|
|
791
|
+
this.salesTransactionService.setState(flowState);
|
|
830
792
|
}
|
|
831
793
|
executeStatelessSelectors(request) {
|
|
832
794
|
var _a;
|
|
833
|
-
if (!this.
|
|
834
|
-
throw '
|
|
835
|
-
}
|
|
836
|
-
const flowState = this.quoteDraftService.quoteDraft;
|
|
837
|
-
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;
|
|
795
|
+
if (!this.salesTransactionService.state) {
|
|
796
|
+
throw 'State is not initialized';
|
|
1630
797
|
}
|
|
1631
|
-
const
|
|
1632
|
-
return (
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
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();
|
|
798
|
+
const flowState = this.salesTransactionService.state;
|
|
799
|
+
return EntityUtil.entries((_a = request.selectors) !== null && _a !== void 0 ? _a : {}).reduce((result, [key, selector]) => {
|
|
800
|
+
try {
|
|
801
|
+
result.selectors[key] = {
|
|
802
|
+
success: true,
|
|
803
|
+
result: this.executeSelectorScript(flowState, selector),
|
|
804
|
+
};
|
|
805
|
+
}
|
|
806
|
+
catch (e) {
|
|
807
|
+
console.error(e);
|
|
808
|
+
result.selectors[key] = {
|
|
809
|
+
success: false,
|
|
810
|
+
errorMessage: String(e),
|
|
811
|
+
};
|
|
812
|
+
}
|
|
813
|
+
return result;
|
|
814
|
+
}, { stateId: '', selectors: {} });
|
|
1692
815
|
}
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
816
|
+
initProcessors$() {
|
|
817
|
+
var _a;
|
|
818
|
+
const hasOverrides = Boolean((_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors);
|
|
819
|
+
if (this.flowInfoService.flow.properties.stateful && !hasOverrides) {
|
|
820
|
+
// Skip initialization as backend will take processors from SF
|
|
821
|
+
return of(undefined);
|
|
1697
822
|
}
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
if (!
|
|
1715
|
-
return of(
|
|
823
|
+
const owners$ = Object.values(this.flowInfoService.templates)
|
|
824
|
+
.map(template => {
|
|
825
|
+
var _a, _b, _c;
|
|
826
|
+
if (!template) {
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
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);
|
|
830
|
+
return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap(processors => {
|
|
831
|
+
const processorsMap = processors.reduce((acc, p) => {
|
|
832
|
+
acc[p.apiName] = p;
|
|
833
|
+
return acc;
|
|
834
|
+
}, {});
|
|
835
|
+
this.processors[template.id] = processorsMap;
|
|
836
|
+
}));
|
|
837
|
+
})
|
|
838
|
+
.filter(isDefined);
|
|
839
|
+
if (!owners$.length) {
|
|
840
|
+
return of(undefined);
|
|
1716
841
|
}
|
|
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());
|
|
1722
|
-
}
|
|
1723
|
-
revert(lineItemId) {
|
|
1724
|
-
this.revert$(lineItemId).subscribe();
|
|
842
|
+
return forkJoin(owners$).pipe(map(noop));
|
|
1725
843
|
}
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
const
|
|
1729
|
-
if (!
|
|
1730
|
-
|
|
844
|
+
executeActionScript(request, executable) {
|
|
845
|
+
var _a;
|
|
846
|
+
const configurationProcessor = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName];
|
|
847
|
+
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
|
848
|
+
const scope = this.getScopeByOwnerId(executable.ownerId);
|
|
849
|
+
const scopeText = scope ? ` in ${scope}` : '';
|
|
850
|
+
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
|
1731
851
|
}
|
|
1732
|
-
return
|
|
1733
|
-
}
|
|
1734
|
-
delete(ids) {
|
|
1735
|
-
this.delete$(ids).subscribe();
|
|
852
|
+
return this.executeProcessorScript(request, configurationProcessor, executable.inputData);
|
|
1736
853
|
}
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
854
|
+
executeSelectorScript(request, executable) {
|
|
855
|
+
var _a;
|
|
856
|
+
const configurationProcessor = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName];
|
|
857
|
+
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
|
858
|
+
const scope = this.getScopeByOwnerId(executable.ownerId);
|
|
859
|
+
const scopeText = scope ? ` in ${scope}` : '';
|
|
860
|
+
throw `ConfigurationProcessor ${executable.apiName}${scopeText} not found`;
|
|
1741
861
|
}
|
|
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());
|
|
862
|
+
return this.executeProcessorScript(request, configurationProcessor, executable.inputData);
|
|
1744
863
|
}
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
864
|
+
executeProcessorScript(request, configurationProcessor, inputData) {
|
|
865
|
+
var _a;
|
|
866
|
+
const scope = this.getScopeByOwnerId((_a = configurationProcessor.ownerId) !== null && _a !== void 0 ? _a : '');
|
|
867
|
+
let functionToExecute = this.executedFunctions[scope + configurationProcessor.apiName];
|
|
868
|
+
if (!functionToExecute) {
|
|
869
|
+
const script = `${configurationProcessor.script}\nreturn transform;`;
|
|
870
|
+
const sourceMap = `\n//# sourceURL=${scope ? scope + '/' : ''}${configurationProcessor.apiName}.js`;
|
|
871
|
+
functionToExecute = new Function(script + sourceMap)();
|
|
872
|
+
this.executedFunctions[scope + configurationProcessor.apiName] = functionToExecute;
|
|
1749
873
|
}
|
|
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$();
|
|
874
|
+
return functionToExecute({
|
|
875
|
+
request,
|
|
876
|
+
inputData,
|
|
877
|
+
flowStore: this.flowStore,
|
|
878
|
+
});
|
|
1791
879
|
}
|
|
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
|
-
};
|
|
880
|
+
generateRequestId(scope, selectorName, inputData) {
|
|
881
|
+
const inputDataHash = UUID.hex(JSON.stringify(inputData) || '').slice(0, 8);
|
|
882
|
+
return `${scope}/${selectorName}/${inputDataHash}`;
|
|
1805
883
|
}
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
884
|
+
checkStatefulChanges(requestId, selectorResult) {
|
|
885
|
+
if (this.trackedStatefulChangesMap.has(requestId)) {
|
|
886
|
+
if (!this.initialStatefulData[requestId]) {
|
|
887
|
+
this.initialStatefulData[requestId] = selectorResult;
|
|
888
|
+
}
|
|
889
|
+
const hasChanges = !isEqual(this.initialStatefulData[requestId], selectorResult);
|
|
890
|
+
this.trackedStatefulChangesMap.set(requestId, hasChanges);
|
|
1812
891
|
}
|
|
1813
|
-
return this.proceduresApiService.apply$(request);
|
|
1814
892
|
}
|
|
1815
893
|
}
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
|
894
|
+
FlowStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, deps: [{ token: FlowConfigurationService }, { token: FlowInfoService }, { token: i1.FlowStateApiService }, { token: i4.ConfigurationProcessorsApiService }, { token: i4.SalesTransactionApiService }, { token: SalesTransactionService }, { token: i6.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
895
|
+
FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService });
|
|
896
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, decorators: [{
|
|
1819
897
|
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
|
-
}] });
|
|
898
|
+
}], ctorParameters: function () {
|
|
899
|
+
return [{ type: FlowConfigurationService }, { type: FlowInfoService }, { type: i1.FlowStateApiService }, { type: i4.ConfigurationProcessorsApiService }, { type: i4.SalesTransactionApiService }, { type: SalesTransactionService }, { type: i6.ToastService }, { type: undefined, decorators: [{
|
|
900
|
+
type: Optional
|
|
901
|
+
}, {
|
|
902
|
+
type: Inject,
|
|
903
|
+
args: [FLOW_CUSTOMIZATION]
|
|
904
|
+
}] }];
|
|
905
|
+
} });
|
|
1834
906
|
|
|
1835
907
|
class FlowStateConfigurationService {
|
|
1836
|
-
constructor(flowInfoService,
|
|
908
|
+
constructor(flowInfoService, flowStateService) {
|
|
1837
909
|
this.flowInfoService = flowInfoService;
|
|
1838
|
-
this.flowConfigurationService = flowConfigurationService;
|
|
1839
|
-
this.flowStateApiService = flowStateApiService;
|
|
1840
910
|
this.flowStateService = flowStateService;
|
|
1841
|
-
this.configurationStateId$ = new BehaviorSubject(null);
|
|
1842
|
-
}
|
|
1843
|
-
get configurationStateId() {
|
|
1844
|
-
return this.configurationStateId$.value;
|
|
1845
911
|
}
|
|
1846
912
|
addToCart$(props) {
|
|
1847
913
|
var _a;
|
|
@@ -1853,26 +919,22 @@ class FlowStateConfigurationService {
|
|
|
1853
919
|
request$ = of();
|
|
1854
920
|
}
|
|
1855
921
|
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
|
-
}));
|
|
922
|
+
// TODO: Implement
|
|
923
|
+
request$ = of();
|
|
1863
924
|
}
|
|
1864
925
|
}
|
|
1865
926
|
else {
|
|
1866
|
-
|
|
927
|
+
// TODO: Implement
|
|
928
|
+
request$ = of();
|
|
1867
929
|
}
|
|
1868
|
-
return request$.pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map
|
|
930
|
+
return request$.pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map(noop));
|
|
1869
931
|
}
|
|
1870
932
|
}
|
|
1871
|
-
FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: FlowInfoService }, { token:
|
|
933
|
+
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
934
|
FlowStateConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService });
|
|
1873
935
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, decorators: [{
|
|
1874
936
|
type: Injectable
|
|
1875
|
-
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type:
|
|
937
|
+
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type: FlowStateService }]; } });
|
|
1876
938
|
|
|
1877
939
|
class IntegrationState {
|
|
1878
940
|
constructor() {
|
|
@@ -1892,12 +954,12 @@ class IntegrationState {
|
|
|
1892
954
|
this.action$.next(action);
|
|
1893
955
|
}
|
|
1894
956
|
listen$(actionType) {
|
|
1895
|
-
return this.action$.pipe(filter
|
|
957
|
+
return this.action$.pipe(filter(action => action.type === actionType), map(action => action.payload));
|
|
1896
958
|
}
|
|
1897
959
|
listenAll$() {
|
|
1898
960
|
return this.action$.asObservable();
|
|
1899
961
|
}
|
|
1900
|
-
|
|
962
|
+
reset() {
|
|
1901
963
|
this.stateSubj$.next({});
|
|
1902
964
|
}
|
|
1903
965
|
}
|
|
@@ -1917,12 +979,12 @@ class ProductImagesService {
|
|
|
1917
979
|
this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
|
|
1918
980
|
this.fetchProductImage(productId);
|
|
1919
981
|
}
|
|
1920
|
-
return this.imagesMap$.pipe(map
|
|
982
|
+
return this.imagesMap$.pipe(map(imagesMap => { var _a; return (_a = imagesMap[productId]) !== null && _a !== void 0 ? _a : null; }), distinctUntilChanged());
|
|
1921
983
|
}
|
|
1922
984
|
fetchProductImage(productId) {
|
|
1923
985
|
this.productApiService
|
|
1924
986
|
.fetchImage$(productId)
|
|
1925
|
-
.pipe(map
|
|
987
|
+
.pipe(map(file => URL.createObjectURL(file)), catchError(() => of('')), tap(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
|
|
1926
988
|
.subscribe();
|
|
1927
989
|
}
|
|
1928
990
|
}
|
|
@@ -1932,142 +994,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1932
994
|
type: Injectable
|
|
1933
995
|
}], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
|
|
1934
996
|
|
|
1935
|
-
class
|
|
1936
|
-
|
|
1937
|
-
this.
|
|
997
|
+
class ConfigurationService {
|
|
998
|
+
get state$() {
|
|
999
|
+
return this.configurationStateSubj$.asObservable().pipe(filter$1(isDefined));
|
|
1938
1000
|
}
|
|
1939
|
-
|
|
1940
|
-
return this.
|
|
1941
|
-
var _a;
|
|
1942
|
-
const uiDefinitionContainer = this.getUIDefinitionContainer(runtimeData);
|
|
1943
|
-
const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
|
|
1944
|
-
const { productName, properties } = (_a = Array.from(runtimeModel.components.values()).find(c => c.productId === productId)) !== null && _a !== void 0 ? _a : {};
|
|
1945
|
-
const uiDefinitionProperties = uiDefinitionContainer === null || uiDefinitionContainer === void 0 ? void 0 : uiDefinitionContainer.source.properties;
|
|
1946
|
-
return {
|
|
1947
|
-
modelId: runtimeData.modelId,
|
|
1948
|
-
uiDefinitionContainer: uiDefinitionContainer,
|
|
1949
|
-
runtimeModel: runtimeModel,
|
|
1950
|
-
runtimeMode: RuntimeMode.PROD,
|
|
1951
|
-
productId: productId,
|
|
1952
|
-
productType: (properties === null || properties === void 0 ? void 0 : properties['displayName']) || productName,
|
|
1953
|
-
offeringId: offeringId,
|
|
1954
|
-
properties: {
|
|
1955
|
-
PricingEnabled: (uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.pricingEnabled) ? 'true' : 'false',
|
|
1956
|
-
PriceListId: uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.priceList,
|
|
1957
|
-
},
|
|
1958
|
-
};
|
|
1959
|
-
}));
|
|
1001
|
+
get state() {
|
|
1002
|
+
return this.configurationStateSubj$.getValue();
|
|
1960
1003
|
}
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
const containers = runtimeData.uiDefinitions.filter(container => isNotLegacyUIDefinition(container.source));
|
|
1964
|
-
return (_a = containers.find(container => container.source.primary)) !== null && _a !== void 0 ? _a : containers[0];
|
|
1004
|
+
get previousState() {
|
|
1005
|
+
return this.previousConfigurationStateSubj$.getValue();
|
|
1965
1006
|
}
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService, decorators: [{
|
|
1970
|
-
type: Injectable
|
|
1971
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }]; } });
|
|
1972
|
-
|
|
1973
|
-
class ConfigurationRuntimeService {
|
|
1974
|
-
constructor(apiService, contextService, runtimeContextService) {
|
|
1975
|
-
this.apiService = apiService;
|
|
1976
|
-
this.contextService = contextService;
|
|
1977
|
-
this.runtimeContextService = runtimeContextService;
|
|
1978
|
-
this._isInitialized = false;
|
|
1979
|
-
this.uiDefinitionProperties = {};
|
|
1007
|
+
get asset() {
|
|
1008
|
+
var _a, _b;
|
|
1009
|
+
return (_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.assets[0]) !== null && _b !== void 0 ? _b : null;
|
|
1980
1010
|
}
|
|
1981
|
-
|
|
1982
|
-
this.
|
|
1983
|
-
this._runtimeContext = undefined;
|
|
1984
|
-
this.initializationProps = undefined;
|
|
1985
|
-
this.uiDefinitionProperties = {};
|
|
1011
|
+
get root$() {
|
|
1012
|
+
return this.state$.pipe(map$1(state => state.salesTransactionItems[0]), filter$1(isDefined));
|
|
1986
1013
|
}
|
|
1987
|
-
|
|
1014
|
+
get root() {
|
|
1988
1015
|
var _a, _b;
|
|
1989
|
-
|
|
1990
|
-
const uiDefinitionExternals = (_b = uiDefinitionContainer.source.externals) !== null && _b !== void 0 ? _b : {};
|
|
1991
|
-
return combineLatest([
|
|
1992
|
-
this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
|
|
1993
|
-
this.contextService.initTestMode(),
|
|
1994
|
-
]).pipe(first(), map(([runtimeData, context]) => {
|
|
1995
|
-
var _a;
|
|
1996
|
-
this.contextService.update({
|
|
1997
|
-
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),
|
|
1998
|
-
});
|
|
1999
|
-
this._runtimeContext = {
|
|
2000
|
-
modelId: uiDefinitionContainer.modelId,
|
|
2001
|
-
runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
|
|
2002
|
-
runtimeMode: RuntimeMode.TEST,
|
|
2003
|
-
uiDefinitionContainer,
|
|
2004
|
-
};
|
|
2005
|
-
return this._runtimeContext;
|
|
2006
|
-
}), tap(() => (this._isInitialized = true)));
|
|
2007
|
-
}
|
|
2008
|
-
init(props) {
|
|
2009
|
-
this.initializationProps = props;
|
|
2010
|
-
const context = this.contextService.resolve();
|
|
2011
|
-
return this.runtimeContextService.getRuntimeContext(props.productId, props.offeringId).pipe(tap(runtimeContext => {
|
|
2012
|
-
var _a, _b, _c, _d;
|
|
2013
|
-
this.uiDefinitionProperties = (_b = (_a = runtimeContext.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {};
|
|
2014
|
-
const { PriceListId } = (_c = context.properties) !== null && _c !== void 0 ? _c : {};
|
|
2015
|
-
const mergeContext = Object.assign(Object.assign({}, runtimeContext), { properties: Object.assign(Object.assign(Object.assign({}, runtimeContext.properties), context.properties), { PricingEnabled: PriceListId ? 'true' : 'false' }) });
|
|
2016
|
-
this.id15to18('AccountId', mergeContext.properties);
|
|
2017
|
-
this._runtimeContext = mergeContext;
|
|
2018
|
-
if (context.properties && ((_d = this._runtimeContext.properties) === null || _d === void 0 ? void 0 : _d.StartDate)) {
|
|
2019
|
-
this.contextService.update({
|
|
2020
|
-
properties: Object.assign(Object.assign({}, this._runtimeContext.properties), context.properties),
|
|
2021
|
-
});
|
|
2022
|
-
}
|
|
2023
|
-
return this._runtimeContext;
|
|
2024
|
-
}), tap(() => (this._isInitialized = true)));
|
|
1016
|
+
return (_b = (_a = this.configurationStateSubj$.getValue()) === null || _a === void 0 ? void 0 : _a.salesTransactionItems[0]) !== null && _b !== void 0 ? _b : null;
|
|
2025
1017
|
}
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
1018
|
+
constructor(flowInfoService, messageService, configurationRuntimeService, salesTransactionService, proceduresApiService) {
|
|
1019
|
+
this.flowInfoService = flowInfoService;
|
|
1020
|
+
this.messageService = messageService;
|
|
1021
|
+
this.configurationRuntimeService = configurationRuntimeService;
|
|
1022
|
+
this.salesTransactionService = salesTransactionService;
|
|
1023
|
+
this.proceduresApiService = proceduresApiService;
|
|
1024
|
+
this.hasUnsavedChanges = false;
|
|
1025
|
+
this.configurationStateSubj$ = new BehaviorSubject(null);
|
|
1026
|
+
this.previousConfigurationStateSubj$ = new BehaviorSubject(null);
|
|
1027
|
+
this.isLoadingSubj$ = new BehaviorSubject(false);
|
|
1028
|
+
this.isLoading$ = this.isLoadingSubj$.asObservable();
|
|
1029
|
+
}
|
|
1030
|
+
reset() {
|
|
1031
|
+
this.hasUnsavedChanges = false;
|
|
1032
|
+
this.configurationStateSubj$.next(null);
|
|
1033
|
+
this.previousConfigurationStateSubj$.next(null);
|
|
1034
|
+
}
|
|
1035
|
+
init$() {
|
|
1036
|
+
const { state } = this.salesTransactionService;
|
|
1037
|
+
const { productId, transactionItemId } = this.flowInfoService.context;
|
|
1038
|
+
if (!state) {
|
|
1039
|
+
return of(undefined);
|
|
2030
1040
|
}
|
|
2031
|
-
|
|
2032
|
-
|
|
1041
|
+
let transactionItem = state === null || state === void 0 ? void 0 : state.salesTransactionItems.find(item => item.id === transactionItemId);
|
|
1042
|
+
if (!transactionItem) {
|
|
1043
|
+
transactionItem = state.salesTransactionItems.find(item => item.productId === productId);
|
|
1044
|
+
}
|
|
1045
|
+
const assetItem = transactionItem ? state === null || state === void 0 ? void 0 : state.assets.find(item => item.id === (transactionItem === null || transactionItem === void 0 ? void 0 : transactionItem.assetId)) : undefined;
|
|
1046
|
+
const configurationState = Object.assign(Object.assign({}, state), { salesTransactionItems: transactionItem ? [transactionItem] : [], assets: assetItem ? [assetItem] : [] });
|
|
1047
|
+
this.configurationStateSubj$.next(configurationState);
|
|
1048
|
+
this.previousConfigurationStateSubj$.next(configurationState);
|
|
1049
|
+
return of(undefined);
|
|
2033
1050
|
}
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
1051
|
+
patch$(transactionItem) {
|
|
1052
|
+
const { state, root } = this;
|
|
1053
|
+
if (!state) {
|
|
1054
|
+
return throwError(() => new Error(`Configuration State is not initialized`));
|
|
2037
1055
|
}
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
source[propertyName] = SalesforceIdUtils.generateId18FromId15(value);
|
|
1056
|
+
if (!root) {
|
|
1057
|
+
return throwError(() => new Error(`Root SalesTransactionItem not found`));
|
|
2041
1058
|
}
|
|
1059
|
+
const newRoot = new TransactionItemWorker(root).replace(transactionItem).ti;
|
|
1060
|
+
const newSalesTransaction = Object.assign(Object.assign({}, state), { salesTransactionItems: [newRoot] });
|
|
1061
|
+
return this.configureRequest$(newSalesTransaction).pipe(catchError$1(error => {
|
|
1062
|
+
console.error(error);
|
|
1063
|
+
if (!this.configurationRuntimeService.uiDefinitionProps.suppressToastMessages) {
|
|
1064
|
+
this.messageService.add({ severity: 'error', summary: error });
|
|
1065
|
+
}
|
|
1066
|
+
return throwError(() => error);
|
|
1067
|
+
}), tap$1(() => {
|
|
1068
|
+
if (!this.hasUnsavedChanges) {
|
|
1069
|
+
this.hasUnsavedChanges = true;
|
|
1070
|
+
}
|
|
1071
|
+
}), map$1(noop));
|
|
2042
1072
|
}
|
|
2043
|
-
|
|
2044
|
-
|
|
1073
|
+
patch(transactionItem) {
|
|
1074
|
+
this.patch$(transactionItem).subscribe();
|
|
2045
1075
|
}
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
1076
|
+
configureRequest$(salesTransaction) {
|
|
1077
|
+
const request = {
|
|
1078
|
+
salesTransaction,
|
|
1079
|
+
};
|
|
1080
|
+
this.isLoadingSubj$.next(true);
|
|
1081
|
+
return this.proceduresApiService.apply$(request).pipe(tap$1(result => {
|
|
1082
|
+
const newState = result.salesTransaction;
|
|
1083
|
+
this.configurationStateSubj$.next(newState);
|
|
1084
|
+
this.previousConfigurationStateSubj$.next(cloneDeep(newState));
|
|
1085
|
+
}), map$1(response => response.salesTransaction), catchError$1(error => throwError(() => {
|
|
1086
|
+
const resetState = this.previousConfigurationStateSubj$.getValue();
|
|
1087
|
+
if (resetState) {
|
|
1088
|
+
this.previousConfigurationStateSubj$.next(cloneDeep(resetState));
|
|
1089
|
+
this.configurationStateSubj$.next(resetState);
|
|
1090
|
+
}
|
|
1091
|
+
if (error.error) {
|
|
1092
|
+
return extractErrorDetails(error.error).join('. ');
|
|
1093
|
+
}
|
|
1094
|
+
return error.message || JSON.stringify(error);
|
|
1095
|
+
})), finalize$1(() => this.isLoadingSubj$.next(false)));
|
|
2049
1096
|
}
|
|
2050
|
-
|
|
2051
|
-
|
|
1097
|
+
configureExternal$(props) {
|
|
1098
|
+
// TODO: implement
|
|
1099
|
+
throw new Error('Not implemented');
|
|
1100
|
+
}
|
|
1101
|
+
configureGuidedSelling$(data) {
|
|
1102
|
+
// TODO: implement
|
|
1103
|
+
throw new Error('Not implemented');
|
|
2052
1104
|
}
|
|
2053
1105
|
}
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
|
1106
|
+
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: i4.ProceduresApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1107
|
+
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService });
|
|
1108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, decorators: [{
|
|
2057
1109
|
type: Injectable
|
|
2058
|
-
}], ctorParameters: function () { return [{ type:
|
|
1110
|
+
}], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i2.MessageService }, { type: ConfigurationRuntimeService }, { type: SalesTransactionService }, { type: i4.ProceduresApiService }]; } });
|
|
2059
1111
|
|
|
2060
1112
|
class ConfigurationStateService {
|
|
2061
|
-
constructor(configurationRuntimeService, configurationService,
|
|
1113
|
+
constructor(configurationRuntimeService, configurationService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService, salesTransactionService, salesTransactionApiService, toastService) {
|
|
2062
1114
|
this.configurationRuntimeService = configurationRuntimeService;
|
|
2063
1115
|
this.configurationService = configurationService;
|
|
2064
|
-
this.quoteDraftService = quoteDraftService;
|
|
2065
|
-
this.toastService = toastService;
|
|
2066
1116
|
this.flowStateService = flowStateService;
|
|
2067
1117
|
this.flowInfoService = flowInfoService;
|
|
2068
1118
|
this.flowConfigurationService = flowConfigurationService;
|
|
2069
1119
|
this.flowStateApiService = flowStateApiService;
|
|
2070
|
-
this.
|
|
1120
|
+
this.salesTransactionService = salesTransactionService;
|
|
1121
|
+
this.salesTransactionApiService = salesTransactionApiService;
|
|
1122
|
+
this.toastService = toastService;
|
|
2071
1123
|
this.isInitialized$ = new BehaviorSubject(false);
|
|
2072
1124
|
this.canceledConfiguration$ = new Subject();
|
|
2073
1125
|
this.NOT_INITIALIZED = Symbol();
|
|
@@ -2091,9 +1143,9 @@ class ConfigurationStateService {
|
|
|
2091
1143
|
request$ = this.initStateful$();
|
|
2092
1144
|
}
|
|
2093
1145
|
else {
|
|
2094
|
-
request$ = this.
|
|
1146
|
+
request$ = this.configurationService.init$();
|
|
2095
1147
|
}
|
|
2096
|
-
return request$.pipe(
|
|
1148
|
+
return request$.pipe(take(1), tap(() => {
|
|
2097
1149
|
this.isInitialized$.next(true);
|
|
2098
1150
|
this.canceledConfiguration$ = new Subject();
|
|
2099
1151
|
}));
|
|
@@ -2107,10 +1159,11 @@ class ConfigurationStateService {
|
|
|
2107
1159
|
this.configurationStore = {};
|
|
2108
1160
|
this.executedFunctions = {};
|
|
2109
1161
|
this.configurationService.reset();
|
|
1162
|
+
this.configurationRuntimeService.reset();
|
|
2110
1163
|
}
|
|
2111
1164
|
execute$(exec) {
|
|
2112
1165
|
const request = this.execToRequest(exec);
|
|
2113
|
-
return this.executeRequest$(request).pipe(map
|
|
1166
|
+
return this.executeRequest$(request).pipe(map(result => {
|
|
2114
1167
|
// Keep only requested results
|
|
2115
1168
|
const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
|
|
2116
1169
|
var _a;
|
|
@@ -2133,7 +1186,7 @@ class ConfigurationStateService {
|
|
|
2133
1186
|
}
|
|
2134
1187
|
// prevent parallel configuration requests in stateless mode
|
|
2135
1188
|
if (!this.statelessExecutionRequest$) {
|
|
2136
|
-
this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay
|
|
1189
|
+
this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay(), take(1), finalize(() => (this.statelessExecutionRequest$ = null)));
|
|
2137
1190
|
}
|
|
2138
1191
|
return this.statelessExecutionRequest$;
|
|
2139
1192
|
}
|
|
@@ -2147,7 +1200,7 @@ class ConfigurationStateService {
|
|
|
2147
1200
|
},
|
|
2148
1201
|
},
|
|
2149
1202
|
});
|
|
2150
|
-
return this.executeRequest$(request).pipe(map
|
|
1203
|
+
return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
|
|
2151
1204
|
}
|
|
2152
1205
|
subscribe$(selectorName, inputData = {}, options) {
|
|
2153
1206
|
const requestId = UUID.UUID();
|
|
@@ -2170,58 +1223,41 @@ class ConfigurationStateService {
|
|
|
2170
1223
|
this.executeRequest$(request).subscribe();
|
|
2171
1224
|
}
|
|
2172
1225
|
}
|
|
2173
|
-
return subscription.data$.pipe(filter
|
|
1226
|
+
return subscription.data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), distinctUntilChanged(), finalize(() => {
|
|
2174
1227
|
var _a;
|
|
2175
1228
|
if (!((_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$.observed)) {
|
|
2176
1229
|
delete this.subscriptions[requestId];
|
|
2177
1230
|
}
|
|
2178
1231
|
}), takeUntil(this.canceledConfiguration$));
|
|
2179
1232
|
}
|
|
2180
|
-
saveConfiguration(
|
|
2181
|
-
var _a, _b
|
|
1233
|
+
saveConfiguration() {
|
|
1234
|
+
var _a, _b;
|
|
2182
1235
|
if (this.isStatefulConfiguration) {
|
|
2183
|
-
return this.flowStateApiService
|
|
2184
|
-
|
|
2185
|
-
|
|
1236
|
+
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 })));
|
|
1237
|
+
}
|
|
1238
|
+
const state = this.salesTransactionService.state;
|
|
1239
|
+
if (!state) {
|
|
1240
|
+
return of({ id: '' });
|
|
1241
|
+
}
|
|
1242
|
+
const { standalone } = this.flowInfoService.flow.properties;
|
|
1243
|
+
if (standalone) {
|
|
1244
|
+
return this.salesTransactionApiService.upsert(state);
|
|
1245
|
+
}
|
|
1246
|
+
const salesTransaction = this.salesTransactionService.state;
|
|
1247
|
+
const configurationRoot = this.configurationService.root;
|
|
1248
|
+
if (!salesTransaction || !configurationRoot) {
|
|
1249
|
+
return of({ id: '' });
|
|
1250
|
+
}
|
|
1251
|
+
const isNewTransactionItem = salesTransaction.salesTransactionItems.every(li => li.id !== configurationRoot.id);
|
|
1252
|
+
let salesTransactionItems;
|
|
1253
|
+
if (isNewTransactionItem) {
|
|
1254
|
+
salesTransactionItems = [...salesTransaction.salesTransactionItems, configurationRoot];
|
|
2186
1255
|
}
|
|
2187
1256
|
else {
|
|
2188
|
-
|
|
2189
|
-
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
2190
|
-
if (!quoteDraft) {
|
|
2191
|
-
return of({ quoteId: '' });
|
|
2192
|
-
}
|
|
2193
|
-
const rootLineItem = this.configurationService.getSnapshot();
|
|
2194
|
-
const asset = this.configurationService.getAsset();
|
|
2195
|
-
const currentState = rootLineItem ? [rootLineItem] : [];
|
|
2196
|
-
const initialState = asset ? [asset] : [];
|
|
2197
|
-
return this.quoteApiService.upsertQuote(Object.assign(Object.assign({}, quoteDraft), { currentState, initialState }));
|
|
2198
|
-
}
|
|
2199
|
-
else {
|
|
2200
|
-
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
2201
|
-
const lineItem = this.configurationService.getSnapshot();
|
|
2202
|
-
if (!quoteDraft || !lineItem) {
|
|
2203
|
-
return of({ quoteId: '' });
|
|
2204
|
-
}
|
|
2205
|
-
const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
|
|
2206
|
-
let currentState;
|
|
2207
|
-
if (isNewLineItem) {
|
|
2208
|
-
currentState = [...quoteDraft.currentState, lineItem];
|
|
2209
|
-
}
|
|
2210
|
-
else {
|
|
2211
|
-
currentState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
|
|
2212
|
-
}
|
|
2213
|
-
const asset = this.configurationService.getAsset();
|
|
2214
|
-
const initialState = [...((_d = (_c = this.quoteDraftService.quoteDraft) === null || _c === void 0 ? void 0 : _c.initialState) !== null && _d !== void 0 ? _d : [])];
|
|
2215
|
-
if (asset) {
|
|
2216
|
-
if (!initialState.some(li => li.id === asset.id)) {
|
|
2217
|
-
initialState.push(asset);
|
|
2218
|
-
}
|
|
2219
|
-
}
|
|
2220
|
-
return this.flowConfigurationService
|
|
2221
|
-
.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState, initialState }))
|
|
2222
|
-
.pipe(map$1(() => ({ quoteId: '' })));
|
|
2223
|
-
}
|
|
1257
|
+
salesTransactionItems = salesTransaction.salesTransactionItems.map(ti => ti.id === configurationRoot.id ? configurationRoot : ti);
|
|
2224
1258
|
}
|
|
1259
|
+
const newState = Object.assign(Object.assign({}, salesTransaction), { salesTransactionItems });
|
|
1260
|
+
return this.flowConfigurationService.calculate$(newState).pipe(map(() => ({ id: '' })));
|
|
2225
1261
|
}
|
|
2226
1262
|
cancelConfiguration() {
|
|
2227
1263
|
var _a, _b;
|
|
@@ -2242,37 +1278,33 @@ class ConfigurationStateService {
|
|
|
2242
1278
|
return (_b = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful) !== null && _b !== void 0 ? _b : false;
|
|
2243
1279
|
}
|
|
2244
1280
|
initStateful$() {
|
|
2245
|
-
var _a, _b, _c, _d, _e, _f
|
|
2246
|
-
this.ownerId = (
|
|
2247
|
-
const
|
|
2248
|
-
if (!this.flowStateService.stateId) {
|
|
1281
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1282
|
+
this.ownerId = (_b = (_a = this.configurationRuntimeService.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : '';
|
|
1283
|
+
const { productId, transactionItemId } = this.flowInfoService.context;
|
|
1284
|
+
if (!productId || !this.flowStateService.stateId) {
|
|
2249
1285
|
return of(undefined);
|
|
2250
1286
|
}
|
|
2251
|
-
const container =
|
|
2252
|
-
const lineItem = this.configurationService.generateLineItem();
|
|
1287
|
+
const container = this.configurationRuntimeService.uiDefinitionContainer;
|
|
2253
1288
|
let request$;
|
|
2254
|
-
if (!
|
|
1289
|
+
if (!transactionItemId) {
|
|
2255
1290
|
request$ = this.flowStateApiService.newConfiguration(this.flowStateService.stateId, {
|
|
2256
|
-
|
|
2257
|
-
actionsOverride: (
|
|
2258
|
-
selectorsOverride: (
|
|
1291
|
+
transactionItem: generateTransactionItem(productId),
|
|
1292
|
+
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 }))),
|
|
1293
|
+
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 }))),
|
|
2259
1294
|
});
|
|
2260
1295
|
}
|
|
2261
1296
|
else {
|
|
2262
1297
|
request$ = this.flowStateApiService.startConfiguration(this.flowStateService.stateId, {
|
|
2263
|
-
|
|
2264
|
-
actionsOverride: (
|
|
2265
|
-
selectorsOverride: (
|
|
1298
|
+
transactionItemId,
|
|
1299
|
+
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 }))),
|
|
1300
|
+
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 }))),
|
|
2266
1301
|
});
|
|
2267
1302
|
}
|
|
2268
|
-
return request$.pipe(map
|
|
1303
|
+
return request$.pipe(map(r => {
|
|
2269
1304
|
this.stateId = r.stateId;
|
|
2270
1305
|
return undefined;
|
|
2271
1306
|
}));
|
|
2272
1307
|
}
|
|
2273
|
-
initStateless$() {
|
|
2274
|
-
return this.configurationService.configure().pipe(map$1(() => undefined));
|
|
2275
|
-
}
|
|
2276
1308
|
execToRequest(exec) {
|
|
2277
1309
|
var _a;
|
|
2278
1310
|
return {
|
|
@@ -2318,39 +1350,37 @@ class ConfigurationStateService {
|
|
|
2318
1350
|
else {
|
|
2319
1351
|
execution$ = this.executeStateless$(fullRequest);
|
|
2320
1352
|
}
|
|
2321
|
-
return execution$.pipe(tap
|
|
1353
|
+
return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
|
|
2322
1354
|
}
|
|
2323
1355
|
executeStateless$(request) {
|
|
2324
1356
|
this.executionInProgress$.next(true);
|
|
2325
|
-
return
|
|
1357
|
+
return this.configurationService.state$.pipe(switchMap(state => {
|
|
2326
1358
|
var _a;
|
|
2327
1359
|
// Apply actions and execute configuration/price call
|
|
2328
1360
|
// No need to run configuration if no actions in the request
|
|
2329
1361
|
if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
2330
1362
|
return of(undefined);
|
|
2331
1363
|
}
|
|
2332
|
-
let configurationRequest = this.configurationService.generateRequest(false);
|
|
2333
1364
|
request.actions.forEach(action => {
|
|
2334
1365
|
var _a;
|
|
2335
|
-
|
|
1366
|
+
state = (_a = this.executeActionScript(state, action)) !== null && _a !== void 0 ? _a : state;
|
|
2336
1367
|
});
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
}), map$1(() => {
|
|
1368
|
+
return this.configurationService.configureRequest$(state);
|
|
1369
|
+
}), map(() => {
|
|
2340
1370
|
// Run selectors and apply them to the state
|
|
2341
|
-
const configurationState = this.configurationService.
|
|
1371
|
+
const configurationState = this.configurationService.state;
|
|
2342
1372
|
if (!configurationState) {
|
|
2343
1373
|
return { stateId: '', selectors: {} };
|
|
2344
1374
|
}
|
|
2345
1375
|
return this.runStatelessSelectors(request, configurationState);
|
|
2346
|
-
}), tap
|
|
2347
|
-
const configurationState = this.configurationService.
|
|
1376
|
+
}), tap(() => this.executionInProgress$.next(false)), catchError(error => {
|
|
1377
|
+
const configurationState = this.configurationService.previousState;
|
|
2348
1378
|
if (configurationState) {
|
|
2349
1379
|
const selectorsResult = this.runStatelessSelectors(request, configurationState);
|
|
2350
1380
|
this.handleSelectorsResponse(selectorsResult.selectors);
|
|
2351
1381
|
}
|
|
2352
1382
|
this.executionInProgress$.next(false);
|
|
2353
|
-
if (!this.configurationRuntimeService.
|
|
1383
|
+
if (!this.configurationRuntimeService.uiDefinitionProps.suppressToastMessages) {
|
|
2354
1384
|
this.toastService.add({ severity: ToastType.error, summary: String(error) });
|
|
2355
1385
|
}
|
|
2356
1386
|
return throwError(() => error);
|
|
@@ -2371,22 +1401,22 @@ class ConfigurationStateService {
|
|
|
2371
1401
|
};
|
|
2372
1402
|
this.executionInProgress$.next(true);
|
|
2373
1403
|
return this.flowStateApiService.executeConfiguration(this.flowStateService.stateId, this.stateId, request);
|
|
2374
|
-
}), tap
|
|
1404
|
+
}), tap(({ stateId }) => (this.stateId = stateId)), share(), tap(() => this.executionInProgress$.next(false)), catchError(e => {
|
|
2375
1405
|
this.executionInProgress$.next(false);
|
|
2376
1406
|
return throwError(() => e);
|
|
2377
1407
|
}));
|
|
2378
1408
|
}
|
|
2379
1409
|
executeStateful$(request) {
|
|
2380
|
-
return this.executionInProgress$.pipe(filter
|
|
1410
|
+
return this.executionInProgress$.pipe(filter(inProgress => !inProgress), take(1), switchMap(() =>
|
|
2381
1411
|
// make sure stream switches to statefulExecutionRequest$ before pushing an execution request
|
|
2382
1412
|
combineLatest([
|
|
2383
1413
|
this.statefulExecutionRequest$,
|
|
2384
|
-
of(undefined).pipe(tap
|
|
2385
|
-
])), map
|
|
1414
|
+
of(undefined).pipe(tap(() => this.statefulRequestStream$.next(request))),
|
|
1415
|
+
])), map(([response]) => response), take(1));
|
|
2386
1416
|
}
|
|
2387
1417
|
executeActionScript(request, processor) {
|
|
2388
|
-
var _a
|
|
2389
|
-
const { actions } = (
|
|
1418
|
+
var _a;
|
|
1419
|
+
const { actions } = (_a = this.configurationRuntimeService.uiDefinitionContainer) !== null && _a !== void 0 ? _a : {};
|
|
2390
1420
|
const configurationProcessor = actions === null || actions === void 0 ? void 0 : actions.find(action => action.apiName === processor.apiName);
|
|
2391
1421
|
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
|
2392
1422
|
throw `ConfigurationProcessor ${processor.apiName} not found`;
|
|
@@ -2394,8 +1424,8 @@ class ConfigurationStateService {
|
|
|
2394
1424
|
return this.executeProcessorScript(request, configurationProcessor, processor.inputData);
|
|
2395
1425
|
}
|
|
2396
1426
|
executeSelectorScript(request, processor) {
|
|
2397
|
-
var _a
|
|
2398
|
-
const { selectors } = (
|
|
1427
|
+
var _a;
|
|
1428
|
+
const { selectors } = (_a = this.configurationRuntimeService.uiDefinitionContainer) !== null && _a !== void 0 ? _a : {};
|
|
2399
1429
|
const configurationProcessor = selectors === null || selectors === void 0 ? void 0 : selectors.find(selector => selector.apiName === processor.apiName);
|
|
2400
1430
|
if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
|
|
2401
1431
|
throw `ConfigurationProcessor ${processor.apiName} not found`;
|
|
@@ -2437,25 +1467,63 @@ class ConfigurationStateService {
|
|
|
2437
1467
|
}, { stateId: '', selectors: {} });
|
|
2438
1468
|
}
|
|
2439
1469
|
}
|
|
2440
|
-
ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: ConfigurationRuntimeService }, { token: ConfigurationService }, { token:
|
|
1470
|
+
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: i1.FlowStateApiService }, { token: SalesTransactionService }, { token: i4.SalesTransactionApiService }, { token: i6.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2441
1471
|
ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService });
|
|
2442
1472
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
|
|
2443
1473
|
type: Injectable
|
|
2444
|
-
}], ctorParameters: function () { return [{ type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type:
|
|
1474
|
+
}], ctorParameters: function () { return [{ type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type: FlowStateService }, { type: FlowInfoService }, { type: FlowConfigurationService }, { type: i1.FlowStateApiService }, { type: SalesTransactionService }, { type: i4.SalesTransactionApiService }, { type: i6.ToastService }]; } });
|
|
2445
1475
|
|
|
2446
1476
|
class ConfigurationModule {
|
|
2447
1477
|
}
|
|
2448
1478
|
ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2449
1479
|
ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, imports: [ConfirmationDialogModule, ApiModule] });
|
|
2450
|
-
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [
|
|
1480
|
+
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [ConfigurationService, ConfigurationStateService, ConfigurationRuntimeService], imports: [ConfirmationDialogModule, ApiModule] });
|
|
2451
1481
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, decorators: [{
|
|
2452
1482
|
type: NgModule,
|
|
2453
1483
|
args: [{
|
|
2454
1484
|
imports: [ConfirmationDialogModule, ApiModule],
|
|
2455
|
-
providers: [
|
|
1485
|
+
providers: [ConfigurationService, ConfigurationStateService, ConfigurationRuntimeService],
|
|
1486
|
+
}]
|
|
1487
|
+
}] });
|
|
1488
|
+
|
|
1489
|
+
class FlowConfigurationModule {
|
|
1490
|
+
}
|
|
1491
|
+
FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1492
|
+
FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, imports: [ApiModule] });
|
|
1493
|
+
FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService], imports: [ApiModule] });
|
|
1494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, decorators: [{
|
|
1495
|
+
type: NgModule,
|
|
1496
|
+
args: [{
|
|
1497
|
+
imports: [ApiModule],
|
|
1498
|
+
providers: [FlowConfigurationService],
|
|
2456
1499
|
}]
|
|
2457
1500
|
}] });
|
|
2458
1501
|
|
|
1502
|
+
class CatalogProductsService {
|
|
1503
|
+
constructor() {
|
|
1504
|
+
this.stateSubj$ = new BehaviorSubject(null);
|
|
1505
|
+
this.state$ = this.stateSubj$.asObservable().pipe(filter(isDefined));
|
|
1506
|
+
}
|
|
1507
|
+
get state() {
|
|
1508
|
+
return this.stateSubj$.getValue();
|
|
1509
|
+
}
|
|
1510
|
+
reset() {
|
|
1511
|
+
this.stateSubj$.next(null);
|
|
1512
|
+
}
|
|
1513
|
+
setState(state) {
|
|
1514
|
+
this.stateSubj$.next(state);
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
CatalogProductsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogProductsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1518
|
+
CatalogProductsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogProductsService });
|
|
1519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogProductsService, decorators: [{
|
|
1520
|
+
type: Injectable
|
|
1521
|
+
}] });
|
|
1522
|
+
|
|
1523
|
+
const FORMATTING_SETTINGS_TOKEN = new InjectionToken('Summary of formatting settings for variant types of data, e.g. numbers, text, dates, etc');
|
|
1524
|
+
|
|
1525
|
+
const UI_DEFINITION_VERSION = 3;
|
|
1526
|
+
|
|
2459
1527
|
const DEFAULT_FORMATTING_SETTINGS = {
|
|
2460
1528
|
currencySymbol: DEFAULT_CURRENCY_SYMBOL,
|
|
2461
1529
|
decimalsCount: DEFAULT_DECIMALS_COUNT,
|
|
@@ -2469,14 +1537,14 @@ class SdkCoreModule {
|
|
|
2469
1537
|
SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2470
1538
|
SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, imports: [ConfigurationModule, FlowConfigurationModule] });
|
|
2471
1539
|
SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, providers: [
|
|
2472
|
-
ContextService,
|
|
2473
1540
|
FlowInfoService,
|
|
2474
|
-
QuoteDraftService,
|
|
2475
1541
|
ProductImagesService,
|
|
2476
1542
|
IntegrationState,
|
|
2477
1543
|
FlowStateService,
|
|
2478
1544
|
FlowStateConfigurationService,
|
|
2479
1545
|
RuntimeSettingsService,
|
|
1546
|
+
SalesTransactionService,
|
|
1547
|
+
CatalogProductsService,
|
|
2480
1548
|
{
|
|
2481
1549
|
provide: FORMATTING_SETTINGS_TOKEN,
|
|
2482
1550
|
useExisting: RuntimeSettingsService,
|
|
@@ -2487,14 +1555,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
2487
1555
|
args: [{
|
|
2488
1556
|
imports: [ConfigurationModule, FlowConfigurationModule],
|
|
2489
1557
|
providers: [
|
|
2490
|
-
ContextService,
|
|
2491
1558
|
FlowInfoService,
|
|
2492
|
-
QuoteDraftService,
|
|
2493
1559
|
ProductImagesService,
|
|
2494
1560
|
IntegrationState,
|
|
2495
1561
|
FlowStateService,
|
|
2496
1562
|
FlowStateConfigurationService,
|
|
2497
1563
|
RuntimeSettingsService,
|
|
1564
|
+
SalesTransactionService,
|
|
1565
|
+
CatalogProductsService,
|
|
2498
1566
|
{
|
|
2499
1567
|
provide: FORMATTING_SETTINGS_TOKEN,
|
|
2500
1568
|
useExisting: RuntimeSettingsService,
|
|
@@ -2679,5 +1747,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
2679
1747
|
* Generated bundle index. Do not edit.
|
|
2680
1748
|
*/
|
|
2681
1749
|
|
|
2682
|
-
export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService,
|
|
1750
|
+
export { ActionCodePipe, CalendarDirective, 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, TransactionItemWorker, UI_DEFINITION_VERSION, extractMetadata, findTransactionItem, findTransactionItemWithComparator, generateTransactionItem, insertTransactionItem, removeTransactionItem, replaceTransactionItem };
|
|
2683
1751
|
//# sourceMappingURL=veloceapps-sdk-core.mjs.map
|