@veloceapps/sdk 8.0.0-106 → 8.0.0-108

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Optional, Inject, NgModule, inject, Directive, Input, LOCALE_ID, Pipe } from '@angular/core';
3
- import { UUID, ConfigurationContextMode, ConfigurationContext, UITemplateType, ConfigurationProcessorTypes, EntityUtil, isDefined, ChargeGroupUtils, 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, ConfigurationMode, ConfigurationTranslatorUtils, RuntimeModel, isNotLegacyUIDefinition, SalesforceIdUtils, DEFAULT_TIME_FORMAT, formatNumber } from '@veloceapps/core';
4
- import { BehaviorSubject, tap as tap$1, switchMap, map as map$1, noop, catchError, throwError, of, forkJoin, Subject, filter as filter$1, zip, combineLatest, skip as skip$1, shareReplay as shareReplay$1, take as take$1, distinctUntilChanged } from 'rxjs';
5
- import { map, filter, tap, switchMap as switchMap$1, skip, take, shareReplay, catchError as catchError$1, finalize, first } from 'rxjs/operators';
3
+ import { UUID, ConfigurationContextMode, ConfigurationContext, UITemplateType, isDefined, ConfigurationProcessorTypes, EntityUtil, ChargeGroupUtils, 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, ConfigurationMode, ConfigurationTranslatorUtils, RuntimeModel, isNotLegacyUIDefinition, SalesforceIdUtils, DEFAULT_TIME_FORMAT, formatNumber } from '@veloceapps/core';
4
+ import { BehaviorSubject, tap as tap$1, switchMap, map as map$1, noop, catchError, throwError, of, forkJoin, Subject, filter as filter$1, zip, combineLatest, skip as skip$1, finalize, takeUntil, shareReplay as shareReplay$1, take as take$1, distinctUntilChanged } from 'rxjs';
5
+ import { map, filter, tap, switchMap as switchMap$1, skip, take, shareReplay, catchError as catchError$1, finalize as finalize$1, first } from 'rxjs/operators';
6
6
  import * as i1 from '@veloceapps/api';
7
7
  import { PriceApiService, ContextApiService, ProductModelApiService, ConfigurationApiService } from '@veloceapps/api';
8
- import { merge, isEmpty, flatten, sortBy, map as map$2, omit, isEqual, uniqBy, transform, cloneDeep, uniq } from 'lodash';
8
+ import { merge, isEmpty, flatten, sortBy, map as map$2, omit, isEqual, cloneDeep, assign, uniqBy, transform, uniq } from 'lodash';
9
9
  import * as i6 from '@veloceapps/components';
10
10
  import { ToastType, ConfirmationComponent, ConfirmationDialogModule } from '@veloceapps/components';
11
11
  import moment from 'moment';
@@ -139,6 +139,9 @@ class FlowInfoService {
139
139
  this.templatesApiService = templatesApiService;
140
140
  this.customizationService = customizationService;
141
141
  this.templates = {};
142
+ this.defaultTemplates = {
143
+ flowEngine: 'Flow Engine',
144
+ };
142
145
  this.flowSubj$ = new BehaviorSubject(null);
143
146
  this.flow$ = this.flowSubj$.asObservable();
144
147
  }
