@veloceapps/sdk 11.0.0-15 → 11.0.0-17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. package/cms/cms.actions.d.ts +98 -22
  2. package/cms/components/element-renderer/element-renderer.component.d.ts +3 -10
  3. package/cms/services/element-context.service.d.ts +0 -1
  4. package/cms/types/common.types.d.ts +2 -0
  5. package/cms/types/index.d.ts +0 -1
  6. package/cms/utils/path.utils.d.ts +1 -2
  7. package/cms/vendor-map.d.ts +4 -27
  8. package/core/index.d.ts +0 -1
  9. package/core/modules/configuration/index.d.ts +1 -4
  10. package/core/modules/configuration/services/configuration-runtime.service.d.ts +3 -20
  11. package/core/modules/configuration/services/configuration-state.service.d.ts +3 -3
  12. package/core/modules/configuration/services/configuration.service.d.ts +23 -46
  13. package/core/modules/flow-configuration/index.d.ts +0 -3
  14. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +5 -13
  15. package/core/services/flow-info.service.d.ts +3 -2
  16. package/core/services/flow-state-configuration.service.d.ts +2 -8
  17. package/core/services/flow-state.service.d.ts +6 -12
  18. package/core/services/index.d.ts +0 -1
  19. package/core/services/integration.state.d.ts +1 -1
  20. package/core/services/sales-transaction.service.d.ts +4 -2
  21. package/core/types/index.d.ts +0 -1
  22. package/core/utils/index.d.ts +2 -2
  23. package/core/utils/transaction-item.utils.d.ts +7 -0
  24. package/core/utils/transaction-item.worker.d.ts +8 -0
  25. package/esm2020/cms/cms.actions.mjs +99 -65
  26. package/esm2020/cms/cms.default.mjs +2 -3
  27. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +7 -64
  28. package/esm2020/cms/components/preview/preview.component.mjs +3 -3
  29. package/esm2020/cms/services/element-context.service.mjs +1 -1
  30. package/esm2020/cms/types/common.types.mjs +1 -1
  31. package/esm2020/cms/types/index.mjs +1 -2
  32. package/esm2020/cms/utils/element.utils.mjs +3 -3
  33. package/esm2020/cms/utils/path.utils.mjs +1 -10
  34. package/esm2020/cms/vendor-map.mjs +4 -5
  35. package/esm2020/core/core.module.mjs +4 -5
  36. package/esm2020/core/index.mjs +1 -2
  37. package/esm2020/core/modules/configuration/configuration.module.mjs +3 -4
  38. package/esm2020/core/modules/configuration/index.mjs +2 -5
  39. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +9 -67
  40. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +46 -54
  41. package/esm2020/core/modules/configuration/services/configuration.service.mjs +96 -226
  42. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +3 -4
  43. package/esm2020/core/modules/flow-configuration/index.mjs +1 -4
  44. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +15 -32
  45. package/esm2020/core/services/flow-info.service.mjs +9 -3
  46. package/esm2020/core/services/flow-state-configuration.service.mjs +10 -25
  47. package/esm2020/core/services/flow-state.service.mjs +25 -58
  48. package/esm2020/core/services/index.mjs +1 -2
  49. package/esm2020/core/services/integration.state.mjs +2 -2
  50. package/esm2020/core/services/sales-transaction.service.mjs +11 -5
  51. package/esm2020/core/types/index.mjs +1 -2
  52. package/esm2020/core/utils/index.mjs +3 -3
  53. package/esm2020/core/utils/transaction-item.utils.mjs +60 -0
  54. package/esm2020/core/utils/transaction-item.worker.mjs +16 -0
  55. package/esm2020/src/flow-routing.module.mjs +8 -8
  56. package/esm2020/src/guards/flow.guard.mjs +5 -7
  57. package/esm2020/src/guards/product-unload.guard.mjs +7 -7
  58. package/esm2020/src/index.mjs +1 -2
  59. package/esm2020/src/pages/debug/debug.component.mjs +10 -15
  60. package/esm2020/src/pages/product/product.component.mjs +11 -14
  61. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +5 -6
  62. package/esm2020/src/resolvers/sales-transaction.resolver.mjs +83 -0
  63. package/esm2020/src/resolvers/ui-definition.resolver.mjs +5 -4
  64. package/esm2020/src/services/flow-dialog.service.mjs +1 -1
  65. package/esm2020/src/services/flow-router.service.mjs +17 -24
  66. package/esm2020/src/services/flow.service.mjs +5 -13
  67. package/esm2020/src/types/index.mjs +2 -3
  68. package/esm2020/src/types/route.types.mjs +1 -1
  69. package/fesm2015/veloceapps-sdk-cms.mjs +116 -252
  70. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  71. package/fesm2015/veloceapps-sdk-core.mjs +318 -1116
  72. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  73. package/fesm2015/veloceapps-sdk.mjs +87 -120
  74. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  75. package/fesm2020/veloceapps-sdk-cms.mjs +112 -244
  76. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  77. package/fesm2020/veloceapps-sdk-core.mjs +366 -1162
  78. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  79. package/fesm2020/veloceapps-sdk.mjs +87 -120
  80. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  81. package/package.json +1 -1
  82. package/src/guards/product-unload.guard.d.ts +3 -3
  83. package/src/index.d.ts +0 -1
  84. package/src/pages/debug/debug.component.d.ts +1 -3
  85. package/src/pages/product/product.component.d.ts +3 -4
  86. package/src/pages/record-not-found/record-not-found.component.d.ts +2 -3
  87. package/src/resolvers/sales-transaction.resolver.d.ts +18 -0
  88. package/src/services/flow-dialog.service.d.ts +2 -1
  89. package/src/services/flow-router.service.d.ts +5 -5
  90. package/src/services/flow.service.d.ts +0 -1
  91. package/src/types/index.d.ts +1 -2
  92. package/src/types/route.types.d.ts +0 -5
  93. package/cms/plugins/configuration.plugin.d.ts +0 -23
  94. package/cms/types/configuration.types.d.ts +0 -21
  95. package/core/modules/configuration/helpers.d.ts +0 -7
  96. package/core/modules/configuration/services/runtime-context.service.d.ts +0 -12
  97. package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -8
  98. package/core/modules/flow-configuration/services/flow-update.service.d.ts +0 -13
  99. package/core/modules/flow-configuration/types/update.types.d.ts +0 -12
  100. package/core/services/quote-draft.service.d.ts +0 -50
  101. package/core/types/runtime.types.d.ts +0 -30
  102. package/core/utils/line-item.utils.d.ts +0 -25
  103. package/core/utils/line-item.worker.d.ts +0 -9
  104. package/esm2020/cms/plugins/configuration.plugin.mjs +0 -109
  105. package/esm2020/cms/types/configuration.types.mjs +0 -2
  106. package/esm2020/core/modules/configuration/helpers.mjs +0 -67
  107. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +0 -45
  108. package/esm2020/core/modules/configuration/types/configuration-runtime.types.mjs +0 -2
  109. package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +0 -138
  110. package/esm2020/core/modules/flow-configuration/types/update.types.mjs +0 -2
  111. package/esm2020/core/services/quote-draft.service.mjs +0 -174
  112. package/esm2020/core/types/runtime.types.mjs +0 -16
  113. package/esm2020/core/utils/line-item.utils.mjs +0 -187
  114. package/esm2020/core/utils/line-item.worker.mjs +0 -19
  115. package/esm2020/src/resolvers/quote.resolver.mjs +0 -82
  116. package/esm2020/src/types/context-route.types.mjs +0 -2
  117. package/esm2020/src/types/metrics.types.mjs +0 -2
  118. package/esm2020/src/utils/flow.utils.mjs +0 -14
  119. package/esm2020/src/utils/index.mjs +0 -2
  120. package/src/resolvers/quote.resolver.d.ts +0 -18
  121. package/src/types/context-route.types.d.ts +0 -5
  122. package/src/types/metrics.types.d.ts +0 -5
  123. package/src/utils/flow.utils.d.ts +0 -1
  124. package/src/utils/index.d.ts +0 -1
@@ -1,419 +1,97 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Optional, Inject, NgModule, inject, Directive, Input, LOCALE_ID, Pipe } from '@angular/core';
3
- import { UUID, ConfigurationContextMode, RuntimeModel, isNotLegacyUIDefinition, SalesforceIdUtils, 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, QuoteDraft, ChargeGroupUtils, isDefined, ConfigurationProcessorTypes, EntityUtil, ConfigurationMode, extractErrorDetails, ConfigurationTranslatorUtils, DEFAULT_TIME_FORMAT, formatNumber } from '@veloceapps/core';
4
- import { map, first, tap, filter, switchMap as switchMap$1, skip, take, shareReplay, catchError as catchError$1, finalize as finalize$1 } 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';
5
4
  import * as i1 from '@veloceapps/api';
6
5
  import { ApiModule } from '@veloceapps/api';
7
- import { HttpErrorResponse } from '@angular/common/http';
8
6
  import * as i6 from '@veloceapps/components';
9
- import { ToastType, ConfirmationComponent, ConfirmationDialogModule } from '@veloceapps/components';
10
- import { flatten, entries, sortBy, map as map$1, omit, uniqBy, isEqual, cloneDeep, assign, transform } from 'lodash';
11
- import { BehaviorSubject, map as map$2, tap as tap$1, switchMap, of, forkJoin, zip, noop, Subject, catchError, throwError, filter as filter$1, shareReplay as shareReplay$1, combineLatest, finalize, buffer, debounceTime, share, take as take$1, distinctUntilChanged, takeUntil } from 'rxjs';
12
- import * as i2 from '@veloceapps/api/v2';
13
- import * as i4 from 'primeng/api';
14
- import * as i5 from 'primeng/dynamicdialog';
15
- import moment from 'moment';
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';
16
13
  import { NgControl } from '@angular/forms';
17
14
  import { DATE_PIPE_DEFAULT_OPTIONS, formatDate } from '@angular/common';
18
15
 
