@veloceapps/sdk 11.0.0-11 → 11.0.0-111
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/cms.actions.d.ts +94 -29
- package/cms/components/element-renderer/element-renderer.component.d.ts +3 -10
- package/cms/components/preview/preview.component.d.ts +5 -6
- package/cms/components/preview/preview.types.d.ts +0 -4
- package/cms/services/element-context.service.d.ts +0 -1
- package/cms/types/common.types.d.ts +2 -0
- package/cms/types/index.d.ts +0 -1
- package/cms/utils/path.utils.d.ts +1 -2
- package/cms/vendor-map.d.ts +18 -40
- package/core/index.d.ts +1 -1
- package/core/modules/configuration/index.d.ts +4 -4
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +8 -19
- package/core/modules/configuration/services/configuration-state.service.d.ts +8 -8
- package/core/modules/configuration/services/configuration.service.d.ts +24 -52
- package/core/modules/configuration/services/guided-selling.service.d.ts +15 -0
- package/core/modules/configuration/services/test-mode-configuration.service.d.ts +26 -0
- package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -5
- package/core/modules/configuration/types/configuration.types.d.ts +4 -2
- package/core/modules/configuration/types/index.d.ts +2 -0
- package/core/modules/flow-configuration/index.d.ts +0 -3
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +11 -38
- package/core/operators/filter-successful-execute.operator.d.ts +3 -0
- package/core/operators/index.d.ts +1 -0
- package/core/services/catalog-products.service.d.ts +11 -0
- package/core/services/flow-info.service.d.ts +27 -12
- package/core/services/flow-state-configuration.service.d.ts +9 -8
- package/core/services/flow-state.service.d.ts +12 -24
- package/core/services/index.d.ts +3 -3
- package/core/services/integration.state.d.ts +1 -1
- package/core/services/product-images.service.d.ts +3 -3
- package/core/services/runtime-settings.service.d.ts +1 -1
- package/core/services/sales-transaction.service.d.ts +27 -0
- package/core/types/flow-customization.types.d.ts +2 -2
- package/core/types/flow-state.types.d.ts +2 -2
- package/core/types/index.d.ts +0 -1
- package/core/utils/index.d.ts +2 -2
- package/core/utils/transaction-item.utils.d.ts +7 -0
- package/core/utils/transaction-item.worker.d.ts +8 -0
- package/esm2020/cms/cms.actions.mjs +93 -71
- package/esm2020/cms/cms.default.mjs +2 -3
- package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +7 -64
- package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
- package/esm2020/cms/components/preview/preview.component.mjs +19 -28
- package/esm2020/cms/components/preview/preview.types.mjs +1 -1
- package/esm2020/cms/services/element-context.service.mjs +1 -1
- package/esm2020/cms/types/common.types.mjs +1 -1
- package/esm2020/cms/types/index.mjs +1 -2
- package/esm2020/cms/utils/element.utils.mjs +3 -3
- package/esm2020/cms/utils/elements-resolver.mjs +16 -5
- package/esm2020/cms/utils/path.utils.mjs +1 -10
- package/esm2020/cms/vendor-map.mjs +18 -18
- package/esm2020/core/core.module.mjs +7 -7
- package/esm2020/core/index.mjs +2 -2
- package/esm2020/core/modules/configuration/configuration.module.mjs +17 -4
- package/esm2020/core/modules/configuration/index.mjs +5 -5
- package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +16 -101
- package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +69 -77
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +125 -247
- package/esm2020/core/modules/configuration/services/guided-selling.service.mjs +62 -0
- package/esm2020/core/modules/configuration/services/test-mode-configuration.service.mjs +97 -0
- package/esm2020/core/modules/configuration/types/configuration-runtime.types.mjs +1 -1
- package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
- package/esm2020/core/modules/configuration/types/index.mjs +3 -0
- package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +3 -4
- package/esm2020/core/modules/flow-configuration/index.mjs +1 -4
- package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +44 -128
- package/esm2020/core/operators/filter-successful-execute.operator.mjs +5 -0
- package/esm2020/core/operators/index.mjs +2 -0
- package/esm2020/core/services/catalog-products.service.mjs +25 -0
- package/esm2020/core/services/flow-info.service.mjs +82 -31
- package/esm2020/core/services/flow-state-configuration.service.mjs +55 -25
- package/esm2020/core/services/flow-state.service.mjs +58 -180
- package/esm2020/core/services/index.mjs +4 -4
- package/esm2020/core/services/integration.state.mjs +2 -2
- package/esm2020/core/services/product-images.service.mjs +8 -8
- package/esm2020/core/services/runtime-settings.service.mjs +3 -3
- package/esm2020/core/services/sales-transaction.service.mjs +67 -0
- package/esm2020/core/types/flow-customization.types.mjs +1 -1
- package/esm2020/core/types/flow-state.types.mjs +1 -1
- package/esm2020/core/types/index.mjs +1 -2
- package/esm2020/core/utils/index.mjs +3 -3
- package/esm2020/core/utils/transaction-item.utils.mjs +60 -0
- package/esm2020/core/utils/transaction-item.worker.mjs +16 -0
- package/esm2020/src/components/flow-header/flow-header.component.mjs +8 -12
- package/esm2020/src/components/guided-selling/guided-selling.component.mjs +8 -12
- package/esm2020/src/flow-routing.module.mjs +12 -41
- package/esm2020/src/flow.component.mjs +5 -5
- package/esm2020/src/guards/flow.guard.mjs +13 -14
- package/esm2020/src/guards/product-unload.guard.mjs +7 -9
- package/esm2020/src/index.mjs +1 -3
- package/esm2020/src/pages/assets/assets.component.mjs +8 -9
- package/esm2020/src/pages/catalog/catalog.component.mjs +8 -9
- package/esm2020/src/pages/debug/debug.component.mjs +14 -23
- package/esm2020/src/pages/product/product.component.mjs +17 -91
- package/esm2020/src/pages/product/product.module.mjs +5 -5
- package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +5 -6
- package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +8 -9
- package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
- package/esm2020/src/resolvers/pcm-model.resolver.mjs +12 -0
- package/esm2020/src/resolvers/sales-transaction.resolver.mjs +64 -0
- package/esm2020/src/resolvers/ui-definition.resolver.mjs +44 -0
- package/esm2020/src/services/flow-dialog.service.mjs +10 -31
- package/esm2020/src/services/flow-router.service.mjs +16 -33
- package/esm2020/src/services/flow.service.mjs +15 -54
- package/esm2020/src/types/index.mjs +2 -3
- package/esm2020/src/types/route.types.mjs +1 -1
- package/fesm2015/veloceapps-sdk-cms.mjs +163 -309
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk-core.mjs +922 -1670
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +197 -824
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +159 -300
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +997 -1755
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +197 -818
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/flow-header/flow-header.component.d.ts +3 -3
- package/src/components/guided-selling/guided-selling.component.d.ts +3 -3
- 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 +5 -6
- package/src/index.d.ts +0 -2
- package/src/pages/assets/assets.component.d.ts +3 -3
- package/src/pages/catalog/catalog.component.d.ts +3 -3
- package/src/pages/debug/debug.component.d.ts +2 -5
- package/src/pages/product/product.component.d.ts +6 -14
- package/src/pages/product/product.module.d.ts +1 -1
- package/src/pages/record-not-found/record-not-found.component.d.ts +2 -3
- package/src/pages/shopping-cart/shopping-cart.component.d.ts +3 -3
- package/src/resolvers/flow.resolver.d.ts +5 -6
- package/src/resolvers/pcm-model.resolver.d.ts +3 -0
- package/src/resolvers/sales-transaction.resolver.d.ts +18 -0
- package/src/resolvers/ui-definition.resolver.d.ts +3 -0
- package/src/services/flow-dialog.service.d.ts +6 -8
- package/src/services/flow-router.service.d.ts +4 -6
- package/src/services/flow.service.d.ts +3 -7
- package/src/types/index.d.ts +1 -2
- package/src/types/route.types.d.ts +0 -5
- package/cms/plugins/configuration.plugin.d.ts +0 -23
- package/cms/types/configuration.types.d.ts +0 -21
- package/core/modules/configuration/helpers.d.ts +0 -6
- package/core/modules/configuration/services/runtime-context.service.d.ts +0 -12
- package/core/modules/flow-configuration/services/flow-update.service.d.ts +0 -13
- package/core/modules/flow-configuration/types/update.types.d.ts +0 -12
- package/core/services/context.service.d.ts +0 -23
- package/core/services/quote-draft.service.d.ts +0 -50
- package/core/types/runtime.types.d.ts +0 -30
- package/core/utils/line-item.utils.d.ts +0 -25
- package/core/utils/line-item.worker.d.ts +0 -9
- package/esm2020/cms/plugins/configuration.plugin.mjs +0 -109
- package/esm2020/cms/types/configuration.types.mjs +0 -2
- package/esm2020/core/modules/configuration/helpers.mjs +0 -73
- package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +0 -45
- package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +0 -138
- package/esm2020/core/modules/flow-configuration/types/update.types.mjs +0 -2
- package/esm2020/core/services/context.service.mjs +0 -91
- package/esm2020/core/services/quote-draft.service.mjs +0 -192
- package/esm2020/core/types/runtime.types.mjs +0 -16
- package/esm2020/core/utils/line-item.utils.mjs +0 -187
- package/esm2020/core/utils/line-item.worker.mjs +0 -19
- 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/esm2020/src/resolvers/quote.resolver.mjs +0 -82
- package/esm2020/src/types/context-route.types.mjs +0 -2
- package/esm2020/src/types/metrics.types.mjs +0 -2
- package/esm2020/src/utils/flow.utils.mjs +0 -25
- package/esm2020/src/utils/index.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
- package/src/resolvers/quote.resolver.d.ts +0 -19
- package/src/types/context-route.types.d.ts +0 -5
- package/src/types/metrics.types.d.ts +0 -5
- package/src/utils/flow.utils.d.ts +0 -8
- package/src/utils/index.d.ts +0 -1
@@ -2,31 +2,31 @@ 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$1 from '@veloceapps/api';
|
6
5
|
import { ApiModule } from '@veloceapps/api';
|
7
|
-
import * as i2
|
6
|
+
import * as i2 from '@veloceapps/components';
|
8
7
|
import { ToastType, LoaderModule, LetDirectiveModule } from '@veloceapps/components';
|
9
8
|
import * as i5 from '@veloceapps/sdk/cms';
|
10
9
|
import { btoaSafe, PreviewModule, FlowAction, LauncherModule } from '@veloceapps/sdk/cms';
|
11
|
-
import * as
|
12
|
-
import { FLOW_CUSTOMIZATION,
|
10
|
+
import * as i3$1 from '@veloceapps/sdk/core';
|
11
|
+
import { FLOW_CUSTOMIZATION, RuntimeSettingsService, FlowStateService, FlowInfoService, SalesTransactionService, ConfigurationService, IntegrationState, ConfigurationRuntimeService, SdkCoreModule } from '@veloceapps/sdk/core';
|
13
12
|
import * as i3 from 'primeng/button';
|
14
13
|
import { ButtonModule } from 'primeng/button';
|
15
14
|
import * as i1 from 'primeng/dynamicdialog';
|
16
|
-
import
|
15
|
+
import * as i1$1 from '@veloceapps/api/v2';
|
16
|
+
import { UIDefinitionsAdminApiService } from '@veloceapps/api/v2';
|
17
|
+
import { BehaviorSubject, Subject, filter, first, tap, takeUntil, catchError, of, map, switchMap, shareReplay, startWith, distinctUntilChanged, from, take, combineLatest } 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,
|
21
|
+
import { mapShoppingCartSettings, getMaxRenewalTermsValue, SalesforceIdUtils, UITemplateType, isVeloceError, extractErrorDetails } from '@veloceapps/core';
|
21
22
|
import { HttpErrorResponse, HttpParams } from '@angular/common/http';
|
22
|
-
import * as
|
23
|
+
import * as i4$1 from '@angular/forms';
|
23
24
|
import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
24
25
|
import { DropdownModule } from 'primeng/dropdown';
|
25
|
-
import * as
|
26
|
+
import * as i7 from 'primeng/inputtext';
|
26
27
|
import { InputTextModule } from 'primeng/inputtext';
|
27
|
-
import * as
|
28
|
+
import * as i5$1 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';
|
@@ -76,8 +76,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
76
76
|
}] });
|
77
77
|
|
78
78
|
class FlowHeaderComponent {
|
79
|
-
constructor(
|
80
|
-
this.
|
79
|
+
constructor(templatesAdminApiService, flowStateService, flowInfo, toastService, customizationService) {
|
80
|
+
this.templatesAdminApiService = templatesAdminApiService;
|
81
81
|
this.flowStateService = flowStateService;
|
82
82
|
this.flowInfo = flowInfo;
|
83
83
|
this.toastService = toastService;
|
@@ -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) {
|
@@ -134,7 +131,7 @@ class FlowHeaderComponent {
|
|
134
131
|
if (!template) {
|
135
132
|
return of(undefined);
|
136
133
|
}
|
137
|
-
return this.
|
134
|
+
return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
|
138
135
|
}
|
139
136
|
generateUIDefinition$() {
|
140
137
|
return of(undefined).pipe(tap(() => {
|
@@ -148,7 +145,6 @@ class FlowHeaderComponent {
|
|
148
145
|
const uiDef = {
|
149
146
|
name: '',
|
150
147
|
createdTimestamp: 0,
|
151
|
-
primary: true,
|
152
148
|
type: 'DEFAULT',
|
153
149
|
version: 2,
|
154
150
|
children: metaList.map(meta => ({
|
@@ -162,12 +158,12 @@ class FlowHeaderComponent {
|
|
162
158
|
}));
|
163
159
|
}
|
164
160
|
}
|
165
|
-
FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1$1.
|
161
|
+
FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
166
162
|
FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowHeaderComponent, selector: "vl-flow-new-header", ngImport: i0, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"], 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: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
167
163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, decorators: [{
|
168
164
|
type: Component,
|
169
165
|
args: [{ selector: 'vl-flow-new-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"] }]
|
170
|
-
}], ctorParameters: function () { return [{ type: i1$1.
|
166
|
+
}], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }, { type: i2.ToastService }, { type: undefined, decorators: [{
|
171
167
|
type: Optional
|
172
168
|
}, {
|
173
169
|
type: Inject,
|
@@ -189,8 +185,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
189
185
|
}] });
|
190
186
|
|
191
187
|
class GuidedSellingComponent {
|
192
|
-
constructor(
|
193
|
-
this.
|
188
|
+
constructor(templatesAdminApiService, flowStateService, flowInfo, toastService, customizationService) {
|
189
|
+
this.templatesAdminApiService = templatesAdminApiService;
|
194
190
|
this.flowStateService = flowStateService;
|
195
191
|
this.flowInfo = flowInfo;
|
196
192
|
this.toastService = toastService;
|
@@ -210,9 +206,6 @@ class GuidedSellingComponent {
|
|
210
206
|
}
|
211
207
|
initialize() {
|
212
208
|
this.templateApiName = this.flowInfo.flow?.properties.templates?.guidedSelling ?? '';
|
213
|
-
if (this.flowInfo.isLegacy && !this.templateApiName) {
|
214
|
-
return;
|
215
|
-
}
|
216
209
|
this.generateUIDefinition$()
|
217
210
|
.pipe(tap(uiDef => {
|
218
211
|
if (!uiDef) {
|
@@ -247,7 +240,7 @@ class GuidedSellingComponent {
|
|
247
240
|
if (!template) {
|
248
241
|
return of(undefined);
|
249
242
|
}
|
250
|
-
return this.
|
243
|
+
return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
|
251
244
|
}
|
252
245
|
generateUIDefinition$() {
|
253
246
|
return of(undefined).pipe(tap(() => {
|
@@ -261,7 +254,6 @@ class GuidedSellingComponent {
|
|
261
254
|
const uiDef = {
|
262
255
|
name: '',
|
263
256
|
createdTimestamp: 0,
|
264
|
-
primary: true,
|
265
257
|
type: 'DEFAULT',
|
266
258
|
version: 2,
|
267
259
|
children: metaList.map(meta => ({
|
@@ -275,12 +267,12 @@ class GuidedSellingComponent {
|
|
275
267
|
}));
|
276
268
|
}
|
277
269
|
}
|
278
|
-
GuidedSellingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, deps: [{ token: i1$1.
|
270
|
+
GuidedSellingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
279
271
|
GuidedSellingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: GuidedSellingComponent, selector: "vl-flow-guided-selling", ngImport: i0, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"], 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: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
280
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, decorators: [{
|
281
273
|
type: Component,
|
282
274
|
args: [{ selector: 'vl-flow-guided-selling', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"] }]
|
283
|
-
}], ctorParameters: function () { return [{ type: i1$1.
|
275
|
+
}], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }, { type: i2.ToastService }, { type: undefined, decorators: [{
|
284
276
|
type: Optional
|
285
277
|
}, {
|
286
278
|
type: Inject,
|
@@ -334,10 +326,10 @@ const configurePrimengShadowDOM = () => {
|
|
334
326
|
};
|
335
327
|
|
336
328
|
class FlowDialogService {
|
337
|
-
constructor(dialogService,
|
329
|
+
constructor(dialogService, runtimeSettings, flowInfoService) {
|
338
330
|
this.dialogService = dialogService;
|
339
|
-
this.contextService = contextService;
|
340
331
|
this.runtimeSettings = runtimeSettings;
|
332
|
+
this.flowInfoService = flowInfoService;
|
341
333
|
}
|
342
334
|
show(config) {
|
343
335
|
return this.dialogService.open(FlowDialogComponent, {
|
@@ -358,8 +350,8 @@ class FlowDialogService {
|
|
358
350
|
});
|
359
351
|
}
|
360
352
|
showReadonlyModeDialog() {
|
361
|
-
const
|
362
|
-
const objectName =
|
353
|
+
const mode = this.flowInfoService.context.mode;
|
354
|
+
const objectName = mode ? mode[0]?.toUpperCase() + mode.substring(1).toLowerCase() : 'Object';
|
363
355
|
return this.show({
|
364
356
|
title: 'Error',
|
365
357
|
description: `${objectName} Cannot be Saved`,
|
@@ -373,10 +365,10 @@ class FlowDialogService {
|
|
373
365
|
primaryButton: 'Ok',
|
374
366
|
});
|
375
367
|
}
|
376
|
-
|
368
|
+
showQuoteInConfiguratorDialog() {
|
377
369
|
return this.show({
|
378
370
|
title: 'Quote Cannot be Saved',
|
379
|
-
description: 'It
|
371
|
+
description: 'It not possible to save quotes from the Configurator. To proceed, finish configuring product.',
|
380
372
|
primaryButton: 'Ok',
|
381
373
|
});
|
382
374
|
}
|
@@ -396,27 +388,6 @@ class FlowDialogService {
|
|
396
388
|
oppositeButtonActions: true,
|
397
389
|
});
|
398
390
|
}
|
399
|
-
showReadonlyQuoteSubmitFailureDialog() {
|
400
|
-
return this.show({
|
401
|
-
title: 'Cannot Submit for Approval',
|
402
|
-
description: 'It is only possible to submit for approval quotes with the “Draft“ status. Please create a new quote to proceed.',
|
403
|
-
primaryButton: 'Ok',
|
404
|
-
});
|
405
|
-
}
|
406
|
-
showOutsideShoppingCartQuoteSubmitFailureDialog() {
|
407
|
-
return this.show({
|
408
|
-
title: 'Cannot Submit for Approval',
|
409
|
-
description: 'It is only possible to submit quotes for approval from the Shopping Cart. To proceed, go to the Shopping Cart.',
|
410
|
-
primaryButton: 'Ok',
|
411
|
-
});
|
412
|
-
}
|
413
|
-
showAccountSubmitFailureDialog() {
|
414
|
-
return this.show({
|
415
|
-
title: 'Save Changes',
|
416
|
-
description: 'To submit for approval, save the quote first, and then submit it for approval from the Shopping Cart.',
|
417
|
-
primaryButton: 'Ok',
|
418
|
-
});
|
419
|
-
}
|
420
391
|
showTermsLimitReachedDialog() {
|
421
392
|
const shoppingCartSettings = mapShoppingCartSettings(this.runtimeSettings.getShoppingCartSettings() || []);
|
422
393
|
const maxRenewalTerms = getMaxRenewalTermsValue(shoppingCartSettings);
|
@@ -431,20 +402,18 @@ class FlowDialogService {
|
|
431
402
|
return dialogFunction(dialog);
|
432
403
|
}
|
433
404
|
}
|
434
|
-
FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token:
|
405
|
+
FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i3$1.RuntimeSettingsService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
435
406
|
FlowDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService });
|
436
407
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, decorators: [{
|
437
408
|
type: Injectable
|
438
|
-
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type:
|
409
|
+
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i3$1.RuntimeSettingsService }, { type: i3$1.FlowInfoService }]; } });
|
439
410
|
|
440
411
|
class FlowRouterService {
|
441
|
-
constructor(router, route,
|
412
|
+
constructor(router, route, integrationState, flowInfoService) {
|
442
413
|
this.router = router;
|
443
414
|
this.route = route;
|
444
|
-
this.contextService = contextService;
|
445
415
|
this.integrationState = integrationState;
|
446
416
|
this.flowInfoService = flowInfoService;
|
447
|
-
this.flowStateService = flowStateService;
|
448
417
|
this.urlHistory = [];
|
449
418
|
this.getLastChildRoute = (route) => {
|
450
419
|
return route.firstChild ? this.getLastChildRoute(route.firstChild) : route;
|
@@ -538,7 +507,7 @@ class FlowRouterService {
|
|
538
507
|
this.router.navigateByUrl(prevUrl);
|
539
508
|
}
|
540
509
|
}
|
541
|
-
navigateTo(path, productId,
|
510
|
+
navigateTo(path, productId, transactionItemId) {
|
542
511
|
if (path === 'shopping-cart') {
|
543
512
|
this.navigateToShoppingCart();
|
544
513
|
}
|
@@ -549,31 +518,16 @@ class FlowRouterService {
|
|
549
518
|
this.navigateToAssets();
|
550
519
|
}
|
551
520
|
else if (path === 'product' && productId) {
|
552
|
-
this.navigateToProductConfiguration(productId,
|
521
|
+
this.navigateToProductConfiguration(productId, transactionItemId);
|
553
522
|
}
|
554
523
|
}
|
555
|
-
navigateToProductConfiguration(productId,
|
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$
|
569
|
-
.pipe(tap(() => {
|
570
|
-
const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
|
571
|
-
const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
|
572
|
-
this.router.navigate([flowRouteUrl, 'product'], {
|
573
|
-
queryParams: { ...routeSnapshot.queryParams, productId },
|
574
|
-
});
|
575
|
-
}))
|
576
|
-
.subscribe();
|
524
|
+
navigateToProductConfiguration(productId, transactionItemId) {
|
525
|
+
this.flowInfoService.updateContext({ productId, transactionItemId });
|
526
|
+
const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
|
527
|
+
const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
|
528
|
+
this.router.navigate([flowRouteUrl, 'product'], {
|
529
|
+
queryParams: { ...routeSnapshot.queryParams, productId, transactionItemId },
|
530
|
+
});
|
577
531
|
}
|
578
532
|
navigateToShoppingCart() {
|
579
533
|
const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
|
@@ -610,24 +564,22 @@ class FlowRouterService {
|
|
610
564
|
this.router.navigate([], { relativeTo: route, queryParams: { ...routeSnapshot.queryParams, ...queryParams } });
|
611
565
|
}
|
612
566
|
}
|
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:
|
567
|
+
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: i3$1.IntegrationState }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
614
568
|
FlowRouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, providedIn: 'root' });
|
615
569
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, decorators: [{
|
616
570
|
type: Injectable,
|
617
571
|
args: [{ providedIn: 'root' }]
|
618
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type:
|
572
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i3$1.IntegrationState }, { type: i3$1.FlowInfoService }]; } });
|
619
573
|
|
620
574
|
class FlowService {
|
621
|
-
constructor(integrationState, flowRouterService,
|
575
|
+
constructor(integrationState, flowRouterService, configurationService, configurationStateService, flowDialogService, flowStateService, flowInfoService) {
|
622
576
|
this.integrationState = integrationState;
|
623
577
|
this.flowRouterService = flowRouterService;
|
624
|
-
this.quoteDraftService = quoteDraftService;
|
625
578
|
this.configurationService = configurationService;
|
626
579
|
this.configurationStateService = configurationStateService;
|
627
580
|
this.flowDialogService = flowDialogService;
|
628
|
-
this.flowConfigurationService = flowConfigurationService;
|
629
|
-
this.flowInfoService = flowInfoService;
|
630
581
|
this.flowStateService = flowStateService;
|
582
|
+
this.flowInfoService = flowInfoService;
|
631
583
|
this.cleanup$ = new Subject();
|
632
584
|
}
|
633
585
|
cleanup() {
|
@@ -636,16 +588,10 @@ class FlowService {
|
|
636
588
|
initSubscriptions() {
|
637
589
|
this.integrationState
|
638
590
|
.listen$(FlowAction.FLOW_CONFIGURE_PRODUCT)
|
639
|
-
.pipe(
|
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 => {
|
591
|
+
.pipe(tap(payload => {
|
647
592
|
if (payload.productId) {
|
648
|
-
this.
|
593
|
+
this.flowInfoService.updateContext({ newProductQty: payload.qty });
|
594
|
+
this.flowRouterService.navigateToProductConfiguration(payload.productId, payload.transactionItemId);
|
649
595
|
}
|
650
596
|
else {
|
651
597
|
console.warn("Parameter 'productId' is needed to start configuration");
|
@@ -669,7 +615,7 @@ class FlowService {
|
|
669
615
|
this.integrationState.dispatch(FlowAction.ConfigureProductAction(payload));
|
670
616
|
}
|
671
617
|
else {
|
672
|
-
this.flowRouterService.navigateTo(payload.path, payload.productId, payload.
|
618
|
+
this.flowRouterService.navigateTo(payload.path, payload.productId, payload.transactionItemId);
|
673
619
|
}
|
674
620
|
}), takeUntil(this.cleanup$))
|
675
621
|
.subscribe();
|
@@ -689,17 +635,10 @@ class FlowService {
|
|
689
635
|
.subscribe();
|
690
636
|
this.integrationState
|
691
637
|
.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(() => {
|
638
|
+
.pipe(switchMap(() => this.configurationStateService.saveConfiguration()), switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
|
639
|
+
addConfiguringAssetId: true,
|
640
|
+
enable: true,
|
641
|
+
})), tap(() => {
|
703
642
|
this.configurationService.hasUnsavedChanges = false;
|
704
643
|
this.flowRouterService.navigateToShoppingCart();
|
705
644
|
}), takeUntil(this.cleanup$))
|
@@ -715,36 +654,12 @@ class FlowService {
|
|
715
654
|
.pipe(map(path => path.queryParams['productId']), takeUntil(this.cleanup$))
|
716
655
|
.subscribe(productId => this.integrationState.patchState({ productId }));
|
717
656
|
}
|
718
|
-
prepareConfiguration$(lineItemId) {
|
719
|
-
if (!lineItemId) {
|
720
|
-
return of(undefined);
|
721
|
-
}
|
722
|
-
return this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_PRICE_LIST', {
|
723
|
-
lineItemId,
|
724
|
-
});
|
725
|
-
}
|
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
657
|
}
|
743
|
-
FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token:
|
658
|
+
FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token: i3$1.ConfigurationService }, { token: i3$1.ConfigurationStateService }, { token: FlowDialogService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
744
659
|
FlowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService });
|
745
660
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, decorators: [{
|
746
661
|
type: Injectable
|
747
|
-
}], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type:
|
662
|
+
}], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type: i3$1.ConfigurationService }, { type: i3$1.ConfigurationStateService }, { type: FlowDialogService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }]; } });
|
748
663
|
|
749
664
|
class FlowGuidedSellingService {
|
750
665
|
constructor(integrationState) {
|
@@ -768,21 +683,21 @@ class FlowGuidedSellingService {
|
|
768
683
|
.subscribe();
|
769
684
|
}
|
770
685
|
}
|
771
|
-
FlowGuidedSellingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, deps: [{ token:
|
686
|
+
FlowGuidedSellingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, deps: [{ token: i3$1.IntegrationState }], target: i0.ɵɵFactoryTarget.Injectable });
|
772
687
|
FlowGuidedSellingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService });
|
773
688
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, decorators: [{
|
774
689
|
type: Injectable
|
775
|
-
}], ctorParameters: function () { return [{ type:
|
690
|
+
}], ctorParameters: function () { return [{ type: i3$1.IntegrationState }]; } });
|
776
691
|
|
777
692
|
class FlowComponent {
|
778
|
-
constructor(routerService, flowService,
|
693
|
+
constructor(routerService, flowService, flowInfoService, guidedSellingService) {
|
779
694
|
this.routerService = routerService;
|
780
695
|
this.flowService = flowService;
|
781
|
-
this.
|
696
|
+
this.flowInfoService = flowInfoService;
|
782
697
|
this.guidedSellingService = guidedSellingService;
|
783
698
|
this.isLoading$ = this.routerService.loading$;
|
784
|
-
this.showHeader$ = combineLatest([this.routerService.route$, this.
|
785
|
-
this.isStandalone$ = this.
|
699
|
+
this.showHeader$ = combineLatest([this.routerService.route$, this.flowInfoService.flow$]).pipe(map(([route, flow]) => route.data['showHeader'] && !flow?.properties.standalone));
|
700
|
+
this.isStandalone$ = this.flowInfoService.flow$.pipe(map(flow => Boolean(flow?.properties.standalone)));
|
786
701
|
this.guidedSellingVisible$ = this.guidedSellingService.isVisible$;
|
787
702
|
this.flowService.initSubscriptions();
|
788
703
|
}
|
@@ -790,140 +705,36 @@ class FlowComponent {
|
|
790
705
|
this.flowService.cleanup();
|
791
706
|
}
|
792
707
|
}
|
793
|
-
FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, deps: [{ token: FlowRouterService }, { token: FlowService }, { token:
|
794
|
-
FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowComponent, selector: "vl-flow", ngImport: i0, 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"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2
|
708
|
+
FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, deps: [{ token: FlowRouterService }, { token: FlowService }, { token: i3$1.FlowInfoService }, { token: FlowGuidedSellingService }], target: i0.ɵɵFactoryTarget.Component });
|
709
|
+
FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowComponent, selector: "vl-flow", ngImport: i0, 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"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "component", type: FlowHeaderComponent, selector: "vl-flow-new-header" }, { kind: "component", type: GuidedSellingComponent, selector: "vl-flow-guided-selling" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
795
710
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, decorators: [{
|
796
711
|
type: Component,
|
797
712
|
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
|
-
}], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type:
|
799
|
-
|
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 }]; } });
|
713
|
+
}], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type: i3$1.FlowInfoService }, { type: FlowGuidedSellingService }]; } });
|
902
714
|
|
903
715
|
const keepFlowInitialized = (route) => {
|
904
|
-
const
|
716
|
+
const routerService = inject(FlowRouterService);
|
717
|
+
const runtimeSettingsService = inject(RuntimeSettingsService);
|
905
718
|
const flowState = inject(FlowStateService);
|
906
719
|
const flowInfoService = inject(FlowInfoService);
|
907
|
-
const
|
908
|
-
const quoteDraft = inject(QuoteDraftService);
|
720
|
+
const salesTrasnsactionService = inject(SalesTransactionService);
|
909
721
|
const configurationService = inject(ConfigurationService);
|
910
722
|
const integrationState = inject(IntegrationState);
|
911
723
|
const { flowId } = route.queryParams;
|
912
|
-
|
913
|
-
if (flow && flow?.id === flowId) {
|
724
|
+
if (flowInfoService.isFlowInitialized && flowInfoService.flow.id === flowId) {
|
914
725
|
return true;
|
915
726
|
}
|
916
727
|
// Cleanup
|
917
|
-
flowState.
|
918
|
-
|
728
|
+
flowState.reset();
|
729
|
+
salesTrasnsactionService.reset();
|
919
730
|
configurationService.reset();
|
920
|
-
integrationState.
|
921
|
-
flowInfoService.
|
922
|
-
contextService.delete();
|
731
|
+
integrationState.reset();
|
732
|
+
flowInfoService.reset();
|
923
733
|
if (!flowId) {
|
924
734
|
return true;
|
925
735
|
}
|
926
|
-
return flowInfoService.init$(flowId, route.queryParams)
|
736
|
+
return runtimeSettingsService.create().pipe(tap(() => runtimeSettingsService.initCurrency('USD')), switchMap(() => flowInfoService.init$(flowId, route.queryParams)), map(() => true), catchError(e => {
|
737
|
+
console.error(e);
|
927
738
|
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
928
739
|
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
929
740
|
return routerService.showErrorPage$(message, errorDetails);
|
@@ -931,22 +742,20 @@ const keepFlowInitialized = (route) => {
|
|
931
742
|
};
|
932
743
|
|
933
744
|
class ProductUnloadGuard {
|
934
|
-
constructor(router,
|
745
|
+
constructor(router, flowInfoService, configurationService, flowDialogService) {
|
935
746
|
this.router = router;
|
936
|
-
this.
|
937
|
-
this.quoteDraftService = quoteDraftService;
|
747
|
+
this.flowInfoService = flowInfoService;
|
938
748
|
this.configurationService = configurationService;
|
939
749
|
this.flowDialogService = flowDialogService;
|
940
750
|
}
|
941
751
|
canDeactivate(_, route, currentState, nextState) {
|
942
752
|
let observable = of(true);
|
943
|
-
if (!this.
|
753
|
+
if (!this.flowInfoService.flow.properties.standalone && this.configurationService.hasUnsavedChanges) {
|
944
754
|
observable = this.flowDialogService.showUnsavedChangesDialog();
|
945
755
|
}
|
946
756
|
return observable.pipe(map(unload => {
|
947
757
|
if (unload) {
|
948
758
|
this.configurationService.reset();
|
949
|
-
this.contextService.update({ properties: { productId: undefined, lineItemId: undefined } });
|
950
759
|
if (!nextState || currentState.url === nextState.url) {
|
951
760
|
return true;
|
952
761
|
}
|
@@ -964,11 +773,11 @@ class ProductUnloadGuard {
|
|
964
773
|
}));
|
965
774
|
}
|
966
775
|
}
|
967
|
-
ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token:
|
776
|
+
ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token: i3$1.FlowInfoService }, { token: i3$1.ConfigurationService }, { token: FlowDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
|
968
777
|
ProductUnloadGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard });
|
969
778
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, decorators: [{
|
970
779
|
type: Injectable
|
971
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type:
|
780
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i3$1.FlowInfoService }, { type: i3$1.ConfigurationService }, { type: FlowDialogService }]; } });
|
972
781
|
|
973
782
|
class RootGuard {
|
974
783
|
constructor(router, routerService) {
|
@@ -1011,8 +820,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1011
820
|
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }]; } });
|
1012
821
|
|
1013
822
|
class AssetsComponent {
|
1014
|
-
constructor(
|
1015
|
-
this.
|
823
|
+
constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
|
824
|
+
this.templatesAdminApiService = templatesAdminApiService;
|
1016
825
|
this.cdr = cdr;
|
1017
826
|
this.toastService = toastService;
|
1018
827
|
this.flowInfo = flowInfo;
|
@@ -1065,7 +874,7 @@ class AssetsComponent {
|
|
1065
874
|
if (!template) {
|
1066
875
|
return of(undefined);
|
1067
876
|
}
|
1068
|
-
return this.
|
877
|
+
return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
|
1069
878
|
}
|
1070
879
|
generateUIDefinition$() {
|
1071
880
|
return of(undefined).pipe(tap(() => {
|
@@ -1079,7 +888,6 @@ class AssetsComponent {
|
|
1079
888
|
const uiDef = {
|
1080
889
|
name: '',
|
1081
890
|
createdTimestamp: 0,
|
1082
|
-
primary: true,
|
1083
891
|
type: 'DEFAULT',
|
1084
892
|
version: 2,
|
1085
893
|
children: metaList.map(meta => ({
|
@@ -1093,12 +901,12 @@ class AssetsComponent {
|
|
1093
901
|
}));
|
1094
902
|
}
|
1095
903
|
}
|
1096
|
-
AssetsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, deps: [{ token: i1$1.
|
1097
|
-
AssetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AssetsComponent, selector: "vl-flow-assets", 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
|
904
|
+
AssetsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3$1.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
905
|
+
AssetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AssetsComponent, selector: "vl-flow-assets", 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.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1098
906
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, decorators: [{
|
1099
907
|
type: Component,
|
1100
908
|
args: [{ selector: 'vl-flow-assets', 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" }]
|
1101
|
-
}], ctorParameters: function () { return [{ type: i1$1.
|
909
|
+
}], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
|
1102
910
|
type: Optional
|
1103
911
|
}, {
|
1104
912
|
type: Inject,
|
@@ -1120,8 +928,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1120
928
|
}] });
|
1121
929
|
|
1122
930
|
class CatalogComponent {
|
1123
|
-
constructor(
|
1124
|
-
this.
|
931
|
+
constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
|
932
|
+
this.templatesAdminApiService = templatesAdminApiService;
|
1125
933
|
this.cdr = cdr;
|
1126
934
|
this.toastService = toastService;
|
1127
935
|
this.flowInfo = flowInfo;
|
@@ -1174,7 +982,7 @@ class CatalogComponent {
|
|
1174
982
|
if (!template) {
|
1175
983
|
return of(undefined);
|
1176
984
|
}
|
1177
|
-
return this.
|
985
|
+
return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
|
1178
986
|
}
|
1179
987
|
generateUIDefinition$() {
|
1180
988
|
return of(undefined).pipe(tap(() => {
|
@@ -1188,7 +996,6 @@ class CatalogComponent {
|
|
1188
996
|
const uiDef = {
|
1189
997
|
name: '',
|
1190
998
|
createdTimestamp: 0,
|
1191
|
-
primary: true,
|
1192
999
|
type: 'DEFAULT',
|
1193
1000
|
version: 2,
|
1194
1001
|
children: metaList.map(meta => ({
|
@@ -1202,12 +1009,12 @@ class CatalogComponent {
|
|
1202
1009
|
}));
|
1203
1010
|
}
|
1204
1011
|
}
|
1205
|
-
CatalogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, deps: [{ token: i1$1.
|
1206
|
-
CatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CatalogComponent, selector: "vl-flow-catalog", 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
|
1012
|
+
CatalogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3$1.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
1013
|
+
CatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CatalogComponent, selector: "vl-flow-catalog", 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.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1207
1014
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, decorators: [{
|
1208
1015
|
type: Component,
|
1209
1016
|
args: [{ selector: 'vl-flow-catalog', 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" }]
|
1210
|
-
}], ctorParameters: function () { return [{ type: i1$1.
|
1017
|
+
}], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
|
1211
1018
|
type: Optional
|
1212
1019
|
}, {
|
1213
1020
|
type: Inject,
|
@@ -1229,12 +1036,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1229
1036
|
}] });
|
1230
1037
|
|
1231
1038
|
class DebugComponent {
|
1232
|
-
constructor(flowsApiService, router, activatedRoute
|
1039
|
+
constructor(flowsApiService, router, activatedRoute) {
|
1233
1040
|
this.flowsApiService = flowsApiService;
|
1234
1041
|
this.router = router;
|
1235
1042
|
this.activatedRoute = activatedRoute;
|
1236
|
-
this.context = context;
|
1237
|
-
this.quoteDraftService = quoteDraftService;
|
1238
1043
|
this.form = new FormGroup({
|
1239
1044
|
id: new FormControl(''),
|
1240
1045
|
});
|
@@ -1242,17 +1047,13 @@ class DebugComponent {
|
|
1242
1047
|
}
|
1243
1048
|
runFlow() {
|
1244
1049
|
const { id } = this.form.value;
|
1245
|
-
|
1246
|
-
if (!id || !objectPropertyName || !this.selectedFlow) {
|
1050
|
+
if (!id || !this.selectedFlow) {
|
1247
1051
|
return;
|
1248
1052
|
}
|
1249
|
-
// Delete context before starting a new flow
|
1250
|
-
this.context.delete();
|
1251
|
-
this.quoteDraftService.reset();
|
1252
1053
|
this.router.navigate(['..', 'flows'], {
|
1253
1054
|
queryParams: {
|
1254
1055
|
flowId: this.selectedFlow.id,
|
1255
|
-
|
1056
|
+
headerId: id,
|
1256
1057
|
...this.selectedFlow.properties.queryParams,
|
1257
1058
|
},
|
1258
1059
|
relativeTo: this.activatedRoute,
|
@@ -1262,12 +1063,12 @@ class DebugComponent {
|
|
1262
1063
|
return new HttpParams({ fromObject: params }).toString();
|
1263
1064
|
}
|
1264
1065
|
}
|
1265
|
-
DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$1.FlowsApiService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }
|
1266
|
-
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:
|
1066
|
+
DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$1.FlowsApiService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
1067
|
+
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: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$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: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5$1.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: i7.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1267
1068
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, decorators: [{
|
1268
1069
|
type: Component,
|
1269
1070
|
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$1.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }
|
1071
|
+
}], ctorParameters: function () { return [{ type: i1$1.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; } });
|
1271
1072
|
|
1272
1073
|
const routes$1 = [{ path: '', component: DebugComponent }];
|
1273
1074
|
class DebugModule {
|
@@ -1305,121 +1106,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1305
1106
|
}] });
|
1306
1107
|
|
1307
1108
|
class ProductComponent {
|
1308
|
-
constructor(
|
1309
|
-
this.contextService = contextService;
|
1109
|
+
constructor(configurationRuntimeService, configurationStateService) {
|
1310
1110
|
this.configurationRuntimeService = configurationRuntimeService;
|
1311
|
-
this.configurationService = configurationService;
|
1312
1111
|
this.configurationStateService = configurationStateService;
|
1313
|
-
this.
|
1314
|
-
this.
|
1315
|
-
this.
|
1316
|
-
this.integrationState = integrationState;
|
1317
|
-
this.customizationService = customizationService;
|
1318
|
-
this.uiDefinition$ = new BehaviorSubject(undefined);
|
1112
|
+
this.uiDefinitionContainer$ = new BehaviorSubject(null);
|
1113
|
+
this.showNotFound$ = new BehaviorSubject(false);
|
1114
|
+
this.uiDefinitionContainer$.next(this.configurationRuntimeService.uiDefinitionContainer);
|
1319
1115
|
this.config = {
|
1320
1116
|
init$: () => this.init$(),
|
1321
1117
|
};
|
1322
1118
|
}
|
1323
|
-
customizeUI$() {
|
1324
|
-
const { productId } = this.configurationRuntimeService.runtimeContext ?? {};
|
1325
|
-
if (!productId || !this.customizationService?.getUiDefinition) {
|
1326
|
-
return of(undefined);
|
1327
|
-
}
|
1328
|
-
return this.customizationService.getUiDefinition(productId).pipe(map(uiDefinitionContainer => {
|
1329
|
-
if (uiDefinitionContainer) {
|
1330
|
-
this.configurationRuntimeService.overrideUIDefinition(uiDefinitionContainer);
|
1331
|
-
}
|
1332
|
-
}));
|
1333
|
-
}
|
1334
1119
|
init$() {
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
}
|
1339
|
-
else {
|
1340
|
-
quoteDraft$ = of(undefined);
|
1341
|
-
}
|
1342
|
-
return quoteDraft$.pipe(first(), switchMap(quote => {
|
1343
|
-
const contextProperties = this.contextService.resolve().properties;
|
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) {
|
1348
|
-
throw new Error(`Unable to start configuration for 'productId == null'`);
|
1349
|
-
}
|
1350
|
-
if (!quote) {
|
1351
|
-
const offeringId = contextProperties.offeringId;
|
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 {
|
1371
|
-
throw new Error('Product does not have Configuration UI');
|
1372
|
-
}
|
1373
|
-
}), tap(() => {
|
1374
|
-
if (this.configurationRuntimeService.initializationProps) {
|
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;
|
1120
|
+
return this.configurationStateService.init$().pipe(tap(() => {
|
1121
|
+
this.showNotFound$.next(Boolean(!this.uiDefinitionContainer$.value));
|
1122
|
+
}));
|
1391
1123
|
}
|
1392
1124
|
}
|
1393
|
-
ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, deps: [{ token:
|
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]=\"
|
1125
|
+
ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, deps: [{ token: i3$1.ConfigurationRuntimeService }, { token: i3$1.ConfigurationStateService }], target: i0.ɵɵFactoryTarget.Component });
|
1126
|
+
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\n<div *ngIf=\"showNotFound$ | async\" class=\"not-found-wrapper\">\n <div class=\"not-found\">\n <div class=\"icon\"></div>\n <div class=\"message\">\n This product doesn't have a linked Configuration UI. <br />\n Please contact your system administrator for further assistance.\n </div>\n </div>\n</div>\n", styles: [".not-found-wrapper{position:absolute;top:0;display:flex;width:100%;height:100%;justify-content:center;align-items:center;background-color:#fff;z-index:1000}.not-found{display:flex;align-items:center;padding:16px;border-radius:8px;gap:8px;background-color:#f5f5f5}.not-found .icon{width:48px;height:42px;background-image:url(\"data:image/svg+xml,%3Csvg width='48' height='42' viewBox='0 0 48 42' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cellipse cx='24.0798' cy='32.6052' rx='2.85714' ry='2.63158' fill='%231F2029'/%3E%3Cpath d='M22.285 3.35831C23.0618 2.06363 24.9382 2.06363 25.715 3.35831L46.1826 37.471C46.9824 38.8041 46.0222 40.5 44.4676 40.5L3.53238 40.5C1.97779 40.5 1.01757 38.8041 1.8174 37.471L22.285 3.35831Z' stroke='%23141414' stroke-width='2'/%3E%3Cpath d='M24 17.342V26.8157' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E%0A\")}.not-found .message{font-size:14px;color:#141414;font-weight:300}\n"], 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: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1395
1127
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, decorators: [{
|
1396
1128
|
type: Component,
|
1397
|
-
args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"
|
1398
|
-
}], ctorParameters: function () { return [{ type:
|
1399
|
-
type: Optional
|
1400
|
-
}, {
|
1401
|
-
type: Inject,
|
1402
|
-
args: [FLOW_CUSTOMIZATION]
|
1403
|
-
}] }]; } });
|
1129
|
+
args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n\n<div *ngIf=\"showNotFound$ | async\" class=\"not-found-wrapper\">\n <div class=\"not-found\">\n <div class=\"icon\"></div>\n <div class=\"message\">\n This product doesn't have a linked Configuration UI. <br />\n Please contact your system administrator for further assistance.\n </div>\n </div>\n</div>\n", styles: [".not-found-wrapper{position:absolute;top:0;display:flex;width:100%;height:100%;justify-content:center;align-items:center;background-color:#fff;z-index:1000}.not-found{display:flex;align-items:center;padding:16px;border-radius:8px;gap:8px;background-color:#f5f5f5}.not-found .icon{width:48px;height:42px;background-image:url(\"data:image/svg+xml,%3Csvg width='48' height='42' viewBox='0 0 48 42' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cellipse cx='24.0798' cy='32.6052' rx='2.85714' ry='2.63158' fill='%231F2029'/%3E%3Cpath d='M22.285 3.35831C23.0618 2.06363 24.9382 2.06363 25.715 3.35831L46.1826 37.471C46.9824 38.8041 46.0222 40.5 44.4676 40.5L3.53238 40.5C1.97779 40.5 1.01757 38.8041 1.8174 37.471L22.285 3.35831Z' stroke='%23141414' stroke-width='2'/%3E%3Cpath d='M24 17.342V26.8157' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E%0A\")}.not-found .message{font-size:14px;color:#141414;font-weight:300}\n"] }]
|
1130
|
+
}], ctorParameters: function () { return [{ type: i3$1.ConfigurationRuntimeService }, { type: i3$1.ConfigurationStateService }]; } });
|
1404
1131
|
|
1405
1132
|
class ProductModule {
|
1406
1133
|
}
|
1407
1134
|
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] });
|
1135
|
+
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] });
|
1136
|
+
ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule] });
|
1410
1137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, decorators: [{
|
1411
1138
|
type: NgModule,
|
1412
1139
|
args: [{
|
1413
1140
|
declarations: [ProductComponent],
|
1414
|
-
imports: [CommonModule, PreviewModule, LoaderModule],
|
1141
|
+
imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule],
|
1415
1142
|
exports: [ProductComponent],
|
1416
1143
|
}]
|
1417
1144
|
}] });
|
1418
1145
|
|
1419
1146
|
class RecordNotFoundComponent {
|
1420
|
-
constructor(router
|
1147
|
+
constructor(router) {
|
1421
1148
|
this.router = router;
|
1422
|
-
this.route = route;
|
1423
1149
|
this.subMessage = '';
|
1424
1150
|
this.type = '';
|
1425
1151
|
const navigation = this.router.getCurrentNavigation();
|
@@ -1432,12 +1158,12 @@ class RecordNotFoundComponent {
|
|
1432
1158
|
}
|
1433
1159
|
}
|
1434
1160
|
}
|
1435
|
-
RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$2.Router }
|
1161
|
+
RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Component });
|
1436
1162
|
RecordNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RecordNotFoundComponent, selector: "vl-flow-record-not-found", ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"message-wrapper\">\n <div *ngIf=\"message; else defaultMessage\">\n <p class=\"text message-text\" [class]=\"type\">{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"text\">{{ subMessage }}</p>\n\n <div *ngIf=\"details && details.length > 0\">\n <div *ngFor=\"let detail of details\" class=\"text\">{{ detail }}</div>\n </div>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;padding:24px 54px}:host .text{white-space:pre-line;word-break:break-word}:host .message-text.error{color:var(--vl-error-text-color)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1437
1163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, decorators: [{
|
1438
1164
|
type: Component,
|
1439
1165
|
args: [{ selector: 'vl-flow-record-not-found', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"message-wrapper\">\n <div *ngIf=\"message; else defaultMessage\">\n <p class=\"text message-text\" [class]=\"type\">{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"text\">{{ subMessage }}</p>\n\n <div *ngIf=\"details && details.length > 0\">\n <div *ngFor=\"let detail of details\" class=\"text\">{{ detail }}</div>\n </div>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;padding:24px 54px}:host .text{white-space:pre-line;word-break:break-word}:host .message-text.error{color:var(--vl-error-text-color)}\n"] }]
|
1440
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }
|
1166
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }]; } });
|
1441
1167
|
|
1442
1168
|
const routes = [{ path: '', component: RecordNotFoundComponent }];
|
1443
1169
|
class RecordNotFoundModule {
|
@@ -1453,352 +1179,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1453
1179
|
}]
|
1454
1180
|
}] });
|
1455
1181
|
|
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
1182
|
class ShoppingCartComponent {
|
1800
|
-
constructor(
|
1801
|
-
this.
|
1183
|
+
constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
|
1184
|
+
this.templatesAdminApiService = templatesAdminApiService;
|
1802
1185
|
this.cdr = cdr;
|
1803
1186
|
this.toastService = toastService;
|
1804
1187
|
this.flowInfo = flowInfo;
|
@@ -1851,7 +1234,7 @@ class ShoppingCartComponent {
|
|
1851
1234
|
if (!template) {
|
1852
1235
|
return of(undefined);
|
1853
1236
|
}
|
1854
|
-
return this.
|
1237
|
+
return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
|
1855
1238
|
}
|
1856
1239
|
generateUIDefinition$() {
|
1857
1240
|
return of(undefined).pipe(tap(() => {
|
@@ -1865,7 +1248,6 @@ class ShoppingCartComponent {
|
|
1865
1248
|
const uiDef = {
|
1866
1249
|
name: '',
|
1867
1250
|
createdTimestamp: 0,
|
1868
|
-
primary: true,
|
1869
1251
|
type: 'DEFAULT',
|
1870
1252
|
version: 2,
|
1871
1253
|
children: metaList.map(meta => ({
|
@@ -1879,12 +1261,12 @@ class ShoppingCartComponent {
|
|
1879
1261
|
}));
|
1880
1262
|
}
|
1881
1263
|
}
|
1882
|
-
ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1$1.
|
1883
|
-
ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", 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
|
1264
|
+
ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3$1.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
1265
|
+
ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", 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.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1884
1266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, decorators: [{
|
1885
1267
|
type: Component,
|
1886
1268
|
args: [{ selector: 'vl-flow-shopping-cart', 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" }]
|
1887
|
-
}], ctorParameters: function () { return [{ type: i1$1.
|
1269
|
+
}], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
|
1888
1270
|
type: Optional
|
1889
1271
|
}, {
|
1890
1272
|
type: Inject,
|
@@ -1906,30 +1288,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
1906
1288
|
}] });
|
1907
1289
|
|
1908
1290
|
class FlowResolver {
|
1909
|
-
constructor(router, routerService,
|
1291
|
+
constructor(router, routerService, flowInfoService) {
|
1910
1292
|
this.router = router;
|
1911
1293
|
this.routerService = routerService;
|
1912
|
-
this.
|
1913
|
-
this.flowInfo = flowInfo;
|
1294
|
+
this.flowInfoService = flowInfoService;
|
1914
1295
|
}
|
1915
1296
|
resolve(route) {
|
1916
|
-
|
1917
|
-
const flow = this.flowInfo.flow;
|
1918
|
-
if (!flow) {
|
1297
|
+
if (!this.flowInfoService.isFlowInitialized) {
|
1919
1298
|
return of(false);
|
1920
1299
|
}
|
1921
|
-
const {
|
1300
|
+
const { queryParams } = route;
|
1301
|
+
const { properties } = this.flowInfoService.flow;
|
1922
1302
|
const { queryParams: flowQueryParams, entryPath } = properties;
|
1923
1303
|
const mergedQueryParams = {
|
1924
1304
|
...queryParams,
|
1925
1305
|
...flowQueryParams,
|
1926
1306
|
};
|
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
1307
|
const parentUrl = this.routerService.getFlowRootPath(route);
|
1934
1308
|
const entryUrl = String(entryPath ?? '')
|
1935
1309
|
.split('/')
|
@@ -1938,29 +1312,39 @@ class FlowResolver {
|
|
1938
1312
|
queryParams: mergedQueryParams,
|
1939
1313
|
replaceUrl: true,
|
1940
1314
|
})).pipe(catchError$1(e => {
|
1315
|
+
console.error(e);
|
1941
1316
|
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
1942
1317
|
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
1943
1318
|
return this.routerService.showErrorPage$(message, errorDetails);
|
1944
1319
|
}));
|
1945
1320
|
}
|
1946
1321
|
}
|
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:
|
1322
|
+
FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1948
1323
|
FlowResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver });
|
1949
1324
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, decorators: [{
|
1950
1325
|
type: Injectable
|
1951
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type:
|
1326
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i3$1.FlowInfoService }]; } });
|
1327
|
+
|
1328
|
+
const resolvePCMModel = () => {
|
1329
|
+
const flowInfoService = inject(FlowInfoService);
|
1330
|
+
const configurationRuntimeService = inject(ConfigurationRuntimeService);
|
1331
|
+
const { productId } = flowInfoService.context;
|
1332
|
+
if (!productId) {
|
1333
|
+
throw new Error(`Unable to start configuration for 'productId == null'`);
|
1334
|
+
}
|
1335
|
+
return configurationRuntimeService.init$({ productId });
|
1336
|
+
};
|
1952
1337
|
|
1953
|
-
class
|
1954
|
-
constructor(router,
|
1338
|
+
class SalesTransactionResolver {
|
1339
|
+
constructor(router, routerService, flowInfoService, flowStateService, salesTransactionService) {
|
1955
1340
|
this.router = router;
|
1956
|
-
this.quoteDraftService = quoteDraftService;
|
1957
1341
|
this.routerService = routerService;
|
1958
|
-
this.
|
1959
|
-
this.flowInfo = flowInfo;
|
1342
|
+
this.flowInfoService = flowInfoService;
|
1960
1343
|
this.flowStateService = flowStateService;
|
1344
|
+
this.salesTransactionService = salesTransactionService;
|
1961
1345
|
}
|
1962
1346
|
resolve(route) {
|
1963
|
-
const flow = this.
|
1347
|
+
const flow = this.flowInfoService.flow;
|
1964
1348
|
if (!flow) {
|
1965
1349
|
return of(false);
|
1966
1350
|
}
|
@@ -1968,13 +1352,14 @@ class QuoteResolver {
|
|
1968
1352
|
return of(true);
|
1969
1353
|
}
|
1970
1354
|
return this.flowStateService.init$().pipe(switchMap(() => this.checkDynamicNavigation$(route)), catchError(e => {
|
1355
|
+
console.error(e);
|
1971
1356
|
const message = e instanceof HttpErrorResponse ? e.error.message : e;
|
1972
1357
|
const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
|
1973
1358
|
return this.routerService.showErrorPage$(message, errorDetails);
|
1974
1359
|
}));
|
1975
1360
|
}
|
1976
1361
|
checkDynamicNavigation$(route) {
|
1977
|
-
const flow = this.
|
1362
|
+
const flow = this.flowInfoService.flow;
|
1978
1363
|
if (!flow) {
|
1979
1364
|
return of(true);
|
1980
1365
|
}
|
@@ -1993,33 +1378,55 @@ class QuoteResolver {
|
|
1993
1378
|
}));
|
1994
1379
|
}
|
1995
1380
|
getNavigateTo() {
|
1996
|
-
|
1997
|
-
|
1998
|
-
if (flow?.properties.stateful) {
|
1999
|
-
return this.flowStateService.select$(UITemplateType.FLOW_ENGINE, 'NAVIGATE_TO').pipe(map(r => {
|
2000
|
-
if (r.success) {
|
2001
|
-
return r.result;
|
2002
|
-
}
|
2003
|
-
return '';
|
2004
|
-
}));
|
2005
|
-
}
|
2006
|
-
else {
|
2007
|
-
const isAccountMode = this.contextService.mode === ConfigurationContextMode.ACCOUNT;
|
2008
|
-
if (isAccountMode || this.quoteDraftService.hasAssets) {
|
2009
|
-
navigateTo = '/assets';
|
2010
|
-
}
|
2011
|
-
else if (this.quoteDraftService.hasProducts) {
|
2012
|
-
navigateTo = '/cart';
|
2013
|
-
}
|
2014
|
-
}
|
2015
|
-
return of(navigateTo);
|
1381
|
+
// Implement when needed
|
1382
|
+
return of('');
|
2016
1383
|
}
|
2017
1384
|
}
|
2018
|
-
|
2019
|
-
|
2020
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type:
|
1385
|
+
SalesTransactionResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i3$1.FlowInfoService }, { token: i3$1.FlowStateService }, { token: i3$1.SalesTransactionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1386
|
+
SalesTransactionResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver });
|
1387
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver, decorators: [{
|
2021
1388
|
type: Injectable
|
2022
|
-
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type:
|
1389
|
+
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i3$1.FlowInfoService }, { type: i3$1.FlowStateService }, { type: i3$1.SalesTransactionService }]; } });
|
1390
|
+
|
1391
|
+
const resolveUIDefinition = () => {
|
1392
|
+
const customizationService = inject(FLOW_CUSTOMIZATION, { optional: true });
|
1393
|
+
const flowInfoService = inject(FlowInfoService);
|
1394
|
+
const uiDefinitionsAdminApiService = inject(UIDefinitionsAdminApiService);
|
1395
|
+
const configurationRuntimeService = inject(ConfigurationRuntimeService);
|
1396
|
+
const { productId } = flowInfoService.context;
|
1397
|
+
if (!productId) {
|
1398
|
+
throw new Error(`Unable to start configuration for 'productId == null'`);
|
1399
|
+
}
|
1400
|
+
return of(undefined).pipe(switchMap(() => {
|
1401
|
+
// Try resolving via customization service
|
1402
|
+
if (!productId || !customizationService?.getUiDefinition) {
|
1403
|
+
return of(undefined);
|
1404
|
+
}
|
1405
|
+
return customizationService.getUiDefinition(flowInfoService.context);
|
1406
|
+
}), switchMap(uiDefContainer => {
|
1407
|
+
// Resolve UIDefinition from the org
|
1408
|
+
if (uiDefContainer) {
|
1409
|
+
return of(uiDefContainer);
|
1410
|
+
}
|
1411
|
+
if (flowInfoService.context.requiredUIDefinitionId) {
|
1412
|
+
return uiDefinitionsAdminApiService.fetch$(flowInfoService.context.requiredUIDefinitionId, {
|
1413
|
+
skipErrorHandler: true,
|
1414
|
+
});
|
1415
|
+
}
|
1416
|
+
return uiDefinitionsAdminApiService
|
1417
|
+
.fetchAll$({
|
1418
|
+
productId,
|
1419
|
+
defaultUIDefinitionId: flowInfoService.context.defaultUIDefinitionId,
|
1420
|
+
}, { skipErrorHandler: true })
|
1421
|
+
.pipe(map((uiDefinitionContainers) => {
|
1422
|
+
const uiDefContainer = uiDefinitionContainers[0];
|
1423
|
+
if (!uiDefContainer) {
|
1424
|
+
throw new Error(`UI Definition for productId=${productId} is not resolved`);
|
1425
|
+
}
|
1426
|
+
return uiDefContainer;
|
1427
|
+
}));
|
1428
|
+
}), catchError(() => of(null)), tap(uiDefContainer => (configurationRuntimeService.uiDefinitionContainer = uiDefContainer)));
|
1429
|
+
};
|
2023
1430
|
|
2024
1431
|
const rootRoute = {
|
2025
1432
|
id: VELOCE_FLOW_ROOT_ROUTE,
|
@@ -2037,15 +1444,13 @@ const rootRoute = {
|
|
2037
1444
|
path: 'flows',
|
2038
1445
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
2039
1446
|
resolve: { flow: FlowResolver },
|
2040
|
-
canActivate: [ContextGuard],
|
2041
1447
|
children: [],
|
2042
1448
|
},
|
2043
1449
|
{
|
2044
1450
|
path: 'product',
|
2045
1451
|
component: ProductComponent,
|
2046
1452
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
2047
|
-
resolve: {
|
2048
|
-
canActivate: [ContextGuard],
|
1453
|
+
resolve: { salesTransaction: SalesTransactionResolver, uiDef: resolveUIDefinition, pcm: resolvePCMModel },
|
2049
1454
|
canDeactivate: [ProductUnloadGuard],
|
2050
1455
|
data: { showHeader: true },
|
2051
1456
|
},
|
@@ -2053,33 +1458,23 @@ const rootRoute = {
|
|
2053
1458
|
path: 'cart',
|
2054
1459
|
component: ShoppingCartComponent,
|
2055
1460
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
2056
|
-
resolve: {
|
2057
|
-
canActivate: [ContextGuard],
|
1461
|
+
resolve: { salesTransaction: SalesTransactionResolver },
|
2058
1462
|
data: { showHeader: true },
|
2059
1463
|
},
|
2060
1464
|
{
|
2061
1465
|
path: 'catalog',
|
2062
1466
|
component: CatalogComponent,
|
2063
1467
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
2064
|
-
resolve: {
|
2065
|
-
canActivate: [ContextGuard],
|
1468
|
+
resolve: { salesTransaction: SalesTransactionResolver },
|
2066
1469
|
data: { showHeader: true },
|
2067
1470
|
},
|
2068
1471
|
{
|
2069
1472
|
path: 'assets',
|
2070
1473
|
component: AssetsComponent,
|
2071
1474
|
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
2072
|
-
resolve: {
|
2073
|
-
canActivate: [ContextGuard],
|
1475
|
+
resolve: { salesTransaction: SalesTransactionResolver },
|
2074
1476
|
data: { showHeader: true },
|
2075
1477
|
},
|
2076
|
-
{
|
2077
|
-
path: 'remote',
|
2078
|
-
component: RemoteComponent,
|
2079
|
-
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
|
2080
|
-
resolve: { quote: QuoteResolver },
|
2081
|
-
canActivate: [ContextGuard],
|
2082
|
-
},
|
2083
1478
|
{
|
2084
1479
|
path: 'debug',
|
2085
1480
|
loadChildren: () => DebugModule,
|
@@ -2095,30 +1490,14 @@ const rootRoute = {
|
|
2095
1490
|
class FlowRoutingModule {
|
2096
1491
|
}
|
2097
1492
|
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] });
|
1493
|
+
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] });
|
1494
|
+
FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, SalesTransactionResolver], imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule, RouterModule] });
|
2109
1495
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, decorators: [{
|
2110
1496
|
type: NgModule,
|
2111
1497
|
args: [{
|
2112
|
-
imports: [
|
2113
|
-
RouterModule.forChild([rootRoute]),
|
2114
|
-
ProductModule,
|
2115
|
-
ShoppingCartModule,
|
2116
|
-
CatalogModule,
|
2117
|
-
AssetsModule,
|
2118
|
-
RemoteModule,
|
2119
|
-
],
|
1498
|
+
imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule],
|
2120
1499
|
exports: [RouterModule],
|
2121
|
-
providers: [FlowRouterService, RootGuard,
|
1500
|
+
providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, SalesTransactionResolver],
|
2122
1501
|
}]
|
2123
1502
|
}] });
|
2124
1503
|
|
@@ -2170,5 +1549,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
2170
1549
|
* Generated bundle index. Do not edit.
|
2171
1550
|
*/
|
2172
1551
|
|
2173
|
-
export {
|
1552
|
+
export { FlowDialogService, FlowModule, FlowRouterService, FlowService, VELOCE_FLOW_ROOT_ROUTE };
|
2174
1553
|
//# sourceMappingURL=veloceapps-sdk.mjs.map
|