@veloceapps/sdk 10.0.0-2 → 10.0.0-21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/cms/modules/runtime/services/runtime.service.d.ts +3 -1
  2. package/cms/utils/index.d.ts +1 -0
  3. package/cms/utils/inject.d.ts +1 -0
  4. package/cms/utils/ui-definition.utils.d.ts +1 -0
  5. package/cms/vendor-map.d.ts +1 -0
  6. package/core/modules/configuration/services/configuration-state.service.d.ts +1 -0
  7. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +4 -1
  8. package/core/services/flow-state.service.d.ts +3 -1
  9. package/core/types/flow-state.types.d.ts +1 -0
  10. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +3 -2
  11. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
  12. package/esm2020/cms/modules/runtime/services/runtime.service.mjs +3 -1
  13. package/esm2020/cms/utils/index.mjs +2 -1
  14. package/esm2020/cms/utils/inject.mjs +27 -0
  15. package/esm2020/cms/utils/ui-definition.utils.mjs +13 -1
  16. package/esm2020/cms/vendor-map.mjs +3 -1
  17. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +13 -4
  18. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +16 -5
  19. package/esm2020/core/services/flow-state.service.mjs +27 -9
  20. package/esm2020/core/types/flow-state.types.mjs +1 -1
  21. package/fesm2015/veloceapps-sdk-cms.mjs +43 -4
  22. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  23. package/fesm2015/veloceapps-sdk-core.mjs +49 -12
  24. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  25. package/fesm2020/veloceapps-sdk-cms.mjs +42 -3
  26. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  27. package/fesm2020/veloceapps-sdk-core.mjs +48 -12
  28. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  29. package/package.json +1 -1
@@ -441,7 +441,8 @@ class FlowStateService {
441
441
  this.EXECUTION_BUFFER_TIME = 100;
442
442
  this.executedFunctions = {};
443
443
  this.stateId$ = new BehaviorSubject(null);
444
- this._hasStatefulUnsavedChanges = true;
444
+ this.initialStatefulData = {};
445
+ this.trackedStatefulChangesMap = new Map();
445
446
  this.processors = {};
446
447
  this.subscriptions = {};
447
448
  this.flowStore = {};
@@ -524,7 +525,7 @@ class FlowStateService {
524
525
  }
525
526
  get hasUnsavedChanges() {
526
527
  return this.getFlowSafe().properties.stateful
527
- ? this._hasStatefulUnsavedChanges
528
+ ? Array.from(this.trackedStatefulChangesMap.values()).some(Boolean)
528
529
  : this.quoteDraftService.hasUnsavedChanges;
529
530
  }
530
531
  get stateId() {
@@ -589,6 +590,9 @@ class FlowStateService {
589
590
  data$: new BehaviorSubject(this.NOT_INITIALIZED),
590
591
  };
591
592
  this.subscriptions[requestId] = subscription;
593
+ if (options === null || options === void 0 ? void 0 : options.trackedChanges) {
594
+ this.trackedStatefulChangesMap.set(requestId, false);
595
+ }
592
596
  if (!(options === null || options === void 0 ? void 0 : options.cold)) {
593
597
  this.executeRequest$(request).subscribe();
594
598
  }
@@ -603,14 +607,18 @@ class FlowStateService {
603
607
  save$() {
604
608
  if (this.getFlowSafe().properties.stateful) {
605
609
  if (this.stateId$.value) {
606
- return this.flowStateApiService.save(this.stateId$.value);
610
+ return this.flowStateApiService.save(this.stateId$.value).pipe(tap$1(() => {
611
+ Array.from(this.trackedStatefulChangesMap.keys()).forEach(key => {
612
+ this.trackedStatefulChangesMap.set(key, false);
613
+ });
614
+ }));
607
615
  }
608
616
  }
609
617
  else {
610
618
  const quoteDraft = this.quoteDraftService.quoteDraft;
611
619
  if (quoteDraft) {
612
- return this.quoteApiService.upsertQuote(quoteDraft).pipe(tap$1(({ configurationId }) => {
613
- this.contextService.update({ properties: { ConfigurationId: configurationId } });
620
+ return this.quoteApiService.upsertQuote(quoteDraft).pipe(tap$1(({ versionId }) => {
621
+ this.contextService.update({ properties: { VELOCPQ__VersionId__c: versionId } });
614
622
  }));
615
623
  }
616
624
  }
@@ -625,8 +633,8 @@ class FlowStateService {
625
633
  else {
626
634
  const quoteDraft = this.quoteDraftService.quoteDraft;
627
635
  if (quoteDraft) {
628
- return this.quoteApiService.submitQuote(quoteDraft).pipe(tap$1(({ configurationId }) => {
629
- this.contextService.update({ properties: { ConfigurationId: configurationId } });
636
+ return this.quoteApiService.submitQuote(quoteDraft).pipe(tap$1(({ versionId }) => {
637
+ this.contextService.update({ properties: { VELOCPQ__VersionId__c: versionId } });
630
638
  }));
631
639
  }
632
640
  }
@@ -684,6 +692,7 @@ class FlowStateService {
684
692
  }
685
693
  const subscription$ = (_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$;
686
694
  if (subscription$ && subscription$.value !== selectorResult) {
695
+ this.checkStatefulChanges(requestId, selectorResult);
687
696
  subscription$.next(selectorResult);
688
697
  }
689
698
  });
@@ -936,6 +945,15 @@ class FlowStateService {
936
945
  });
937
946
  return request;
938
947
  }
948
+ checkStatefulChanges(requestId, selectorResult) {
949
+ if (this.trackedStatefulChangesMap.has(requestId)) {
950
+ if (!this.initialStatefulData[requestId]) {
951
+ this.initialStatefulData[requestId] = selectorResult;
952
+ }
953
+ const hasChanges = !isEqual(this.initialStatefulData[requestId], selectorResult);
954
+ this.trackedStatefulChangesMap.set(requestId, hasChanges);
955
+ }
956
+ }
939
957
  }
940
958
  FlowStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService, deps: [{ token: ContextService }, { token: QuoteDraftService }, { token: FlowInfoService }, { token: FlowConfigurationService }, { token: i1.ConfigurationProcessorsApiService }, { token: i1.FlowStateApiService }, { token: i1.QuoteApiService }, { token: i6.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
941
959
  FlowStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowStateService });
@@ -1640,17 +1658,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1640
1658
  }], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: ContextService }, { type: i1.ConfigurationApiService }, { type: i5.MessageService }, { type: i6$1.DialogService }, { type: RuntimeSettingsService }]; } });
