@veloceapps/sdk 11.0.0-11 → 11.0.0-111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/cms/cms.actions.d.ts +94 -29
  2. package/cms/components/element-renderer/element-renderer.component.d.ts +3 -10
  3. package/cms/components/preview/preview.component.d.ts +5 -6
  4. package/cms/components/preview/preview.types.d.ts +0 -4
  5. package/cms/services/element-context.service.d.ts +0 -1
  6. package/cms/types/common.types.d.ts +2 -0
  7. package/cms/types/index.d.ts +0 -1
  8. package/cms/utils/path.utils.d.ts +1 -2
  9. package/cms/vendor-map.d.ts +18 -40
  10. package/core/index.d.ts +1 -1
  11. package/core/modules/configuration/index.d.ts +4 -4
  12. package/core/modules/configuration/services/configuration-runtime.service.d.ts +8 -19
  13. package/core/modules/configuration/services/configuration-state.service.d.ts +8 -8
  14. package/core/modules/configuration/services/configuration.service.d.ts +24 -52
  15. package/core/modules/configuration/services/guided-selling.service.d.ts +15 -0
  16. package/core/modules/configuration/services/test-mode-configuration.service.d.ts +26 -0
  17. package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -5
  18. package/core/modules/configuration/types/configuration.types.d.ts +4 -2
  19. package/core/modules/configuration/types/index.d.ts +2 -0
  20. package/core/modules/flow-configuration/index.d.ts +0 -3
  21. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +11 -38
  22. package/core/operators/filter-successful-execute.operator.d.ts +3 -0
  23. package/core/operators/index.d.ts +1 -0
  24. package/core/services/catalog-products.service.d.ts +11 -0
  25. package/core/services/flow-info.service.d.ts +27 -12
  26. package/core/services/flow-state-configuration.service.d.ts +9 -8
  27. package/core/services/flow-state.service.d.ts +12 -24
  28. package/core/services/index.d.ts +3 -3
  29. package/core/services/integration.state.d.ts +1 -1
  30. package/core/services/product-images.service.d.ts +3 -3
  31. package/core/services/runtime-settings.service.d.ts +1 -1
  32. package/core/services/sales-transaction.service.d.ts +27 -0
  33. package/core/types/flow-customization.types.d.ts +2 -2
  34. package/core/types/flow-state.types.d.ts +2 -2
  35. package/core/types/index.d.ts +0 -1
  36. package/core/utils/index.d.ts +2 -2
  37. package/core/utils/transaction-item.utils.d.ts +7 -0
  38. package/core/utils/transaction-item.worker.d.ts +8 -0
  39. package/esm2020/cms/cms.actions.mjs +93 -71
  40. package/esm2020/cms/cms.default.mjs +2 -3
  41. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +7 -64
  42. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
  43. package/esm2020/cms/components/preview/preview.component.mjs +19 -28
  44. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  45. package/esm2020/cms/services/element-context.service.mjs +1 -1
  46. package/esm2020/cms/types/common.types.mjs +1 -1
  47. package/esm2020/cms/types/index.mjs +1 -2
  48. package/esm2020/cms/utils/element.utils.mjs +3 -3
  49. package/esm2020/cms/utils/elements-resolver.mjs +16 -5
  50. package/esm2020/cms/utils/path.utils.mjs +1 -10
  51. package/esm2020/cms/vendor-map.mjs +18 -18
  52. package/esm2020/core/core.module.mjs +7 -7
  53. package/esm2020/core/index.mjs +2 -2
  54. package/esm2020/core/modules/configuration/configuration.module.mjs +17 -4
  55. package/esm2020/core/modules/configuration/index.mjs +5 -5
  56. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +16 -101
  57. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +69 -77
  58. package/esm2020/core/modules/configuration/services/configuration.service.mjs +125 -247
  59. package/esm2020/core/modules/configuration/services/guided-selling.service.mjs +62 -0
  60. package/esm2020/core/modules/configuration/services/test-mode-configuration.service.mjs +97 -0
  61. package/esm2020/core/modules/configuration/types/configuration-runtime.types.mjs +1 -1
  62. package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
  63. package/esm2020/core/modules/configuration/types/index.mjs +3 -0
  64. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +3 -4
  65. package/esm2020/core/modules/flow-configuration/index.mjs +1 -4
  66. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +44 -128
  67. package/esm2020/core/operators/filter-successful-execute.operator.mjs +5 -0
  68. package/esm2020/core/operators/index.mjs +2 -0
  69. package/esm2020/core/services/catalog-products.service.mjs +25 -0
  70. package/esm2020/core/services/flow-info.service.mjs +82 -31
  71. package/esm2020/core/services/flow-state-configuration.service.mjs +55 -25
  72. package/esm2020/core/services/flow-state.service.mjs +58 -180
  73. package/esm2020/core/services/index.mjs +4 -4
  74. package/esm2020/core/services/integration.state.mjs +2 -2
  75. package/esm2020/core/services/product-images.service.mjs +8 -8
  76. package/esm2020/core/services/runtime-settings.service.mjs +3 -3
  77. package/esm2020/core/services/sales-transaction.service.mjs +67 -0
  78. package/esm2020/core/types/flow-customization.types.mjs +1 -1
  79. package/esm2020/core/types/flow-state.types.mjs +1 -1
  80. package/esm2020/core/types/index.mjs +1 -2
  81. package/esm2020/core/utils/index.mjs +3 -3
  82. package/esm2020/core/utils/transaction-item.utils.mjs +60 -0
  83. package/esm2020/core/utils/transaction-item.worker.mjs +16 -0
  84. package/esm2020/src/components/flow-header/flow-header.component.mjs +8 -12
  85. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +8 -12
  86. package/esm2020/src/flow-routing.module.mjs +12 -41
  87. package/esm2020/src/flow.component.mjs +5 -5
  88. package/esm2020/src/guards/flow.guard.mjs +13 -14
  89. package/esm2020/src/guards/product-unload.guard.mjs +7 -9
  90. package/esm2020/src/index.mjs +1 -3
  91. package/esm2020/src/pages/assets/assets.component.mjs +8 -9
  92. package/esm2020/src/pages/catalog/catalog.component.mjs +8 -9
  93. package/esm2020/src/pages/debug/debug.component.mjs +14 -23
  94. package/esm2020/src/pages/product/product.component.mjs +17 -91
  95. package/esm2020/src/pages/product/product.module.mjs +5 -5
  96. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +5 -6
  97. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +8 -9
  98. package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
  99. package/esm2020/src/resolvers/pcm-model.resolver.mjs +12 -0
  100. package/esm2020/src/resolvers/sales-transaction.resolver.mjs +64 -0
  101. package/esm2020/src/resolvers/ui-definition.resolver.mjs +44 -0
  102. package/esm2020/src/services/flow-dialog.service.mjs +10 -31
  103. package/esm2020/src/services/flow-router.service.mjs +16 -33
  104. package/esm2020/src/services/flow.service.mjs +15 -54
  105. package/esm2020/src/types/index.mjs +2 -3
  106. package/esm2020/src/types/route.types.mjs +1 -1
  107. package/fesm2015/veloceapps-sdk-cms.mjs +163 -309
  108. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  109. package/fesm2015/veloceapps-sdk-core.mjs +922 -1670
  110. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  111. package/fesm2015/veloceapps-sdk.mjs +197 -824
  112. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  113. package/fesm2020/veloceapps-sdk-cms.mjs +159 -300
  114. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  115. package/fesm2020/veloceapps-sdk-core.mjs +997 -1755
  116. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  117. package/fesm2020/veloceapps-sdk.mjs +197 -818
  118. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  119. package/package.json +1 -1
  120. package/src/components/flow-header/flow-header.component.d.ts +3 -3
  121. package/src/components/guided-selling/guided-selling.component.d.ts +3 -3
  122. package/src/flow-routing.module.d.ts +1 -2
  123. package/src/flow.component.d.ts +2 -2
  124. package/src/guards/product-unload.guard.d.ts +5 -6
  125. package/src/index.d.ts +0 -2
  126. package/src/pages/assets/assets.component.d.ts +3 -3
  127. package/src/pages/catalog/catalog.component.d.ts +3 -3
  128. package/src/pages/debug/debug.component.d.ts +2 -5
  129. package/src/pages/product/product.component.d.ts +6 -14
  130. package/src/pages/product/product.module.d.ts +1 -1
  131. package/src/pages/record-not-found/record-not-found.component.d.ts +2 -3
  132. package/src/pages/shopping-cart/shopping-cart.component.d.ts +3 -3
  133. package/src/resolvers/flow.resolver.d.ts +5 -6
  134. package/src/resolvers/pcm-model.resolver.d.ts +3 -0
  135. package/src/resolvers/sales-transaction.resolver.d.ts +18 -0
  136. package/src/resolvers/ui-definition.resolver.d.ts +3 -0
  137. package/src/services/flow-dialog.service.d.ts +6 -8
  138. package/src/services/flow-router.service.d.ts +4 -6
  139. package/src/services/flow.service.d.ts +3 -7
  140. package/src/types/index.d.ts +1 -2
  141. package/src/types/route.types.d.ts +0 -5
  142. package/cms/plugins/configuration.plugin.d.ts +0 -23
  143. package/cms/types/configuration.types.d.ts +0 -21
  144. package/core/modules/configuration/helpers.d.ts +0 -6
  145. package/core/modules/configuration/services/runtime-context.service.d.ts +0 -12
  146. package/core/modules/flow-configuration/services/flow-update.service.d.ts +0 -13
  147. package/core/modules/flow-configuration/types/update.types.d.ts +0 -12
  148. package/core/services/context.service.d.ts +0 -23
  149. package/core/services/quote-draft.service.d.ts +0 -50
  150. package/core/types/runtime.types.d.ts +0 -30
  151. package/core/utils/line-item.utils.d.ts +0 -25
  152. package/core/utils/line-item.worker.d.ts +0 -9
  153. package/esm2020/cms/plugins/configuration.plugin.mjs +0 -109
  154. package/esm2020/cms/types/configuration.types.mjs +0 -2
  155. package/esm2020/core/modules/configuration/helpers.mjs +0 -73
  156. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +0 -45
  157. package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +0 -138
  158. package/esm2020/core/modules/flow-configuration/types/update.types.mjs +0 -2
  159. package/esm2020/core/services/context.service.mjs +0 -91
  160. package/esm2020/core/services/quote-draft.service.mjs +0 -192
  161. package/esm2020/core/types/runtime.types.mjs +0 -16
  162. package/esm2020/core/utils/line-item.utils.mjs +0 -187
  163. package/esm2020/core/utils/line-item.worker.mjs +0 -19
  164. package/esm2020/src/guards/context.guard.mjs +0 -91
  165. package/esm2020/src/guards/index.mjs +0 -2
  166. package/esm2020/src/pages/remote/remote.component.mjs +0 -342
  167. package/esm2020/src/pages/remote/remote.module.mjs +0 -20
  168. package/esm2020/src/pages/remote/remote.types.mjs +0 -2
  169. package/esm2020/src/resolvers/quote.resolver.mjs +0 -82
  170. package/esm2020/src/types/context-route.types.mjs +0 -2
  171. package/esm2020/src/types/metrics.types.mjs +0 -2
  172. package/esm2020/src/utils/flow.utils.mjs +0 -25
  173. package/esm2020/src/utils/index.mjs +0 -2
  174. package/src/guards/context.guard.d.ts +0 -19
  175. package/src/guards/index.d.ts +0 -1
  176. package/src/pages/remote/remote.component.d.ts +0 -46
  177. package/src/pages/remote/remote.module.d.ts +0 -10
  178. package/src/pages/remote/remote.types.d.ts +0 -4
  179. package/src/resolvers/quote.resolver.d.ts +0 -19
  180. package/src/types/context-route.types.d.ts +0 -5
  181. package/src/types/metrics.types.d.ts +0 -5
  182. package/src/utils/flow.utils.d.ts +0 -8
  183. package/src/utils/index.d.ts +0 -1
@@ -2,31 +2,31 @@ import * as i4 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Component, ChangeDetectionStrategy, NgModule, Optional, Inject, Injectable, inject } from '@angular/core';
5
- import * as i1$1 from '@veloceapps/api';
6
5
  import { ApiModule } from '@veloceapps/api';
