@veloceapps/sdk 8.0.0-116 → 8.0.0-118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -723,7 +723,7 @@ class FlowStateService {
723
723
  .pipe(filter$1(Boolean), filter$1(() => !this.getFlowSafe().properties.stateful), switchMap(() => this.quoteDraftService.quoteDraft$), skip$1(1), switchMap(() => this.executeRequest$({}, true)))
724
724
  .subscribe();
725
725
  this.charges$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(flow => {
726
- if (!(flow === null || flow === void 0 ? void 0 : flow.properties.stateful)) {
726
+ if (!flow.properties.stateful) {
727
727
  return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.charges));
728
728
  }
729
729
  else {
@@ -731,7 +731,7 @@ class FlowStateService {
731
731
  cold: true,
732
732
  }).pipe(map$1(response => (response.success ? response.result : {})));
733
733
  }
734
- }), shareReplay$1());
734
+ }), filter$1(isDefined), shareReplay$1());
735
735
  this.charges$.subscribe();
736
736
  this.pricePlans$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(flow => {
737
737
  if (!flow.properties.stateful) {
@@ -742,10 +742,10 @@ class FlowStateService {
742
742
  cold: true,
743
743
  }).pipe(map$1(response => (response.success ? response.result : {})));
744
744
  }
745
- }), shareReplay$1());
745
+ }), filter$1(isDefined), shareReplay$1());
746
746
  this.pricePlans$.subscribe();
747
747
  this.activeMetrics$ = this.flowInfoService.flow$.pipe(filter$1(isDefined), switchMap(flow => {
748
- if (!(flow === null || flow === void 0 ? void 0 : flow.properties.stateful)) {
748
+ if (!flow.properties.stateful) {
749
749
  return this.quoteDraftService.quoteDraft$.pipe(map$1(quoteDraft => quoteDraft.activeMetrics));
750
750
  }
751
751
  else {
@@ -753,7 +753,7 @@ class FlowStateService {
753
753
  cold: true,
754
754
  }).pipe(map$1(response => (response.success ? response.result : [])));
755
755
  }
756
- }), shareReplay$1());
756
+ }), filter$1(isDefined), shareReplay$1());
757
757
  this.activeMetrics$.subscribe();
758
758
  }
