@veloceapps/sdk 7.0.2-72 → 7.0.2-73

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.
Files changed (47) hide show
  1. package/cms/components/preview/preview.component.d.ts +6 -9
  2. package/cms/components/preview/preview.types.d.ts +5 -0
  3. package/cms/services/resources.service.d.ts +9 -0
  4. package/cms/vendor-map.d.ts +2 -1
  5. package/core/modules/configuration/index.d.ts +1 -0
  6. package/core/modules/configuration/services/configuration-runtime.service.d.ts +4 -3
  7. package/core/modules/configuration/services/configuration.service.d.ts +6 -4
  8. package/core/modules/configuration/services/configuration.state.d.ts +30 -0
  9. package/core/modules/configuration/services/runtime-context.service.d.ts +1 -1
  10. package/core/types/runtime.types.d.ts +2 -2
  11. package/esm2020/cms/components/preview/preview.component.mjs +17 -37
  12. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  13. package/esm2020/cms/services/resources.service.mjs +19 -1
  14. package/esm2020/cms/vendor-map.mjs +3 -2
  15. package/esm2020/core/modules/configuration/configuration.module.mjs +4 -1
  16. package/esm2020/core/modules/configuration/index.mjs +2 -1
  17. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +27 -19
  18. package/esm2020/core/modules/configuration/services/configuration.service.mjs +41 -29
  19. package/esm2020/core/modules/configuration/services/configuration.state.mjs +142 -0
  20. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +10 -11
  21. package/esm2020/core/services/quote-draft.service.mjs +1 -1
  22. package/esm2020/core/types/runtime.types.mjs +1 -1
  23. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +1 -1
  24. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +1 -1
  25. package/esm2020/src/pages/assets/assets.component.mjs +1 -1
  26. package/esm2020/src/pages/catalog/catalog.component.mjs +1 -1
  27. package/esm2020/src/pages/legacy-product/legacy-product.component.mjs +4 -4
  28. package/esm2020/src/pages/product/product.component.mjs +50 -66
  29. package/esm2020/src/pages/remote/remote.component.mjs +19 -19
  30. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +1 -1
  31. package/esm2020/src/types/flow-customization.types.mjs +1 -1
  32. package/fesm2015/veloceapps-sdk-cms.mjs +44 -43
  33. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  34. package/fesm2015/veloceapps-sdk-core.mjs +214 -59
  35. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  36. package/fesm2015/veloceapps-sdk.mjs +67 -80
  37. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  38. package/fesm2020/veloceapps-sdk-cms.mjs +42 -43
  39. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  40. package/fesm2020/veloceapps-sdk-core.mjs +206 -55
  41. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  42. package/fesm2020/veloceapps-sdk.mjs +64 -76
  43. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  44. package/package.json +1 -1
  45. package/src/pages/product/product.component.d.ts +10 -21
  46. package/src/pages/remote/remote.component.d.ts +3 -4
  47. package/src/types/flow-customization.types.d.ts +3 -3