1641
1659
 
1642
1660
  class FlowConfigurationService {
1643
- constructor(proceduresApiService, contextService, quoteDraftService, updateService, configurationService) {
1661
+ constructor(proceduresApiService, contextService, quoteDraftService, updateService, configurationService, flowInfoService) {
1644
1662
  this.proceduresApiService = proceduresApiService;
1645
1663
  this.contextService = contextService;
1646
1664
  this.quoteDraftService = quoteDraftService;
1647
1665
  this.updateService = updateService;
1648
1666
  this.configurationService = configurationService;
1667
+ this.flowInfoService = flowInfoService;
1649
1668
  this.updatedSubj$ = new Subject();
1650
1669
  this.updated$ = this.updatedSubj$.asObservable();
1651
1670
  }
1652
1671
  calculate$(quoteDraft) {
1653
- return this.proceduresApiService.apply$(quoteDraft).pipe(tap$1(result => {
1672
+ return this.extendedApply$(quoteDraft).pipe(tap$1(result => {
1654
1673
  // sort the result current state based on the quote draft initial state
1655
1674
  const initialStateIds = quoteDraft.initialState.map(lineItem => lineItem.integrationId);
1656
1675
  result.currentState = result.currentState
@@ -1775,12 +1794,21 @@ class FlowConfigurationService {
1775
1794
  }));
1776
1795
  };
1777
1796
  }
1797
+ extendedApply$(quoteDraft) {
1798
+ var _a;
1799
+ const request = Object.assign({}, quoteDraft);
1800
+ const procedureName = (_a = this.flowInfoService.flow) === null || _a === void 0 ? void 0 : _a.properties.procedureName;
1801
+ if (procedureName) {
1802
+ request.procedureName = procedureName;
1803
+ }
1804
+ return this.proceduresApiService.apply$(request);
1805
+ }
1778
1806
  }
1779
- FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i1.ProceduresApiService }, { token: ContextService }, { token: QuoteDraftService }, { token: FlowUpdateService }, { token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
1807
+ FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i1.ProceduresApiService }, { token: ContextService }, { token: QuoteDraftService }, { token: FlowUpdateService }, { token: ConfigurationService }, { token: FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
1780
1808
  FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService });
1781
1809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowConfigurationService, decorators: [{
1782
1810
  type: Injectable
1783
- }], ctorParameters: function () { return [{ type: i1.ProceduresApiService }, { type: ContextService }, { type: QuoteDraftService }, { type: FlowUpdateService }, { type: ConfigurationService }]; } });
1811
+ }], ctorParameters: function () { return [{ type: i1.ProceduresApiService }, { type: ContextService }, { type: QuoteDraftService }, { type: FlowUpdateService }, { type: ConfigurationService }, { type: FlowInfoService }]; } });
1784
1812
 
1785
1813
  class FlowConfigurationModule {
1786
1814
  }
@@ -2042,6 +2070,7 @@ class ConfigurationStateService {
2042
2070
  this.configurationStore = {};
2043
2071
  this.executionInProgress$ = new BehaviorSubject(false);
2044
2072
  this.statefulRequestStream$ = new Subject();
2073
+ this.statelessExecutionRequest$ = null;
2045
2074
  this.statefulExecutionRequest$ = this.initBufferedRequest$();
2046
2075
  }
2047
2076
  get isExecutionInProgress$() {
@@ -2089,7 +2118,15 @@ class ConfigurationStateService {
2089
2118
  actions: [{ name: actionName, inputData }],
2090
2119
  };
2091
2120
  const request = this.execToRequest(exec);
2092
- return this.executeRequest$(request);
2121
+ const executionRequest$ = this.executeRequest$(request);
2122
+ if (this.isStatefulConfiguration) {
2123
+ return executionRequest$;
2124
+ }
2125
+ // prevent parallel configuration requests in stateless mode
2126
+ if (!this.statelessExecutionRequest$) {
2127
+ this.statelessExecutionRequest$ = executionRequest$.pipe(shareReplay$1(), take$1(1), finalize(() => (this.statelessExecutionRequest$ = null)));
2128
+ }
2129
+ return this.statelessExecutionRequest$;
2093
2130
  }
2094
2131
  select$(selectorName, inputData = {}) {
2095
2132
  const requestId = UUID.UUID();