@veloceapps/sdk 11.0.0-11 → 11.0.0-13
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.
- package/cms/vendor-map.d.ts +7 -6
- package/core/modules/configuration/helpers.d.ts +2 -1
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +1 -3
- package/core/modules/configuration/services/configuration-state.service.d.ts +7 -7
- package/core/modules/configuration/services/configuration.service.d.ts +5 -10
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +11 -32
- package/core/services/catalog-products.service.d.ts +11 -0
- package/core/services/flow-info.service.d.ts +23 -10
- package/core/services/flow-state.service.d.ts +9 -12
- package/core/services/index.d.ts +2 -2
- package/core/services/quote-draft.service.d.ts +5 -5
- package/core/services/sales-transaction.service.d.ts +28 -0
- package/core/types/flow-state.types.d.ts +2 -2
- package/esm2020/cms/vendor-map.mjs +8 -7
- package/esm2020/core/core.module.mjs +7 -4
- package/esm2020/core/modules/configuration/helpers.mjs +11 -17
- package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +8 -45
- package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +46 -54
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +21 -39
- package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +34 -110
- package/esm2020/core/services/catalog-products.service.mjs +25 -0
- package/esm2020/core/services/flow-info.service.mjs +70 -28
- package/esm2020/core/services/flow-state.service.mjs +59 -133
- package/esm2020/core/services/index.mjs +3 -3
- package/esm2020/core/services/quote-draft.service.mjs +20 -38
- package/esm2020/core/services/sales-transaction.service.mjs +62 -0
- package/esm2020/core/types/flow-state.types.mjs +1 -1
- package/esm2020/src/components/flow-header/flow-header.component.mjs +3 -6
- package/esm2020/src/components/guided-selling/guided-selling.component.mjs +3 -6
- package/esm2020/src/flow-routing.module.mjs +5 -36
- package/esm2020/src/flow.component.mjs +5 -5
- package/esm2020/src/guards/flow.guard.mjs +10 -9
- package/esm2020/src/guards/product-unload.guard.mjs +5 -7
- package/esm2020/src/index.mjs +1 -2
- package/esm2020/src/pages/assets/assets.component.mjs +3 -3
- package/esm2020/src/pages/catalog/catalog.component.mjs +3 -3
- package/esm2020/src/pages/debug/debug.component.mjs +7 -11
- package/esm2020/src/pages/product/product.component.mjs +47 -67
- package/esm2020/src/pages/product/product.module.mjs +5 -5
- package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +3 -3
- package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
- package/esm2020/src/resolvers/quote.resolver.mjs +11 -11
- package/esm2020/src/services/flow-dialog.service.mjs +8 -8
- package/esm2020/src/services/flow-router.service.mjs +11 -21
- package/esm2020/src/services/flow.service.mjs +10 -43
- package/esm2020/src/utils/flow.utils.mjs +2 -13
- package/fesm2015/veloceapps-sdk-cms.mjs +7 -6
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk-core.mjs +1483 -1636
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +126 -672
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +7 -6
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +1515 -1707
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +124 -667
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/flow-header/flow-header.component.d.ts +1 -1
- package/src/components/guided-selling/guided-selling.component.d.ts +1 -1
- package/src/flow-routing.module.d.ts +1 -2
- package/src/flow.component.d.ts +2 -2
- package/src/guards/product-unload.guard.d.ts +4 -5
- package/src/index.d.ts +0 -1
- package/src/pages/assets/assets.component.d.ts +1 -1
- package/src/pages/catalog/catalog.component.d.ts +1 -1
- package/src/pages/debug/debug.component.d.ts +2 -3
- package/src/pages/product/product.component.d.ts +9 -10
- package/src/pages/product/product.module.d.ts +1 -1
- package/src/pages/shopping-cart/shopping-cart.component.d.ts +1 -1
- package/src/resolvers/flow.resolver.d.ts +5 -6
- package/src/resolvers/quote.resolver.d.ts +5 -6
- package/src/services/flow-dialog.service.d.ts +3 -3
- package/src/services/flow-router.service.d.ts +2 -4
- package/src/services/flow.service.d.ts +2 -6
- package/src/utils/flow.utils.d.ts +0 -7
- package/core/services/context.service.d.ts +0 -23
- package/esm2020/core/services/context.service.mjs +0 -91
- package/esm2020/src/guards/context.guard.mjs +0 -91
- package/esm2020/src/guards/index.mjs +0 -2
- package/esm2020/src/pages/remote/remote.component.mjs +0 -342
- package/esm2020/src/pages/remote/remote.module.mjs +0 -20
- package/esm2020/src/pages/remote/remote.types.mjs +0 -2
- package/src/guards/context.guard.d.ts +0 -19
- package/src/guards/index.d.ts +0 -1
- package/src/pages/remote/remote.component.d.ts +0 -46
- package/src/pages/remote/remote.module.d.ts +0 -10
- package/src/pages/remote/remote.types.d.ts +0 -4
|
@@ -2,22 +2,23 @@ import * as i4 from '@angular/common';
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Component, ChangeDetectionStrategy, NgModule, Optional, Inject, Injectable, inject } from '@angular/core';
|
|
5
|
-
import * as i1$
|
|
5
|
+
import * as i1$3 from '@veloceapps/api';
|
|
6
6
|
import { ApiModule } from '@veloceapps/api';
|
|
7
7
|
import * as i2$1 from '@veloceapps/components';
|
|
8
8
|
import { ToastType, LoaderModule, LetDirectiveModule } from '@veloceapps/components';
|
|
9
9
|
import * as i5 from '@veloceapps/sdk/cms';
|
|
10
10
|
import { btoaSafe, PreviewModule, FlowAction, LauncherModule } from '@veloceapps/sdk/cms';
|
|
11
11
|
import * as i2 from '@veloceapps/sdk/core';
|
|
12
|
-
import { FLOW_CUSTOMIZATION,
|
|
12
|
+
import { FLOW_CUSTOMIZATION, RuntimeSettingsService, FlowStateService, FlowInfoService, QuoteDraftService, SalesTransactionService, ConfigurationService, IntegrationState, SdkCoreModule } from '@veloceapps/sdk/core';
|
|
13
13
|
import * as i3 from 'primeng/button';
|
|
14
14
|
import { ButtonModule } from 'primeng/button';
|
|
15
15
|
import * as i1 from 'primeng/dynamicdialog';
|
|
16
|
-
import
|
|
16
|
+
import * as i1$1 from '@veloceapps/api/v2';
|
|
17
|
+
import { BehaviorSubject, Subject, filter, first, tap, takeUntil, catchError, of, map, switchMap, shareReplay, startWith, distinctUntilChanged, from, take, combineLatest, timer, noop } from 'rxjs';
|
|
17
18
|
import { DomHandler } from 'primeng/dom';
|
|
18
19
|
import * as i1$2 from '@angular/router';
|
|
19
20
|
import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, RouterModule } from '@angular/router';
|
|
20
|
-
import { mapShoppingCartSettings, getMaxRenewalTermsValue, UITemplateType, SalesforceIdUtils,
|
|
21
|
+
import { mapShoppingCartSettings, getMaxRenewalTermsValue, UITemplateType, SalesforceIdUtils, isVeloceError, extractErrorDetails, ConfigurationContextMode } from '@veloceapps/core';
|
|
21
22
|
import { HttpErrorResponse, HttpParams } from '@angular/common/http';
|
|
22
23
|
import * as i5$1 from '@angular/forms';
|
|
23
24
|
import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -26,7 +27,6 @@ import * as i8 from 'primeng/inputtext';
|
|
|
26
27
|
import { InputTextModule } from 'primeng/inputtext';
|
|
27
28
|
import * as i6 from 'primeng/radiobutton';
|
|
28
29
|
import { RadioButtonModule } from 'primeng/radiobutton';
|
|
29
|
-
import * as i2$2 from 'primeng/api';
|
|
30
30
|
import { catchError as catchError$1 } from 'rxjs/operators';
|
|
31
31
|
|
|
32
32
|
const VELOCE_FLOW_ROOT_ROUTE = 'VELOCE_FLOW_ROOT_ROUTE';
|
|
@@ -97,9 +97,6 @@ class FlowHeaderComponent {
|
|
|
97
97
|
}
|
|
98
98
|
initialize() {
|
|
99
99
|
this.templateApiName = this.flowInfo.flow?.properties.templates?.flowHeader ?? '';
|
|
100
|
-
if (this.flowInfo.isLegacy && !this.templateApiName) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
100
|
this.generateUIDefinition$()
|
|
104
101
|
.pipe(tap(uiDef => {
|
|
105
102
|
if (!uiDef) {
|
|
@@ -210,9 +207,6 @@ class GuidedSellingComponent {
|
|
|
210
207
|
}
|
|
211
208
|
initialize() {
|
|
212
209
|
this.templateApiName = this.flowInfo.flow?.properties.templates?.guidedSelling ?? '';
|
|
213
|
-
if (this.flowInfo.isLegacy && !this.templateApiName) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
210
|
this.generateUIDefinition$()
|
|
217
211
|
.pipe(tap(uiDef => {
|
|
218
212
|
if (!uiDef) {
|
|
@@ -334,10 +328,10 @@ const configurePrimengShadowDOM = () => {
|
|
|
334
328
|
};
|
|
335
329
|
|
|
336
330
|
class FlowDialogService {
|
|
337
|
-
constructor(dialogService,
|
|
331
|
+
constructor(dialogService, runtimeSettings, flowInfoService) {
|
|
338
332
|
this.dialogService = dialogService;
|
|
339
|
-
this.contextService = contextService;
|
|
340
333
|
this.runtimeSettings = runtimeSettings;
|
|
334
|
+
this.flowInfoService = flowInfoService;
|
|
341
335
|
}
|
|
342
336
|
show(config) {
|
|
343
337
|
return this.dialogService.open(FlowDialogComponent, {
|
|
@@ -358,8 +352,8 @@ class FlowDialogService {
|
|
|
358
352
|
});
|
|
359
353
|
}
|
|
360
354
|
showReadonlyModeDialog() {
|
|
361
|
-
const
|
|
362
|
-
const objectName =
|
|
355
|
+
const mode = this.flowInfoService.context.mode;
|
|
356
|
+
const objectName = mode ? mode[0]?.toUpperCase() + mode.substring(1).toLowerCase() : 'Object';
|
|
363
357
|
return this.show({
|
|
364
358
|
title: 'Error',
|
|
365
359
|
description: `${objectName} Cannot be Saved`,
|
|
@@ -431,19 +425,17 @@ class FlowDialogService {
|
|
|
431
425
|
return dialogFunction(dialog);
|
|
432
426
|
}
|
|
433
427
|
}
|
|
434
|
-
FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i2.
|
|
428
|
+
FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i2.RuntimeSettingsService }, { token: i2.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
435
429
|
FlowDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService });
|
|
436
430
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, decorators: [{
|
|
437
431
|
type: Injectable
|
|
438
|
-
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.
|
|
432
|
+
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.RuntimeSettingsService }, { type: i2.FlowInfoService }]; } });
|
|
439
433
|
|
|
440
434
|
class FlowRouterService {
|
|
441
|
-
constructor(router, route,
|
|
435
|
+
constructor(router, route, integrationState, flowStateService) {
|
|
442
436
|
this.router = router;
|
|
443
437
|
this.route = route;
|
|
444
|
-
this.contextService = contextService;
|
|
445
438
|
this.integrationState = integrationState;
|
|
446
|
-
this.flowInfoService = flowInfoService;
|
|
447
439
|
this.flowStateService = flowStateService;
|
|
448
440
|
this.urlHistory = [];
|
|
449
441
|
this.getLastChildRoute = (route) => {
|
|
@@ -553,19 +545,11 @@ class FlowRouterService {
|
|
|
553
545
|
}
|
|
554
546
|
}
|
|
555
547
|
navigateToProductConfiguration(productId, lineItemId) {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
}
|
|
562
|
-
else {
|
|
563
|
-
updateContext$ = this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_CONTEXT_PROPERTIES', {
|
|
564
|
-
productId,
|
|
565
|
-
lineItemId: lineItemId ?? '',
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
updateContext$
|
|
548
|
+
this.flowStateService
|
|
549
|
+
.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_CONTEXT_PROPERTIES', {
|
|
550
|
+
productId,
|
|
551
|
+
lineItemId: lineItemId ?? '',
|
|
552
|
+
})
|
|
569
553
|
.pipe(tap(() => {
|
|
570
554
|
const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
|
|
571
555
|
const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
|
|
@@ -610,23 +594,20 @@ class FlowRouterService {
|
|
|
610
594
|
this.router.navigate([], { relativeTo: route, queryParams: { ...routeSnapshot.queryParams, ...queryParams } });
|
|
611
595
|
}
|
|
612
596
|
}
|
|
613
|
-
FlowRouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.
|
|
597
|
+
FlowRouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.IntegrationState }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
614
598
|
FlowRouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, providedIn: 'root' });
|
|
615
599
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, decorators: [{
|
|
616
600
|
type: Injectable,
|
|
617
601
|
args: [{ providedIn: 'root' }]
|
|
618
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.
|
|
602
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.IntegrationState }, { type: i2.FlowStateService }]; } });
|
|
619
603
|
|
|
620
604
|
class FlowService {
|
|
621
|
-
constructor(integrationState, flowRouterService,
|
|
605
|
+
constructor(integrationState, flowRouterService, configurationService, configurationStateService, flowDialogService, flowStateService) {
|
|
622
606
|
this.integrationState = integrationState;
|
|
623
607
|
this.flowRouterService = flowRouterService;
|
|
624
|
-
this.quoteDraftService = quoteDraftService;
|
|
625
608
|
this.configurationService = configurationService;
|
|
626
609
|
this.configurationStateService = configurationStateService;
|
|
627
610
|
this.flowDialogService = flowDialogService;
|
|
628
|
-
this.flowConfigurationService = flowConfigurationService;
|
|
629
|
-
this.flowInfoService = flowInfoService;
|
|
630
611
|
this.flowStateService = flowStateService;
|
|
631
612
|
this.cleanup$ = new Subject();
|
|
632
613
|
}
|
|
@@ -636,14 +617,7 @@ class FlowService {
|
|
|
636
617
|
initSubscriptions() {
|
|
637
618
|
this.integrationState
|
|
638
619
|
.listen$(FlowAction.FLOW_CONFIGURE_PRODUCT)
|
|
639
|
-
.pipe(switchMap(payload => {
|
|
640
|
-
if (this.flowInfoService.isLegacy) {
|
|
641
|
-
const productId = payload.productId ??
|
|
642
|
-
this.quoteDraftService.currentState.find(li => li.id === payload.lineItemId)?.productId;
|
|
643
|
-
return of({ ...payload, productId });
|
|
644
|
-
}
|
|
645
|
-
return this.prepareConfiguration$(payload.lineItemId).pipe(map(() => payload));
|
|
646
|
-
}), tap(payload => {
|
|
620
|
+
.pipe(switchMap(payload => this.prepareConfiguration$(payload.lineItemId).pipe(map(() => payload))), tap(payload => {
|
|
647
621
|
if (payload.productId) {
|
|
648
622
|
this.flowRouterService.navigateToProductConfiguration(payload.productId, payload.lineItemId);
|
|
649
623
|
}
|
|
@@ -689,17 +663,10 @@ class FlowService {
|
|
|
689
663
|
.subscribe();
|
|
690
664
|
this.integrationState
|
|
691
665
|
.listen$(FlowAction.FLOW_APPLY_PRODUCT_CONFIGURATION)
|
|
692
|
-
.pipe(switchMap(() => {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
else {
|
|
697
|
-
return this.configurationStateService.saveConfiguration(true).pipe(switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
|
|
698
|
-
addConfiguringAssetId: true,
|
|
699
|
-
enable: true,
|
|
700
|
-
})));
|
|
701
|
-
}
|
|
702
|
-
}), tap(() => {
|
|
666
|
+
.pipe(switchMap(() => this.configurationStateService.saveConfiguration()), switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
|
|
667
|
+
addConfiguringAssetId: true,
|
|
668
|
+
enable: true,
|
|
669
|
+
})), tap(() => {
|
|
703
670
|
this.configurationService.hasUnsavedChanges = false;
|
|
704
671
|
this.flowRouterService.navigateToShoppingCart();
|
|
705
672
|
}), takeUntil(this.cleanup$))
|
|
@@ -723,28 +690,12 @@ class FlowService {
|
|
|
723
690
|
lineItemId,
|
|
724
691
|
});
|
|
725
692
|
}
|
|
726
|
-
legacyApplyConfiguration() {
|
|
727
|
-
const quoteDraft = this.quoteDraftService.quoteDraft;
|
|
728
|
-
const lineItem = this.configurationService.getSnapshot();
|
|
729
|
-
if (!quoteDraft || !lineItem) {
|
|
730
|
-
return of(undefined);
|
|
731
|
-
}
|
|
732
|
-
const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
|
|
733
|
-
let updatedState;
|
|
734
|
-
if (isNewLineItem) {
|
|
735
|
-
updatedState = [...quoteDraft.currentState, lineItem];
|
|
736
|
-
}
|
|
737
|
-
else {
|
|
738
|
-
updatedState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
|
|
739
|
-
}
|
|
740
|
-
return this.flowConfigurationService.calculate$({ ...quoteDraft, currentState: updatedState });
|
|
741
|
-
}
|
|
742
693
|
}
|
|
743
|
-
FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token: i2.
|
|
694
|
+
FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: FlowDialogService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
744
695
|
FlowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService });
|
|
745
696
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, decorators: [{
|
|
746
697
|
type: Injectable
|
|
747
|
-
}], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type: i2.
|
|
698
|
+
}], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: FlowDialogService }, { type: i2.FlowStateService }]; } });
|
|
748
699
|
|
|
749
700
|
class FlowGuidedSellingService {
|
|
750
701
|
constructor(integrationState) {
|
|
@@ -775,14 +726,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
775
726
|
}], ctorParameters: function () { return [{ type: i2.IntegrationState }]; } });
|
|
776
727
|
|
|
777
728
|
class FlowComponent {
|
|
778
|
-
constructor(routerService, flowService,
|
|
729
|
+
constructor(routerService, flowService, flowInfoService, guidedSellingService) {
|
|
779
730
|
this.routerService = routerService;
|
|
780
731
|
this.flowService = flowService;
|
|
781
|
-
this.
|
|
732
|
+
this.flowInfoService = flowInfoService;
|
|
782
733
|
this.guidedSellingService = guidedSellingService;
|
|
783
734
|
this.isLoading$ = this.routerService.loading$;
|
|
784
|
-
this.showHeader$ = combineLatest([this.routerService.route$, this.
|
|
785
|
-
this.isStandalone$ = this.
|
|
735
|
+
this.showHeader$ = combineLatest([this.routerService.route$, this.flowInfoService.flow$]).pipe(map(([route, flow]) => route.data['showHeader'] && !flow?.properties.standalone));
|
|
736
|
+
this.isStandalone$ = this.flowInfoService.flow$.pipe(map(flow => Boolean(flow?.properties.standalone)));
|
|
786
737
|
this.guidedSellingVisible$ = this.guidedSellingService.isVisible$;
|
|
787
738
|
this.flowService.initSubscriptions();
|
|
788
739
|
}
|
|
@@ -797,133 +748,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
797
748
|
args: [{ selector: 'vl-flow', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"] }]
|
|
798
749
|
}], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type: i2.FlowInfoService }, { type: FlowGuidedSellingService }]; } });
|
|
799
750
|
|
|
800
|
-
const getFlowObjectIdPropertyName = (id) => {
|
|
801
|
-
const objectName = SalesforceIdUtils.getSfObjectNameById(id);
|
|
802
|
-
switch (objectName) {
|
|
803
|
-
case 'Account':
|
|
804
|
-
return 'accountId';
|
|
805
|
-
case 'Order':
|
|
806
|
-
return 'orderId';
|
|
807
|
-
case 'Quote':
|
|
808
|
-
default:
|
|
809
|
-
return 'quoteId';
|
|
810
|
-
}
|
|
811
|
-
};
|
|
812
|
-
const getDefaultProperties = (params) => {
|
|
813
|
-
const properties = {};
|
|
814
|
-
let standalone = params.flowParams?.standalone;
|
|
815
|
-
if (params.flowParams?.entryPath.includes('/product') || params.mode === ConfigurationContextMode.REMOTE) {
|
|
816
|
-
standalone = standalone ?? true;
|
|
817
|
-
}
|
|
818
|
-
if (standalone != null) {
|
|
819
|
-
properties.standalone = standalone ? 'true' : 'false';
|
|
820
|
-
}
|
|
821
|
-
return properties;
|
|
822
|
-
};
|
|
823
|
-
|
|
824
|
-
class ContextGuard {
|
|
825
|
-
constructor(router, routerService, contextService, runtimeSettingsService) {
|
|
826
|
-
this.router = router;
|
|
827
|
-
this.routerService = routerService;
|
|
828
|
-
this.contextService = contextService;
|
|
829
|
-
this.runtimeSettingsService = runtimeSettingsService;
|
|
830
|
-
}
|
|
831
|
-
checkActivation(route) {
|
|
832
|
-
const { queryParams } = route;
|
|
833
|
-
const { accountId, quoteId, orderId } = queryParams;
|
|
834
|
-
const rpcMessage = window.RPC_MESSAGE;
|
|
835
|
-
const mode = this.getConfigurationContextMode(accountId, quoteId, orderId, rpcMessage);
|
|
836
|
-
// Restrict if mode is not defined
|
|
837
|
-
if (mode == null) {
|
|
838
|
-
return this.routerService.showErrorPage$('Mode is undefined');
|
|
839
|
-
}
|
|
840
|
-
const headerId = accountId || quoteId || orderId || this.rpcMessageId || 'empty-for-test-mode';
|
|
841
|
-
// Allow if context is already initialized with the same headerId
|
|
842
|
-
if (this.contextService.isInitialized) {
|
|
843
|
-
const currentContext = this.contextService.resolve();
|
|
844
|
-
if (headerId && currentContext.headerId === headerId) {
|
|
845
|
-
return of(true);
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
// Initialize context and runtime settings
|
|
849
|
-
return forkJoin([this.contextService.create(headerId, mode), this.runtimeSettingsService.create()]).pipe(tap(([context]) => {
|
|
850
|
-
this.contextService.update({
|
|
851
|
-
...context,
|
|
852
|
-
properties: {
|
|
853
|
-
...context.properties,
|
|
854
|
-
...(queryParams ?? {}),
|
|
855
|
-
...getDefaultProperties({ mode }),
|
|
856
|
-
},
|
|
857
|
-
});
|
|
858
|
-
// Init currency settings
|
|
859
|
-
this.runtimeSettingsService.initCurrency(context.properties['CurrencyIsoCode']);
|
|
860
|
-
}), map(() => true), catchError(e => {
|
|
861
|
-
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
|
862
|
-
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
|
863
|
-
return this.routerService.showErrorPage$(message, errorDetails);
|
|
864
|
-
}));
|
|
865
|
-
}
|
|
866
|
-
canActivate(route) {
|
|
867
|
-
return this.checkActivation(route);
|
|
868
|
-
}
|
|
869
|
-
canActivateChild(childRoute) {
|
|
870
|
-
return this.checkActivation(childRoute);
|
|
871
|
-
}
|
|
872
|
-
get rpcMessageId() {
|
|
873
|
-
if (!window.RPC_MESSAGE) {
|
|
874
|
-
return;
|
|
875
|
-
}
|
|
876
|
-
const rpcMessage = JSON.parse(window.RPC_MESSAGE);
|
|
877
|
-
const veloceReferenceId = rpcMessage.configuration?.VeloceReferenceId;
|
|
878
|
-
const quoteId = rpcMessage.quote?.Id;
|
|
879
|
-
return veloceReferenceId || quoteId;
|
|
880
|
-
}
|
|
881
|
-
getConfigurationContextMode(accountId, quoteId, orderId, rpcMessage) {
|
|
882
|
-
if (accountId) {
|
|
883
|
-
return ConfigurationContextMode.ACCOUNT;
|
|
884
|
-
}
|
|
885
|
-
if (quoteId) {
|
|
886
|
-
return ConfigurationContextMode.QUOTE;
|
|
887
|
-
}
|
|
888
|
-
if (orderId) {
|
|
889
|
-
return ConfigurationContextMode.ORDER;
|
|
890
|
-
}
|
|
891
|
-
if (rpcMessage) {
|
|
892
|
-
return ConfigurationContextMode.REMOTE;
|
|
893
|
-
}
|
|
894
|
-
return;
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
898
|
-
ContextGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard });
|
|
899
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard, decorators: [{
|
|
900
|
-
type: Injectable
|
|
901
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.RuntimeSettingsService }]; } });
|
|
902
|
-
|
|
903
751
|
const keepFlowInitialized = (route) => {
|
|
904
|
-
const
|
|
752
|
+
const routerService = inject(FlowRouterService);
|
|
753
|
+
const runtimeSettingsService = inject(RuntimeSettingsService);
|
|
905
754
|
const flowState = inject(FlowStateService);
|
|
906
755
|
const flowInfoService = inject(FlowInfoService);
|
|
907
|
-
const routerService = inject(FlowRouterService);
|
|
908
756
|
const quoteDraft = inject(QuoteDraftService);
|
|
757
|
+
const salesTrasnsactionService = inject(SalesTransactionService);
|
|
909
758
|
const configurationService = inject(ConfigurationService);
|
|
910
759
|
const integrationState = inject(IntegrationState);
|
|
911
760
|
const { flowId } = route.queryParams;
|
|
912
|
-
|
|
913
|
-
if (flow && flow?.id === flowId) {
|
|
761
|
+
if (flowInfoService.isFlowInitialized && flowInfoService.flow.id === flowId) {
|
|
914
762
|
return true;
|
|
915
763
|
}
|
|
916
764
|
// Cleanup
|
|
917
765
|
flowState.cleanup();
|
|
918
766
|
quoteDraft.reset();
|
|
767
|
+
salesTrasnsactionService.reset();
|
|
919
768
|
configurationService.reset();
|
|
920
769
|
integrationState.clear();
|
|
921
770
|
flowInfoService.cleanup();
|
|
922
|
-
contextService.delete();
|
|
923
771
|
if (!flowId) {
|
|
924
772
|
return true;
|
|
925
773
|
}
|
|
926
|
-
return flowInfoService.init$(flowId, route.queryParams)
|
|
774
|
+
return runtimeSettingsService.create().pipe(tap(() => runtimeSettingsService.initCurrency('USD')), switchMap(() => flowInfoService.init$(flowId, route.queryParams)), map(() => true), catchError(e => {
|
|
775
|
+
console.error(e);
|
|
927
776
|
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
|
928
777
|
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
|
929
778
|
return routerService.showErrorPage$(message, errorDetails);
|
|
@@ -931,9 +780,8 @@ const keepFlowInitialized = (route) => {
|
|
|
931
780
|
};
|
|
932
781
|
|
|
933
782
|
class ProductUnloadGuard {
|
|
934
|
-
constructor(router,
|
|
783
|
+
constructor(router, quoteDraftService, configurationService, flowDialogService) {
|
|
935
784
|
this.router = router;
|
|
936
|
-
this.contextService = contextService;
|
|
937
785
|
this.quoteDraftService = quoteDraftService;
|
|
938
786
|
this.configurationService = configurationService;
|
|
939
787
|
this.flowDialogService = flowDialogService;
|
|
@@ -946,7 +794,6 @@ class ProductUnloadGuard {
|
|
|
946
794
|
return observable.pipe(map(unload => {
|
|
947
795
|
if (unload) {
|
|
948
796
|
this.configurationService.reset();
|
|
949
|
-
this.contextService.update({ properties: { productId: undefined, lineItemId: undefined } });
|
|
950
797
|
if (!nextState || currentState.url === nextState.url) {
|
|
951
798
|
return true;
|
|
952
799
|
}
|
|
@@ -964,11 +811,11 @@ class ProductUnloadGuard {
|
|
|
964
811
|
}));
|
|
965
812
|
}
|
|
966
813
|
}
|
|
967
|
-
ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token: i2.
|
|
814
|
+
ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationService }, { token: FlowDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
968
815
|
ProductUnloadGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard });
|
|
969
816
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, decorators: [{
|
|
970
817
|
type: Injectable
|
|
971
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.
|
|
818
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationService }, { type: FlowDialogService }]; } });
|
|
972
819
|
|
|
973
820
|
class RootGuard {
|
|
974
821
|
constructor(router, routerService) {
|
|
@@ -1229,11 +1076,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1229
1076
|
}] });
|
|
1230
1077
|
|
|
1231
1078
|
class DebugComponent {
|
|
1232
|
-
constructor(flowsApiService, router, activatedRoute,
|
|
1079
|
+
constructor(flowsApiService, router, activatedRoute, quoteDraftService) {
|
|
1233
1080
|
this.flowsApiService = flowsApiService;
|
|
1234
1081
|
this.router = router;
|
|
1235
1082
|
this.activatedRoute = activatedRoute;
|
|
1236
|
-
this.context = context;
|
|
1237
1083
|
this.quoteDraftService = quoteDraftService;
|
|
1238
1084
|
this.form = new FormGroup({
|
|
1239
1085
|
id: new FormControl(''),
|
|
@@ -1242,17 +1088,15 @@ class DebugComponent {
|
|
|
1242
1088
|
}
|
|
1243
1089
|
runFlow() {
|
|
1244
1090
|
const { id } = this.form.value;
|
|
1245
|
-
|
|
1246
|
-
if (!id || !objectPropertyName || !this.selectedFlow) {
|
|
1091
|
+
if (!id || !this.selectedFlow) {
|
|
1247
1092
|
return;
|
|
1248
1093
|
}
|
|
1249
1094
|
// Delete context before starting a new flow
|
|
1250
|
-
this.context.delete();
|
|
1251
1095
|
this.quoteDraftService.reset();
|
|
1252
1096
|
this.router.navigate(['..', 'flows'], {
|
|
1253
1097
|
queryParams: {
|
|
1254
1098
|
flowId: this.selectedFlow.id,
|
|
1255
|
-
|
|
1099
|
+
headerId: id,
|
|
1256
1100
|
...this.selectedFlow.properties.queryParams,
|
|
1257
1101
|
},
|
|
1258
1102
|
relativeTo: this.activatedRoute,
|
|
@@ -1262,12 +1106,12 @@ class DebugComponent {
|
|
|
1262
1106
|
return new HttpParams({ fromObject: params }).toString();
|
|
1263
1107
|
}
|
|
1264
1108
|
}
|
|
1265
|
-
DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$
|
|
1109
|
+
DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$3.FlowsApiService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.QuoteDraftService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1266
1110
|
DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DebugComponent, selector: "vl-flow-debug", ngImport: i0, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i8.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1267
1111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, decorators: [{
|
|
1268
1112
|
type: Component,
|
|
1269
1113
|
args: [{ selector: 'vl-flow-debug', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"] }]
|
|
1270
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
1114
|
+
}], ctorParameters: function () { return [{ type: i1$3.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.QuoteDraftService }]; } });
|
|
1271
1115
|
|
|
1272
1116
|
const routes$1 = [{ path: '', component: DebugComponent }];
|
|
1273
1117
|
class DebugModule {
|
|
@@ -1305,97 +1149,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1305
1149
|
}] });
|
|
1306
1150
|
|
|
1307
1151
|
class ProductComponent {
|
|
1308
|
-
constructor(
|
|
1309
|
-
|
|
1310
|
-
|
|
1152
|
+
constructor(
|
|
1153
|
+
// private configurationRuntimeService: ConfigurationRuntimeService,
|
|
1154
|
+
configurationService, configurationStateService, salesTransactionService, flowInfoService, integrationState, uiDefinitionsApiService, customizationService) {
|
|
1311
1155
|
this.configurationService = configurationService;
|
|
1312
1156
|
this.configurationStateService = configurationStateService;
|
|
1313
|
-
this.
|
|
1157
|
+
this.salesTransactionService = salesTransactionService;
|
|
1314
1158
|
this.flowInfoService = flowInfoService;
|
|
1315
|
-
this.flowStateService = flowStateService;
|
|
1316
1159
|
this.integrationState = integrationState;
|
|
1160
|
+
this.uiDefinitionsApiService = uiDefinitionsApiService;
|
|
1317
1161
|
this.customizationService = customizationService;
|
|
1318
|
-
this.
|
|
1162
|
+
this.uiDefinitionContainer$ = new BehaviorSubject(null);
|
|
1319
1163
|
this.config = {
|
|
1320
1164
|
init$: () => this.init$(),
|
|
1321
1165
|
};
|
|
1322
1166
|
}
|
|
1323
1167
|
customizeUI$() {
|
|
1324
|
-
const { productId } = this.
|
|
1168
|
+
const { productId } = this.flowInfoService.context;
|
|
1325
1169
|
if (!productId || !this.customizationService?.getUiDefinition) {
|
|
1326
1170
|
return of(undefined);
|
|
1327
1171
|
}
|
|
1328
1172
|
return this.customizationService.getUiDefinition(productId).pipe(map(uiDefinitionContainer => {
|
|
1329
|
-
|
|
1330
|
-
|
|
1173
|
+
this.uiDefinitionContainer$.next(uiDefinitionContainer);
|
|
1174
|
+
}));
|
|
1175
|
+
}
|
|
1176
|
+
fetchUIDefinition$() {
|
|
1177
|
+
const flowContext = this.flowInfoService.context;
|
|
1178
|
+
if (flowContext.requiredUIDefinitionId) {
|
|
1179
|
+
return this.uiDefinitionsApiService
|
|
1180
|
+
.fetchUIDefinition$(flowContext.requiredUIDefinitionId)
|
|
1181
|
+
.pipe(map((uiDefContainer) => this.uiDefinitionContainer$.next(uiDefContainer)));
|
|
1182
|
+
}
|
|
1183
|
+
return this.uiDefinitionsApiService
|
|
1184
|
+
.fetchUIDefinitions$({
|
|
1185
|
+
productId: flowContext.productId,
|
|
1186
|
+
defaultUIDefinitionId: flowContext.defaultUIDefinitionId,
|
|
1187
|
+
})
|
|
1188
|
+
.pipe(map((uiDefinitionContainers) => {
|
|
1189
|
+
const uiDefContainer = uiDefinitionContainers[0];
|
|
1190
|
+
if (uiDefContainer) {
|
|
1191
|
+
this.uiDefinitionContainer$.next(uiDefContainer);
|
|
1331
1192
|
}
|
|
1332
1193
|
}));
|
|
1333
1194
|
}
|
|
1334
1195
|
init$() {
|
|
1335
|
-
let
|
|
1336
|
-
if (
|
|
1337
|
-
|
|
1196
|
+
let state$;
|
|
1197
|
+
if (!this.flowInfoService.isStateful) {
|
|
1198
|
+
state$ = this.salesTransactionService.state$;
|
|
1338
1199
|
}
|
|
1339
1200
|
else {
|
|
1340
|
-
|
|
1201
|
+
state$ = of(undefined);
|
|
1341
1202
|
}
|
|
1342
|
-
return
|
|
1343
|
-
|
|
1344
|
-
const productId = contextProperties.productId ?? this.flowInfoService.flow?.properties.queryParams['productId'];
|
|
1345
|
-
const defaultUIDefinitionId = this.flowInfoService.flow?.properties.queryParams['defaultUIDefinitionId'];
|
|
1346
|
-
const requiredUIDefinitionId = this.flowInfoService.flow?.properties.queryParams['requiredUIDefinitionId'];
|
|
1347
|
-
if (!productId) {
|
|
1203
|
+
return state$.pipe(first(), tap(() => {
|
|
1204
|
+
if (!this.flowInfoService.context.productId) {
|
|
1348
1205
|
throw new Error(`Unable to start configuration for 'productId == null'`);
|
|
1349
1206
|
}
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
return this.configurationRuntimeService.init({ productId, offeringId });
|
|
1353
|
-
}
|
|
1354
|
-
const lineItem = this.getLineItem(quote, productId, contextProperties.lineItemId);
|
|
1355
|
-
if (lineItem) {
|
|
1356
|
-
this.configurationService.setConfigurableRamp(lineItem);
|
|
1357
|
-
}
|
|
1358
|
-
const { offeringId } = lineItem ?? {};
|
|
1359
|
-
return this.configurationRuntimeService.init({
|
|
1360
|
-
productId,
|
|
1361
|
-
offeringId,
|
|
1362
|
-
defaultUIDefinitionId,
|
|
1363
|
-
requiredUIDefinitionId,
|
|
1364
|
-
});
|
|
1365
|
-
}), switchMap(() => this.customizeUI$()), tap(() => {
|
|
1366
|
-
const uiDefinition = this.configurationRuntimeService.runtimeContext?.uiDefinitionContainer?.source;
|
|
1367
|
-
if (uiDefinition) {
|
|
1368
|
-
this.uiDefinition$.next(uiDefinition);
|
|
1369
|
-
}
|
|
1370
|
-
else {
|
|
1207
|
+
}), switchMap(() => this.customizeUI$()), switchMap(() => (this.uiDefinitionContainer$.value ? of(undefined) : this.fetchUIDefinition$())), tap(() => {
|
|
1208
|
+
if (!this.uiDefinitionContainer$.value) {
|
|
1371
1209
|
throw new Error('Product does not have Configuration UI');
|
|
1372
1210
|
}
|
|
1373
|
-
}),
|
|
1374
|
-
|
|
1375
|
-
this.configurationRuntimeService.initializationProps.attributesMap =
|
|
1376
|
-
this.integrationState.state.guidedSelling;
|
|
1377
|
-
}
|
|
1378
|
-
}), switchMap(() => this.configurationStateService.init$()));
|
|
1379
|
-
}
|
|
1380
|
-
getLineItem(quote, productId, lineItemId) {
|
|
1381
|
-
// search by lineItemId first
|
|
1382
|
-
let li = quote.currentState.find(li => li.id === lineItemId);
|
|
1383
|
-
if (!li && this.quoteDraftService.isStandalone) {
|
|
1384
|
-
li = quote.currentState.find(li => li.productId === productId);
|
|
1385
|
-
}
|
|
1386
|
-
// If still not found, is could be an asset
|
|
1387
|
-
if (!li) {
|
|
1388
|
-
li = this.quoteDraftService.assetsState?.currentState.find(li => li.id === lineItemId);
|
|
1389
|
-
}
|
|
1390
|
-
return li;
|
|
1211
|
+
}), switchMap(() => this.configurationStateService.init$()), switchMap(() => timer(1)), // wait until updates inputs on child components
|
|
1212
|
+
map(noop));
|
|
1391
1213
|
}
|
|
1392
1214
|
}
|
|
1393
|
-
ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, deps: [{ token: i2.
|
|
1394
|
-
ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ProductComponent, selector: "vl-flow-product", ngImport: i0, template: "<vl-cms-preview [uiDefinition]=\"
|
|
1215
|
+
ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, deps: [{ token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: i2.SalesTransactionService }, { token: i2.FlowInfoService }, { token: i2.IntegrationState }, { token: i1$1.UIDefinitionsApiService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
1216
|
+
ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ProductComponent, selector: "vl-flow-product", ngImport: i0, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n", styles: [""], dependencies: [{ kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1395
1217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, decorators: [{
|
|
1396
1218
|
type: Component,
|
|
1397
|
-
args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"
|
|
1398
|
-
}], ctorParameters: function () { return [{ type: i2.
|
|
1219
|
+
args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n" }]
|
|
1220
|
+
}], ctorParameters: function () { return [{ type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: i2.SalesTransactionService }, { type: i2.FlowInfoService }, { type: i2.IntegrationState }, { type: i1$1.UIDefinitionsApiService }, { type: undefined, decorators: [{
|
|
1399
1221
|
type: Optional
|
|
1400
1222
|
}, {
|
|
1401
1223
|
type: Inject,
|
|
@@ -1405,13 +1227,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1405
1227
|
class ProductModule {
|
|
1406
1228
|
}
|
|
1407
1229
|
ProductModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1408
|
-
ProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, declarations: [ProductComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [ProductComponent] });
|
|
1409
|
-
ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule] });
|
|
1230
|
+
ProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, declarations: [ProductComponent], imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule], exports: [ProductComponent] });
|
|
1231
|
+
ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule] });
|
|
1410
1232
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, decorators: [{
|
|
1411
1233
|
type: NgModule,
|
|
1412
1234
|
args: [{
|
|
1413
1235
|
declarations: [ProductComponent],
|
|
1414
|
-
imports: [CommonModule, PreviewModule, LoaderModule],
|
|
1236
|
+
imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule],
|
|
1415
1237
|
exports: [ProductComponent],
|
|
1416
1238
|
}]
|
|
1417
1239
|
}] });
|
|
@@ -1453,349 +1275,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1453
1275
|
}]
|
|
1454
1276
|
}] });
|
|
1455
1277
|
|
|
1456
|
-
class RemoteComponent {
|
|
1457
|
-
constructor(contextService, quoteDraftService, runtimeService, configurationService, configurationState, messageService, integrationState, location) {
|
|
1458
|
-
this.contextService = contextService;
|
|
1459
|
-
this.quoteDraftService = quoteDraftService;
|
|
1460
|
-
this.runtimeService = runtimeService;
|
|
1461
|
-
this.configurationService = configurationService;
|
|
1462
|
-
this.configurationState = configurationState;
|
|
1463
|
-
this.messageService = messageService;
|
|
1464
|
-
this.integrationState = integrationState;
|
|
1465
|
-
this.location = location;
|
|
1466
|
-
this.state$ = new BehaviorSubject({ loading: true, failure: false });
|
|
1467
|
-
this.DYNAMIC_OPTION_PRODUCTS_KEY = 'Dynamic';
|
|
1468
|
-
this.destroyed$ = new Subject();
|
|
1469
|
-
this.rpcMessage = JSON.parse(window.RPC_MESSAGE);
|
|
1470
|
-
this.rpcMessage.options.sort((a, b) => (a.featureNumber ?? 99999) - (b.featureNumber ?? 99999));
|
|
1471
|
-
this.updateHasChildrenFlag(this.rpcMessage.product.configuredProductId);
|
|
1472
|
-
// update context properties
|
|
1473
|
-
if (this.rpcMessage.quote) {
|
|
1474
|
-
const properties = {};
|
|
1475
|
-
if (this.rpcMessage.quote['SBQQ__Opportunity2__c']) {
|
|
1476
|
-
properties.OpportunityId = this.rpcMessage.quote['SBQQ__Opportunity2__c'];
|
|
1477
|
-
}
|
|
1478
|
-
Object.entries(this.rpcMessage.quote).forEach(([key, value]) => {
|
|
1479
|
-
if (value !== undefined && !(value instanceof Object)) {
|
|
1480
|
-
properties[key] = value;
|
|
1481
|
-
}
|
|
1482
|
-
});
|
|
1483
|
-
this.contextService.update({ properties });
|
|
1484
|
-
}
|
|
1485
|
-
this.initSubscriptions();
|
|
1486
|
-
this.initConfiguration();
|
|
1487
|
-
}
|
|
1488
|
-
ngOnDestroy() {
|
|
1489
|
-
this.destroyed$.next();
|
|
1490
|
-
this.destroyed$.complete();
|
|
1491
|
-
}
|
|
1492
|
-
initConfiguration() {
|
|
1493
|
-
const productId = this.rpcMessage.product.configuredProductId;
|
|
1494
|
-
const quote = this.quoteDraftService.quoteDraft;
|
|
1495
|
-
if (!productId || !quote) {
|
|
1496
|
-
return;
|
|
1497
|
-
}
|
|
1498
|
-
this.runtimeService
|
|
1499
|
-
.init({ productId })
|
|
1500
|
-
.pipe(first(), tap(context => {
|
|
1501
|
-
const uiDefinitionProperties = context.uiDefinitionContainer?.source.properties ?? {};
|
|
1502
|
-
this.uiDefinition = context.uiDefinitionContainer?.source;
|
|
1503
|
-
const pricingEnabled = uiDefinitionProperties.pricingEnabled ? 'true' : 'false';
|
|
1504
|
-
const priceListId = uiDefinitionProperties.priceList;
|
|
1505
|
-
const runtimeContextProperties = this.runtimeService.runtimeContext?.properties;
|
|
1506
|
-
if (runtimeContextProperties) {
|
|
1507
|
-
runtimeContextProperties.PriceListId = priceListId;
|
|
1508
|
-
runtimeContextProperties.PricingEnabled = pricingEnabled;
|
|
1509
|
-
}
|
|
1510
|
-
this.contextService.update({
|
|
1511
|
-
properties: {
|
|
1512
|
-
ModelId: context.modelId,
|
|
1513
|
-
RuntimeMode: 'TEST',
|
|
1514
|
-
PricingEnabled: pricingEnabled,
|
|
1515
|
-
PriceListId: priceListId,
|
|
1516
|
-
},
|
|
1517
|
-
});
|
|
1518
|
-
this.configurationService.setConfigurableRamp(this.createLineItem());
|
|
1519
|
-
}), this.throwIfNoUIDefinition(), switchMap(() => this.configurationState.init$()), tap(() => this.state$.next({ loading: false, failure: false })), catchError(error => {
|
|
1520
|
-
if (!this.uiDefinition?.properties?.suppressToastMessages) {
|
|
1521
|
-
this.messageService.add({ severity: 'error', summary: error });
|
|
1522
|
-
}
|
|
1523
|
-
this.state$.next({ loading: false, failure: true });
|
|
1524
|
-
return of();
|
|
1525
|
-
}), takeUntil(this.destroyed$))
|
|
1526
|
-
.subscribe();
|
|
1527
|
-
}
|
|
1528
|
-
throwIfNoUIDefinition() {
|
|
1529
|
-
return (source$) => {
|
|
1530
|
-
return source$.pipe(switchMap(() => {
|
|
1531
|
-
if (!this.uiDefinition) {
|
|
1532
|
-
return throwError(() => 'Product does not have Configuration UI');
|
|
1533
|
-
}
|
|
1534
|
-
return source$;
|
|
1535
|
-
}));
|
|
1536
|
-
};
|
|
1537
|
-
}
|
|
1538
|
-
initSubscriptions() {
|
|
1539
|
-
this.integrationState
|
|
1540
|
-
.listen$(FlowAction.REMOTE_CANCEL)
|
|
1541
|
-
.pipe(tap(() => this.location.back()), takeUntil(this.destroyed$))
|
|
1542
|
-
.subscribe();
|
|
1543
|
-
this.integrationState
|
|
1544
|
-
.listen$(FlowAction.REMOTE_APPLY)
|
|
1545
|
-
.pipe(tap(() => this.saveRpcMessage()), takeUntil(this.destroyed$))
|
|
1546
|
-
.subscribe();
|
|
1547
|
-
}
|
|
1548
|
-
createLineItem() {
|
|
1549
|
-
const [quoteDraftLineItem] = this.quoteDraftService.quoteDraft?.currentState ?? [];
|
|
1550
|
-
if (quoteDraftLineItem && (quoteDraftLineItem.attributes.length > 0 || quoteDraftLineItem.lineItems.length > 0)) {
|
|
1551
|
-
return quoteDraftLineItem;
|
|
1552
|
-
}
|
|
1553
|
-
const lineItem = this.createRootLineItem();
|
|
1554
|
-
const dynamicOptionProducts = this.rpcMessage.product.optionConfigurations[this.DYNAMIC_OPTION_PRODUCTS_KEY];
|
|
1555
|
-
if (dynamicOptionProducts) {
|
|
1556
|
-
const options = this.toParentChildMap(dynamicOptionProducts);
|
|
1557
|
-
let items = [lineItem];
|
|
1558
|
-
for (let i = 0; i < items.length; i++) {
|
|
1559
|
-
const item = items[i];
|
|
1560
|
-
const children = item && options.get(item.id);
|
|
1561
|
-
if (children) {
|
|
1562
|
-
item.lineItems = children;
|
|
1563
|
-
items = items.concat(children);
|
|
1564
|
-
}
|
|
1565
|
-
}
|
|
1566
|
-
}
|
|
1567
|
-
return lineItem;
|
|
1568
|
-
}
|
|
1569
|
-
createRootLineItem() {
|
|
1570
|
-
const product = this.rpcMessage.product;
|
|
1571
|
-
const runtimeContext = this.runtimeService.runtimeContext;
|
|
1572
|
-
const veloceInstanceId = product.configurationAttributes['VeloceInstanceId__c'];
|
|
1573
|
-
const quoteId = this.quoteDraftService.quoteDraft?.currentState[0]?.id;
|
|
1574
|
-
return {
|
|
1575
|
-
id: quoteId || veloceInstanceId || UUID.UUID(),
|
|
1576
|
-
type: runtimeContext.productType ?? '',
|
|
1577
|
-
name: runtimeContext.properties?.['displayName'] || runtimeContext.productName,
|
|
1578
|
-
productName: runtimeContext.productName,
|
|
1579
|
-
productId: runtimeContext.productId,
|
|
1580
|
-
cfgStatus: 'Default',
|
|
1581
|
-
actionCode: 'ADD',
|
|
1582
|
-
qty: 1,
|
|
1583
|
-
};
|
|
1584
|
-
}
|
|
1585
|
-
toParentChildMap(remoteOptionProducts) {
|
|
1586
|
-
const result = new Map();
|
|
1587
|
-
for (const option of remoteOptionProducts) {
|
|
1588
|
-
const configurationData = option?.readOnly?.line;
|
|
1589
|
-
const id = configurationData?.VeloceInstanceId__c;
|
|
1590
|
-
const parentId = configurationData?.VeloceParentInstanceId__c;
|
|
1591
|
-
if (!option.selected || !configurationData || !id || !parentId) {
|
|
1592
|
-
continue;
|
|
1593
|
-
}
|
|
1594
|
-
const productId = option.productId;
|
|
1595
|
-
const lineItem = {
|
|
1596
|
-
id,
|
|
1597
|
-
productId,
|
|
1598
|
-
parentId,
|
|
1599
|
-
type: configurationData.ModelType__c,
|
|
1600
|
-
port: configurationData.ModelPort__c,
|
|
1601
|
-
cfgStatus: configurationData.ConfigurationStatus__c,
|
|
1602
|
-
actionCode: configurationData.ActionCode__c,
|
|
1603
|
-
qty: option.Quantity,
|
|
1604
|
-
};
|
|
1605
|
-
let siblings = result.get(productId);
|
|
1606
|
-
if (!siblings) {
|
|
1607
|
-
result.set(parentId, (siblings = []));
|
|
1608
|
-
}
|
|
1609
|
-
siblings.push(lineItem);
|
|
1610
|
-
}
|
|
1611
|
-
return result;
|
|
1612
|
-
}
|
|
1613
|
-
saveRpcMessage() {
|
|
1614
|
-
const quote = this.quoteDraftService.quoteDraft;
|
|
1615
|
-
const lineItem = this.configurationService.getSnapshot();
|
|
1616
|
-
if (!quote || !lineItem) {
|
|
1617
|
-
return;
|
|
1618
|
-
}
|
|
1619
|
-
this.rpcMessage.VeloceReferenceId = quote.quoteId;
|
|
1620
|
-
this.rpcMessage.product.configurationData.VeloceInstanceId__c = lineItem.id;
|
|
1621
|
-
const childItems = this.flattenChildLineItems(lineItem);
|
|
1622
|
-
const savingMode = window.SavingMode;
|
|
1623
|
-
this.updateContentData(this.rpcMessage.product, lineItem);
|
|
1624
|
-
this.rpcMessage.quote = this.mapAttributesTo('Quote', lineItem);
|
|
1625
|
-
if (savingMode === 'ALL') {
|
|
1626
|
-
const optionConfigurations = this.getOptionConfigurations(this.rpcMessage.product);
|
|
1627
|
-
const rootProductOptions = this.rpcMessage.options.filter(po => po.configuredProductId === lineItem.productId);
|
|
1628
|
-
childItems.forEach(lineItem => {
|
|
1629
|
-
const rootOption = rootProductOptions.find(po => po.optionalProductId === lineItem.productId);
|
|
1630
|
-
if (rootOption) {
|
|
1631
|
-
const featureOptions = optionConfigurations[rootOption.featureName] ?? (optionConfigurations[rootOption.featureName] = []);
|
|
1632
|
-
const originOption = !rootOption.hasChildren
|
|
1633
|
-
? optionConfigurations[rootOption.featureName]?.find(({ optionId }) => optionId === rootOption.optionId)
|
|
1634
|
-
: undefined;
|
|
1635
|
-
const option = originOption ?? {};
|
|
1636
|
-
option.optionId = option.optionId ?? rootOption.optionId;
|
|
1637
|
-
this.updateContentData(option, lineItem);
|
|
1638
|
-
option.index = option.index ?? featureOptions.length;
|
|
1639
|
-
option.selected = true;
|
|
1640
|
-
if (!originOption) {
|
|
1641
|
-
featureOptions.push(option);
|
|
1642
|
-
}
|
|
1643
|
-
if (lineItem.parentLineItem) {
|
|
1644
|
-
const nestedProductOption = this.rpcMessage.options.find(po => po.configuredProductId === lineItem.parentLineItem?.productId &&
|
|
1645
|
-
po.optionalProductId === lineItem.productId);
|
|
1646
|
-
if (nestedProductOption) {
|
|
1647
|
-
option.configurationData = {
|
|
1648
|
-
...option.configurationData,
|
|
1649
|
-
VeloceParentInstanceId__c: lineItem.parentLineItem.id,
|
|
1650
|
-
VeloceNestedOptionId__c: nestedProductOption.optionId,
|
|
1651
|
-
VeloceNestedFeatureId__c: nestedProductOption.featureId,
|
|
1652
|
-
};
|
|
1653
|
-
}
|
|
1654
|
-
}
|
|
1655
|
-
}
|
|
1656
|
-
else {
|
|
1657
|
-
this.rpcMessage.dynamicFeatures.forEach(feature => {
|
|
1658
|
-
const featureOptions = optionConfigurations[feature.name] ?? (optionConfigurations[feature.name] = []);
|
|
1659
|
-
const originOption = featureOptions.find(({ productId }) => productId === lineItem.productId);
|
|
1660
|
-
const option = originOption ?? {};
|
|
1661
|
-
this.updateContentData(option, lineItem);
|
|
1662
|
-
option.index = option.index ?? featureOptions.length;
|
|
1663
|
-
option.selected = true;
|
|
1664
|
-
if (!originOption) {
|
|
1665
|
-
featureOptions.push(option);
|
|
1666
|
-
}
|
|
1667
|
-
});
|
|
1668
|
-
}
|
|
1669
|
-
});
|
|
1670
|
-
this.rpcMessage.product = { ...this.rpcMessage.product, optionConfigurations };
|
|
1671
|
-
}
|
|
1672
|
-
window.RPC_BROADCAST?.apply(null, [this.rpcMessage]);
|
|
1673
|
-
}
|
|
1674
|
-
updateHasChildrenFlag(bundleProductId) {
|
|
1675
|
-
const bundleOptionsByOptionId = {};
|
|
1676
|
-
const notBundleOptions = [];
|
|
1677
|
-
for (const productOption of this.rpcMessage.options) {
|
|
1678
|
-
if (productOption.configuredProductId === bundleProductId) {
|
|
1679
|
-
bundleOptionsByOptionId[productOption.optionalProductId] = productOption;
|
|
1680
|
-
}
|
|
1681
|
-
else {
|
|
1682
|
-
notBundleOptions.push(productOption);
|
|
1683
|
-
}
|
|
1684
|
-
}
|
|
1685
|
-
for (const option of notBundleOptions) {
|
|
1686
|
-
const bundleOption = bundleOptionsByOptionId[option.configuredProductId];
|
|
1687
|
-
if (bundleOption) {
|
|
1688
|
-
bundleOption.hasChildren = true;
|
|
1689
|
-
}
|
|
1690
|
-
}
|
|
1691
|
-
}
|
|
1692
|
-
flattenChildLineItems(lineItem) {
|
|
1693
|
-
let items = lineItem.lineItems ?? [];
|
|
1694
|
-
for (let i = 0; i < items.length; i++) {
|
|
1695
|
-
const item = items[i];
|
|
1696
|
-
if (item?.lineItems) {
|
|
1697
|
-
items = items.concat(item.lineItems.map(li => ({ ...li, parentLineItem: item })));
|
|
1698
|
-
}
|
|
1699
|
-
}
|
|
1700
|
-
return items;
|
|
1701
|
-
}
|
|
1702
|
-
updateContentData(entity, lineItem) {
|
|
1703
|
-
if (lineItem.productId) {
|
|
1704
|
-
entity.productId = lineItem.productId;
|
|
1705
|
-
}
|
|
1706
|
-
const quantityAttribute = lineItem.properties['quantityAttribute'];
|
|
1707
|
-
entity.Quantity = quantityAttribute
|
|
1708
|
-
? lineItem.attributes.find(attribute => attribute.name === quantityAttribute)?.value ?? 1
|
|
1709
|
-
: lineItem.qty;
|
|
1710
|
-
const totalPrice = this.computeNetPrice(lineItem);
|
|
1711
|
-
const targetTotalPriceField = lineItem.properties['TargetTotalPriceField'] || 'TotalPrice__c';
|
|
1712
|
-
entity.configurationData[targetTotalPriceField] = entity.configurationData[targetTotalPriceField]
|
|
1713
|
-
? entity.configurationData[targetTotalPriceField] + totalPrice
|
|
1714
|
-
: totalPrice;
|
|
1715
|
-
const targetPriceField = lineItem.properties['TargetPriceField'] || 'SBQQ__ListPrice__c';
|
|
1716
|
-
const price = entity.Quantity != null ? entity.configurationData[targetTotalPriceField] / entity.Quantity || 0 : 0;
|
|
1717
|
-
const targetPriceValue = Number(entity.configurationData[targetPriceField]) || 0;
|
|
1718
|
-
entity.configurationData[targetPriceField] = targetPriceValue
|
|
1719
|
-
? (targetPriceValue + price).toFixed(2)
|
|
1720
|
-
: price.toFixed(2);
|
|
1721
|
-
entity.configurationAttributes = this.mapAttributesTo('Attribute', lineItem);
|
|
1722
|
-
entity.configurationData = {
|
|
1723
|
-
...entity.configurationData,
|
|
1724
|
-
...this.mapAttributesTo('Field', lineItem),
|
|
1725
|
-
...this.mapAttributesTo('', lineItem),
|
|
1726
|
-
VeloceInstanceId__c: lineItem.id,
|
|
1727
|
-
};
|
|
1728
|
-
}
|
|
1729
|
-
computeNetPrice(lineItem) {
|
|
1730
|
-
if (lineItem.properties['GroupCharges']) {
|
|
1731
|
-
return this.sumNetPrice(lineItem.chargeGroupItems, this.getChargeNameSet(lineItem.properties['GroupCharges']));
|
|
1732
|
-
}
|
|
1733
|
-
return this.sumNetPrice(lineItem.chargeItems, this.getChargeNameSet(lineItem.properties['Charges']));
|
|
1734
|
-
}
|
|
1735
|
-
getChargeNameSet(property) {
|
|
1736
|
-
if (property && property.length > 0) {
|
|
1737
|
-
return new Set(property.split(','));
|
|
1738
|
-
}
|
|
1739
|
-
return new Set();
|
|
1740
|
-
}
|
|
1741
|
-
sumNetPrice(chargeItems, charges) {
|
|
1742
|
-
let netPrice = 0;
|
|
1743
|
-
for (const chargeItem of chargeItems) {
|
|
1744
|
-
if (!charges || charges.has(chargeItem.chargeType)) {
|
|
1745
|
-
netPrice += chargeItem.netPrice ?? 0;
|
|
1746
|
-
}
|
|
1747
|
-
}
|
|
1748
|
-
return netPrice;
|
|
1749
|
-
}
|
|
1750
|
-
mapAttributesTo(target, lineItem) {
|
|
1751
|
-
const result = {};
|
|
1752
|
-
const component = this.runtimeService.runtimeModel?.components.get(lineItem.type);
|
|
1753
|
-
if (!component) {
|
|
1754
|
-
return result;
|
|
1755
|
-
}
|
|
1756
|
-
const propertyName = 'mapTo' + target;
|
|
1757
|
-
component.attributes
|
|
1758
|
-
.filter(a => a.properties && a.properties[propertyName])
|
|
1759
|
-
.forEach(mapping => {
|
|
1760
|
-
const attribute = lineItem.attributes.find(a => a.name === mapping.name);
|
|
1761
|
-
if (attribute) {
|
|
1762
|
-
new Set(mapping.properties[propertyName]?.split(',')).forEach(k => (result[k] = attribute.value));
|
|
1763
|
-
}
|
|
1764
|
-
});
|
|
1765
|
-
return result;
|
|
1766
|
-
}
|
|
1767
|
-
getOptionConfigurations(product) {
|
|
1768
|
-
const optionConfigurations = {};
|
|
1769
|
-
const requestOptionConfigurations = product.optionConfigurations ?? {};
|
|
1770
|
-
Object.keys(requestOptionConfigurations).forEach(k => {
|
|
1771
|
-
optionConfigurations[k] = (requestOptionConfigurations[k] ?? []).map(opt => {
|
|
1772
|
-
return { ...opt, selected: false };
|
|
1773
|
-
});
|
|
1774
|
-
});
|
|
1775
|
-
return optionConfigurations;
|
|
1776
|
-
}
|
|
1777
|
-
}
|
|
1778
|
-
RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i2.ContextService }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: i2$2.MessageService }, { token: i2.IntegrationState }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
1779
|
-
RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1780
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, decorators: [{
|
|
1781
|
-
type: Component,
|
|
1782
|
-
args: [{ selector: 'vl-flow-remote', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
|
|
1783
|
-
}], ctorParameters: function () { return [{ type: i2.ContextService }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: i2$2.MessageService }, { type: i2.IntegrationState }, { type: i4.Location }]; } });
|
|
1784
|
-
|
|
1785
|
-
class RemoteModule {
|
|
1786
|
-
}
|
|
1787
|
-
RemoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1788
|
-
RemoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, declarations: [RemoteComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [RemoteComponent] });
|
|
1789
|
-
RemoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, imports: [CommonModule, PreviewModule, LoaderModule] });
|
|
1790
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, decorators: [{
|
|
1791
|
-
type: NgModule,
|
|
1792
|
-
args: [{
|
|
1793
|
-
declarations: [RemoteComponent],
|
|
1794
|
-
imports: [CommonModule, PreviewModule, LoaderModule],
|
|
1795
|
-
exports: [RemoteComponent],
|
|
1796
|
-
}]
|
|
1797
|
-
}] });
|
|
1798
|
-
|
|
1799
1278
|
class ShoppingCartComponent {
|
|
1800
1279
|
constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
|
|
1801
1280
|
this.templatesApi = templatesApi;
|
|
@@ -1906,30 +1385,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1906
1385
|
}] });
|
|
1907
1386
|
|
|
1908
1387
|
class FlowResolver {
|
|
1909
|
-
constructor(router, routerService,
|
|
1388
|
+
constructor(router, routerService, flowInfoService) {
|
|
1910
1389
|
this.router = router;
|
|
1911
1390
|
this.routerService = routerService;
|
|
1912
|
-
this.
|
|
1913
|
-
this.flowInfo = flowInfo;
|
|
1391
|
+
this.flowInfoService = flowInfoService;
|
|
1914
1392
|
}
|
|
1915
1393
|
resolve(route) {
|
|
1916
|
-
|
|
1917
|
-
const flow = this.flowInfo.flow;
|
|
1918
|
-
if (!flow) {
|
|
1394
|
+
if (!this.flowInfoService.isFlowInitialized) {
|
|
1919
1395
|
return of(false);
|
|
1920
1396
|
}
|
|
1921
|
-
const {
|
|
1397
|
+
const { queryParams } = route;
|
|
1398
|
+
const { properties } = this.flowInfoService.flow;
|
|
1922
1399
|
const { queryParams: flowQueryParams, entryPath } = properties;
|
|
1923
1400
|
const mergedQueryParams = {
|
|
1924
1401
|
...queryParams,
|
|
1925
1402
|
...flowQueryParams,
|
|
1926
1403
|
};
|
|
1927
|
-
const contextProperties = Object.entries({
|
|
1928
|
-
...mergedQueryParams,
|
|
1929
|
-
...getDefaultProperties({ flowParams: properties }),
|
|
1930
|
-
}).reduce((trunk, [key, value]) => ({ ...trunk, [key]: String(value) }), {});
|
|
1931
|
-
this.contextService.update({ properties: contextProperties });
|
|
1932
|
-
this.flowInfo.flow = flow;
|
|
1933
1404
|
const parentUrl = this.routerService.getFlowRootPath(route);
|
|
1934
1405
|
const entryUrl = String(entryPath ?? '')
|
|
1935
1406
|
.split('/')
|
|
@@ -1938,29 +1409,29 @@ class FlowResolver {
|
|
|
1938
1409
|
queryParams: mergedQueryParams,
|
|
1939
1410
|
replaceUrl: true,
|
|
1940
1411
|
})).pipe(catchError$1(e => {
|
|
1412
|
+
console.error(e);
|
|
1941
1413
|
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
|
1942
1414
|
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
|
1943
1415
|
return this.routerService.showErrorPage$(message, errorDetails);
|
|
1944
1416
|
}));
|
|
1945
1417
|
}
|
|
1946
1418
|
}
|
|
1947
|
-
FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.
|
|
1419
|
+
FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1948
1420
|
FlowResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver });
|
|
1949
1421
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, decorators: [{
|
|
1950
1422
|
type: Injectable
|
|
1951
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.
|
|
1423
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.FlowInfoService }]; } });
|
|
1952
1424
|
|
|
1953
1425
|
class QuoteResolver {
|
|
1954
|
-
constructor(router, quoteDraftService, routerService,
|
|
1426
|
+
constructor(router, quoteDraftService, routerService, flowInfoService, flowStateService) {
|
|
1955
1427
|
this.router = router;
|
|
1956
1428
|
this.quoteDraftService = quoteDraftService;
|
|
1957
1429
|
this.routerService = routerService;
|
|
1958
|
-
this.
|
|
1959
|
-
this.flowInfo = flowInfo;
|
|
1430
|
+
this.flowInfoService = flowInfoService;
|
|
1960
1431
|
this.flowStateService = flowStateService;
|
|
1961
1432
|
}
|
|
1962
1433
|
resolve(route) {
|
|
1963
|
-
const flow = this.
|
|
1434
|
+
const flow = this.flowInfoService.flow;
|
|
1964
1435
|
if (!flow) {
|
|
1965
1436
|
return of(false);
|
|
1966
1437
|
}
|
|
@@ -1968,13 +1439,14 @@ class QuoteResolver {
|
|
|
1968
1439
|
return of(true);
|
|
1969
1440
|
}
|
|
1970
1441
|
return this.flowStateService.init$().pipe(switchMap(() => this.checkDynamicNavigation$(route)), catchError(e => {
|
|
1442
|
+
console.error(e);
|
|
1971
1443
|
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
|
1972
1444
|
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
|
1973
1445
|
return this.routerService.showErrorPage$(message, errorDetails);
|
|
1974
1446
|
}));
|
|
1975
1447
|
}
|
|
1976
1448
|
checkDynamicNavigation$(route) {
|
|
1977
|
-
const flow = this.
|
|
1449
|
+
const flow = this.flowInfoService.flow;
|
|
1978
1450
|
if (!flow) {
|
|
1979
1451
|
return of(true);
|
|
1980
1452
|
}
|
|
@@ -1993,7 +1465,7 @@ class QuoteResolver {
|
|
|
1993
1465
|
}));
|
|
1994
1466
|
}
|
|
1995
1467
|
getNavigateTo() {
|
|
1996
|
-
const flow = this.
|
|
1468
|
+
const flow = this.flowInfoService.flow;
|
|
1997
1469
|
let navigateTo;
|
|
1998
1470
|
if (flow?.properties.stateful) {
|
|
1999
1471
|
return this.flowStateService.select$(UITemplateType.FLOW_ENGINE, 'NAVIGATE_TO').pipe(map(r => {
|
|
@@ -2004,7 +1476,7 @@ class QuoteResolver {
|
|
|
2004
1476
|
}));
|
|
2005
1477
|
}
|
|
2006
1478
|
else {
|
|
2007
|
-
const isAccountMode = this.
|
|
1479
|
+
const isAccountMode = this.flowInfoService.context.mode === ConfigurationContextMode.ACCOUNT;
|
|
2008
1480
|
if (isAccountMode || this.quoteDraftService.hasAssets) {
|
|
2009
1481
|
navigateTo = '/assets';
|
|
2010
1482
|
}
|
|
@@ -2015,11 +1487,11 @@ class QuoteResolver {
|
|
|
2015
1487
|
return of(navigateTo);
|
|
2016
1488
|
}
|
|
2017
1489
|
}
|
|
2018
|
-
QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, deps: [{ token: i1$2.Router }, { token: i2.QuoteDraftService }, { token: FlowRouterService }, { token: i2.
|
|
1490
|
+
QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, deps: [{ token: i1$2.Router }, { token: i2.QuoteDraftService }, { token: FlowRouterService }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2019
1491
|
QuoteResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver });
|
|
2020
1492
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, decorators: [{
|
|
2021
1493
|
type: Injectable
|
|
2022
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.QuoteDraftService }, { type: FlowRouterService }, { type: i2.
|
|
1494
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.QuoteDraftService }, { type: FlowRouterService }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }]; } });
|
|
2023
1495
|
|
|
2024
1496
|
const rootRoute = {
|
|
2025
1497
|
id: VELOCE_FLOW_ROOT_ROUTE,
|
|
@@ -2037,7 +1509,6 @@ const rootRoute = {
|
|
|
2037
1509
|
path: 'flows',
|
|
2038
1510
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
|
2039
1511
|
resolve: { flow: FlowResolver },
|
|
2040
|
-
canActivate: [ContextGuard],
|
|
2041
1512
|
children: [],
|
|
2042
1513
|
},
|
|
2043
1514
|
{
|
|
@@ -2045,7 +1516,6 @@ const rootRoute = {
|
|
|
2045
1516
|
component: ProductComponent,
|
|
2046
1517
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
|
2047
1518
|
resolve: { quote: QuoteResolver },
|
|
2048
|
-
canActivate: [ContextGuard],
|
|
2049
1519
|
canDeactivate: [ProductUnloadGuard],
|
|
2050
1520
|
data: { showHeader: true },
|
|
2051
1521
|
},
|
|
@@ -2054,7 +1524,6 @@ const rootRoute = {
|
|
|
2054
1524
|
component: ShoppingCartComponent,
|
|
2055
1525
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
|
2056
1526
|
resolve: { quote: QuoteResolver },
|
|
2057
|
-
canActivate: [ContextGuard],
|
|
2058
1527
|
data: { showHeader: true },
|
|
2059
1528
|
},
|
|
2060
1529
|
{
|
|
@@ -2062,7 +1531,6 @@ const rootRoute = {
|
|
|
2062
1531
|
component: CatalogComponent,
|
|
2063
1532
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
|
2064
1533
|
resolve: { quote: QuoteResolver },
|
|
2065
|
-
canActivate: [ContextGuard],
|
|
2066
1534
|
data: { showHeader: true },
|
|
2067
1535
|
},
|
|
2068
1536
|
{
|
|
@@ -2070,16 +1538,8 @@ const rootRoute = {
|
|
|
2070
1538
|
component: AssetsComponent,
|
|
2071
1539
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
|
2072
1540
|
resolve: { quote: QuoteResolver },
|
|
2073
|
-
canActivate: [ContextGuard],
|
|
2074
1541
|
data: { showHeader: true },
|
|
2075
1542
|
},
|
|
2076
|
-
{
|
|
2077
|
-
path: 'remote',
|
|
2078
|
-
component: RemoteComponent,
|
|
2079
|
-
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
|
2080
|
-
resolve: { quote: QuoteResolver },
|
|
2081
|
-
canActivate: [ContextGuard],
|
|
2082
|
-
},
|
|
2083
1543
|
{
|
|
2084
1544
|
path: 'debug',
|
|
2085
1545
|
loadChildren: () => DebugModule,
|
|
@@ -2095,30 +1555,14 @@ const rootRoute = {
|
|
|
2095
1555
|
class FlowRoutingModule {
|
|
2096
1556
|
}
|
|
2097
1557
|
FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2098
|
-
FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, imports: [i1$2.RouterModule, ProductModule,
|
|
2099
|
-
|
|
2100
|
-
CatalogModule,
|
|
2101
|
-
AssetsModule,
|
|
2102
|
-
RemoteModule], exports: [RouterModule] });
|
|
2103
|
-
FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ContextGuard, ProductUnloadGuard, FlowResolver, QuoteResolver], imports: [RouterModule.forChild([rootRoute]),
|
|
2104
|
-
ProductModule,
|
|
2105
|
-
ShoppingCartModule,
|
|
2106
|
-
CatalogModule,
|
|
2107
|
-
AssetsModule,
|
|
2108
|
-
RemoteModule, RouterModule] });
|
|
1558
|
+
FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, imports: [i1$2.RouterModule, ProductModule, ShoppingCartModule, CatalogModule, AssetsModule], exports: [RouterModule] });
|
|
1559
|
+
FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, QuoteResolver], imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule, RouterModule] });
|
|
2109
1560
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, decorators: [{
|
|
2110
1561
|
type: NgModule,
|
|
2111
1562
|
args: [{
|
|
2112
|
-
imports: [
|
|
2113
|
-
RouterModule.forChild([rootRoute]),
|
|
2114
|
-
ProductModule,
|
|
2115
|
-
ShoppingCartModule,
|
|
2116
|
-
CatalogModule,
|
|
2117
|
-
AssetsModule,
|
|
2118
|
-
RemoteModule,
|
|
2119
|
-
],
|
|
1563
|
+
imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule],
|
|
2120
1564
|
exports: [RouterModule],
|
|
2121
|
-
providers: [FlowRouterService, RootGuard,
|
|
1565
|
+
providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, QuoteResolver],
|
|
2122
1566
|
}]
|
|
2123
1567
|
}] });
|
|
2124
1568
|
|
|
@@ -2166,9 +1610,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
2166
1610
|
}]
|
|
2167
1611
|
}] });
|
|
2168
1612
|
|
|
1613
|
+
const getFlowObjectIdPropertyName = (id) => {
|
|
1614
|
+
const objectName = SalesforceIdUtils.getSfObjectNameById(id);
|
|
1615
|
+
switch (objectName) {
|
|
1616
|
+
case 'Account':
|
|
1617
|
+
return 'accountId';
|
|
1618
|
+
case 'Order':
|
|
1619
|
+
return 'orderId';
|
|
1620
|
+
case 'Quote':
|
|
1621
|
+
default:
|
|
1622
|
+
return 'quoteId';
|
|
1623
|
+
}
|
|
1624
|
+
};
|
|
1625
|
+
|
|
2169
1626
|
/**
|
|
2170
1627
|
* Generated bundle index. Do not edit.
|
|
2171
1628
|
*/
|
|
2172
1629
|
|
|
2173
|
-
export {
|
|
1630
|
+
export { FlowDialogService, FlowModule, FlowRouterService, FlowService, VELOCE_FLOW_ROOT_ROUTE, getFlowObjectIdPropertyName };
|
|
2174
1631
|
//# sourceMappingURL=veloceapps-sdk.mjs.map
|