@veloceapps/sdk 3.0.5 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/bundles/veloce-sdk-cms.umd.js +176 -38
  2. package/bundles/veloce-sdk-cms.umd.js.map +1 -1
  3. package/bundles/veloce-sdk-runtime.umd.js +11 -15
  4. package/bundles/veloce-sdk-runtime.umd.js.map +1 -1
  5. package/bundles/veloce-sdk.umd.js +205 -123
  6. package/bundles/veloce-sdk.umd.js.map +1 -1
  7. package/cms/modules/configuration/types/configuration.types.d.ts +2 -3
  8. package/cms/modules/flow-configuration/index.d.ts +2 -0
  9. package/cms/modules/flow-configuration/services/flow-configuration.service.d.ts +10 -1
  10. package/cms/modules/flow-configuration/services/flow-update.service.d.ts +13 -0
  11. package/cms/modules/flow-configuration/types/update.types.d.ts +12 -0
  12. package/cms/utils/line-item.utils.d.ts +1 -0
  13. package/esm2015/cms/modules/configuration/services/configuration-runtime.service.js +10 -11
  14. package/esm2015/cms/modules/configuration/services/configuration.service.js +4 -3
  15. package/esm2015/cms/modules/configuration/services/runtime-context.service.js +4 -5
  16. package/esm2015/cms/modules/configuration/types/configuration.types.js +1 -1
  17. package/esm2015/cms/modules/flow-configuration/flow-configuration.module.js +4 -3
  18. package/esm2015/cms/modules/flow-configuration/index.js +3 -1
  19. package/esm2015/cms/modules/flow-configuration/services/flow-configuration.service.js +31 -12
  20. package/esm2015/cms/modules/flow-configuration/services/flow-update.service.js +97 -0
  21. package/esm2015/cms/modules/flow-configuration/types/update.types.js +2 -0
  22. package/esm2015/cms/utils/line-item.utils.js +14 -4
  23. package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +2 -10
  24. package/esm2015/runtime/execution/directives/vl-ramp.directive.js +1 -1
  25. package/esm2015/runtime/services/quote.service.js +10 -6
  26. package/esm2015/src/components/header/cart-overlay/cart-overlay.component.js +60 -0
  27. package/esm2015/src/components/header/cart-overlay/cart-overlay.module.js +21 -0
  28. package/esm2015/src/components/header/header.component.js +20 -11
  29. package/esm2015/src/components/header/header.module.js +6 -4
  30. package/esm2015/src/components/header/header.types.js +1 -1
  31. package/esm2015/src/flow.component.js +1 -1
  32. package/esm2015/src/pages/debug/debug.component.js +16 -11
  33. package/fesm2015/veloce-sdk-cms.js +157 -34
  34. package/fesm2015/veloce-sdk-cms.js.map +1 -1
  35. package/fesm2015/veloce-sdk-runtime.js +10 -14
  36. package/fesm2015/veloce-sdk-runtime.js.map +1 -1
  37. package/fesm2015/veloce-sdk.js +137 -63
  38. package/fesm2015/veloce-sdk.js.map +1 -1
  39. package/package.json +1 -1
  40. package/runtime/execution/directives/vl-ramp.directive.d.ts +1 -1
  41. package/runtime/services/quote.service.d.ts +4 -3
  42. package/src/components/header/cart-overlay/cart-overlay.component.d.ts +21 -0
  43. package/src/components/header/cart-overlay/cart-overlay.module.d.ts +11 -0
  44. package/src/components/header/header.component.d.ts +9 -5
  45. package/src/components/header/header.module.d.ts +3 -1
  46. package/src/components/header/header.types.d.ts +1 -0
  47. package/src/pages/debug/debug.component.d.ts +5 -2
@@ -1,52 +1,119 @@
1
- import * as i4 from '@angular/common';
1
+ import * as i7 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Component, ChangeDetectionStrategy, NgModule, Injectable, InjectionToken, Optional, Inject } from '@angular/core';
5
- import * as i1 from '@veloce/api';
4
+ import { Component, ChangeDetectionStrategy, ViewChild, NgModule, Injectable, InjectionToken, Optional, Inject } from '@angular/core';
5
+ import * as i1$2 from '@veloce/api';
6
6
  import { ApiModule } from '@veloce/api';
7
- import * as i2$1 from '@veloce/components';
7
+ import * as i2 from '@veloce/components';
8
8
  import { LetDirectiveModule, LoaderModule, ToastType } from '@veloce/components';
9
- import * as i1$3 from '@veloce/sdk/cms';
9
+ import * as i1$1 from '@veloce/sdk/cms';
10
10
  import { PreviewModule, LauncherModule } from '@veloce/sdk/cms';
11
- import * as i2 from '@veloce/sdk/runtime';
11
+ import * as i2$1 from '@veloce/sdk/runtime';
12
12
  import { RuntimeOperation, RuntimeModule, ContextService } from '@veloce/sdk/runtime';
13
+ import * as i6 from 'primeng/button';
14
+ import { ButtonModule } from 'primeng/button';
13
15
  import * as i3 from 'primeng/overlaypanel';
14
- import { OverlayPanelModule } from 'primeng/overlaypanel';
15
- import * as i5 from 'primeng/tooltip';
16
+ import { OverlayPanel, OverlayPanelModule } from 'primeng/overlaypanel';
17
+ import * as i8 from 'primeng/tooltip';
16
18
  import { TooltipModule } from 'primeng/tooltip';
19
+ import { BehaviorSubject, Subject, map, distinctUntilChanged, noop, catchError, of, tap, takeUntil, filter, shareReplay, startWith, first as first$1, switchMap as switchMap$1, from } from 'rxjs';
20
+ import * as i1 from '@veloce/core';
17
21
  import { ConfigurationContextMode, EntityUtil, UITemplateComponentType, UITemplateType } from '@veloce/core';
18
- import { BehaviorSubject, Subject, of, map, takeUntil, filter, shareReplay, startWith, distinctUntilChanged, first as first$1, tap, switchMap as switchMap$1, catchError, from } from 'rxjs';
19
- import * as i4$1 from 'primeng/api';
20
- import * as i1$1 from '@angular/router';
22
+ import * as i4 from 'primeng/api';
23
+ import * as i1$3 from '@angular/router';
21
24
  import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, RouterModule } from '@angular/router';
