@veloceapps/sdk 11.0.0-7 → 11.0.0-71

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 (177) hide show
  1. package/cms/cms.actions.d.ts +92 -29
  2. package/cms/components/element-renderer/element-renderer.component.d.ts +3 -10
  3. package/cms/services/element-context.service.d.ts +0 -1
  4. package/cms/types/common.types.d.ts +2 -0
  5. package/cms/types/index.d.ts +0 -1
  6. package/cms/utils/path.utils.d.ts +1 -2
  7. package/cms/vendor-map.d.ts +17 -40
  8. package/core/index.d.ts +1 -1
  9. package/core/modules/configuration/index.d.ts +3 -4
  10. package/core/modules/configuration/services/configuration-runtime.service.d.ts +8 -19
  11. package/core/modules/configuration/services/configuration-state.service.d.ts +8 -8
  12. package/core/modules/configuration/services/configuration.service.d.ts +23 -47
  13. package/core/modules/configuration/services/test-mode-configuration.service.d.ts +23 -0
  14. package/core/modules/configuration/types/configuration-runtime.types.d.ts +0 -5
  15. package/core/modules/configuration/types/configuration.types.d.ts +4 -2
  16. package/core/modules/configuration/types/index.d.ts +2 -0
  17. package/core/modules/flow-configuration/index.d.ts +0 -3
  18. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +11 -38
  19. package/core/operators/filter-successful-execute.operator.d.ts +3 -0
  20. package/core/operators/index.d.ts +1 -0
  21. package/core/services/catalog-products.service.d.ts +11 -0
  22. package/core/services/flow-info.service.d.ts +27 -12
  23. package/core/services/flow-state-configuration.service.d.ts +2 -8
  24. package/core/services/flow-state.service.d.ts +13 -22
  25. package/core/services/index.d.ts +3 -3
  26. package/core/services/integration.state.d.ts +1 -1
  27. package/core/services/product-images.service.d.ts +3 -3
  28. package/core/services/runtime-settings.service.d.ts +1 -1
  29. package/core/services/sales-transaction.service.d.ts +27 -0
  30. package/core/types/flow-customization.types.d.ts +2 -2
  31. package/core/types/flow-state.types.d.ts +2 -2
  32. package/core/types/index.d.ts +0 -1
  33. package/core/utils/index.d.ts +2 -2
  34. package/core/utils/transaction-item.utils.d.ts +7 -0
  35. package/core/utils/transaction-item.worker.d.ts +8 -0
  36. package/esm2020/cms/cms.actions.mjs +93 -71
  37. package/esm2020/cms/cms.default.mjs +2 -3
  38. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +7 -64
  39. package/esm2020/cms/components/preview/preview.component.mjs +3 -3
  40. package/esm2020/cms/services/element-context.service.mjs +1 -1
  41. package/esm2020/cms/types/common.types.mjs +1 -1
  42. package/esm2020/cms/types/index.mjs +1 -2
  43. package/esm2020/cms/utils/element.utils.mjs +3 -3
  44. package/esm2020/cms/utils/elements-resolver.mjs +16 -5
  45. package/esm2020/cms/utils/path.utils.mjs +1 -10
  46. package/esm2020/cms/vendor-map.mjs +17 -18
  47. package/esm2020/core/core.module.mjs +7 -7
  48. package/esm2020/core/index.mjs +2 -2
  49. package/esm2020/core/modules/configuration/configuration.module.mjs +14 -4
  50. package/esm2020/core/modules/configuration/index.mjs +4 -5
  51. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +16 -101
  52. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +65 -77
  53. package/esm2020/core/modules/configuration/services/configuration.service.mjs +104 -223
  54. package/esm2020/core/modules/configuration/services/test-mode-configuration.service.mjs +74 -0
  55. package/esm2020/core/modules/configuration/types/configuration-runtime.types.mjs +1 -1
  56. package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
  57. package/esm2020/core/modules/configuration/types/index.mjs +3 -0
  58. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +3 -4
  59. package/esm2020/core/modules/flow-configuration/index.mjs +1 -4
  60. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +44 -128
  61. package/esm2020/core/operators/filter-successful-execute.operator.mjs +5 -0
  62. package/esm2020/core/operators/index.mjs +2 -0
  63. package/esm2020/core/services/catalog-products.service.mjs +25 -0
  64. package/esm2020/core/services/flow-info.service.mjs +82 -31
  65. package/esm2020/core/services/flow-state-configuration.service.mjs +10 -25
  66. package/esm2020/core/services/flow-state.service.mjs +60 -172
  67. package/esm2020/core/services/index.mjs +4 -4
  68. package/esm2020/core/services/integration.state.mjs +2 -2
  69. package/esm2020/core/services/product-images.service.mjs +8 -8
  70. package/esm2020/core/services/runtime-settings.service.mjs +3 -3
  71. package/esm2020/core/services/sales-transaction.service.mjs +62 -0
  72. package/esm2020/core/types/flow-customization.types.mjs +1 -1
  73. package/esm2020/core/types/flow-state.types.mjs +1 -1
  74. package/esm2020/core/types/index.mjs +1 -2
  75. package/esm2020/core/utils/index.mjs +3 -3
  76. package/esm2020/core/utils/transaction-item.utils.mjs +60 -0
  77. package/esm2020/core/utils/transaction-item.worker.mjs +16 -0
  78. package/esm2020/src/components/flow-header/flow-header.component.mjs +8 -12
  79. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +8 -12
  80. package/esm2020/src/flow-routing.module.mjs +12 -41
  81. package/esm2020/src/flow.component.mjs +5 -5
  82. package/esm2020/src/guards/flow.guard.mjs +13 -14
  83. package/esm2020/src/guards/product-unload.guard.mjs +7 -9
  84. package/esm2020/src/index.mjs +1 -3
  85. package/esm2020/src/pages/assets/assets.component.mjs +8 -9
  86. package/esm2020/src/pages/catalog/catalog.component.mjs +8 -9
  87. package/esm2020/src/pages/debug/debug.component.mjs +14 -23
  88. package/esm2020/src/pages/product/product.component.mjs +12 -89
  89. package/esm2020/src/pages/product/product.module.mjs +5 -5
  90. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +5 -6
  91. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +8 -9
  92. package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
  93. package/esm2020/src/resolvers/pcm-model.resolver.mjs +12 -0
  94. package/esm2020/src/resolvers/sales-transaction.resolver.mjs +64 -0
  95. package/esm2020/src/resolvers/ui-definition.resolver.mjs +42 -0
  96. package/esm2020/src/services/flow-dialog.service.mjs +8 -8
  97. package/esm2020/src/services/flow-router.service.mjs +16 -33
  98. package/esm2020/src/services/flow.service.mjs +13 -54
  99. package/esm2020/src/types/index.mjs +2 -3
  100. package/esm2020/src/types/route.types.mjs +1 -1
  101. package/fesm2015/veloceapps-sdk-cms.mjs +138 -275
  102. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  103. package/fesm2015/veloceapps-sdk-core.mjs +808 -1658
  104. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  105. package/fesm2015/veloceapps-sdk.mjs +188 -801
  106. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  107. package/fesm2020/veloceapps-sdk-cms.mjs +134 -267
  108. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  109. package/fesm2020/veloceapps-sdk-core.mjs +867 -1738
  110. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  111. package/fesm2020/veloceapps-sdk.mjs +188 -795
  112. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  113. package/package.json +1 -1
  114. package/src/components/flow-header/flow-header.component.d.ts +3 -3
  115. package/src/components/guided-selling/guided-selling.component.d.ts +3 -3
  116. package/src/flow-routing.module.d.ts +1 -2
  117. package/src/flow.component.d.ts +2 -2
  118. package/src/guards/product-unload.guard.d.ts +5 -6
  119. package/src/index.d.ts +0 -2
  120. package/src/pages/assets/assets.component.d.ts +3 -3
  121. package/src/pages/catalog/catalog.component.d.ts +3 -3
  122. package/src/pages/debug/debug.component.d.ts +2 -5
  123. package/src/pages/product/product.component.d.ts +5 -14
  124. package/src/pages/product/product.module.d.ts +1 -1
  125. package/src/pages/record-not-found/record-not-found.component.d.ts +2 -3
  126. package/src/pages/shopping-cart/shopping-cart.component.d.ts +3 -3
  127. package/src/resolvers/flow.resolver.d.ts +5 -6
  128. package/src/resolvers/pcm-model.resolver.d.ts +3 -0
  129. package/src/resolvers/sales-transaction.resolver.d.ts +18 -0
  130. package/src/resolvers/ui-definition.resolver.d.ts +3 -0
  131. package/src/services/flow-dialog.service.d.ts +5 -4
  132. package/src/services/flow-router.service.d.ts +4 -6
  133. package/src/services/flow.service.d.ts +2 -7
  134. package/src/types/index.d.ts +1 -2
  135. package/src/types/route.types.d.ts +0 -5
  136. package/cms/plugins/configuration.plugin.d.ts +0 -23
  137. package/cms/types/configuration.types.d.ts +0 -21
  138. package/core/modules/configuration/helpers.d.ts +0 -6
  139. package/core/modules/configuration/services/runtime-context.service.d.ts +0 -12
  140. package/core/modules/flow-configuration/services/flow-update.service.d.ts +0 -13
  141. package/core/modules/flow-configuration/types/update.types.d.ts +0 -12
  142. package/core/services/context.service.d.ts +0 -23
  143. package/core/services/quote-draft.service.d.ts +0 -50
  144. package/core/types/runtime.types.d.ts +0 -30
  145. package/core/utils/line-item.utils.d.ts +0 -25
  146. package/core/utils/line-item.worker.d.ts +0 -9
  147. package/esm2020/cms/plugins/configuration.plugin.mjs +0 -109
  148. package/esm2020/cms/types/configuration.types.mjs +0 -2
  149. package/esm2020/core/modules/configuration/helpers.mjs +0 -73
  150. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +0 -45
  151. package/esm2020/core/modules/flow-configuration/services/flow-update.service.mjs +0 -138
  152. package/esm2020/core/modules/flow-configuration/types/update.types.mjs +0 -2
  153. package/esm2020/core/services/context.service.mjs +0 -91
  154. package/esm2020/core/services/quote-draft.service.mjs +0 -192
  155. package/esm2020/core/types/runtime.types.mjs +0 -16
  156. package/esm2020/core/utils/line-item.utils.mjs +0 -187
  157. package/esm2020/core/utils/line-item.worker.mjs +0 -19
  158. package/esm2020/src/guards/context.guard.mjs +0 -91
  159. package/esm2020/src/guards/index.mjs +0 -2
  160. package/esm2020/src/pages/remote/remote.component.mjs +0 -342
  161. package/esm2020/src/pages/remote/remote.module.mjs +0 -20
  162. package/esm2020/src/pages/remote/remote.types.mjs +0 -2
  163. package/esm2020/src/resolvers/quote.resolver.mjs +0 -82
  164. package/esm2020/src/types/context-route.types.mjs +0 -2
  165. package/esm2020/src/types/metrics.types.mjs +0 -2
  166. package/esm2020/src/utils/flow.utils.mjs +0 -25
  167. package/esm2020/src/utils/index.mjs +0 -2
  168. package/src/guards/context.guard.d.ts +0 -19
  169. package/src/guards/index.d.ts +0 -1
  170. package/src/pages/remote/remote.component.d.ts +0 -46
  171. package/src/pages/remote/remote.module.d.ts +0 -10
  172. package/src/pages/remote/remote.types.d.ts +0 -4
  173. package/src/resolvers/quote.resolver.d.ts +0 -19
  174. package/src/types/context-route.types.d.ts +0 -5
  175. package/src/types/metrics.types.d.ts +0 -5
  176. package/src/utils/flow.utils.d.ts +0 -8
  177. 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 * as i1$1 from '@veloceapps/api/v2';
