@veloceapps/sdk 3.0.0 → 3.0.1

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.
@@ -1,26 +1,26 @@
1
- import * as i3 from '@angular/common';
1
+ import * as i5 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Injectable, Component, ChangeDetectionStrategy, NgModule, InjectionToken, Optional, Inject } from '@angular/core';
4
+ import { Component, ChangeDetectionStrategy, NgModule, Injectable, InjectionToken, Optional, Inject } from '@angular/core';
5
5
  import * as i1$1 from '@veloce/api';
6
6
  import { ApiModule } from '@veloce/api';
7
- import * as i2 from '@veloce/components';
8
- import { LoaderModule } from '@veloce/components';
7
+ import * as i2$1 from '@veloce/components';
8
+ import { LoaderModule, ToastType } from '@veloce/components';
9
9
  import * as i1$3 from '@veloce/sdk/cms';
10
10
  import { PreviewModule, LauncherModule } from '@veloce/sdk/cms';
11
- import * as i2$1 from '@veloce/sdk/runtime';
11
+ import * as i2 from '@veloce/sdk/runtime';
12
12
  import { RuntimeOperation, RuntimeModule, ContextService } from '@veloce/sdk/runtime';
13
13
  import * as i1 from '@angular/router';
14
- import { NavigationStart, NavigationCancel, NavigationEnd, NavigationError, RouterModule } from '@angular/router';
15
- import { filter, map, startWith, distinctUntilChanged, shareReplay, Subject, of, BehaviorSubject, first as first$1, takeUntil as takeUntil$1, tap, switchMap as switchMap$1, catchError, from } from 'rxjs';
16
- import { ConfigurationContextMode, EntityUtil } from '@veloce/core';
17
- import * as i5 from '@angular/forms';
14
+ import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, RouterModule } from '@angular/router';
15
+ import { map, filter, shareReplay, startWith, distinctUntilChanged, Subject, of, BehaviorSubject, first as first$1, takeUntil as takeUntil$1, tap, switchMap as switchMap$1, catchError, from } from 'rxjs';
16
+ import { ConfigurationContextMode, EntityUtil, UITemplateComponentType, UITemplateType } from '@veloce/core';
17
+ import * as i6 from '@angular/forms';
18
18
  import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
19
- import * as i3$1 from 'primeng/button';
19
+ import * as i4 from 'primeng/button';
20
20
  import { ButtonModule } from 'primeng/button';
21
- import * as i6 from 'primeng/inputtext';
21
+ import * as i7 from 'primeng/inputtext';
22
22
  import { InputTextModule } from 'primeng/inputtext';
23
- import * as i4 from 'primeng/radiobutton';
23
+ import * as i5$1 from 'primeng/radiobutton';
24
24
  import { RadioButtonModule } from 'primeng/radiobutton';
25
25
  import { map as map$1, first, takeUntil, take, switchMap, tap as tap$1, catchError as catchError$1 } from 'rxjs/operators';
26
26
  import * as i1$2 from 'ngx-bootstrap/tooltip';
@@ -30,9 +30,62 @@ import { HttpErrorResponse } from '@angular/common/http';
30
30
 
31
31
  const VELOCE_FLOW_ROOT_ROUTE = 'VELOCE_FLOW_ROOT_ROUTE';
32
32
 