22
- import * as i7 from '@angular/forms';
25
+ import * as i8$1 from '@angular/forms';
23
26
  import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
24
- import * as i5$1 from 'primeng/button';
25
- import { ButtonModule } from 'primeng/button';
26
- import * as i4$2 from 'primeng/dropdown';
27
+ import * as i5 from 'primeng/dropdown';
27
28
  import { DropdownModule } from 'primeng/dropdown';
28
- import * as i8 from 'primeng/inputtext';
29
+ import * as i9 from 'primeng/inputtext';
29
30
  import { InputTextModule } from 'primeng/inputtext';
30
- import * as i6 from 'primeng/radiobutton';
31
+ import * as i7$1 from 'primeng/radiobutton';
31
32
  import { RadioButtonModule } from 'primeng/radiobutton';
32
33
  import { map as map$1, first, takeUntil as takeUntil$1, take, switchMap, tap as tap$1, catchError as catchError$1 } from 'rxjs/operators';
33
- import * as i1$2 from 'ngx-bootstrap/tooltip';
34
+ import * as i1$4 from 'ngx-bootstrap/tooltip';
34
35
  import { TooltipModule as TooltipModule$1 } from 'ngx-bootstrap/tooltip';
35
36
  import { HttpErrorResponse } from '@angular/common/http';
36
37
 
37
38
  const VELOCE_FLOW_ROOT_ROUTE = 'VELOCE_FLOW_ROOT_ROUTE';
38
39
 