@@ -163,7 +166,7 @@ class FlowInfoService {
163
166
  this.templatesApiService.fetchTemplates$(),
164
167
  (_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([]),
165
168
  ]).pipe(map$1(([templates, localTemplates]) => {
166
- Object.entries(flow.properties.templates).forEach(([key, name]) => {
169
+ Object.entries(Object.assign(Object.assign({}, this.defaultTemplates), flow.properties.templates)).forEach(([key, name]) => {
167
170
  var _a;
168
171
  const type = this.remapTemplateName(key);
169
172
  if (type) {
@@ -174,6 +177,12 @@ class FlowInfoService {
174
177
  }));
175
178
  }
176
179
  remapTemplateName(templateType) {
180
+ switch (templateType) {
181
+ case 'flowEngine':
182
+ return UITemplateType.FLOW_ENGINE;
183
+ default:
184
+ break;
185
+ }
177
186
  switch (templateType) {
178
187
  case 'assets':
179
188
  case 'shoppingCart':
@@ -188,8 +197,9 @@ class FlowInfoService {
188
197
  case 'flowHeader':
189
198
  return UITemplateType.FLOW_HEADER;
190
199
  default:
191
- return;
200
+ break;
192
201
  }
202
+ return undefined;
193
203
  }
194
204
  }
195
205
  FlowInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowInfoService, deps: [{ token: i1.FlowsApiService }, { token: i1.UITemplatesApiService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -703,6 +713,7 @@ class FlowStateService {
703
713
  this.stateId$ = new BehaviorSubject(null);
704
714
  this.processors = {};
705
715
  this.subscriptions = {};
716
+ this.cleanup$ = new Subject();
706
717
  /*
707
718
  In stateless mode watch QuoteDraft changes and call executeRequest so that
708
719
  all subscriptions get their updates according to updated QuoteDraft
@@ -712,12 +723,14 @@ class FlowStateService {
712
723
  .subscribe();
713
724
  }
714
725
  init$() {
715
- if (this.getFlowSafe().properties.stateful) {
716
- return this.initStateful$();
717
- }
718
- else {
719
- return this.initStateless$();
720
- }
726
+ return this.initProcessors$().pipe(switchMap(() => {
727
+ if (this.getFlowSafe().properties.stateful) {
728
+ return this.initStateful$();
729
+ }
730
+ else {
731
+ return this.initStateless$();
732
+ }
733
+ }));
721
734
  }
722
735
  cleanup() {
723
736
  Object.values(this.subscriptions).forEach(({ data$ }) => data$.complete());
@@ -727,6 +740,7 @@ class FlowStateService {
727
740
  this.stateId$.next(null);
728
741
  }
729
742
  this.processors = {};
743
+ this.cleanup$.next();
730
744
  }
731
745
  isInitialized$() {
732
746
  return combineLatest([this.stateId$, this.quoteDraftService.isInitialized$]).pipe(map$1(values => values.some(Boolean)));
@@ -767,7 +781,7 @@ class FlowStateService {
767
781
  });
768
782
  return this.executeRequest$(request).pipe(map$1(response => response.selectors[requestId]));
769
783
  }
770
- subscribe$(scope, selectorName, inputData) {
784
+ subscribe$(scope, selectorName, inputData, options) {
771
785
  const inputDataHash = UUID.hex(JSON.stringify(inputData)).slice(0, 8);
772
786
  const requestId = `${scope}/${selectorName}/${inputDataHash}`;
773
787
  if (!this.subscriptions[requestId]) {
@@ -783,9 +797,15 @@ class FlowStateService {
783
797
  request,
784
798
  data$: new BehaviorSubject(this.NOT_INITIALIZED),
785
799
  };
786
- this.executeRequest$({}).subscribe();
800
+ if (!(options === null || options === void 0 ? void 0 : options.cold)) {
801
+ this.executeRequest$(request).subscribe();
802
+ }
787
803
  }
788
- return this.subscriptions[requestId].data$.pipe(filter$1(data => data != this.NOT_INITIALIZED), map$1(data => data));
804
+ return this.subscriptions[requestId].data$.pipe(filter$1(data => data != this.NOT_INITIALIZED), map$1(data => data), finalize(() => {
805
+ if (!this.subscriptions[requestId].data$.observed) {
806
+ delete this.subscriptions[requestId];
807
+ }
808
+ }));
789
809
  }
790
810
  save$() {
791
811
  if (this.getFlowSafe().properties.stateful) {
@@ -844,35 +864,56 @@ class FlowStateService {
844
864
  };
845
865
  }
846
866
  executeRequest$(request) {
847
- const fullRequest = Object.assign(Object.assign({}, request), { selectors: Object.assign(Object.assign({}, request.selectors), Object.values(this.subscriptions).reduce((trunk, subscription) => {
848
- return Object.assign(Object.assign({}, trunk), subscription.request.selectors);
849
- }, {})) });
867
+ var _a;
868
+ const fullRequest = cloneDeep(request);
869
+ if ((_a = fullRequest.actions) === null || _a === void 0 ? void 0 : _a.length) {
870
+ for (const subscription of Object.values(this.subscriptions)) {
871
+ fullRequest.selectors = assign(fullRequest.selectors, subscription.request.selectors);
872
+ }
873
+ }
850
874
  const execution$ = this.getFlowSafe().properties.stateful
851
875
  ? this.executeStateful$(fullRequest)
852
876
  : this.executeStateless$(fullRequest);
853
- return execution$.pipe(tap$1(result => {
854
- Object.entries(result.selectors).forEach(([requestId, selectorResult]) => {
855
- var _a;
856
- if (!selectorResult.success) {
857
- this.toastService.add({ severity: ToastType.error, summary: selectorResult.errorMessage });
858
- }
859
- const subscription$ = (_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$;
860
- if (subscription$) {
861
- subscription$.next(selectorResult);
862
- }
863
- });
864
- }));
877
+ return execution$.pipe(tap$1(result => this.handleSelectorsResponse(result.selectors)));
865
878
  }
866
- initStateful$() {
867
- return this.getLocalProcessors$().pipe(switchMap(processors => {
879
+ handleSelectorsResponse(selectors) {
880
+ Object.entries(selectors).forEach(([requestId, selectorResult]) => {
868
881
  var _a;
869
- return this.flowStateApiService.init({
870
- quoteId: this.contextService.resolve().headerId,
871
- params: (_a = this.flowInfoService.params) !== null && _a !== void 0 ? _a : {},
872
- actionsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.ACTION),
873
- selectorsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
874
- });
875
- }), map$1(({ stateId }) => {
882
+ if (!selectorResult.success) {
883
+ this.toastService.add({ severity: ToastType.error, summary: selectorResult.errorMessage });
884
+ }
885
+ const subscription$ = (_a = this.subscriptions[requestId]) === null || _a === void 0 ? void 0 : _a.data$;
886
+ if (subscription$) {
887
+ subscription$.next(selectorResult);
888
+ }
889
+ });
890
+ }
891
+ initStateful$() {
892
+ var _a;
893
+ // Subscriptions
894
+ this.subscribe$(UITemplateType.FLOW_ENGINE, 'GET_CONTEXT', null, { cold: true })
895
+ .pipe(tap$1(response => {
896
+ if (response.success) {
897
+ this.contextService.update(response.result);
898
+ }
899
+ }), takeUntil(this.cleanup$))
900
+ .subscribe();
901
+ const processorsList = flatten(Object.values(this.processors).map(ownerMap => Object.values(ownerMap !== null && ownerMap !== void 0 ? ownerMap : {})));
902
+ const processors = processorsList.length ? processorsList : undefined;
903
+ const selectors = Object.values(this.subscriptions)
904
+ .map(({ request }) => request.selectors)
905
+ .filter(isDefined)
906
+ .reduce((trunk, selectors) => (Object.assign(Object.assign({}, trunk), selectors)), {});
907
+ return this.flowStateApiService
908
+ .init({
909
+ quoteId: this.contextService.resolve().headerId,
910
+ params: (_a = this.flowInfoService.params) !== null && _a !== void 0 ? _a : {},
911
+ actionsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.ACTION),
912
+ selectorsOverride: processors === null || processors === void 0 ? void 0 : processors.filter(processor => processor.type === ConfigurationProcessorTypes.SELECTOR),
913
+ selectors,
914
+ })
915
+ .pipe(map$1(({ stateId, selectors }) => {
916
+ this.handleSelectorsResponse(selectors);
876
917
  this.stateId$.next(stateId);
877
918
  }));
878
919
  }
@@ -952,6 +993,13 @@ class FlowStateService {
952
993
  return this.flowInfoService.flow;
953
994
  }
954
995
  initProcessors$() {
996
+ var _a;
997
+ const hasOverrides = Boolean((_a = this.customizationService) === null || _a === void 0 ? void 0 : _a.getTemplateConfigurationProcessors);
998
+ const flow = this.getFlowSafe();
999
+ if (flow.properties.stateful && !hasOverrides) {
1000
+ // Skip initialization as backend will take processors from SF
1001
+ return of(undefined);
1002
+ }
955
1003
  const owners$ = Object.values(this.flowInfoService.templates)
956
1004
  .map(template => {
957
1005
  var _a, _b, _c;
@@ -970,18 +1018,6 @@ class FlowStateService {
970
1018
  .filter(isDefined);
971
1019
  return forkJoin(owners$).pipe(map$1(noop));
972
1020
  }
973
- getLocalProcessors$() {
974
- const processorsPerTemplate$ = Object.values(this.flowInfoService.templates).map(template => { var _a, _b, _c; return (_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); });
975
- return forkJoin(processorsPerTemplate$).pipe(map$1(processors => {
976
- const definedProcessors = processors.filter(isDefined);
977
- if (definedProcessors.length) {
978
- return flatten(definedProcessors);
979
- }
980
- else {
981
- return null;
982
- }
983
- }));
984
- }
985
1021
  executeActionScript(request, executable) {
986
1022
  var _a, _b;
987
1023
  const script = (_b = (_a = this.processors[executable.ownerId]) === null || _a === void 0 ? void 0 : _a[executable.apiName]) === null || _b === void 0 ? void 0 : _b.script;
@@ -1429,7 +1465,7 @@ class ConfigurationService {
1429
1465
  this.showInactiveProductsConfirmation();
1430
1466
  }
1431
1467
  this.configurableRamp = lineItem;
1432
- }), map(({ lineItem }) => lineItem), catchError$1(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })), finalize(() => this.isLoadingSubj$.next(false)));
1468
+ }), map(({ lineItem }) => lineItem), catchError$1(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })), finalize$1(() => this.isLoadingSubj$.next(false)));
1433
1469
  }
1434
1470
  configureExternal$(props) {
1435
1471
  return this.runtimeService
@@ -1437,7 +1473,7 @@ class ConfigurationService {
1437
1473
  .pipe(switchMap$1(() => this.configure()), first(), catchError$1(error => {
1438
1474
  this.messageService.add({ severity: ToastType.error, summary: error });
1439
1475
  throw error;
1440
- }), finalize(() => this.reset()));
1476
+ }), finalize$1(() => this.reset()));
1441
1477
  }
1442
1478
  configureGuidedSelling$(data) {
1443
1479
  return this.configurationApiService