7
- import * as i2$1 from '@veloceapps/components';
6
+ import * as i2 from '@veloceapps/components';
8
7
  import { ToastType, LoaderModule, LetDirectiveModule } from '@veloceapps/components';
9
8
  import * as i5 from '@veloceapps/sdk/cms';
10
9
  import { btoaSafe, PreviewModule, FlowAction, LauncherModule } from '@veloceapps/sdk/cms';
11
- import * as i2 from '@veloceapps/sdk/core';
12
- import { FLOW_CUSTOMIZATION, ContextService, FlowStateService, FlowInfoService, QuoteDraftService, ConfigurationService, IntegrationState, SdkCoreModule } from '@veloceapps/sdk/core';
10
+ import * as i3$1 from '@veloceapps/sdk/core';
11
+ import { FLOW_CUSTOMIZATION, RuntimeSettingsService, FlowStateService, FlowInfoService, SalesTransactionService, ConfigurationService, IntegrationState, ConfigurationRuntimeService, SdkCoreModule } from '@veloceapps/sdk/core';
13
12
  import * as i3 from 'primeng/button';
14
13
  import { ButtonModule } from 'primeng/button';
15
14
  import * as i1 from 'primeng/dynamicdialog';
16
- import { BehaviorSubject, Subject, filter, first, tap, takeUntil, catchError, of, map, switchMap, shareReplay, startWith, distinctUntilChanged, from, take, combineLatest, forkJoin, throwError } from 'rxjs';
15
+ import { BehaviorSubject, Subject, filter, first, tap, takeUntil, catchError, of, map, switchMap, shareReplay, startWith, distinctUntilChanged, from, take, combineLatest } from 'rxjs';
16
+ import * as i1$1 from '@veloceapps/api/v2';
17
+ import { UIDefinitionsAdminApiService } from '@veloceapps/api/v2';
17
18
  import { DomHandler } from 'primeng/dom';
18
19
  import * as i1$2 from '@angular/router';
19
20
  import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, RouterModule } from '@angular/router';
20
- import { UITemplateType, SalesforceIdUtils, mapShoppingCartSettings, getMaxRenewalTermsValue, ConfigurationContextMode, isVeloceError, extractErrorDetails, UUID } from '@veloceapps/core';
21
+ import { SalesforceIdUtils, mapShoppingCartSettings, getMaxRenewalTermsValue, UITemplateType, isVeloceError, extractErrorDetails } from '@veloceapps/core';
21
22
  import { HttpErrorResponse, HttpParams } from '@angular/common/http';
22
- import * as i5$1 from '@angular/forms';
23
+ import * as i4$1 from '@angular/forms';
23
24
  import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
24
25
  import { DropdownModule } from 'primeng/dropdown';
25
- import * as i8 from 'primeng/inputtext';
26
+ import * as i7 from 'primeng/inputtext';
26
27
  import { InputTextModule } from 'primeng/inputtext';
27
- import * as i6 from 'primeng/radiobutton';
28
+ import * as i5$1 from 'primeng/radiobutton';
28
29
  import { RadioButtonModule } from 'primeng/radiobutton';
29
- import * as i2$2 from 'primeng/api';
30
30
  import { catchError as catchError$1 } from 'rxjs/operators';
31
31
 
32
32
  const VELOCE_FLOW_ROOT_ROUTE = 'VELOCE_FLOW_ROOT_ROUTE';
@@ -76,8 +76,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
76
76
  }] });
77
77
 