@@ -1,12 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, NgModule, inject, Directive, Input, LOCALE_ID, Pipe } from '@angular/core';
3
- import { UUID, ConfigurationContextMode, ConfigurationContext, RuntimeModel, isLegacyUIDefinition, SalesforceIdUtils, ConfigurationMode, ConfigurationTranslatorUtils, ChargeGroupUtils, DEFAULT_CURRENCY_ISO_CODE, DEFAULT_CURRENCY_SYMBOL, validateDateFormat, DEFAULT_DATE_FORMAT, DEFAULT_DECIMAL_SEPARATOR, DEFAULT_THOUSANDS_SEPARATOR, getSupportedDateFormats, DEFAULT_DECIMALS_COUNT, parseJsonSafely, formatNumber } from '@veloceapps/core';
4
- import { BehaviorSubject, combineLatest, zip, noop, throwError, shareReplay as shareReplay$1, tap as tap$1, map as map$2, of, switchMap as switchMap$1, catchError as catchError$1, Subject, take as take$1, distinctUntilChanged } from 'rxjs';
3
+ import { UUID, ConfigurationContextMode, ConfigurationContext, RuntimeModel, getUIDefinitionProperties, isLegacyUIDefinition, SalesforceIdUtils, ConfigurationMode, ConfigurationTranslatorUtils, EntityUtil, ChargeGroupUtils, DEFAULT_CURRENCY_ISO_CODE, DEFAULT_CURRENCY_SYMBOL, validateDateFormat, DEFAULT_DATE_FORMAT, DEFAULT_DECIMAL_SEPARATOR, DEFAULT_THOUSANDS_SEPARATOR, getSupportedDateFormats, DEFAULT_DECIMALS_COUNT, parseJsonSafely, formatNumber } from '@veloceapps/core';
4
+ import { BehaviorSubject, combineLatest, zip, noop, throwError, shareReplay as shareReplay$1, switchMap as switchMap$1, of, tap as tap$1, map as map$2, catchError as catchError$1, Subject, take as take$1, distinctUntilChanged } from 'rxjs';
5
5
  import { filter, tap, map, first, switchMap, skip, take, shareReplay, catchError, finalize } from 'rxjs/operators';
6
6
  import * as i1 from '@veloceapps/api';
7
7
  import { PriceApiService, ContextApiService, ProductModelApiService, ConfigurationApiService } from '@veloceapps/api';
8
8
  import { merge, flatten, sortBy, map as map$1, isEqual, transform, omit, cloneDeep, uniq } from 'lodash';
9
9
  import { HttpErrorResponse } from '@angular/common/http';
10
+ import * as i4 from '@veloceapps/components';
10
11
  import { ToastType, ConfirmationComponent, ConfirmationDialogModule } from '@veloceapps/components';
11
12
  import * as i5 from 'primeng/api';
12
13
  import * as i6 from 'primeng/dynamicdialog';
@@ -125,31 +126,30 @@ class RuntimeContextService {
125
126
  }
126
127
  getRuntimeContext(productId, offeringId) {
127
128
  return this.configurationApiService.getRuntimeDataByProductId(productId, offeringId).pipe(map(runtimeData => {
128
- var _a, _b, _c;
129
- const uiDefinition = this.getUIDefinition(runtimeData);
129
+ var _a;
130
+ const uiDefinitionContainer = this.getUIDefinitionContainer(runtimeData);
130
131
  const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
131
132
  const { productName, properties } = (_a = Array.from(runtimeModel.components.values()).find(c => c.productId === productId)) !== null && _a !== void 0 ? _a : {};
133
+ const uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
132
134
  return {
133
135
  modelId: runtimeData.modelId,
134
- uiDefinition: uiDefinition,
136
+ uiDefinitionContainer: uiDefinitionContainer,
135
137
  runtimeModel: runtimeModel,
136
138
  runtimeMode: RuntimeMode.PROD,
137
139
  productId: productId,
138
140
  productType: (properties === null || properties === void 0 ? void 0 : properties['displayName']) || productName,
139
141
  offeringId: offeringId,
140
142
  properties: {
141
- PricingEnabled: ((_b = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.properties) === null || _b === void 0 ? void 0 : _b.pricingEnabled) ? 'true' : 'false',
142
- PriceListId: (_c = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.properties) === null || _c === void 0 ? void 0 : _c.priceList,
143
+ PricingEnabled: uiDefinitionProperties.pricingEnabled ? 'true' : 'false',
144
+ PriceListId: uiDefinitionProperties.priceList,
143
145
  },
144
146
  };
145
147
  }));
146
148
  }