33
+ class FlowHeaderComponent {
34
+ }
35
+ FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
36
+ FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FlowHeaderComponent, selector: "vl-flow-header", ngImport: i0, template: "Flow Header\n", styles: [":host{display:flex;align-items:center;height:48px;width:100%;background-color:var(--vl-primary-color);color:#fff;padding:0 32px;font-weight:bold;flex-shrink:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderComponent, decorators: [{
38
+ type: Component,
39
+ args: [{
40
+ selector: 'vl-flow-header',
41
+ templateUrl: './header.component.html',
42
+ styleUrls: ['./header.component.scss'],
43
+ changeDetection: ChangeDetectionStrategy.OnPush,
44
+ }]
45
+ }] });
46
+
47
+ class FlowHeaderModule {
48
+ }
49
+ FlowHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
50
+ FlowHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, declarations: [FlowHeaderComponent], imports: [CommonModule], exports: [FlowHeaderComponent] });
51
+ FlowHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, imports: [[CommonModule]] });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowHeaderModule, decorators: [{
53
+ type: NgModule,
54
+ args: [{
55
+ declarations: [FlowHeaderComponent],
56
+ imports: [CommonModule],
57
+ exports: [FlowHeaderComponent],
58
+ }]
59
+ }] });
60
+
33
61
  class RouterService {
34
- constructor(router) {
62
+ constructor(router, route) {
35
63
  this.router = router;
64
+ this.route = route;
65
+ this.getLastChildRoute = (route) => {
66
+ return route.firstChild ? this.getLastChildRoute(route.firstChild) : route;
67
+ };
68
+ this.getNthChildRoute = (route, index) => {
69
+ if (index <= 0) {
70
+ return route;
71
+ }
72
+ return route.firstChild ? this.getNthChildRoute(route.firstChild, index - 1) : route;
73
+ };
74
+ this.getLastChildRouteSnapshot = (route) => {
75
+ return route.firstChild ? this.getLastChildRouteSnapshot(route.firstChild) : route;
76
+ };
77
+ this.watchLastChildRoute$ = (route) => {
78
+ return this.routeChange$.pipe(map(() => this.getLastChildRouteSnapshot(route.snapshot)));
79
+ };
80
+ this.getLastChildParams = (route) => {
81
+ return route.firstChild ? this.getLastChildParams(route.firstChild) : route.params;
82
+ };
83
+ this.watchLastChildParams$ = (route) => {
84
+ return this.routeChange$.pipe(map(() => this.getLastChildParams(route.snapshot)));
85
+ };
86
+ this.routeChange$ = this.router.events.pipe(filter(e => e instanceof NavigationEnd), shareReplay());
87
+ this.lastChildParams$ = this.watchLastChildParams$(this.route).pipe(startWith(this.getLastChildParams(this.route.snapshot)), shareReplay());
88
+ this.lastChildRoute$ = this.watchLastChildRoute$(this.route).pipe(startWith(this.getLastChildRouteSnapshot(this.route.snapshot)), shareReplay());
36
89
  this.loading$ = this.router.events.pipe(filter(e => e instanceof NavigationStart ||
37
90
  e instanceof NavigationCancel ||
38
91
  e instanceof NavigationEnd ||
@@ -63,21 +116,34 @@ class RouterService {
63
116
  .join('/');
64
117
  return '/' + path;
65
118
  }
119
+ get route$() {
120
+ return this.lastChildRoute$;
121
+ }
122
+ get params$() {
123
+ return this.lastChildParams$;
124
+ }
66
125
  }
67
- RouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
126
+ RouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
68
127
  RouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, providedIn: 'root' });
69
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RouterService, decorators: [{
70
129
  type: Injectable,
71
130
  args: [{ providedIn: 'root' }]
72
- }], ctorParameters: function () { return [{ type: i1.Router }]; } });
131
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } });
73
132
 
74
133
  class FlowComponent {
75
- constructor(routerService) {
134
+ constructor(routerService, context) {
76
135
  this.routerService = routerService;
136
+ this.context = context;
137
+ this.isLoading$ = this.routerService.loading$;
138
+ this.showHeader$ = this.routerService.route$.pipe(map(route => {
139
+ var _a;
140
+ const showHeader = ((_a = this.context.resolve()) === null || _a === void 0 ? void 0 : _a.properties.standalone) !== 'true';
141
+ return route.data.showHeader && showHeader;
142
+ }));
77
143
  }
78
144
  }
79
- FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowComponent, deps: [{ token: RouterService }], target: i0.ɵɵFactoryTarget.Component });
80
- FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<div class=\"loading-overlay\" *ngIf=\"routerService.loading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n</div>\n\n<router-outlet></router-outlet>\n", styles: [".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: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
145
+ 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 });
146
+ 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}.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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
81
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowComponent, decorators: [{
82
148
  type: Component,
83
149
  args: [{
@@ -86,7 +152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
86
152
  styleUrls: ['./flow.component.scss'],
87
153
  changeDetection: ChangeDetectionStrategy.OnPush,
88
154
  }]
89
- }], ctorParameters: function () { return [{ type: RouterService }]; } });
155
+ }], ctorParameters: function () { return [{ type: RouterService }, { type: i2.ContextService }]; } });
90
156
 
91
157
  class ContextGuard {
92
158
  constructor(router, routerService) {
@@ -204,10 +270,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
204
270
  }], ctorParameters: function () { return [{ type: i1$1.ConfigurationSettingsApiService }]; } });
205
271
 