78
78
  class FlowHeaderComponent {
79
- constructor(templatesApi, flowStateService, flowInfo, toastService, customizationService) {
80
- this.templatesApi = templatesApi;
79
+ constructor(templatesAdminApiService, flowStateService, flowInfo, toastService, customizationService) {
80
+ this.templatesAdminApiService = templatesAdminApiService;
81
81
  this.flowStateService = flowStateService;
82
82
  this.flowInfo = flowInfo;
83
83
  this.toastService = toastService;
@@ -98,9 +98,6 @@ class FlowHeaderComponent {
98
98
  initialize() {
99
99
  var _a, _b, _c;
100
100
  this.templateApiName = (_c = (_b = (_a = this.flowInfo.flow) === null || _a === void 0 ? void 0 : _a.properties.templates) === null || _b === void 0 ? void 0 : _b.flowHeader) !== null && _c !== void 0 ? _c : '';
101
- if (this.flowInfo.isLegacy && !this.templateApiName) {
102
- return;
103
- }
104
101
  this.generateUIDefinition$()
105
102
  .pipe(tap(uiDef => {
106
103
  if (!uiDef) {
@@ -137,7 +134,7 @@ class FlowHeaderComponent {
137
134
  if (!template) {
138
135
  return of(undefined);
139
136
  }
140
- return this.templatesApi.fetchComponentsAttachments$(template.id);
137
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
141
138
  }
142
139
  generateUIDefinition$() {
143
140
  return of(undefined).pipe(tap(() => {
@@ -151,7 +148,6 @@ class FlowHeaderComponent {
151
148
  const uiDef = {
152
149
  name: '',
153
150
  createdTimestamp: 0,
154
- primary: true,
155
151
  type: 'DEFAULT',
156
152
  version: 2,
157
153
  children: metaList.map(meta => ({
@@ -165,13 +161,13 @@ class FlowHeaderComponent {
165
161
  }));
166
162
  }
167
163
  }
168
- FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i2.FlowStateService }, { token: i2.FlowInfoService }, { token: i2$1.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
164
+ FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
169
165
  FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowHeaderComponent, selector: "vl-flow-new-header", ngImport: i0, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
170
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, decorators: [{
171
167
  type: Component,
172
168
  args: [{ selector: 'vl-flow-new-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"] }]
173
169
  }], ctorParameters: function () {
174
- return [{ type: i1$1.UITemplatesApiService }, { type: i2.FlowStateService }, { type: i2.FlowInfoService }, { type: i2$1.ToastService }, { type: undefined, decorators: [{
170
+ return [{ type: i1$1.UITemplatesAdminApiService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }, { type: i2.ToastService }, { type: undefined, decorators: [{
175
171
  type: Optional
176
172
  }, {
177
173
  type: Inject,
@@ -194,8 +190,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
194
190
  }] });
195
191
 
196
192
  class GuidedSellingComponent {
197
- constructor(templatesApi, flowStateService, flowInfo, toastService, customizationService) {
198
- this.templatesApi = templatesApi;
193
+ constructor(templatesAdminApiService, flowStateService, flowInfo, toastService, customizationService) {
194
+ this.templatesAdminApiService = templatesAdminApiService;
199
195
  this.flowStateService = flowStateService;
200
196
  this.flowInfo = flowInfo;
201
197
  this.toastService = toastService;
@@ -216,9 +212,6 @@ class GuidedSellingComponent {
216
212
  initialize() {
217
213
  var _a, _b, _c;
218
214
  this.templateApiName = (_c = (_b = (_a = this.flowInfo.flow) === null || _a === void 0 ? void 0 : _a.properties.templates) === null || _b === void 0 ? void 0 : _b.guidedSelling) !== null && _c !== void 0 ? _c : '';
219
- if (this.flowInfo.isLegacy && !this.templateApiName) {
220
- return;
221
- }
222
215
  this.generateUIDefinition$()
223
216
  .pipe(tap(uiDef => {
224
217
  if (!uiDef) {
@@ -255,7 +248,7 @@ class GuidedSellingComponent {
255
248
  if (!template) {
256
249
  return of(undefined);
257
250
  }
258
- return this.templatesApi.fetchComponentsAttachments$(template.id);
251
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
259
252
  }
260
253
  generateUIDefinition$() {
261
254
  return of(undefined).pipe(tap(() => {
@@ -269,7 +262,6 @@ class GuidedSellingComponent {
269
262
  const uiDef = {
270
263
  name: '',
271
264
  createdTimestamp: 0,
272
- primary: true,
273
265
  type: 'DEFAULT',
274
266
  version: 2,
275
267
  children: metaList.map(meta => ({
@@ -283,13 +275,13 @@ class GuidedSellingComponent {
283
275
  }));
284
276
  }
285
277
  }
286
- GuidedSellingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i2.FlowStateService }, { token: i2.FlowInfoService }, { token: i2$1.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
278
+ GuidedSellingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
287
279
  GuidedSellingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: GuidedSellingComponent, selector: "vl-flow-guided-selling", ngImport: i0, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
288
280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, decorators: [{
289
281
  type: Component,
290
282
  args: [{ selector: 'vl-flow-guided-selling', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"] }]
291
283
  }], ctorParameters: function () {
292
- return [{ type: i1$1.UITemplatesApiService }, { type: i2.FlowStateService }, { type: i2.FlowInfoService }, { type: i2$1.ToastService }, { type: undefined, decorators: [{
284
+ return [{ type: i1$1.UITemplatesAdminApiService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }, { type: i2.ToastService }, { type: undefined, decorators: [{
293
285
  type: Optional
294
286
  }, {
295
287
  type: Inject,
@@ -344,13 +336,11 @@ const configurePrimengShadowDOM = () => {
344
336
  };
345
337
 
346
338
  class FlowRouterService {
347
- constructor(router, route, contextService, integrationState, flowInfoService, flowStateService) {
339
+ constructor(router, route, integrationState, flowInfoService) {
348
340
  this.router = router;
349
341
  this.route = route;
350
- this.contextService = contextService;
351
342
  this.integrationState = integrationState;
352
343
  this.flowInfoService = flowInfoService;
353
- this.flowStateService = flowStateService;
354
344
  this.urlHistory = [];
355
345
  this.getLastChildRoute = (route) => {
356
346
  return route.firstChild ? this.getLastChildRoute(route.firstChild) : route;
@@ -445,7 +435,7 @@ class FlowRouterService {
445
435
  this.router.navigateByUrl(prevUrl);
446
436
  }
447
437
  }
448
- navigateTo(path, productId, lineItemId) {
438
+ navigateTo(path, productId, transactionItemId) {
449
439
  if (path === 'shopping-cart') {
450
440
  this.navigateToShoppingCart();
451
441
  }
@@ -456,31 +446,16 @@ class FlowRouterService {
456
446
  this.navigateToAssets();
457
447
  }
458
448
  else if (path === 'product' && productId) {
459
- this.navigateToProductConfiguration(productId, lineItemId);
449
+ this.navigateToProductConfiguration(productId, transactionItemId);
460
450
  }
461
451
  }
462
- navigateToProductConfiguration(productId, lineItemId) {
463
- let updateContext$;
464
- if (this.flowInfoService.isLegacy) {
465
- updateContext$ = of(undefined).pipe(tap(() => {
466
- this.contextService.update({ properties: { productId, lineItemId: lineItemId !== null && lineItemId !== void 0 ? lineItemId : '' } });
467
- }));
468
- }
469
- else {
470
- updateContext$ = this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_CONTEXT_PROPERTIES', {
471
- productId,
472
- lineItemId: lineItemId !== null && lineItemId !== void 0 ? lineItemId : '',
473
- });
474
- }
475
- updateContext$
476
- .pipe(tap(() => {
477
- const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
478
- const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
479
- this.router.navigate([flowRouteUrl, 'product'], {
480
- queryParams: Object.assign(Object.assign({}, routeSnapshot.queryParams), { productId }),
481
- });
482
- }))
483
- .subscribe();
452
+ navigateToProductConfiguration(productId, transactionItemId) {
453
+ this.flowInfoService.updateContext({ productId, transactionItemId });
454
+ const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
455
+ const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
456
+ this.router.navigate([flowRouteUrl, 'product'], {
457
+ queryParams: Object.assign(Object.assign({}, routeSnapshot.queryParams), { productId, transactionItemId }),
458
+ });
484
459
  }
485
460
  navigateToShoppingCart() {
486
461
  const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
@@ -517,18 +492,18 @@ class FlowRouterService {
517
492
  this.router.navigate([], { relativeTo: route, queryParams: Object.assign(Object.assign({}, routeSnapshot.queryParams), queryParams) });
518
493
  }
519
494
  }
520
- FlowRouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.ContextService }, { token: i2.IntegrationState }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
495
+ FlowRouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i3$1.IntegrationState }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
521
496
  FlowRouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, providedIn: 'root' });
522
497
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, decorators: [{
523
498
  type: Injectable,
524
499
  args: [{ providedIn: 'root' }]
525
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.ContextService }, { type: i2.IntegrationState }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }]; } });
500
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i3$1.IntegrationState }, { type: i3$1.FlowInfoService }]; } });
526
501
 
527
502
  class FlowDialogService {
528
- constructor(dialogService, contextService, runtimeSettings) {
503
+ constructor(dialogService, runtimeSettings, flowInfoService) {
529
504
  this.dialogService = dialogService;
530
- this.contextService = contextService;
531
505
  this.runtimeSettings = runtimeSettings;
506
+ this.flowInfoService = flowInfoService;
532
507
  }
533
508
  show(config) {
534
509
  return this.dialogService.open(FlowDialogComponent, {
@@ -550,8 +525,8 @@ class FlowDialogService {
550
525
  }
551
526
  showReadonlyModeDialog() {
552
527
  var _a;
553
- const ctx = this.contextService.resolve();
554
- const objectName = ctx.mode ? ((_a = ctx.mode[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase()) + ctx.mode.substring(1).toLowerCase() : 'Object';
528
+ const mode = this.flowInfoService.context.mode;
529
+ const objectName = mode ? ((_a = mode[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase()) + mode.substring(1).toLowerCase() : 'Object';
555
530
  return this.show({
556
531
  title: 'Error',
557
532
  description: `${objectName} Cannot be Saved`,
@@ -565,10 +540,10 @@ class FlowDialogService {
565
540
  primaryButton: 'Ok',
566
541
  });
567
542
  }
568
- showQuoteOutsideShoppingCartDialog() {
543
+ showQuoteInConfiguratorDialog() {
569
544
  return this.show({
570
545
  title: 'Quote Cannot be Saved',
571
- description: 'It is only possible to save quotes from the Shopping Cart. To proceed, go to the Shopping Cart.',
546
+ description: 'It not possible to save quotes from the Configurator. To proceed, finish configuring product.',
572
547
  primaryButton: 'Ok',
573
548
  });
574
549
  }
@@ -588,27 +563,6 @@ class FlowDialogService {
588
563
  oppositeButtonActions: true,
589
564
  });
590
565
  }
591
- showReadonlyQuoteSubmitFailureDialog() {
592
- return this.show({
593
- title: 'Cannot Submit for Approval',
594
- description: 'It is only possible to submit for approval quotes with the “Draft“ status. Please create a new quote to proceed.',
595
- primaryButton: 'Ok',
596
- });
597
- }
598
- showOutsideShoppingCartQuoteSubmitFailureDialog() {
599
- return this.show({
600
- title: 'Cannot Submit for Approval',
601
- description: 'It is only possible to submit quotes for approval from the Shopping Cart. To proceed, go to the Shopping Cart.',
602
- primaryButton: 'Ok',
603
- });
604
- }
605
- showAccountSubmitFailureDialog() {
606
- return this.show({
607
- title: 'Save Changes',
608
- description: 'To submit for approval, save the quote first, and then submit it for approval from the Shopping Cart.',
609
- primaryButton: 'Ok',
610
- });
611
- }
612
566
  showTermsLimitReachedDialog() {
613
567
  const shoppingCartSettings = mapShoppingCartSettings(this.runtimeSettings.getShoppingCartSettings() || []);
614
568
  const maxRenewalTerms = getMaxRenewalTermsValue(shoppingCartSettings);
@@ -623,23 +577,21 @@ class FlowDialogService {
623
577
  return dialogFunction(dialog);
624
578
  }
625
579
  }
626
- FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i2.ContextService }, { token: i2.RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
580
+ FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i3$1.RuntimeSettingsService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
627
581
  FlowDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService });
628
582
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, decorators: [{
629
583
  type: Injectable
630
- }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.ContextService }, { type: i2.RuntimeSettingsService }]; } });
584
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i3$1.RuntimeSettingsService }, { type: i3$1.FlowInfoService }]; } });
631
585
 
632
586
  class FlowService {
633
- constructor(integrationState, flowRouterService, quoteDraftService, configurationService, configurationStateService, flowDialogService, flowConfigurationService, flowInfoService, flowStateService) {
587
+ constructor(integrationState, flowRouterService, configurationService, configurationStateService, flowDialogService, flowStateService, flowInfoService) {
634
588
  this.integrationState = integrationState;
635
589
  this.flowRouterService = flowRouterService;
636
- this.quoteDraftService = quoteDraftService;
637
590
  this.configurationService = configurationService;
638
591
  this.configurationStateService = configurationStateService;
639
592
  this.flowDialogService = flowDialogService;
640
- this.flowConfigurationService = flowConfigurationService;
641
- this.flowInfoService = flowInfoService;
642
593
  this.flowStateService = flowStateService;
594
+ this.flowInfoService = flowInfoService;
643
595
  this.cleanup$ = new Subject();
644
596
  }
645
597
  cleanup() {
@@ -648,16 +600,10 @@ class FlowService {
648
600
  initSubscriptions() {
649
601
  this.integrationState
650
602
  .listen$(FlowAction.FLOW_CONFIGURE_PRODUCT)
651
- .pipe(switchMap(payload => {
652
- var _a, _b;
653
- if (this.flowInfoService.isLegacy) {
654
- const productId = (_a = payload.productId) !== null && _a !== void 0 ? _a : (_b = this.quoteDraftService.currentState.find(li => li.id === payload.lineItemId)) === null || _b === void 0 ? void 0 : _b.productId;
655
- return of(Object.assign(Object.assign({}, payload), { productId }));
656
- }
657
- return this.prepareConfiguration$(payload.lineItemId).pipe(map(() => payload));
658
- }), tap(payload => {
603
+ .pipe(tap(payload => {
659
604
  if (payload.productId) {
660
- this.flowRouterService.navigateToProductConfiguration(payload.productId, payload.lineItemId);
605
+ this.flowInfoService.updateContext({ newProductQty: payload.qty });
606
+ this.flowRouterService.navigateToProductConfiguration(payload.productId, payload.transactionItemId);
661
607
  }
662
608
  else {
663
609
  console.warn("Parameter 'productId' is needed to start configuration");
@@ -681,7 +627,7 @@ class FlowService {
681
627
  this.integrationState.dispatch(FlowAction.ConfigureProductAction(payload));
682
628
  }
683
629
  else {
684
- this.flowRouterService.navigateTo(payload.path, payload.productId, payload.lineItemId);
630
+ this.flowRouterService.navigateTo(payload.path, payload.productId, payload.transactionItemId);
685
631
  }
686
632
  }), takeUntil(this.cleanup$))
687
633
  .subscribe();
@@ -701,17 +647,10 @@ class FlowService {
701
647
  .subscribe();
702
648
  this.integrationState
703
649
  .listen$(FlowAction.FLOW_APPLY_PRODUCT_CONFIGURATION)
704
- .pipe(switchMap(() => {
705
- if (this.flowInfoService.isLegacy) {
706
- return this.legacyApplyConfiguration();
707
- }
708
- else {
709
- return this.configurationStateService.saveConfiguration(true).pipe(switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
710
- addConfiguringAssetId: true,
711
- enable: true,
712
- })));
713
- }
714
- }), tap(() => {
650
+ .pipe(switchMap(() => this.configurationStateService.saveConfiguration()), switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
651
+ addConfiguringAssetId: true,
652
+ enable: true,
653
+ })), tap(() => {
715
654
  this.configurationService.hasUnsavedChanges = false;
716
655
  this.flowRouterService.navigateToShoppingCart();
717
656
  }), takeUntil(this.cleanup$))
@@ -727,36 +666,12 @@ class FlowService {
727
666
  .pipe(map(path => path.queryParams['productId']), takeUntil(this.cleanup$))
728
667
  .subscribe(productId => this.integrationState.patchState({ productId }));
729
668
  }
730
- prepareConfiguration$(lineItemId) {
731
- if (!lineItemId) {
732
- return of(undefined);
733
- }
734
- return this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_PRICE_LIST', {
735
- lineItemId,
736
- });
737
- }
738
- legacyApplyConfiguration() {
739
- const quoteDraft = this.quoteDraftService.quoteDraft;
740
- const lineItem = this.configurationService.getSnapshot();
741
- if (!quoteDraft || !lineItem) {
742
- return of(undefined);
743
- }
744
- const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
745
- let updatedState;
746
- if (isNewLineItem) {
747
- updatedState = [...quoteDraft.currentState, lineItem];
748
- }
749
- else {
750
- updatedState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
751
- }
752
- return this.flowConfigurationService.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }));
753
- }
754
669
  }
755
- FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: FlowDialogService }, { token: i2.FlowConfigurationService }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
670
+ FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token: i3$1.ConfigurationService }, { token: i3$1.ConfigurationStateService }, { token: FlowDialogService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
756
671
  FlowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService });
757
672
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, decorators: [{
758
673
  type: Injectable
759
- }], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: FlowDialogService }, { type: i2.FlowConfigurationService }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }]; } });
674
+ }], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type: i3$1.ConfigurationService }, { type: i3$1.ConfigurationStateService }, { type: FlowDialogService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }]; } });
760
675
 
761
676
  class FlowGuidedSellingService {
762
677
  constructor(integrationState) {
@@ -780,21 +695,21 @@ class FlowGuidedSellingService {
780
695
  .subscribe();
781
696
  }
782
697
  }
783
- FlowGuidedSellingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, deps: [{ token: i2.IntegrationState }], target: i0.ɵɵFactoryTarget.Injectable });
698
+ FlowGuidedSellingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, deps: [{ token: i3$1.IntegrationState }], target: i0.ɵɵFactoryTarget.Injectable });
784
699
  FlowGuidedSellingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService });
785
700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, decorators: [{
786
701
  type: Injectable
787
- }], ctorParameters: function () { return [{ type: i2.IntegrationState }]; } });
702
+ }], ctorParameters: function () { return [{ type: i3$1.IntegrationState }]; } });
788
703
 
789
704
  class FlowComponent {
790
- constructor(routerService, flowService, flowInfo, guidedSellingService) {
705
+ constructor(routerService, flowService, flowInfoService, guidedSellingService) {
791
706
  this.routerService = routerService;
792
707
  this.flowService = flowService;
793
- this.flowInfo = flowInfo;
708
+ this.flowInfoService = flowInfoService;
794
709
  this.guidedSellingService = guidedSellingService;
795
710
  this.isLoading$ = this.routerService.loading$;
796
- this.showHeader$ = combineLatest([this.routerService.route$, this.flowInfo.flow$]).pipe(map(([route, flow]) => route.data['showHeader'] && !(flow === null || flow === void 0 ? void 0 : flow.properties.standalone)));
797
- this.isStandalone$ = this.flowInfo.flow$.pipe(map(flow => Boolean(flow === null || flow === void 0 ? void 0 : flow.properties.standalone)));
711
+ this.showHeader$ = combineLatest([this.routerService.route$, this.flowInfoService.flow$]).pipe(map(([route, flow]) => route.data['showHeader'] && !(flow === null || flow === void 0 ? void 0 : flow.properties.standalone)));
712
+ this.isStandalone$ = this.flowInfoService.flow$.pipe(map(flow => Boolean(flow === null || flow === void 0 ? void 0 : flow.properties.standalone)));
798
713
  this.guidedSellingVisible$ = this.guidedSellingService.isVisible$;
799
714
  this.flowService.initSubscriptions();
800
715
  }
@@ -802,135 +717,36 @@ class FlowComponent {
802
717
  this.flowService.cleanup();
803
718
  }
804
719
  }
805
- FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, deps: [{ token: FlowRouterService }, { token: FlowService }, { token: i2.FlowInfoService }, { token: FlowGuidedSellingService }], target: i0.ɵɵFactoryTarget.Component });
806
- FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "component", type: FlowHeaderComponent, selector: "vl-flow-new-header" }, { kind: "component", type: GuidedSellingComponent, selector: "vl-flow-guided-selling" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
720
+ FlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, deps: [{ token: FlowRouterService }, { token: FlowService }, { token: i3$1.FlowInfoService }, { token: FlowGuidedSellingService }], target: i0.ɵɵFactoryTarget.Component });
721
+ FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "component", type: FlowHeaderComponent, selector: "vl-flow-new-header" }, { kind: "component", type: GuidedSellingComponent, selector: "vl-flow-guided-selling" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
807
722
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, decorators: [{
808
723
  type: Component,
809
724
  args: [{ selector: 'vl-flow', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"] }]
810
- }], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type: i2.FlowInfoService }, { type: FlowGuidedSellingService }]; } });
811
-
812
- const getFlowObjectIdPropertyName = (id) => {
813
- const objectName = SalesforceIdUtils.getSfObjectNameById(id);
814
- switch (objectName) {
815
- case 'Account':
816
- return 'accountId';
817
- case 'Order':
818
- return 'orderId';
819
- case 'Quote':
820
- default:
821
- return 'quoteId';
822
- }
823
- };
824
- const getDefaultProperties = (params) => {
825
- var _a, _b;
826
- const properties = {};
827
- let standalone = (_a = params.flowParams) === null || _a === void 0 ? void 0 : _a.standalone;
828
- if (((_b = params.flowParams) === null || _b === void 0 ? void 0 : _b.entryPath.includes('/product')) || params.mode === ConfigurationContextMode.REMOTE) {
829
- standalone = standalone !== null && standalone !== void 0 ? standalone : true;
830
- }
831
- if (standalone != null) {
832
- properties.standalone = standalone ? 'true' : 'false';
833
- }
834
- return properties;
835
- };
836
-
837
- class ContextGuard {
838
- constructor(router, routerService, contextService, runtimeSettingsService) {
839
- this.router = router;
840
- this.routerService = routerService;
841
- this.contextService = contextService;
842
- this.runtimeSettingsService = runtimeSettingsService;
843
- }
844
- checkActivation(route) {
845
- const { queryParams } = route;
846
- const { accountId, quoteId, orderId } = queryParams;
847
- const rpcMessage = window.RPC_MESSAGE;
848
- const mode = this.getConfigurationContextMode(accountId, quoteId, orderId, rpcMessage);
849
- // Restrict if mode is not defined
850
- if (mode == null) {
851
- return this.routerService.showErrorPage$('Mode is undefined');
852
- }
853
- const headerId = accountId || quoteId || orderId || this.rpcMessageId || 'empty-for-test-mode';
854
- // Allow if context is already initialized with the same headerId
855
- if (this.contextService.isInitialized) {
856
- const currentContext = this.contextService.resolve();
857
- if (headerId && currentContext.headerId === headerId) {
858
- return of(true);
859
- }
860
- }
861
- // Initialize context and runtime settings
862
- return forkJoin([this.contextService.create(headerId, mode), this.runtimeSettingsService.create()]).pipe(tap(([context]) => {
863
- this.contextService.update(Object.assign(Object.assign({}, context), { properties: Object.assign(Object.assign(Object.assign({}, context.properties), (queryParams !== null && queryParams !== void 0 ? queryParams : {})), getDefaultProperties({ mode })) }));
864
- // Init currency settings
865
- this.runtimeSettingsService.initCurrency(context.properties['CurrencyIsoCode']);
866
- }), map(() => true), catchError(e => {
867
- const message = e instanceof HttpErrorResponse ? e.error.message : e;
868
- const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
869
- return this.routerService.showErrorPage$(message, errorDetails);
870
- }));
871
- }
872
- canActivate(route) {
873
- return this.checkActivation(route);
874
- }
875
- canActivateChild(childRoute) {
876
- return this.checkActivation(childRoute);
877
- }
878
- get rpcMessageId() {
879
- var _a, _b;
880
- if (!window.RPC_MESSAGE) {
881
- return;
882
- }
883
- const rpcMessage = JSON.parse(window.RPC_MESSAGE);
884
- const veloceReferenceId = (_a = rpcMessage.configuration) === null || _a === void 0 ? void 0 : _a.VeloceReferenceId;
885
- const quoteId = (_b = rpcMessage.quote) === null || _b === void 0 ? void 0 : _b.Id;
886
- return veloceReferenceId || quoteId;
887
- }
888
- getConfigurationContextMode(accountId, quoteId, orderId, rpcMessage) {
889
- if (accountId) {
890
- return ConfigurationContextMode.ACCOUNT;
891
- }
892
- if (quoteId) {
893
- return ConfigurationContextMode.QUOTE;
894
- }
895
- if (orderId) {
896
- return ConfigurationContextMode.ORDER;
897
- }
898
- if (rpcMessage) {
899
- return ConfigurationContextMode.REMOTE;
900
- }
901
- return;
902
- }
903
- }
904
- ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
905
- ContextGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard });
906
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard, decorators: [{
907
- type: Injectable
908
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.RuntimeSettingsService }]; } });
725
+ }], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type: i3$1.FlowInfoService }, { type: FlowGuidedSellingService }]; } });
909
726
 