147
- getUIDefinition(runtimeData) {
149
+ getUIDefinitionContainer(runtimeData) {
148
150
  var _a;
149
- const uiDefinitions = runtimeData.uiDefinitions
150
- .map(({ source }) => source)
151
- .filter((uiDefinition) => !isLegacyUIDefinition(uiDefinition));
152
- return (_a = uiDefinitions.find(uiDef => uiDef.primary)) !== null && _a !== void 0 ? _a : uiDefinitions[0];
151
+ const containers = runtimeData.uiDefinitions.filter(container => !isLegacyUIDefinition(container.source));
152
+ return (_a = containers.find(container => container.source.primary)) !== null && _a !== void 0 ? _a : containers[0];
153
153
  }
154
154
  }
155
155
  RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -172,43 +172,51 @@ class ConfigurationRuntimeService {
172
172
  this.initializationProps = undefined;
173
173
  this.uiDefinitionProperties = {};
174
174
  }
175
- initTestMode(modelId, uiDefinition) {
176
- var _a, _b;
177
- this.uiDefinitionProperties = (_a = uiDefinition.properties) !== null && _a !== void 0 ? _a : {};
178
- const uiDefinitionExternals = (_b = uiDefinition.externals) !== null && _b !== void 0 ? _b : {};
175
+ initTestMode(uiDefinitionContainer) {
176
+ var _a;
177
+ this.uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
178
+ const uiDefinitionExternals = (_a = uiDefinitionContainer.source.externals) !== null && _a !== void 0 ? _a : {};
179
179
  return combineLatest([
180
- this.apiService.getRuntimeDataByModelId(modelId),
180
+ this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
181
181
  this.contextService.create('TestId', ConfigurationContextMode.TEST),
182
- ]).pipe(first(), tap(([runtimeData, context]) => {
182
+ ]).pipe(first(), map(([runtimeData, context]) => {
183
183
  var _a;
184
+ this.contextService.update({
185
+ properties: Object.assign(Object.assign(Object.assign(Object.assign({}, (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.properties), context.properties), { ModelId: uiDefinitionContainer.modelId, RuntimeMode: ConfigurationContextMode.TEST, PricingEnabled: this.uiDefinitionProperties.pricingEnabled ? 'true' : 'false', StartDate: new Date().toISOString().substring(0, 10), PriceListId: this.uiDefinitionProperties.priceList, offeringId: this.uiDefinitionProperties.offeringId, standalone: 'true' }), uiDefinitionExternals),
186
+ });
184
187
  this._runtimeContext = {
185
- modelId: modelId,
188
+ modelId: uiDefinitionContainer.modelId,
186
189
  runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
187
190
  runtimeMode: RuntimeMode.TEST,
191
+ uiDefinitionContainer,
188
192
  };
189
- this.contextService.update({
190
- properties: Object.assign(Object.assign(Object.assign(Object.assign({}, (_a = this.runtimeContext) === null || _a === void 0 ? void 0 : _a.properties), context.properties), { ModelId: modelId, RuntimeMode: ConfigurationContextMode.TEST, PricingEnabled: this.uiDefinitionProperties.pricingEnabled ? 'true' : 'false', StartDate: new Date().toISOString().substring(0, 10), PriceListId: this.uiDefinitionProperties.priceList, offeringId: this.uiDefinitionProperties.offeringId, standalone: 'true' }), uiDefinitionExternals),
191
- });
192
- this._isInitialized = true;
193
- }));
193
+ return this._runtimeContext;
194
+ }), tap(() => (this._isInitialized = true)));
194
195
  }