40
+ class HeaderCartOverlayComponent {
41
+ constructor(baseHttpService, flowConfiguration) {
42
+ this.baseHttpService = baseHttpService;
43
+ this.flowConfiguration = flowConfiguration;
44
+ this.imagesMap$ = new BehaviorSubject({});
45
+ this.destroyed$ = new Subject();
46
+ this.products$ = this.flowConfiguration.get();
47
+ }
48
+ ngOnDestroy() {
49
+ this.destroyed$.next();
50
+ this.destroyed$.complete();
51
+ }
52
+ getImageUrl(productId) {
53
+ if (this.imagesMap$.value[productId] == null) {
54
+ this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
55
+ this.fetchProductImage(productId);
56
+ }
57
+ return this.imagesMap$.pipe(map(imagesMap => imagesMap[productId]), distinctUntilChanged());
58
+ }
59
+ isConfigurable(lineItem) {
60
+ return lineItem.properties['#configurable'] === 'true';
61
+ }
62
+ fetchProductImage(productId) {
63
+ this.baseHttpService
64
+ .api({
65
+ url: `/products/${productId}/image`,
66
+ method: 'get',
67
+ responseType: 'blob',
68
+ errorHandler: noop,
69
+ })
70
+ .pipe(map(file => URL.createObjectURL(file)), catchError(() => of('')), tap(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))), takeUntil(this.destroyed$))
71
+ .subscribe();
72
+ }
73
+ }
74
+ HeaderCartOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderCartOverlayComponent, deps: [{ token: i1.BaseHttpService }, { token: i1$1.FlowConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
75
+ HeaderCartOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: HeaderCartOverlayComponent, selector: "vl-header-cart-overlay", viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], ngImport: i0, template: "<p-overlayPanel\n styleClass=\"navigation-settings-overlay flow-header-overlay center\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\" *vlLet=\"products$ | async as products\">\n <ng-container *ngIf=\"products.length > 0; else empty\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Products ({{ products.length }})</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <div class=\"product header\">\n <span>Product</span>\n <span class=\"text-right\">Qty</span>\n <span class=\"text-right\">MRR</span>\n <span class=\"text-right\">NRR</span>\n </div>\n\n <div class=\"scrollable-wrapper\">\n <div class=\"product\" *ngFor=\"let product of products\">\n <div class=\"product__info\">\n <div class=\"product__image-wrapper\">\n <div\n *ngIf=\"getImageUrl(product.productId) | async as imageUrl; else noImage\"\n class=\"product__image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl + ')' }\"\n ></div>\n </div>\n <div class=\"flex flex-column justify-content-center\">\n <div class=\"word-break\">{{ product.name }}</div>\n <div>\n <p-button\n [disabled]=\"!isConfigurable(product)\"\n label=\"Configure\"\n styleClass=\"p-button-link p-button-sm pl-0\"\n ></p-button>\n <p-button label=\"Delete\" styleClass=\"p-button-link p-button-sm p-button-danger pl-0 pr-0\"></p-button>\n </div>\n </div>\n </div>\n\n <span class=\"text-right pt-3\">{{ product.qty }}</span>\n <span class=\"text-right pt-3\">$0.00</span>\n <span class=\"text-right pt-3\">$0.00</span>\n </div>\n\n <ng-template #noImage>\n <i class=\"vl-icon vl-icon-no-image no-image-icon\"></i>\n </ng-template>\n </div>\n\n <div class=\"flex justify-content-end mt-3\">\n <p-button label=\"Clear cart\" styleClass=\"p-button-link p-button-sm p-button-danger pl-0 pr-0\"></p-button>\n </div>\n </ng-container>\n\n <ng-template #empty>\n <h2 class=\"flow-header-overlay__title\">\n <span>Empty Cart</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <span class=\"empty-state\">There are no products added to the Shopping Cart yet.</span>\n </ng-template>\n </div>\n </ng-template>\n</p-overlayPanel>\n", styles: [".flow-header-overlay__wrapper{display:flex;flex-direction:column;width:460px;max-height:600px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 16px}.empty-state{color:var(--vl-text-color-deep-accent)}.scrollable-wrapper{overflow:auto}.product{display:grid;grid-template-columns:auto 60px 80px 80px;padding:16px 0}.product:not(.header){border-bottom:1px solid var(--vl-border-color)}.product.header{color:var(--vl-text-color-deep-accent)}.product__info{display:flex;grid-gap:16px;gap:16px}.product__image-wrapper{flex-shrink:0;height:64px;width:64px;display:flex;justify-content:center;align-items:center;background:var(--vl-primary-nav-overlay-bg);border-radius:4px}.product__image{background-size:contain;background-repeat:no-repeat;background-position:center;height:calc(100% - 12px);width:calc(100% - 12px)}.word-break{word-break:break-word}.no-image-icon{color:#b4d1ef;height:18px;width:18px}\n"], components: [{ type: i3.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }], directives: [{ type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i2.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderCartOverlayComponent, decorators: [{
77
+ type: Component,
78
+ args: [{
79
+ selector: 'vl-header-cart-overlay',
80
+ templateUrl: './cart-overlay.component.html',
81
+ styleUrls: ['./cart-overlay.component.scss'],
82
+ changeDetection: ChangeDetectionStrategy.OnPush,
83
+ }]
84
+ }], ctorParameters: function () { return [{ type: i1.BaseHttpService }, { type: i1$1.FlowConfigurationService }]; }, propDecorators: { overlayPanel: [{
85
+ type: ViewChild,
86
+ args: [OverlayPanel]
87
+ }] } });
88
+
89
+ class HeaderCartOverlayModule {
90
+ }
91
+ HeaderCartOverlayModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderCartOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
92
+ HeaderCartOverlayModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderCartOverlayModule, declarations: [HeaderCartOverlayComponent], imports: [CommonModule, ButtonModule, OverlayPanelModule, LetDirectiveModule], exports: [HeaderCartOverlayComponent] });
93
+ HeaderCartOverlayModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderCartOverlayModule, imports: [[CommonModule, ButtonModule, OverlayPanelModule, LetDirectiveModule]] });
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderCartOverlayModule, decorators: [{
95
+ type: NgModule,
96
+ args: [{
97
+ declarations: [HeaderCartOverlayComponent],
98
+ imports: [CommonModule, ButtonModule, OverlayPanelModule, LetDirectiveModule],
99
+ exports: [HeaderCartOverlayComponent],
100
+ }]
101
+ }] });
102
+
39
103
  class FlowHeaderComponent {
40
- constructor(context, sfApiService) {
104
+ constructor(context, quoteService, sfApiService, flowConfiguration) {
41
105
  var _a, _b, _c;
42
106
  this.context = context;
107
+ this.quoteService = quoteService;
43
108
  this.sfApiService = sfApiService;
109
+ this.flowConfiguration = flowConfiguration;
44
110
  this.objectDetails$ = new BehaviorSubject({});
45
111
  this.destroyed$ = new Subject();
46
112
  const ctx = this.context.resolve();
47
113
  this.mode = ctx === null || ctx === void 0 ? void 0 : ctx.mode;
48
114
  this.objectName = (_b = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.mode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '';
49
115
  this.contextProperties = (_c = ctx === null || ctx === void 0 ? void 0 : ctx.properties) !== null && _c !== void 0 ? _c : {};
116
+ this.selectedProductsNumber$ = this.flowConfiguration.get().pipe(map(lineItems => lineItems.length));
50
117
  }
51
118
  ngOnInit() {
52
119
  this.populateObjectDetails();
@@ -86,20 +153,23 @@ class FlowHeaderComponent {
86
153
  return this.sfApiService.query(searchRequest, objectName).pipe(map(result => { var _a, _b; return (_b = (_a = result[0]) === null || _a === void 0 ? void 0 : _a.Name) !== null && _b !== void 0 ? _b : ''; }), takeUntil(this.destroyed$));
87
154
  }
88
155
  populateObjectDetails() {
156
+ var _a;
89
157
  const accountId = this.isAccountMode ? this.contextProperties.Id : this.contextProperties.AccountId;
90
158
  const opportunityId = this.contextProperties.OpportunityId;
91
159
  const quoteId = this.isQuoteMode ? this.contextProperties.Id : undefined;
92
160
  const quoteName = this.isQuoteMode ? this.contextProperties.Name : undefined;
161
+ const priceListName = (_a = this.quoteService.quotePriceList) === null || _a === void 0 ? void 0 : _a.name;
93
162
  this.objectDetails$.next(Object.assign(Object.assign({}, this.objectDetails$.value), { accountId,
94
163
  opportunityId,
95
164
  quoteId,
96
- quoteName }));
165
+ quoteName,
166
+ priceListName }));
97
167
  this.queryName$('Account', accountId).subscribe(accountName => this.objectDetails$.next(Object.assign(Object.assign({}, this.objectDetails$.value), { accountName })));
98
168
  this.queryName$('Opportunity', opportunityId).subscribe(opportunityName => this.objectDetails$.next(Object.assign(Object.assign({}, this.objectDetails$.value), { opportunityName })));
99
169
  }
100
170
  }