910
727
  const keepFlowInitialized = (route) => {
911
- const contextService = inject(ContextService);
728
+ const routerService = inject(FlowRouterService);
729
+ const runtimeSettingsService = inject(RuntimeSettingsService);
912
730
  const flowState = inject(FlowStateService);
913
731
  const flowInfoService = inject(FlowInfoService);
914
- const routerService = inject(FlowRouterService);
915
- const quoteDraft = inject(QuoteDraftService);
732
+ const salesTrasnsactionService = inject(SalesTransactionService);
916
733
  const configurationService = inject(ConfigurationService);
917
734
  const integrationState = inject(IntegrationState);
918
735
  const { flowId } = route.queryParams;
919
- const flow = flowInfoService.flow;
920
- if (flow && (flow === null || flow === void 0 ? void 0 : flow.id) === flowId) {
736
+ if (flowInfoService.isFlowInitialized && flowInfoService.flow.id === flowId) {
921
737
  return true;
922
738
  }
923
739
  // Cleanup
924
- flowState.cleanup();
925
- quoteDraft.reset();
740
+ flowState.reset();
741
+ salesTrasnsactionService.reset();
926
742
  configurationService.reset();
927
- integrationState.clear();
928
- flowInfoService.cleanup();
929
- contextService.delete();
743
+ integrationState.reset();
744
+ flowInfoService.reset();
930
745
  if (!flowId) {
931
746
  return true;
932
747
  }
933
- return flowInfoService.init$(flowId, route.queryParams).pipe(map(() => true), catchError(e => {
748
+ return runtimeSettingsService.create().pipe(tap(() => runtimeSettingsService.initCurrency('USD')), switchMap(() => flowInfoService.init$(flowId, route.queryParams)), map(() => true), catchError(e => {
749
+ console.error(e);
934
750
  const message = e instanceof HttpErrorResponse ? e.error.message : e;
935
751
  const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
936
752
  return routerService.showErrorPage$(message, errorDetails);
@@ -938,22 +754,20 @@ const keepFlowInitialized = (route) => {
938
754
  };
939
755
 
940
756
  class ProductUnloadGuard {
941
- constructor(router, contextService, quoteDraftService, configurationService, flowDialogService) {
757
+ constructor(router, flowInfoService, configurationService, flowDialogService) {
942
758
  this.router = router;
943
- this.contextService = contextService;
944
- this.quoteDraftService = quoteDraftService;
759
+ this.flowInfoService = flowInfoService;
945
760
  this.configurationService = configurationService;
946
761
  this.flowDialogService = flowDialogService;
947
762
  }
948
763
  canDeactivate(_, route, currentState, nextState) {
949
764
  let observable = of(true);
950
- if (!this.quoteDraftService.isStandalone && this.configurationService.hasUnsavedChanges) {
765
+ if (!this.flowInfoService.flow.properties.standalone && this.configurationService.hasUnsavedChanges) {
951
766
  observable = this.flowDialogService.showUnsavedChangesDialog();
952
767
  }
953
768
  return observable.pipe(map(unload => {
954
769
  if (unload) {
955
770
  this.configurationService.reset();
956
- this.contextService.update({ properties: { productId: undefined, lineItemId: undefined } });
957
771
  if (!nextState || currentState.url === nextState.url) {
958
772
  return true;
959
773
  }
@@ -971,11 +785,11 @@ class ProductUnloadGuard {
971
785
  }));
972
786
  }
973
787
  }
974
- ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token: i2.ContextService }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationService }, { token: FlowDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
788
+ ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token: i3$1.FlowInfoService }, { token: i3$1.ConfigurationService }, { token: FlowDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
975
789
  ProductUnloadGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard });
976
790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, decorators: [{
977
791
  type: Injectable
978
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.ContextService }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationService }, { type: FlowDialogService }]; } });
792
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i3$1.FlowInfoService }, { type: i3$1.ConfigurationService }, { type: FlowDialogService }]; } });
979
793
 
980
794
  class RootGuard {
981
795
  constructor(router, routerService) {
@@ -1018,9 +832,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1018
832
  }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }]; } });
1019
833
 