16
+ import { UIDefinitionsAdminApiService } from '@veloceapps/api/v2';
17
+ import { BehaviorSubject, Subject, filter, first, tap, takeUntil, catchError, of, map, switchMap, shareReplay, startWith, distinctUntilChanged, from, take, combineLatest } from 'rxjs';
17
18
  import { DomHandler } from 'primeng/dom';
18
19
  import * as i1$2 from '@angular/router';
19
20
  import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, RouterModule } from '@angular/router';
20
- import { mapShoppingCartSettings, getMaxRenewalTermsValue, UITemplateType, SalesforceIdUtils, ConfigurationContextMode, isVeloceError, extractErrorDetails, UUID } from '@veloceapps/core';
21
+ import { mapShoppingCartSettings, getMaxRenewalTermsValue, SalesforceIdUtils, 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;
@@ -97,9 +97,6 @@ class FlowHeaderComponent {
97
97
  }
98
98
  initialize() {
99
99
  this.templateApiName = this.flowInfo.flow?.properties.templates?.flowHeader ?? '';
100
- if (this.flowInfo.isLegacy && !this.templateApiName) {
101
- return;
102
- }
103
100
  this.generateUIDefinition$()
104
101
  .pipe(tap(uiDef => {
105
102
  if (!uiDef) {
@@ -134,7 +131,7 @@ class FlowHeaderComponent {
134
131
  if (!template) {
135
132
  return of(undefined);
136
133
  }
137
- return this.templatesApi.fetchComponentsAttachments$(template.id);
134
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
138
135
  }
139
136
  generateUIDefinition$() {
140
137
  return of(undefined).pipe(tap(() => {
@@ -148,7 +145,6 @@ class FlowHeaderComponent {
148
145
  const uiDef = {
149
146
  name: '',
150
147
  createdTimestamp: 0,
151
- primary: true,
152
148
  type: 'DEFAULT',
153
149
  version: 2,
154
150
  children: metaList.map(meta => ({
@@ -162,12 +158,12 @@ class FlowHeaderComponent {
162
158
  }));
163
159
  }
164
160
  }
165
- FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i2.FlowStateService }, { token: i2.FlowInfoService }, { token: i2$1.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
161
+ FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
166
162
  FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowHeaderComponent, selector: "vl-flow-new-header", ngImport: i0, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
167
163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowHeaderComponent, decorators: [{
168
164
  type: Component,
169
165
  args: [{ selector: 'vl-flow-new-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"] }]
170
- }], ctorParameters: function () { return [{ type: i1$1.UITemplatesApiService }, { type: i2.FlowStateService }, { type: i2.FlowInfoService }, { type: i2$1.ToastService }, { type: undefined, decorators: [{
166
+ }], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }, { type: i2.ToastService }, { type: undefined, decorators: [{
171
167
  type: Optional
172
168
  }, {
173
169
  type: Inject,
@@ -189,8 +185,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
189
185
  }] });
190
186
 
191
187
  class GuidedSellingComponent {
192
- constructor(templatesApi, flowStateService, flowInfo, toastService, customizationService) {
193
- this.templatesApi = templatesApi;
188
+ constructor(templatesAdminApiService, flowStateService, flowInfo, toastService, customizationService) {
189
+ this.templatesAdminApiService = templatesAdminApiService;
194
190
  this.flowStateService = flowStateService;
195
191
  this.flowInfo = flowInfo;
196
192
  this.toastService = toastService;
@@ -210,9 +206,6 @@ class GuidedSellingComponent {
210
206
  }
211
207
  initialize() {
212
208
  this.templateApiName = this.flowInfo.flow?.properties.templates?.guidedSelling ?? '';
213
- if (this.flowInfo.isLegacy && !this.templateApiName) {
214
- return;
215
- }
216
209
  this.generateUIDefinition$()
217
210
  .pipe(tap(uiDef => {
218
211
  if (!uiDef) {
@@ -247,7 +240,7 @@ class GuidedSellingComponent {
247
240
  if (!template) {
248
241
  return of(undefined);
249
242
  }
250
- return this.templatesApi.fetchComponentsAttachments$(template.id);
243
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
251
244
  }
252
245
  generateUIDefinition$() {
253
246
  return of(undefined).pipe(tap(() => {
@@ -261,7 +254,6 @@ class GuidedSellingComponent {
261
254
  const uiDef = {
262
255
  name: '',
263
256
  createdTimestamp: 0,
264
- primary: true,
265
257
  type: 'DEFAULT',
266
258
  version: 2,
267
259
  children: metaList.map(meta => ({
@@ -275,12 +267,12 @@ class GuidedSellingComponent {
275
267
  }));
276
268
  }
277
269
  }
278
- GuidedSellingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, deps: [{ token: i1$1.UITemplatesApiService }, { token: i2.FlowStateService }, { token: i2.FlowInfoService }, { token: i2$1.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
270
+ GuidedSellingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, deps: [{ token: i1$1.UITemplatesAdminApiService }, { token: i3$1.FlowStateService }, { token: i3$1.FlowInfoService }, { token: i2.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
279
271
  GuidedSellingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: GuidedSellingComponent, selector: "vl-flow-guided-selling", ngImport: i0, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
280
272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GuidedSellingComponent, decorators: [{
281
273
  type: Component,
282
274
  args: [{ selector: 'vl-flow-guided-selling', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"uiDefinition$ | async as uiDefinition\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n</ng-container>\n", styles: [":host,vl-cms-preview{display:contents}\n"] }]
283
- }], ctorParameters: function () { return [{ type: i1$1.UITemplatesApiService }, { type: i2.FlowStateService }, { type: i2.FlowInfoService }, { type: i2$1.ToastService }, { type: undefined, decorators: [{
275
+ }], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i3$1.FlowStateService }, { type: i3$1.FlowInfoService }, { type: i2.ToastService }, { type: undefined, decorators: [{
284
276
  type: Optional
285
277
  }, {
286
278
  type: Inject,
@@ -334,10 +326,10 @@ const configurePrimengShadowDOM = () => {
334
326
  };
335
327
 
336
328
  class FlowDialogService {
337
- constructor(dialogService, contextService, runtimeSettings) {
329
+ constructor(dialogService, runtimeSettings, flowInfoService) {
338
330
  this.dialogService = dialogService;
339
- this.contextService = contextService;
340
331
  this.runtimeSettings = runtimeSettings;
332
+ this.flowInfoService = flowInfoService;
341
333
  }
342
334
  show(config) {
343
335
  return this.dialogService.open(FlowDialogComponent, {
@@ -358,8 +350,8 @@ class FlowDialogService {
358
350
  });
359
351
  }
360
352
  showReadonlyModeDialog() {
361
- const ctx = this.contextService.resolve();
362
- const objectName = ctx.mode ? ctx.mode[0]?.toUpperCase() + ctx.mode.substring(1).toLowerCase() : 'Object';
353
+ const mode = this.flowInfoService.context.mode;
354
+ const objectName = mode ? mode[0]?.toUpperCase() + mode.substring(1).toLowerCase() : 'Object';
363
355
  return this.show({
364
356
  title: 'Error',
365
357
  description: `${objectName} Cannot be Saved`,
@@ -431,20 +423,18 @@ class FlowDialogService {
431
423
  return dialogFunction(dialog);
432
424
  }
433
425
  }
434
- 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 });
426
+ FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i3$1.RuntimeSettingsService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
435
427
  FlowDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService });
436
428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowDialogService, decorators: [{
437
429
  type: Injectable
438
- }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.ContextService }, { type: i2.RuntimeSettingsService }]; } });
430
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i3$1.RuntimeSettingsService }, { type: i3$1.FlowInfoService }]; } });
439
431
 
440
432
  class FlowRouterService {
441
- constructor(router, route, contextService, integrationState, flowInfoService, flowStateService) {
433
+ constructor(router, route, integrationState, flowInfoService) {
442
434
  this.router = router;
443
435
  this.route = route;
444
- this.contextService = contextService;
445
436
  this.integrationState = integrationState;
446
437
  this.flowInfoService = flowInfoService;
447
- this.flowStateService = flowStateService;
448
438
  this.urlHistory = [];
449
439
  this.getLastChildRoute = (route) => {
450
440
  return route.firstChild ? this.getLastChildRoute(route.firstChild) : route;
@@ -538,7 +528,7 @@ class FlowRouterService {
538
528
  this.router.navigateByUrl(prevUrl);
539
529
  }
540
530
  }
541
- navigateTo(path, productId, lineItemId) {
531
+ navigateTo(path, productId, transactionItemId) {
542
532
  if (path === 'shopping-cart') {
543
533
  this.navigateToShoppingCart();
544
534
  }
@@ -549,31 +539,16 @@ class FlowRouterService {
549
539
  this.navigateToAssets();
550
540
  }
551
541
  else if (path === 'product' && productId) {
552
- this.navigateToProductConfiguration(productId, lineItemId);
542
+ this.navigateToProductConfiguration(productId, transactionItemId);
553
543
  }
554
544
  }
555
- navigateToProductConfiguration(productId, lineItemId) {
556
- let updateContext$;
557
- if (this.flowInfoService.isLegacy) {
558
- updateContext$ = of(undefined).pipe(tap(() => {
559
- this.contextService.update({ properties: { productId, lineItemId: lineItemId ?? '' } });
560
- }));
561
- }
562
- else {
563
- updateContext$ = this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_CONTEXT_PROPERTIES', {
564
- productId,
565
- lineItemId: lineItemId ?? '',
566
- });
567
- }
568
- updateContext$
569
- .pipe(tap(() => {
570
- const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
571
- const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
572
- this.router.navigate([flowRouteUrl, 'product'], {
573
- queryParams: { ...routeSnapshot.queryParams, productId },
574
- });
575
- }))
576
- .subscribe();
545
+ navigateToProductConfiguration(productId, transactionItemId) {
546
+ this.flowInfoService.updateContext({ productId, transactionItemId });
547
+ const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
548
+ const flowRouteUrl = this.getFlowRootPath(routeSnapshot);
549
+ this.router.navigate([flowRouteUrl, 'product'], {
550
+ queryParams: { ...routeSnapshot.queryParams, productId, transactionItemId },
551
+ });
577
552
  }
578
553
  navigateToShoppingCart() {
579
554
  const routeSnapshot = this.getLastChildRouteSnapshot(this.route.snapshot);
@@ -610,23 +585,20 @@ class FlowRouterService {
610
585
  this.router.navigate([], { relativeTo: route, queryParams: { ...routeSnapshot.queryParams, ...queryParams } });
611
586
  }
612
587
  }
613
- FlowRouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.ContextService }, { token: i2.IntegrationState }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
588
+ FlowRouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i3$1.IntegrationState }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
614
589
  FlowRouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, providedIn: 'root' });
615
590
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRouterService, decorators: [{
616
591
  type: Injectable,
617
592
  args: [{ providedIn: 'root' }]
618
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.ContextService }, { type: i2.IntegrationState }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }]; } });
593
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i3$1.IntegrationState }, { type: i3$1.FlowInfoService }]; } });
619
594
 
620
595
  class FlowService {
621
- constructor(integrationState, flowRouterService, quoteDraftService, configurationService, configurationStateService, flowDialogService, flowConfigurationService, flowInfoService, flowStateService) {
596
+ constructor(integrationState, flowRouterService, configurationService, configurationStateService, flowDialogService, flowStateService) {
622
597
  this.integrationState = integrationState;
623
598
  this.flowRouterService = flowRouterService;
624
- this.quoteDraftService = quoteDraftService;
625
599
  this.configurationService = configurationService;
626
600
  this.configurationStateService = configurationStateService;
627
601
  this.flowDialogService = flowDialogService;
628
- this.flowConfigurationService = flowConfigurationService;
629
- this.flowInfoService = flowInfoService;
630
602
  this.flowStateService = flowStateService;
631
603
  this.cleanup$ = new Subject();
632
604
  }
@@ -636,16 +608,9 @@ class FlowService {
636
608
  initSubscriptions() {
637
609
  this.integrationState
638
610
  .listen$(FlowAction.FLOW_CONFIGURE_PRODUCT)
639
- .pipe(switchMap(payload => {
640
- if (this.flowInfoService.isLegacy) {
641
- const productId = payload.productId ??
642
- this.quoteDraftService.currentState.find(li => li.id === payload.lineItemId)?.productId;
643
- return of({ ...payload, productId });
644
- }
645
- return this.prepareConfiguration$(payload.lineItemId).pipe(map(() => payload));
646
- }), tap(payload => {
611
+ .pipe(tap(payload => {
647
612
  if (payload.productId) {
648
- this.flowRouterService.navigateToProductConfiguration(payload.productId, payload.lineItemId);
613
+ this.flowRouterService.navigateToProductConfiguration(payload.productId, payload.transactionItemId);
649
614
  }
650
615
  else {
651
616
  console.warn("Parameter 'productId' is needed to start configuration");
@@ -669,7 +634,7 @@ class FlowService {
669
634
  this.integrationState.dispatch(FlowAction.ConfigureProductAction(payload));
670
635
  }
671
636
  else {
672
- this.flowRouterService.navigateTo(payload.path, payload.productId, payload.lineItemId);
637
+ this.flowRouterService.navigateTo(payload.path, payload.productId, payload.transactionItemId);
673
638
  }
674
639
  }), takeUntil(this.cleanup$))
675
640
  .subscribe();
@@ -689,17 +654,10 @@ class FlowService {
689
654
  .subscribe();
690
655
  this.integrationState
691
656
  .listen$(FlowAction.FLOW_APPLY_PRODUCT_CONFIGURATION)
692
- .pipe(switchMap(() => {
693
- if (this.flowInfoService.isLegacy) {
694
- return this.legacyApplyConfiguration();
695
- }
696
- else {
697
- return this.configurationStateService.saveConfiguration(true).pipe(switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
698
- addConfiguringAssetId: true,
699
- enable: true,
700
- })));
701
- }
702
- }), tap(() => {
657
+ .pipe(switchMap(() => this.configurationStateService.saveConfiguration()), switchMap(() => this.configurationStateService.cancelConfiguration()), switchMap(() => this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'MODIFY_ASSETS', {
658
+ addConfiguringAssetId: true,
659
+ enable: true,
660
+ })), tap(() => {
703
661
  this.configurationService.hasUnsavedChanges = false;
704
662
  this.flowRouterService.navigateToShoppingCart();
705
663
  }), takeUntil(this.cleanup$))
@@ -715,36 +673,12 @@ class FlowService {
715
673
  .pipe(map(path => path.queryParams['productId']), takeUntil(this.cleanup$))
716
674
  .subscribe(productId => this.integrationState.patchState({ productId }));
717
675
  }
718
- prepareConfiguration$(lineItemId) {
719
- if (!lineItemId) {
720
- return of(undefined);
721
- }
722
- return this.flowStateService.dispatch$(UITemplateType.FLOW_ENGINE, 'UPDATE_PRICE_LIST', {
723
- lineItemId,
724
- });
725
- }
726
- legacyApplyConfiguration() {
727
- const quoteDraft = this.quoteDraftService.quoteDraft;
728
- const lineItem = this.configurationService.getSnapshot();
729
- if (!quoteDraft || !lineItem) {
730
- return of(undefined);
731
- }
732
- const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
733
- let updatedState;
734
- if (isNewLineItem) {
735
- updatedState = [...quoteDraft.currentState, lineItem];
736
- }
737
- else {
738
- updatedState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
739
- }
740
- return this.flowConfigurationService.calculate$({ ...quoteDraft, currentState: updatedState });
741
- }
742
676
  }
743
- FlowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, deps: [{ token: i5.IntegrationState }, { token: FlowRouterService }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: FlowDialogService }, { token: i2.FlowConfigurationService }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
677
+ 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 }], target: i0.ɵɵFactoryTarget.Injectable });
744
678
  FlowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService });
745
679
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowService, decorators: [{
746
680
  type: Injectable
747
- }], 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 }]; } });
681
+ }], ctorParameters: function () { return [{ type: i5.IntegrationState }, { type: FlowRouterService }, { type: i3$1.ConfigurationService }, { type: i3$1.ConfigurationStateService }, { type: FlowDialogService }, { type: i3$1.FlowStateService }]; } });
748
682
 
749
683
  class FlowGuidedSellingService {
750
684
  constructor(integrationState) {
@@ -768,21 +702,21 @@ class FlowGuidedSellingService {
768
702
  .subscribe();
769
703
  }
770
704
  }
771
- FlowGuidedSellingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, deps: [{ token: i2.IntegrationState }], target: i0.ɵɵFactoryTarget.Injectable });
705
+ FlowGuidedSellingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, deps: [{ token: i3$1.IntegrationState }], target: i0.ɵɵFactoryTarget.Injectable });
772
706
  FlowGuidedSellingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService });
773
707
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowGuidedSellingService, decorators: [{
774
708
  type: Injectable
775
- }], ctorParameters: function () { return [{ type: i2.IntegrationState }]; } });
709
+ }], ctorParameters: function () { return [{ type: i3$1.IntegrationState }]; } });
776
710
 