101
- FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i2.ContextService }, { token: i1.SalesforceApiService }], target: i0.ɵɵFactoryTarget.Component });
102
- FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FlowHeaderComponent, selector: "vl-flow-header", ngImport: i0, template: "<nav class=\"nav-item nav-back\" (click)=\"back()\">\n <i class=\"nav-icon vl-icon vl-icon-arrow-left\"></i>\n <span> Back </span>\n <span *ngIf=\"objectName\" class=\"object-name\">&nbsp;To {{ objectName }}</span>\n</nav>\n\n<ng-container *ngIf=\"isAccountMode\">\n <span class=\"dot-separator\"></span>\n Account name\n <nav class=\"account-name\" [pTooltip]=\"contextProperties.Name\" tooltipPosition=\"bottom\" [showDelay]=\"1000\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(contextProperties.Id)\">{{ contextProperties.Name }}</a>\n </nav>\n</ng-container>\n\n<ng-container *ngIf=\"isQuoteMode\">\n <span class=\"dot-separator\"></span>\n Quote #{{ contextProperties.QuoteNumber }}\n <span class=\"dot-separator\"></span>\n <nav (click)=\"quoteDetails.toggle($event)\">\n {{ contextProperties.Status }}\n <i *ngIf=\"!quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"navigation-settings-overlay flow-header-overlay left\" #quoteDetails>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Quote Information</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"quoteDetails.hide()\"></i>\n </h2>\n\n <ul class=\"info-list\" *vlLet=\"objectDetails$ | async as details\">\n <li class=\"info-list__row\">\n <span>Account Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.accountId)\">{{ details.accountName }}</a>\n </li>\n <li class=\"info-list__row\">\n <span>Opportunity Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.opportunityId)\">{{ details.opportunityName }}</a>\n </li>\n <li class=\"info-list__row\">\n <span>Quote Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteId)\">{{ details.quoteName }}</a>\n </li>\n </ul>\n </div>\n </ng-template>\n </p-overlayPanel>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:48px;width:100%;background-color:var(--vl-primary-color);color:#fff;padding:0 32px;flex-shrink:0}::ng-deep .p-overlaypanel.flow-header-overlay .p-overlaypanel-content{background-color:#fff;padding:16px}::ng-deep .p-overlaypanel.flow-header-overlay:before{background-color:#fff}.vl-icon{display:inline-block}.object-name{text-transform:capitalize}.nav-back{font-weight:bold}nav{display:flex;align-items:center;cursor:pointer;padding:4px 0}nav .nav-icon{margin-right:10px}nav .icon-with-margin{margin:0 4px}nav a{color:#fff}nav.account-name{margin-left:4px;display:block;max-width:160px;overflow:hidden;text-overflow:ellipsis}.dot-separator:after{content:\"\";display:block;width:4px;height:4px;border-radius:50%;background:#fff;margin:0 8px}.flow-header-overlay__wrapper{width:360px}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 24px}.close-icon{cursor:pointer}.info-list{list-style:none;padding:0;font-size:12px}.info-list__row{padding:8px 0;display:flex;justify-content:space-between}\n"], components: [{ type: i3.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i2$1.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
171
+ FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i2$1.ContextService }, { token: i2$1.QuoteService }, { token: i1$2.SalesforceApiService }, { token: i1$1.FlowConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
172
+ FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FlowHeaderComponent, selector: "vl-flow-header", ngImport: i0, template: "<div class=\"flow-info\">\n <nav class=\"nav-item nav-back\" (click)=\"back()\">\n <i class=\"nav-icon vl-icon vl-icon-arrow-left\"></i>\n\n <span> Back </span>\n <span *ngIf=\"objectName\" class=\"object-name\">&nbsp;To {{ objectName }}</span>\n </nav>\n\n <ng-container *ngIf=\"isAccountMode\">\n <span class=\"dot-separator\"></span>\n\n <span>Account name</span>\n\n <nav class=\"account-name\" [pTooltip]=\"contextProperties.Name ?? ''\" tooltipPosition=\"bottom\" [showDelay]=\"1000\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(contextProperties.Id)\">{{ contextProperties.Name }}</a>\n </nav>\n </ng-container>\n\n <ng-container *ngIf=\"isQuoteMode\">\n <span class=\"dot-separator\"></span>\n\n <span>Quote #{{ contextProperties.QuoteNumber }}</span>\n\n <span class=\"dot-separator\"></span>\n\n <nav class=\"nav-item\" (click)=\"quoteDetails.toggle($event)\">\n <span>{{ contextProperties.Status }}</span>\n\n <i *ngIf=\"!quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"navigation-settings-overlay flow-header-overlay center\" #quoteDetails>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Quote Information</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"quoteDetails.hide()\"></i>\n </h2>\n\n <ul class=\"info-list\" *vlLet=\"objectDetails$ | async as details\">\n <li class=\"info-list__row\">\n <span>Account Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.accountId)\">{{ details.accountName }}</a>\n </li>\n <li class=\"info-list__row\">\n <span>Opportunity Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.opportunityId)\">{{\n details.opportunityName\n }}</a>\n </li>\n <li class=\"info-list__row\">\n <span>Quote Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteId)\">{{ details.quoteName }}</a>\n </li>\n </ul>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n</div>\n\n<div class=\"flow-navigation\">\n <nav class=\"nav-item disabled\">Catalog</nav>\n <nav class=\"nav-item disabled\">Configurator</nav>\n <ng-container *vlLet=\"selectedProductsNumber$ | async as selectedProductsNumber\">\n <nav class=\"nav-item active\">Shopping Cart ({{ selectedProductsNumber }})</nav>\n\n <nav class=\"nav-popover-toggle active\" (click)=\"cart?.overlayPanel?.toggle($event)\">\n <i *ngIf=\"!cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <vl-header-cart-overlay #cart></vl-header-cart-overlay>\n </ng-container>\n</div>\n\n<div class=\"flow-controls\" *vlLet=\"objectDetails$ | async as details\">\n <span *ngIf=\"details.priceListName\">{{ details.priceListName }}</span>\n <span *ngIf=\"contextProperties.StartDate\">{{ contextProperties.StartDate | date: 'MM.dd.yyyy' }}</span>\n\n <p-button label=\"Generate Doc\" styleClass=\"p-button-outlined\"></p-button>\n <p-button label=\"Save\" styleClass=\"p-button-outlined\"></p-button>\n <p-button label=\"Submit For Approval\" styleClass=\"p-button\"></p-button>\n</div>\n", styles: [":host{display:flex;align-items:center;height:48px;width:100%;background-color:var(--vl-primary-color);color:#fff;padding:0 32px;flex-shrink:0}::ng-deep .p-overlaypanel.flow-header-overlay .p-overlaypanel-content{background-color:#fff;padding:16px}::ng-deep .p-overlaypanel.flow-header-overlay.left:before{left:6px!important}::ng-deep .p-overlaypanel.flow-header-overlay.right:before{right:6px!important}::ng-deep .p-overlaypanel.flow-header-overlay.left .p-overlaypanel-content{margin-left:-16px}::ng-deep .p-overlaypanel.flow-header-overlay.right .p-overlaypanel-content{margin-right:-16px}::ng-deep .p-overlaypanel.flow-header-overlay:before{background-color:#fff}:host ::ng-deep .p-button{padding:5px 15px;font-size:12px}:host ::ng-deep .p-button{color:var(--vl-primary-color);background-color:#fff;border-color:#fff}:host ::ng-deep .p-button:enabled:hover{background-color:var(--vl-primary-color);color:#fff;border-color:#fff}:host ::ng-deep .p-button.p-button-outlined{background-color:var(--vl-primary-color);color:#fff;border-color:#fff}:host ::ng-deep .p-button.p-button-outlined:enabled:hover{color:var(--vl-primary-color);background-color:#fff;border-color:#fff}.vl-icon{display:inline-block}.flow-info{flex-shrink:0;display:flex;grid-gap:8px;gap:8px;align-items:center}.flow-info .nav-popover-toggle{margin-left:-8px}.flow-info .object-name{text-transform:capitalize}.flow-info .nav-back{font-weight:bold}.flow-info .nav-item:not(.disabled):hover,.flow-info .nav-popover-toggle:not(.disabled):hover{opacity:.6}nav{display:flex;align-items:center;cursor:pointer;padding:4px 0}nav.disabled{opacity:.6;cursor:default}nav .nav-icon{margin-right:10px}nav .icon-with-margin{margin:0 4px}nav a{color:#fff}nav.account-name{margin-left:4px;display:block;max-width:200px;overflow:hidden;text-overflow:ellipsis}nav.nav-popover-toggle{width:24px;display:flex;justify-content:center}nav.nav-popover-toggle i{pointer-events:none;margin:0}nav i{pointer-events:none}.dot-separator:after{content:\"\";display:block;width:4px;height:4px;border-radius:50%;background:#fff}.slash-separator:after{content:\"\";display:block;background:#fff;width:1px;height:16px}.flow-header-overlay__wrapper{width:360px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__wrapper .info-list{list-style:none;padding:0;font-size:12px}.flow-header-overlay__wrapper .info-list__row{padding:8px 0;display:flex;justify-content:space-between}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 24px}.flow-navigation{flex-grow:1;display:flex;grid-gap:16px;gap:16px;justify-content:center;font-weight:600}.flow-navigation .cart-nav-container{display:flex}.flow-navigation .nav-popover-toggle{margin-left:-14px}.flow-navigation .nav-item,.flow-navigation .nav-popover-toggle{opacity:.6}.flow-navigation .nav-item.active,.flow-navigation .nav-item:not(.disabled):hover,.flow-navigation .nav-popover-toggle.active,.flow-navigation .nav-popover-toggle:not(.disabled):hover{opacity:1}.flow-controls{flex-shrink:0;display:flex;align-items:center;grid-gap:8px;gap:8px}\n"], components: [{ type: i3.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: HeaderCartOverlayComponent, selector: "vl-header-cart-overlay" }, { type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i2.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }], pipes: { "async": i7.AsyncPipe, "date": i7.DatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
103
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderComponent, decorators: [{
104
174
  type: Component,
105
175
  args: [{
@@ -108,18 +178,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
108
178
  styleUrls: ['./header.component.scss'],
109
179
  changeDetection: ChangeDetectionStrategy.OnPush,
110
180
  }]
111
- }], ctorParameters: function () { return [{ type: i2.ContextService }, { type: i1.SalesforceApiService }]; } });
181
+ }], ctorParameters: function () { return [{ type: i2$1.ContextService }, { type: i2$1.QuoteService }, { type: i1$2.SalesforceApiService }, { type: i1$1.FlowConfigurationService }]; } });
112
182
 