1020
834
  class AssetsComponent {
1021
- constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
835
+ constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
1022
836
  var _a, _b, _c;
1023
- this.templatesApi = templatesApi;
837
+ this.templatesAdminApiService = templatesAdminApiService;
1024
838
  this.cdr = cdr;
1025
839
  this.toastService = toastService;
1026
840
  this.flowInfo = flowInfo;
@@ -1075,7 +889,7 @@ class AssetsComponent {
1075
889
  if (!template) {
1076
890
  return of(undefined);
1077
891
  }
1078
- return this.templatesApi.fetchComponentsAttachments$(template.id);
892
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
1079
893
  }
1080
894
  generateUIDefinition$() {
1081
895
  return of(undefined).pipe(tap(() => {
@@ -1089,7 +903,6 @@ class AssetsComponent {
1089
903
  const uiDef = {
1090
904
  name: '',
1091
905
  createdTimestamp: 0,
1092
- primary: true,
1093
906
  type: 'DEFAULT',
1094
907
  version: 2,
1095
908
  children: metaList.map(meta => ({
@@ -1103,13 +916,13 @@ class AssetsComponent {
1103
916
  }));
1104
917
  }
1105
918
  }
1106
- AssetsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2$1.ToastService }, { token: i2.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1107
- AssetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AssetsComponent, selector: "vl-flow-assets", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
919
+ AssetsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3$1.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
920
+ AssetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AssetsComponent, selector: "vl-flow-assets", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1108
921
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, decorators: [{
1109
922
  type: Component,
1110
923
  args: [{ selector: 'vl-flow-assets', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1111
924
  }], ctorParameters: function () {
1112
- return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: i2.FlowInfoService }, { type: undefined, decorators: [{
925
+ return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
1113
926
  type: Optional
1114
927
  }, {
1115
928
  type: Inject,
@@ -1132,9 +945,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1132
945
  }] });
1133
946
 
1134
947
  class CatalogComponent {
1135
- constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
948
+ constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
1136
949
  var _a, _b, _c;
1137
- this.templatesApi = templatesApi;
950
+ this.templatesAdminApiService = templatesAdminApiService;
1138
951
  this.cdr = cdr;
1139
952
  this.toastService = toastService;
1140
953
  this.flowInfo = flowInfo;
@@ -1189,7 +1002,7 @@ class CatalogComponent {
1189
1002
  if (!template) {
1190
1003
  return of(undefined);
1191
1004
  }
1192
- return this.templatesApi.fetchComponentsAttachments$(template.id);
1005
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
1193
1006
  }
1194
1007
  generateUIDefinition$() {
1195
1008
  return of(undefined).pipe(tap(() => {
@@ -1203,7 +1016,6 @@ class CatalogComponent {
1203
1016
  const uiDef = {
1204
1017
  name: '',
1205
1018
  createdTimestamp: 0,
1206
- primary: true,
1207
1019
  type: 'DEFAULT',
1208
1020
  version: 2,
1209
1021
  children: metaList.map(meta => ({
@@ -1217,13 +1029,13 @@ class CatalogComponent {
1217
1029
  }));
1218
1030
  }
1219
1031
  }
1220
- CatalogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2$1.ToastService }, { token: i2.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1221
- CatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CatalogComponent, selector: "vl-flow-catalog", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1032
+ CatalogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3$1.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1033
+ CatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CatalogComponent, selector: "vl-flow-catalog", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1222
1034
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, decorators: [{
1223
1035
  type: Component,
1224
1036
  args: [{ selector: 'vl-flow-catalog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1225
1037
  }], ctorParameters: function () {
1226
- return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: i2.FlowInfoService }, { type: undefined, decorators: [{
1038
+ return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
1227
1039
  type: Optional
1228
1040
  }, {
1229
1041
  type: Inject,
@@ -1246,12 +1058,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1246
1058
  }] });
1247
1059
 
1248
1060
  class DebugComponent {
1249
- constructor(flowsApiService, router, activatedRoute, context, quoteDraftService) {
1061
+ constructor(flowsApiService, router, activatedRoute) {
1250
1062
  this.flowsApiService = flowsApiService;
1251
1063
  this.router = router;
1252
1064
  this.activatedRoute = activatedRoute;
1253
- this.context = context;
1254
- this.quoteDraftService = quoteDraftService;
1255
1065
  this.form = new FormGroup({
1256
1066
  id: new FormControl(''),
1257
1067
  });
@@ -1259,15 +1069,11 @@ class DebugComponent {
1259
1069
  }
1260
1070
  runFlow() {
1261
1071
  const { id } = this.form.value;
1262
- const objectPropertyName = id && getFlowObjectIdPropertyName(id);
1263
- if (!id || !objectPropertyName || !this.selectedFlow) {
1072
+ if (!id || !this.selectedFlow) {
1264
1073
  return;
1265
1074
  }
1266
- // Delete context before starting a new flow
1267
- this.context.delete();
1268
- this.quoteDraftService.reset();
1269
1075
  this.router.navigate(['..', 'flows'], {
1270
- queryParams: Object.assign({ flowId: this.selectedFlow.id, [objectPropertyName]: id }, this.selectedFlow.properties.queryParams),
1076
+ queryParams: Object.assign({ flowId: this.selectedFlow.id, headerId: id }, this.selectedFlow.properties.queryParams),
1271
1077
  relativeTo: this.activatedRoute,
1272
1078
  });
1273
1079
  }
@@ -1275,12 +1081,12 @@ class DebugComponent {
1275
1081
  return new HttpParams({ fromObject: params }).toString();
1276
1082
  }
1277
1083
  }
1278
- DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$1.FlowsApiService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.ContextService }, { token: i2.QuoteDraftService }], target: i0.ɵɵFactoryTarget.Component });
1279
- DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DebugComponent, selector: "vl-flow-debug", ngImport: i0, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i8.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1084
+ DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$1.FlowsApiService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
1085
+ DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DebugComponent, selector: "vl-flow-debug", ngImport: i0, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5$1.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1280
1086
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, decorators: [{
1281
1087
  type: Component,
1282
1088
  args: [{ selector: 'vl-flow-debug', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"] }]
1283
- }], ctorParameters: function () { return [{ type: i1$1.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.ContextService }, { type: i2.QuoteDraftService }]; } });
1089
+ }], ctorParameters: function () { return [{ type: i1$1.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; } });
1284
1090
 
1285
1091
  const routes$1 = [{ path: '', component: DebugComponent }];
1286
1092
  class DebugModule {
@@ -1318,127 +1124,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1318
1124
  }] });
1319
1125
 
1320
1126
  class ProductComponent {
1321
- constructor(contextService, configurationRuntimeService, configurationService, configurationStateService, quoteDraftService, flowInfoService, flowStateService, integrationState, customizationService) {
1322
- this.contextService = contextService;
1127
+ constructor(configurationRuntimeService, configurationStateService) {
1323
1128
  this.configurationRuntimeService = configurationRuntimeService;
1324
- this.configurationService = configurationService;
1325
1129
  this.configurationStateService = configurationStateService;
1326
- this.quoteDraftService = quoteDraftService;
1327
- this.flowInfoService = flowInfoService;
1328
- this.flowStateService = flowStateService;
1329
- this.integrationState = integrationState;
1330
- this.customizationService = customizationService;
1331
- this.uiDefinition$ = new BehaviorSubject(undefined);
1130
+ this.uiDefinitionContainer$ = new BehaviorSubject(null);
1131
+ this.showNotFound$ = new BehaviorSubject(false);
1132
+ this.uiDefinitionContainer$.next(this.configurationRuntimeService.uiDefinitionContainer);
1332
1133
  this.config = {
1333
1134
  init$: () => this.init$(),
1334
1135
  };
1335
1136
  }
1336
- customizeUI$() {
1337
- var _a, _b;
1338
- const { productId } = (_a = this.configurationRuntimeService.runtimeContext) !== null && _a !== void 0 ? _a : {};
1339
- if (!productId || !((_b = this.customizationService) === null || _b === void 0 ? void 0 : _b.getUiDefinition)) {
1340
- return of(undefined);
1341
- }
1342
- return this.customizationService.getUiDefinition(productId).pipe(map(uiDefinitionContainer => {
1343
- if (uiDefinitionContainer) {
1344
- this.configurationRuntimeService.overrideUIDefinition(uiDefinitionContainer);
1345
- }
1346
- }));
1347
- }
1348
1137
  init$() {
1349
- let quoteDraft$;
1350
- if (this.flowInfoService.isLegacy || !this.flowInfoService.isStateful) {
1351
- quoteDraft$ = this.quoteDraftService.quoteDraft$;
1352
- }
1353
- else {
1354
- quoteDraft$ = of(undefined);
1355
- }
1356
- return quoteDraft$.pipe(first(), switchMap(quote => {
1357
- var _a, _b, _c, _d;
1358
- const contextProperties = this.contextService.resolve().properties;
1359
- const productId = (_a = contextProperties.productId) !== null && _a !== void 0 ? _a : (_b = this.flowInfoService.flow) === null || _b === void 0 ? void 0 : _b.properties.queryParams['productId'];
1360
- const defaultUIDefinitionId = (_c = this.flowInfoService.flow) === null || _c === void 0 ? void 0 : _c.properties.queryParams['defaultUIDefinitionId'];
1361
- const requiredUIDefinitionId = (_d = this.flowInfoService.flow) === null || _d === void 0 ? void 0 : _d.properties.queryParams['requiredUIDefinitionId'];
1362
- if (!productId) {
1363
- throw new Error(`Unable to start configuration for 'productId == null'`);
1364
- }
1365
- if (!quote) {
1366
- const offeringId = contextProperties.offeringId;
1367
- return this.configurationRuntimeService.init({ productId, offeringId });
1368
- }
1369
- const lineItem = this.getLineItem(quote, productId, contextProperties.lineItemId);
1370
- if (lineItem) {
1371
- this.configurationService.setConfigurableRamp(lineItem);
1372
- }
1373
- const { offeringId } = lineItem !== null && lineItem !== void 0 ? lineItem : {};
1374
- return this.configurationRuntimeService.init({
1375
- productId,
1376
- offeringId,
1377
- defaultUIDefinitionId,
1378
- requiredUIDefinitionId,
1379
- });
1380
- }), switchMap(() => this.customizeUI$()), tap(() => {
1381
- var _a, _b;
1382
- const uiDefinition = (_b = (_a = this.configurationRuntimeService.runtimeContext) === null || _a === void 0 ? void 0 : _a.uiDefinitionContainer) === null || _b === void 0 ? void 0 : _b.source;
1383
- if (uiDefinition) {
1384
- this.uiDefinition$.next(uiDefinition);
1385
- }
1386
- else {
1387
- throw new Error('Product does not have Configuration UI');
1388
- }
1389
- }), tap(() => {
1390
- if (this.configurationRuntimeService.initializationProps) {
1391
- this.configurationRuntimeService.initializationProps.attributesMap =
1392
- this.integrationState.state.guidedSelling;
1393
- }
1394
- }), switchMap(() => this.configurationStateService.init$()));
1395
- }
1396
- getLineItem(quote, productId, lineItemId) {
1397
- var _a;
1398
- // search by lineItemId first
1399
- let li = quote.currentState.find(li => li.id === lineItemId);
1400
- if (!li && this.quoteDraftService.isStandalone) {
1401
- li = quote.currentState.find(li => li.productId === productId);
1402
- }
1403
- // If still not found, is could be an asset
1404
- if (!li) {
1405
- li = (_a = this.quoteDraftService.assetsState) === null || _a === void 0 ? void 0 : _a.currentState.find(li => li.id === lineItemId);
1406
- }
1407
- return li;
1138
+ return this.configurationStateService.init$().pipe(tap(() => {
1139
+ this.showNotFound$.next(Boolean(!this.uiDefinitionContainer$.value));
1140
+ }));
1408
1141
  }
1409
1142
  }
1410
- ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, deps: [{ token: i2.ContextService }, { token: i2.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: i2.QuoteDraftService }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }, { token: i2.IntegrationState }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1411
- ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ProductComponent, selector: "vl-flow-product", ngImport: i0, template: "<vl-cms-preview [uiDefinition]=\"$any(uiDefinition$ | async)\" [config]=\"config\"></vl-cms-preview>\n", styles: [""], dependencies: [{ kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1143
+ ProductComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, deps: [{ token: i3$1.ConfigurationRuntimeService }, { token: i3$1.ConfigurationStateService }], target: i0.ɵɵFactoryTarget.Component });
1144
+ ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ProductComponent, selector: "vl-flow-product", ngImport: i0, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n\n<div *ngIf=\"showNotFound$ | async\" class=\"not-found-wrapper\">\n <div class=\"not-found\">\n <div class=\"icon\"></div>\n <div class=\"message\">\n This product doesn't have a linked Configuration UI. <br />\n Please contact your system administrator for further assistance.\n </div>\n </div>\n</div>\n", styles: [".not-found-wrapper{position:absolute;top:0;display:flex;width:100%;height:100%;justify-content:center;align-items:center;background-color:#fff;z-index:1000}.not-found{display:flex;align-items:center;padding:16px;border-radius:8px;gap:8px;background-color:#f5f5f5}.not-found .icon{width:48px;height:42px;background-image:url(\"data:image/svg+xml,%3Csvg width='48' height='42' viewBox='0 0 48 42' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cellipse cx='24.0798' cy='32.6052' rx='2.85714' ry='2.63158' fill='%231F2029'/%3E%3Cpath d='M22.285 3.35831C23.0618 2.06363 24.9382 2.06363 25.715 3.35831L46.1826 37.471C46.9824 38.8041 46.0222 40.5 44.4676 40.5L3.53238 40.5C1.97779 40.5 1.01757 38.8041 1.8174 37.471L22.285 3.35831Z' stroke='%23141414' stroke-width='2'/%3E%3Cpath d='M24 17.342V26.8157' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E%0A\")}.not-found .message{font-size:14px;color:#141414;font-weight:300}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1412
1145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, decorators: [{
1413
1146
  type: Component,
1414
- args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"$any(uiDefinition$ | async)\" [config]=\"config\"></vl-cms-preview>\n" }]
1415
- }], ctorParameters: function () {
1416
- return [{ type: i2.ContextService }, { type: i2.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: i2.QuoteDraftService }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }, { type: i2.IntegrationState }, { type: undefined, decorators: [{
1417
- type: Optional
1418
- }, {
1419
- type: Inject,
1420
- args: [FLOW_CUSTOMIZATION]
1421
- }] }];
1422
- } });
1147
+ args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n\n<div *ngIf=\"showNotFound$ | async\" class=\"not-found-wrapper\">\n <div class=\"not-found\">\n <div class=\"icon\"></div>\n <div class=\"message\">\n This product doesn't have a linked Configuration UI. <br />\n Please contact your system administrator for further assistance.\n </div>\n </div>\n</div>\n", styles: [".not-found-wrapper{position:absolute;top:0;display:flex;width:100%;height:100%;justify-content:center;align-items:center;background-color:#fff;z-index:1000}.not-found{display:flex;align-items:center;padding:16px;border-radius:8px;gap:8px;background-color:#f5f5f5}.not-found .icon{width:48px;height:42px;background-image:url(\"data:image/svg+xml,%3Csvg width='48' height='42' viewBox='0 0 48 42' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cellipse cx='24.0798' cy='32.6052' rx='2.85714' ry='2.63158' fill='%231F2029'/%3E%3Cpath d='M22.285 3.35831C23.0618 2.06363 24.9382 2.06363 25.715 3.35831L46.1826 37.471C46.9824 38.8041 46.0222 40.5 44.4676 40.5L3.53238 40.5C1.97779 40.5 1.01757 38.8041 1.8174 37.471L22.285 3.35831Z' stroke='%23141414' stroke-width='2'/%3E%3Cpath d='M24 17.342V26.8157' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E%0A\")}.not-found .message{font-size:14px;color:#141414;font-weight:300}\n"] }]
1148
+ }], ctorParameters: function () { return [{ type: i3$1.ConfigurationRuntimeService }, { type: i3$1.ConfigurationStateService }]; } });
1423
1149
 