206
272
  class DebugComponent {
207
- constructor(flowService, router, activatedRoute) {
273
+ constructor(flowService, router, activatedRoute, context) {
208
274
  this.flowService = flowService;
209
275
  this.router = router;
210
276
  this.activatedRoute = activatedRoute;
277
+ this.context = context;
211
278
  this.form = new FormGroup({
212
279
  id: new FormControl(''),
213
280
  });
@@ -227,15 +294,16 @@ class DebugComponent {
227
294
  if (!id || !this.selectedFlow) {
228
295
  return;
229
296
  }
230
- const paths = this.selectedFlow.entryPath.split('/').filter(Boolean);
231
- this.router.navigate(['..', ...paths], {
297
+ // Delete context before starting a new flow
298
+ this.context.delete();
299
+ this.router.navigate(['..', 'flows'], {
232
300
  queryParams: Object.assign({ flowId: this.selectedFlow.id, quoteId: id }, this.selectedFlow.queryParams),
233
301
  relativeTo: this.activatedRoute,
234
302
  });
235
303
  }
236
304
  }
237
- DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugComponent, deps: [{ token: FlowService }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
238
- 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=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\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}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}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: i3$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i4.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }], directives: [{ type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.InputText, selector: "[pInputText]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
305
+ DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugComponent, deps: [{ token: FlowService }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ContextService }], target: i0.ɵɵFactoryTarget.Component });
306
+ 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=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\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}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}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.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i5$1.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }], directives: [{ type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.InputText, selector: "[pInputText]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
239
307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DebugComponent, decorators: [{
240
308
  type: Component,
241
309
  args: [{
@@ -244,7 +312,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
244
312
  styleUrls: ['./debug.component.scss'],
245
313
  changeDetection: ChangeDetectionStrategy.OnPush,
246
314
  }]
247
- }], ctorParameters: function () { return [{ type: FlowService }, { type: i1.Router }, { type: i1.ActivatedRoute }]; } });
315
+ }], ctorParameters: function () { return [{ type: FlowService }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ContextService }]; } });
248
316
 
249
317
  const routes$1 = [{ path: '', component: DebugComponent }];
250
318
  class DebugModule {
@@ -388,15 +456,15 @@ class LegacyProductComponent {
388
456
  }), switchMap(runtimeContext => this.customizeContext(productId, runtimeContext)));
389
457
  }
390
458
  }