19
- const getDefaultLineItem = (context, uiDefinitionProperties, qty = 1) => {
20
- var _a, _b, _c;
21
- const id = UUID.UUID();
22
- const attributes = [];
23
- const lineItems = [];
24
- return Object.assign({ id, type: (_a = uiDefinitionProperties.rootType) !== null && _a !== void 0 ? _a : '', cfgStatus: 'Default', actionCode: 'ADD', qty,
25
- attributes,
26
- lineItems, productName: ((_b = context.properties) === null || _b === void 0 ? void 0 : _b['displayName']) || context.productName, productId: (_c = context.productId) !== null && _c !== void 0 ? _c : '' }, (uiDefinitionProperties.offeringId ? { offeringId: uiDefinitionProperties.offeringId } : {}));
27
- };
28
- const generateEmptyContext = () => {
29
- return {
30
- headerId: '',
31
- mode: ConfigurationContextMode.TEST,
32
- properties: {},
33
- configurationToken: '',
34
- };
35
- };
36
- const getGuidedSellingConfigurationRequest = (data) => {
37
- return {
38
- mode: 'SEARCH',
39
- step: 'START',
40
- attributeDomainMode: 'ALL',
41
- context: generateEmptyContext(),
42
- lineItem: {
43
- actionCode: 'ADD',
44
- cfgStatus: 'Default',
45
- id: UUID.UUID(),
46
- qty: 1,
47
- type: data.modelType,
48
- attributes: Object.entries(data.attributesMap).map(([name, value]) => ({
49
- name,
50
- value,
51
- cfgStatus: 'User',
52
- })),
53
- },
54
- };
55
- };
56
- const generateConfigurationLineItem = (props, qty = 1) => {
57
- var _a, _b, _c;
58
- const id = UUID.UUID();
59
- const attributes = Object.entries((_a = props.attributesMap) !== null && _a !== void 0 ? _a : {}).map(([name, value]) => ({
60
- name,
61
- value,
62
- cfgStatus: 'User',
63
- }));
64
- const lineItems = [];
65
- return {
66
- id,
67
- type: (_b = props.product.typeName) !== null && _b !== void 0 ? _b : '',
68
- cfgStatus: 'Default',
69
- actionCode: 'ADD',
70
- qty,
71
- attributes,
72
- lineItems,
73
- productName: props.product.name,
74
- productId: (_c = props.product.id) !== null && _c !== void 0 ? _c : '',
75
- };
76
- };
77
-
78
- const FLOW_CUSTOMIZATION = new InjectionToken('FLOW_CUSTOMIZATION');
79
-
80
- const FORMATTING_SETTINGS_TOKEN = new InjectionToken('Summary of formatting settings for variant types of data, e.g. numbers, text, dates, etc');
81
-
82
- var RuntimeMode;
83
- (function (RuntimeMode) {
84
- RuntimeMode[RuntimeMode["TEST"] = 0] = "TEST";
85
- RuntimeMode[RuntimeMode["PROD"] = 1] = "PROD";
86
- })(RuntimeMode || (RuntimeMode = {}));
87
- var RuntimeOperation;
88
- (function (RuntimeOperation) {
89
- RuntimeOperation["INIT"] = "INIT";
90
- RuntimeOperation["UPDATE"] = "UPDATE";
91
- })(RuntimeOperation || (RuntimeOperation = {}));
92
- var RuntimeStep;
93
- (function (RuntimeStep) {
94
- RuntimeStep["START"] = "START";
95
- RuntimeStep["UPDATE"] = "UPDATE";
96
- })(RuntimeStep || (RuntimeStep = {}));
97
-
98
- const UI_DEFINITION_VERSION = 3;
99
-
100
- class RuntimeContextService {
101
- constructor(configurationApiService) {
102
- this.configurationApiService = configurationApiService;
103
- }
104
- getRuntimeContext(productId, offeringId, defaultUIDefinitionId, requiredUIDefinitionId) {
105
- return this.configurationApiService
106
- .getRuntimeDataByProductId(productId, offeringId, defaultUIDefinitionId, requiredUIDefinitionId)
107
- .pipe(map(runtimeData => {
108
- var _a;
109
- const uiDefinitionContainer = this.getUIDefinitionContainer(runtimeData);
110
- const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
111
- const { productName, properties } = (_a = Array.from(runtimeModel.components.values()).find(c => c.productId === productId)) !== null && _a !== void 0 ? _a : {};
112
- const uiDefinitionProperties = uiDefinitionContainer === null || uiDefinitionContainer === void 0 ? void 0 : uiDefinitionContainer.source.properties;
113
- return {
114
- modelId: runtimeData.modelId,
115
- uiDefinitionContainer: uiDefinitionContainer,
116
- runtimeModel: runtimeModel,
117
- runtimeMode: RuntimeMode.PROD,
118
- productId: productId,
119
- productType: (properties === null || properties === void 0 ? void 0 : properties['displayName']) || productName,
120
- offeringId: offeringId,
121
- properties: {
122
- PricingEnabled: (uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.pricingEnabled) ? 'true' : 'false',
123
- PriceListId: uiDefinitionProperties === null || uiDefinitionProperties === void 0 ? void 0 : uiDefinitionProperties.priceList,
124
- },
125
- };
126
- }));
127
- }
128
- getUIDefinitionContainer(runtimeData) {
129
- var _a;
130
- const containers = runtimeData.uiDefinitions.filter(container => isNotLegacyUIDefinition(container.source));
131
- return (_a = containers.find(container => container.source.primary)) !== null && _a !== void 0 ? _a : containers[0];
132
- }
133
- }
134
- RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }], target: i0.ɵɵFactoryTarget.Injectable });
135
- RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService });
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RuntimeContextService, decorators: [{
137
- type: Injectable
138
- }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }]; } });
139
-
140
16
  class ConfigurationRuntimeService {
141
- constructor(apiService, runtimeContextService) {
142
- this.apiService = apiService;
143
- this.runtimeContextService = runtimeContextService;
144
- this._isInitialized = false;
145
- this.uiDefinitionProperties = {};
146
- }
147
- reset() {
148
- this._isInitialized = false;
149
- this._runtimeContext = undefined;
150
- this.initializationProps = undefined;
151
- this.uiDefinitionProperties = {};
152
- }
153
- initTestMode(uiDefinitionContainer) {
154
- var _a;
155
- this.uiDefinitionProperties = (_a = uiDefinitionContainer.source.properties) !== null && _a !== void 0 ? _a : {};
156
- return this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId).pipe(first(), map(runtimeData => {
157
- this._runtimeContext = {
158
- modelId: uiDefinitionContainer.modelId,
159
- runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
160
- runtimeMode: RuntimeMode.TEST,
161
- uiDefinitionContainer,
162
- };
163
- return this._runtimeContext;
164
- }), tap(() => (this._isInitialized = true)));
165
- }
166
- init(props) {
167
- this.initializationProps = props;
168
- return this.runtimeContextService
169
- .getRuntimeContext(props.productId, props.offeringId, props.defaultUIDefinitionId, props.requiredUIDefinitionId)
170
- .pipe(tap(runtimeContext => {
171
- var _a, _b;
172
- this.uiDefinitionProperties = (_b = (_a = runtimeContext.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {};
173
- this.id15to18('AccountId', runtimeContext.properties);
174
- this._runtimeContext = runtimeContext;
175
- return this._runtimeContext;
176
- }), tap(() => (this._isInitialized = true)));
177
- }
178
- overrideUIDefinition(uiDefinitionContainer) {
179
- var _a;
180
- if (!this._runtimeContext) {
181
- return;
182
- }
183
- this._runtimeContext.uiDefinitionContainer = uiDefinitionContainer;
184
- this.uiDefinitionProperties = (_a = uiDefinitionContainer.source.properties) !== null && _a !== void 0 ? _a : {};
185
- }
186
- id15to18(propertyName, source) {
187
- if (!source) {
188
- return;
189
- }
190
- const value = source[propertyName];
191
- if (typeof value === 'string' && value.length === 15) {
192
- source[propertyName] = SalesforceIdUtils.generateId18FromId15(value);
193
- }
194
- }
195
- get isInitialized() {
196
- return this._isInitialized;
17
+ constructor() {
18
+ this.uiDefinitionContainer = null;
197
19
  }
198
- get runtimeModel() {
199
- var _a;
200
- return (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.runtimeModel;
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 : {};
201
23
  }
202
- get runtimeContext() {
203
- return this._runtimeContext;
24
+ reset() {
25
+ this.uiDefinitionContainer = null;
204
26
  }
205
27
  }
206
- ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [{ token: i1.ConfigurationApiService }, { token: RuntimeContextService }], target: i0.ɵɵFactoryTarget.Injectable });
28
+ ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
207
29
  ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService });
208
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
209
31
  type: Injectable
210
- }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: RuntimeContextService }]; } });
32
+ }] });
211
33
 