1424
1150
  class ProductModule {
1425
1151
  }
1426
1152
  ProductModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1427
- ProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, declarations: [ProductComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [ProductComponent] });
1428
- ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule] });
1153
+ ProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, declarations: [ProductComponent], imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule], exports: [ProductComponent] });
1154
+ ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule] });
1429
1155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, decorators: [{
1430
1156
  type: NgModule,
1431
1157
  args: [{
1432
1158
  declarations: [ProductComponent],
1433
- imports: [CommonModule, PreviewModule, LoaderModule],
1159
+ imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule],
1434
1160
  exports: [ProductComponent],
1435
1161
  }]
1436
1162
  }] });
1437
1163
 
1438
1164
  class RecordNotFoundComponent {
1439
- constructor(router, route) {
1165
+ constructor(router) {
1440
1166
  this.router = router;
1441
- this.route = route;
1442
1167
  this.subMessage = '';
1443
1168
  this.type = '';
1444
1169
  const navigation = this.router.getCurrentNavigation();
@@ -1451,12 +1176,12 @@ class RecordNotFoundComponent {
1451
1176
  }
1452
1177
  }
1453
1178
  }
1454
- RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
1179
+ RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Component });
1455
1180
  RecordNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RecordNotFoundComponent, selector: "vl-flow-record-not-found", ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"message-wrapper\">\n <div *ngIf=\"message; else defaultMessage\">\n <p class=\"text message-text\" [class]=\"type\">{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"text\">{{ subMessage }}</p>\n\n <div *ngIf=\"details && details.length > 0\">\n <div *ngFor=\"let detail of details\" class=\"text\">{{ detail }}</div>\n </div>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;padding:24px 54px}:host .text{white-space:pre-line;word-break:break-word}:host .message-text.error{color:var(--vl-error-text-color)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1456
1181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, decorators: [{
1457
1182
  type: Component,
1458
1183
  args: [{ selector: 'vl-flow-record-not-found', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"message-wrapper\">\n <div *ngIf=\"message; else defaultMessage\">\n <p class=\"text message-text\" [class]=\"type\">{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"text\">{{ subMessage }}</p>\n\n <div *ngIf=\"details && details.length > 0\">\n <div *ngFor=\"let detail of details\" class=\"text\">{{ detail }}</div>\n </div>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;padding:24px 54px}:host .text{white-space:pre-line;word-break:break-word}:host .message-text.error{color:var(--vl-error-text-color)}\n"] }]
1459
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; } });
1184
+ }], ctorParameters: function () { return [{ type: i1$2.Router }]; } });
1460
1185
 
1461
1186
  const routes = [{ path: '', component: RecordNotFoundComponent }];
1462
1187
  class RecordNotFoundModule {
@@ -1472,361 +1197,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1472
1197
  }]
1473
1198
  }] });
1474
1199
 