759
759
  init$() {
@@ -781,6 +781,9 @@ class FlowStateService {
781
781
  ? this._hasStatefulUnsavedChanges
782
782
  : this.quoteDraftService.hasUnsavedChanges;
783
783
  }
784
+ get stateId() {
785
+ return this.stateId$.value;
786
+ }
784
787
  isInitialized$() {
785
788
  return combineLatest([this.stateId$, this.quoteDraftService.isInitialized$]).pipe(map$1(values => values.some(Boolean)));
786
789
  }
@@ -963,7 +966,7 @@ class FlowStateService {
963
966
  if (!this.stateId$.value) {
964
967
  throw 'Stateful session is not initialized';
965
968
  }
966
- return this.flowStateApiService.execute(this.stateId$.value, request).pipe(tap$1(response => {
969
+ return this.flowStateApiService.execute(this.stateId$.value, request).pipe(tap$1(() => {
967
970
  var _a;
968
971
  if ((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length) {
969
972
  this._hasStatefulUnsavedChanges = true;
@@ -993,41 +996,54 @@ class FlowStateService {
993
996
  return this.flowConfiguration.calculate$(flowState);
994
997
  }
995
998
  executeStateless$(request) {
996
- return of(undefined).pipe(switchMap(() => {
999
+ return of(undefined).pipe(tap$1(() => this.executeStatelessActions(request)), switchMap(() => {
997
1000
  var _a;
998
- if (!this.quoteDraftService.quoteDraft || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
1001
+ /*
1002
+ Skip price calculation in case
1003
+ 1. No actions in the request
1004
+ 2. Initialization process execution (state not initialized yet)
1005
+ */
1006
+ if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length) || !this.isInitialized()) {
999
1007
  return of(undefined);
1000
1008
  }
1001
- let flowState = this.quoteDraftService.quoteDraft;
1002
- request.actions.forEach(action => {
1003
- var _a;
1004
- flowState = (_a = this.executeActionScript(flowState, action)) !== null && _a !== void 0 ? _a : flowState;
1005
- });
1006
- this.quoteDraftService.updateQuoteDraft(flowState);
1007
- return this.calculate$();
1008
- }), map$1(() => {
1009
+ else {
1010
+ return this.calculate$();
1011
+ }
1012
+ }), map$1(() => this.executeStatelessSelectors(request)));
1013
+ }
1014
+ executeStatelessActions(request) {
1015
+ var _a;
1016
+ if (!this.quoteDraftService.quoteDraft || !((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
1017
+ return;
1018
+ }
1019
+ let flowState = this.quoteDraftService.quoteDraft;
1020
+ request.actions.forEach(action => {
1009
1021
  var _a;
1010
- if (!this.quoteDraftService.quoteDraft) {
1011
- throw 'QuoteDraft is not initialized';
1022
+ flowState = (_a = this.executeActionScript(flowState, action)) !== null && _a !== void 0 ? _a : flowState;
1023
+ });
1024
+ this.quoteDraftService.updateQuoteDraft(flowState);
1025
+ }
1026
+ executeStatelessSelectors(request) {
1027
+ var _a;
1028
+ if (!this.quoteDraftService.quoteDraft) {
1029
+ throw 'QuoteDraft is not initialized';
1030
+ }
1031
+ const flowState = this.quoteDraftService.quoteDraft;
1032
+ return EntityUtil.entries((_a = request.selectors) !== null && _a !== void 0 ? _a : {}).reduce((result, [key, selector]) => {
1033
+ try {
1034
+ result.selectors[key] = {
1035
+ success: true,
1036
+ result: this.executeSelectorScript(flowState, selector),
1037
+ };
1012
1038
  }
1013
- const flowState = this.quoteDraftService.quoteDraft;
1014
- const executionResult = EntityUtil.entries((_a = request.selectors) !== null && _a !== void 0 ? _a : {}).reduce((result, [key, selector]) => {
1015
- try {
1016
- result.selectors[key] = {
1017
- success: true,
1018
- result: this.executeSelectorScript(flowState, selector),
1019
- };
1020
- }
1021
- catch (e) {
1022
- result.selectors[key] = {
1023
- success: false,
1024
- errorMessage: String(e),
1025
- };
1026
- }
1027
- return result;
1028
- }, { stateId: '', selectors: {} });
1029
- return executionResult;
1030
- }));
1039
+ catch (e) {
1040
+ result.selectors[key] = {
1041
+ success: false,
1042
+ errorMessage: String(e),
1043
+ };
1044
+ }
1045
+ return result;
1046
+ }, { stateId: '', selectors: {} });
1031
1047
  }
1032
1048
  getFlowSafe() {
1033
1049
  if (!this.flowInfoService.flow) {
@@ -1120,48 +1136,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1120
1136
  }] }];
1121
1137
  } });
1122
1138
 
1123
- function calculateMetricByMethod(lineItems, metric, method) {
1124
- const items = getLineItemsByMethod(lineItems, method);
1125
- return items.reduce((acc, li) => {
1126
- let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
1127
- if (method === 'avg' && li.length > 0) {
1128
- value /= li.length;
1129
- }
1130
- return acc + value;
1131
- }, 0);
1132
- }
1133
- function getLineItemsByMethod(lineItems, method) {
1134
- switch (method) {
1135
- case 'first': {
1136
- return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
1137
- }
1138
- case 'last': {
1139
- const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
1140
- const products = rootTermItems.map(lineItem => [
1141
- lineItem,
1142
- ...lineItems.filter(li => li.rampInstanceId === lineItem.id),
1143
- ]);
1144
- return products
1145
- .map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
1146
- .filter((li) => Boolean(li))
1147
- .map(item => [item]);
1148
- }
1149
- case 'avg': {
1150
- const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
1151
- return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
1152
- }
1153
- case 'sum': {
1154
- return lineItems.map(item => [item]);
1155
- }
1156
- default: {
1157
- return lineItems.map(item => [item]);
1158
- }
1159
- }
1160
- }
1161
- function getDateValue(date) {
1162
- return date ? new Date(date).getTime() : 0;
1163
- }
1164
-
1165
1139
  class FlowUpdateService {
1166
1140
  update(rootLineItems, updates, charges) {
1167
1141
  let remainingUpdates = [...updates];
@@ -1757,6 +1731,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1757
1731
  type: Injectable
1758
1732
  }], ctorParameters: function () { return [{ type: i1.ProceduresApiService }, { type: ContextService }, { type: QuoteDraftService }, { type: FlowUpdateService }, { type: ConfigurationService }]; } });
1759
1733
 
1734
+ class FlowConfigurationModule {
1735
+ }
1736
+ FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1737
+ FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule });
1738
+ FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService, FlowUpdateService, PriceApiService] });
1739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, decorators: [{
1740
+ type: NgModule,
1741
+ args: [{
1742
+ imports: [],
1743
+ providers: [FlowConfigurationService, FlowUpdateService, PriceApiService],
1744
+ }]
1745
+ }] });
1746
+
1747
+ class FlowStateConfigurationService {
1748
+ constructor(flowStateService, flowInfoService, configurationService, flowConfigurationService, flowStateApiService) {
1749
+ this.flowStateService = flowStateService;
1750
+ this.flowInfoService = flowInfoService;
1751
+ this.configurationService = configurationService;
1752
+ this.flowConfigurationService = flowConfigurationService;
1753
+ this.flowStateApiService = flowStateApiService;
1754
+ this.configurationStateId$ = new BehaviorSubject(null);
1755
+ }
1756
+ get configurationStateId() {
1757
+ return this.configurationStateId$.value;
1758
+ }
1759
+ addToCart$(props) {
1760
+ var _a;
1761
+ const stateful = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.stateful;
1762
+ if (stateful) {
1763
+ const stateId = this.flowStateService.stateId;
1764
+ if (!stateId) {
1765
+ return of();
1766
+ }
1767
+ return this.configurationService.configureExternal$(props).pipe(switchMap(lineItem => this.flowStateApiService
1768
+ .newConfiguration(stateId, { lineItem })
1769
+ .pipe(tap$1(r => this.configurationStateId$.next(r.stateId)))), switchMap(() => {
1770
+ if (!this.configurationStateId) {
1771
+ return of();
1772
+ }
1773
+ return this.flowStateApiService.saveConfiguration(stateId, this.configurationStateId).pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map$1(noop));
1774
+ }));
1775
+ }
1776
+ else {
1777
+ return this.flowConfigurationService.addToCart$(props).pipe(map$1(noop));
1778
+ }
1779
+ }
1780
+ }
1781
+ FlowStateConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, deps: [{ token: FlowStateService }, { token: FlowInfoService }, { token: ConfigurationService }, { token: FlowConfigurationService }, { token: i1.FlowStateApiService }], target: i0.ɵɵFactoryTarget.Injectable });
1782
+ FlowStateConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, providedIn: 'root' });
1783
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateConfigurationService, decorators: [{
1784
+ type: Injectable,
1785
+ args: [{ providedIn: 'root' }]
1786
+ }], ctorParameters: function () { return [{ type: FlowStateService }, { type: FlowInfoService }, { type: ConfigurationService }, { type: FlowConfigurationService }, { type: i1.FlowStateApiService }]; } });
1787
+
1788
+ function calculateMetricByMethod(lineItems, metric, method) {
1789
+ const items = getLineItemsByMethod(lineItems, method);
1790
+ return items.reduce((acc, li) => {
1791
+ let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
1792
+ if (method === 'avg' && li.length > 0) {
1793
+ value /= li.length;
1794
+ }
1795
+ return acc + value;
1796
+ }, 0);
1797
+ }
1798
+ function getLineItemsByMethod(lineItems, method) {
1799
+ switch (method) {
1800
+ case 'first': {
1801
+ return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
1802
+ }
1803
+ case 'last': {
1804
+ const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
1805
+ const products = rootTermItems.map(lineItem => [
1806
+ lineItem,
1807
+ ...lineItems.filter(li => li.rampInstanceId === lineItem.id),
1808
+ ]);
1809
+ return products
1810
+ .map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
1811
+ .filter((li) => Boolean(li))
1812
+ .map(item => [item]);
1813
+ }
1814
+ case 'avg': {
1815
+ const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
1816
+ return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
1817
+ }
1818
+ case 'sum': {
1819
+ return lineItems.map(item => [item]);
1820
+ }
1821
+ default: {
1822
+ return lineItems.map(item => [item]);
1823
+ }
1824
+ }
1825
+ }
1826
+ function getDateValue(date) {
1827
+ return date ? new Date(date).getTime() : 0;
1828
+ }
1829
+
1760
1830
  class MetricsCalculationService {
1761
1831
  get onMetricsUpdate$() {
1762
1832
  return this.metricsUpdated$.asObservable();
@@ -2115,19 +2185,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2115
2185
  type: Injectable
2116
2186
  }], ctorParameters: function () { return [{ type: i1.StatefulConfigurationApiService }, { type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type: i6.ToastService }]; } });
2117
2187
 
2118
- class FlowConfigurationModule {
2119
- }
2120
- FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2121
- FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule });
2122
- FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService, FlowUpdateService, PriceApiService] });
2123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationModule, decorators: [{
2124
- type: NgModule,
2125
- args: [{
2126
- imports: [],
2127
- providers: [FlowConfigurationService, FlowUpdateService, PriceApiService],
2128
- }]
2129
- }] });
2130
-
2131
2188
  class ConfigurationModule {
2132
2189
  }
2133
2190
  ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -2366,5 +2423,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2366
2423
  * Generated bundle index. Do not edit.
2367
2424
  */
2368
2425
 
2369
- export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowInfoService, FlowStateService, FlowUpdateService, IntegrationState, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, calculateCardinalityVariables, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
2426
+ export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, FlowUpdateService, IntegrationState, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, calculateCardinalityVariables, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
2370
2427
  //# sourceMappingURL=veloceapps-sdk-core.mjs.map