113
183
  class FlowHeaderModule {
114
184
  }
115
185
  FlowHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
116
- FlowHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, declarations: [FlowHeaderComponent], imports: [CommonModule, OverlayPanelModule, LetDirectiveModule, TooltipModule], exports: [FlowHeaderComponent] });
117
- FlowHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, imports: [[CommonModule, OverlayPanelModule, LetDirectiveModule, TooltipModule]] });
186
+ FlowHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, declarations: [FlowHeaderComponent], imports: [CommonModule, OverlayPanelModule, LetDirectiveModule, TooltipModule, ButtonModule, HeaderCartOverlayModule], exports: [FlowHeaderComponent] });
187
+ FlowHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, imports: [[CommonModule, OverlayPanelModule, LetDirectiveModule, TooltipModule, ButtonModule, HeaderCartOverlayModule]] });
118
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, decorators: [{
119
189
  type: NgModule,
120
190
  args: [{
121
191
  declarations: [FlowHeaderComponent],
122
- imports: [CommonModule, OverlayPanelModule, LetDirectiveModule, TooltipModule],
192
+ imports: [CommonModule, OverlayPanelModule, LetDirectiveModule, TooltipModule, ButtonModule, HeaderCartOverlayModule],
123
193
  exports: [FlowHeaderComponent],
124
194
  }]
125
195
  }] });
@@ -189,12 +259,12 @@ class RouterService {
189
259
  return this.lastChildParams$;
190
260
  }
191
261
  }
192
- RouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
262
+ RouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, deps: [{ token: i1$3.Router }, { token: i1$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
193
263
  RouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, providedIn: 'root' });
194
264
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, decorators: [{
195
265
  type: Injectable,
196
266
  args: [{ providedIn: 'root' }]
197
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }]; } });
267
+ }], ctorParameters: function () { return [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }]; } });
198
268
 
