@veloceapps/sdk 8.0.0-98 → 9.0.0-0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. package/cms/README.md +0 -20
  2. package/cms/cms.actions.d.ts +13 -1
  3. package/cms/components/preview/preview.component.d.ts +2 -3
  4. package/cms/components/preview/preview.types.d.ts +4 -0
  5. package/cms/index.d.ts +1 -0
  6. package/cms/modules/runtime/services/runtime.service.d.ts +1 -1
  7. package/cms/services/index.d.ts +0 -1
  8. package/cms/services/resources.service.d.ts +2 -0
  9. package/cms/types/index.d.ts +0 -1
  10. package/cms/utils/element-metadata-worker.d.ts +11 -0
  11. package/cms/utils/elements-resolver.d.ts +0 -2
  12. package/cms/utils/index.d.ts +3 -0
  13. package/cms/utils/transpilation-worker.d.ts +13 -0
  14. package/cms/vendor-map.d.ts +23 -18
  15. package/core/README.md +20 -0
  16. package/core/modules/configuration/configuration.module.d.ts +2 -1
  17. package/core/modules/configuration/helpers.d.ts +2 -1
  18. package/core/modules/configuration/index.d.ts +1 -1
  19. package/core/modules/configuration/services/configuration-state.service.d.ts +54 -0
  20. package/core/modules/configuration/services/configuration.service.d.ts +6 -6
  21. package/core/modules/configuration/types/configuration.types.d.ts +4 -0
  22. package/core/modules/flow-configuration/flow-configuration.module.d.ts +2 -1
  23. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +5 -0
  24. package/core/services/context.service.d.ts +2 -0
  25. package/core/services/flow-info.service.d.ts +29 -0
  26. package/core/services/flow-state-configuration.service.d.ts +19 -0
  27. package/core/services/flow-state.service.d.ts +80 -0
  28. package/core/services/index.d.ts +4 -1
  29. package/core/services/quote-draft.service.d.ts +12 -28
  30. package/core/types/flow-customization.types.d.ts +22 -0
  31. package/core/types/flow-state.types.d.ts +11 -0
  32. package/core/types/index.d.ts +3 -1
  33. package/{cms → core}/types/integration.types.d.ts +1 -1
  34. package/core/utils/line-item.utils.d.ts +1 -3
  35. package/esm2020/cms/cms.actions.mjs +21 -1
  36. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +3 -3
  37. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
  38. package/esm2020/cms/components/preview/preview.component.mjs +10 -10
  39. package/esm2020/cms/components/preview/preview.module.mjs +2 -2
  40. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  41. package/esm2020/cms/index.mjs +2 -1
  42. package/esm2020/cms/launcher.module.mjs +4 -4
  43. package/esm2020/cms/modules/migrations/migrations.mjs +2 -2
  44. package/esm2020/cms/modules/migrations/services/migrations.service.mjs +6 -2
  45. package/esm2020/cms/modules/runtime/services/compilation.service.mjs +11 -7
  46. package/esm2020/cms/modules/runtime/services/runtime.service.mjs +4 -4
  47. package/esm2020/cms/plugins/configuration.plugin.mjs +8 -4
  48. package/esm2020/cms/services/index.mjs +1 -2
  49. package/esm2020/cms/services/io-provider.service.mjs +10 -9
  50. package/esm2020/cms/services/resources.service.mjs +10 -6
  51. package/esm2020/cms/services/templates.service.mjs +10 -9
  52. package/esm2020/cms/types/index.mjs +1 -2
  53. package/esm2020/cms/utils/element-metadata-worker.mjs +31 -0
  54. package/esm2020/cms/utils/elements-resolver.mjs +13 -27
  55. package/esm2020/cms/utils/encoding.utils.mjs +3 -2
  56. package/esm2020/cms/utils/index.mjs +4 -1
  57. package/esm2020/cms/utils/path.utils.mjs +3 -3
  58. package/esm2020/cms/utils/script.utils.mjs +19 -15
  59. package/esm2020/cms/utils/transpilation-worker.mjs +52 -0
  60. package/esm2020/cms/vendor-map.mjs +12 -5
  61. package/esm2020/core/core.module.mjs +19 -3
  62. package/esm2020/core/modules/configuration/configuration.module.mjs +7 -23
  63. package/esm2020/core/modules/configuration/helpers.mjs +21 -1
  64. package/esm2020/core/modules/configuration/index.mjs +2 -2
  65. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +335 -0
  66. package/esm2020/core/modules/configuration/services/configuration.service.mjs +56 -50
  67. package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
  68. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +6 -6
  69. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +12 -9
  70. package/esm2020/core/services/context.service.mjs +17 -5
  71. package/esm2020/core/services/flow-info.service.mjs +99 -0
  72. package/esm2020/core/services/flow-state-configuration.service.mjs +53 -0
  73. package/esm2020/core/services/flow-state.service.mjs +512 -0
  74. package/esm2020/core/services/index.mjs +5 -2
  75. package/esm2020/core/services/integration.state.mjs +36 -0
  76. package/esm2020/core/services/product-images.service.mjs +4 -5
  77. package/esm2020/core/services/quote-draft.service.mjs +39 -91
  78. package/esm2020/core/services/runtime-settings.service.mjs +7 -5
  79. package/esm2020/core/types/flow-customization.types.mjs +3 -0
  80. package/esm2020/core/types/flow-state.types.mjs +2 -0
  81. package/esm2020/core/types/index.mjs +4 -2
  82. package/esm2020/core/types/integration.types.mjs +2 -0
  83. package/esm2020/core/utils/line-item.utils.mjs +33 -32
  84. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +52 -55
  85. package/esm2020/src/components/flow-header/flow-header.component.mjs +108 -0
  86. package/esm2020/src/components/flow-header/flow-header.module.mjs +19 -0
  87. package/esm2020/src/components/flow-header/index.mjs +2 -0
  88. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +40 -48
  89. package/esm2020/src/configure-primeng.mjs +33 -0
  90. package/esm2020/src/flow-routing.module.mjs +5 -18
  91. package/esm2020/src/flow.component.mjs +22 -37
  92. package/esm2020/src/flow.module.mjs +7 -5
  93. package/esm2020/src/guards/context.guard.mjs +6 -11
  94. package/esm2020/src/guards/flow.guard.mjs +23 -9
  95. package/esm2020/src/pages/assets/assets.component.mjs +30 -34
  96. package/esm2020/src/pages/catalog/catalog.component.mjs +30 -34
  97. package/esm2020/src/pages/debug/debug.component.mjs +2 -2
  98. package/esm2020/src/pages/product/product.component.mjs +34 -20
  99. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +6 -3
  100. package/esm2020/src/pages/remote/remote.component.mjs +15 -14
  101. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +31 -35
  102. package/esm2020/src/resolvers/flow.resolver.mjs +37 -55
  103. package/esm2020/src/resolvers/quote.resolver.mjs +55 -67
  104. package/esm2020/src/services/doc-gen.service.mjs +4 -3
  105. package/esm2020/src/services/flow-dialog.service.mjs +21 -6
  106. package/esm2020/src/services/flow-router.service.mjs +56 -15
  107. package/esm2020/src/services/flow.service.mjs +76 -48
  108. package/esm2020/src/services/guided-selling.service.mjs +5 -4
  109. package/esm2020/src/services/index.mjs +3 -1
  110. package/esm2020/src/types/index.mjs +1 -2
  111. package/fesm2015/veloceapps-sdk-cms.mjs +286 -192
  112. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  113. package/fesm2015/veloceapps-sdk-core.mjs +1195 -427
  114. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  115. package/fesm2015/veloceapps-sdk.mjs +801 -1455
  116. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  117. package/fesm2020/veloceapps-sdk-cms.mjs +291 -207
  118. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  119. package/fesm2020/veloceapps-sdk-core.mjs +1176 -454
  120. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  121. package/fesm2020/veloceapps-sdk.mjs +770 -1420
  122. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  123. package/package.json +8 -7
  124. package/src/components/doc-gen/doc-gen.component.d.ts +7 -10
  125. package/src/components/flow-header/flow-header.component.d.ts +25 -0
  126. package/src/components/flow-header/flow-header.module.d.ts +9 -0
  127. package/src/components/flow-header/index.d.ts +1 -0
  128. package/src/components/guided-selling/guided-selling.component.d.ts +6 -9
  129. package/src/configure-primeng.d.ts +1 -0
  130. package/src/flow-routing.module.d.ts +1 -2
  131. package/src/flow.component.d.ts +7 -12
  132. package/src/flow.module.d.ts +2 -2
  133. package/src/guards/context.guard.d.ts +0 -1
  134. package/src/guards/flow.guard.d.ts +1 -1
  135. package/src/pages/assets/assets.component.d.ts +5 -7
  136. package/src/pages/catalog/catalog.component.d.ts +5 -7
  137. package/src/pages/product/product.component.d.ts +8 -7
  138. package/src/pages/record-not-found/record-not-found.component.d.ts +2 -0
  139. package/src/pages/remote/remote.component.d.ts +2 -3
  140. package/src/pages/shopping-cart/shopping-cart.component.d.ts +5 -7
  141. package/src/resolvers/flow.resolver.d.ts +6 -9
  142. package/src/resolvers/quote.resolver.d.ts +7 -14
  143. package/src/services/doc-gen.service.d.ts +1 -1
  144. package/src/services/flow-dialog.service.d.ts +5 -2
  145. package/src/services/flow-router.service.d.ts +7 -3
  146. package/src/services/flow.service.d.ts +10 -12
  147. package/src/services/guided-selling.service.d.ts +1 -1
  148. package/src/services/index.d.ts +2 -0
  149. package/src/types/index.d.ts +0 -1
  150. package/core/modules/configuration/services/configuration.state.d.ts +0 -30
  151. package/core/services/metric-calculation/metric-calculation.service.d.ts +0 -25
  152. package/core/services/metric-calculation/metric-calculation.types.d.ts +0 -1
  153. package/core/services/metric-calculation/metric-calculation.utils.d.ts +0 -5
  154. package/esm2020/cms/services/integration.state.mjs +0 -37
  155. package/esm2020/cms/types/integration.types.mjs +0 -2
  156. package/esm2020/core/modules/configuration/services/configuration.state.mjs +0 -142
  157. package/esm2020/core/services/metric-calculation/metric-calculation.service.mjs +0 -85
  158. package/esm2020/core/services/metric-calculation/metric-calculation.types.mjs +0 -2
  159. package/esm2020/core/services/metric-calculation/metric-calculation.utils.mjs +0 -42
  160. package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +0 -119
  161. package/esm2020/src/components/header/cart-overlay/cart-preview.module.mjs +0 -47
  162. package/esm2020/src/components/header/header.component.mjs +0 -355
  163. package/esm2020/src/components/header/header.module.mjs +0 -52
  164. package/esm2020/src/components/header/header.types.mjs +0 -2
  165. package/esm2020/src/components/header/metrics/index.mjs +0 -2
  166. package/esm2020/src/components/header/metrics/metrics.component.mjs +0 -255
  167. package/esm2020/src/components/header/metrics/metrics.definitions.mjs +0 -2
  168. package/esm2020/src/components/header/metrics/metrics.module.mjs +0 -69
  169. package/esm2020/src/pages/empty-account/empty-account.component.mjs +0 -12
  170. package/esm2020/src/pages/empty-account/empty-account.module.mjs +0 -20
  171. package/esm2020/src/types/flow-customization.types.mjs +0 -3
  172. package/src/components/header/cart-overlay/cart-preview.component.d.ts +0 -36
  173. package/src/components/header/cart-overlay/cart-preview.module.d.ts +0 -14
  174. package/src/components/header/header.component.d.ts +0 -70
  175. package/src/components/header/header.module.d.ts +0 -16
  176. package/src/components/header/header.types.d.ts +0 -20
  177. package/src/components/header/metrics/index.d.ts +0 -1
  178. package/src/components/header/metrics/metrics.component.d.ts +0 -67
  179. package/src/components/header/metrics/metrics.definitions.d.ts +0 -1
  180. package/src/components/header/metrics/metrics.module.d.ts +0 -18
  181. package/src/pages/empty-account/empty-account.component.d.ts +0 -5
  182. package/src/pages/empty-account/empty-account.module.d.ts +0 -10
  183. package/src/types/flow-customization.types.d.ts +0 -12
  184. /package/{cms → core}/services/integration.state.d.ts +0 -0