777
711
  class FlowComponent {
778
- constructor(routerService, flowService, flowInfo, guidedSellingService) {
712
+ constructor(routerService, flowService, flowInfoService, guidedSellingService) {
779
713
  this.routerService = routerService;
780
714
  this.flowService = flowService;
781
- this.flowInfo = flowInfo;
715
+ this.flowInfoService = flowInfoService;
782
716
  this.guidedSellingService = guidedSellingService;
783
717
  this.isLoading$ = this.routerService.loading$;
784
- this.showHeader$ = combineLatest([this.routerService.route$, this.flowInfo.flow$]).pipe(map(([route, flow]) => route.data['showHeader'] && !flow?.properties.standalone));
785
- this.isStandalone$ = this.flowInfo.flow$.pipe(map(flow => Boolean(flow?.properties.standalone)));
718
+ this.showHeader$ = combineLatest([this.routerService.route$, this.flowInfoService.flow$]).pipe(map(([route, flow]) => route.data['showHeader'] && !flow?.properties.standalone));
719
+ this.isStandalone$ = this.flowInfoService.flow$.pipe(map(flow => Boolean(flow?.properties.standalone)));
786
720
  this.guidedSellingVisible$ = this.guidedSellingService.isVisible$;
787
721
  this.flowService.initSubscriptions();
788
722
  }
@@ -790,140 +724,36 @@ class FlowComponent {
790
724
  this.flowService.cleanup();
791
725
  }
792
726
  }
793
- 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 });
794
- FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2$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 });
727
+ 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 });
728
+ FlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FlowComponent, selector: "vl-flow", ngImport: i0, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "component", type: FlowHeaderComponent, selector: "vl-flow-new-header" }, { kind: "component", type: GuidedSellingComponent, selector: "vl-flow-guided-selling" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
795
729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowComponent, decorators: [{
796
730
  type: Component,
797
731
  args: [{ selector: 'vl-flow', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-flow-new-header *ngIf=\"showHeader$ | async\"></vl-flow-new-header>\n\n<div class=\"flow-content\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\">\n <vl-loader label=\"LOADING\"></vl-loader>\n </div>\n\n <router-outlet></router-outlet>\n\n <div class=\"guided-selling\" [ngClass]=\"{ hidden: (guidedSellingVisible$ | async) === false }\">\n <vl-flow-guided-selling *ngIf=\"(isStandalone$ | async) !== true\"></vl-flow-guided-selling>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%}.flow-content{flex-grow:1;position:relative;overflow:hidden}.loading-overlay{position:absolute;height:100%;width:100%;inset:0;background-color:#fff;z-index:999}.guided-selling{position:absolute;top:0;width:100%;height:100%;z-index:100}.hidden{display:none}\n"] }]
798
- }], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type: i2.FlowInfoService }, { type: FlowGuidedSellingService }]; } });
799
-
800
- const getFlowObjectIdPropertyName = (id) => {
801
- const objectName = SalesforceIdUtils.getSfObjectNameById(id);
802
- switch (objectName) {
803
- case 'Account':
804
- return 'accountId';
805
- case 'Order':
806
- return 'orderId';
807
- case 'Quote':
808
- default:
809
- return 'quoteId';
810
- }
811
- };
812
- const getDefaultProperties = (params) => {
813
- const properties = {};
814
- let standalone = params.flowParams?.standalone;
815
- if (params.flowParams?.entryPath.includes('/product') || params.mode === ConfigurationContextMode.REMOTE) {
816
- standalone = standalone ?? true;
817
- }
818
- if (standalone != null) {
819
- properties.standalone = standalone ? 'true' : 'false';
820
- }
821
- return properties;
822
- };
823
-
824
- class ContextGuard {
825
- constructor(router, routerService, contextService, runtimeSettingsService) {
826
- this.router = router;
827
- this.routerService = routerService;
828
- this.contextService = contextService;
829
- this.runtimeSettingsService = runtimeSettingsService;
830
- }
831
- checkActivation(route) {
832
- const { queryParams } = route;
833
- const { accountId, quoteId, orderId } = queryParams;
834
- const rpcMessage = window.RPC_MESSAGE;
835
- const mode = this.getConfigurationContextMode(accountId, quoteId, orderId, rpcMessage);
836
- // Restrict if mode is not defined
837
- if (mode == null) {
838
- return this.routerService.showErrorPage$('Mode is undefined');
839
- }
840
- const headerId = accountId || quoteId || orderId || this.rpcMessageId || 'empty-for-test-mode';
841
- // Allow if context is already initialized with the same headerId
842
- if (this.contextService.isInitialized) {
843
- const currentContext = this.contextService.resolve();
844
- if (headerId && currentContext.headerId === headerId) {
845
- return of(true);
846
- }
847
- }
848
- // Initialize context and runtime settings
849
- return forkJoin([this.contextService.create(headerId, mode), this.runtimeSettingsService.create()]).pipe(tap(([context]) => {
850
- this.contextService.update({
851
- ...context,
852
- properties: {
853
- ...context.properties,
854
- ...(queryParams ?? {}),
855
- ...getDefaultProperties({ mode }),
856
- },
857
- });
858
- // Init currency settings
859
- this.runtimeSettingsService.initCurrency(context.properties['CurrencyIsoCode']);
860
- }), map(() => true), catchError(e => {
861
- const message = e instanceof HttpErrorResponse ? e.error.message : e;
862
- const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
863
- return this.routerService.showErrorPage$(message, errorDetails);
864
- }));
865
- }
866
- canActivate(route) {
867
- return this.checkActivation(route);
868
- }
869
- canActivateChild(childRoute) {
870
- return this.checkActivation(childRoute);
871
- }
872
- get rpcMessageId() {
873
- if (!window.RPC_MESSAGE) {
874
- return;
875
- }
876
- const rpcMessage = JSON.parse(window.RPC_MESSAGE);
877
- const veloceReferenceId = rpcMessage.configuration?.VeloceReferenceId;
878
- const quoteId = rpcMessage.quote?.Id;
879
- return veloceReferenceId || quoteId;
880
- }
881
- getConfigurationContextMode(accountId, quoteId, orderId, rpcMessage) {
882
- if (accountId) {
883
- return ConfigurationContextMode.ACCOUNT;
884
- }
885
- if (quoteId) {
886
- return ConfigurationContextMode.QUOTE;
887
- }
888
- if (orderId) {
889
- return ConfigurationContextMode.ORDER;
890
- }
891
- if (rpcMessage) {
892
- return ConfigurationContextMode.REMOTE;
893
- }
894
- return;
895
- }
896
- }
897
- ContextGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
898
- ContextGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard });
899
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextGuard, decorators: [{
900
- type: Injectable
901
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.RuntimeSettingsService }]; } });
732
+ }], ctorParameters: function () { return [{ type: FlowRouterService }, { type: FlowService }, { type: i3$1.FlowInfoService }, { type: FlowGuidedSellingService }]; } });
902
733
 