212
- const findLineItem = (id, lineItems) => {
213
- return findLineItemWithComparator(lineItems, (li) => li.id === id);
34
+ const findTransactionItem = (id, items) => {
35
+ return findTransactionItemWithComparator(items, (ti) => ti.id === id);
214
36
  };
215
- const findLineItemWithComparator = (lineItems, comparator) => {
216
- let currentLevel = lineItems;
37
+ const findTransactionItemWithComparator = (items, comparator) => {
38
+ let currentLevel = items;
217
39
  while (currentLevel.length) {
218
40
  const found = currentLevel.find(comparator);
219
41
  if (found) {
220
42
  return found;
221
43
  }
222
- currentLevel = flatten(currentLevel.map(parent => parent.lineItems));
44
+ currentLevel = flatten(currentLevel.map(parent => parent.children));
223
45
  }
224
46
  return;
225
47
  };
226
- const insertLineItem = (lineItem, parentId, toInsert) => {
227
- const insertData = lineItem.id === parentId ? [toInsert] : [];
228
- return Object.assign(Object.assign({}, lineItem), { lineItems: [
48
+ const insertTransactionItem = (item, parentId, toInsert) => {
49
+ const insertData = item.id === parentId ? [toInsert] : [];
50
+ return Object.assign(Object.assign({}, item), { children: [
229
51
  ...insertData,
230
- ...lineItem.lineItems.map(li => {
231
- return insertLineItem(li, parentId, toInsert);
52
+ ...item.children.map(ti => {
53
+ return insertTransactionItem(ti, parentId, toInsert);
232
54
  }),
233
55
  ] });
234
56
  };
235
- const removeLineItem = (lineItem, idToRemove) => {
236
- return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems
237
- .map(li => {
238
- if (li.id === idToRemove) {
57
+ const removeTransactionItem = (item, idToRemove) => {
58
+ return Object.assign(Object.assign({}, item), { children: item.children
59
+ .map(ti => {
60
+ if (ti.id === idToRemove) {
239
61
  return;
240
62
  }
241
- else if (li.lineItems.length) {
242
- return removeLineItem(li, idToRemove);
63
+ else if (ti.children.length) {
64
+ return removeTransactionItem(ti, idToRemove);
243
65
  }
244
- return li;
66
+ return ti;
245
67
  })
246
- .filter(r => !!r) });
247
- };
248
- const replaceLineItem = (lineItem, replaceTo, skipCardinalityCalculation = false) => {
249
- if (lineItem.id === replaceTo.id) {
250
- if (!skipCardinalityCalculation) {
251
- return Object.assign({}, recalculateCardinalityVariables(lineItem, replaceTo));
252
- }
253
- else {
254
- return Object.assign({}, replaceTo);
255
- }
256
- }
257
- return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems.map(li => replaceLineItem(li, replaceTo, skipCardinalityCalculation)) });
258
- };
259
- const collectCardinalityComputations = (portDomains) => {
260
- const cardinalityComputations = new Map();
261
- entries(portDomains).forEach(([key, portDomain]) => {
262
- cardinalityComputations.set(key, portDomain.properties['cardinalityComputation'] === 'true');
263
- });
264
- return cardinalityComputations;
265
- };
266
- const calculateCardinalityVariables = (lineItems, cardinalityComputations) => {
267
- const cardVars = new Map();
268
- lineItems
269
- .filter(({ port, type }) => !!port && !!type)
270
- .forEach(li => {
271
- var _a;
272
- if (cardinalityComputations.get(`${li.port}`)) {
273
- const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
274
- cardVars.set(cardinalityVariableName, ((_a = cardVars.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
275
- }
276
- });
277
- return cardVars;
278
- };
279
- const cardinalityRegexp = new RegExp('#CV-[a-zA-Z0-9_]+@(?<portName>[a-zA-Z0-9_]+)');
280
- const recalculateCardinalityVariables = (original, updated) => {
281
- var _a, _b;
282
- const cardinalityComputations = collectCardinalityComputations((_b = (_a = updated.portDomains) !== null && _a !== void 0 ? _a : original.portDomains) !== null && _b !== void 0 ? _b : {});
283
- const cardinalityVariables = calculateCardinalityVariables(updated.lineItems, cardinalityComputations);
284
- const originalCardinalityVariables = calculateCardinalityVariables(original.lineItems, cardinalityComputations);
285
- originalCardinalityVariables.forEach((value, key) => {
286
- var _a;
287
- const execArray = cardinalityRegexp.exec(key);
288
- const portName = (_a = execArray === null || execArray === void 0 ? void 0 : execArray.groups) === null || _a === void 0 ? void 0 : _a['portName'];
289
- if (!portName || cardinalityComputations.get(portName)) {
290
- if (cardinalityVariables.get(key) === value) {
291
- // no need to update cardinality if no changes
292
- cardinalityVariables.delete(key);
293
- }
294
- else if (!cardinalityVariables.has(key)) {
295
- // remove last item from port
296
- cardinalityVariables.set(key, 0);
297
- }
298
- }
299
- });
300
- return Object.assign(Object.assign({}, updated), { attributes: upsertAttributes(updated.attributes, [...cardinalityVariables].map(([name, value]) => ({ name, value, cfgStatus: 'Changed' }))) });
301
- };
302
- const mapAttributes = (attributes) => {
303
- return attributes.reduce((acc, { name, value }) => (Object.assign(Object.assign({}, acc), { [name]: value })), {});
304
- };
305
- const getAttributes = (attributes, names = []) => {
306
- const filtered = attributes.filter(({ name }) => names.includes(name));
307
- return sortBy(filtered, [({ name }) => names.indexOf(name)]);
68
+ .filter(isDefined) });
308
69
  };
309
- const upsertAttributes = (originalAttributes, attributesToUpsert) => {
310
- return attributesToUpsert.reduce((acc, { name, value }) => {
311
- const [origAttr] = getAttributes(acc, [name]);
312
- return [
313
- ...acc.filter(attr => attr.name !== name),
314
- Object.assign(Object.assign({}, (origAttr !== null && origAttr !== void 0 ? origAttr : { name, type: '' })), { cfgStatus: origAttr ? 'Changed' : 'User', value }),
315
- ];
316
- }, originalAttributes);
317
- };
318
- const patchAttributes = (rootLineItem, id, attrs, skipCardinalityCalculation = false) => {
319
- const lineItem = findLineItem(id, [rootLineItem]);
320
- if (!lineItem) {
321
- return rootLineItem;
70
+ const replaceTransactionItem = (item, replaceTo) => {
71
+ if (item.id === replaceTo.id) {
72
+ return Object.assign({}, replaceTo);
322
73
  }
323
- const attributes = upsertAttributes(lineItem.attributes, attrs);
324
- return replaceLineItem(rootLineItem, Object.assign(Object.assign({}, lineItem), { attributes }), skipCardinalityCalculation);
74
+ return Object.assign(Object.assign({}, item), { children: item.children.map(ti => replaceTransactionItem(ti, replaceTo)) });
325
75
  };
326
- const getAttributeValue = (attributes, name) => { var _a; return (_a = attributes.find(attr => attr.name === name)) === null || _a === void 0 ? void 0 : _a.value; };
327
- const generateLineItem = (port, type, parentId, attributes = [], lineItems = []) => {
76
+ const generateTransactionItem = (productId) => {
328
77
  return {
329
78
  id: UUID.UUID(),
330
- port,
331
- type,
332
- actionCode: 'ADD',
333
- cfgStatus: 'New',
334
- attributes: attributes.map(({ name, value }) => ({ cfgStatus: 'User', name, value })),
335
- lineItems,
336
- parentId,
337
- qty: 1,
79
+ productId,
338
80
  };
339
81
  };
340
- const getRecommendedPrices = (portDomain, type) => {
341
- var _a, _b;
342
- const domainType = portDomain.domainTypes.find(({ name }) => name === type);
343
- 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) => {
344
- const [netPrice, listPrice] = acc;
345
- return [netPrice + rp.netPrice, listPrice + rp.listPrice];
346
- }, [0, 0])) !== null && _b !== void 0 ? _b : [0, 0];
347
- return { net, list };
348
- };
349
- const getOriginParent = (lineItems, currentLineItem) => {
350
- let target = currentLineItem;
351
- while (target && target.rampInstanceId) {
352
- target = lineItems.find(sub => sub.id === currentLineItem.rampInstanceId);
353
- }
354
- return target;
355
- };
356
- const assetPredicateFn = (lineItem, assetId) => {
357
- if (!assetId) {
358
- return false;
359
- }
360
- return lineItem.assetId === assetId || lineItem.openOrderLineItemId === assetId;
361
- };
362
- const multiplyLineItems = (lineItem, qty, split) => {
363
- if (split) {
364
- const unifyIds = (lineItem) => (Object.assign(Object.assign({}, lineItem), { id: UUID.UUID(), lineItems: lineItem.lineItems.map(unifyIds) }));
365
- return map$1(new Array(qty), () => unifyIds(lineItem));
366
- }
367
- else {
368
- return [
369
- Object.assign(Object.assign({}, lineItem), { qty: qty }),
370
- ];
371
- }
372
- };
373
- const isTechnicalAttribute = (name) => {
374
- return name.startsWith('#') || name.startsWith('$');
375
- };
376
- const filterOutTechnicalAttributes = (attributes) => {
377
- return attributes.filter(({ name }) => !isTechnicalAttribute(name));
378
- };
379
-
380
- var lineItem_utils = /*#__PURE__*/Object.freeze({
381
- __proto__: null,
382
- assetPredicateFn: assetPredicateFn,
383
- filterOutTechnicalAttributes: filterOutTechnicalAttributes,
384
- findLineItem: findLineItem,
385
- findLineItemWithComparator: findLineItemWithComparator,
386
- generateLineItem: generateLineItem,
387
- getAttributeValue: getAttributeValue,
388
- getAttributes: getAttributes,
389
- getOriginParent: getOriginParent,
390
- getRecommendedPrices: getRecommendedPrices,
391
- insertLineItem: insertLineItem,
392
- isTechnicalAttribute: isTechnicalAttribute,
393
- mapAttributes: mapAttributes,
394
- multiplyLineItems: multiplyLineItems,
395
- patchAttributes: patchAttributes,
396
- recalculateCardinalityVariables: recalculateCardinalityVariables,
397
- removeLineItem: removeLineItem,
398
- replaceLineItem: replaceLineItem,
399
- upsertAttributes: upsertAttributes
400
- });
401
82
 
402
- class LineItemWorker {
83
+ class TransactionItemWorker {
403
84
  constructor(src) {
404
- this.li = Object.assign({}, src);
85
+ this.ti = Object.assign({}, src);
405
86
  }
406
87
  insert(parentId, toInsert) {
407
- return new LineItemWorker(insertLineItem(this.li, parentId, toInsert));
88
+ return new TransactionItemWorker(insertTransactionItem(this.ti, parentId, toInsert));
408
89
  }
409
90
  remove(id) {
410
- return new LineItemWorker(removeLineItem(this.li, id));
91
+ return new TransactionItemWorker(removeTransactionItem(this.ti, id));
411
92
  }
412
- replace(toReplace, skipCardinalityCalculation = false) {
413
- return new LineItemWorker(replaceLineItem(this.li, toReplace, skipCardinalityCalculation));
414
- }
415
- patchAttribute(attrs, id, skipCardinalityCalculation = false) {
416
- return new LineItemWorker(patchAttributes(this.li, id !== null && id !== void 0 ? id : this.li.id, attrs, skipCardinalityCalculation));
93
+ replace(toReplace) {
94
+ return new TransactionItemWorker(replaceTransactionItem(this.ti, toReplace));
417
95
  }
418
96
  }
419
97
 
@@ -425,6 +103,8 @@ function extractMetadata(uiDefinition) {
425
103
  ]);
426
104
  }
427
105
 
106
+ const FLOW_CUSTOMIZATION = new InjectionToken('FLOW_CUSTOMIZATION');
107
+
428
108
  class RuntimeSettingsService {
429
109
  constructor(configurationSettingsApiService) {
430
110
  this.configurationSettingsApiService = configurationSettingsApiService;
@@ -442,12 +122,12 @@ class RuntimeSettingsService {
442
122
  };
443
123
  }
444
124
  create() {
445
- return this.configurationSettingsApiService.fetchSettings().pipe(map$2(settings => this.parseConfigurationSettings(settings)), tap$1(configurationSettings => {
125
+ return this.configurationSettingsApiService.fetchSettings().pipe(map(settings => this.parseConfigurationSettings(settings)), tap(configurationSettings => {
446
126
  var _a;
447
127
  this.configurationSettings$.next(configurationSettings);
448
128
  this.addShoppingCartSettings((_a = configurationSettings['shopping-cart']) !== null && _a !== void 0 ? _a : []);
449
129
  this.formattingSettings = this.getFormattingSettings();
450
- }), map$2(() => undefined));
130
+ }), map(() => undefined));
451
131
  }
452
132
  initCurrency(iso) {
453
133
  if (iso) {
@@ -552,7 +232,7 @@ class FlowInfoService {
552
232
  return this.templatesSubj$.value;
553
233
  }
554
234
  get isFlowEngineInitialized$() {
555
- return this.templates$.pipe(map$2(v => Boolean(v.FLOW_ENGINE)));
235
+ return this.templates$.pipe(map(v => Boolean(v.FLOW_ENGINE)));
556
236
  }
557
237
  get isStateful() {
558
238
  var _a;
@@ -571,7 +251,7 @@ class FlowInfoService {
571
251
  this.flow$ = this.flowSubj$.asObservable();
572
252
  this.templates$ = this.templatesSubj$.asObservable();
573
253
  }
574
- cleanup() {
254
+ reset() {
575
255
  this.flowSubj$.next(null);
576
256
  this.templatesSubj$.next({});
577
257
  this.contextSubj$.next(null);
@@ -579,6 +259,9 @@ class FlowInfoService {
579
259
  init$(flowId, routeQueryParams) {
580
260
  return this.initFlow$(flowId, routeQueryParams).pipe(switchMap(() => this.initFlowTemplates$()));
581
261
  }
262
+ updateContext(update) {
263
+ this.contextSubj$.next(Object.assign(Object.assign({}, this.context), update));
264
+ }
582
265
  initFlow$(flowId, routeQueryParams) {
583
266
  var _a;
584
267
  const flow = (_a = this.runtimeSettingsService.getConfigurationSettings()['flows']) === null || _a === void 0 ? void 0 : _a.find(({ id }) => flowId === id);
@@ -604,7 +287,7 @@ class FlowInfoService {
604
287
  return forkJoin([
605
288
  this.templatesApiService.fetchTemplates$(),
606
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([]),
607
- ]).pipe(map$2(([templates, localTemplates]) => {
290
+ ]).pipe(map(([templates, localTemplates]) => {
608
291
  var _a, _b;
609
292
  const newValue = {};
610
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]) => {
@@ -649,12 +332,12 @@ class FlowInfoService {
649
332
  return objectName.toUpperCase();
650
333
  }
651
334
  }
652
- FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token: RuntimeSettingsService }, { token: i2.UITemplatesApiService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
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 });
653
336
  FlowInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService });
654
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, decorators: [{
655
338
  type: Injectable
656
339
  }], ctorParameters: function () {
657
- return [{ type: RuntimeSettingsService }, { type: i2.UITemplatesApiService }, { type: undefined, decorators: [{
340
+ return [{ type: RuntimeSettingsService }, { type: i4.UITemplatesApiService }, { type: undefined, decorators: [{
658
341
  type: Optional
659
342
  }, {
660
343
  type: Inject,
@@ -662,353 +345,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
662
345
  }] }];
663
346
  } });
664
347
 
665
- /**
666
- * @deprecated
667
- */
668
- class QuoteDraftService {
348
+ class SalesTransactionService {
669
349
  get isInitialized$() {
670
350
  return this.isInitializedSubj$.asObservable();
671
351
  }
672
352
  get isInitialized() {
673
353
  return this.isInitializedSubj$.getValue();
674
354
  }
675
- set isInitialized(value) {
676
- if (this.isInitialized !== value) {
677
- this.isInitializedSubj$.next(value);
678
- }
679
- }
680
- get hasUnsavedChanges() {
681
- return this._hasUnsavedChanges;
682
- }
683
355
  set hasUnsavedChanges(value) {
684
356
  var _a, _b;
685
- this._hasUnsavedChanges = value;
686
- if (!this._hasUnsavedChanges) {
687
- this.initialCurrentState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
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 : [];
688
360
  }
689
361
  }
690
- get hasProducts$() {
691
- return this.quoteSubj$.pipe(map(() => this.hasProducts));
692
- }
693
- get hasProducts() {
694
- var _a;
695
- return Boolean((_a = this.quoteSubj$.value) === null || _a === void 0 ? void 0 : _a.currentState.length);
362
+ get hasUnsavedChanges() {
363
+ return this.hasUnsavedChangesSubj$.getValue();
696
364
  }
697
- get hasAssets$() {
698
- return this.assetsSubj$.pipe(map(() => this.hasAssets));
365
+ get state() {
366
+ return this.stateSubj$.getValue();
699
367
  }
700
368
  get hasAssets() {
701
369
  var _a;
702
- return Boolean((_a = this.assetsSubj$.value) === null || _a === void 0 ? void 0 : _a.currentState.length);
370
+ return Boolean((_a = this.state) === null || _a === void 0 ? void 0 : _a.assets.length);
703
371
  }
704
- get assetsState() {
705
- return this.assetsSubj$.value;
372
+ get hasProducts() {
373
+ var _a;
374
+ return Boolean((_a = this.state) === null || _a === void 0 ? void 0 : _a.salesTransactionItems.length);
706
375
  }
707
- constructor(flowInfoService, accountApiService) {
376
+ constructor(flowInfoService, salesTransactionApiService) {
708
377
  this.flowInfoService = flowInfoService;
709
- this.accountApiService = accountApiService;
710
- this.quoteSubj$ = new BehaviorSubject(null);
711
- this.assetsSubj$ = new BehaviorSubject(null);
712
- this.resetSubj$ = new BehaviorSubject(true);
378
+ this.salesTransactionApiService = salesTransactionApiService;
379
+ this.stateSubj$ = new BehaviorSubject(null);
713
380
  this.isInitializedSubj$ = new BehaviorSubject(false);
714
- this.initialCurrentState = [];
715
- this._hasUnsavedChanges = false;
716
- this.reset$ = this.resetSubj$.asObservable();
717
- this.isInitializedSubj$
718
- .pipe(filter(isInitialized => isInitialized), switchMap$1(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
719
- .subscribe();
720
- }
721
- reset() {
722
- this.resetSubj$.next(true);
723
- this.quoteSubj$.next(null);
724
- this.assetsSubj$.next(null);
725
- this.isInitialized = false;
726
- 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));
727
385
  }
728
386
  init(headerId, params) {
729
- const isAccountMode = this.flowInfoService.context.mode === ConfigurationContextMode.ACCOUNT;
730
- const accountId = isAccountMode ? headerId : this.flowInfoService.context['accountId'];
731
- return zip(accountId ? this.accountApiService.getAssetsState(accountId, params) : of(null), isAccountMode
732
- ? of(QuoteDraft.emptyQuote(ConfigurationContextMode.ACCOUNT))
733
- : of(QuoteDraft.emptyQuote(ConfigurationContextMode.QUOTE))).pipe(tap(([assets, quote]) => {
734
- if (assets) {
735
- this.assetsSubj$.next(assets);
736
- }
737
- this.quoteSubj$.next(quote);
738
- }), map(() => noop()), take(1));
387
+ return this.salesTransactionApiService.getState(headerId, params).pipe(tap(res => this.stateSubj$.next(res.salesTransaction)), map(res => res.salesTransaction));
739
388
  }
740
389
  finalizeInit() {
741
- this.isInitialized = true;
390
+ this.isInitializedSubj$.next(true);
742
391
  this.hasUnsavedChanges = false;
743
392
  }
744
- setCurrentLineItemState(lineItems) {
745
- const quoteDraft = this.quoteSubj$.value;
746
- if (!quoteDraft) {
747
- return;
748
- }
749
- this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: lineItems }));
750
- }
751
- updateQuoteDraft(update) {
752
- const quoteDraft = this.quoteSubj$.value;
753
- if (!quoteDraft) {
754
- return;
755
- }
756
- this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), update));
757
- }
758
- updateByPriceSummary(priceSummary) {
759
- const quoteDraft = this.quoteSubj$.value;
760
- if (!quoteDraft) {
761
- return;
762
- }
763
- const updatedCurrentState = this.currentState.map(lineItem => {
764
- const updated = priceSummary.lineItems.find(li => li.id === lineItem.id);
765
- return updated !== null && updated !== void 0 ? updated : lineItem;
766
- });
767
- this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedCurrentState, totalPrices: priceSummary.totalPrices, approvalItems: priceSummary.approvalItems }));
768
- }
769
- setAssetsState(assetsState) {
770
- this.assetsSubj$.next(assetsState);
771
- }
772
- get quoteDraft$() {
773
- return this.quoteSubj$.pipe(map(() => this.quoteDraft), filter((quote) => Boolean(quote)), shareReplay());
774
- }
775
- get quoteDraft() {
776
- return this.quoteSubj$.value;
777
- }
778
- get currentState$() {
779
- return this.quoteDraft$.pipe(map(quote => quote.currentState));
780
- }
781
- get currentState() {
782
- var _a, _b;
783
- return (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
784
- }
785
- get isStandalone() {
786
- var _a, _b;
787
- return (_b = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.standalone) !== null && _b !== void 0 ? _b : false;
788
- }
789
- get isStandalone$() {
790
- return this.flowInfoService.flow$.pipe(map(() => this.isStandalone));
791
- }
792
- getInitialCurrentState() {
793
- return this.initialCurrentState;
794
- }
795
- isEditMode$() {
796
- return this.quoteDraft$.pipe(map(() => this.isEditMode()));
797
- }
798
- isEditMode() {
799
- var _a;
800
- const context = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.context;
801
- if ((context === null || context === void 0 ? void 0 : context.mode) === ConfigurationContextMode.ACCOUNT) {
802
- return true;
803
- }
804
- if ((context === null || context === void 0 ? void 0 : context.mode) === ConfigurationContextMode.QUOTE) {
805
- return context.properties.Status === 'Draft';
806
- }
807
- return false;
808
- }
809
- markAsUpdated(quote) {
810
- if ((quote === null || quote === void 0 ? void 0 : quote.context.properties['#mode']) === ConfigurationContextMode.ACCOUNT) {
811
- this.hasUnsavedChanges = !!quote && !quote.currentState.every(li => li.actionCode === 'EXIST');
812
- }
813
- else {
814
- this.hasUnsavedChanges = !isEqual(this.initialCurrentState, quote === null || quote === void 0 ? void 0 : quote.currentState);
815
- }
816
- }
817
- }
818
- QuoteDraftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteDraftService, deps: [{ token: FlowInfoService }, { token: i1.AccountApiService }], target: i0.ɵɵFactoryTarget.Injectable });
819
- QuoteDraftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteDraftService });
820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteDraftService, decorators: [{
821
- type: Injectable
822
- }], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i1.AccountApiService }]; } });
823
-
824
- class FlowUpdateService {
825
- update(rootLineItems, updates, charges) {
826
- let remainingUpdates = [...updates];
827
- let currentLevel = rootLineItems;
828
- while (currentLevel.length && remainingUpdates.length) {
829
- currentLevel.forEach(li => {
830
- const unhandledUpdates = [];
831
- remainingUpdates.forEach(update => {
832
- let updated = false;
833
- switch (update.dataType) {
834
- case 'LINEITEM':
835
- updated = this.applyLineItemUpdate(li, update, charges);
836
- break;
837
- case 'CHARGE':
838
- updated = this.applyChargeUpdate(li, update);
839
- break;
840
- case 'GROUP_CHARGE':
841
- updated = this.applyChargeGroupUpdate(li, update);
842
- break;
843
- default:
844
- // Unknown dataType. Do not try to handle it anymore
845
- updated = true;
846
- }
847
- if (!updated) {
848
- unhandledUpdates.push(update);
849
- }
850
- });
851
- remainingUpdates = unhandledUpdates;
852
- });
853
- currentLevel = flatten(currentLevel.map(parent => parent.lineItems));
854
- }
855
- }
856
- delete(lineItems, id) {
857
- const idsToRemove = [id];
858
- const topLevelLineItem = lineItems.find(li => li.id === id);
859
- if (topLevelLineItem) {
860
- // find term-related line items (which are only top level)
861
- // expired term line items won't be deleted
862
- let foundTermLineItem = topLevelLineItem;
863
- while (foundTermLineItem) {
864
- foundTermLineItem = lineItems.find(li => foundTermLineItem && li.rampInstanceId === foundTermLineItem.id);
865
- if (foundTermLineItem) {
866
- idsToRemove.push(foundTermLineItem.id);
867
- }
868
- }
869
- }
870
- const filtered = lineItems.filter(lineItem => !idsToRemove.includes(lineItem.id));
871
- return filtered.map(lineItem => new LineItemWorker(lineItem).remove(id).li);
872
- }
873
- applyLineItemUpdate(lineItem, update, charges) {
874
- if (lineItem.id !== update.id) {
875
- return false;
876
- }
877
- switch (update.attributeType) {
878
- case 'QTY':
879
- lineItem.qty = update.newValue;
880
- break;
881
- case 'EFFECTIVE_START_DATE':
882
- lineItem.properties['StartDate'] = moment(update.newValue).format('YYYY-MM-DD');
883
- break;
884
- case 'END_DATE':
885
- lineItem.properties['EndDate'] = moment(update.newValue).format('YYYY-MM-DD');
886
- break;
887
- case 'PRICE_ADJUSTMENT':
888
- {
889
- const charge = lineItem.chargeItems.find(charge => { var _a; return (_a = (charges || {})[charge.chargeId]) === null || _a === void 0 ? void 0 : _a.main; });
890
- if (charge) {
891
- charge.priceAdjustment = update.newValue;
892
- }
893
- }
894
- break;
895
- case 'LIST_PRICE_ADJUSTMENT':
896
- case 'MARGIN_ADJUSTMENT':
897
- {
898
- const charge = lineItem.chargeItems.find(charge => { var _a; return (_a = (charges || {})[charge.chargeId]) === null || _a === void 0 ? void 0 : _a.main; });
899
- if (charge) {
900
- charge.listPriceAdjustment = update.newValue;
901
- }
902
- }
903
- break;
904
- case 'COST_ADJUSTMENT':
905
- {
906
- const charge = lineItem.chargeItems.find(charge => { var _a; return (_a = (charges || {})[charge.chargeId]) === null || _a === void 0 ? void 0 : _a.main; });
907
- if (charge) {
908
- charge.costAdjustment = update.newValue;
909
- }
910
- }
911
- break;
912
- default:
913
- throw new Error(`Not suppored AttributeType for LineItem update: ${update.attributeType}`);
914
- }
915
- return true;
393
+ reset() {
394
+ this.stateSubj$.next(null);
395
+ this.isInitializedSubj$.next(false);
396
+ this.hasUnsavedChangesSubj$.next(false);
916
397
  }
917
- applyChargeUpdate(lineItem, update) {
918
- const foundCharge = lineItem.chargeItems.find(({ id }) => id === update.id);
919
- if (!foundCharge) {
920
- return false;
921
- }
922
- if (update.attributeType === 'PRICE_ADJUSTMENT') {
923
- foundCharge.priceAdjustment = update.newValue;
924
- }
925
- else if (update.attributeType === 'LIST_PRICE_ADJUSTMENT') {
926
- foundCharge.listPriceAdjustment = update.newValue;
927
- }
928
- else {
929
- throw new Error(`Not suppored AttributeType for Charge Item update: ${update.attributeType}`);
930
- }
931
- return true;
398
+ getInitialState() {
399
+ return this.initialState;
932
400
  }
933
- applyChargeGroupUpdate(lineItem, update) {
934
- const foundChargeGroup = ChargeGroupUtils.findChargeGroupById(update.id, lineItem);
935
- if (!foundChargeGroup) {
936
- return false;
937
- }
938
- if (update.attributeType === 'PRICE_ADJUSTMENT') {
939
- foundChargeGroup.priceAdjustment = update.newValue;
940
- }
941
- else if (update.attributeType === 'LIST_PRICE_ADJUSTMENT') {
942
- foundChargeGroup.listPriceAdjustment = update.newValue;
943
- }
944
- else {
945
- throw new Error(`Not suppored AttributeType for Charge Group Item update: ${update.attributeType}`);
946
- }
947
- return true;
401
+ setState(state) {
402
+ this.stateSubj$.next(state);
948
403
  }
949
404
  }
950
- FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
951
- FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService });
952
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowUpdateService, decorators: [{
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: [{
953
408
  type: Injectable
954
- }] });
409
+ }], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i4.SalesTransactionApiService }]; } });
955
410
 
956
411
  class FlowConfigurationService {
957
- constructor(proceduresApiService,
958
- // private quoteDraftService: QuoteDraftService,
959
- salesTransactionService, updateService, configurationService, flowInfoService) {
412
+ constructor(proceduresApiService, salesTransactionService) {
960
413
  this.proceduresApiService = proceduresApiService;
961
414
  this.salesTransactionService = salesTransactionService;
962
- this.updateService = updateService;
963
- this.configurationService = configurationService;
964
- this.flowInfoService = flowInfoService;
965
415
  this.updatedSubj$ = new Subject();
966
416
  this.updated$ = this.updatedSubj$.asObservable();
967
417
  }
968
418
  calculate$(state) {
969
- return this.proceduresApiService.apply$({ salesTransaction: state }).pipe(tap$1(result => this.salesTransactionService.setState(result.salesTransaction)), map$2(noop));
419
+ return this.proceduresApiService.apply$({ salesTransaction: state }).pipe(tap(result => this.salesTransactionService.setState(result.salesTransaction)), map(noop));
970
420
  }
971
421
  calculate(state) {
972
422
  this.calculate$(state).subscribe();
973
423
  }
974
- revert$(lineItemId) {
424
+ revert$(transactionItemId) {
975
425
  var _a;
976
426
  const state = this.salesTransactionService.state;
977
- const initialCurrentState = this.salesTransactionService.getInitialCurrentState();
427
+ const initialState = this.salesTransactionService.getInitialState();
978
428
  const currentState = (_a = state === null || state === void 0 ? void 0 : state.salesTransactionItems) !== null && _a !== void 0 ? _a : [];
979
- const currentLineItemIndex = currentState.findIndex(({ id }) => id === lineItemId);
980
- const currentLineItem = currentState[currentLineItemIndex];
981
- const initialLineItem = initialCurrentState.find(({ integrationId }) => integrationId === (currentLineItem === null || currentLineItem === void 0 ? void 0 : currentLineItem.integrationId));
982
- if (!state || !currentLineItem || !initialLineItem) {
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) {
983
433
  return of(null);
984
434
  }
985
435
  const updatedState = cloneDeep(currentState);
986
- updatedState.splice(currentLineItemIndex, 1, initialLineItem);
987
- return of([]).pipe(tap$1(() => {
436
+ updatedState.splice(currentItemIndex, 1, initialItem);
437
+ return of([]).pipe(tap(() => {
988
438
  this.salesTransactionService.setState(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }));
989
- }), switchMap(() => this.calculate$(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }))), map$2(() => this.salesTransactionService.state), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
439
+ }), switchMap(() => this.calculate$(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }))), map(() => this.salesTransactionService.state), tap(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
990
440
  }
991
- revert(lineItemId) {
992
- this.revert$(lineItemId).subscribe();
441
+ revert(transactionItemId) {
442
+ this.revert$(transactionItemId).subscribe();
993
443
  }
994
444
  delete$(ids) {
995
445
  const state = this.salesTransactionService.state;
996
446
  if (!state) {
997
447
  return of(null);
998
448
  }
999
- return of([]).pipe(map$2(() => state.salesTransactionItems.filter(({ id }) => !ids.includes(id))), switchMap(updatedState => this.calculate$(Object.assign(Object.assign({}, state), { salesTransactionItems: updatedState }))), map$2(() => this.salesTransactionService.state), tap$1(() => this.updatedSubj$.next()), this.handleErrorAndBounceBack());
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());
1000
450
  }
1001
451
  delete(ids) {
1002
452
  this.delete$(ids).subscribe();
1003
453
  }
1004
- addTerm$(term) {
1005
- // TODO: implement
1006
- return of(this.salesTransactionService.state);
1007
- }
1008
- addToCart$(props) {
1009
- // TODO: implement
1010
- return of(this.salesTransactionService.state);
1011
- }
1012
454
  handleErrorAndBounceBack() {
1013
455
  return (source$) => {
1014
456
  return source$.pipe(catchError(error => {
@@ -1024,88 +466,20 @@ class FlowConfigurationService {
1024
466
  };
1025
467
  }
1026
468
  }
1027
- FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i2.ProceduresApiService }, { token: SalesTransactionService }, { token: FlowUpdateService }, { token: ConfigurationService }, { token: FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
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 });
1028
470
  FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService });
1029
471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, decorators: [{
1030
472
  type: Injectable
1031
- }], ctorParameters: function () { return [{ type: i2.ProceduresApiService }, { type: SalesTransactionService }, { type: FlowUpdateService }, { type: ConfigurationService }, { type: FlowInfoService }]; } });
1032
-
1033
- class FlowConfigurationModule {
1034
- }
1035
- FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1036
- FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, imports: [ApiModule] });
1037
- FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService, FlowUpdateService], imports: [ApiModule] });
1038
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, decorators: [{
1039
- type: NgModule,
1040
- args: [{
1041
- imports: [ApiModule],
1042
- providers: [FlowConfigurationService, FlowUpdateService],
1043
- }]
1044
- }] });
1045
-
1046
- class SalesTransactionService {
1047
- get isInitialized$() {
1048
- return this.isInitializedSubj$.asObservable();
1049
- }
1050
- get isInitialized() {
1051
- return this.isInitializedSubj$.getValue();
1052
- }
1053
- set hasUnsavedChanges(value) {
1054
- var _a, _b;
1055
- this.hasUnsavedChangesSubj$.next(value);
1056
- if (!this.hasUnsavedChanges) {
1057
- this.initialCurrentState = (_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.salesTransactionItems) !== null && _b !== void 0 ? _b : [];
1058
- }
1059
- }
1060
- get hasUnsavedChanges() {
1061
- return this.hasUnsavedChangesSubj$.getValue();
1062
- }
1063
- get state() {
1064
- return this.stateSubj$.getValue();
1065
- }
1066
- constructor(flowInfoService, salesTransactionApiService) {
1067
- this.flowInfoService = flowInfoService;
1068
- this.salesTransactionApiService = salesTransactionApiService;
1069
- this.stateSubj$ = new BehaviorSubject(null);
1070
- this.isInitializedSubj$ = new BehaviorSubject(false);
1071
- this.hasUnsavedChangesSubj$ = new BehaviorSubject(false);
1072
- this.initialCurrentState = [];
1073
- this.hasUnsavedChanges$ = this.hasUnsavedChangesSubj$.asObservable();
1074
- this.state$ = this.stateSubj$.asObservable().pipe(filter$1(isDefined));
1075
- }
1076
- init(headerId, params) {
1077
- return this.salesTransactionApiService.getState(headerId, params).pipe(tap$1(res => this.stateSubj$.next(res.salesTransaction)), map$2(res => res.salesTransaction));
1078
- }
1079
- finalizeInit() {
1080
- this.isInitializedSubj$.next(true);
1081
- this.hasUnsavedChanges = false;
1082
- }
1083
- reset() {
1084
- this.stateSubj$.next(null);
1085
- this.isInitializedSubj$.next(false);
1086
- this.hasUnsavedChangesSubj$.next(false);
1087
- }
1088
- getInitialCurrentState() {
1089
- return this.initialCurrentState;
1090
- }
1091
- setState(state) {
1092
- this.stateSubj$.next(state);
1093
- }
1094
- }
1095
- SalesTransactionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService, deps: [{ token: FlowInfoService }, { token: i2.SalesTransactionApiService }], target: i0.ɵɵFactoryTarget.Injectable });
1096
- SalesTransactionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService });
1097
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionService, decorators: [{
1098
- type: Injectable
1099
- }], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i2.SalesTransactionApiService }]; } });
473
+ }], ctorParameters: function () { return [{ type: i4.ProceduresApiService }, { type: SalesTransactionService }]; } });
1100
474
 