391
- LegacyProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2$1.QuoteService }, { token: i1$1.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 });
392
- 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"] }] });
459
+ LegacyProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.QuoteService }, { token: i1$1.QuoteApiService }, { token: i2.ContextService }, { token: i2.RuntimeContextService }, { token: i2.RuntimeService }, { token: i2.CurrentStateService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
460
+ 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"] }] });
393
461
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: LegacyProductComponent, decorators: [{
394
462
  type: Component,
395
463
  args: [{
396
464
  templateUrl: './legacy-product.component.html',
397
465
  styleUrls: ['./legacy-product.component.scss'],
398
466
  }]
399
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2$1.QuoteService }, { type: i1$1.QuoteApiService }, { type: i2$1.ContextService }, { type: i2$1.RuntimeContextService }, { type: i2$1.RuntimeService }, { type: i2$1.CurrentStateService }, { type: undefined, decorators: [{
467
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.QuoteService }, { type: i1$1.QuoteApiService }, { type: i2.ContextService }, { type: i2.RuntimeContextService }, { type: i2.RuntimeService }, { type: i2.CurrentStateService }, { type: undefined, decorators: [{
400
468
  type: Optional
401
469
  }, {
402
470
  type: Inject,
@@ -484,8 +552,8 @@ class ProductComponent {
484
552
  .find(id => id);
485
553
  }
486
554
  }
487
- 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$1.QuoteService }, { token: i1.ActivatedRoute }, { token: i4$1.MessageService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
488
- 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$3.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
555
+ 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.ActivatedRoute }, { token: i4$1.MessageService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
556
+ 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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
489
557
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductComponent, decorators: [{
490
558
  type: Component,
491
559
  args: [{
@@ -494,7 +562,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
494
562
  styleUrls: ['./product.component.scss'],
495
563
  changeDetection: ChangeDetectionStrategy.OnPush,
496
564
  }]
497
- }], ctorParameters: function () { return [{ type: i1$3.ConfigurationRuntimeService }, { type: i1$3.ConfigurationService }, { type: i2$1.QuoteService }, { type: i1.ActivatedRoute }, { type: i4$1.MessageService }, { type: undefined, decorators: [{
565
+ }], ctorParameters: function () { return [{ type: i1$3.ConfigurationRuntimeService }, { type: i1$3.ConfigurationService }, { type: i2.QuoteService }, { type: i1.ActivatedRoute }, { type: i4$1.MessageService }, { type: undefined, decorators: [{
498
566
  type: Optional
499
567
  }, {
500
568
  type: Inject,
@@ -529,7 +597,7 @@ class RecordNotFoundComponent {
529
597
  }
530
598
  }
531
599
  RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
532
- 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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
600
+ 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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
533
601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RecordNotFoundComponent, decorators: [{
534
602
  type: Component,
535
603
  args: [{
@@ -553,6 +621,93 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
553
621
  }]
554
622
  }] });
555
623
 
624
+ class ShoppingCartComponent {
625
+ constructor(templatesApi, cdr, toastService) {
626
+ this.templatesApi = templatesApi;
627
+ this.cdr = cdr;
628
+ this.toastService = toastService;
629
+ this.uiDefinition = undefined;
630
+ this.state$ = new BehaviorSubject({ loading: true, failure: false });
631
+ this.destroyed$ = new Subject();
632
+ }
633
+ ngOnInit() {
634
+ this.generateUIDefinition$()
635
+ .pipe(tap(uiDef => {
636
+ if (!uiDef) {
637
+ throw 'Not found';
638
+ }
639
+ this.uiDefinition = uiDef;
640
+ this.state$.next({ loading: false, failure: false });
641
+ }), catchError(err => {
642
+ this.uiDefinition = undefined;
643
+ this.toastService.add({ severity: ToastType.error, summary: 'Failed to resolve Shopping Cart component' });
644
+ this.state$.next({ loading: false, failure: true });
645
+ throw err;
646
+ }), takeUntil$1(this.destroyed$))
647
+ .subscribe(() => this.cdr.detectChanges());
648
+ }
649
+ ngOnDestroy() {
650
+ this.destroyed$.next();
651
+ this.destroyed$.complete();
652
+ }
653
+ getTemplateRootComponent$(template) {
654
+ return this.templatesApi
655
+ .fetchComponents$(template.id)
656
+ .pipe(map(components => { var _a; return (_a = components.find(c => c.type === UITemplateComponentType.ROOT)) !== null && _a !== void 0 ? _a : undefined; }));
657
+ }
658
+ getShoppingCartComponentMeta$() {
659
+ return this.templatesApi.fetchTemplates$().pipe(map(templates => templates.filter(template => template.type === UITemplateType.SHOPPING_CART).reverse()[0]), switchMap$1(template => (template ? this.getTemplateRootComponent$(template) : of(undefined))), switchMap$1(component => component ? this.templatesApi.fetchComponentAttachments$(component.uiTemplateId, component) : of(undefined)));
660
+ }
661
+ generateUIDefinition$() {
662
+ return this.getShoppingCartComponentMeta$().pipe(map(meta => {
663
+ if (!meta) {
664
+ return;
665
+ }
666
+ const uiDef = {
667
+ name: '',
668
+ createdTimestamp: 0,
669
+ primary: true,
670
+ type: 'DEFAULT',
671
+ version: 2,
672
+ children: [
673
+ {
674
+ children: [],
675
+ template: meta.html && btoa(meta.html),
676
+ script: meta.js && btoa(meta.js),
677
+ styles: meta.css && btoa(meta.css),
678
+ },
679
+ ],
680
+ };
681
+ return uiDef;
682
+ }));
683
+ }
684
+ }
685
+ ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2$1.ToastService }], target: i0.ɵɵFactoryTarget.Component });
686
+ 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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, decorators: [{
688
+ type: Component,
689
+ args: [{
690
+ selector: 'vl-flow-shopping-cart',
691
+ templateUrl: './shopping-cart.component.html',
692
+ styleUrls: ['./shopping-cart.component.scss'],
693
+ changeDetection: ChangeDetectionStrategy.OnPush,
694
+ }]
695
+ }], ctorParameters: function () { return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }]; } });
696
+
697
+ class ShoppingCartModule {
698
+ }
699
+ ShoppingCartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
700
+ ShoppingCartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, declarations: [ShoppingCartComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [ShoppingCartComponent] });
701
+ ShoppingCartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, imports: [[CommonModule, PreviewModule, LoaderModule]] });
702
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, decorators: [{
703
+ type: NgModule,
704
+ args: [{
705
+ declarations: [ShoppingCartComponent],
706
+ imports: [CommonModule, PreviewModule, LoaderModule],
707
+ exports: [ShoppingCartComponent],
708
+ }]
709
+ }] });
710
+
556
711
  class ContextResolver {
557
712
  constructor(contextService, router, routerService) {
558
713
  this.contextService = contextService;
@@ -581,11 +736,11 @@ class ContextResolver {
581
736
  }));