195
196
  init(props) {
196
197
  this.initializationProps = props;
197
198
  const context = this.contextService.resolve();
198
199
  return this.runtimeContextService.getRuntimeContext(props.productId, props.offeringId).pipe(tap(runtimeContext => {
199
- var _a, _b, _c, _d;
200
- this.uiDefinitionProperties = (_b = (_a = runtimeContext.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) !== null && _b !== void 0 ? _b : {};
201
- const { PriceListId } = (_c = context.properties) !== null && _c !== void 0 ? _c : {};
200
+ var _a, _b;
201
+ this.uiDefinitionProperties = getUIDefinitionProperties(runtimeContext.uiDefinitionContainer);
202
+ const { PriceListId } = (_a = context.properties) !== null && _a !== void 0 ? _a : {};
202
203
  const mergeContext = Object.assign(Object.assign({}, runtimeContext), { properties: Object.assign(Object.assign(Object.assign({}, runtimeContext.properties), context.properties), { PricingEnabled: PriceListId ? 'true' : 'false' }) });
203
204
  this.id15to18('AccountId', mergeContext.properties);
204
205
  this._runtimeContext = mergeContext;
205
- if (context.properties && ((_d = this._runtimeContext.properties) === null || _d === void 0 ? void 0 : _d.StartDate)) {
206
+ if (context.properties && ((_b = this._runtimeContext.properties) === null || _b === void 0 ? void 0 : _b.StartDate)) {
206
207
  this.contextService.update({
207
208
  properties: Object.assign(Object.assign({}, this._runtimeContext.properties), context.properties),
208
209
  });
209
210
  }
210
- this._isInitialized = true;
211
- }));
211
+ return this._runtimeContext;
212
+ }), tap(() => (this._isInitialized = true)));
213
+ }
214
+ overrideUIDefinition(uiDefinitionContainer) {
215
+ if (!this._runtimeContext) {
216
+ return;
217
+ }
218
+ this._runtimeContext.uiDefinitionContainer = uiDefinitionContainer;
219
+ this.uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
212
220
  }
213
221
  id15to18(propertyName, source) {
214
222
  if (!source) {
@@ -708,10 +716,18 @@ class ConfigurationService {
708
716
  return this.lineItem.value ? Object.assign({}, this.lineItem.value) : undefined;
709
717
  }
710
718
  getRuntimeModel() {
711
- return this.runtimeService.runtimeModel;
719
+ const runtimeModel = this.runtimeService.runtimeModel;
720
+ if (!runtimeModel) {
721
+ throw new Error('Runtime model not initialized');
722
+ }
723
+ return runtimeModel;
712
724
  }
713
725
  getRuntimeContext() {
714
- return this.runtimeService.runtimeContext;
726
+ const runtimeContext = this.runtimeService.runtimeContext;
727
+ if (!runtimeContext) {
728
+ throw new Error('Runtime context not initialized');
729
+ }
730
+ return runtimeContext;
715
731
  }
716
732
  get contextSnapshot() {
717
733
  return this.contextService.resolve();
@@ -732,38 +748,27 @@ class ConfigurationService {
732
748
  return this.pricePlans.value;
733
749
  }
734
750
  configure() {
735
- var _a, _b, _c, _d, _e;
751
+ return this.configureRequest$(this.generateRequest());
752
+ }
753
+ configureRequest$(configurationRequest) {
754
+ var _a;
736
755
  const runtimeContext = this.getRuntimeContext();
737
756
  const runtimeModel = this.getRuntimeModel();
738
- if (!runtimeContext || !runtimeModel) {
739
- return throwError(() => new Error('Runtime context/model not initialized'));
740
- }
741
- const uiDefinitionProperties = Object.assign(Object.assign({}, ((_b = (_a = runtimeContext.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) !== null && _b !== void 0 ? _b : {})), ((_c = this.runtimeService.uiDefinitionProperties) !== null && _c !== void 0 ? _c : {}));
742
- let lineItem = this.configurableRamp;
743
- if (!lineItem) {
744
- const { initializationProps } = (_d = this.runtimeService) !== null && _d !== void 0 ? _d : {};
745
- lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.defaultQty);
746
- // Set default attributes
747
- if (initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap) {
748
- const attributes = transform(initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
749
- lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
750
- }
751
- }
752
- const configurationRequest = this.createRequest(lineItem);
753
- const mainPricingEnabled = (_e = runtimeContext.properties) === null || _e === void 0 ? void 0 : _e.PricingEnabled;
757
+ const uiDefinitionProperties = this.getUIDefinitionProperties();
758
+ const mainPricingEnabled = (_a = runtimeContext.properties) === null || _a === void 0 ? void 0 : _a.PricingEnabled;
754
759
  const pricingEnabled = mainPricingEnabled ? mainPricingEnabled === 'true' : uiDefinitionProperties.pricingEnabled;
755
- return this.configurationApiService
756
- .configureLineItem({ configurationRequest, runtimeModel, pricingEnabled })
757
- .pipe(map(({ lineItem, context, charges, pricePlans, deletedLineItems }) => {
760
+ return this.configurationApiService.configureLineItem({ configurationRequest, runtimeModel, pricingEnabled }).pipe(tap(({ lineItem, context, charges, pricePlans, deletedLineItems }) => {
758
761
  this.contextService.update(context !== null && context !== void 0 ? context : {});
759
762
  this.charges.next(charges !== null && charges !== void 0 ? charges : {});
760
763
  this.pricePlans.next(pricePlans !== null && pricePlans !== void 0 ? pricePlans : {});
764
+ if (lineItem) {
765
+ this.lineItem.next(lineItem);
766
+ }
761
767
  if (deletedLineItems === null || deletedLineItems === void 0 ? void 0 : deletedLineItems.length) {
762
768
  this.showInactiveProductsConfirmation();
763
769
  }
764
- return lineItem;
765
- }))
766
- .pipe(tap(lineItem => lineItem && this.lineItem.next(lineItem)), catchError(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })));
770
+ this.configurableRamp = lineItem;
771
+ }), map(({ lineItem }) => lineItem), catchError(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })));
767
772
  }