1101
475
  class FlowStateService {
1102
- constructor(salesTransactionService, flowInfoService, flowConfiguration, processorsApiService, flowStateApiService, salesTransactionApiService, toastService, customizationService) {
1103
- this.salesTransactionService = salesTransactionService;
1104
- this.flowInfoService = flowInfoService;
476
+ constructor(flowConfiguration, flowInfoService, flowStateApiService, processorsApiService, salesTransactionApiService, salesTransactionService, toastService, customizationService) {
1105
477
  this.flowConfiguration = flowConfiguration;
1106
- this.processorsApiService = processorsApiService;
478
+ this.flowInfoService = flowInfoService;
1107
479
  this.flowStateApiService = flowStateApiService;
480
+ this.processorsApiService = processorsApiService;
1108
481
  this.salesTransactionApiService = salesTransactionApiService;
482
+ this.salesTransactionService = salesTransactionService;
1109
483
  this.toastService = toastService;
1110
484
  this.customizationService = customizationService;
1111
485
  this.NOT_INITIALIZED = Symbol();
@@ -1126,44 +500,18 @@ class FlowStateService {
1126
500
  all subscriptions get their updates according to updated QuoteDraft
1127
501
  */
1128
502
  this.isInitialized$()
1129
- .pipe(filter$1(Boolean), filter$1(() => !this.getFlowSafe().properties.stateful), switchMap(() => this.flowConfiguration.updated$), switchMap(() => this.executeRequest$({}, true)))
503
+ .pipe(filter(Boolean), filter(() => !this.flowInfoService.flow.properties.stateful), switchMap(() => this.flowConfiguration.updated$), switchMap(() => this.executeRequest$({}, true)))
1130
504
  .subscribe();
1131
- this.charges$ = this.flowInfoService.isFlowEngineInitialized$.pipe(filter$1(Boolean), switchMap(() => {
1132
- return this.subscribe$(UITemplateType.FLOW_ENGINE, 'CHARGES', null, {
1133
- cold: true,
1134
- }).pipe(map$2(response => (response.success ? response.result : {})));
1135
- }), shareReplay$1(1));
1136
- this.charges$.subscribe();
1137
- this.pricePlans$ = this.flowInfoService.isFlowEngineInitialized$.pipe(filter$1(Boolean), switchMap(() => {
1138
- return this.subscribe$(UITemplateType.FLOW_ENGINE, 'PRICE_PLANS', null, {
1139
- cold: true,
1140
- }).pipe(map$2(response => (response.success ? response.result : {})));
1141
- }), shareReplay$1(1));
1142
- this.pricePlans$.subscribe();
1143
- this.activeMetrics$ = this.flowInfoService.isFlowEngineInitialized$.pipe(filter$1(Boolean), switchMap(() => {
1144
- return this.subscribe$(UITemplateType.FLOW_ENGINE, 'ACTIVE_METRICS', null, {
1145
- cold: true,
1146
- }).pipe(map$2(response => (response.success ? response.result : [])));
1147
- }), shareReplay$1(1));
1148
- this.activeMetrics$.subscribe();
1149
- this.isPriceListLocked$ = this.flowInfoService.isFlowEngineInitialized$.pipe(filter$1(Boolean), switchMap(() => {
1150
- return this.subscribe$(UITemplateType.FLOW_ENGINE, 'IS_PRICE_LIST_LOCKED', null, {
1151
- cold: true,
1152
- }).pipe(map$2(response => (response.success ? response.result : false)));
1153
- }), shareReplay$1(1));
1154
- this.isPriceListLocked$.subscribe();
1155
505
  }
1156
506
  init$() {
1157
- return this.initProcessors$().pipe(switchMap(() => {
1158
- if (this.getFlowSafe().properties.stateful) {
1159
- return this.initStateful$();
1160
- }
1161
- else {
1162
- return this.initStateless$();
1163
- }
1164
- }));
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
+ }
1165
513
  }
1166
- cleanup() {
514
+ reset() {
1167
515
  Object.values(this.subscriptions).forEach(({ data$ }) => data$.complete());
1168
516
  this.subscriptions = {};
1169
517
  if (this.stateId$.value) {
@@ -1175,7 +523,7 @@ class FlowStateService {
1175
523
  this.cleanup$.next();
1176
524
  }
1177
525
  get hasUnsavedChanges() {
1178
- return this.getFlowSafe().properties.stateful
526
+ return this.flowInfoService.flow.properties.stateful
1179
527
  ? Array.from(this.trackedStatefulChangesMap.values()).some(Boolean)
1180
528
  : this.salesTransactionService.hasUnsavedChanges;
1181
529
  }
@@ -1186,14 +534,14 @@ class FlowStateService {
1186
534
  return this.executionInProgress$.asObservable();
1187
535
  }
1188
536
  isInitialized$() {
1189
- return combineLatest([this.stateId$, this.salesTransactionService.isInitialized$]).pipe(map$2(values => values.some(Boolean)));
537
+ return combineLatest([this.stateId$, this.salesTransactionService.isInitialized$]).pipe(map(values => values.some(Boolean)));
1190
538
  }
1191
539
  isInitialized() {
1192
540
  return Boolean(this.stateId$.value) || this.salesTransactionService.isInitialized;
1193
541
  }
1194
542
  execute$(scope, exec) {
1195
543
  const request = this.execToRequest(scope, exec);
1196
- return this.executeRequest$(request).pipe(map$2(result => {
544
+ return this.executeRequest$(request).pipe(map(result => {
1197
545
  // Keep only requested results
1198
546
  const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
1199
547
  var _a;
@@ -1210,7 +558,7 @@ class FlowStateService {
1210
558
  actions: [{ name: action, inputData }],
1211
559
  };
1212
560
  const request = this.execToRequest(scope, exec);
1213
- return this.executeRequest$(request).pipe(map$2(noop));
561
+ return this.executeRequest$(request).pipe(map(noop));
1214
562
  }
1215
563
  select$(scope, selectorName, inputData) {
1216
564
  const requestId = this.generateRequestId(scope, selectorName, inputData);
@@ -1222,7 +570,7 @@ class FlowStateService {
1222
570
  },
1223
571
  },
1224
572
  });
1225
- return this.executeRequest$(request).pipe(map$2(response => response.selectors[requestId]));
573
+ return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
1226
574
  }
1227
575
  subscribe$(scope, selectorName, inputData, options) {
1228
576
  const requestId = this.generateRequestId(scope, selectorName, inputData);
@@ -1248,7 +596,7 @@ class FlowStateService {
1248
596
  this.executeRequest$(request).subscribe();
1249
597
  }
1250
598
  }
1251
- return subscription.data$.pipe(filter$1(data => data != this.NOT_INITIALIZED), map$2(data => data), finalize(() => {
599
+ return subscription.data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), finalize(() => {
1252
600
  var _a;
1253
601
  if (!((_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$.observed)) {
1254
602
  delete this.subscriptions[requestId];
@@ -1256,9 +604,9 @@ class FlowStateService {
1256
604
  }));
1257
605
  }
1258
606
  save$() {
1259
- if (this.getFlowSafe().properties.stateful) {
607
+ if (this.flowInfoService.flow.properties.stateful) {
1260
608
  if (this.stateId$.value) {
1261
- return this.flowStateApiService.save(this.stateId$.value).pipe(map$2(({ quoteId }) => ({ id: quoteId })), tap$1(() => {
609
+ return this.flowStateApiService.save(this.stateId$.value).pipe(map(({ quoteId }) => ({ id: quoteId })), tap(() => {
1262
610
  Array.from(this.trackedStatefulChangesMap.keys()).forEach(key => {
1263
611
  this.trackedStatefulChangesMap.set(key, false);
1264
612
  });
@@ -1274,9 +622,9 @@ class FlowStateService {
1274
622
  return of({ id: '' });
1275
623
  }
1276
624
  submit$() {
1277
- if (this.getFlowSafe().properties.stateful) {
625
+ if (this.flowInfoService.flow.properties.stateful) {
1278
626
  if (this.stateId$.value) {
1279
- return this.flowStateApiService.submit(this.stateId$.value).pipe(map$2(({ quoteId }) => ({ id: quoteId })));
627
+ return this.flowStateApiService.submit(this.stateId$.value).pipe(map(({ quoteId }) => ({ id: quoteId })));
1280
628
  }
1281
629
  }
1282
630
  else {
@@ -1326,10 +674,10 @@ class FlowStateService {
1326
674
  fullRequest.selectors = assign(fullRequest.selectors, subscription.request.selectors);
1327
675
  }
1328
676
  }
1329
- const execution$ = this.getFlowSafe().properties.stateful
677
+ const execution$ = this.flowInfoService.flow.properties.stateful
1330
678
  ? this.executeStateful$(fullRequest)
1331
679
  : this.executeStateless$(fullRequest);
1332
- return execution$.pipe(tap$1(result => this.handleSelectorsResponse(result.selectors)));
680
+ return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
1333
681
  }
1334
682
  handleSelectorsResponse(selectors) {
1335
683
  Object.entries(selectors).forEach(([requestId, selectorResult]) => {
@@ -1359,7 +707,7 @@ class FlowStateService {
1359
707
  selectorsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
1360
708
  selectors: selectors,
1361
709
  })
1362
- .pipe(map$2(({ stateId, selectors }) => {
710
+ .pipe(map(({ stateId, selectors }) => {
1363
711
  this.handleSelectorsResponse(selectors);
1364
712
  this.stateId$.next(stateId);
1365
713
  }));
@@ -1379,31 +727,31 @@ class FlowStateService {
1379
727
  };
1380
728
  this.executionInProgress$.next(true);
1381
729
  return this.flowStateApiService.execute(this.stateId$.value, request);
1382
- }), tap$1(({ stateId }) => this.stateId$.next(stateId)), share(), tap$1(() => this.executionInProgress$.next(false)), catchError(e => {
730
+ }), tap(({ stateId }) => this.stateId$.next(stateId)), share(), tap(() => this.executionInProgress$.next(false)), catchError(e => {
1383
731
  this.executionInProgress$.next(false);
1384
732
  return throwError(() => e);
1385
733
  }));
1386
734
  }
1387
735
  executeStateful$(request) {
1388
- return this.executionInProgress$.pipe(filter$1(inProgress => !inProgress), take$1(1), switchMap(() =>
736
+ return this.executionInProgress$.pipe(filter(inProgress => !inProgress), take(1), switchMap(() =>
1389
737
  // make sure stream switches to statefulExecutionRequest$ before pushing an execution request
1390
738
  combineLatest([
1391
739
  this.statefulExecutionRequest$,
1392
- of(undefined).pipe(tap$1(() => this.statefulRequestStream$.next(request))),
1393
- ])), map$2(([response]) => response), take$1(1));
740
+ of(undefined).pipe(tap(() => this.statefulRequestStream$.next(request))),
741
+ ])), map(([response]) => response), take(1));
1394
742
  }
1395
743
  initStateless$() {
1396
- return this.salesTransactionService.init(this.flowInfoService.context.headerId, this.flowInfoService.context).pipe(tap$1(() => {
744
+ return this.salesTransactionService.init(this.flowInfoService.context.headerId, this.flowInfoService.context).pipe(tap(() => {
1397
745
  var _a;
1398
746
  const assets = (_a = this.salesTransactionService.state) === null || _a === void 0 ? void 0 : _a.assets;
1399
747
  if (assets) {
1400
748
  this.flowStore = Object.assign(Object.assign({}, this.flowStore), { assets });
1401
749
  }
1402
- }), switchMap(state => this.flowConfiguration.calculate$(state)), tap$1(() => this.salesTransactionService.finalizeInit()), map$2(noop));
750
+ }), switchMap(state => this.flowConfiguration.calculate$(state)), tap(() => this.salesTransactionService.finalizeInit()), map(noop));
1403
751
  }
1404
752
  executeStateless$(request) {
1405
753
  this.executionInProgress$.next(true);
1406
- return of(undefined).pipe(tap$1(() => this.executeStatelessActions(request)), switchMap(() => {
754
+ return of(undefined).pipe(tap(() => this.executeStatelessActions(request)), switchMap(() => {
1407
755
  var _a;
1408
756
  /*
1409
757
  Skip price calculation in case
@@ -1417,7 +765,7 @@ class FlowStateService {
1417
765
  else {
1418
766
  return this.flowConfiguration.calculate$(state);
1419
767
  }
1420
- }), map$2(() => this.executeStatelessSelectors(request)), tap$1(() => this.executionInProgress$.next(false)), catchError(e => {
768
+ }), map(() => this.executeStatelessSelectors(request)), tap(() => this.executionInProgress$.next(false)), catchError(e => {
1421
769
  this.executionInProgress$.next(false);
1422
770
  return throwError(() => e);
1423
771
  }));
@@ -1465,17 +813,10 @@ class FlowStateService {
1465
813
  return result;
1466
814
  }, { stateId: '', selectors: {} });
1467
815
  }
1468
- getFlowSafe() {
1469
- if (!this.flowInfoService.flow) {
1470
- throw 'Flow is not defined';
1471
- }
1472
- return this.flowInfoService.flow;
1473
- }
1474
816
  initProcessors$() {
1475
817
  var _a;
1476
818
  const hasOverrides = Boolean((_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors);
1477
- const flow = this.getFlowSafe();
1478
- if (flow.properties.stateful && !hasOverrides) {
819
+ if (this.flowInfoService.flow.properties.stateful && !hasOverrides) {
1479
820
  // Skip initialization as backend will take processors from SF
1480
821
  return of(undefined);
1481
822
  }
@@ -1486,7 +827,7 @@ class FlowStateService {
1486
827
  return;
1487
828
  }
1488
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);
1489
- return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap$1(processors => {
830
+ return localProcessors$.pipe(switchMap(processors => processors ? of(processors) : this.processorsApiService.fetchConfigurationProcessors$(template.id)), tap(processors => {
1490
831
  const processorsMap = processors.reduce((acc, p) => {
1491
832
  acc[p.apiName] = p;
1492
833
  return acc;
@@ -1498,7 +839,7 @@ class FlowStateService {
1498
839
  if (!owners$.length) {
1499
840
  return of(undefined);
1500
841
  }
1501
- return forkJoin(owners$).pipe(map$2(noop));
842
+ return forkJoin(owners$).pipe(map(noop));
1502
843
  }
1503
844
  executeActionScript(request, executable) {
1504
845
  var _a;
@@ -1550,12 +891,12 @@ class FlowStateService {
1550
891
  }
1551
892
  }
1552
893
  }
1553
- FlowStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, deps: [{ token: SalesTransactionService }, { token: FlowInfoService }, { token: FlowConfigurationService }, { token: i2.ConfigurationProcessorsApiService }, { token: i1.FlowStateApiService }, { token: i2.SalesTransactionApiService }, { token: i6.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
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 });
1554
895
  FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService });
1555
896
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, decorators: [{
1556
897
  type: Injectable
1557
898
  }], ctorParameters: function () {
1558
- return [{ type: SalesTransactionService }, { type: FlowInfoService }, { type: FlowConfigurationService }, { type: i2.ConfigurationProcessorsApiService }, { type: i1.FlowStateApiService }, { type: i2.SalesTransactionApiService }, { type: i6.ToastService }, { type: undefined, decorators: [{
899
+ return [{ type: FlowConfigurationService }, { type: FlowInfoService }, { type: i1.FlowStateApiService }, { type: i4.ConfigurationProcessorsApiService }, { type: i4.SalesTransactionApiService }, { type: SalesTransactionService }, { type: i6.ToastService }, { type: undefined, decorators: [{
1559
900
  type: Optional
1560
901
  }, {
1561
902
  type: Inject,
@@ -1564,15 +905,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1564
905
  } });
1565
906
 
1566
907
  class FlowStateConfigurationService {
1567
- constructor(flowInfoService, flowConfigurationService, flowStateApiService, flowStateService) {
908
+ constructor(flowInfoService, flowStateService) {
1568
909
  this.flowInfoService = flowInfoService;
1569
- this.flowConfigurationService = flowConfigurationService;
1570
- this.flowStateApiService = flowStateApiService;
1571
910
  this.flowStateService = flowStateService;
1572
- this.configurationStateId$ = new BehaviorSubject(null);
1573
- }
1574
- get configurationStateId() {
1575
- return this.configurationStateId$.value;
1576
911
  }
1577
912
  addToCart$(props) {
1578
913
  var _a;
@@ -1584,26 +919,22 @@ class FlowStateConfigurationService {
1584
919
  request$ = of();
1585
920
  }
1586
921
  else {
1587
- const lineItem = generateConfigurationLineItem(props, props.qty);
1588
- request$ = this.flowStateApiService.newConfiguration(stateId, { lineItem }).pipe(tap$1(r => this.configurationStateId$.next(r.stateId)), switchMap(() => {
1589
- if (!this.configurationStateId) {
1590
- return of();
1591
- }
1592
- return this.flowStateApiService.saveConfiguration(stateId, this.configurationStateId).pipe(tap$1(() => this.configurationStateId$.next(null)), map$2(noop));
1593
- }));
922
+ // TODO: Implement
923
+ request$ = of();
1594
924
  }
1595
925
  }
1596
926
  else {
1597
- request$ = this.flowConfigurationService.addToCart$(props).pipe(map$2(noop));
927
+ // TODO: Implement
928
+ request$ = of();
1598
929
  }
1599
- return request$.pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map$2(noop));
930
+ return request$.pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map(noop));
1600
931
  }
1601
932
  }
1602
- FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: FlowInfoService }, { token: FlowConfigurationService }, { token: i1.FlowStateApiService }, { token: FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
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 });
1603
934
  FlowStateConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService });
1604
935
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, decorators: [{
1605
936
  type: Injectable
1606
- }], ctorParameters: function () { return [{ type: FlowInfoService }, { type: FlowConfigurationService }, { type: i1.FlowStateApiService }, { type: FlowStateService }]; } });
937
+ }], ctorParameters: function () { return [{ type: FlowInfoService }, { type: FlowStateService }]; } });
1607
938
 
1608
939
  class IntegrationState {
1609
940
  constructor() {
@@ -1623,12 +954,12 @@ class IntegrationState {
1623
954
  this.action$.next(action);
1624
955
  }
1625
956
  listen$(actionType) {
1626
- return this.action$.pipe(filter$1(action => action.type === actionType), map$2(action => action.payload));
957
+ return this.action$.pipe(filter(action => action.type === actionType), map(action => action.payload));
1627
958
  }
1628
959
  listenAll$() {
1629
960
  return this.action$.asObservable();
1630
961
  }
1631
- clear() {
962
+ reset() {
1632
963
  this.stateSubj$.next({});
1633
964
  }
1634
965
  }
@@ -1648,12 +979,12 @@ class ProductImagesService {
1648
979
  this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
1649
980
  this.fetchProductImage(productId);
1650
981
  }
1651
- return this.imagesMap$.pipe(map$2(imagesMap => { var _a; return (_a = imagesMap[productId]) !== null && _a !== void 0 ? _a : null; }), distinctUntilChanged());
982
+ return this.imagesMap$.pipe(map(imagesMap => { var _a; return (_a = imagesMap[productId]) !== null && _a !== void 0 ? _a : null; }), distinctUntilChanged());
1652
983
  }
1653
984
  fetchProductImage(productId) {
1654
985
  this.productApiService
1655
986
  .fetchImage$(productId)
1656
- .pipe(map$2(file => URL.createObjectURL(file)), catchError(() => of('')), tap$1(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
987
+ .pipe(map(file => URL.createObjectURL(file)), catchError(() => of('')), tap(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
1657
988
  .subscribe();
1658
989
  }
1659
990
  }
@@ -1664,142 +995,98 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1664
995
  }], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
1665
996
 
1666
997
  class ConfigurationService {
1667
- constructor(quoteDraftService, runtimeService, configurationApiService, messageService, dialogService, runtimeSettings, flowInfoService) {
1668
- this.quoteDraftService = quoteDraftService;
1669
- this.runtimeService = runtimeService;
1670
- this.configurationApiService = configurationApiService;
1671
- this.messageService = messageService;
1672
- this.dialogService = dialogService;
1673
- this.runtimeSettings = runtimeSettings;
998
+ get state$() {
999
+ return this.configurationStateSubj$.asObservable().pipe(filter$1(isDefined));
1000
+ }
1001
+ get state() {
1002
+ return this.configurationStateSubj$.getValue();
1003
+ }
1004
+ get previousState() {
1005
+ return this.previousConfigurationStateSubj$.getValue();
1006
+ }
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;
1010
+ }
1011
+ get root$() {
1012
+ return this.state$.pipe(map$1(state => state.salesTransactionItems[0]), filter$1(isDefined));
1013
+ }
1014
+ get root() {
1015
+ var _a, _b;
1016
+ return (_b = (_a = this.configurationStateSubj$.getValue()) === null || _a === void 0 ? void 0 : _a.salesTransactionItems[0]) !== null && _b !== void 0 ? _b : null;
1017
+ }
1018
+ constructor(flowInfoService, messageService, configurationRuntimeService, salesTransactionService, proceduresApiService) {
1674
1019
  this.flowInfoService = flowInfoService;
1675
- this.mode = ConfigurationMode.SEARCH;
1676
- this.configurationState = new BehaviorSubject(null);
1677
- this.previousConfigurationState = new BehaviorSubject(null);
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);
1678
1027
  this.isLoadingSubj$ = new BehaviorSubject(false);
1679
1028
  this.isLoading$ = this.isLoadingSubj$.asObservable();
1680
- this.hasUnsavedChanges = false;
1681
1029
  }
1682
1030
  reset() {
1683
1031
  this.hasUnsavedChanges = false;
1684
- this.runtimeService.reset();
1685
- this.configurableRamp = undefined;
1686
- this.configurationState.next(null);
1687
- this.previousConfigurationState.next(null);
1688
- }
1689
- patch$(lineItem) {
1690
- const source = this.getSnapshot();
1691
- if (!source) {
1692
- return throwError(() => new Error(`Source LineItem not found`));
1693
- }
1694
- this.configurableRamp = new LineItemWorker(source).replace(lineItem).li;
1695
- return this.configure().pipe(catchError$1(error => {
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);
1040
+ }
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);
1050
+ }
1051
+ patch$(transactionItem) {
1052
+ const { state, root } = this;
1053
+ if (!state) {
1054
+ return throwError(() => new Error(`Configuration State is not initialized`));
1055
+ }
1056
+ if (!root) {
1057
+ return throwError(() => new Error(`Root SalesTransactionItem not found`));
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 => {
1696
1062
  console.error(error);
1697
- if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
1063
+ if (!this.configurationRuntimeService.uiDefinitionProps.suppressToastMessages) {
1698
1064
  this.messageService.add({ severity: 'error', summary: error });
1699
1065
  }
1700
- // bounce back if configuration call has failed
1701
- const prevState = this.configurationState.value;
1702
- this.configurationState.next(prevState ? Object.assign({}, prevState) : null);
1703
1066
  return throwError(() => error);
1704
- }), tap(() => {
1067
+ }), tap$1(() => {
1705
1068
  if (!this.hasUnsavedChanges) {
1706
1069
  this.hasUnsavedChanges = true;
1707
1070
  }
1708
- }));
1709
- }
1710
- patch(lineItem) {
1711
- this.patch$(lineItem).subscribe();
1712
- }
1713
- setConfigurableRamp(lineItem) {
1714
- this.configurableRamp = lineItem;
1715
- }
1716
- get() {
1717
- return this.configurationState.pipe(map(state => state === null || state === void 0 ? void 0 : state.lineItem), shareReplay$1());
1718
- }
1719
- getSnapshot() {
1720
- var _a, _b;
1721
- 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;
1722
- }
1723
- getRuntimeModel() {
1724
- const runtimeModel = this.runtimeService.runtimeModel;
1725
- if (!runtimeModel) {
1726
- throw new Error('Runtime model not initialized');
1727
- }
1728
- return runtimeModel;
1729
- }
1730
- getRuntimeContext() {
1731
- const runtimeContext = this.runtimeService.runtimeContext;
1732
- if (!runtimeContext) {
1733
- throw new Error('Runtime context not initialized');
1734
- }
1735
- return runtimeContext;
1071
+ }), map$1(noop));
1736
1072
  }
1737
- get state$() {
1738
- return this.configurationState.asObservable();
1739
- }
1740
- get stateSnapshot() {
1741
- return this.configurationState.value;
1742
- }
1743
- get previousStateSnapshot() {
1744
- return this.previousConfigurationState.value;
1745
- }
1746
- get charges$() {
1747
- return this.configurationState.pipe(map(state => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.charges) !== null && _a !== void 0 ? _a : {}; }));
1748
- }
1749
- get chargesSnapshot() {
1750
- var _a, _b;
1751
- return (_b = (_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.charges) !== null && _b !== void 0 ? _b : {};
1752
- }
1753
- get pricePlans$() {
1754
- return this.configurationState.pipe(map(state => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.pricePlans) !== null && _a !== void 0 ? _a : {}; }));
1755
- }
1756
- get pricePlansSnapshot() {
1757
- var _a, _b;
1758
- return (_b = (_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.pricePlans) !== null && _b !== void 0 ? _b : {};
1759
- }
1760
- get procedureContext$() {
1761
- return this.configurationState.pipe(map(state => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.procedureContext) !== null && _a !== void 0 ? _a : {}; }));
1762
- }
1763
- get procedureContextSnapshot() {
1764
- var _a, _b;
1765
- return (_b = (_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.procedureContext) !== null && _b !== void 0 ? _b : {};
1073
+ patch(transactionItem) {
1074
+ this.patch$(transactionItem).subscribe();
1766
1075
  }
1767
- configure() {
1768
- return this.configureRequest$(this.generateRequest());
1769
- }
1770
- configureRequest$(configurationRequest) {
1771
- var _a;
1772
- const runtimeContext = this.getRuntimeContext();
1773
- const runtimeModel = this.getRuntimeModel();
1774
- const uiDefinitionProperties = this.getUIDefinitionProperties();
1775
- const mainPricingEnabled = (_a = runtimeContext.properties) === null || _a === void 0 ? void 0 : _a.PricingEnabled;
1776
- const pricingEnabled = mainPricingEnabled ? mainPricingEnabled === 'true' : uiDefinitionProperties.pricingEnabled;
1777
- const customPriceApi = this.runtimeSettings.getConfigurationSettings()['CUSTOM_PRICE_API'];
1076
+ configureRequest$(salesTransaction) {
1077
+ const request = {
1078
+ salesTransaction,
1079
+ };
1778
1080
  this.isLoadingSubj$.next(true);
1779
- const configure$ = pricingEnabled && customPriceApi
1780
- ? this.configurationApiService.customConfigurePrice({
1781
- url: customPriceApi,
1782
- configurationRequest,
1783
- runtimeModel,
1784
- })
1785
- : this.extendedConfigureLineItem$({
1786
- configurationRequest,
1787
- runtimeModel,
1788
- pricingEnabled,
1789
- });
1790
- return configure$.pipe(tap(result => {
1791
- var _a;
1792
- this.configurationState.next(result);
1793
- this.previousConfigurationState.next(cloneDeep(result));
1794
- if ((_a = result.deletedLineItems) === null || _a === void 0 ? void 0 : _a.length) {
1795
- this.showInactiveProductsConfirmation();
1796
- }
1797
- this.configurableRamp = result.lineItem;
1798
- }), map(({ lineItem }) => lineItem), catchError$1(error => throwError(() => {
1799
- const resetState = this.previousConfigurationState.value;
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();
1800
1087
  if (resetState) {
1801
- this.previousConfigurationState.next(cloneDeep(resetState));
1802
- this.configurationState.next(resetState);
1088
+ this.previousConfigurationStateSubj$.next(cloneDeep(resetState));
1089
+ this.configurationStateSubj$.next(resetState);
1803
1090
  }
1804
1091
  if (error.error) {
1805
1092
  return extractErrorDetails(error.error).join('. ');
@@ -1808,123 +1095,31 @@ class ConfigurationService {
1808
1095
  })), finalize$1(() => this.isLoadingSubj$.next(false)));
1809
1096
  }
1810
1097
  configureExternal$(props) {
1811
- return this.runtimeService
1812
- .init({ productId: props.productId, defaultQty: props.qty, attributesMap: props.attributesMap })
1813
- .pipe(switchMap$1(() => this.configure()), first(), catchError$1(error => {
1814
- this.messageService.add({ severity: ToastType.error, summary: error });
1815
- throw error;
1816
- }), finalize$1(() => this.reset()));
1098
+ // TODO: implement
1099
+ throw new Error('Not implemented');
1817
1100
  }
1818
1101
  configureGuidedSelling$(data) {
1819
- return this.extendedConfigureLineItem$({
1820
- configurationRequest: getGuidedSellingConfigurationRequest(data),
1821
- }).pipe(catchError$1(error => {
1822
- if (error instanceof HttpErrorResponse) {
1823
- this.messageService.add({ severity: ToastType.error, summary: error.error.message || error.error });
1824
- }
1825
- throw error;
1826
- }));
1827
- }
1828
- generateRequest(lightMode = true) {
1829
- var _a, _b, _c, _d;
1830
- const lineItem = this.generateLineItem();
1831
- let request = {
1832
- lineItem,
1833
- mode: this.mode,
1834
- step: !((_a = this.configurationState.value) === null || _a === void 0 ? void 0 : _a.lineItem) ? RuntimeStep.START : RuntimeStep.UPDATE,
1835
- attributeDomainMode: 'ALL',
1836
- context: (_c = (_b = this.quoteDraftService.quoteDraft) === null || _b === void 0 ? void 0 : _b.context) !== null && _c !== void 0 ? _c : generateEmptyContext(),
1837
- lineItems: ((_d = this.quoteDraftService.quoteDraft) === null || _d === void 0 ? void 0 : _d.currentState) || [],
1838
- asset: this.getAsset(),
1839
- };
1840
- if (lightMode) {
1841
- request = ConfigurationTranslatorUtils.lightenConfigurationRequest(request);
1842
- }
1843
- return request;
1844
- }
1845
- generateLineItem() {
1846
- var _a;
1847
- const runtimeContext = this.getRuntimeContext();
1848
- const uiDefinitionProperties = this.getUIDefinitionProperties();
1849
- let lineItem = this.configurableRamp;
1850
- if (!lineItem) {
1851
- const { initializationProps } = (_a = this.runtimeService) !== null && _a !== void 0 ? _a : {};
1852
- lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.defaultQty);
1853
- // Set default attributes
1854
- if (initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap) {
1855
- const attributes = transform(initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
1856
- lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
1857
- }
1858
- }
1859
- return lineItem;
1860
- }
1861
- getAsset() {
1862
- var _a, _b;
1863
- const lineItem = this.configurableRamp;
1864
- if (!lineItem) {
1865
- return;
1866
- }
1867
- const assetId = (_a = lineItem.assetId) !== null && _a !== void 0 ? _a : lineItem.openOrderLineItemId;
1868
- return (_b = this.quoteDraftService.assetsState) === null || _b === void 0 ? void 0 : _b.initialState.find(li => assetPredicateFn(li, assetId));
1869
- }
1870
- getUIDefinitionProperties() {
1871
- var _a, _b, _c;
1872
- return Object.assign(Object.assign({}, ((_b = (_a = this.getRuntimeContext().uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {})), ((_c = this.runtimeService.uiDefinitionProperties) !== null && _c !== void 0 ? _c : {}));
1873
- }
1874
- showInactiveProductsConfirmation() {
1875
- const confirmationConfig = {
1876
- title: ' ',
1877
- description: 'This quote contains inactive products. Do you want to remove them?',
1878
- primaryButtonLabel: 'Remove products',
1879
- secondaryButtonLabel: 'Back to Quote',
1880
- };
1881
- this.dialogService
1882
- .open(ConfirmationComponent, {
1883
- dismissableMask: false,
1884
- closeOnEscape: false,
1885
- closable: false,
1886
- showHeader: true,
1887
- header: `Inactive Products in Quote`,
1888
- width: '440px',
1889
- data: { confirmationConfig },
1890
- })
1891
- .onClose.subscribe(result => {
1892
- var _a, _b;
1893
- if (!result) {
1894
- const Id = (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.context.properties.Id) !== null && _b !== void 0 ? _b : '';
1895
- window['VELO_BACK_FN'].apply(null, [Id]);
1896
- }
1897
- });
1898
- }
1899
- extendedConfigureLineItem$({ configurationRequest, runtimeModel, pricingEnabled, }) {
1900
- return this.configurationApiService.configureLineItem({
1901
- configurationRequest: configurationRequest,
1902
- runtimeModel,
1903
- pricingEnabled,
1904
- });
1102
+ // TODO: implement
1103
+ throw new Error('Not implemented');
1905
1104
  }
1906
1105
  }
1907
- ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, deps: [{ token: QuoteDraftService }, { token: ConfigurationRuntimeService }, { token: i1.ConfigurationApiService }, { token: i4.MessageService }, { token: i5.DialogService }, { token: RuntimeSettingsService }, { token: FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
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 });
1908
1107
  ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService });
1909
1108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationService, decorators: [{
1910
1109
  type: Injectable
1911
- }], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: i1.ConfigurationApiService }, { type: i4.MessageService }, { type: i5.DialogService }, { type: RuntimeSettingsService }, { type: FlowInfoService }]; } });
1110
+ }], ctorParameters: function () { return [{ type: FlowInfoService }, { type: i2.MessageService }, { type: ConfigurationRuntimeService }, { type: SalesTransactionService }, { type: i4.ProceduresApiService }]; } });
1912
1111
 
1913
1112
  class ConfigurationStateService {
1914
- constructor(configurationRuntimeService, configurationService,
1915
- // private quoteDraftService: QuoteDraftService,
1916
- salesTransactionService, toastService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService,
1917
- // private quoteApiService: QuoteApiService,
1918
- salesTransactionApiService) {
1113
+ constructor(configurationRuntimeService, configurationService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService, salesTransactionService, salesTransactionApiService, toastService) {
1919
1114
  this.configurationRuntimeService = configurationRuntimeService;
1920
1115
  this.configurationService = configurationService;
1921
- this.salesTransactionService = salesTransactionService;
1922
- this.toastService = toastService;
1923
1116
  this.flowStateService = flowStateService;
1924
1117
  this.flowInfoService = flowInfoService;
1925
1118
  this.flowConfigurationService = flowConfigurationService;
1926
1119
  this.flowStateApiService = flowStateApiService;
1120
+ this.salesTransactionService = salesTransactionService;
1927
1121
  this.salesTransactionApiService = salesTransactionApiService;
1122
+ this.toastService = toastService;
1928
1123
  this.isInitialized$ = new BehaviorSubject(false);
1929
1124
  this.canceledConfiguration$ = new Subject();
1930
1125
  this.NOT_INITIALIZED = Symbol();
@@ -1948,9 +1143,9 @@ class ConfigurationStateService {
1948
1143
  request$ = this.initStateful$();
1949
1144
  }
1950
1145
  else {
1951
- request$ = of(undefined);
1146
+ request$ = this.configurationService.init$();
1952
1147
  }
1953
- return request$.pipe(take$1(1), tap$1(() => {
1148
+ return request$.pipe(take(1), tap(() => {
1954
1149
  this.isInitialized$.next(true);
1955
1150
  this.canceledConfiguration$ = new Subject();
1956
1151
  }));
@@ -1964,10 +1159,11 @@ class ConfigurationStateService {
1964
1159
  this.configurationStore = {};
1965
1160
  this.executedFunctions = {};
1966
1161
  this.configurationService.reset();
1162
+ this.configurationRuntimeService.reset();
1967
1163
  }
1968
1164
  execute$(exec) {
1969
1165
  const request = this.execToRequest(exec);
1970
- return this.executeRequest$(request).pipe(map$2(result => {
1166
+ return this.executeRequest$(request).pipe(map(result => {
1971
1167
  // Keep only requested results
1972
1168
  const actualSelectors = Object.entries(result.selectors).reduce((trunk, [requestId, result]) => {
1973
1169
  var _a;
@@ -1990,7 +1186,7 @@ class ConfigurationStateService {
1990
1186
  }
1991
1187
  // prevent parallel configuration requests in stateless mode
1992
1188
  if (!this.statelessExecutionRequest$) {
1993
- this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay$1(), take$1(1), finalize(() => (this.statelessExecutionRequest$ = null)));
1189
+ this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay(), take(1), finalize(() => (this.statelessExecutionRequest$ = null)));
1994
1190
  }
1995
1191
  return this.statelessExecutionRequest$;
1996
1192
  }
@@ -2004,7 +1200,7 @@ class ConfigurationStateService {
2004
1200
  },
2005
1201
  },
2006
1202
  });
2007
- return this.executeRequest$(request).pipe(map$2(response => response.selectors[requestId]));
1203
+ return this.executeRequest$(request).pipe(map(response => response.selectors[requestId]));
2008
1204
  }
2009
1205
  subscribe$(selectorName, inputData = {}, options) {
2010
1206
  const requestId = UUID.UUID();
@@ -2027,7 +1223,7 @@ class ConfigurationStateService {
2027
1223
  this.executeRequest$(request).subscribe();
2028
1224
  }
2029
1225
  }
2030
- return subscription.data$.pipe(filter$1(data => data != this.NOT_INITIALIZED), map$2(data => data), distinctUntilChanged(), finalize(() => {
1226
+ return subscription.data$.pipe(filter(data => data != this.NOT_INITIALIZED), map(data => data), distinctUntilChanged(), finalize(() => {
2031
1227
  var _a;
2032
1228
  if (!((_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$.observed)) {
2033
1229
  delete this.subscriptions[requestId];
@@ -2037,7 +1233,7 @@ class ConfigurationStateService {
2037
1233
  saveConfiguration() {
2038
1234
  var _a, _b;
2039
1235
  if (this.isStatefulConfiguration) {
2040
- 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$2(() => r))), map$2(r => ({ id: r.quoteId })));
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 })));
2041
1237
  }
2042
1238
  const state = this.salesTransactionService.state;
2043
1239
  if (!state) {
@@ -2047,27 +1243,21 @@ class ConfigurationStateService {
2047
1243
  if (standalone) {
2048
1244
  return this.salesTransactionApiService.upsert(state);
2049
1245
  }
2050
- // const lineItem = this.configurationService.getSnapshot();
2051
- // if (!lineItem) {
2052
- // return of({ id: '' });
2053
- // }
2054
- // const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
2055
- // let currentState: LineItem[];
2056
- // if (isNewLineItem) {
2057
- // currentState = [...quoteDraft.currentState, lineItem];
2058
- // } else {
2059
- // currentState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
2060
- // }
2061
- // const asset = this.configurationService.getAsset();
2062
- // const initialState = [...(this.quoteDraftService.quoteDraft?.initialState ?? [])];
2063
- // if (asset) {
2064
- // if (!initialState.some(li => li.id === asset.id)) {
2065
- // initialState.push(asset);
2066
- // }
2067
- // }
2068
- // TODO: adjust the logic for ShoppingCart
2069
- const newState = Object.assign({}, state);
2070
- return this.flowConfigurationService.calculate$(newState).pipe(map$2(() => ({ id: '' })));
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];
1255
+ }
1256
+ else {
1257
+ salesTransactionItems = salesTransaction.salesTransactionItems.map(ti => ti.id === configurationRoot.id ? configurationRoot : ti);
1258
+ }
1259
+ const newState = Object.assign(Object.assign({}, salesTransaction), { salesTransactionItems });
1260
+ return this.flowConfigurationService.calculate$(newState).pipe(map(() => ({ id: '' })));
2071
1261
  }
2072
1262
  cancelConfiguration() {
2073
1263
  var _a, _b;
@@ -2088,30 +1278,29 @@ class ConfigurationStateService {
2088
1278
  return (_b = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful) !== null && _b !== void 0 ? _b : false;
2089
1279
  }
2090
1280
  initStateful$() {
2091
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2092
- this.ownerId = (_c = (_b = (_a = this.configurationRuntimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : '';
2093
- const lineItemId = (_e = (_d = this.configurationRuntimeService.runtimeContext) === null || _d === void 0 ? void 0 : _d.properties) === null || _e === void 0 ? void 0 : _e.lineItemId;
2094
- 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) {
2095
1285
  return of(undefined);
2096
1286
  }
2097
- const container = (_f = this.configurationRuntimeService.runtimeContext) === null || _f === void 0 ? void 0 : _f.uiDefinitionContainer;
2098
- const lineItem = this.configurationService.generateLineItem();
1287
+ const container = this.configurationRuntimeService.uiDefinitionContainer;
2099
1288
  let request$;
2100
- if (!lineItemId) {
1289
+ if (!transactionItemId) {
2101
1290
  request$ = this.flowStateApiService.newConfiguration(this.flowStateService.stateId, {
2102
- lineItem,
2103
- actionsOverride: (_g = container === null || container === void 0 ? void 0 : container.actions) === null || _g === void 0 ? void 0 : _g.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
2104
- selectorsOverride: (_h = container === null || container === void 0 ? void 0 : container.selectors) === null || _h === void 0 ? void 0 : _h.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
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 }))),
2105
1294
  });
2106
1295
  }
2107
1296
  else {
2108
1297
  request$ = this.flowStateApiService.startConfiguration(this.flowStateService.stateId, {
2109
- lineItemId,
2110
- actionsOverride: (_j = container === null || container === void 0 ? void 0 : container.actions) === null || _j === void 0 ? void 0 : _j.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
2111
- selectorsOverride: (_k = container === null || container === void 0 ? void 0 : container.selectors) === null || _k === void 0 ? void 0 : _k.map(processor => (Object.assign(Object.assign({}, processor), { ownerId: this.ownerId }))),
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 }))),
2112
1301
  });
2113
1302
  }
2114
- return request$.pipe(map$2(r => {
1303
+ return request$.pipe(map(r => {
2115
1304
  this.stateId = r.stateId;
2116
1305
  return undefined;
2117
1306
  }));
@@ -2161,39 +1350,37 @@ class ConfigurationStateService {
2161
1350
  else {
2162
1351
  execution$ = this.executeStateless$(fullRequest);
2163
1352
  }
2164
- return execution$.pipe(tap$1(result => this.handleSelectorsResponse(result.selectors)));
1353
+ return execution$.pipe(tap(result => this.handleSelectorsResponse(result.selectors)));
2165
1354
  }
2166
1355
  executeStateless$(request) {
2167
1356
  this.executionInProgress$.next(true);
2168
- return of(undefined).pipe(switchMap(() => {
1357
+ return this.configurationService.state$.pipe(switchMap(state => {
2169
1358
  var _a;
2170
1359
  // Apply actions and execute configuration/price call
2171
1360
  // No need to run configuration if no actions in the request
2172
1361
  if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
2173
1362
  return of(undefined);
2174
1363
  }
2175
- let configurationRequest = this.configurationService.generateRequest(false);
2176
1364
  request.actions.forEach(action => {
2177
1365
  var _a;
2178
- configurationRequest = (_a = this.executeActionScript(configurationRequest, action)) !== null && _a !== void 0 ? _a : configurationRequest;
1366
+ state = (_a = this.executeActionScript(state, action)) !== null && _a !== void 0 ? _a : state;
2179
1367
  });
2180
- configurationRequest = ConfigurationTranslatorUtils.lightenConfigurationRequest(configurationRequest);
2181
- return this.configurationService.configureRequest$(configurationRequest);
2182
- }), map$2(() => {
1368
+ return this.configurationService.configureRequest$(state);
1369
+ }), map(() => {
2183
1370
  // Run selectors and apply them to the state
2184
- const configurationState = this.configurationService.stateSnapshot;
1371
+ const configurationState = this.configurationService.state;
2185
1372
  if (!configurationState) {
2186
1373
  return { stateId: '', selectors: {} };
2187
1374
  }
2188
1375
  return this.runStatelessSelectors(request, configurationState);
2189
- }), tap$1(() => this.executionInProgress$.next(false)), catchError(error => {
2190
- const configurationState = this.configurationService.previousStateSnapshot;
1376
+ }), tap(() => this.executionInProgress$.next(false)), catchError(error => {
1377
+ const configurationState = this.configurationService.previousState;
2191
1378
  if (configurationState) {
2192
1379
  const selectorsResult = this.runStatelessSelectors(request, configurationState);
2193
1380
  this.handleSelectorsResponse(selectorsResult.selectors);
2194
1381
  }
2195
1382
  this.executionInProgress$.next(false);
2196
- if (!this.configurationRuntimeService.uiDefinitionProperties.suppressToastMessages) {
1383
+ if (!this.configurationRuntimeService.uiDefinitionProps.suppressToastMessages) {
2197
1384
  this.toastService.add({ severity: ToastType.error, summary: String(error) });
2198
1385
  }
2199
1386
  return throwError(() => error);
@@ -2214,22 +1401,22 @@ class ConfigurationStateService {
2214
1401
  };
2215
1402
  this.executionInProgress$.next(true);
2216
1403
  return this.flowStateApiService.executeConfiguration(this.flowStateService.stateId, this.stateId, request);
2217
- }), tap$1(({ stateId }) => (this.stateId = stateId)), share(), tap$1(() => this.executionInProgress$.next(false)), catchError(e => {
1404
+ }), tap(({ stateId }) => (this.stateId = stateId)), share(), tap(() => this.executionInProgress$.next(false)), catchError(e => {
2218
1405
  this.executionInProgress$.next(false);
2219
1406
  return throwError(() => e);
2220
1407
  }));
2221
1408
  }
2222
1409
  executeStateful$(request) {
2223
- return this.executionInProgress$.pipe(filter$1(inProgress => !inProgress), take$1(1), switchMap(() =>
1410
+ return this.executionInProgress$.pipe(filter(inProgress => !inProgress), take(1), switchMap(() =>
2224
1411
  // make sure stream switches to statefulExecutionRequest$ before pushing an execution request
2225
1412
  combineLatest([
2226
1413
  this.statefulExecutionRequest$,
2227
- of(undefined).pipe(tap$1(() => this.statefulRequestStream$.next(request))),
2228
- ])), map$2(([response]) => response), take$1(1));
1414
+ of(undefined).pipe(tap(() => this.statefulRequestStream$.next(request))),
1415
+ ])), map(([response]) => response), take(1));
2229
1416
  }
2230
1417
  executeActionScript(request, processor) {
2231
- var _a, _b;
2232
- const { actions } = (_b = (_a = this.configurationRuntimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
1418
+ var _a;
1419
+ const { actions } = (_a = this.configurationRuntimeService.uiDefinitionContainer) !== null && _a !== void 0 ? _a : {};
2233
1420
  const configurationProcessor = actions === null || actions === void 0 ? void 0 : actions.find(action => action.apiName === processor.apiName);
2234
1421
  if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
2235
1422
  throw `ConfigurationProcessor ${processor.apiName} not found`;
@@ -2237,8 +1424,8 @@ class ConfigurationStateService {
2237
1424
  return this.executeProcessorScript(request, configurationProcessor, processor.inputData);
2238
1425
  }
2239
1426
  executeSelectorScript(request, processor) {
2240
- var _a, _b;
2241
- const { selectors } = (_b = (_a = this.configurationRuntimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
1427
+ var _a;
1428
+ const { selectors } = (_a = this.configurationRuntimeService.uiDefinitionContainer) !== null && _a !== void 0 ? _a : {};
2242
1429
  const configurationProcessor = selectors === null || selectors === void 0 ? void 0 : selectors.find(selector => selector.apiName === processor.apiName);
2243
1430
  if (!(configurationProcessor === null || configurationProcessor === void 0 ? void 0 : configurationProcessor.script)) {
2244
1431
  throw `ConfigurationProcessor ${processor.apiName} not found`;
@@ -2280,29 +1467,42 @@ class ConfigurationStateService {
2280
1467
  }, { stateId: '', selectors: {} });
2281
1468
  }
2282
1469
  }
2283
- ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: ConfigurationRuntimeService }, { token: ConfigurationService }, { token: SalesTransactionService }, { token: i6.ToastService }, { token: FlowStateService }, { token: FlowInfoService }, { token: FlowConfigurationService }, { token: i1.FlowStateApiService }, { token: i2.SalesTransactionApiService }], target: i0.ɵɵFactoryTarget.Injectable });
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 });
2284
1471
  ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService });
2285
1472
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
2286
1473
  type: Injectable
2287
- }], ctorParameters: function () { return [{ type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type: SalesTransactionService }, { type: i6.ToastService }, { type: FlowStateService }, { type: FlowInfoService }, { type: FlowConfigurationService }, { type: i1.FlowStateApiService }, { type: i2.SalesTransactionApiService }]; } });
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 }]; } });
2288
1475
 
2289
1476
  class ConfigurationModule {
2290
1477
  }
2291
1478
  ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2292
1479
  ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, imports: [ConfirmationDialogModule, ApiModule] });
2293
- ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [ConfigurationRuntimeService, RuntimeContextService, ConfigurationService, ConfigurationStateService], imports: [ConfirmationDialogModule, ApiModule] });
1480
+ ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, providers: [ConfigurationService, ConfigurationStateService, ConfigurationRuntimeService], imports: [ConfirmationDialogModule, ApiModule] });
2294
1481
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, decorators: [{
2295
1482
  type: NgModule,
2296
1483
  args: [{
2297
1484
  imports: [ConfirmationDialogModule, ApiModule],
2298
- providers: [ConfigurationRuntimeService, RuntimeContextService, ConfigurationService, ConfigurationStateService],
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],
2299
1499
  }]
2300
1500
  }] });
2301
1501
 
2302
1502
  class CatalogProductsService {
2303
1503
  constructor() {
2304
1504
  this.stateSubj$ = new BehaviorSubject(null);
2305
- this.state$ = this.stateSubj$.asObservable().pipe(filter$1(isDefined));
1505
+ this.state$ = this.stateSubj$.asObservable().pipe(filter(isDefined));
2306
1506
  }
2307
1507
  get state() {
2308
1508
  return this.stateSubj$.getValue();
@@ -2320,6 +1520,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2320
1520
  type: Injectable
2321
1521
  }] });
2322
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
+
2323
1527
  const DEFAULT_FORMATTING_SETTINGS = {
2324
1528
  currencySymbol: DEFAULT_CURRENCY_SYMBOL,
2325
1529
  decimalsCount: DEFAULT_DECIMALS_COUNT,
@@ -2334,7 +1538,6 @@ SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
2334
1538
  SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, imports: [ConfigurationModule, FlowConfigurationModule] });
2335
1539
  SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SdkCoreModule, providers: [
2336
1540
  FlowInfoService,
2337
- QuoteDraftService,
2338
1541
  ProductImagesService,
2339
1542
  IntegrationState,
2340
1543
  FlowStateService,
@@ -2353,7 +1556,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2353
1556
  imports: [ConfigurationModule, FlowConfigurationModule],
2354
1557
  providers: [
2355
1558
  FlowInfoService,
2356
- QuoteDraftService,
2357
1559
  ProductImagesService,
2358
1560
  IntegrationState,
2359
1561
  FlowStateService,
@@ -2545,5 +1747,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2545
1747
  * Generated bundle index. Do not edit.
2546
1748
  */
2547
1749
 
2548
- export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, FlowUpdateService, IntegrationState, LineItemWorker, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SalesTransactionService, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, assetPredicateFn, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateConfigurationLineItem, generateEmptyContext, generateLineItem, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
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 };
2549
1751
  //# sourceMappingURL=veloceapps-sdk-core.mjs.map