903
734
  const keepFlowInitialized = (route) => {
904
- const contextService = inject(ContextService);
735
+ const routerService = inject(FlowRouterService);
736
+ const runtimeSettingsService = inject(RuntimeSettingsService);
905
737
  const flowState = inject(FlowStateService);
906
738
  const flowInfoService = inject(FlowInfoService);
907
- const routerService = inject(FlowRouterService);
908
- const quoteDraft = inject(QuoteDraftService);
739
+ const salesTrasnsactionService = inject(SalesTransactionService);
909
740
  const configurationService = inject(ConfigurationService);
910
741
  const integrationState = inject(IntegrationState);
911
742
  const { flowId } = route.queryParams;
912
- const flow = flowInfoService.flow;
913
- if (flow && flow?.id === flowId) {
743
+ if (flowInfoService.isFlowInitialized && flowInfoService.flow.id === flowId) {
914
744
  return true;
915
745
  }
916
746
  // Cleanup
917
- flowState.cleanup();
918
- quoteDraft.reset();
747
+ flowState.reset();
748
+ salesTrasnsactionService.reset();
919
749
  configurationService.reset();
920
- integrationState.clear();
921
- flowInfoService.cleanup();
922
- contextService.delete();
750
+ integrationState.reset();
751
+ flowInfoService.reset();
923
752
  if (!flowId) {
924
753
  return true;
925
754
  }
926
- return flowInfoService.init$(flowId, route.queryParams).pipe(map(() => true), catchError(e => {
755
+ return runtimeSettingsService.create().pipe(tap(() => runtimeSettingsService.initCurrency('USD')), switchMap(() => flowInfoService.init$(flowId, route.queryParams)), map(() => true), catchError(e => {
756
+ console.error(e);
927
757
  const message = e instanceof HttpErrorResponse ? e.error.message : e;
928
758
  const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
929
759
  return routerService.showErrorPage$(message, errorDetails);
@@ -931,22 +761,20 @@ const keepFlowInitialized = (route) => {
931
761
  };
932
762
 
933
763
  class ProductUnloadGuard {
934
- constructor(router, contextService, quoteDraftService, configurationService, flowDialogService) {
764
+ constructor(router, flowInfoService, configurationService, flowDialogService) {
935
765
  this.router = router;
936
- this.contextService = contextService;
937
- this.quoteDraftService = quoteDraftService;
766
+ this.flowInfoService = flowInfoService;
938
767
  this.configurationService = configurationService;
939
768
  this.flowDialogService = flowDialogService;
940
769
  }
941
770
  canDeactivate(_, route, currentState, nextState) {
942
771
  let observable = of(true);
943
- if (!this.quoteDraftService.isStandalone && this.configurationService.hasUnsavedChanges) {
772
+ if (!this.flowInfoService.flow.properties.standalone && this.configurationService.hasUnsavedChanges) {
944
773
  observable = this.flowDialogService.showUnsavedChangesDialog();
945
774
  }
946
775
  return observable.pipe(map(unload => {
947
776
  if (unload) {
948
777
  this.configurationService.reset();
949
- this.contextService.update({ properties: { productId: undefined, lineItemId: undefined } });
950
778
  if (!nextState || currentState.url === nextState.url) {
951
779
  return true;
952
780
  }
@@ -964,11 +792,11 @@ class ProductUnloadGuard {
964
792
  }));
965
793
  }
966
794
  }
967
- 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 });
795
+ ProductUnloadGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, deps: [{ token: i1$2.Router }, { token: i3$1.FlowInfoService }, { token: i3$1.ConfigurationService }, { token: FlowDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
968
796
  ProductUnloadGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard });
969
797
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductUnloadGuard, decorators: [{
970
798
  type: Injectable
971
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.ContextService }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationService }, { type: FlowDialogService }]; } });
799
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i3$1.FlowInfoService }, { type: i3$1.ConfigurationService }, { type: FlowDialogService }]; } });
972
800
 
973
801
  class RootGuard {
974
802
  constructor(router, routerService) {
@@ -1011,8 +839,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1011
839
  }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }]; } });
1012
840
 
1013
841
  class AssetsComponent {
1014
- constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
1015
- this.templatesApi = templatesApi;
842
+ constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
843
+ this.templatesAdminApiService = templatesAdminApiService;
1016
844
  this.cdr = cdr;
1017
845
  this.toastService = toastService;
1018
846
  this.flowInfo = flowInfo;
@@ -1065,7 +893,7 @@ class AssetsComponent {
1065
893
  if (!template) {
1066
894
  return of(undefined);
1067
895
  }
1068
- return this.templatesApi.fetchComponentsAttachments$(template.id);
896
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
1069
897
  }
1070
898
  generateUIDefinition$() {
1071
899
  return of(undefined).pipe(tap(() => {
@@ -1079,7 +907,6 @@ class AssetsComponent {
1079
907
  const uiDef = {
1080
908
  name: '',
1081
909
  createdTimestamp: 0,
1082
- primary: true,
1083
910
  type: 'DEFAULT',
1084
911
  version: 2,
1085
912
  children: metaList.map(meta => ({
@@ -1093,12 +920,12 @@ class AssetsComponent {
1093
920
  }));
1094
921
  }
1095
922
  }
1096
- 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 });
1097
- AssetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AssetsComponent, selector: "vl-flow-assets", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
923
+ 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 });
924
+ AssetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AssetsComponent, selector: "vl-flow-assets", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1098
925
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AssetsComponent, decorators: [{
1099
926
  type: Component,
1100
927
  args: [{ selector: 'vl-flow-assets', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1101
- }], ctorParameters: function () { return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: i2.FlowInfoService }, { type: undefined, decorators: [{
928
+ }], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
1102
929
  type: Optional
1103
930
  }, {
1104
931
  type: Inject,
@@ -1120,8 +947,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1120
947
  }] });
1121
948
 
1122
949
  class CatalogComponent {
1123
- constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
1124
- this.templatesApi = templatesApi;
950
+ constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
951
+ this.templatesAdminApiService = templatesAdminApiService;
1125
952
  this.cdr = cdr;
1126
953
  this.toastService = toastService;
1127
954
  this.flowInfo = flowInfo;
@@ -1174,7 +1001,7 @@ class CatalogComponent {
1174
1001
  if (!template) {
1175
1002
  return of(undefined);
1176
1003
  }
1177
- return this.templatesApi.fetchComponentsAttachments$(template.id);
1004
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
1178
1005
  }
1179
1006
  generateUIDefinition$() {
1180
1007
  return of(undefined).pipe(tap(() => {
@@ -1188,7 +1015,6 @@ class CatalogComponent {
1188
1015
  const uiDef = {
1189
1016
  name: '',
1190
1017
  createdTimestamp: 0,
1191
- primary: true,
1192
1018
  type: 'DEFAULT',
1193
1019
  version: 2,
1194
1020
  children: metaList.map(meta => ({
@@ -1202,12 +1028,12 @@ class CatalogComponent {
1202
1028
  }));
1203
1029
  }
1204
1030
  }
1205
- 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 });
1206
- CatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CatalogComponent, selector: "vl-flow-catalog", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1031
+ 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 });
1032
+ CatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CatalogComponent, selector: "vl-flow-catalog", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1207
1033
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CatalogComponent, decorators: [{
1208
1034
  type: Component,
1209
1035
  args: [{ selector: 'vl-flow-catalog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1210
- }], ctorParameters: function () { return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: i2.FlowInfoService }, { type: undefined, decorators: [{
1036
+ }], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
1211
1037
  type: Optional
1212
1038
  }, {
1213
1039
  type: Inject,
@@ -1229,12 +1055,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1229
1055
  }] });
1230
1056
 
1231
1057
  class DebugComponent {
1232
- constructor(flowsApiService, router, activatedRoute, context, quoteDraftService) {
1058
+ constructor(flowsApiService, router, activatedRoute) {
1233
1059
  this.flowsApiService = flowsApiService;
1234
1060
  this.router = router;
1235
1061
  this.activatedRoute = activatedRoute;
1236
- this.context = context;
1237
- this.quoteDraftService = quoteDraftService;
1238
1062
  this.form = new FormGroup({
1239
1063
  id: new FormControl(''),
1240
1064
  });
@@ -1242,17 +1066,13 @@ class DebugComponent {
1242
1066
  }
1243
1067
  runFlow() {
1244
1068
  const { id } = this.form.value;
1245
- const objectPropertyName = id && getFlowObjectIdPropertyName(id);
1246
- if (!id || !objectPropertyName || !this.selectedFlow) {
1069
+ if (!id || !this.selectedFlow) {
1247
1070
  return;
1248
1071
  }
1249
- // Delete context before starting a new flow
1250
- this.context.delete();
1251
- this.quoteDraftService.reset();
1252
1072
  this.router.navigate(['..', 'flows'], {
1253
1073
  queryParams: {
1254
1074
  flowId: this.selectedFlow.id,
1255
- [objectPropertyName]: id,
1075
+ headerId: id,
1256
1076
  ...this.selectedFlow.properties.queryParams,
1257
1077
  },
1258
1078
  relativeTo: this.activatedRoute,
@@ -1262,12 +1082,12 @@ class DebugComponent {
1262
1082
  return new HttpParams({ fromObject: params }).toString();
1263
1083
  }
1264
1084
  }
1265
- DebugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, deps: [{ token: i1$1.FlowsApiService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.ContextService }, { token: i2.QuoteDraftService }], target: i0.ɵɵFactoryTarget.Component });
1266
- DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DebugComponent, selector: "vl-flow-debug", ngImport: i0, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: 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 });
1085
+ 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 });
1086
+ DebugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DebugComponent, selector: "vl-flow-debug", ngImport: i0, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5$1.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1267
1087
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DebugComponent, decorators: [{
1268
1088
  type: Component,
1269
1089
  args: [{ selector: 'vl-flow-debug', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\">\n <div class=\"fields-container\">\n <div class=\"field\">\n <label>SF Object ID</label>\n <input formControlName=\"id\" pInputText type=\"text\" />\n </div>\n </div>\n\n <p-button\n styleClass=\"p-button-primary\"\n label=\"Run Flow\"\n [disabled]=\"!form.value.id || !selectedFlow\"\n (onClick)=\"runFlow()\"\n ></p-button>\n</form>\n\n<table>\n <thead>\n <tr>\n <th [width]=\"30\"></th>\n <th [width]=\"160\">ID</th>\n <th [width]=\"160\">Entry Path</th>\n <th>QueryParams</th>\n <th [width]=\"100\">Standalone</th>\n <th [width]=\"100\">Stateful</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let flow of flows$ | async\" (click)=\"selectedFlow = flow\">\n <td><p-radioButton [inputId]=\"flow.id\" name=\"flow\" [value]=\"flow\" [(ngModel)]=\"selectedFlow\"></p-radioButton></td>\n <td>{{ flow.id }}</td>\n <td>{{ flow.properties.entryPath }}</td>\n <td class=\"cell-query-params\">{{ getQueryParamsString(flow.properties.queryParams) }}</td>\n <td>{{ flow.properties.standalone }}</td>\n <td>{{ flow.properties.stateful }}</td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{display:block;padding:24px 54px}form{display:flex;align-items:center;justify-content:space-between}.fields-container{display:flex;gap:24px}.field{display:flex;flex-direction:column;width:200px;flex-shrink:0}:host ::ng-deep .p-dropdown{width:100%}table{width:100%;border-collapse:collapse;table-layout:fixed}tbody>tr{cursor:pointer}tbody>tr:hover{background-color:#f0f5fa}th{text-align:left;font-weight:600}th,td{padding:0 10px;height:30px;border-bottom:1px solid var(--vl-border-color);margin-right:16px;line-height:18px}.cell-query-params{word-break:break-all}\n"] }]
1270
- }], ctorParameters: function () { return [{ type: i1$1.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.ContextService }, { type: i2.QuoteDraftService }]; } });
1090
+ }], ctorParameters: function () { return [{ type: i1$1.FlowsApiService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; } });
1271
1091
 