582
737
  }
583
738
  }
584
- ContextResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver, deps: [{ token: i2$1.ContextService }, { token: i1.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
739
+ ContextResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver, deps: [{ token: i2.ContextService }, { token: i1.Router }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
585
740
  ContextResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver });
586
741
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextResolver, decorators: [{
587
742
  type: Injectable
588
- }], ctorParameters: function () { return [{ type: i2$1.ContextService }, { type: i1.Router }, { type: RouterService }]; } });
743
+ }], ctorParameters: function () { return [{ type: i2.ContextService }, { type: i1.Router }, { type: RouterService }]; } });
589
744
 
590
745
  class FlowResolver {
591
746
  constructor(router, flowService, routerService) {
@@ -661,11 +816,11 @@ class QuoteResolver {
661
816
  }));
662
817
  }
663
818
  }
664
- QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver, deps: [{ token: i1.Router }, { token: i2$1.QuoteService }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
819
+ QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver, deps: [{ token: i1.Router }, { token: i2.QuoteService }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable });
665
820
  QuoteResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver });
666
821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteResolver, decorators: [{
667
822
  type: Injectable
668
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2$1.QuoteService }, { type: RouterService }]; } });
823
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.QuoteService }, { type: RouterService }]; } });
669
824
 
670
825
  const rootRoute = {
671
826
  id: VELOCE_FLOW_ROOT_ROUTE,
@@ -699,6 +854,15 @@ const rootRoute = {
699
854
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
700
855
  resolve: { context: ContextResolver, quote: QuoteResolver },
701
856
  canActivate: [ContextGuard],
857
+ data: { showHeader: true },
858
+ },
859
+ {
860
+ path: 'cart',
861
+ component: ShoppingCartComponent,
862
+ runGuardsAndResolvers: 'paramsOrQueryParamsChange',
863
+ resolve: { context: ContextResolver, quote: QuoteResolver },
864
+ canActivate: [ContextGuard],
865
+ data: { showHeader: true },
702
866
  },
703
867
  {
704
868
  path: 'debug',
@@ -713,12 +877,12 @@ const rootRoute = {
713
877
  class FlowRoutingModule {
714
878
  }
715
879
  FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
716
- FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, imports: [i1.RouterModule, ProductModule, LegacyProductModule], exports: [RouterModule] });
717
- 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], RouterModule] });
880
+ FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, imports: [i1.RouterModule, ProductModule, LegacyProductModule, ShoppingCartModule], exports: [RouterModule] });
881
+ 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] });
718
882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowRoutingModule, decorators: [{
719
883
  type: NgModule,
720
884
  args: [{
721
- imports: [RouterModule.forChild([rootRoute]), ProductModule, LegacyProductModule],
885
+ imports: [RouterModule.forChild([rootRoute]), ProductModule, LegacyProductModule, ShoppingCartModule],
722
886
  exports: [RouterModule],
723
887
  providers: [RouterService, RootGuard, ContextGuard, ContextResolver, FlowResolver, QuoteResolver],
724
888
  }]
@@ -727,13 +891,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
727
891
  class FlowModule {
728
892
  }
729
893
  FlowModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
730
- FlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowModule, declarations: [FlowComponent], imports: [CommonModule, FlowRoutingModule, ApiModule, LauncherModule, LoaderModule] });
731
- FlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowModule, providers: [FlowService, ContextService], imports: [[CommonModule, FlowRoutingModule, ApiModule, LauncherModule, LoaderModule]] });
894
+ FlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowModule, declarations: [FlowComponent], imports: [CommonModule, FlowRoutingModule, ApiModule, LauncherModule, LoaderModule, FlowHeaderModule] });
895
+ FlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowModule, providers: [FlowService, ContextService], imports: [[CommonModule, FlowRoutingModule, ApiModule, LauncherModule, LoaderModule, FlowHeaderModule]] });
732
896
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowModule, decorators: [{
733
897
  type: NgModule,
734
898
  args: [{
735
899
  declarations: [FlowComponent],
736
- imports: [CommonModule, FlowRoutingModule, ApiModule, LauncherModule, LoaderModule],
900
+ imports: [CommonModule, FlowRoutingModule, ApiModule, LauncherModule, LoaderModule, FlowHeaderModule],
737
901
  providers: [FlowService, ContextService],
738
902
  }]
739
903
  }] });