199
269
  class FlowComponent {
200
270
  constructor(routerService, context) {
@@ -204,8 +274,8 @@ class FlowComponent {
204
274
  this.showHeader$ = this.routerService.route$.pipe(map(route => route.data.showHeader && !this.context.isStandalone));
205
275
  }
206
276
  }
207
- FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowComponent, deps: [{ token: RouterService }, { token: i2.ContextService }], target: i0.ɵɵFactoryTarget.Component });
208
- FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-header *ngIf=\"showHeader$ | async\"></vl-flow-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</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%}.flow-content{flex-grow:1;position:relative;padding:24px 54px;overflow:auto}.loading-overlay{position:absolute;height:100%;width:100%;left:0;right:0;top:0;bottom:0;background-color:#ffffff80;z-index:4}\n"], components: [{ type: FlowHeaderComponent, selector: "vl-flow-header" }, { type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
277
+ FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowComponent, deps: [{ token: RouterService }, { token: i2$1.ContextService }], target: i0.ɵɵFactoryTarget.Component });
278
+ FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-header *ngIf=\"showHeader$ | async\"></vl-flow-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</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%}.flow-content{flex-grow:1;position:relative;overflow:auto}.loading-overlay{position:absolute;height:100%;width:100%;left:0;right:0;top:0;bottom:0;background-color:#ffffff80;z-index:4}\n"], components: [{ type: FlowHeaderComponent, selector: "vl-flow-header" }, { type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
209
279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowComponent, decorators: [{
210
280
  type: Component,
211
281
  args: [{
@@ -214,7 +284,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
214
284
  styleUrls: ['./flow.component.scss'],
215
285
  changeDetection: ChangeDetectionStrategy.OnPush,
216
286
  }]
217
- }], ctorParameters: function () { return [{ type: RouterService }, { type: i2.ContextService }]; } });
287
+ }], ctorParameters: function () { return [{ type: RouterService }, { type: i2$1.ContextService }]; } });
218
288
 
219
289
  class ContextGuard {
220
290
  constructor(router, routerService) {
@@ -268,11 +338,11 @@ class ContextGuard {
268
338
  return false;
269
339
  }
270
340
  }
271
- ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextGuard, deps: [{ token: i1$1.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
341
+ ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextGuard, deps: [{ token: i1$3.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
272
342
  ContextGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextGuard });
273
343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextGuard, decorators: [{
274
344
  type: Injectable
275
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: RouterService }]; } });
345
+ }], ctorParameters: function () { return [{ type: i1$3.Router }, { type: RouterService }]; } });
276
346
 
277
347
  class RootGuard {
278
348
  constructor(router, routerService) {
@@ -304,12 +374,12 @@ class RootGuard {
304
374
  return true;
305
375
  }
306
376
  }
307
- RootGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RootGuard, deps: [{ token: i1$1.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
377
+ RootGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RootGuard, deps: [{ token: i1$3.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
308
378
  RootGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RootGuard, providedIn: 'root' });
309
379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RootGuard, decorators: [{
310
380
  type: Injectable,
311
381
  args: [{ providedIn: 'root' }]
312
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: RouterService }]; } });
382
+ }], ctorParameters: function () { return [{ type: i1$3.Router }, { type: RouterService }]; } });
313
383
 
314
384
  const getFlowObjectIdPropertyName = (objectName) => {
315
385
  switch (objectName) {
@@ -337,18 +407,20 @@ class FlowService {
337
407
  .pipe(map$1(({ value }) => (value ? JSON.parse(value) : [])));
338
408
  }
339
409
  }
340
- FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowService, deps: [{ token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
410
+ FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowService, deps: [{ token: i1$2.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
341
411
  FlowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowService });
342
412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowService, decorators: [{
343
413
  type: Injectable
344
- }], ctorParameters: function () { return [{ type: i1.ConfigurationSettingsApiService }]; } });
414
+ }], ctorParameters: function () { return [{ type: i1$2.ConfigurationSettingsApiService }]; } });
345
415
 
346
416
  class DebugComponent {
347
- constructor(flowService, router, activatedRoute, context) {
417
+ constructor(flowService, router, activatedRoute, context, flowConfiguration, quoteService) {
348
418
  this.flowService = flowService;
349
419
  this.router = router;
350
420
  this.activatedRoute = activatedRoute;
351
421
  this.context = context;
422
+ this.flowConfiguration = flowConfiguration;
423
+ this.quoteService = quoteService;
352
424
  this.objectNames = ['Account', 'Quote', 'Order'];
353
425
  this.form = new FormGroup({
354
426
  id: new FormControl(''),
@@ -373,14 +445,16 @@ class DebugComponent {
373
445
  }
374
446
  // Delete context before starting a new flow
375
447
  this.context.delete();
448
+ this.flowConfiguration.reset();
449
+ this.quoteService.reset();
376
450
  this.router.navigate(['..', 'flows'], {
377
451
  queryParams: Object.assign({ flowId: this.selectedFlow.id, [objectPropertyName]: id }, this.selectedFlow.queryParams),
378
452
  relativeTo: this.activatedRoute,
379
453
  });
380
454
  }
381
455
  }
382
- DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugComponent, deps: [{ token: FlowService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2.ContextService }], target: i0.ɵɵFactoryTarget.Component });
383
- DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", 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\n <div class=\"field\">\n <label>SF Object Name</label>\n <p-dropdown\n appendTo=\"body\"\n formControlName=\"name\"\n [autoDisplayFirst]=\"false\"\n [options]=\"objectNames\"\n ></p-dropdown>\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 </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.entryPath }}</td>\n <td>{{ flow.queryParamsStr }}</td>\n </tr>\n </tbody>\n</table>\n", styles: ["form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;grid-gap:24px;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}tr{cursor:pointer}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}\n"], components: [{ type: i4$2.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear"] }, { type: i5$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i6.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }], directives: [{ type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i8.InputText, selector: "[pInputText]" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
456
+ DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugComponent, deps: [{ token: FlowService }, { token: i1$3.Router }, { token: i1$3.ActivatedRoute }, { token: i2$1.ContextService }, { token: i1$1.FlowConfigurationService }, { token: i2$1.QuoteService }], target: i0.ɵɵFactoryTarget.Component });
457
+ DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", 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\n <div class=\"field\">\n <label>SF Object Name</label>\n <p-dropdown\n appendTo=\"body\"\n formControlName=\"name\"\n [autoDisplayFirst]=\"false\"\n [options]=\"objectNames\"\n ></p-dropdown>\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 </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.entryPath }}</td>\n <td>{{ flow.queryParamsStr }}</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;grid-gap:24px;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}tr{cursor:pointer}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}\n"], components: [{ type: i5.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear"] }, { type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i7$1.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }], directives: [{ type: i8$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8$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]" }, { type: i8$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8$1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.InputText, selector: "[pInputText]" }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
384
458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugComponent, decorators: [{
385
459
  type: Component,
386
460
  args: [{
@@ -389,7 +463,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
389
463
  styleUrls: ['./debug.component.scss'],
390
464
  changeDetection: ChangeDetectionStrategy.OnPush,
391
465
  }]
392
- }], ctorParameters: function () { return [{ type: FlowService }, { type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2.ContextService }]; } });
466
+ }], ctorParameters: function () { return [{ type: FlowService }, { type: i1$3.Router }, { type: i1$3.ActivatedRoute }, { type: i2$1.ContextService }, { type: i1$1.FlowConfigurationService }, { type: i2$1.QuoteService }]; } });
393
467
 