768
773
  configureExternal$(props) {
769
774
  return this.runtimeService
@@ -785,20 +790,36 @@ class ConfigurationService {
785
790
  throw error;
786
791
  }));
787
792
  }
788
- createRequest(lineItem) {
789
- var _a;
793
+ generateRequest() {
794
+ var _a, _b;
795
+ const runtimeContext = this.getRuntimeContext();
796
+ const uiDefinitionProperties = this.getUIDefinitionProperties();
797
+ let lineItem = this.configurableRamp;
798
+ if (!lineItem) {
799
+ const { initializationProps } = (_a = this.runtimeService) !== null && _a !== void 0 ? _a : {};
800
+ lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.defaultQty);
801
+ // Set default attributes
802
+ if (initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap) {
803
+ const attributes = transform(initializationProps === null || initializationProps === void 0 ? void 0 : initializationProps.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
804
+ lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
805
+ }
806
+ }
790
807
  let request = {
791
808
  lineItem,
792
809
  mode: this.mode,
793
810
  step: !this.lineItem.value ? RuntimeStep.START : RuntimeStep.UPDATE,
794
811
  attributeDomainMode: 'ALL',
795
812
  context: this.contextService.resolve(),
796
- lineItems: ((_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) || [],
813
+ lineItems: ((_b = this.quoteDraftService.quoteDraft) === null || _b === void 0 ? void 0 : _b.currentState) || [],
797
814
  asset: this.getAsset(),
798
815
  };
799
816
  request = ConfigurationTranslatorUtils.lightenConfigurationRequest(request);
800
817
  return request;
801
818
  }
819
+ getUIDefinitionProperties() {
820
+ var _a;
821
+ return Object.assign(Object.assign({}, getUIDefinitionProperties(this.getRuntimeContext().uiDefinitionContainer)), ((_a = this.runtimeService.uiDefinitionProperties) !== null && _a !== void 0 ? _a : {}));
822
+ }
802
823
  showInactiveProductsConfirmation() {
803
824
  const confirmationConfig = {
804
825
  title: ' ',
@@ -838,6 +859,138 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
838
859
  type: Injectable
839
860
  }], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: ContextService }, { type: i1.ConfigurationApiService }, { type: i5.MessageService }, { type: i6.DialogService }]; } });