1475
- class RemoteComponent {
1476
- constructor(contextService, quoteDraftService, runtimeService, configurationService, configurationState, messageService, integrationState, location) {
1477
- this.contextService = contextService;
1478
- this.quoteDraftService = quoteDraftService;
1479
- this.runtimeService = runtimeService;
1480
- this.configurationService = configurationService;
1481
- this.configurationState = configurationState;
1482
- this.messageService = messageService;
1483
- this.integrationState = integrationState;
1484
- this.location = location;
1485
- this.state$ = new BehaviorSubject({ loading: true, failure: false });
1486
- this.DYNAMIC_OPTION_PRODUCTS_KEY = 'Dynamic';
1487
- this.destroyed$ = new Subject();
1488
- this.rpcMessage = JSON.parse(window.RPC_MESSAGE);
1489
- this.rpcMessage.options.sort((a, b) => { var _a, _b; return ((_a = a.featureNumber) !== null && _a !== void 0 ? _a : 99999) - ((_b = b.featureNumber) !== null && _b !== void 0 ? _b : 99999); });
1490
- this.updateHasChildrenFlag(this.rpcMessage.product.configuredProductId);
1491
- // update context properties
1492
- if (this.rpcMessage.quote) {
1493
- const properties = {};
1494
- if (this.rpcMessage.quote['SBQQ__Opportunity2__c']) {
1495
- properties.OpportunityId = this.rpcMessage.quote['SBQQ__Opportunity2__c'];
1496
- }
1497
- Object.entries(this.rpcMessage.quote).forEach(([key, value]) => {
1498
- if (value !== undefined && !(value instanceof Object)) {
1499
- properties[key] = value;
1500
- }
1501
- });
1502
- this.contextService.update({ properties });
1503
- }
1504
- this.initSubscriptions();
1505
- this.initConfiguration();
1506
- }
1507
- ngOnDestroy() {
1508
- this.destroyed$.next();
1509
- this.destroyed$.complete();
1510
- }
1511
- initConfiguration() {
1512
- const productId = this.rpcMessage.product.configuredProductId;
1513
- const quote = this.quoteDraftService.quoteDraft;
1514
- if (!productId || !quote) {
1515
- return;
1516
- }
1517
- this.runtimeService
1518
- .init({ productId })
1519
- .pipe(first(), tap(context => {
1520
- var _a, _b, _c, _d;
1521
- const uiDefinitionProperties = (_b = (_a = context.uiDefinitionContainer) === null || _a === void 0 ? void 0 : _a.source.properties) !== null && _b !== void 0 ? _b : {};
1522
- this.uiDefinition = (_c = context.uiDefinitionContainer) === null || _c === void 0 ? void 0 : _c.source;
1523
- const pricingEnabled = uiDefinitionProperties.pricingEnabled ? 'true' : 'false';
1524
- const priceListId = uiDefinitionProperties.priceList;
1525
- const runtimeContextProperties = (_d = this.runtimeService.runtimeContext) === null || _d === void 0 ? void 0 : _d.properties;
1526
- if (runtimeContextProperties) {
1527
- runtimeContextProperties.PriceListId = priceListId;
1528
- runtimeContextProperties.PricingEnabled = pricingEnabled;
1529
- }
1530
- this.contextService.update({
1531
- properties: {
1532
- ModelId: context.modelId,
1533
- RuntimeMode: 'TEST',
1534
- PricingEnabled: pricingEnabled,
1535
- PriceListId: priceListId,
1536
- },
1537
- });
1538
- this.configurationService.setConfigurableRamp(this.createLineItem());
1539
- }), this.throwIfNoUIDefinition(), switchMap(() => this.configurationState.init$()), tap(() => this.state$.next({ loading: false, failure: false })), catchError(error => {
1540
- var _a, _b;
1541
- if (!((_b = (_a = this.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.suppressToastMessages)) {
1542
- this.messageService.add({ severity: 'error', summary: error });
1543
- }
1544
- this.state$.next({ loading: false, failure: true });
1545
- return of();
1546
- }), takeUntil(this.destroyed$))
1547
- .subscribe();
1548
- }
1549
- throwIfNoUIDefinition() {
1550
- return (source$) => {
1551
- return source$.pipe(switchMap(() => {
1552
- if (!this.uiDefinition) {
1553
- return throwError(() => 'Product does not have Configuration UI');
1554
- }
1555
- return source$;
1556
- }));
1557
- };
1558
- }
1559
- initSubscriptions() {
1560
- this.integrationState
1561
- .listen$(FlowAction.REMOTE_CANCEL)
1562
- .pipe(tap(() => this.location.back()), takeUntil(this.destroyed$))
1563
- .subscribe();
1564
- this.integrationState
1565
- .listen$(FlowAction.REMOTE_APPLY)
1566
- .pipe(tap(() => this.saveRpcMessage()), takeUntil(this.destroyed$))
1567
- .subscribe();
1568
- }
1569
- createLineItem() {
1570
- var _a, _b;
1571
- const [quoteDraftLineItem] = (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
1572
- if (quoteDraftLineItem && (quoteDraftLineItem.attributes.length > 0 || quoteDraftLineItem.lineItems.length > 0)) {
1573
- return quoteDraftLineItem;
1574
- }
1575
- const lineItem = this.createRootLineItem();
1576
- const dynamicOptionProducts = this.rpcMessage.product.optionConfigurations[this.DYNAMIC_OPTION_PRODUCTS_KEY];
1577
- if (dynamicOptionProducts) {
1578
- const options = this.toParentChildMap(dynamicOptionProducts);
1579
- let items = [lineItem];
1580
- for (let i = 0; i < items.length; i++) {
1581
- const item = items[i];
1582
- const children = item && options.get(item.id);
1583
- if (children) {
1584
- item.lineItems = children;
1585
- items = items.concat(children);
1586
- }
1587
- }
1588
- }
1589
- return lineItem;
1590
- }
1591
- createRootLineItem() {
1592
- var _a, _b, _c, _d;
1593
- const product = this.rpcMessage.product;
1594
- const runtimeContext = this.runtimeService.runtimeContext;
1595
- const veloceInstanceId = product.configurationAttributes['VeloceInstanceId__c'];
1596
- const quoteId = (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState[0]) === null || _b === void 0 ? void 0 : _b.id;
1597
- return {
1598
- id: quoteId || veloceInstanceId || UUID.UUID(),
1599
- type: (_c = runtimeContext.productType) !== null && _c !== void 0 ? _c : '',
1600
- name: ((_d = runtimeContext.properties) === null || _d === void 0 ? void 0 : _d['displayName']) || runtimeContext.productName,
1601
- productName: runtimeContext.productName,
1602
- productId: runtimeContext.productId,
1603
- cfgStatus: 'Default',
1604
- actionCode: 'ADD',
1605
- qty: 1,
1606
- };
1607
- }
1608
- toParentChildMap(remoteOptionProducts) {
1609
- var _a;
1610
- const result = new Map();
1611
- for (const option of remoteOptionProducts) {
1612
- const configurationData = (_a = option === null || option === void 0 ? void 0 : option.readOnly) === null || _a === void 0 ? void 0 : _a.line;
1613
- const id = configurationData === null || configurationData === void 0 ? void 0 : configurationData.VeloceInstanceId__c;
1614
- const parentId = configurationData === null || configurationData === void 0 ? void 0 : configurationData.VeloceParentInstanceId__c;
1615
- if (!option.selected || !configurationData || !id || !parentId) {
1616
- continue;
1617
- }
1618
- const productId = option.productId;
1619
- const lineItem = {
1620
- id,
1621
- productId,
1622
- parentId,
1623
- type: configurationData.ModelType__c,
1624
- port: configurationData.ModelPort__c,
1625
- cfgStatus: configurationData.ConfigurationStatus__c,
1626
- actionCode: configurationData.ActionCode__c,
1627
- qty: option.Quantity,
1628
- };
1629
- let siblings = result.get(productId);
1630
- if (!siblings) {
1631
- result.set(parentId, (siblings = []));
1632
- }
1633
- siblings.push(lineItem);
1634
- }
1635
- return result;
1636
- }
1637
- saveRpcMessage() {
1638
- var _a;
1639
- const quote = this.quoteDraftService.quoteDraft;
1640
- const lineItem = this.configurationService.getSnapshot();
1641
- if (!quote || !lineItem) {
1642
- return;
1643
- }
1644
- this.rpcMessage.VeloceReferenceId = quote.quoteId;
1645
- this.rpcMessage.product.configurationData.VeloceInstanceId__c = lineItem.id;
1646
- const childItems = this.flattenChildLineItems(lineItem);
1647
- const savingMode = window.SavingMode;
1648
- this.updateContentData(this.rpcMessage.product, lineItem);
1649
- this.rpcMessage.quote = this.mapAttributesTo('Quote', lineItem);
1650
- if (savingMode === 'ALL') {
1651
- const optionConfigurations = this.getOptionConfigurations(this.rpcMessage.product);
1652
- const rootProductOptions = this.rpcMessage.options.filter(po => po.configuredProductId === lineItem.productId);
1653
- childItems.forEach(lineItem => {
1654
- var _a, _b, _c, _d;
1655
- const rootOption = rootProductOptions.find(po => po.optionalProductId === lineItem.productId);
1656
- if (rootOption) {
1657
- const featureOptions = (_a = optionConfigurations[rootOption.featureName]) !== null && _a !== void 0 ? _a : (optionConfigurations[rootOption.featureName] = []);
1658
- const originOption = !rootOption.hasChildren
1659
- ? (_b = optionConfigurations[rootOption.featureName]) === null || _b === void 0 ? void 0 : _b.find(({ optionId }) => optionId === rootOption.optionId)
1660
- : undefined;
1661
- const option = originOption !== null && originOption !== void 0 ? originOption : {};
1662
- option.optionId = (_c = option.optionId) !== null && _c !== void 0 ? _c : rootOption.optionId;
1663
- this.updateContentData(option, lineItem);
1664
- option.index = (_d = option.index) !== null && _d !== void 0 ? _d : featureOptions.length;
1665
- option.selected = true;
1666
- if (!originOption) {
1667
- featureOptions.push(option);
1668
- }
1669
- if (lineItem.parentLineItem) {
1670
- const nestedProductOption = this.rpcMessage.options.find(po => {
1671
- var _a;
1672
- return po.configuredProductId === ((_a = lineItem.parentLineItem) === null || _a === void 0 ? void 0 : _a.productId) &&
1673
- po.optionalProductId === lineItem.productId;
1674
- });
1675
- if (nestedProductOption) {
1676
- option.configurationData = Object.assign(Object.assign({}, option.configurationData), { VeloceParentInstanceId__c: lineItem.parentLineItem.id, VeloceNestedOptionId__c: nestedProductOption.optionId, VeloceNestedFeatureId__c: nestedProductOption.featureId });
1677
- }
1678
- }
1679
- }
1680
- else {
1681
- this.rpcMessage.dynamicFeatures.forEach(feature => {
1682
- var _a, _b;
1683
- const featureOptions = (_a = optionConfigurations[feature.name]) !== null && _a !== void 0 ? _a : (optionConfigurations[feature.name] = []);
1684
- const originOption = featureOptions.find(({ productId }) => productId === lineItem.productId);
1685
- const option = originOption !== null && originOption !== void 0 ? originOption : {};
1686
- this.updateContentData(option, lineItem);
1687
- option.index = (_b = option.index) !== null && _b !== void 0 ? _b : featureOptions.length;
1688
- option.selected = true;
1689
- if (!originOption) {
1690
- featureOptions.push(option);
1691
- }
1692
- });
1693
- }
1694
- });
1695
- this.rpcMessage.product = Object.assign(Object.assign({}, this.rpcMessage.product), { optionConfigurations });
1696
- }
1697
- (_a = window.RPC_BROADCAST) === null || _a === void 0 ? void 0 : _a.apply(null, [this.rpcMessage]);
1698
- }
1699
- updateHasChildrenFlag(bundleProductId) {
1700
- const bundleOptionsByOptionId = {};
1701
- const notBundleOptions = [];
1702
- for (const productOption of this.rpcMessage.options) {
1703
- if (productOption.configuredProductId === bundleProductId) {
1704
- bundleOptionsByOptionId[productOption.optionalProductId] = productOption;
1705
- }
1706
- else {
1707
- notBundleOptions.push(productOption);
1708
- }
1709
- }
1710
- for (const option of notBundleOptions) {
1711
- const bundleOption = bundleOptionsByOptionId[option.configuredProductId];
1712
- if (bundleOption) {
1713
- bundleOption.hasChildren = true;
1714
- }
1715
- }
1716
- }
1717
- flattenChildLineItems(lineItem) {
1718
- var _a;
1719
- let items = (_a = lineItem.lineItems) !== null && _a !== void 0 ? _a : [];
1720
- for (let i = 0; i < items.length; i++) {
1721
- const item = items[i];
1722
- if (item === null || item === void 0 ? void 0 : item.lineItems) {
1723
- items = items.concat(item.lineItems.map(li => (Object.assign(Object.assign({}, li), { parentLineItem: item }))));
1724
- }
1725
- }
1726
- return items;
1727
- }
1728
- updateContentData(entity, lineItem) {
1729
- var _a, _b;
1730
- if (lineItem.productId) {
1731
- entity.productId = lineItem.productId;
1732
- }
1733
- const quantityAttribute = lineItem.properties['quantityAttribute'];
1734
- entity.Quantity = quantityAttribute
1735
- ? (_b = (_a = lineItem.attributes.find(attribute => attribute.name === quantityAttribute)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 1
1736
- : lineItem.qty;
1737
- const totalPrice = this.computeNetPrice(lineItem);
1738
- const targetTotalPriceField = lineItem.properties['TargetTotalPriceField'] || 'TotalPrice__c';
1739
- entity.configurationData[targetTotalPriceField] = entity.configurationData[targetTotalPriceField]
1740
- ? entity.configurationData[targetTotalPriceField] + totalPrice
1741
- : totalPrice;
1742
- const targetPriceField = lineItem.properties['TargetPriceField'] || 'SBQQ__ListPrice__c';
1743
- const price = entity.Quantity != null ? entity.configurationData[targetTotalPriceField] / entity.Quantity || 0 : 0;
1744
- const targetPriceValue = Number(entity.configurationData[targetPriceField]) || 0;
1745
- entity.configurationData[targetPriceField] = targetPriceValue
1746
- ? (targetPriceValue + price).toFixed(2)
1747
- : price.toFixed(2);
1748
- entity.configurationAttributes = this.mapAttributesTo('Attribute', lineItem);
1749
- entity.configurationData = Object.assign(Object.assign(Object.assign(Object.assign({}, entity.configurationData), this.mapAttributesTo('Field', lineItem)), this.mapAttributesTo('', lineItem)), { VeloceInstanceId__c: lineItem.id });
1750
- }
1751
- computeNetPrice(lineItem) {
1752
- if (lineItem.properties['GroupCharges']) {
1753
- return this.sumNetPrice(lineItem.chargeGroupItems, this.getChargeNameSet(lineItem.properties['GroupCharges']));
1754
- }
1755
- return this.sumNetPrice(lineItem.chargeItems, this.getChargeNameSet(lineItem.properties['Charges']));
1756
- }
1757
- getChargeNameSet(property) {
1758
- if (property && property.length > 0) {
1759
- return new Set(property.split(','));
1760
- }
1761
- return new Set();
1762
- }
1763
- sumNetPrice(chargeItems, charges) {
1764
- var _a;
1765
- let netPrice = 0;
1766
- for (const chargeItem of chargeItems) {
1767
- if (!charges || charges.has(chargeItem.chargeType)) {
1768
- netPrice += (_a = chargeItem.netPrice) !== null && _a !== void 0 ? _a : 0;
1769
- }
1770
- }
1771
- return netPrice;
1772
- }
1773
- mapAttributesTo(target, lineItem) {
1774
- var _a;
1775
- const result = {};
1776
- const component = (_a = this.runtimeService.runtimeModel) === null || _a === void 0 ? void 0 : _a.components.get(lineItem.type);
1777
- if (!component) {
1778
- return result;
1779
- }
1780
- const propertyName = 'mapTo' + target;
1781
- component.attributes
1782
- .filter(a => a.properties && a.properties[propertyName])
1783
- .forEach(mapping => {
1784
- var _a;
1785
- const attribute = lineItem.attributes.find(a => a.name === mapping.name);
1786
- if (attribute) {
1787
- new Set((_a = mapping.properties[propertyName]) === null || _a === void 0 ? void 0 : _a.split(',')).forEach(k => (result[k] = attribute.value));
1788
- }
1789
- });
1790
- return result;
1791
- }
1792
- getOptionConfigurations(product) {
1793
- var _a;
1794
- const optionConfigurations = {};
1795
- const requestOptionConfigurations = (_a = product.optionConfigurations) !== null && _a !== void 0 ? _a : {};
1796
- Object.keys(requestOptionConfigurations).forEach(k => {
1797
- var _a;
1798
- optionConfigurations[k] = ((_a = requestOptionConfigurations[k]) !== null && _a !== void 0 ? _a : []).map(opt => {
1799
- return Object.assign(Object.assign({}, opt), { selected: false });
1800
- });
1801
- });
1802
- return optionConfigurations;
1803
- }
1804
- }
1805
- RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i2.ContextService }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: i2$2.MessageService }, { token: i2.IntegrationState }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Component });
1806
- RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, decorators: [{
1808
- type: Component,
1809
- args: [{ selector: 'vl-flow-remote', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1810
- }], ctorParameters: function () { return [{ type: i2.ContextService }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: i2$2.MessageService }, { type: i2.IntegrationState }, { type: i4.Location }]; } });
1811
-
1812
- class RemoteModule {
1813
- }
1814
- RemoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1815
- RemoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, declarations: [RemoteComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [RemoteComponent] });
1816
- RemoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, imports: [CommonModule, PreviewModule, LoaderModule] });
1817
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, decorators: [{
1818
- type: NgModule,
1819
- args: [{
1820
- declarations: [RemoteComponent],
1821
- imports: [CommonModule, PreviewModule, LoaderModule],
1822
- exports: [RemoteComponent],
1823
- }]
1824
- }] });
1825
-
1826
1200
  class ShoppingCartComponent {
1827
- constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
1201
+ constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
1828
1202
  var _a, _b, _c;
1829
- this.templatesApi = templatesApi;
1203
+ this.templatesAdminApiService = templatesAdminApiService;
1830
1204
  this.cdr = cdr;
1831
1205
  this.toastService = toastService;
1832
1206
  this.flowInfo = flowInfo;
@@ -1881,7 +1255,7 @@ class ShoppingCartComponent {
1881
1255
  if (!template) {
1882
1256
  return of(undefined);
1883
1257
  }
1884
- return this.templatesApi.fetchComponentsAttachments$(template.id);
1258
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
1885
1259
  }
1886
1260
  generateUIDefinition$() {
1887
1261
  return of(undefined).pipe(tap(() => {
@@ -1895,7 +1269,6 @@ class ShoppingCartComponent {
1895
1269
  const uiDef = {
1896
1270
  name: '',
1897
1271
  createdTimestamp: 0,
1898
- primary: true,
1899
1272
  type: 'DEFAULT',
1900
1273
  version: 2,
1901
1274
  children: metaList.map(meta => ({
@@ -1909,13 +1282,13 @@ class ShoppingCartComponent {
1909
1282
  }));
1910
1283
  }
1911
1284
  }
1912
- ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2$1.ToastService }, { token: i2.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1913
- ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1285
+ ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3$1.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1286
+ ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1914
1287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, decorators: [{
1915
1288
  type: Component,
1916
1289
  args: [{ selector: 'vl-flow-shopping-cart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1917
1290
  }], ctorParameters: function () {
1918
- return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: i2.FlowInfoService }, { type: undefined, decorators: [{
1291
+ return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
1919
1292
  type: Optional
1920
1293
  }, {
1921
1294
  type: Inject,
@@ -1938,24 +1311,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1938
1311
  }] });
1939
1312
 
1940
1313
  class FlowResolver {
1941
- constructor(router, routerService, contextService, flowInfo) {
1314
+ constructor(router, routerService, flowInfoService) {
1942
1315
  this.router = router;
1943
1316
  this.routerService = routerService;
1944
- this.contextService = contextService;
1945
- this.flowInfo = flowInfo;
1317
+ this.flowInfoService = flowInfoService;
1946
1318
  }
1947
1319
  resolve(route) {
1948
- const { queryParams } = route;
1949
- const flow = this.flowInfo.flow;
1950
- if (!flow) {
1320
+ if (!this.flowInfoService.isFlowInitialized) {
1951
1321
  return of(false);
1952
1322
  }
1953
- const { properties } = flow;
1323
+ const { queryParams } = route;
1324
+ const { properties } = this.flowInfoService.flow;
1954
1325
  const { queryParams: flowQueryParams, entryPath } = properties;
1955
1326
  const mergedQueryParams = Object.assign(Object.assign({}, queryParams), flowQueryParams);
1956
- const contextProperties = Object.entries(Object.assign(Object.assign({}, mergedQueryParams), getDefaultProperties({ flowParams: properties }))).reduce((trunk, [key, value]) => (Object.assign(Object.assign({}, trunk), { [key]: String(value) })), {});
1957
- this.contextService.update({ properties: contextProperties });
1958
- this.flowInfo.flow = flow;
1959
1327
  const parentUrl = this.routerService.getFlowRootPath(route);
1960
1328
  const entryUrl = String(entryPath !== null && entryPath !== void 0 ? entryPath : '')
1961
1329
  .split('/')
@@ -1964,29 +1332,39 @@ class FlowResolver {
1964
1332
  queryParams: mergedQueryParams,
1965
1333
  replaceUrl: true,
1966
1334
  })).pipe(catchError$1(e => {
1335
+ console.error(e);
1967
1336
  const message = e instanceof HttpErrorResponse ? e.error.message : e;
1968
1337
  const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
1969
1338
  return this.routerService.showErrorPage$(message, errorDetails);
1970
1339
  }));
1971
1340
  }
1972
1341
  }
1973
- FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
1342
+ FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
1974
1343
  FlowResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver });
1975
1344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, decorators: [{
1976
1345
  type: Injectable
1977
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.FlowInfoService }]; } });
1346
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i3$1.FlowInfoService }]; } });
1347
+
1348
+ const resolvePCMModel = () => {
1349
+ const flowInfoService = inject(FlowInfoService);
1350
+ const configurationRuntimeService = inject(ConfigurationRuntimeService);
1351
+ const { productId } = flowInfoService.context;
1352
+ if (!productId) {
1353
+ throw new Error(`Unable to start configuration for 'productId == null'`);
1354
+ }
1355
+ return configurationRuntimeService.init$({ productId });
1356
+ };
1978
1357
 