1272
1092
  const routes$1 = [{ path: '', component: DebugComponent }];
1273
1093
  class DebugModule {
@@ -1305,121 +1125,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1305
1125
  }] });
1306
1126
 
1307
1127
  class ProductComponent {
1308
- constructor(contextService, configurationRuntimeService, configurationService, configurationStateService, quoteDraftService, flowInfoService, flowStateService, integrationState, customizationService) {
1309
- this.contextService = contextService;
1128
+ constructor(configurationRuntimeService, configurationStateService) {
1310
1129
  this.configurationRuntimeService = configurationRuntimeService;
1311
- this.configurationService = configurationService;
1312
1130
  this.configurationStateService = configurationStateService;
1313
- this.quoteDraftService = quoteDraftService;
1314
- this.flowInfoService = flowInfoService;
1315
- this.flowStateService = flowStateService;
1316
- this.integrationState = integrationState;
1317
- this.customizationService = customizationService;
1318
- this.uiDefinition$ = new BehaviorSubject(undefined);
1131
+ this.uiDefinitionContainer$ = new BehaviorSubject(null);
1132
+ this.uiDefinitionContainer$.next(this.configurationRuntimeService.uiDefinitionContainer);
1319
1133
  this.config = {
1320
1134
  init$: () => this.init$(),
1321
1135
  };
1322
1136
  }
1323
- customizeUI$() {
1324
- const { productId } = this.configurationRuntimeService.runtimeContext ?? {};
1325
- if (!productId || !this.customizationService?.getUiDefinition) {
1326
- return of(undefined);
1327
- }
1328
- return this.customizationService.getUiDefinition(productId).pipe(map(uiDefinitionContainer => {
1329
- if (uiDefinitionContainer) {
1330
- this.configurationRuntimeService.overrideUIDefinition(uiDefinitionContainer);
1331
- }
1332
- }));
1333
- }
1334
1137
  init$() {
1335
- let quoteDraft$;
1336
- if (this.flowInfoService.isLegacy || !this.flowInfoService.isStateful) {
1337
- quoteDraft$ = this.quoteDraftService.quoteDraft$;
1338
- }
1339
- else {
1340
- quoteDraft$ = of(undefined);
1341
- }
1342
- return quoteDraft$.pipe(first(), switchMap(quote => {
1343
- const contextProperties = this.contextService.resolve().properties;
1344
- const productId = contextProperties.productId ?? this.flowInfoService.flow?.properties.queryParams['productId'];
1345
- const defaultUIDefinitionId = this.flowInfoService.flow?.properties.queryParams['defaultUIDefinitionId'];
1346
- const requiredUIDefinitionId = this.flowInfoService.flow?.properties.queryParams['requiredUIDefinitionId'];
1347
- if (!productId) {
1348
- throw new Error(`Unable to start configuration for 'productId == null'`);
1349
- }
1350
- if (!quote) {
1351
- const offeringId = contextProperties.offeringId;
1352
- return this.configurationRuntimeService.init({ productId, offeringId });
1353
- }
1354
- const lineItem = this.getLineItem(quote, productId, contextProperties.lineItemId);
1355
- if (lineItem) {
1356
- this.configurationService.setConfigurableRamp(lineItem);
1357
- }
1358
- const { offeringId } = lineItem ?? {};
1359
- return this.configurationRuntimeService.init({
1360
- productId,
1361
- offeringId,
1362
- defaultUIDefinitionId,
1363
- requiredUIDefinitionId,
1364
- });
1365
- }), switchMap(() => this.customizeUI$()), tap(() => {
1366
- const uiDefinition = this.configurationRuntimeService.runtimeContext?.uiDefinitionContainer?.source;
1367
- if (uiDefinition) {
1368
- this.uiDefinition$.next(uiDefinition);
1369
- }
1370
- else {
1371
- throw new Error('Product does not have Configuration UI');
1372
- }
1373
- }), tap(() => {
1374
- if (this.configurationRuntimeService.initializationProps) {
1375
- this.configurationRuntimeService.initializationProps.attributesMap =
1376
- this.integrationState.state.guidedSelling;
1377
- }
1378
- }), switchMap(() => this.configurationStateService.init$()));
1379
- }
1380
- getLineItem(quote, productId, lineItemId) {
1381
- // search by lineItemId first
1382
- let li = quote.currentState.find(li => li.id === lineItemId);
1383
- if (!li && this.quoteDraftService.isStandalone) {
1384
- li = quote.currentState.find(li => li.productId === productId);
1385
- }
1386
- // If still not found, is could be an asset
1387
- if (!li) {
1388
- li = this.quoteDraftService.assetsState?.currentState.find(li => li.id === lineItemId);
1389
- }
1390
- return li;
1138
+ return this.configurationStateService.init$();
1391
1139
  }
1392
1140
  }
1393
- 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 });
1394
- ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ProductComponent, selector: "vl-flow-product", ngImport: i0, template: "<vl-cms-preview [uiDefinition]=\"$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 });
1141
+ 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 });
1142
+ ProductComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ProductComponent, selector: "vl-flow-product", ngImport: i0, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n", styles: [""], dependencies: [{ kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1395
1143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductComponent, decorators: [{
1396
1144
  type: Component,
1397
- args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"$any(uiDefinition$ | async)\" [config]=\"config\"></vl-cms-preview>\n" }]
1398
- }], ctorParameters: function () { 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: [{
1399
- type: Optional
1400
- }, {
1401
- type: Inject,
1402
- args: [FLOW_CUSTOMIZATION]
1403
- }] }]; } });
1145
+ args: [{ selector: 'vl-flow-product', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vl-cms-preview [uiDefinition]=\"(uiDefinitionContainer$ | async)?.source\" [config]=\"config\"></vl-cms-preview>\n" }]
1146
+ }], ctorParameters: function () { return [{ type: i3$1.ConfigurationRuntimeService }, { type: i3$1.ConfigurationStateService }]; } });
1404
1147
 
1405
1148
  class ProductModule {
1406
1149
  }
1407
1150
  ProductModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1408
- ProductModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, declarations: [ProductComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [ProductComponent] });
1409
- ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule] });
1151
+ 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] });
1152
+ ProductModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule] });
1410
1153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ProductModule, decorators: [{
1411
1154
  type: NgModule,
1412
1155
  args: [{
1413
1156
  declarations: [ProductComponent],
1414
- imports: [CommonModule, PreviewModule, LoaderModule],
1157
+ imports: [CommonModule, PreviewModule, LoaderModule, LetDirectiveModule],
1415
1158
  exports: [ProductComponent],
1416
1159
  }]
1417
1160
  }] });
1418
1161
 
1419
1162
  class RecordNotFoundComponent {
1420
- constructor(router, route) {
1163
+ constructor(router) {
1421
1164
  this.router = router;
1422
- this.route = route;
1423
1165
  this.subMessage = '';
1424
1166
  this.type = '';
1425
1167
  const navigation = this.router.getCurrentNavigation();
@@ -1432,12 +1174,12 @@ class RecordNotFoundComponent {
1432
1174
  }
1433
1175
  }
1434
1176
  }
1435
- 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 });
1177
+ RecordNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, deps: [{ token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Component });
1436
1178
  RecordNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RecordNotFoundComponent, selector: "vl-flow-record-not-found", ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"message-wrapper\">\n <div *ngIf=\"message; else defaultMessage\">\n <p class=\"text message-text\" [class]=\"type\">{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"text\">{{ subMessage }}</p>\n\n <div *ngIf=\"details && details.length > 0\">\n <div *ngFor=\"let detail of details\" class=\"text\">{{ detail }}</div>\n </div>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;padding:24px 54px}:host .text{white-space:pre-line;word-break:break-word}:host .message-text.error{color:var(--vl-error-text-color)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1437