394
468
  const routes$1 = [{ path: '', component: DebugComponent }];
395
469
  class DebugModule {
@@ -397,7 +471,7 @@ class DebugModule {
397
471
  DebugModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
398
472
  DebugModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugModule, declarations: [DebugComponent], imports: [CommonModule,
399
473
  FormsModule,
400
- ReactiveFormsModule, i1$1.RouterModule, RadioButtonModule,
474
+ ReactiveFormsModule, i1$3.RouterModule, RadioButtonModule,
401
475
  ButtonModule,
402
476
  InputTextModule,
403
477
  DropdownModule] });
@@ -536,15 +610,15 @@ class LegacyProductComponent {
536
610
  }), switchMap(runtimeContext => this.customizeContext(productId, runtimeContext)));
537
611
  }
538
612
  }
539
- LegacyProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i2.QuoteService }, { token: i1.QuoteApiService }, { token: i2.ContextService }, { token: i2.RuntimeContextService }, { token: i2.RuntimeService }, { token: i2.CurrentStateService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
540
- LegacyProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: LegacyProductComponent, selector: "ng-component", ngImport: i0, template: "<vl-runtime #runtimeView (solutionUpdated)=\"onSolutionUpdated($event)\"></vl-runtime>\n", styles: [":host{display:block;height:100%}\n"], components: [{ type: i2.RuntimeComponent, selector: "vl-runtime", outputs: ["solutionUpdated"] }] });
613
+ LegacyProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i2$1.QuoteService }, { token: i1$2.QuoteApiService }, { token: i2$1.ContextService }, { token: i2$1.RuntimeContextService }, { token: i2$1.RuntimeService }, { token: i2$1.CurrentStateService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
614
+ LegacyProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: LegacyProductComponent, selector: "ng-component", ngImport: i0, template: "<vl-runtime #runtimeView (solutionUpdated)=\"onSolutionUpdated($event)\"></vl-runtime>\n", styles: [":host{display:block;height:100%}\n"], components: [{ type: i2$1.RuntimeComponent, selector: "vl-runtime", outputs: ["solutionUpdated"] }] });
541
615
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductComponent, decorators: [{
542
616
  type: Component,
543
617
  args: [{
544
618
  templateUrl: './legacy-product.component.html',
545
619
  styleUrls: ['./legacy-product.component.scss'],
546
620
  }]
547
- }], ctorParameters: function () { return [{ type: i1$1.ActivatedRoute }, { type: i2.QuoteService }, { type: i1.QuoteApiService }, { type: i2.ContextService }, { type: i2.RuntimeContextService }, { type: i2.RuntimeService }, { type: i2.CurrentStateService }, { type: undefined, decorators: [{
621
+ }], ctorParameters: function () { return [{ type: i1$3.ActivatedRoute }, { type: i2$1.QuoteService }, { type: i1$2.QuoteApiService }, { type: i2$1.ContextService }, { type: i2$1.RuntimeContextService }, { type: i2$1.RuntimeService }, { type: i2$1.CurrentStateService }, { type: undefined, decorators: [{
548
622
  type: Optional
549
623
  }, {
550
624
  type: Inject,
@@ -554,7 +628,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
554
628
  class LegacyProductModule {
555
629
  }
556
630
  LegacyProductModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
557
- LegacyProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductModule, declarations: [LegacyProductComponent], imports: [CommonModule, RuntimeModule, i1$2.TooltipModule], exports: [LegacyProductComponent] });
631
+ LegacyProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductModule, declarations: [LegacyProductComponent], imports: [CommonModule, RuntimeModule, i1$4.TooltipModule], exports: [LegacyProductComponent] });
558
632
  LegacyProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductModule, imports: [[CommonModule, RuntimeModule, TooltipModule$1.forRoot()]] });
559
633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductModule, decorators: [{
560
634
  type: NgModule,
@@ -632,8 +706,8 @@ class ProductComponent {
632
706
  .find(id => id);
633
707
  }
634
708
  }
635
- ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductComponent, deps: [{ token: i1$3.ConfigurationRuntimeService }, { token: i1$3.ConfigurationService }, { token: i2.QuoteService }, { token: i1$1.ActivatedRoute }, { token: i4$1.MessageService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
636
- ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: ProductComponent, selector: "vl-flow-product", 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: [""], components: [{ type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i1$3.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
709
+ ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductComponent, deps: [{ token: i1$1.ConfigurationRuntimeService }, { token: i1$1.ConfigurationService }, { token: i2$1.QuoteService }, { token: i1$3.ActivatedRoute }, { token: i4.MessageService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
710
+ ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: ProductComponent, selector: "vl-flow-product", 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: [""], components: [{ type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i1$1.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
637
711
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductComponent, decorators: [{
638
712
  type: Component,
639
713
  args: [{
@@ -642,7 +716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
642
716
  styleUrls: ['./product.component.scss'],
643
717
  changeDetection: ChangeDetectionStrategy.OnPush,
644
718
  }]
645
- }], ctorParameters: function () { return [{ type: i1$3.ConfigurationRuntimeService }, { type: i1$3.ConfigurationService }, { type: i2.QuoteService }, { type: i1$1.ActivatedRoute }, { type: i4$1.MessageService }, { type: undefined, decorators: [{
719
+ }], ctorParameters: function () { return [{ type: i1$1.ConfigurationRuntimeService }, { type: i1$1.ConfigurationService }, { type: i2$1.QuoteService }, { type: i1$3.ActivatedRoute }, { type: i4.MessageService }, { type: undefined, decorators: [{
646
720
  type: Optional
647
721
  }, {
648
722
  type: Inject,
@@ -676,8 +750,8 @@ class RecordNotFoundComponent {
676
750
  }
677
751
  }
678
752
  }
679
- RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
680
- RecordNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", 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 class=\"msg\">\n <div *ngIf=\"message; else defaultMessage\" class=\"message-title\">\n <p>{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"message-title\">{{ subMessage }}</p>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n </div>\n</div>\n", directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
753
+ RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$3.Router }, { token: i1$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
754
+ RecordNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", 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 class=\"msg\">\n <div *ngIf=\"message; else defaultMessage\" class=\"message-title\">\n <p>{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"message-title\">{{ subMessage }}</p>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n </div>\n</div>\n", directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
681
755
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundComponent, decorators: [{
682
756
  type: Component,
683
757
  args: [{
@@ -685,13 +759,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
685
759
  templateUrl: './record-not-found.component.html',
686
760
  changeDetection: ChangeDetectionStrategy.OnPush,
687
761
  }]
688
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }]; } });
762
+ }], ctorParameters: function () { return [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }]; } });
689
763
 
690
764
  const routes = [{ path: '', component: RecordNotFoundComponent }];
691
765
  class RecordNotFoundModule {
692
766
  }
693
767
  RecordNotFoundModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
694
- RecordNotFoundModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundModule, declarations: [RecordNotFoundComponent], imports: [CommonModule, i1$1.RouterModule] });
768
+ RecordNotFoundModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundModule, declarations: [RecordNotFoundComponent], imports: [CommonModule, i1$3.RouterModule] });
695
769
  RecordNotFoundModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundModule, imports: [[CommonModule, RouterModule.forChild(routes)]] });
696
770
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundModule, decorators: [{
697
771
  type: NgModule,
@@ -772,8 +846,8 @@ class ShoppingCartComponent {
772
846
  }));
773
847
  }
774
848
  }
775
- ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2$1.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
776
- ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", 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: [""], components: [{ type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i1$3.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
849
+ ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1$2.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
850
+ ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", 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: [""], components: [{ type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i1$1.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
777
851
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, decorators: [{
778
852
  type: Component,
779
853
  args: [{
@@ -782,7 +856,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
782
856
  styleUrls: ['./shopping-cart.component.scss'],
783
857
  changeDetection: ChangeDetectionStrategy.OnPush,
784
858
  }]
785
- }], ctorParameters: function () { return [{ type: i1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: undefined, decorators: [{
859
+ }], ctorParameters: function () { return [{ type: i1$2.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: undefined, decorators: [{
786
860
  type: Optional
787
861
  }, {
788
862
  type: Inject,
@@ -831,11 +905,11 @@ class ContextResolver {
831
905
  }));
832
906
  }
833
907
  }
834
- ContextResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver, deps: [{ token: i2.ContextService }, { token: i1$1.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
908
+ ContextResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver, deps: [{ token: i2$1.ContextService }, { token: i1$3.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
835
909
  ContextResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver });
836
910
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver, decorators: [{
837
911
  type: Injectable
838
- }], ctorParameters: function () { return [{ type: i2.ContextService }, { type: i1$1.Router }, { type: RouterService }]; } });
912
+ }], ctorParameters: function () { return [{ type: i2$1.ContextService }, { type: i1$3.Router }, { type: RouterService }]; } });
839
913
 
840
914
  class FlowResolver {
841
915
  constructor(router, flowService, routerService) {
@@ -882,11 +956,11 @@ class FlowResolver {
882
956
  }));
883
957
  }