@@ -1,25 +0,0 @@
1
- import { ConfigurationSettingsApiService } from '@veloceapps/api';
2
- import { Observable } from 'rxjs';
3
- import { FlowConfigurationService } from '../../modules/flow-configuration/services/flow-configuration.service';
4
- import { QuoteDraftService } from '../quote-draft.service';
5
- import * as i0 from "@angular/core";
6
- export declare class MetricsCalculationService {
7
- private quoteDraftService;
8
- private flowConfiguration;
9
- private settingsService;
10
- get onMetricsUpdate$(): Observable<void>;
11
- private metricsUpdated$;
12
- private quoteMetricsSettings;
13
- private metricsCalculationMethodMap;
14
- private metricsData;
15
- private activeMetricRules;
16
- constructor(quoteDraftService: QuoteDraftService, flowConfiguration: FlowConfigurationService, settingsService: ConfigurationSettingsApiService);
17
- getMetricValue(metric: string): number;
18
- private updateMetrics;
19
- private calculateMetric;
20
- private buildMetricsCalculationMethods;
21
- private collectMetricKeys;
22
- private getMetricRuleByTotalMetricName;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<MetricsCalculationService, never>;
24
- static ɵprov: i0.ɵɵInjectableDeclaration<MetricsCalculationService>;
25
- }
@@ -1 +0,0 @@
1
- export type MetricCalculationMethod = 'last' | 'first' | 'avg' | 'sum';
@@ -1,5 +0,0 @@
1
- import { LineItem } from '@veloceapps/core';
2
- import { MetricCalculationMethod } from './metric-calculation.types';
3
- export declare function calculateMetricByMethod(lineItems: LineItem[], metric: string, method: MetricCalculationMethod): number;
4
- export declare function getLineItemsByMethod(lineItems: LineItem[], method: MetricCalculationMethod): LineItem[][];
5
- export declare function getDateValue(date: string): number;
@@ -1,37 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, filter, map, Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class IntegrationState {
5
- constructor() {
6
- this.stateSubj$ = new BehaviorSubject({});
7
- this.action$ = new Subject();
8
- }
9
- get state$() {
10
- return this.stateSubj$.asObservable();
11
- }
12
- get state() {
13
- return this.stateSubj$.getValue();
14
- }
15
- patchState(update) {
16
- this.stateSubj$.next({ ...this.stateSubj$.getValue(), ...update });
17
- }
18
- dispatch(action) {
19
- this.action$.next(action);
20
- }
21
- listen$(actionType) {
22
- return this.action$.pipe(filter(action => action.type === actionType), map(action => action.payload));
23
- }
24
- listenAll$() {
25
- return this.action$.asObservable();
26
- }
27
- clear() {
28
- this.stateSubj$.next({});
29
- }
30
- }
31
- IntegrationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: IntegrationState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
32
- IntegrationState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: IntegrationState, providedIn: 'root' });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: IntegrationState, decorators: [{
34
- type: Injectable,
35
- args: [{ providedIn: 'root' }]
36
- }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jbXMvc2VydmljZXMvaW50ZWdyYXRpb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUl6RSxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRW1CLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBSSxFQUFPLENBQUMsQ0FBQztRQUM3QyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7S0FnQzdEO0lBOUJDLElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBa0I7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxRQUFRLENBQUMsTUFBeUI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVNLE9BQU8sQ0FBVSxVQUFrQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUM1QyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBWSxDQUFDLENBQ25DLENBQUM7SUFDSixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQW1CLENBQUM7SUFDdEQsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs2R0FqQ1UsZ0JBQWdCO2lIQUFoQixnQkFBZ0IsY0FESCxNQUFNOzJGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25BY3Rpb24sIEludGVncmF0aW9uU3RhdGVNb2RlbCB9IGZyb20gJy4uL3R5cGVzL2ludGVncmF0aW9uLnR5cGVzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJbnRlZ3JhdGlvblN0YXRlPFMgPSBJbnRlZ3JhdGlvblN0YXRlTW9kZWw+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmokID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTPih7fSBhcyBTKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb24kID0gbmV3IFN1YmplY3Q8SW50ZWdyYXRpb25BY3Rpb24+KCk7XG5cbiAgcHVibGljIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxTPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogUyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHBhdGNoU3RhdGUodXBkYXRlOiBQYXJ0aWFsPFM+KTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVN1YmokLm5leHQoeyAuLi50aGlzLnN0YXRlU3ViaiQuZ2V0VmFsdWUoKSwgLi4udXBkYXRlIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoKGFjdGlvbjogSW50ZWdyYXRpb25BY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbiQubmV4dChhY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIGxpc3RlbiQ8UCA9IGFueT4oYWN0aW9uVHlwZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxQPiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uJC5waXBlKFxuICAgICAgZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZSksXG4gICAgICBtYXAoYWN0aW9uID0+IGFjdGlvbi5wYXlsb2FkIGFzIFApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbGlzdGVuQWxsJDxUIGV4dGVuZHMgSW50ZWdyYXRpb25BY3Rpb24+KCk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbiQuYXNPYnNlcnZhYmxlKCkgYXMgT2JzZXJ2YWJsZTxUPjtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU3ViaiQubmV4dCh7fSBhcyBTKTtcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jbXMvdHlwZXMvaW50ZWdyYXRpb24udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uQWN0aW9uPFQgPSBhbnk+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwYXlsb2FkPzogVDtcbn1cblxuZXhwb3J0IHR5cGUgSW50ZWdyYXRpb25TdGF0ZU1vZGVsID0ge1xuICBndWlkZWRTZWxsaW5nPzogRGljdGlvbmFyeTxhbnk+O1xuICBtb2RpZmllZEFzc2V0czogRGljdGlvbmFyeTxib29sZWFuPjtcbiAgZmxvd1BhdGg6IHN0cmluZztcbn0gJiBEaWN0aW9uYXJ5PGFueT47XG4iXX0=
@@ -1,142 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { StatefulConfigurationApiService } from '@veloceapps/api';
3
- import { ToastService, ToastType } from '@veloceapps/components';
4
- import { EntityUtil, UUID, } from '@veloceapps/core';
5
- import { omit } from 'lodash';
6
- import { BehaviorSubject, map, of, switchMap, tap } from 'rxjs';
7
- import { ConfigurationRuntimeService } from './configuration-runtime.service';
8
- import { ConfigurationService } from './configuration.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@veloceapps/api";
11
- import * as i2 from "./configuration-runtime.service";
12
- import * as i3 from "./configuration.service";
13
- import * as i4 from "@veloceapps/components";
14
- export class ConfigurationState {
15
- constructor(statefulConfigurationApiService, runtimeService, configurationService, toastService) {
16
- this.statefulConfigurationApiService = statefulConfigurationApiService;
17
- this.runtimeService = runtimeService;
18
- this.configurationService = configurationService;
19
- this.toastService = toastService;
20
- this.stateSubj$ = new BehaviorSubject({});
21
- this.state$ = this.stateSubj$.asObservable();
22
- this.stateId = null;
23
- }
24
- init$() {
25
- return this.configurationService.configure().pipe(switchMap(() => {
26
- if (!this.isStatefulConfiguration) {
27
- return of(undefined);
28
- }
29
- const { actions, selectors } = this.runtimeService.runtimeContext?.uiDefinitionContainer ?? {};
30
- return this.statefulConfigurationApiService.init({
31
- item: this.configurationService.generateRequest(),
32
- actions: actions?.map(action => ({ name: action.apiName, script: action.script })),
33
- selectors: selectors?.map(selector => ({ name: selector.apiName, script: selector.script })),
34
- });
35
- }), tap(stateId => (this.stateId = stateId || null)), map(() => undefined));
36
- }
37
- cleanup() {
38
- this.stateId = null;
39
- this.configurationService.reset();
40
- this.stateSubj$.next({});
41
- }
42
- execute$(req) {
43
- if (this.isStatefulConfiguration) {
44
- return this.executeStateful$(req);
45
- }
46
- else {
47
- return this.executeStateless$(req);
48
- }
49
- }
50
- dispatch$(actionName, inputData) {
51
- return this.execute$({ actions: [{ name: actionName, inputData }] });
52
- }
53
- select$(selectorName, inputData) {
54
- const requestId = UUID.UUID();
55
- return this.execute$({
56
- selectors: {
57
- [requestId]: {
58
- name: selectorName,
59
- inputData,
60
- },
61
- },
62
- }).pipe(map(() => this.stateSubj$.value[requestId]), tap(() => this.stateSubj$.next(omit(this.stateSubj$.value, requestId))));
63
- }
64
- get isStatefulConfiguration() {
65
- return this.runtimeService.uiDefinitionProperties.statefulConfigurationEnabled ?? false;
66
- }
67
- executeStateless$(request) {
68
- return of(undefined).pipe(switchMap(() => {
69
- // Apply actions and execute configuration/price call
70
- // No need to run configuration if no actions in the request
71
- if (!request.actions?.length) {
72
- return of(undefined);
73
- }
74
- let configurationRequest = this.configurationService.generateRequest();
75
- request.actions.forEach(action => {
76
- configurationRequest = this.executeActionScript(configurationRequest, action) ?? configurationRequest;
77
- });
78
- return this.configurationService.configureRequest$(configurationRequest);
79
- }), tap(() => {
80
- if (!request.selectors) {
81
- return;
82
- }
83
- // Run selectors and apply them to the state
84
- const finalConfigurationRequest = this.configurationService.generateRequest();
85
- const selectorsResult = EntityUtil.entries(request.selectors).reduce((trunk, [key, selector]) => {
86
- trunk[key] = this.executeSelectorScript(finalConfigurationRequest, selector);
87
- return trunk;
88
- }, {});
89
- this.stateSubj$.next({
90
- ...this.stateSubj$.value,
91
- ...selectorsResult,
92
- });
93
- }), map(() => undefined));
94
- }
95
- executeStateful$(request) {
96
- if (!this.stateId) {
97
- return of(undefined);
98
- }
99
- return this.statefulConfigurationApiService.execute(this.stateId, request).pipe(tap(response => {
100
- this.stateId = response.stateId;
101
- const updatedState = this.stateSubj$.value;
102
- EntityUtil.entries(response.selectors).forEach(([key, value]) => {
103
- if (!value.success) {
104
- if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
105
- this.toastService.add({ summary: value.errorMessage, severity: ToastType.error });
106
- }
107
- return;
108
- }
109
- updatedState[key] = value.result;
110
- });
111
- this.stateSubj$.next(updatedState);
112
- }), map(() => undefined));
113
- }
114
- executeActionScript(request, processor) {
115
- const { actions } = this.runtimeService.runtimeContext?.uiDefinitionContainer ?? {};
116
- const script = actions?.find(action => action.apiName === processor.name)?.script;
117
- if (!script) {
118
- return null;
119
- }
120
- return this.executeProcessorScript(request, script, processor.inputData);
121
- }
122
- executeSelectorScript(request, processor) {
123
- const { selectors } = this.runtimeService.runtimeContext?.uiDefinitionContainer ?? {};
124
- const script = selectors?.find(selector => selector.apiName === processor.name)?.script;
125
- if (!script) {
126
- return null;
127
- }
128
- return this.executeProcessorScript(request, script, processor.inputData);
129
- }
130
- executeProcessorScript(request, script, inputData) {
131
- return new Function(`${script}\nreturn transform;`)()({
132
- request,
133
- inputData: inputData,
134
- });
135
- }
136
- }
137
- ConfigurationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationState, deps: [{ token: i1.StatefulConfigurationApiService }, { token: i2.ConfigurationRuntimeService }, { token: i3.ConfigurationService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
138
- ConfigurationState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationState });
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationState, decorators: [{
140
- type: Injectable
141
- }], ctorParameters: function () { return [{ type: i1.StatefulConfigurationApiService }, { type: i2.ConfigurationRuntimeService }, { type: i3.ConfigurationService }, { type: i4.ToastService }]; } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvbW9kdWxlcy9jb25maWd1cmF0aW9uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFLTCxVQUFVLEVBQ1YsSUFBSSxHQUNMLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBRy9ELE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsWUFDVSwrQkFBZ0UsRUFDaEUsY0FBMkMsRUFDM0Msb0JBQTBDLEVBQzFDLFlBQTBCO1FBSDFCLG9DQUErQixHQUEvQiwrQkFBK0IsQ0FBaUM7UUFDaEUsbUJBQWMsR0FBZCxjQUFjLENBQTZCO1FBQzNDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFWbkIsZUFBVSxHQUFHLElBQUksZUFBZSxDQUEwQixFQUFFLENBQUMsQ0FBQztRQUV4RSxXQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2QyxZ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QzNFLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLE1BQWMsRUFBRSxTQUFrQjtRQUM5RixPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTztZQUNQLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7OytHQXhLVSxrQkFBa0I7bUhBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RhdGVmdWxDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbkV4ZWN1dGVSZXF1ZXN0LFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgQ29uZmlndXJhdGlvblJlcXVlc3RBY3Rpb24sXG4gIENvbmZpZ3VyYXRpb25SZXF1ZXN0U2VsZWN0b3IsXG4gIEVudGl0eVV0aWwsXG4gIFVVSUQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24tcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblN0YXRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmokID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuXG4gIHB1YmxpYyBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViaiQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzdGF0ZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0YXRlZnVsQ29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IFN0YXRlZnVsQ29uZmlndXJhdGlvbkFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgaW5pdCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBhY3Rpb25zLCBzZWxlY3RvcnMgfSA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZWZ1bENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLmluaXQoe1xuICAgICAgICAgIGl0ZW06IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2VuZXJhdGVSZXF1ZXN0KCksXG4gICAgICAgICAgYWN0aW9uczogYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiAoeyBuYW1lOiBhY3Rpb24uYXBpTmFtZSwgc2NyaXB0OiBhY3Rpb24uc2NyaXB0IH0pKSxcbiAgICAgICAgICBzZWxlY3RvcnM6IHNlbGVjdG9ycz8ubWFwKHNlbGVjdG9yID0+ICh7IG5hbWU6IHNlbGVjdG9yLmFwaU5hbWUsIHNjcmlwdDogc2VsZWN0b3Iuc2NyaXB0IH0pKSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIHRhcChzdGF0ZUlkID0+ICh0aGlzLnN0YXRlSWQgPSBzdGF0ZUlkIHx8IG51bGwpKSxcbiAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlSWQgPSBudWxsO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLnN0YXRlU3ViaiQubmV4dCh7fSk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZSQocmVxOiBDb25maWd1cmF0aW9uRXhlY3V0ZVJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN0YXRlZnVsJChyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlU3RhdGVsZXNzJChyZXEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaCQoYWN0aW9uTmFtZTogc3RyaW5nLCBpbnB1dERhdGE6IHVua25vd24pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlJCh7IGFjdGlvbnM6IFt7IG5hbWU6IGFjdGlvbk5hbWUsIGlucHV0RGF0YSB9XSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QkKHNlbGVjdG9yTmFtZTogc3RyaW5nLCBpbnB1dERhdGE6IHVua25vd24pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBVVUlELlVVSUQoKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUkKHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5zdGF0ZVN1YmokLnZhbHVlW3JlcXVlc3RJZF0pLFxuICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdGVTdWJqJC5uZXh0KG9taXQodGhpcy5zdGF0ZVN1YmokLnZhbHVlLCByZXF1ZXN0SWQpKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzU3RhdGVmdWxDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BlcnRpZXMuc3RhdGVmdWxDb25maWd1cmF0aW9uRW5hYmxlZCA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzcyQocmVxdWVzdDogQ29uZmlndXJhdGlvbkV4ZWN1dGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIC8vIEFwcGx5IGFjdGlvbnMgYW5kIGV4ZWN1dGUgY29uZmlndXJhdGlvbi9wcmljZSBjYWxsXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcnVuIGNvbmZpZ3VyYXRpb24gaWYgbm8gYWN0aW9ucyBpbiB0aGUgcmVxdWVzdFxuICAgICAgICBpZiAoIXJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uZmlndXJhdGlvblJlcXVlc3QgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdlbmVyYXRlUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5leGVjdXRlQWN0aW9uU2NyaXB0KGNvbmZpZ3VyYXRpb25SZXF1ZXN0LCBhY3Rpb24pID8/IGNvbmZpZ3VyYXRpb25SZXF1ZXN0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmVSZXF1ZXN0JChjb25maWd1cmF0aW9uUmVxdWVzdCk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdC5zZWxlY3RvcnMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSdW4gc2VsZWN0b3JzIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBzdGF0ZVxuICAgICAgICBjb25zdCBmaW5hbENvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JzUmVzdWx0ID0gRW50aXR5VXRpbC5lbnRyaWVzKHJlcXVlc3Quc2VsZWN0b3JzKS5yZWR1Y2UoXG4gICAgICAgICAgKHRydW5rOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgICAgICB0cnVua1trZXldID0gdGhpcy5leGVjdXRlU2VsZWN0b3JTY3JpcHQoZmluYWxDb25maWd1cmF0aW9uUmVxdWVzdCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgcmV0dXJuIHRydW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZVN1YmokLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqJC52YWx1ZSxcbiAgICAgICAgICAuLi5zZWxlY3RvcnNSZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25FeGVjdXRlUmVxdWVzdCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zdGF0ZUlkKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZWZ1bENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLmV4ZWN1dGUodGhpcy5zdGF0ZUlkLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gcmVzcG9uc2Uuc3RhdGVJZDtcbiAgICAgICAgY29uc3QgdXBkYXRlZFN0YXRlID0gdGhpcy5zdGF0ZVN1YmokLnZhbHVlO1xuXG4gICAgICAgIEVudGl0eVV0aWwuZW50cmllcyhyZXNwb25zZS5zZWxlY3RvcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmICghdmFsdWUuc3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BlcnRpZXMuc3VwcHJlc3NUb2FzdE1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHN1bW1hcnk6IHZhbHVlLmVycm9yTWVzc2FnZSwgc2V2ZXJpdHk6IFRvYXN0VHlwZS5lcnJvciB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZVtrZXldID0gdmFsdWUucmVzdWx0O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlU3ViaiQubmV4dCh1cGRhdGVkU3RhdGUpO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KFxuICAgIHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LFxuICAgIHByb2Nlc3NvcjogQ29uZmlndXJhdGlvblJlcXVlc3RBY3Rpb24sXG4gICk6IENvbmZpZ3VyYXRpb25SZXF1ZXN0IHwgbnVsbCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3Qgc2NyaXB0ID0gYWN0aW9ucz8uZmluZChhY3Rpb24gPT4gYWN0aW9uLmFwaU5hbWUgPT09IHByb2Nlc3Nvci5uYW1lKT8uc2NyaXB0O1xuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUHJvY2Vzc29yU2NyaXB0KHJlcXVlc3QsIHNjcmlwdCwgcHJvY2Vzc29yLmlucHV0RGF0YSkgYXMgQ29uZmlndXJhdGlvblJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgcHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUmVxdWVzdFNlbGVjdG9yKTogdW5rbm93biB7XG4gICAgY29uc3QgeyBzZWxlY3RvcnMgfSA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcbiAgICBjb25zdCBzY3JpcHQgPSBzZWxlY3RvcnM/LmZpbmQoc2VsZWN0b3IgPT4gc2VsZWN0b3IuYXBpTmFtZSA9PT0gcHJvY2Vzc29yLm5hbWUpPy5zY3JpcHQ7XG4gICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgc2NyaXB0LCBwcm9jZXNzb3IuaW5wdXREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgc2NyaXB0OiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYCR7c2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhOiBpbnB1dERhdGEsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,85 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ConfigurationSettingsApiService } from '@veloceapps/api';
3
- import { uniq } from 'lodash';
4
- import { combineLatest, Subject, take } from 'rxjs';
5
- import { FlowConfigurationService } from '../../modules/flow-configuration/services/flow-configuration.service';
6
- import { QuoteDraftService } from '../quote-draft.service';
7
- import { calculateMetricByMethod } from './metric-calculation.utils';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../quote-draft.service";
10
- import * as i2 from "../../modules/flow-configuration/services/flow-configuration.service";
11
- import * as i3 from "@veloceapps/api";
12
- export class MetricsCalculationService {
13
- get onMetricsUpdate$() {
14
- return this.metricsUpdated$.asObservable();
15
- }
16
- constructor(quoteDraftService, flowConfiguration, settingsService) {
17
- this.quoteDraftService = quoteDraftService;
18
- this.flowConfiguration = flowConfiguration;
19
- this.settingsService = settingsService;
20
- this.metricsUpdated$ = new Subject();
21
- this.quoteMetricsSettings = {};
22
- this.metricsCalculationMethodMap = {};
23
- this.metricsData = {};
24
- this.activeMetricRules = [];
25
- this.activeMetricRules = this.flowConfiguration.activeMetricsSnapshot.filter(metricRule => metricRule.metrics.some(metric => !!metric.totalName));
26
- combineLatest([
27
- this.quoteDraftService.currentState$,
28
- this.settingsService.fetchSetting('QUOTE_LEVEL_METRIC_CALCULATION_METHOD').pipe(take(1)),
29
- ]).subscribe(([lineItems, setting]) => {
30
- let settingsData = {};
31
- try {
32
- settingsData = JSON.parse(setting?.value || '{}');
33
- }
34
- catch (error) {
35
- settingsData = {};
36
- }
37
- this.quoteMetricsSettings = settingsData;
38
- this.updateMetrics(lineItems);
39
- });
40
- }
41
- getMetricValue(metric) {
42
- return this.metricsData[metric] || 0;
43
- }
44
- updateMetrics(lineItems) {
45
- const metricKeys = this.collectMetricKeys(lineItems).filter(key => !key.includes('Effective_'));
46
- this.metricsCalculationMethodMap = this.buildMetricsCalculationMethods(metricKeys, this.metricsCalculationMethodMap);
47
- this.metricsData = metricKeys.reduce((acc, key) => ({ ...acc, [key]: this.calculateMetric(lineItems, key) }), {});
48
- this.metricsUpdated$.next();
49
- }
50
- calculateMetric(lineItems, metric) {
51
- return calculateMetricByMethod(lineItems, metric, this.metricsCalculationMethodMap[metric] || 'sum');
52
- }
53
- buildMetricsCalculationMethods(metricKeys, initial) {
54
- return metricKeys.reduce((acc, name) => {
55
- if (acc[name]) {
56
- return acc;
57
- }
58
- acc = { ...acc, [name]: 'sum' };
59
- const metricRule = this.getMetricRuleByTotalMetricName(name);
60
- const settingKey = metricRule?.metrics?.find(metric => metric.totalName === name)?.name || name;
61
- if (this.quoteMetricsSettings[settingKey]) {
62
- acc = { ...acc, [name]: this.quoteMetricsSettings[settingKey] };
63
- }
64
- return acc;
65
- }, initial);
66
- }
67
- collectMetricKeys(lineItems) {
68
- const keys = [];
69
- lineItems.forEach(lineItem => {
70
- keys.push(...Object.keys(lineItem.totalMetrics || {}));
71
- keys.push(...this.collectMetricKeys(lineItem.lineItems));
72
- });
73
- return uniq(keys);
74
- }
75
- getMetricRuleByTotalMetricName(name) {
76
- return this.activeMetricRules.find(metricRule => metricRule.metrics.find(metric => metric.totalName === name));
77
- }
78
- }
79
- MetricsCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsCalculationService, deps: [{ token: i1.QuoteDraftService }, { token: i2.FlowConfigurationService }, { token: i3.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
80
- MetricsCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsCalculationService, providedIn: 'root' });
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsCalculationService, decorators: [{
82
- type: Injectable,
83
- args: [{ providedIn: 'root' }]
84
- }], ctorParameters: function () { return [{ type: i1.QuoteDraftService }, { type: i2.FlowConfigurationService }, { type: i3.ConfigurationSettingsApiService }]; } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljLWNhbGN1bGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL3NlcnZpY2VzL21ldHJpYy1jYWxjdWxhdGlvbi9tZXRyaWMtY2FsY3VsYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxFLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUdyRSxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBUUQsWUFDVSxpQkFBb0MsRUFDcEMsaUJBQTJDLEVBQzNDLGVBQWdEO1FBRmhELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQUMzQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUM7UUFUbEQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3RDLHlCQUFvQixHQUF3QyxFQUFFLENBQUM7UUFDL0QsZ0NBQTJCLEdBQXdDLEVBQUUsQ0FBQztRQUN0RSxnQkFBVyxHQUF1QixFQUFFLENBQUM7UUFDckMsc0JBQWlCLEdBQWlCLEVB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aW1wb3J0IHsgQ29uZmlndXJhdGlvblNldHRpbmdzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBMaW5lSXRlbSwgTWV0cmljUnVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL2Zsb3ctY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9mbG93LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBRdW90ZURyYWZ0U2VydmljZSB9IGZyb20gJy4uL3F1b3RlLWRyYWZ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWV0cmljQ2FsY3VsYXRpb25NZXRob2QgfSBmcm9tICcuL21ldHJpYy1jYWxjdWxhdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVNZXRyaWNCeU1ldGhvZCB9IGZyb20gJy4vbWV0cmljLWNhbGN1bGF0aW9uLnV0aWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIGdldCBvbk1ldHJpY3NVcGRhdGUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3NVcGRhdGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWV0cmljc1VwZGF0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBxdW90ZU1ldHJpY3NTZXR0aW5nczogRGljdGlvbmFyeTxNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZD4gPSB7fTtcbiAgcHJpdmF0ZSBtZXRyaWNzQ2FsY3VsYXRpb25NZXRob2RNYXA6IERpY3Rpb25hcnk8TWV0cmljQ2FsY3VsYXRpb25NZXRob2Q+ID0ge307XG4gIHByaXZhdGUgbWV0cmljc0RhdGE6IERpY3Rpb25hcnk8bnVtYmVyPiA9IHt9O1xuICBwcml2YXRlIGFjdGl2ZU1ldHJpY1J1bGVzOiBNZXRyaWNSdWxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dDb25maWd1cmF0aW9uOiBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXR0aW5nc0FwaVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuYWN0aXZlTWV0cmljUnVsZXMgPSB0aGlzLmZsb3dDb25maWd1cmF0aW9uLmFjdGl2ZU1ldHJpY3NTbmFwc2hvdC5maWx0ZXIobWV0cmljUnVsZSA9PlxuICAgICAgbWV0cmljUnVsZS5tZXRyaWNzLnNvbWUobWV0cmljID0+ICEhbWV0cmljLnRvdGFsTmFtZSksXG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5jdXJyZW50U3RhdGUkLFxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZmV0Y2hTZXR0aW5nKCdRVU9URV9MRVZFTF9NRVRSSUNfQ0FMQ1VMQVRJT05fTUVUSE9EJykucGlwZSh0YWtlKDEpKSxcbiAgICBdKS5zdWJzY3JpYmUoKFtsaW5lSXRlbXMsIHNldHRpbmddKSA9PiB7XG4gICAgICBsZXQgc2V0dGluZ3NEYXRhOiBEaWN0aW9uYXJ5PE1ldHJpY0NhbGN1bGF0aW9uTWV0aG9kPiA9IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0dGluZ3NEYXRhID0gSlNPTi5wYXJzZShzZXR0aW5nPy52YWx1ZSB8fCAne30nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldHRpbmdzRGF0YSA9IHt9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnF1b3RlTWV0cmljc1NldHRpbmdzID0gc2V0dGluZ3NEYXRhO1xuXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY3MobGluZUl0ZW1zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRyaWNWYWx1ZShtZXRyaWM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljc0RhdGFbbWV0cmljXSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNZXRyaWNzKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY0tleXMgPSB0aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtcykuZmlsdGVyKGtleSA9PiAha2V5LmluY2x1ZGVzKCdFZmZlY3RpdmVfJykpO1xuICAgIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uTWV0aG9kTWFwID0gdGhpcy5idWlsZE1ldHJpY3NDYWxjdWxhdGlvbk1ldGhvZHMoXG4gICAgICBtZXRyaWNLZXlzLFxuICAgICAgdGhpcy5tZXRyaWNzQ2FsY3VsYXRpb25NZXRob2RNYXAsXG4gICAgKTtcblxuICAgIHRoaXMubWV0cmljc0RhdGEgPSBtZXRyaWNLZXlzLnJlZHVjZShcbiAgICAgIChhY2M6IERpY3Rpb25hcnk8bnVtYmVyPiwga2V5OiBzdHJpbmcpID0+ICh7IC4uLmFjYywgW2tleV06IHRoaXMuY2FsY3VsYXRlTWV0cmljKGxpbmVJdGVtcywga2V5KSB9KSxcbiAgICAgIHt9LFxuICAgICk7XG5cbiAgICB0aGlzLm1ldHJpY3NVcGRhdGVkJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1ldHJpYyhsaW5lSXRlbXM6IExpbmVJdGVtW10sIG1ldHJpYzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlTWV0cmljQnlNZXRob2QobGluZUl0ZW1zLCBtZXRyaWMsIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uTWV0aG9kTWFwW21ldHJpY10gfHwgJ3N1bScpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE1ldHJpY3NDYWxjdWxhdGlvbk1ldGhvZHMoXG4gICAgbWV0cmljS2V5czogc3RyaW5nW10sXG4gICAgaW5pdGlhbDogRGljdGlvbmFyeTxNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZD4sXG4gICk6IERpY3Rpb25hcnk8TWV0cmljQ2FsY3VsYXRpb25NZXRob2Q+IHtcbiAgICByZXR1cm4gbWV0cmljS2V5cy5yZWR1Y2UoKGFjYzogRGljdGlvbmFyeTxNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZD4sIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGFjY1tuYW1lXSkge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBhY2MgPSB7IC4uLmFjYywgW25hbWVdOiAnc3VtJyB9O1xuXG4gICAgICBjb25zdCBtZXRyaWNSdWxlID0gdGhpcy5nZXRNZXRyaWNSdWxlQnlUb3RhbE1ldHJpY05hbWUobmFtZSk7XG4gICAgICBjb25zdCBzZXR0aW5nS2V5ID0gbWV0cmljUnVsZT8ubWV0cmljcz8uZmluZChtZXRyaWMgPT4gbWV0cmljLnRvdGFsTmFtZSA9PT0gbmFtZSk/Lm5hbWUgfHwgbmFtZTtcblxuICAgICAgaWYgKHRoaXMucXVvdGVNZXRyaWNzU2V0dGluZ3Nbc2V0dGluZ0tleV0pIHtcbiAgICAgICAgYWNjID0geyAuLi5hY2MsIFtuYW1lXTogdGhpcy5xdW90ZU1ldHJpY3NTZXR0aW5nc1tzZXR0aW5nS2V5XSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsaW5lSXRlbXMuZm9yRWFjaChsaW5lSXRlbSA9PiB7XG4gICAgICBrZXlzLnB1c2goLi4uT2JqZWN0LmtleXMobGluZUl0ZW0udG90YWxNZXRyaWNzIHx8IHt9KSk7XG4gICAgICBrZXlzLnB1c2goLi4udGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbS5saW5lSXRlbXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcShrZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0cmljUnVsZUJ5VG90YWxNZXRyaWNOYW1lKG5hbWU6IHN0cmluZyk6IE1ldHJpY1J1bGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZU1ldHJpY1J1bGVzLmZpbmQobWV0cmljUnVsZSA9PiBtZXRyaWNSdWxlLm1ldHJpY3MuZmluZChtZXRyaWMgPT4gbWV0cmljLnRvdGFsTmFtZSA9PT0gbmFtZSkpO1xuICB9XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljLWNhbGN1bGF0aW9uLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9zZXJ2aWNlcy9tZXRyaWMtY2FsY3VsYXRpb24vbWV0cmljLWNhbGN1bGF0aW9uLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZCA9ICdsYXN0JyB8ICdmaXJzdCcgfCAnYXZnJyB8ICdzdW0nO1xuIl19
@@ -1,42 +0,0 @@
1
- export function calculateMetricByMethod(lineItems, metric, method) {
2
- const items = getLineItemsByMethod(lineItems, method);
3
- return items.reduce((acc, li) => {
4
- let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
5
- if (method === 'avg' && li.length > 0) {
6
- value /= li.length;
7
- }
8
- return acc + value;
9
- }, 0);
10
- }
11
- export function getLineItemsByMethod(lineItems, method) {
12
- switch (method) {
13
- case 'first': {
14
- return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
15
- }
16
- case 'last': {
17
- const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
18
- const products = rootTermItems.map(lineItem => [
19
- lineItem,
20
- ...lineItems.filter(li => li.rampInstanceId === lineItem.id),
21
- ]);
22
- return products
23
- .map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
24
- .filter((li) => Boolean(li))
25
- .map(item => [item]);
26
- }
27
- case 'avg': {
28
- const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
29
- return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
30
- }
31
- case 'sum': {
32
- return lineItems.map(item => [item]);
33
- }
34
- default: {
35
- return lineItems.map(item => [item]);
36
- }
37
- }
38
- }
39
- export function getDateValue(date) {
40
- return date ? new Date(date).getTime() : 0;
41
- }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljLWNhbGN1bGF0aW9uLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9zZXJ2aWNlcy9tZXRyaWMtY2FsY3VsYXRpb24vbWV0cmljLWNhbGN1bGF0aW9uLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsU0FBcUIsRUFDckIsTUFBYyxFQUNkLE1BQStCO0lBRS9CLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBYyxFQUFFLEVBQUU7UUFDbEQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FDbkIsQ0FBQyxVQUFrQixFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDNUcsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFFRCxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxTQUFxQixFQUFFLE1BQStCO0lBQ3pGLFFBQVEsTUFBTSxFQUFFO1FBQ2QsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNaLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxRQUFRO2dCQUNSLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQzthQUM3RCxDQUFDLENBQUM7WUFFSCxPQUFPLFFBQVE7aUJBQ1osR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQzVHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDM0MsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNWLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRSxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEg7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQ1YsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxDQUFDLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdEM7S0FDRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVk7SUFDdkMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmVJdGVtIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBNZXRyaWNDYWxjdWxhdGlvbk1ldGhvZCB9IGZyb20gJy4vbWV0cmljLWNhbGN1bGF0aW9uLnR5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZU1ldHJpY0J5TWV0aG9kKFxuICBsaW5lSXRlbXM6IExpbmVJdGVtW10sXG4gIG1ldHJpYzogc3RyaW5nLFxuICBtZXRob2Q6IE1ldHJpY0NhbGN1bGF0aW9uTWV0aG9kLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgaXRlbXMgPSBnZXRMaW5lSXRlbXNCeU1ldGhvZChsaW5lSXRlbXMsIG1ldGhvZCk7XG5cbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjOiBudW1iZXIsIGxpOiBMaW5lSXRlbVtdKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gbGkucmVkdWNlKFxuICAgICAgKGFjY1Byb2R1Y3Q6IG51bWJlciwgaXRlbTogTGluZUl0ZW0pID0+IGFjY1Byb2R1Y3QgKyAoKGl0ZW0udG90YWxNZXRyaWNzICYmIGl0ZW0udG90YWxNZXRyaWNzW21ldHJpY10pIHx8IDApLFxuICAgICAgMCxcbiAgICApO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ2F2ZycgJiYgbGkubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWUgLz0gbGkubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBhY2MgKyB2YWx1ZTtcbiAgfSwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lSXRlbXNCeU1ldGhvZChsaW5lSXRlbXM6IExpbmVJdGVtW10sIG1ldGhvZDogTWV0cmljQ2FsY3VsYXRpb25NZXRob2QpOiBMaW5lSXRlbVtdW10ge1xuICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgIGNhc2UgJ2ZpcnN0Jzoge1xuICAgICAgcmV0dXJuIGxpbmVJdGVtcy5maWx0ZXIobGkgPT4gIWxpLnJhbXBJbnN0YW5jZUlkKS5tYXAoaXRlbSA9PiBbaXRlbV0pO1xuICAgIH1cbiAgICBjYXNlICdsYXN0Jzoge1xuICAgICAgY29uc3Qgcm9vdFRlcm1JdGVtcyA9IGxpbmVJdGVtcy5maWx0ZXIobGkgPT4gIWxpLnJhbXBJbnN0YW5jZUlkKTtcbiAgICAgIGNvbnN0IHByb2R1Y3RzID0gcm9vdFRlcm1JdGVtcy5tYXAobGluZUl0ZW0gPT4gW1xuICAgICAgICBsaW5lSXRlbSxcbiAgICAgICAgLi4ubGluZUl0ZW1zLmZpbHRlcihsaSA9PiBsaS5yYW1wSW5zdGFuY2VJZCA9PT0gbGluZUl0ZW0uaWQpLFxuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiBwcm9kdWN0c1xuICAgICAgICAubWFwKGl0ZW1zID0+IFsuLi5pdGVtc10uc29ydCgoYSwgYikgPT4gZ2V0RGF0ZVZhbHVlKGEuZW5kRGF0ZSB8fCAnJykgLSBnZXREYXRlVmFsdWUoYi5lbmREYXRlIHx8ICcnKSkucG9wKCkpXG4gICAgICAgIC5maWx0ZXIoKGxpKTogbGkgaXMgTGluZUl0ZW0gPT4gQm9vbGVhbihsaSkpXG4gICAgICAgIC5tYXAoaXRlbSA9PiBbaXRlbV0pO1xuICAgIH1cbiAgICBjYXNlICdhdmcnOiB7XG4gICAgICBjb25zdCByb290VGVybUl0ZW1zID0gbGluZUl0ZW1zLmZpbHRlcihsaSA9PiAhbGkucmFtcEluc3RhbmNlSWQpO1xuICAgICAgcmV0dXJuIHJvb3RUZXJtSXRlbXMubWFwKGxpbmVJdGVtID0+IFtsaW5lSXRlbSwgLi4ubGluZUl0ZW1zLmZpbHRlcihsaSA9PiBsaS5yYW1wSW5zdGFuY2VJZCA9PT0gbGluZUl0ZW0uaWQpXSk7XG4gICAgfVxuICAgIGNhc2UgJ3N1bSc6IHtcbiAgICAgIHJldHVybiBsaW5lSXRlbXMubWFwKGl0ZW0gPT4gW2l0ZW1dKTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIGxpbmVJdGVtcy5tYXAoaXRlbSA9PiBbaXRlbV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVZhbHVlKGRhdGU6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBkYXRlID8gbmV3IERhdGUoZGF0ZSkuZ2V0VGltZSgpIDogMDtcbn1cbiJdfQ==
@@ -1,119 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
2
- import { FormControl, FormGroup } from '@angular/forms';
3
- import { FlowConfigurationService, ProductImagesService, QuoteDraftService } from '@veloceapps/sdk/core';
4
- import { OverlayPanel } from 'primeng/overlaypanel';
5
- import { BehaviorSubject, Subject, combineLatest, filter, map, takeUntil } from 'rxjs';
6
- import { FlowRouterService } from '../../../services/flow-router.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@veloceapps/sdk/core";
9
- import * as i2 from "../../../services/flow-router.service";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@angular/forms";
12
- import * as i5 from "primeng/button";
13
- import * as i6 from "primeng/overlaypanel";
14
- import * as i7 from "primeng/api";
15
- import * as i8 from "@veloceapps/components";
16
- import * as i9 from "primeng/virtualscroller";
17
- export class CartPreviewComponent {
18
- constructor(flowConfiguration, routerService, productImagesService, quoteDraftService) {
19
- this.flowConfiguration = flowConfiguration;
20
- this.routerService = routerService;
21
- this.productImagesService = productImagesService;
22
- this.quoteDraftService = quoteDraftService;
23
- this.productRowHeight = 65;
24
- this.form = new FormGroup({});
25
- this.hasTermInProducts = false;
26
- this.scrollHeight = 0;
27
- this.shouldUpdate$ = new BehaviorSubject(true);
28
- this.destroyed$ = new Subject();
29
- this.lockedProductId$ = combineLatest([this.routerService.route$, this.routerService.isConfigurationRoute$()]).pipe(map(([route, isConfigurationRoute]) => {
30
- if (!isConfigurationRoute) {
31
- return null;
32
- }
33
- return route.queryParams['productId'];
34
- }));
35
- this.isEditMode$ = this.quoteDraftService.isEditMode$();
36
- }
37
- ngOnChanges(changes) {
38
- const { products } = changes;
39
- if (products) {
40
- this.shouldUpdate$.next(true);
41
- this.scrollHeight = Math.min(this.products.length * this.productRowHeight, 460);
42
- }
43
- }
44
- ngAfterViewInit() {
45
- combineLatest([this.lockedProductId$, this.isEditMode$, this.shouldUpdate$, this.overlayPanel.onShow])
46
- .pipe(filter(() => this.overlayPanel.overlayVisible), takeUntil(this.destroyed$))
47
- .subscribe(([lockedProductId, isEditMode]) => this.updateControls(this.products, isEditMode, lockedProductId));
48
- }
49
- ngOnDestroy() {
50
- this.destroyed$.next();
51
- this.destroyed$.complete();
52
- }
53
- getImageUrl(productId) {
54
- return this.productImagesService.getImageUrl$(productId);
55
- }
56
- navigateToProductConfiguration(productId, lineItemId) {
57
- this.overlayPanel.hide();
58
- this.routerService.navigateToProductConfiguration(productId, lineItemId);
59
- }
60
- controlBlurHandler(product) {
61
- const control = this.form.get(product.id);
62
- if (!control || control.invalid) {
63
- return;
64
- }
65
- this.flowConfiguration.update([
66
- {
67
- dataType: 'LINEITEM',
68
- attributeType: 'QTY',
69
- id: product.id,
70
- newValue: control.value,
71
- },
72
- ]);
73
- }
74
- deleteHandler(product) {
75
- this.flowConfiguration.delete([product.id]);
76
- }
77
- deleteAllHandler() {
78
- const productIds = this.products.map(product => product.id);
79
- this.flowConfiguration.delete(productIds);
80
- }
81
- updateControls(products, isEditMode, lockedProductId) {
82
- const ids = [];
83
- products.forEach(item => {
84
- if (!item.id) {
85
- return;
86
- }
87
- ids.push(item.id);
88
- let control = this.form.get(item.id);
89
- if (!control) {
90
- control = new FormControl(item.qty, []);
91
- this.form.addControl(item.id, control);
92
- }
93
- else {
94
- control.setValue(item.qty);
95
- }
96
- if (!isEditMode || item.deleted || item.productId === lockedProductId) {
97
- control.disable();
98
- }
99
- else {
100
- control.enable();
101
- }
102
- });
103
- const removedIds = Object.keys(this.form.controls).filter(id => !ids.includes(id));
104
- removedIds.forEach(id => this.form.removeControl(id));
105
- this.hasTermInProducts = products.some((item) => item.hasTerm);
106
- }
107
- }
108
- CartPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CartPreviewComponent, deps: [{ token: i1.FlowConfigurationService }, { token: i2.FlowRouterService }, { token: i1.ProductImagesService }, { token: i1.QuoteDraftService }], target: i0.ɵɵFactoryTarget.Component });
109
- CartPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CartPreviewComponent, selector: "vl-cart-preview", inputs: { products: "products" }, viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-overlayPanel\n styleClass=\"catalog-overlay flow-header-overlay center no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\" *vlLet=\"lockedProductId$ | async as lockedProductId\">\n <ng-container *vlLet=\"isEditMode$ | async as isEditMode\">\n <ng-container *ngIf=\"products.length > 0; else empty\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Products ({{ products.length }})</span>\n <i class=\"vl-icon vl-cross close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <p-virtualScroller [value]=\"products\" scrollHeight=\"{{ scrollHeight }}px\" [itemSize]=\"productRowHeight\">\n <ng-template pTemplate=\"item\" let-product>\n <div\n class=\"product item\"\n *vlLet=\"!isEditMode || product.deleted as isReadonlyProduct\"\n [class.readonly]=\"isReadonlyProduct\"\n [class.deleted]=\"product.deleted\"\n >\n <ng-container *vlLet=\"lockedProductId === product.productId as isLockedProduct\">\n <div class=\"product__info\">\n <div class=\"product__image-wrapper\">\n <div\n *ngIf=\"getImageUrl(product.productId) | async as imageUrl; else noImage\"\n class=\"product__image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl + ')' }\"\n ></div>\n </div>\n <div class=\"flex flex-column justify-content-center\">\n <div class=\"word-break product-name\" [class.line-through]=\"product.deleted\">\n {{ product.name }}\n </div>\n <div class=\"actions\" *ngIf=\"!isReadonlyProduct\">\n <p-button\n label=\"Configure\"\n [disabled]=\"isLockedProduct || !product.configurable || product.hasTerm\"\n styleClass=\"p-button-link p-button-sm\"\n (onClick)=\"navigateToProductConfiguration(product.productId, product.id)\"\n ></p-button>\n <p-button\n label=\"Delete\"\n [disabled]=\"isLockedProduct || product.hasTerm\"\n styleClass=\"p-button-link p-button-sm p-button-secondary\"\n (onClick)=\"deleteHandler(product)\"\n ></p-button>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"form.get(product.id) as control\">\n <div class=\"qty\" *ngIf=\"!isReadonlyProduct; else readonlyQty\">\n <vl-quantity-control\n [formControl]=\"$any(control)\"\n (valueChange)=\"controlBlurHandler(product)\"\n ></vl-quantity-control>\n </div>\n <ng-template #readonlyQty\n ><span class=\"text-right\">{{ control.value }}</span></ng-template\n >\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n </p-virtualScroller>\n\n <ng-template #noImage>\n <i class=\"vl-icon vl-no-image no-image-icon\"></i>\n </ng-template>\n\n <div class=\"flex footer\">\n <p-button\n label=\"Clear Cart\"\n styleClass=\"p-button-link p-button-sm pl-0 pr-0\"\n [disabled]=\"!isEditMode || !!lockedProductId || hasTermInProducts\"\n (onClick)=\"deleteAllHandler()\"\n ></p-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template #empty>\n <h2 class=\"flow-header-overlay__title\">\n <span>Empty Cart</span>\n <i class=\"vl-icon vl-cross close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <span class=\"empty-state\">\n <i class=\"vl-icon vl-bag\"></i>\n There are no products added to the Shopping Cart yet.\n </span>\n </ng-template>\n </div>\n </ng-template>\n</p-overlayPanel>\n", styles: ["p-virtualscroller ::ng-deep .p-virtualscroller-header{background:none;padding:0;border:none;font-weight:unset}.flow-header-overlay *{font-family:var(--cg-font-family)}.flow-header-overlay__wrapper{display:flex;flex-direction:column;width:460px;max-height:600px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 8px;font-size:16px;font-style:normal;font-weight:500;line-height:20px}.empty-state{background:var(--cg-bg-color);padding:16px;display:flex;gap:8px;justify-content:center;font-size:12px;font-weight:300;line-height:16px;letter-spacing:.3px}.product{display:grid;grid-template-columns:auto 100px;padding:8px 0;border-bottom:1px solid var(--cg-border-color)}.product.readonly{align-items:center}.product.deleted{opacity:.5}.product.item{height:65px;overflow:hidden}.product__info{display:flex;gap:16px}.product__image-wrapper{flex-shrink:0;height:48px;width:48px;display:flex;justify-content:center;align-items:center;background:var(--cg-bg-color-hover);border-radius:4px}.product__image{background-size:contain;background-repeat:no-repeat;background-position:center;height:calc(100% - 12px);width:calc(100% - 12px)}.product .product-name{margin-bottom:4px;font-size:14px;font-weight:500;line-height:20px}.product .actions{display:flex;gap:16px}.footer{padding-top:8px}.word-break{word-break:break-word}.no-image-icon{height:24px;width:24px}.qty{display:flex;align-items:center}.flow-header-overlay__wrapper ::ng-deep .p-button-link{padding:0;font-size:12px;font-weight:400;line-height:18px;letter-spacing:.3px;color:var(--cg-primary-color)}.flow-header-overlay__wrapper ::ng-deep .p-button-link:hover:enabled{color:var(--cg-text-color-secondary)}.flow-header-overlay__wrapper ::ng-deep .p-button-link:hover:enabled .p-button-label{text-decoration:none}.flow-header-overlay__wrapper ::ng-deep .p-button-link.p-button-secondary{color:var(--cg-text-color-secondary)}.flow-header-overlay__wrapper ::ng-deep .p-button-link.p-button-secondary:hover:enabled{color:var(--cg-primary-color)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i6.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i7.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i8.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }, { kind: "component", type: i9.VirtualScroller, selector: "p-virtualScroller", inputs: ["value", "itemSize", "style", "styleClass", "scrollHeight", "lazy", "rows", "minBufferPx", "maxBufferPx", "delay", "trackBy", "totalRecords", "first", "cache"], outputs: ["onLazyLoad"] }, { kind: "component", type: i8.QuantityControlComponent, selector: "vl-quantity-control", outputs: ["valueChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CartPreviewComponent, decorators: [{
111
- type: Component,
112
- args: [{ selector: 'vl-cart-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-overlayPanel\n styleClass=\"catalog-overlay flow-header-overlay center no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\" *vlLet=\"lockedProductId$ | async as lockedProductId\">\n <ng-container *vlLet=\"isEditMode$ | async as isEditMode\">\n <ng-container *ngIf=\"products.length > 0; else empty\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Products ({{ products.length }})</span>\n <i class=\"vl-icon vl-cross close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <p-virtualScroller [value]=\"products\" scrollHeight=\"{{ scrollHeight }}px\" [itemSize]=\"productRowHeight\">\n <ng-template pTemplate=\"item\" let-product>\n <div\n class=\"product item\"\n *vlLet=\"!isEditMode || product.deleted as isReadonlyProduct\"\n [class.readonly]=\"isReadonlyProduct\"\n [class.deleted]=\"product.deleted\"\n >\n <ng-container *vlLet=\"lockedProductId === product.productId as isLockedProduct\">\n <div class=\"product__info\">\n <div class=\"product__image-wrapper\">\n <div\n *ngIf=\"getImageUrl(product.productId) | async as imageUrl; else noImage\"\n class=\"product__image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl + ')' }\"\n ></div>\n </div>\n <div class=\"flex flex-column justify-content-center\">\n <div class=\"word-break product-name\" [class.line-through]=\"product.deleted\">\n {{ product.name }}\n </div>\n <div class=\"actions\" *ngIf=\"!isReadonlyProduct\">\n <p-button\n label=\"Configure\"\n [disabled]=\"isLockedProduct || !product.configurable || product.hasTerm\"\n styleClass=\"p-button-link p-button-sm\"\n (onClick)=\"navigateToProductConfiguration(product.productId, product.id)\"\n ></p-button>\n <p-button\n label=\"Delete\"\n [disabled]=\"isLockedProduct || product.hasTerm\"\n styleClass=\"p-button-link p-button-sm p-button-secondary\"\n (onClick)=\"deleteHandler(product)\"\n ></p-button>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"form.get(product.id) as control\">\n <div class=\"qty\" *ngIf=\"!isReadonlyProduct; else readonlyQty\">\n <vl-quantity-control\n [formControl]=\"$any(control)\"\n (valueChange)=\"controlBlurHandler(product)\"\n ></vl-quantity-control>\n </div>\n <ng-template #readonlyQty\n ><span class=\"text-right\">{{ control.value }}</span></ng-template\n >\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n </p-virtualScroller>\n\n <ng-template #noImage>\n <i class=\"vl-icon vl-no-image no-image-icon\"></i>\n </ng-template>\n\n <div class=\"flex footer\">\n <p-button\n label=\"Clear Cart\"\n styleClass=\"p-button-link p-button-sm pl-0 pr-0\"\n [disabled]=\"!isEditMode || !!lockedProductId || hasTermInProducts\"\n (onClick)=\"deleteAllHandler()\"\n ></p-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template #empty>\n <h2 class=\"flow-header-overlay__title\">\n <span>Empty Cart</span>\n <i class=\"vl-icon vl-cross close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <span class=\"empty-state\">\n <i class=\"vl-icon vl-bag\"></i>\n There are no products added to the Shopping Cart yet.\n </span>\n </ng-template>\n </div>\n </ng-template>\n</p-overlayPanel>\n", styles: ["p-virtualscroller ::ng-deep .p-virtualscroller-header{background:none;padding:0;border:none;font-weight:unset}.flow-header-overlay *{font-family:var(--cg-font-family)}.flow-header-overlay__wrapper{display:flex;flex-direction:column;width:460px;max-height:600px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 8px;font-size:16px;font-style:normal;font-weight:500;line-height:20px}.empty-state{background:var(--cg-bg-color);padding:16px;display:flex;gap:8px;justify-content:center;font-size:12px;font-weight:300;line-height:16px;letter-spacing:.3px}.product{display:grid;grid-template-columns:auto 100px;padding:8px 0;border-bottom:1px solid var(--cg-border-color)}.product.readonly{align-items:center}.product.deleted{opacity:.5}.product.item{height:65px;overflow:hidden}.product__info{display:flex;gap:16px}.product__image-wrapper{flex-shrink:0;height:48px;width:48px;display:flex;justify-content:center;align-items:center;background:var(--cg-bg-color-hover);border-radius:4px}.product__image{background-size:contain;background-repeat:no-repeat;background-position:center;height:calc(100% - 12px);width:calc(100% - 12px)}.product .product-name{margin-bottom:4px;font-size:14px;font-weight:500;line-height:20px}.product .actions{display:flex;gap:16px}.footer{padding-top:8px}.word-break{word-break:break-word}.no-image-icon{height:24px;width:24px}.qty{display:flex;align-items:center}.flow-header-overlay__wrapper ::ng-deep .p-button-link{padding:0;font-size:12px;font-weight:400;line-height:18px;letter-spacing:.3px;color:var(--cg-primary-color)}.flow-header-overlay__wrapper ::ng-deep .p-button-link:hover:enabled{color:var(--cg-text-color-secondary)}.flow-header-overlay__wrapper ::ng-deep .p-button-link:hover:enabled .p-button-label{text-decoration:none}.flow-header-overlay__wrapper ::ng-deep .p-button-link.p-button-secondary{color:var(--cg-text-color-secondary)}.flow-header-overlay__wrapper ::ng-deep .p-button-link.p-button-secondary:hover:enabled{color:var(--cg-primary-color)}\n"] }]
113
- }], ctorParameters: function () { return [{ type: i1.FlowConfigurationService }, { type: i2.FlowRouterService }, { type: i1.ProductImagesService }, { type: i1.QuoteDraftService }]; }, propDecorators: { overlayPanel: [{
114
- type: ViewChild,
115
- args: [OverlayPanel]
116
- }], products: [{
117
- type: Input
118
- }] } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9jYXJ0LW92ZXJsYXkvY2FydC1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9jYXJ0LW92ZXJsYXkvY2FydC1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFJTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7OztBQVMxRSxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQixZQUNVLGlCQUEyQyxFQUMzQyxhQUFnQyxFQUNoQyxvQkFBMEMsRUFDMUMsaUJBQW9DO1FBSHBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0Msa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQ2hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWY5QixxQkFBZ0IsR0FBRyxF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QUM1QjtZQUVELElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRTtnQkFDckUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ25CO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNsQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25GLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7O2lIQXpIVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix1SUFDcEIsWUFBWSxxRUN4QnpCLDYzSUFpR0E7MkZEMUVhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTtrTkFHZixZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLFlBQVk7Z0JBRVAsUUFBUTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsIFByb2R1Y3RJbWFnZXNTZXJ2aWNlLCBRdW90ZURyYWZ0U2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd1JvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mbG93LXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEhlYWRlclByb2R1Y3QgfSBmcm9tICcuLi9oZWFkZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1jYXJ0LXByZXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FydC1wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FydC1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJ0UHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChPdmVybGF5UGFuZWwpIHB1YmxpYyBvdmVybGF5UGFuZWwhOiBPdmVybGF5UGFuZWw7XG5cbiAgQElucHV0KCkgcHVibGljIHByb2R1Y3RzITogSGVhZGVyUHJvZHVjdFtdO1xuXG4gIHB1YmxpYyByZWFkb25seSBwcm9kdWN0Um93SGVpZ2h0ID0gNjU7XG5cbiAgcHVibGljIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHVibGljIGxvY2tlZFByb2R1Y3RJZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIHB1YmxpYyBpc0VkaXRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGhhc1Rlcm1JblByb2R1Y3RzID0gZmFsc2U7XG4gIHB1YmxpYyBzY3JvbGxIZWlnaHQgPSAwO1xuXG4gIHByaXZhdGUgc2hvdWxkVXBkYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvbjogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyU2VydmljZTogRmxvd1JvdXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9kdWN0SW1hZ2VzU2VydmljZTogUHJvZHVjdEltYWdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMubG9ja2VkUHJvZHVjdElkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucm91dGVyU2VydmljZS5yb3V0ZSQsIHRoaXMucm91dGVyU2VydmljZS5pc0NvbmZpZ3VyYXRpb25Sb3V0ZSQoKV0pLnBpcGUoXG4gICAgICBtYXAoKFtyb3V0ZSwgaXNDb25maWd1cmF0aW9uUm91dGVdKSA9PiB7XG4gICAgICAgIGlmICghaXNDb25maWd1cmF0aW9uUm91dGUpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3V0ZS5xdWVyeVBhcmFtc1sncHJvZHVjdElkJ107XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5pc0VkaXRNb2RlJCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaXNFZGl0TW9kZSQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBwcm9kdWN0cyB9ID0gY2hhbmdlcztcblxuICAgIGlmIChwcm9kdWN0cykge1xuICAgICAgdGhpcy5zaG91bGRVcGRhdGUkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IE1hdGgubWluKHRoaXMucHJvZHVjdHMubGVuZ3RoICogdGhpcy5wcm9kdWN0Um93SGVpZ2h0LCA0NjApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5sb2NrZWRQcm9kdWN0SWQkLCB0aGlzLmlzRWRpdE1vZGUkLCB0aGlzLnNob3VsZFVwZGF0ZSQsIHRoaXMub3ZlcmxheVBhbmVsLm9uU2hvd10pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMub3ZlcmxheVBhbmVsLm92ZXJsYXlWaXNpYmxlKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbbG9ja2VkUHJvZHVjdElkLCBpc0VkaXRNb2RlXSkgPT4gdGhpcy51cGRhdGVDb250cm9scyh0aGlzLnByb2R1Y3RzLCBpc0VkaXRNb2RlLCBsb2NrZWRQcm9kdWN0SWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEltYWdlVXJsKHByb2R1Y3RJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZHVjdEltYWdlc1NlcnZpY2UuZ2V0SW1hZ2VVcmwkKHByb2R1Y3RJZCk7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb1Byb2R1Y3RDb25maWd1cmF0aW9uKHByb2R1Y3RJZDogc3RyaW5nLCBsaW5lSXRlbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlQYW5lbC5oaWRlKCk7XG4gICAgdGhpcy5yb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlVG9Qcm9kdWN0Q29uZmlndXJhdGlvbihwcm9kdWN0SWQsIGxpbmVJdGVtSWQpO1xuICB9XG5cbiAgcHVibGljIGNvbnRyb2xCbHVySGFuZGxlcihwcm9kdWN0OiBIZWFkZXJQcm9kdWN0KTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQocHJvZHVjdC5pZCk7XG4gICAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24udXBkYXRlKFtcbiAgICAgIHtcbiAgICAgICAgZGF0YVR5cGU6ICdMSU5FSVRFTScsXG4gICAgICAgIGF0dHJpYnV0ZVR5cGU6ICdRVFknLFxuICAgICAgICBpZDogcHJvZHVjdC5pZCxcbiAgICAgICAgbmV3VmFsdWU6IGNvbnRyb2wudmFsdWUsXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUhhbmRsZXIocHJvZHVjdDogSGVhZGVyUHJvZHVjdCk6IHZvaWQge1xuICAgIHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24uZGVsZXRlKFtwcm9kdWN0LmlkXSk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlQWxsSGFuZGxlcigpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9kdWN0SWRzID0gdGhpcy5wcm9kdWN0cy5tYXAocHJvZHVjdCA9PiBwcm9kdWN0LmlkKTtcbiAgICB0aGlzLmZsb3dDb25maWd1cmF0aW9uLmRlbGV0ZShwcm9kdWN0SWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udHJvbHMocHJvZHVjdHM6IEhlYWRlclByb2R1Y3RbXSwgaXNFZGl0TW9kZTogYm9vbGVhbiwgbG9ja2VkUHJvZHVjdElkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcHJvZHVjdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICghaXRlbS5pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlkcy5wdXNoKGl0ZW0uaWQpO1xuXG4gICAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoaXRlbS5pZCk7XG5cbiAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKGl0ZW0ucXR5LCBbXSk7XG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGl0ZW0uaWQsIGNvbnRyb2wpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShpdGVtLnF0eSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFZGl0TW9kZSB8fCBpdGVtLmRlbGV0ZWQgfHwgaXRlbS5wcm9kdWN0SWQgPT09IGxvY2tlZFByb2R1Y3RJZCkge1xuICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZW1vdmVkSWRzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoaWQgPT4gIWlkcy5pbmNsdWRlcyhpZCkpO1xuICAgIHJlbW92ZWRJZHMuZm9yRWFjaChpZCA9PiB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChpZCkpO1xuICAgIHRoaXMuaGFzVGVybUluUHJvZHVjdHMgPSBwcm9kdWN0cy5zb21lKChpdGVtOiBIZWFkZXJQcm9kdWN0KSA9PiBpdGVtLmhhc1Rlcm0pO1xuICB9XG59XG4iLCI8cC1vdmVybGF5UGFuZWxcbiAgc3R5bGVDbGFzcz1cImNhdGFsb2ctb3ZlcmxheSBmbG93LWhlYWRlci1vdmVybGF5IGNlbnRlciBuby1wYWRkaW5nXCJcbiAgc2hvd1RyYW5zaXRpb25PcHRpb25zPVwiMG1zXCJcbiAgaGlkZVRyYW5zaXRpb25PcHRpb25zPVwiMG1zXCJcbj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxvdy1oZWFkZXItb3ZlcmxheV9fd3JhcHBlclwiICp2bExldD1cImxvY2tlZFByb2R1Y3RJZCQgfCBhc3luYyBhcyBsb2NrZWRQcm9kdWN0SWRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiaXNFZGl0TW9kZSQgfCBhc3luYyBhcyBpc0VkaXRNb2RlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9kdWN0cy5sZW5ndGggPiAwOyBlbHNlIGVtcHR5XCI+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiZmxvdy1oZWFkZXItb3ZlcmxheV9fdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlByb2R1Y3RzICh7eyBwcm9kdWN0cy5sZW5ndGggfX0pPC9zcGFuPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWNyb3NzIGNsb3NlLWljb25cIiAoY2xpY2spPVwib3ZlcmxheVBhbmVsLmhpZGUoKVwiPjwvaT5cbiAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgPHAtdmlydHVhbFNjcm9sbGVyIFt2YWx1ZV09XCJwcm9kdWN0c1wiIHNjcm9sbEhlaWdodD1cInt7IHNjcm9sbEhlaWdodCB9fXB4XCIgW2l0ZW1TaXplXT1cInByb2R1Y3RSb3dIZWlnaHRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LXByb2R1Y3Q+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3QgaXRlbVwiXG4gICAgICAgICAgICAgICAgKnZsTGV0PVwiIWlzRWRpdE1vZGUgfHwgcHJvZHVjdC5kZWxldGVkIGFzIGlzUmVhZG9ubHlQcm9kdWN0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmVhZG9ubHldPVwiaXNSZWFkb25seVByb2R1Y3RcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kZWxldGVkXT1cInByb2R1Y3QuZGVsZXRlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICp2bExldD1cImxvY2tlZFByb2R1Y3RJZCA9PT0gcHJvZHVjdC5wcm9kdWN0SWQgYXMgaXNMb2NrZWRQcm9kdWN0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdF9faW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdF9faW1hZ2Utd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0SW1hZ2VVcmwocHJvZHVjdC5wcm9kdWN0SWQpIHwgYXN5bmMgYXMgaW1hZ2VVcmw7IGVsc2Ugbm9JbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3RfX2ltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyBpbWFnZVVybCArICcpJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmQtYnJlYWsgcHJvZHVjdC1uYW1lXCIgW2NsYXNzLmxpbmUtdGhyb3VnaF09XCJwcm9kdWN0LmRlbGV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCIgKm5nSWY9XCIhaXNSZWFkb25seVByb2R1Y3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkNvbmZpZ3VyZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFByb2R1Y3QgfHwgIXByb2R1Y3QuY29uZmlndXJhYmxlIHx8IHByb2R1Y3QuaGFzVGVybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1saW5rIHAtYnV0dG9uLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwibmF2aWdhdGVUb1Byb2R1Y3RDb25maWd1cmF0aW9uKHByb2R1Y3QucHJvZHVjdElkLCBwcm9kdWN0LmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFByb2R1Y3QgfHwgcHJvZHVjdC5oYXNUZXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWxpbmsgcC1idXR0b24tc20gcC1idXR0b24tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZGVsZXRlSGFuZGxlcihwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0uZ2V0KHByb2R1Y3QuaWQpIGFzIGNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF0eVwiICpuZ0lmPVwiIWlzUmVhZG9ubHlQcm9kdWN0OyBlbHNlIHJlYWRvbmx5UXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHZsLXF1YW50aXR5LWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjb250cm9sQmx1ckhhbmRsZXIocHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3ZsLXF1YW50aXR5LWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5UXR5XG4gICAgICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGNvbnRyb2wudmFsdWUgfX08L3NwYW4+PC9uZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC12aXJ0dWFsU2Nyb2xsZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSW1hZ2U+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtbm8taW1hZ2Ugbm8taW1hZ2UtaWNvblwiPjwvaT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZm9vdGVyXCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJDbGVhciBDYXJ0XCJcbiAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWxpbmsgcC1idXR0b24tc20gcGwtMCBwci0wXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0VkaXRNb2RlIHx8ICEhbG9ja2VkUHJvZHVjdElkIHx8IGhhc1Rlcm1JblByb2R1Y3RzXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZGVsZXRlQWxsSGFuZGxlcigpXCJcbiAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgICA8aDIgY2xhc3M9XCJmbG93LWhlYWRlci1vdmVybGF5X190aXRsZVwiPlxuICAgICAgICAgIDxzcGFuPkVtcHR5IENhcnQ8L3NwYW4+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWNyb3NzIGNsb3NlLWljb25cIiAoY2xpY2spPVwib3ZlcmxheVBhbmVsLmhpZGUoKVwiPjwvaT5cbiAgICAgICAgPC9oMj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWJhZ1wiPjwvaT5cbiAgICAgICAgICBUaGVyZSBhcmUgbm8gcHJvZHVjdHMgYWRkZWQgdG8gdGhlIFNob3BwaW5nIENhcnQgeWV0LlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLW92ZXJsYXlQYW5lbD5cbiJdfQ==