1179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RecordNotFoundComponent, decorators: [{
1438
1180
  type: Component,
1439
1181
  args: [{ selector: 'vl-flow-record-not-found', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"message-wrapper\">\n <div *ngIf=\"message; else defaultMessage\">\n <p class=\"text message-text\" [class]=\"type\">{{ message }}</p>\n\n <p *ngIf=\"subMessage\" class=\"text\">{{ subMessage }}</p>\n\n <div *ngIf=\"details && details.length > 0\">\n <div *ngFor=\"let detail of details\" class=\"text\">{{ detail }}</div>\n </div>\n </div>\n\n <ng-template #defaultMessage>Record not found</ng-template>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;padding:24px 54px}:host .text{white-space:pre-line;word-break:break-word}:host .message-text.error{color:var(--vl-error-text-color)}\n"] }]
1440
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }]; } });
1182
+ }], ctorParameters: function () { return [{ type: i1$2.Router }]; } });
1441
1183
 
1442
1184
  const routes = [{ path: '', component: RecordNotFoundComponent }];
1443
1185
  class RecordNotFoundModule {
@@ -1453,352 +1195,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1453
1195
  }]
1454
1196
  }] });
1455
1197
 
1456
- class RemoteComponent {
1457
- constructor(contextService, quoteDraftService, runtimeService, configurationService, configurationState, messageService, integrationState, location) {
1458
- this.contextService = contextService;
1459
- this.quoteDraftService = quoteDraftService;
1460
- this.runtimeService = runtimeService;
1461
- this.configurationService = configurationService;
1462
- this.configurationState = configurationState;
1463
- this.messageService = messageService;
1464
- this.integrationState = integrationState;
1465
- this.location = location;
1466
- this.state$ = new BehaviorSubject({ loading: true, failure: false });
1467
- this.DYNAMIC_OPTION_PRODUCTS_KEY = 'Dynamic';
1468
- this.destroyed$ = new Subject();
1469
- this.rpcMessage = JSON.parse(window.RPC_MESSAGE);
1470
- this.rpcMessage.options.sort((a, b) => (a.featureNumber ?? 99999) - (b.featureNumber ?? 99999));
1471
- this.updateHasChildrenFlag(this.rpcMessage.product.configuredProductId);
1472
- // update context properties
1473
- if (this.rpcMessage.quote) {
1474
- const properties = {};
1475
- if (this.rpcMessage.quote['SBQQ__Opportunity2__c']) {
1476
- properties.OpportunityId = this.rpcMessage.quote['SBQQ__Opportunity2__c'];
1477
- }
1478
- Object.entries(this.rpcMessage.quote).forEach(([key, value]) => {
1479
- if (value !== undefined && !(value instanceof Object)) {
1480
- properties[key] = value;
1481
- }
1482
- });
1483
- this.contextService.update({ properties });
1484
- }
1485
- this.initSubscriptions();
1486
- this.initConfiguration();
1487
- }
1488
- ngOnDestroy() {
1489
- this.destroyed$.next();
1490
- this.destroyed$.complete();
1491
- }
1492
- initConfiguration() {
1493
- const productId = this.rpcMessage.product.configuredProductId;
1494
- const quote = this.quoteDraftService.quoteDraft;
1495
- if (!productId || !quote) {
1496
- return;
1497
- }
1498
- this.runtimeService
1499
- .init({ productId })
1500
- .pipe(first(), tap(context => {
1501
- const uiDefinitionProperties = context.uiDefinitionContainer?.source.properties ?? {};
1502
- this.uiDefinition = context.uiDefinitionContainer?.source;
1503
- const pricingEnabled = uiDefinitionProperties.pricingEnabled ? 'true' : 'false';
1504
- const priceListId = uiDefinitionProperties.priceList;
1505
- const runtimeContextProperties = this.runtimeService.runtimeContext?.properties;
1506
- if (runtimeContextProperties) {
1507
- runtimeContextProperties.PriceListId = priceListId;
1508
- runtimeContextProperties.PricingEnabled = pricingEnabled;
1509
- }
1510
- this.contextService.update({
1511
- properties: {
1512
- ModelId: context.modelId,
1513
- RuntimeMode: 'TEST',
1514
- PricingEnabled: pricingEnabled,
1515
- PriceListId: priceListId,
1516
- },
1517
- });
1518
- this.configurationService.setConfigurableRamp(this.createLineItem());
1519
- }), this.throwIfNoUIDefinition(), switchMap(() => this.configurationState.init$()), tap(() => this.state$.next({ loading: false, failure: false })), catchError(error => {
1520
- if (!this.uiDefinition?.properties?.suppressToastMessages) {
1521
- this.messageService.add({ severity: 'error', summary: error });
1522
- }
1523
- this.state$.next({ loading: false, failure: true });
1524
- return of();
1525
- }), takeUntil(this.destroyed$))
1526
- .subscribe();
1527
- }
1528
- throwIfNoUIDefinition() {
1529
- return (source$) => {
1530
- return source$.pipe(switchMap(() => {
1531
- if (!this.uiDefinition) {
1532
- return throwError(() => 'Product does not have Configuration UI');
1533
- }
1534
- return source$;
1535
- }));
1536
- };
1537
- }
1538
- initSubscriptions() {
1539
- this.integrationState
1540
- .listen$(FlowAction.REMOTE_CANCEL)
1541
- .pipe(tap(() => this.location.back()), takeUntil(this.destroyed$))
1542
- .subscribe();
1543
- this.integrationState
1544
- .listen$(FlowAction.REMOTE_APPLY)
1545
- .pipe(tap(() => this.saveRpcMessage()), takeUntil(this.destroyed$))
1546
- .subscribe();
1547
- }
1548
- createLineItem() {
1549
- const [quoteDraftLineItem] = this.quoteDraftService.quoteDraft?.currentState ?? [];
1550
- if (quoteDraftLineItem && (quoteDraftLineItem.attributes.length > 0 || quoteDraftLineItem.lineItems.length > 0)) {
1551
- return quoteDraftLineItem;
1552
- }
1553
- const lineItem = this.createRootLineItem();
1554
- const dynamicOptionProducts = this.rpcMessage.product.optionConfigurations[this.DYNAMIC_OPTION_PRODUCTS_KEY];
1555
- if (dynamicOptionProducts) {
1556
- const options = this.toParentChildMap(dynamicOptionProducts);
1557
- let items = [lineItem];
1558
- for (let i = 0; i < items.length; i++) {
1559
- const item = items[i];
1560
- const children = item && options.get(item.id);
1561
- if (children) {
1562
- item.lineItems = children;
1563
- items = items.concat(children);
1564
- }
1565
- }
1566
- }
1567
- return lineItem;
1568
- }
1569
- createRootLineItem() {
1570
- const product = this.rpcMessage.product;
1571
- const runtimeContext = this.runtimeService.runtimeContext;
1572
- const veloceInstanceId = product.configurationAttributes['VeloceInstanceId__c'];
1573
- const quoteId = this.quoteDraftService.quoteDraft?.currentState[0]?.id;
1574
- return {
1575
- id: quoteId || veloceInstanceId || UUID.UUID(),
1576
- type: runtimeContext.productType ?? '',
1577
- name: runtimeContext.properties?.['displayName'] || runtimeContext.productName,
1578
- productName: runtimeContext.productName,
1579
- productId: runtimeContext.productId,
1580
- cfgStatus: 'Default',
1581
- actionCode: 'ADD',
1582
- qty: 1,
1583
- };
1584
- }
1585
- toParentChildMap(remoteOptionProducts) {
1586
- const result = new Map();
1587
- for (const option of remoteOptionProducts) {
1588
- const configurationData = option?.readOnly?.line;
1589
- const id = configurationData?.VeloceInstanceId__c;
1590
- const parentId = configurationData?.VeloceParentInstanceId__c;
1591
- if (!option.selected || !configurationData || !id || !parentId) {
1592
- continue;
1593
- }
1594
- const productId = option.productId;
1595
- const lineItem = {
1596
- id,
1597
- productId,
1598
- parentId,
1599
- type: configurationData.ModelType__c,
1600
- port: configurationData.ModelPort__c,
1601
- cfgStatus: configurationData.ConfigurationStatus__c,
1602
- actionCode: configurationData.ActionCode__c,
1603
- qty: option.Quantity,
1604
- };
1605
- let siblings = result.get(productId);
1606
- if (!siblings) {
1607
- result.set(parentId, (siblings = []));
1608
- }
1609
- siblings.push(lineItem);
1610
- }
1611
- return result;
1612
- }
1613
- saveRpcMessage() {
1614
- const quote = this.quoteDraftService.quoteDraft;
1615
- const lineItem = this.configurationService.getSnapshot();
1616
- if (!quote || !lineItem) {
1617
- return;
1618
- }
1619
- this.rpcMessage.VeloceReferenceId = quote.quoteId;
1620
- this.rpcMessage.product.configurationData.VeloceInstanceId__c = lineItem.id;
1621
- const childItems = this.flattenChildLineItems(lineItem);
1622
- const savingMode = window.SavingMode;
1623
- this.updateContentData(this.rpcMessage.product, lineItem);
1624
- this.rpcMessage.quote = this.mapAttributesTo('Quote', lineItem);
1625
- if (savingMode === 'ALL') {
1626
- const optionConfigurations = this.getOptionConfigurations(this.rpcMessage.product);
1627
- const rootProductOptions = this.rpcMessage.options.filter(po => po.configuredProductId === lineItem.productId);
1628
- childItems.forEach(lineItem => {
1629
- const rootOption = rootProductOptions.find(po => po.optionalProductId === lineItem.productId);
1630
- if (rootOption) {
1631
- const featureOptions = optionConfigurations[rootOption.featureName] ?? (optionConfigurations[rootOption.featureName] = []);
1632
- const originOption = !rootOption.hasChildren
1633
- ? optionConfigurations[rootOption.featureName]?.find(({ optionId }) => optionId === rootOption.optionId)
1634
- : undefined;
1635
- const option = originOption ?? {};
1636
- option.optionId = option.optionId ?? rootOption.optionId;
1637
- this.updateContentData(option, lineItem);
1638
- option.index = option.index ?? featureOptions.length;
1639
- option.selected = true;
1640
- if (!originOption) {
1641
- featureOptions.push(option);
1642
- }
1643
- if (lineItem.parentLineItem) {
1644
- const nestedProductOption = this.rpcMessage.options.find(po => po.configuredProductId === lineItem.parentLineItem?.productId &&
1645
- po.optionalProductId === lineItem.productId);
1646
- if (nestedProductOption) {
1647
- option.configurationData = {
1648
- ...option.configurationData,
1649
- VeloceParentInstanceId__c: lineItem.parentLineItem.id,
1650
- VeloceNestedOptionId__c: nestedProductOption.optionId,
1651
- VeloceNestedFeatureId__c: nestedProductOption.featureId,
1652
- };
1653
- }
1654
- }
1655
- }
1656
- else {
1657
- this.rpcMessage.dynamicFeatures.forEach(feature => {
1658
- const featureOptions = optionConfigurations[feature.name] ?? (optionConfigurations[feature.name] = []);
1659
- const originOption = featureOptions.find(({ productId }) => productId === lineItem.productId);
1660
- const option = originOption ?? {};
1661
- this.updateContentData(option, lineItem);
1662
- option.index = option.index ?? featureOptions.length;
1663
- option.selected = true;
1664
- if (!originOption) {
1665
- featureOptions.push(option);
1666
- }
1667
- });
1668
- }
1669
- });
1670
- this.rpcMessage.product = { ...this.rpcMessage.product, optionConfigurations };
1671
- }
1672
- window.RPC_BROADCAST?.apply(null, [this.rpcMessage]);
1673
- }
1674
- updateHasChildrenFlag(bundleProductId) {
1675
- const bundleOptionsByOptionId = {};
1676
- const notBundleOptions = [];
1677
- for (const productOption of this.rpcMessage.options) {
1678
- if (productOption.configuredProductId === bundleProductId) {
1679
- bundleOptionsByOptionId[productOption.optionalProductId] = productOption;
1680
- }
1681
- else {
1682
- notBundleOptions.push(productOption);
1683
- }
1684
- }
1685
- for (const option of notBundleOptions) {
1686
- const bundleOption = bundleOptionsByOptionId[option.configuredProductId];
1687
- if (bundleOption) {
1688
- bundleOption.hasChildren = true;
1689
- }
1690
- }
1691
- }
1692
- flattenChildLineItems(lineItem) {
1693
- let items = lineItem.lineItems ?? [];
1694
- for (let i = 0; i < items.length; i++) {
1695
- const item = items[i];
1696
- if (item?.lineItems) {
1697
- items = items.concat(item.lineItems.map(li => ({ ...li, parentLineItem: item })));
1698
- }
1699
- }
1700
- return items;
1701
- }
1702
- updateContentData(entity, lineItem) {
1703
- if (lineItem.productId) {
1704
- entity.productId = lineItem.productId;
1705
- }
1706
- const quantityAttribute = lineItem.properties['quantityAttribute'];
1707
- entity.Quantity = quantityAttribute
1708
- ? lineItem.attributes.find(attribute => attribute.name === quantityAttribute)?.value ?? 1
1709
- : lineItem.qty;
1710
- const totalPrice = this.computeNetPrice(lineItem);
1711
- const targetTotalPriceField = lineItem.properties['TargetTotalPriceField'] || 'TotalPrice__c';
1712
- entity.configurationData[targetTotalPriceField] = entity.configurationData[targetTotalPriceField]
1713
- ? entity.configurationData[targetTotalPriceField] + totalPrice
1714
- : totalPrice;
1715
- const targetPriceField = lineItem.properties['TargetPriceField'] || 'SBQQ__ListPrice__c';
1716
- const price = entity.Quantity != null ? entity.configurationData[targetTotalPriceField] / entity.Quantity || 0 : 0;
1717
- const targetPriceValue = Number(entity.configurationData[targetPriceField]) || 0;
1718
- entity.configurationData[targetPriceField] = targetPriceValue
1719
- ? (targetPriceValue + price).toFixed(2)
1720
- : price.toFixed(2);
1721
- entity.configurationAttributes = this.mapAttributesTo('Attribute', lineItem);
1722
- entity.configurationData = {
1723
- ...entity.configurationData,
1724
- ...this.mapAttributesTo('Field', lineItem),
1725
- ...this.mapAttributesTo('', lineItem),
1726
- VeloceInstanceId__c: lineItem.id,
1727
- };
1728
- }
1729
- computeNetPrice(lineItem) {
1730
- if (lineItem.properties['GroupCharges']) {
1731
- return this.sumNetPrice(lineItem.chargeGroupItems, this.getChargeNameSet(lineItem.properties['GroupCharges']));
1732
- }
1733
- return this.sumNetPrice(lineItem.chargeItems, this.getChargeNameSet(lineItem.properties['Charges']));
1734
- }
1735
- getChargeNameSet(property) {
1736
- if (property && property.length > 0) {
1737
- return new Set(property.split(','));
1738
- }
1739
- return new Set();
1740
- }
1741
- sumNetPrice(chargeItems, charges) {
1742
- let netPrice = 0;
1743
- for (const chargeItem of chargeItems) {
1744
- if (!charges || charges.has(chargeItem.chargeType)) {
1745
- netPrice += chargeItem.netPrice ?? 0;
1746
- }
1747
- }
1748
- return netPrice;
1749
- }
1750
- mapAttributesTo(target, lineItem) {
1751
- const result = {};
1752
- const component = this.runtimeService.runtimeModel?.components.get(lineItem.type);
1753
- if (!component) {
1754
- return result;
1755
- }
1756
- const propertyName = 'mapTo' + target;
1757
- component.attributes
1758
- .filter(a => a.properties && a.properties[propertyName])
1759
- .forEach(mapping => {
1760
- const attribute = lineItem.attributes.find(a => a.name === mapping.name);
1761
- if (attribute) {
1762
- new Set(mapping.properties[propertyName]?.split(',')).forEach(k => (result[k] = attribute.value));
1763
- }
1764
- });
1765
- return result;
1766
- }
1767
- getOptionConfigurations(product) {
1768
- const optionConfigurations = {};
1769
- const requestOptionConfigurations = product.optionConfigurations ?? {};
1770
- Object.keys(requestOptionConfigurations).forEach(k => {
1771
- optionConfigurations[k] = (requestOptionConfigurations[k] ?? []).map(opt => {
1772
- return { ...opt, selected: false };
1773
- });
1774
- });
1775
- return optionConfigurations;
1776
- }
1777
- }
1778
- RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i2.ContextService }, { token: i2.QuoteDraftService }, { token: i2.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i2.ConfigurationStateService }, { token: i2$2.MessageService }, { token: i2.IntegrationState }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Component });
1779
- RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1780
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, decorators: [{
1781
- type: Component,
1782
- args: [{ selector: 'vl-flow-remote', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1783
- }], ctorParameters: function () { return [{ type: i2.ContextService }, { type: i2.QuoteDraftService }, { type: i2.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i2.ConfigurationStateService }, { type: i2$2.MessageService }, { type: i2.IntegrationState }, { type: i4.Location }]; } });
1784
-
1785
- class RemoteModule {
1786
- }
1787
- RemoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1788
- RemoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, declarations: [RemoteComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [RemoteComponent] });
1789
- RemoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, imports: [CommonModule, PreviewModule, LoaderModule] });
1790
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteModule, decorators: [{
1791
- type: NgModule,
1792
- args: [{
1793
- declarations: [RemoteComponent],
1794
- imports: [CommonModule, PreviewModule, LoaderModule],
1795
- exports: [RemoteComponent],
1796
- }]
1797
- }] });
1798
-
1799
1198
  class ShoppingCartComponent {
1800
- constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
1801
- this.templatesApi = templatesApi;
1199
+ constructor(templatesAdminApiService, cdr, toastService, flowInfo, customizationService) {
1200
+ this.templatesAdminApiService = templatesAdminApiService;
1802
1201
  this.cdr = cdr;
1803
1202
  this.toastService = toastService;
1804
1203
  this.flowInfo = flowInfo;
@@ -1851,7 +1250,7 @@ class ShoppingCartComponent {
1851
1250
  if (!template) {
1852
1251
  return of(undefined);
1853
1252
  }
1854
- return this.templatesApi.fetchComponentsAttachments$(template.id);
1253
+ return this.templatesAdminApiService.fetchComponentsAttachments$(template.id);
1855
1254
  }
1856
1255
  generateUIDefinition$() {
1857
1256
  return of(undefined).pipe(tap(() => {
@@ -1865,7 +1264,6 @@ class ShoppingCartComponent {
1865
1264
  const uiDef = {
1866
1265
  name: '',
1867
1266
  createdTimestamp: 0,
1868
- primary: true,
1869
1267
  type: 'DEFAULT',
1870
1268
  version: 2,
1871
1269
  children: metaList.map(meta => ({
@@ -1879,12 +1277,12 @@ class ShoppingCartComponent {
1879
1277
  }));
1880
1278
  }
1881
1279
  }
1882
- 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 });
1883
- ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2$1.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1280
+ 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 });
1281
+ ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1884
1282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, decorators: [{
1885
1283
  type: Component,
1886
1284
  args: [{ selector: 'vl-flow-shopping-cart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
1887
- }], ctorParameters: function () { return [{ type: i1$1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2$1.ToastService }, { type: i2.FlowInfoService }, { type: undefined, decorators: [{
1285
+ }], ctorParameters: function () { return [{ type: i1$1.UITemplatesAdminApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3$1.FlowInfoService }, { type: undefined, decorators: [{
1888
1286
  type: Optional
1889
1287
  }, {
1890
1288
  type: Inject,
@@ -1906,30 +1304,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1906
1304
  }] });
1907
1305
 
1908
1306
  class FlowResolver {
1909
- constructor(router, routerService, contextService, flowInfo) {
1307
+ constructor(router, routerService, flowInfoService) {
1910
1308
  this.router = router;
1911
1309
  this.routerService = routerService;
1912
- this.contextService = contextService;
1913
- this.flowInfo = flowInfo;
1310
+ this.flowInfoService = flowInfoService;
1914
1311
  }
1915
1312
  resolve(route) {
1916
- const { queryParams } = route;
1917
- const flow = this.flowInfo.flow;
1918
- if (!flow) {
1313
+ if (!this.flowInfoService.isFlowInitialized) {
1919
1314
  return of(false);
1920
1315
  }
1921
- const { properties } = flow;
1316
+ const { queryParams } = route;
1317
+ const { properties } = this.flowInfoService.flow;
1922
1318
  const { queryParams: flowQueryParams, entryPath } = properties;
1923
1319
  const mergedQueryParams = {
1924
1320
  ...queryParams,
1925
1321
  ...flowQueryParams,
1926
1322
  };
1927
- const contextProperties = Object.entries({
1928
- ...mergedQueryParams,
1929
- ...getDefaultProperties({ flowParams: properties }),
1930
- }).reduce((trunk, [key, value]) => ({ ...trunk, [key]: String(value) }), {});
1931
- this.contextService.update({ properties: contextProperties });
1932
- this.flowInfo.flow = flow;
1933
1323
  const parentUrl = this.routerService.getFlowRootPath(route);
1934
1324
  const entryUrl = String(entryPath ?? '')
1935
1325
  .split('/')
@@ -1938,29 +1328,39 @@ class FlowResolver {
1938
1328
  queryParams: mergedQueryParams,
1939
1329
  replaceUrl: true,
1940
1330
  })).pipe(catchError$1(e => {
1331
+ console.error(e);
1941
1332
  const message = e instanceof HttpErrorResponse ? e.error.message : e;
1942
1333
  const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
1943
1334
  return this.routerService.showErrorPage$(message, errorDetails);
1944
1335
  }));
1945
1336
  }
1946
1337
  }
1947
- FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
1338
+ FlowResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, deps: [{ token: i1$2.Router }, { token: FlowRouterService }, { token: i3$1.FlowInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
1948
1339
  FlowResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver });
1949
1340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowResolver, decorators: [{
1950
1341
  type: Injectable
1951
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.FlowInfoService }]; } });
1342
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i3$1.FlowInfoService }]; } });
1343
+
1344
+ const resolvePCMModel = () => {
1345
+ const flowInfoService = inject(FlowInfoService);
1346
+ const configurationRuntimeService = inject(ConfigurationRuntimeService);
1347
+ const { productId } = flowInfoService.context;
1348
+ if (!productId) {
1349
+ throw new Error(`Unable to start configuration for 'productId == null'`);
1350
+ }
1351
+ return configurationRuntimeService.init$({ productId });
1352
+ };
1952
1353
 
1953
- class QuoteResolver {
1954
- constructor(router, quoteDraftService, routerService, contextService, flowInfo, flowStateService) {
1354
+ class SalesTransactionResolver {
1355
+ constructor(router, routerService, flowInfoService, flowStateService, salesTransactionService) {
1955
1356
  this.router = router;
1956
- this.quoteDraftService = quoteDraftService;
1957
1357
  this.routerService = routerService;
1958
- this.contextService = contextService;
1959
- this.flowInfo = flowInfo;
1358
+ this.flowInfoService = flowInfoService;
1960
1359
  this.flowStateService = flowStateService;
1360
+ this.salesTransactionService = salesTransactionService;
1961
1361
  }
1962
1362
  resolve(route) {
1963
- const flow = this.flowInfo.flow;
1363
+ const flow = this.flowInfoService.flow;
1964
1364
  if (!flow) {
1965
1365
  return of(false);
1966
1366
  }
@@ -1968,13 +1368,14 @@ class QuoteResolver {
1968
1368
  return of(true);
1969
1369
  }
1970
1370
  return this.flowStateService.init$().pipe(switchMap(() => this.checkDynamicNavigation$(route)), catchError(e => {
1371
+ console.error(e);
1971
1372
  const message = e instanceof HttpErrorResponse ? e.error.message : e;
1972
1373
  const errorDetails = isVeloceError(e.error) ? extractErrorDetails(e.error) : [];
1973
1374
  return this.routerService.showErrorPage$(message, errorDetails);
1974
1375
  }));
1975
1376
  }
1976
1377
  checkDynamicNavigation$(route) {
1977
- const flow = this.flowInfo.flow;
1378
+ const flow = this.flowInfoService.flow;
1978
1379
  if (!flow) {
1979
1380
  return of(true);
1980
1381
  }
@@ -1993,33 +1394,53 @@ class QuoteResolver {
1993
1394
  }));
1994
1395
  }
1995
1396
  getNavigateTo() {
1996
- const flow = this.flowInfo.flow;
1997
- let navigateTo;
1998
- if (flow?.properties.stateful) {
1999
- return this.flowStateService.select$(UITemplateType.FLOW_ENGINE, 'NAVIGATE_TO').pipe(map(r => {
2000
- if (r.success) {
2001
- return r.result;
2002
- }
2003
- return '';
2004
- }));
2005
- }
2006
- else {
2007
- const isAccountMode = this.contextService.mode === ConfigurationContextMode.ACCOUNT;
2008
- if (isAccountMode || this.quoteDraftService.hasAssets) {
2009
- navigateTo = '/assets';
2010
- }
2011
- else if (this.quoteDraftService.hasProducts) {
2012
- navigateTo = '/cart';
2013
- }
2014
- }
2015
- return of(navigateTo);
1397
+ // Implement when needed
1398
+ return of('');
2016
1399
  }
2017
1400
  }
2018
- QuoteResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, deps: [{ token: i1$2.Router }, { token: i2.QuoteDraftService }, { token: FlowRouterService }, { token: i2.ContextService }, { token: i2.FlowInfoService }, { token: i2.FlowStateService }], target: i0.ɵɵFactoryTarget.Injectable });
2019
- QuoteResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver });
2020
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: QuoteResolver, decorators: [{
1401
+ 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 });
1402
+ SalesTransactionResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver });
1403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SalesTransactionResolver, decorators: [{
2021
1404
  type: Injectable
2022
- }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i2.QuoteDraftService }, { type: FlowRouterService }, { type: i2.ContextService }, { type: i2.FlowInfoService }, { type: i2.FlowStateService }]; } });
1405
+ }], ctorParameters: function () { return [{ type: i1$2.Router }, { type: FlowRouterService }, { type: i3$1.FlowInfoService }, { type: i3$1.FlowStateService }, { type: i3$1.SalesTransactionService }]; } });
1406
+
1407
+ const resolveUIDefinition = () => {
1408
+ const customizationService = inject(FLOW_CUSTOMIZATION, { optional: true });
1409
+ const flowInfoService = inject(FlowInfoService);
1410
+ const uiDefinitionsAdminApiService = inject(UIDefinitionsAdminApiService);
1411
+ const configurationRuntimeService = inject(ConfigurationRuntimeService);
1412
+ const { productId } = flowInfoService.context;
1413
+ if (!productId) {
1414
+ throw new Error(`Unable to start configuration for 'productId == null'`);
1415
+ }
1416
+ return of(undefined).pipe(switchMap(() => {
1417
+ // Try resolving via customization service
1418
+ if (!productId || !customizationService?.getUiDefinition) {
1419
+ return of(undefined);
1420
+ }
1421
+ return customizationService.getUiDefinition(flowInfoService.context);
1422
+ }), switchMap(uiDefContainer => {
1423
+ // Resolve UIDefinition from the org
1424
+ if (uiDefContainer) {
1425
+ return of(uiDefContainer);
1426
+ }
1427
+ if (flowInfoService.context.requiredUIDefinitionId) {
1428
+ return uiDefinitionsAdminApiService.fetch$(flowInfoService.context.requiredUIDefinitionId);
1429
+ }
1430
+ return uiDefinitionsAdminApiService
1431
+ .fetchAll$({
1432
+ productId,
1433
+ defaultUIDefinitionId: flowInfoService.context.defaultUIDefinitionId,
1434
+ })
1435
+ .pipe(map((uiDefinitionContainers) => {
1436
+ const uiDefContainer = uiDefinitionContainers[0];
1437
+ if (!uiDefContainer) {
1438
+ throw new Error(`UI Definition for productId=${productId} is not resolved`);
1439
+ }
1440
+ return uiDefContainer;
1441
+ }));
1442
+ }), tap(uiDefContainer => (configurationRuntimeService.uiDefinitionContainer = uiDefContainer)));
1443
+ };
2023
1444
 