884
958
  }
885
- FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowResolver, deps: [{ token: i1$1.Router }, { token: FlowService }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
959
+ FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowResolver, deps: [{ token: i1$3.Router }, { token: FlowService }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
886
960
  FlowResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowResolver });
887
961
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowResolver, decorators: [{
888
962
  type: Injectable
889
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: FlowService }, { type: RouterService }]; } });
963
+ }], ctorParameters: function () { return [{ type: i1$3.Router }, { type: FlowService }, { type: RouterService }]; } });
890
964
 
891
965
  class QuoteResolver {
892
966
  constructor(router, quoteService, routerService, contextService, flowConfiguration) {
@@ -925,11 +999,11 @@ class QuoteResolver {
925
999
  }));
926
1000
  }
927
1001
  }
928
- QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver, deps: [{ token: i1$1.Router }, { token: i2.QuoteService }, { token: RouterService }, { token: i2.ContextService }, { token: i1$3.FlowConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
1002
+ QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver, deps: [{ token: i1$3.Router }, { token: i2$1.QuoteService }, { token: RouterService }, { token: i2$1.ContextService }, { token: i1$1.FlowConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
929
1003
  QuoteResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver });
930
1004
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver, decorators: [{
931
1005
  type: Injectable
932
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i2.QuoteService }, { type: RouterService }, { type: i2.ContextService }, { type: i1$3.FlowConfigurationService }]; } });
1006
+ }], ctorParameters: function () { return [{ type: i1$3.Router }, { type: i2$1.QuoteService }, { type: RouterService }, { type: i2$1.ContextService }, { type: i1$1.FlowConfigurationService }]; } });
933
1007
 
934
1008
  const rootRoute = {
935
1009
  id: VELOCE_FLOW_ROOT_ROUTE,
@@ -986,7 +1060,7 @@ const rootRoute = {
986
1060
  class FlowRoutingModule {
987
1061
  }
988
1062
  FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
989
- FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, imports: [i1$1.RouterModule, ProductModule, LegacyProductModule, ShoppingCartModule], exports: [RouterModule] });
1063
+ FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, imports: [i1$3.RouterModule, ProductModule, LegacyProductModule, ShoppingCartModule], exports: [RouterModule] });
990
1064
  FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, providers: [RouterService, RootGuard, ContextGuard, ContextResolver, FlowResolver, QuoteResolver], imports: [[RouterModule.forChild([rootRoute]), ProductModule, LegacyProductModule, ShoppingCartModule], RouterModule] });
991
1065
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, decorators: [{
992
1066
  type: NgModule,