1979
- class QuoteResolver {
1980
- constructor(router, quoteDraftService, routerService, contextService, flowInfo, flowStateService) {
1358
+ class SalesTransactionResolver {
1359
+ constructor(router, routerService, flowInfoService, flowStateService, salesTransactionService) {
1981
1360
  this.router = router;
1982
- this.quoteDraftService = quoteDraftService;
1983
1361
  this.routerService = routerService;
1984
- this.contextService = contextService;
1985
- this.flowInfo = flowInfo;
1362
+ this.flowInfoService = flowInfoService;
1986
1363
  this.flowStateService = flowStateService;
1364
+ this.salesTransactionService = salesTransactionService;
1987
1365
  }
1988
1366
  resolve(route) {
1989
- const flow = this.flowInfo.flow;
1367
+ const flow = this.flowInfoService.flow;
1990
1368
  if (!flow) {
1991
1369
  return of(false);
1992
1370
  }
@@ -1994,13 +1372,14 @@ class QuoteResolver {
1994
1372
  return of(true);
1995
1373
  }
1996
1374
  return this.flowStateService.init$().pipe(switchMap(() => this.checkDynamicNavigation$(route)), catchError(e => {
1375
+ console.error(e);
1997
1376
  const message = e instanceof HttpErrorResponse ? e.error.message : e;
1998
1377
  const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
1999
1378
  return this.routerService.showErrorPage$(message, errorDetails);
2000
1379
  }));
2001
1380
  }
2002
1381
  checkDynamicNavigation$(route) {
2003
- const flow = this.flowInfo.flow;
1382
+ const flow = this.flowInfoService.flow;
2004
1383
  if (!flow) {
2005
1384
  return of(true);
2006
1385
  }
@@ -2019,33 +1398,55 @@ class QuoteResolver {
2019
1398
  }));
2020
1399
  }
2021
1400
  getNavigateTo() {
2022
- const flow = this.flowInfo.flow;
2023
- let navigateTo;
2024
- if (flow === null || flow === void 0 ? void 0 : flow.properties.stateful) {
2025
- return this.flowStateService.select$(UITemplateType.FLOW_ENGINE, 'NAVIGATE_TO').pipe(map(r => {
2026
- if (r.success) {
2027
- return r.result;
2028
- }
2029
- return '';
2030
- }));
2031
- }
2032
- else {
2033
- const isAccountMode = this.contextService.mode === ConfigurationContextMode.ACCOUNT;
2034
- if (isAccountMode || this.quoteDraftService.hasAssets) {
2035
- navigateTo = '/assets';
2036
- }
2037
- else if (this.quoteDraftService.hasProducts) {
2038
- navigateTo = '/cart';
2039
- }
2040
- }
2041
- return of(navigateTo);
1401
+ // Implement when needed
1402
+ return of('');
2042
1403
  }
2043
1404
  }
2044
- QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, deps: [{ token: i1$2.Router }, { token: i2.QuoteDraftService }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
2045
- QuoteResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver });
2046
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, decorators: [{
1405
+ SalesTransactionResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i3$1.FlowInfoService }, { token: i3$1.FlowStateService }, { token: i3$1.SalesTransactionService }], target: i0.ɵɵFactoryTarget.Injectable });
1406
+ SalesTransactionResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver });
1407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver, decorators: [{
2047
1408
  type: Injectable
2048
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.QuoteDraftService }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }]; } });
1409
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i3$1.FlowInfoService }, { type: i3$1.FlowStateService }, { type: i3$1.SalesTransactionService }]; } });
1410
+
1411
+ const resolveUIDefinition = () => {
1412
+ const customizationService = inject(FLOW_CUSTOMIZATION, { optional: true });
1413
+ const flowInfoService = inject(FlowInfoService);
1414
+ const uiDefinitionsAdminApiService = inject(UIDefinitionsAdminApiService);
1415
+ const configurationRuntimeService = inject(ConfigurationRuntimeService);
1416
+ const { productId } = flowInfoService.context;
1417
+ if (!productId) {
1418
+ throw new Error(`Unable to start configuration for 'productId == null'`);
1419
+ }
1420
+ return of(undefined).pipe(switchMap(() => {
1421
+ // Try resolving via customization service
1422
+ if (!productId || !(customizationService === null || customizationService === void 0 ? void 0 : customizationService.getUiDefinition)) {
1423
+ return of(undefined);
1424
+ }
1425
+ return customizationService.getUiDefinition(flowInfoService.context);
1426
+ }), switchMap(uiDefContainer => {
1427
+ // Resolve UIDefinition from the org
1428
+ if (uiDefContainer) {
1429
+ return of(uiDefContainer);
1430
+ }
1431
+ if (flowInfoService.context.requiredUIDefinitionId) {
1432
+ return uiDefinitionsAdminApiService.fetch$(flowInfoService.context.requiredUIDefinitionId, {
1433
+ skipErrorHandler: true,
1434
+ });
1435
+ }
1436
+ return uiDefinitionsAdminApiService
1437
+ .fetchAll$({
1438
+ productId,
1439
+ defaultUIDefinitionId: flowInfoService.context.defaultUIDefinitionId,
1440
+ }, { skipErrorHandler: true })
1441
+ .pipe(map((uiDefinitionContainers) => {
1442
+ const uiDefContainer = uiDefinitionContainers[0];
1443
+ if (!uiDefContainer) {
1444
+ throw new Error(`UI Definition for productId=${productId} is not resolved`);
1445
+ }
1446
+ return uiDefContainer;
1447
+ }));
1448
+ }), catchError(() => of(null)), tap(uiDefContainer => (configurationRuntimeService.uiDefinitionContainer = uiDefContainer)));
1449
+ };
2049
1450
 
2050
1451
  const rootRoute = {
2051
1452
  id: VELOCE_FLOW_ROOT_ROUTE,
@@ -2063,15 +1464,13 @@ const rootRoute = {
2063
1464
  path: 'flows',
2064
1465
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2065
1466
  resolve: { flow: FlowResolver },
2066
- canActivate: [ContextGuard],
2067
1467
  children: [],
2068
1468
  },
2069
1469
  {
2070
1470
  path: 'product',
2071
1471
  component: ProductComponent,
2072
1472
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2073
- resolve: { quote: QuoteResolver },
2074
- canActivate: [ContextGuard],
1473
+ resolve: { salesTransaction: SalesTransactionResolver, uiDef: resolveUIDefinition, pcm: resolvePCMModel },
2075
1474
  canDeactivate: [ProductUnloadGuard],
2076
1475
  data: { showHeader: true },
2077
1476
  },
@@ -2079,33 +1478,23 @@ const rootRoute = {
2079
1478
  path: 'cart',
2080
1479
  component: ShoppingCartComponent,
2081
1480
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2082
- resolve: { quote: QuoteResolver },
2083
- canActivate: [ContextGuard],
1481
+ resolve: { salesTransaction: SalesTransactionResolver },
2084
1482
  data: { showHeader: true },
2085
1483
  },
2086
1484
  {
2087
1485
  path: 'catalog',
2088
1486
  component: CatalogComponent,
2089
1487
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2090
- resolve: { quote: QuoteResolver },
2091
- canActivate: [ContextGuard],
1488
+ resolve: { salesTransaction: SalesTransactionResolver },
2092
1489
  data: { showHeader: true },
2093
1490
  },
2094
1491
  {
2095
1492
  path: 'assets',
2096
1493
  component: AssetsComponent,
2097
1494
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2098
- resolve: { quote: QuoteResolver },
2099
- canActivate: [ContextGuard],
1495
+ resolve: { salesTransaction: SalesTransactionResolver },
2100
1496
  data: { showHeader: true },
2101
1497
  },
2102
- {
2103
- path: 'remote',
2104
- component: RemoteComponent,
2105
- runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2106
- resolve: { quote: QuoteResolver },
2107
- canActivate: [ContextGuard],
2108
- },
2109
1498
  {
2110
1499
  path: 'debug',
2111
1500
  loadChildren: () => DebugModule,
@@ -2121,30 +1510,14 @@ const rootRoute = {
2121
1510
  class FlowRoutingModule {
2122
1511
  }
2123
1512
  FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2124
- FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, imports: [i1$2.RouterModule, ProductModule,
2125
- ShoppingCartModule,
2126
- CatalogModule,
2127
- AssetsModule,
2128
- RemoteModule], exports: [RouterModule] });
2129
- FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ContextGuard, ProductUnloadGuard, FlowResolver, QuoteResolver], imports: [RouterModule.forChild([rootRoute]),
2130
- ProductModule,
2131
- ShoppingCartModule,
2132
- CatalogModule,
2133
- AssetsModule,
2134
- RemoteModule, RouterModule] });
1513
+ FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, imports: [i1$2.RouterModule, ProductModule, ShoppingCartModule, CatalogModule, AssetsModule], exports: [RouterModule] });
1514
+ FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, SalesTransactionResolver], imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule, RouterModule] });
2135
1515
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, decorators: [{
2136
1516
  type: NgModule,
2137
1517
  args: [{
2138
- imports: [
2139
- RouterModule.forChild([rootRoute]),
2140
- ProductModule,
2141
- ShoppingCartModule,
2142
- CatalogModule,
2143
- AssetsModule,
2144
- RemoteModule,
2145
- ],
1518
+ imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule],
2146
1519
  exports: [RouterModule],
2147
- providers: [FlowRouterService, RootGuard, ContextGuard, ProductUnloadGuard, FlowResolver, QuoteResolver],
1520
+ providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, SalesTransactionResolver],
2148
1521
  }]
2149
1522
  }] });
2150
1523
 
@@ -2196,5 +1569,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2196
1569
  * Generated bundle index. Do not edit.
2197
1570
  */
2198
1571
 
2199
- export { ContextGuard, FlowDialogService, FlowModule, FlowRouterService, FlowService, VELOCE_FLOW_ROOT_ROUTE, getDefaultProperties, getFlowObjectIdPropertyName };
1572
+ export { FlowDialogService, FlowModule, FlowRouterService, FlowService, VELOCE_FLOW_ROOT_ROUTE };
2200
1573
  //# sourceMappingURL=veloceapps-sdk.mjs.map