2024
1445
  const rootRoute = {
2025
1446
  id: VELOCE_FLOW_ROOT_ROUTE,
@@ -2037,15 +1458,13 @@ const rootRoute = {
2037
1458
  path: 'flows',
2038
1459
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2039
1460
  resolve: { flow: FlowResolver },
2040
- canActivate: [ContextGuard],
2041
1461
  children: [],
2042
1462
  },
2043
1463
  {
2044
1464
  path: 'product',
2045
1465
  component: ProductComponent,
2046
1466
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2047
- resolve: { quote: QuoteResolver },
2048
- canActivate: [ContextGuard],
1467
+ resolve: { salesTransaction: SalesTransactionResolver, uiDef: resolveUIDefinition, pcm: resolvePCMModel },
2049
1468
  canDeactivate: [ProductUnloadGuard],
2050
1469
  data: { showHeader: true },
2051
1470
  },
@@ -2053,33 +1472,23 @@ const rootRoute = {
2053
1472
  path: 'cart',
2054
1473
  component: ShoppingCartComponent,
2055
1474
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2056
- resolve: { quote: QuoteResolver },
2057
- canActivate: [ContextGuard],
1475
+ resolve: { salesTransaction: SalesTransactionResolver },
2058
1476
  data: { showHeader: true },
2059
1477
  },
2060
1478
  {
2061
1479
  path: 'catalog',
2062
1480
  component: CatalogComponent,
2063
1481
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2064
- resolve: { quote: QuoteResolver },
2065
- canActivate: [ContextGuard],
1482
+ resolve: { salesTransaction: SalesTransactionResolver },
2066
1483
  data: { showHeader: true },
2067
1484
  },
2068
1485
  {
2069
1486
  path: 'assets',
2070
1487
  component: AssetsComponent,
2071
1488
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2072
- resolve: { quote: QuoteResolver },
2073
- canActivate: [ContextGuard],
1489
+ resolve: { salesTransaction: SalesTransactionResolver },
2074
1490
  data: { showHeader: true },
2075
1491
  },
2076
- {
2077
- path: 'remote',
2078
- component: RemoteComponent,
2079
- runGuardsAndResolvers: 'paramsOrQueryParamsChange',
2080
- resolve: { quote: QuoteResolver },
2081
- canActivate: [ContextGuard],
2082
- },
2083
1492
  {
2084
1493
  path: 'debug',
2085
1494
  loadChildren: () => DebugModule,
@@ -2095,30 +1504,14 @@ const rootRoute = {
2095
1504
  class FlowRoutingModule {
2096
1505
  }
2097
1506
  FlowRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2098
- FlowRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, imports: [i1$2.RouterModule, ProductModule,
2099
- ShoppingCartModule,
2100
- CatalogModule,
2101
- AssetsModule,
2102
- RemoteModule], exports: [RouterModule] });
2103
- FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ContextGuard, ProductUnloadGuard, FlowResolver, QuoteResolver], imports: [RouterModule.forChild([rootRoute]),
2104
- ProductModule,
2105
- ShoppingCartModule,
2106
- CatalogModule,
2107
- AssetsModule,
2108
- RemoteModule, RouterModule] });
1507
+ 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] });
1508
+ FlowRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, SalesTransactionResolver], imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule, RouterModule] });
2109
1509
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FlowRoutingModule, decorators: [{
2110
1510
  type: NgModule,
2111
1511
  args: [{
2112
- imports: [
2113
- RouterModule.forChild([rootRoute]),
2114
- ProductModule,
2115
- ShoppingCartModule,
2116
- CatalogModule,
2117
- AssetsModule,
2118
- RemoteModule,
2119
- ],
1512
+ imports: [RouterModule.forChild([rootRoute]), ProductModule, ShoppingCartModule, CatalogModule, AssetsModule],
2120
1513
  exports: [RouterModule],
2121
- providers: [FlowRouterService, RootGuard, ContextGuard, ProductUnloadGuard, FlowResolver, QuoteResolver],
1514
+ providers: [FlowRouterService, RootGuard, ProductUnloadGuard, FlowResolver, SalesTransactionResolver],
2122
1515
  }]
2123
1516
  }] });
2124
1517
 
@@ -2170,5 +1563,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2170
1563
  * Generated bundle index. Do not edit.
2171
1564
  */
2172
1565
 
2173
- export { ContextGuard, FlowDialogService, FlowModule, FlowRouterService, FlowService, VELOCE_FLOW_ROOT_ROUTE, getDefaultProperties, getFlowObjectIdPropertyName };
1566
+ export { FlowDialogService, FlowModule, FlowRouterService, FlowService, VELOCE_FLOW_ROOT_ROUTE };
2174
1567
  //# sourceMappingURL=veloceapps-sdk.mjs.map