840
861
 
862
+ class ConfigurationState {
863
+ constructor(statefulConfigurationApiService, runtimeService, configurationService, toastService) {
864
+ this.statefulConfigurationApiService = statefulConfigurationApiService;
865
+ this.runtimeService = runtimeService;
866
+ this.configurationService = configurationService;
867
+ this.toastService = toastService;
868
+ this.stateSubj$ = new BehaviorSubject({});
869
+ this.state$ = this.stateSubj$.asObservable();
870
+ this.stateId = null;
871
+ }
872
+ init$() {
873
+ return this.configurationService.configure().pipe(switchMap$1(() => {
874
+ var _a, _b;
875
+ if (!this.isStatefulConfiguration) {
876
+ return of(undefined);
877
+ }
878
+ const { actions, selectors } = (_b = (_a = this.runtimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
879
+ return this.statefulConfigurationApiService.init({
880
+ request: this.configurationService.generateRequest(),
881
+ actions: actions === null || actions === void 0 ? void 0 : actions.map(action => ({ name: action.apiName, script: action.script })),
882
+ selectors: selectors === null || selectors === void 0 ? void 0 : selectors.map(selector => ({ name: selector.apiName, script: selector.script })),
883
+ });
884
+ }), tap$1(stateId => (this.stateId = stateId || null)), map$2(() => undefined));
885
+ }
886
+ cleanup() {
887
+ this.stateId = null;
888
+ this.configurationService.reset();
889
+ this.stateSubj$.next({});
890
+ }
891
+ execute$(req) {
892
+ if (this.isStatefulConfiguration) {
893
+ return this.executeStateful$(req);
894
+ }
895
+ else {
896
+ return this.executeStateless$(req);
897
+ }
898
+ }
899
+ dispatch$(actionName, inputData) {
900
+ return this.execute$({ actions: [{ name: actionName, inputData }] });
901
+ }
902
+ select$(selectorName, inputData) {
903
+ const requestId = UUID.UUID();
904
+ return this.execute$({
905
+ selectors: {
906
+ [requestId]: {
907
+ name: selectorName,
908
+ inputData,
909
+ },
910
+ },
911
+ }).pipe(map$2(() => this.stateSubj$.value[requestId]), tap$1(() => this.stateSubj$.next(omit(this.stateSubj$.value, requestId))));
912
+ }
913
+ get isStatefulConfiguration() {
914
+ var _a;
915
+ return (_a = this.runtimeService.uiDefinitionProperties.statefulConfigurationEnabled) !== null && _a !== void 0 ? _a : false;
916
+ }
917
+ executeStateless$(request) {
918
+ return of(undefined).pipe(switchMap$1(() => {
919
+ var _a;
920
+ // Apply actions and execute configuration/price call
921
+ // No need to run configuration if no actions in the request
922
+ if (!((_a = request.actions) === null || _a === void 0 ? void 0 : _a.length)) {
923
+ return of(undefined);
924
+ }
925
+ let configurationRequest = this.configurationService.generateRequest();
926
+ request.actions.forEach(action => {
927
+ var _a;
928
+ configurationRequest = (_a = this.executeActionScript(configurationRequest, action)) !== null && _a !== void 0 ? _a : configurationRequest;
929
+ });
930
+ return this.configurationService.configureRequest$(configurationRequest);
931
+ }), tap$1(() => {
932
+ if (!request.selectors) {
933
+ return;
934
+ }
935
+ // Run selectors and apply them to the state
936
+ const finalConfigurationRequest = this.configurationService.generateRequest();
937
+ const selectorsResult = EntityUtil.entries(request.selectors).reduce((trunk, [key, selector]) => {
938
+ trunk[key] = this.executeSelectorScript(finalConfigurationRequest, selector);
939
+ return trunk;
940
+ }, {});
941
+ this.stateSubj$.next(Object.assign(Object.assign({}, this.stateSubj$.value), selectorsResult));
942
+ }), map$2(() => undefined));
943
+ }
944
+ executeStateful$(request) {
945
+ if (!this.stateId) {
946
+ return of(undefined);
947
+ }
948
+ return this.statefulConfigurationApiService.execute(this.stateId, request).pipe(tap$1(response => {
949
+ this.stateId = response.stateId;
950
+ const updatedState = this.stateSubj$.value;
951
+ EntityUtil.entries(response.selectors).forEach(([key, value]) => {
952
+ if (!value.success) {
953
+ if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
954
+ this.toastService.add({ summary: value.errorMessage, severity: ToastType.error });
955
+ }
956
+ return;
957
+ }
958
+ updatedState[key] = value.result;
959
+ });
960
+ this.stateSubj$.next(updatedState);
961
+ }), map$2(() => undefined));
962
+ }
963
+ executeActionScript(request, processor) {
964
+ var _a, _b, _c;
965
+ const { actions } = (_b = (_a = this.runtimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
966
+ const script = (_c = actions === null || actions === void 0 ? void 0 : actions.find(action => action.apiName === processor.name)) === null || _c === void 0 ? void 0 : _c.script;
967
+ if (!script) {
968
+ return null;
969
+ }
970
+ return this.executeProcessorScript(request, script, processor.inputData);
971
+ }
972
+ executeSelectorScript(request, processor) {
973
+ var _a, _b, _c;
974
+ const { selectors } = (_b = (_a = this.runtimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) !== null && _b !== void 0 ? _b : {};
975
+ const script = (_c = selectors === null || selectors === void 0 ? void 0 : selectors.find(selector => selector.apiName === processor.name)) === null || _c === void 0 ? void 0 : _c.script;
976
+ if (!script) {
977
+ return null;
978
+ }
979
+ return this.executeProcessorScript(request, script, processor.inputData);
980
+ }
981
+ executeProcessorScript(request, script, inputData) {
982
+ return new Function(`${script}\nreturn transform;`)()({
983
+ request,
984
+ inputData: inputData,
985
+ });
986
+ }
987
+ }
988
+ ConfigurationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationState, deps: [{ token: i1.StatefulConfigurationApiService }, { token: ConfigurationRuntimeService }, { token: ConfigurationService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
989
+ ConfigurationState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationState });
990
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationState, decorators: [{
991
+ type: Injectable
992
+ }], ctorParameters: function () { return [{ type: i1.StatefulConfigurationApiService }, { type: ConfigurationRuntimeService }, { type: ConfigurationService }, { type: i4.ToastService }]; } });
993
+
841
994
  function extractMetadata(uiDefinition) {
842
995
  return omit(uiDefinition, [
843
996
  'children',
@@ -1133,6 +1286,7 @@ ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ver
1133
1286
  ConfigurationRuntimeService,
1134
1287
  RuntimeContextService,
1135
1288
  ConfigurationService,
1289
+ ConfigurationState,
1136
1290
  ], imports: [ConfirmationDialogModule] });
1137
1291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationModule, decorators: [{
1138
1292
  type: NgModule,
@@ -1145,6 +1299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
1145
1299
  ConfigurationRuntimeService,
1146
1300
  RuntimeContextService,
1147
1301
  ConfigurationService,
1302
+ ConfigurationState,
1148
1303
  ],
1149
1304
  }]
1150
1305
  }] });
@@ -1566,5 +1721,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
1566
1721
  * Generated bundle index. Do not edit.
1567
1722
  */
1568
1723
 
1569
- export { CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowUpdateService, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, calculateCardinalityVariables, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
1724
+ export { CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowUpdateService, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, calculateCardinalityVariables, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
1570
1725
  //# sourceMappingURL=veloceapps-sdk-core.mjs.map