@merchi/product-form 1.19.12

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 (188) hide show
  1. package/README.md +272 -0
  2. package/lib/actions/jobs.d.ts +3 -0
  3. package/lib/actions/jobs.js +80 -0
  4. package/lib/actions/leads.d.ts +7 -0
  5. package/lib/actions/leads.js +67 -0
  6. package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
  7. package/lib/components/AlertVariationSellerEditable.js +46 -0
  8. package/lib/components/Collapse.d.ts +3 -0
  9. package/lib/components/Collapse.js +34 -0
  10. package/lib/components/DateCountdown.d.ts +44 -0
  11. package/lib/components/DateCountdown.js +188 -0
  12. package/lib/components/DropzoneInput.d.ts +10 -0
  13. package/lib/components/DropzoneInput.js +169 -0
  14. package/lib/components/DynamicVariationInput.d.ts +9 -0
  15. package/lib/components/DynamicVariationInput.js +71 -0
  16. package/lib/components/FormLead.d.ts +10 -0
  17. package/lib/components/FormLead.js +215 -0
  18. package/lib/components/GroupInventory.d.ts +6 -0
  19. package/lib/components/GroupInventory.js +16 -0
  20. package/lib/components/InputGroupQuantity.d.ts +8 -0
  21. package/lib/components/InputGroupQuantity.js +117 -0
  22. package/lib/components/InputHiddenStatic.d.ts +8 -0
  23. package/lib/components/InputHiddenStatic.js +24 -0
  24. package/lib/components/InputProductQuantity.d.ts +7 -0
  25. package/lib/components/InputProductQuantity.js +102 -0
  26. package/lib/components/InventoryStatus.d.ts +7 -0
  27. package/lib/components/InventoryStatus.js +67 -0
  28. package/lib/components/MerchiProductForm.d.ts +62 -0
  29. package/lib/components/MerchiProductForm.js +51 -0
  30. package/lib/components/PriceMatrix.d.ts +27 -0
  31. package/lib/components/PriceMatrix.js +106 -0
  32. package/lib/components/ProductButtonsSubmit.d.ts +3 -0
  33. package/lib/components/ProductButtonsSubmit.js +52 -0
  34. package/lib/components/ProductFeatureDeadline.d.ts +3 -0
  35. package/lib/components/ProductFeatureDeadline.js +25 -0
  36. package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
  37. package/lib/components/ProductGroupBuyStatus.js +47 -0
  38. package/lib/components/ProductPriceMatrix.d.ts +3 -0
  39. package/lib/components/ProductPriceMatrix.js +51 -0
  40. package/lib/components/ProductTitle.d.ts +3 -0
  41. package/lib/components/ProductTitle.js +36 -0
  42. package/lib/components/ProductTotalCost.d.ts +3 -0
  43. package/lib/components/ProductTotalCost.js +74 -0
  44. package/lib/components/ProductUnitPrice.d.ts +7 -0
  45. package/lib/components/ProductUnitPrice.js +51 -0
  46. package/lib/components/TooltipElement.d.ts +9 -0
  47. package/lib/components/TooltipElement.js +35 -0
  48. package/lib/components/VariationAreaInput.d.ts +8 -0
  49. package/lib/components/VariationAreaInput.js +219 -0
  50. package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
  51. package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
  52. package/lib/components/VariationCheckboxRadio.d.ts +17 -0
  53. package/lib/components/VariationCheckboxRadio.js +57 -0
  54. package/lib/components/VariationColourExtractInput.d.ts +8 -0
  55. package/lib/components/VariationColourExtractInput.js +395 -0
  56. package/lib/components/VariationError.d.ts +7 -0
  57. package/lib/components/VariationError.js +52 -0
  58. package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
  59. package/lib/components/VariationFieldInputInstructions.js +50 -0
  60. package/lib/components/VariationFieldInstructions.d.ts +3 -0
  61. package/lib/components/VariationFieldInstructions.js +22 -0
  62. package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
  63. package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
  64. package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
  65. package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
  66. package/lib/components/VariationFieldStaticValues.d.ts +8 -0
  67. package/lib/components/VariationFieldStaticValues.js +57 -0
  68. package/lib/components/VariationFileInput.d.ts +8 -0
  69. package/lib/components/VariationFileInput.js +229 -0
  70. package/lib/components/VariationInput.d.ts +11 -0
  71. package/lib/components/VariationInput.js +97 -0
  72. package/lib/components/VariationLabel.d.ts +11 -0
  73. package/lib/components/VariationLabel.js +85 -0
  74. package/lib/components/VariationOptionColour.d.ts +8 -0
  75. package/lib/components/VariationOptionColour.js +50 -0
  76. package/lib/components/VariationOptionImage.d.ts +8 -0
  77. package/lib/components/VariationOptionImage.js +52 -0
  78. package/lib/components/VariationSelect.d.ts +8 -0
  79. package/lib/components/VariationSelect.js +66 -0
  80. package/lib/components/VariationSelectElements.d.ts +16 -0
  81. package/lib/components/VariationSelectElements.js +141 -0
  82. package/lib/components/VariationTurnaroundTime.d.ts +9 -0
  83. package/lib/components/VariationTurnaroundTime.js +156 -0
  84. package/lib/components/Variations.d.ts +9 -0
  85. package/lib/components/Variations.js +109 -0
  86. package/lib/components/VariationsGroups.d.ts +8 -0
  87. package/lib/components/VariationsGroups.js +79 -0
  88. package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
  89. package/lib/components/buttons/ButtonAddGroup.js +38 -0
  90. package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
  91. package/lib/components/buttons/ButtonProductSubmit.js +33 -0
  92. package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
  93. package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
  94. package/lib/components/buttons/index.d.ts +4 -0
  95. package/lib/components/buttons/index.js +5 -0
  96. package/lib/components/cost.d.ts +11 -0
  97. package/lib/components/cost.js +44 -0
  98. package/lib/components/currency.d.ts +16 -0
  99. package/lib/components/currency.js +184 -0
  100. package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
  101. package/lib/components/drafts/DraftApprovePanel.js +315 -0
  102. package/lib/components/drafts/DraftCanvas.d.ts +13 -0
  103. package/lib/components/drafts/DraftCanvas.js +496 -0
  104. package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
  105. package/lib/components/drafts/DraftDesignerSheet.js +685 -0
  106. package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
  107. package/lib/components/drafts/ProductDraftsHost.js +207 -0
  108. package/lib/components/drafts/useHtmlImage.d.ts +1 -0
  109. package/lib/components/drafts/useHtmlImage.js +45 -0
  110. package/lib/components/icons/IconChecked.d.ts +3 -0
  111. package/lib/components/icons/IconChecked.js +10 -0
  112. package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
  113. package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
  114. package/lib/components/icons/IconCountryFlag.d.ts +8 -0
  115. package/lib/components/icons/IconCountryFlag.js +27 -0
  116. package/lib/components/icons/IconFile.d.ts +7 -0
  117. package/lib/components/icons/IconFile.js +41 -0
  118. package/lib/components/icons/IconNoStock.d.ts +3 -0
  119. package/lib/components/icons/IconNoStock.js +12 -0
  120. package/lib/components/icons/index.d.ts +5 -0
  121. package/lib/components/icons/index.js +6 -0
  122. package/lib/components/quoteAfterFieldChange.d.ts +7 -0
  123. package/lib/components/quoteAfterFieldChange.js +11 -0
  124. package/lib/components/quoteAfterFieldChange.test.js +58 -0
  125. package/lib/components/utils.d.ts +26 -0
  126. package/lib/components/utils.js +500 -0
  127. package/lib/context/MerchiProductFormProvider.d.ts +177 -0
  128. package/lib/context/MerchiProductFormProvider.js +1020 -0
  129. package/lib/images/product-not-found.png +0 -0
  130. package/lib/index.d.ts +42 -0
  131. package/lib/index.js +41 -0
  132. package/lib/styles/globals.css +1590 -0
  133. package/lib/styles/globals.css.map +1 -0
  134. package/lib/styles/globals.scss +1698 -0
  135. package/lib/utils/area.d.ts +77 -0
  136. package/lib/utils/area.js +298 -0
  137. package/lib/utils/cleanFormVariationJson.d.ts +5 -0
  138. package/lib/utils/cleanFormVariationJson.js +39 -0
  139. package/lib/utils/cleanFormVariationJson.test.js +54 -0
  140. package/lib/utils/countries.d.ts +7 -0
  141. package/lib/utils/countries.js +290 -0
  142. package/lib/utils/currency.d.ts +2 -0
  143. package/lib/utils/currency.js +188 -0
  144. package/lib/utils/draftExport.d.ts +21 -0
  145. package/lib/utils/draftExport.js +481 -0
  146. package/lib/utils/draftExport.test.js +78 -0
  147. package/lib/utils/draftFonts.d.ts +55 -0
  148. package/lib/utils/draftFonts.js +68 -0
  149. package/lib/utils/draftStorage.d.ts +25 -0
  150. package/lib/utils/draftStorage.js +148 -0
  151. package/lib/utils/draftStorage.test.js +125 -0
  152. package/lib/utils/draftTemplates.d.ts +87 -0
  153. package/lib/utils/draftTemplates.js +579 -0
  154. package/lib/utils/draftTemplates.test.js +476 -0
  155. package/lib/utils/formErrors.d.ts +2 -0
  156. package/lib/utils/formErrors.js +29 -0
  157. package/lib/utils/index.d.ts +3 -0
  158. package/lib/utils/index.js +4 -0
  159. package/lib/utils/priceMatrix.d.ts +57 -0
  160. package/lib/utils/priceMatrix.js +82 -0
  161. package/lib/utils/priceMatrix.test.js +200 -0
  162. package/lib/utils/products.d.ts +40 -0
  163. package/lib/utils/products.js +68 -0
  164. package/lib/utils/quantity.d.ts +7 -0
  165. package/lib/utils/quantity.js +19 -0
  166. package/lib/utils/quantity.test.js +42 -0
  167. package/lib/utils/reconcileVariations.d.ts +25 -0
  168. package/lib/utils/reconcileVariations.js +246 -0
  169. package/lib/utils/reconcileVariations.test.js +239 -0
  170. package/lib/utils/selectedVariationCosts.d.ts +6 -0
  171. package/lib/utils/selectedVariationCosts.js +59 -0
  172. package/lib/utils/selectedVariationCosts.test.js +66 -0
  173. package/lib/utils/selections.d.ts +23 -0
  174. package/lib/utils/selections.js +76 -0
  175. package/lib/utils/selections.test.js +159 -0
  176. package/lib/utils/singleOptionVariation.d.ts +2 -0
  177. package/lib/utils/singleOptionVariation.js +22 -0
  178. package/lib/utils/singleOptionVariation.test.js +59 -0
  179. package/lib/utils/supportedNumbers.d.ts +1 -0
  180. package/lib/utils/supportedNumbers.js +27 -0
  181. package/lib/utils/types.d.ts +114 -0
  182. package/lib/utils/types.js +50 -0
  183. package/lib/utils/url.d.ts +3 -0
  184. package/lib/utils/url.js +65 -0
  185. package/lib/utils/variationFields.d.ts +5 -0
  186. package/lib/utils/variationFields.js +116 -0
  187. package/lib/utils/variationFields.test.js +108 -0
  188. package/package.json +93 -0
@@ -0,0 +1,246 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
5
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
6
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
10
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
12
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
13
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
14
+ /**
15
+ * Reconcile form variation arrays with a desired list (server quote or
16
+ * client-side visible fields). Membership is matched by variationField.id so
17
+ * conditional fields the server/client adds or removes are adopted without a
18
+ * full form reset that would throw away in-progress quantity edits.
19
+ */
20
+
21
+ export function variationFieldId(variation) {
22
+ var _variation$variationF;
23
+ var id = variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.id;
24
+ if (id === undefined || id === null || id === '') return null;
25
+ var n = Number(id);
26
+ return Number.isFinite(n) ? n : null;
27
+ }
28
+ function optionId(option) {
29
+ var _option$optionId;
30
+ var id = (_option$optionId = option === null || option === void 0 ? void 0 : option.optionId) !== null && _option$optionId !== void 0 ? _option$optionId : option === null || option === void 0 ? void 0 : option.id;
31
+ if (id === undefined || id === null || id === '') return null;
32
+ var n = Number(id);
33
+ return Number.isFinite(n) ? n : null;
34
+ }
35
+
36
+ /** Sync isVisible / available onto current options by optionId (not index). */
37
+ export function syncOptionVisibilityById(currentOptions, sourceOptions) {
38
+ if (!Array.isArray(currentOptions) || !Array.isArray(sourceOptions)) {
39
+ return false;
40
+ }
41
+ var sourceById = new Map();
42
+ var _iterator = _createForOfIteratorHelper(sourceOptions),
43
+ _step;
44
+ try {
45
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
46
+ var option = _step.value;
47
+ var id = optionId(option);
48
+ if (id != null) sourceById.set(id, option);
49
+ }
50
+ } catch (err) {
51
+ _iterator.e(err);
52
+ } finally {
53
+ _iterator.f();
54
+ }
55
+ var changed = false;
56
+ var _iterator2 = _createForOfIteratorHelper(currentOptions),
57
+ _step2;
58
+ try {
59
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
60
+ var _option = _step2.value;
61
+ var _id = optionId(_option);
62
+ if (_id == null) continue;
63
+ var source = sourceById.get(_id);
64
+ if (!source) continue;
65
+ if (source.isVisible !== undefined && _option.isVisible !== source.isVisible) {
66
+ _option.isVisible = source.isVisible;
67
+ changed = true;
68
+ }
69
+ if (source.available !== undefined && _option.available !== source.available) {
70
+ _option.available = source.available;
71
+ changed = true;
72
+ }
73
+ }
74
+ } catch (err) {
75
+ _iterator2.e(err);
76
+ } finally {
77
+ _iterator2.f();
78
+ }
79
+ return changed;
80
+ }
81
+ function preferVariationField(current, desired) {
82
+ var _desired$selectedBy;
83
+ // Keep the richer client/product metadata (e.g. selectedBy) when the desired
84
+ // list comes from an estimate embed that omits it.
85
+ if (!current) return desired;
86
+ if (!desired) return current;
87
+ var currentHasSelectedBy = Array.isArray(current.selectedBy);
88
+ var desiredHasSelectedBy = Array.isArray(desired.selectedBy);
89
+ if (currentHasSelectedBy && !desiredHasSelectedBy) {
90
+ return _objectSpread(_objectSpread(_objectSpread({}, desired), current), {}, {
91
+ selectedBy: current.selectedBy
92
+ });
93
+ }
94
+ if (current.fieldType != null && desired.fieldType == null) {
95
+ return _objectSpread(_objectSpread({}, desired), current);
96
+ }
97
+ return _objectSpread(_objectSpread(_objectSpread({}, current), desired), {}, {
98
+ selectedBy: (_desired$selectedBy = desired.selectedBy) !== null && _desired$selectedBy !== void 0 ? _desired$selectedBy : current.selectedBy
99
+ });
100
+ }
101
+ function sameFieldMembership(currentVariations, desiredVariations) {
102
+ var currentIds = (currentVariations || []).map(variationFieldId);
103
+ var desiredIds = (desiredVariations || []).map(variationFieldId);
104
+ if (currentIds.length !== desiredIds.length) return false;
105
+ return currentIds.every(function (id, index) {
106
+ return id === desiredIds[index];
107
+ });
108
+ }
109
+
110
+ /**
111
+ * Build the next variations array from `desiredVariations`, preserving user
112
+ * `value` / `variationFiles` for fields that already exist on the form.
113
+ */
114
+ export function reconcileVariations(currentVariations, desiredVariations) {
115
+ var currentByFieldId = new Map();
116
+ var _iterator3 = _createForOfIteratorHelper(currentVariations || []),
117
+ _step3;
118
+ try {
119
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
120
+ var variation = _step3.value;
121
+ var id = variationFieldId(variation);
122
+ if (id != null) currentByFieldId.set(id, variation);
123
+ }
124
+ } catch (err) {
125
+ _iterator3.e(err);
126
+ } finally {
127
+ _iterator3.f();
128
+ }
129
+ var membershipChanged = !sameFieldMembership(currentVariations, desiredVariations);
130
+ var visibilityChanged = false;
131
+ var variations = (desiredVariations || []).map(function (desired) {
132
+ var _current$variationFil;
133
+ var fieldId = variationFieldId(desired);
134
+ var current = fieldId != null ? currentByFieldId.get(fieldId) : undefined;
135
+ if (!current) {
136
+ return desired;
137
+ }
138
+ var mergedSelectable = Array.isArray(desired.selectableOptions) && desired.selectableOptions.length > 0 ? desired.selectableOptions.map(function (desiredOption) {
139
+ var id = optionId(desiredOption);
140
+ var currentOption = (current.selectableOptions || []).find(function (option) {
141
+ return optionId(option) === id;
142
+ });
143
+ if (!currentOption) return desiredOption;
144
+ // Detect visibility diffs against the previous form state.
145
+ if (desiredOption.isVisible !== undefined && currentOption.isVisible !== desiredOption.isVisible) {
146
+ visibilityChanged = true;
147
+ }
148
+ if (desiredOption.available !== undefined && currentOption.available !== desiredOption.available) {
149
+ visibilityChanged = true;
150
+ }
151
+ return _objectSpread(_objectSpread({}, currentOption), desiredOption);
152
+ }) : current.selectableOptions;
153
+ return _objectSpread(_objectSpread({}, desired), {}, {
154
+ value: current.value,
155
+ variationFiles: (_current$variationFil = current.variationFiles) !== null && _current$variationFil !== void 0 ? _current$variationFil : desired.variationFiles,
156
+ variationField: preferVariationField(current.variationField, desired.variationField),
157
+ selectableOptions: mergedSelectable
158
+ });
159
+ });
160
+ return {
161
+ variations: variations,
162
+ membershipChanged: membershipChanged,
163
+ visibilityChanged: visibilityChanged || membershipChanged
164
+ };
165
+ }
166
+
167
+ /**
168
+ * Filter/order product fields by a visible-id set and reuse current values
169
+ * when present; otherwise use `buildEmptyVariation(field)`.
170
+ */
171
+ export function buildDesiredVariationsFromFields(currentVariations, productFields, visibleFieldIds, buildEmptyVariation) {
172
+ // Without product field templates we cannot materialise gated fields — leave
173
+ // the current list alone rather than wiping the form.
174
+ if (!Array.isArray(productFields) || productFields.length === 0) {
175
+ return currentVariations || [];
176
+ }
177
+ var currentByFieldId = new Map();
178
+ var _iterator4 = _createForOfIteratorHelper(currentVariations || []),
179
+ _step4;
180
+ try {
181
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
182
+ var variation = _step4.value;
183
+ var id = variationFieldId(variation);
184
+ if (id != null) currentByFieldId.set(id, variation);
185
+ }
186
+ } catch (err) {
187
+ _iterator4.e(err);
188
+ } finally {
189
+ _iterator4.f();
190
+ }
191
+ var sortedFields = _toConsumableArray(productFields).sort(function (a, b) {
192
+ return ((a === null || a === void 0 ? void 0 : a.position) || 0) - ((b === null || b === void 0 ? void 0 : b.position) || 0);
193
+ });
194
+ var desired = [];
195
+ var _iterator5 = _createForOfIteratorHelper(sortedFields),
196
+ _step5;
197
+ try {
198
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
199
+ var field = _step5.value;
200
+ var _id2 = field === null || field === void 0 ? void 0 : field.id;
201
+ if (_id2 == null || !visibleFieldIds.has(Number(_id2))) continue;
202
+ var current = currentByFieldId.get(Number(_id2));
203
+ if (current) {
204
+ desired.push(current);
205
+ } else {
206
+ desired.push(buildEmptyVariation(field));
207
+ }
208
+ }
209
+ } catch (err) {
210
+ _iterator5.e(err);
211
+ } finally {
212
+ _iterator5.f();
213
+ }
214
+ return desired;
215
+ }
216
+ export function productFieldTemplatesById(product) {
217
+ var map = new Map();
218
+ var add = function add(fields) {
219
+ var _iterator6 = _createForOfIteratorHelper(fields || []),
220
+ _step6;
221
+ try {
222
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
223
+ var field = _step6.value;
224
+ if ((field === null || field === void 0 ? void 0 : field.id) != null) map.set(Number(field.id), field);
225
+ }
226
+ } catch (err) {
227
+ _iterator6.e(err);
228
+ } finally {
229
+ _iterator6.f();
230
+ }
231
+ };
232
+ add(product === null || product === void 0 ? void 0 : product.groupVariationFields);
233
+ add(product === null || product === void 0 ? void 0 : product.independentVariationFields);
234
+ return map;
235
+ }
236
+ export function productFieldsForPricingFields(pricingFields, product) {
237
+ if (!Array.isArray(pricingFields)) return null;
238
+ var byId = productFieldTemplatesById(product);
239
+ if (byId.size === 0) return null;
240
+ return pricingFields.filter(function (field) {
241
+ return (field === null || field === void 0 ? void 0 : field.id) != null;
242
+ }).map(function (field) {
243
+ return byId.get(Number(field.id)) || field;
244
+ });
245
+ }
246
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YXJpYXRpb25GaWVsZElkIiwidmFyaWF0aW9uIiwiX3ZhcmlhdGlvbiR2YXJpYXRpb25GIiwiaWQiLCJ2YXJpYXRpb25GaWVsZCIsInVuZGVmaW5lZCIsIm4iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm9wdGlvbklkIiwib3B0aW9uIiwiX29wdGlvbiRvcHRpb25JZCIsInN5bmNPcHRpb25WaXNpYmlsaXR5QnlJZCIsImN1cnJlbnRPcHRpb25zIiwic291cmNlT3B0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsInNvdXJjZUJ5SWQiLCJNYXAiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsImRvbmUiLCJ2YWx1ZSIsInNldCIsImVyciIsImUiLCJmIiwiY2hhbmdlZCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJzb3VyY2UiLCJnZXQiLCJpc1Zpc2libGUiLCJhdmFpbGFibGUiLCJwcmVmZXJWYXJpYXRpb25GaWVsZCIsImN1cnJlbnQiLCJkZXNpcmVkIiwiX2Rlc2lyZWQkc2VsZWN0ZWRCeSIsImN1cnJlbnRIYXNTZWxlY3RlZEJ5Iiwic2VsZWN0ZWRCeSIsImRlc2lyZWRIYXNTZWxlY3RlZEJ5IiwiX29iamVjdFNwcmVhZCIsImZpZWxkVHlwZSIsInNhbWVGaWVsZE1lbWJlcnNoaXAiLCJjdXJyZW50VmFyaWF0aW9ucyIsImRlc2lyZWRWYXJpYXRpb25zIiwiY3VycmVudElkcyIsIm1hcCIsImRlc2lyZWRJZHMiLCJsZW5ndGgiLCJldmVyeSIsImluZGV4IiwicmVjb25jaWxlVmFyaWF0aW9ucyIsImN1cnJlbnRCeUZpZWxkSWQiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVtYmVyc2hpcENoYW5nZWQiLCJ2aXNpYmlsaXR5Q2hhbmdlZCIsInZhcmlhdGlvbnMiLCJfY3VycmVudCR2YXJpYXRpb25GaWwiLCJmaWVsZElkIiwibWVyZ2VkU2VsZWN0YWJsZSIsInNlbGVjdGFibGVPcHRpb25zIiwiZGVzaXJlZE9wdGlvbiIsImN1cnJlbnRPcHRpb24iLCJmaW5kIiwidmFyaWF0aW9uRmlsZXMiLCJidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyIsInByb2R1Y3RGaWVsZHMiLCJ2aXNpYmxlRmllbGRJZHMiLCJidWlsZEVtcHR5VmFyaWF0aW9uIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInNvcnRlZEZpZWxkcyIsIl90b0NvbnN1bWFibGVBcnJheSIsInNvcnQiLCJhIiwiYiIsInBvc2l0aW9uIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImZpZWxkIiwiaGFzIiwicHVzaCIsInByb2R1Y3RGaWVsZFRlbXBsYXRlc0J5SWQiLCJwcm9kdWN0IiwiYWRkIiwiZmllbGRzIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsImdyb3VwVmFyaWF0aW9uRmllbGRzIiwiaW5kZXBlbmRlbnRWYXJpYXRpb25GaWVsZHMiLCJwcm9kdWN0RmllbGRzRm9yUHJpY2luZ0ZpZWxkcyIsInByaWNpbmdGaWVsZHMiLCJieUlkIiwic2l6ZSIsImZpbHRlciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZWNvbmNpbGVWYXJpYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjb25jaWxlIGZvcm0gdmFyaWF0aW9uIGFycmF5cyB3aXRoIGEgZGVzaXJlZCBsaXN0IChzZXJ2ZXIgcXVvdGUgb3JcbiAqIGNsaWVudC1zaWRlIHZpc2libGUgZmllbGRzKS4gTWVtYmVyc2hpcCBpcyBtYXRjaGVkIGJ5IHZhcmlhdGlvbkZpZWxkLmlkIHNvXG4gKiBjb25kaXRpb25hbCBmaWVsZHMgdGhlIHNlcnZlci9jbGllbnQgYWRkcyBvciByZW1vdmVzIGFyZSBhZG9wdGVkIHdpdGhvdXQgYVxuICogZnVsbCBmb3JtIHJlc2V0IHRoYXQgd291bGQgdGhyb3cgYXdheSBpbi1wcm9ncmVzcyBxdWFudGl0eSBlZGl0cy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWF0aW9uRmllbGRJZCh2YXJpYXRpb246IGFueSk6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBpZCA9IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ/LmlkO1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCB8fCBpZCA9PT0gbnVsbCB8fCBpZCA9PT0gJycpIHJldHVybiBudWxsO1xuICBjb25zdCBuID0gTnVtYmVyKGlkKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBvcHRpb25JZChvcHRpb246IGFueSk6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBpZCA9IG9wdGlvbj8ub3B0aW9uSWQgPz8gb3B0aW9uPy5pZDtcbiAgaWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IG51bGwgfHwgaWQgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbiA9IE51bWJlcihpZCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogbnVsbDtcbn1cblxuLyoqIFN5bmMgaXNWaXNpYmxlIC8gYXZhaWxhYmxlIG9udG8gY3VycmVudCBvcHRpb25zIGJ5IG9wdGlvbklkIChub3QgaW5kZXgpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPcHRpb25WaXNpYmlsaXR5QnlJZChcbiAgY3VycmVudE9wdGlvbnM6IGFueVtdIHwgdW5kZWZpbmVkLFxuICBzb3VyY2VPcHRpb25zOiBhbnlbXSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50T3B0aW9ucykgfHwgIUFycmF5LmlzQXJyYXkoc291cmNlT3B0aW9ucykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgc291cmNlQnlJZCA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KCk7XG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNvdXJjZU9wdGlvbnMpIHtcbiAgICBjb25zdCBpZCA9IG9wdGlvbklkKG9wdGlvbik7XG4gICAgaWYgKGlkICE9IG51bGwpIHNvdXJjZUJ5SWQuc2V0KGlkLCBvcHRpb24pO1xuICB9XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIGN1cnJlbnRPcHRpb25zKSB7XG4gICAgY29uc3QgaWQgPSBvcHRpb25JZChvcHRpb24pO1xuICAgIGlmIChpZCA9PSBudWxsKSBjb250aW51ZTtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VCeUlkLmdldChpZCk7XG4gICAgaWYgKCFzb3VyY2UpIGNvbnRpbnVlO1xuICAgIGlmIChcbiAgICAgIHNvdXJjZS5pc1Zpc2libGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3B0aW9uLmlzVmlzaWJsZSAhPT0gc291cmNlLmlzVmlzaWJsZVxuICAgICkge1xuICAgICAgb3B0aW9uLmlzVmlzaWJsZSA9IHNvdXJjZS5pc1Zpc2libGU7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc291cmNlLmF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvcHRpb24uYXZhaWxhYmxlICE9PSBzb3VyY2UuYXZhaWxhYmxlXG4gICAgKSB7XG4gICAgICBvcHRpb24uYXZhaWxhYmxlID0gc291cmNlLmF2YWlsYWJsZTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZDtcbn1cblxuZnVuY3Rpb24gcHJlZmVyVmFyaWF0aW9uRmllbGQoY3VycmVudDogYW55LCBkZXNpcmVkOiBhbnkpOiBhbnkge1xuICAvLyBLZWVwIHRoZSByaWNoZXIgY2xpZW50L3Byb2R1Y3QgbWV0YWRhdGEgKGUuZy4gc2VsZWN0ZWRCeSkgd2hlbiB0aGUgZGVzaXJlZFxuICAvLyBsaXN0IGNvbWVzIGZyb20gYW4gZXN0aW1hdGUgZW1iZWQgdGhhdCBvbWl0cyBpdC5cbiAgaWYgKCFjdXJyZW50KSByZXR1cm4gZGVzaXJlZDtcbiAgaWYgKCFkZXNpcmVkKSByZXR1cm4gY3VycmVudDtcbiAgY29uc3QgY3VycmVudEhhc1NlbGVjdGVkQnkgPSBBcnJheS5pc0FycmF5KGN1cnJlbnQuc2VsZWN0ZWRCeSk7XG4gIGNvbnN0IGRlc2lyZWRIYXNTZWxlY3RlZEJ5ID0gQXJyYXkuaXNBcnJheShkZXNpcmVkLnNlbGVjdGVkQnkpO1xuICBpZiAoY3VycmVudEhhc1NlbGVjdGVkQnkgJiYgIWRlc2lyZWRIYXNTZWxlY3RlZEJ5KSB7XG4gICAgcmV0dXJuIHsgLi4uZGVzaXJlZCwgLi4uY3VycmVudCwgc2VsZWN0ZWRCeTogY3VycmVudC5zZWxlY3RlZEJ5IH07XG4gIH1cbiAgaWYgKGN1cnJlbnQuZmllbGRUeXBlICE9IG51bGwgJiYgZGVzaXJlZC5maWVsZFR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB7IC4uLmRlc2lyZWQsIC4uLmN1cnJlbnQgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmN1cnJlbnQsXG4gICAgLi4uZGVzaXJlZCxcbiAgICBzZWxlY3RlZEJ5OiBkZXNpcmVkLnNlbGVjdGVkQnkgPz8gY3VycmVudC5zZWxlY3RlZEJ5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBzYW1lRmllbGRNZW1iZXJzaGlwKFxuICBjdXJyZW50VmFyaWF0aW9uczogYW55W10gfCB1bmRlZmluZWQsXG4gIGRlc2lyZWRWYXJpYXRpb25zOiBhbnlbXSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGN1cnJlbnRJZHMgPSAoY3VycmVudFZhcmlhdGlvbnMgfHwgW10pLm1hcCh2YXJpYXRpb25GaWVsZElkKTtcbiAgY29uc3QgZGVzaXJlZElkcyA9IChkZXNpcmVkVmFyaWF0aW9ucyB8fCBbXSkubWFwKHZhcmlhdGlvbkZpZWxkSWQpO1xuICBpZiAoY3VycmVudElkcy5sZW5ndGggIT09IGRlc2lyZWRJZHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBjdXJyZW50SWRzLmV2ZXJ5KChpZCwgaW5kZXgpID0+IGlkID09PSBkZXNpcmVkSWRzW2luZGV4XSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG5leHQgdmFyaWF0aW9ucyBhcnJheSBmcm9tIGBkZXNpcmVkVmFyaWF0aW9uc2AsIHByZXNlcnZpbmcgdXNlclxuICogYHZhbHVlYCAvIGB2YXJpYXRpb25GaWxlc2AgZm9yIGZpZWxkcyB0aGF0IGFscmVhZHkgZXhpc3Qgb24gdGhlIGZvcm0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGVWYXJpYXRpb25zKFxuICBjdXJyZW50VmFyaWF0aW9uczogYW55W10gfCB1bmRlZmluZWQsXG4gIGRlc2lyZWRWYXJpYXRpb25zOiBhbnlbXSB8IHVuZGVmaW5lZFxuKTogeyB2YXJpYXRpb25zOiBhbnlbXTsgbWVtYmVyc2hpcENoYW5nZWQ6IGJvb2xlYW47IHZpc2liaWxpdHlDaGFuZ2VkOiBib29sZWFuIH0ge1xuICBjb25zdCBjdXJyZW50QnlGaWVsZElkID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcbiAgZm9yIChjb25zdCB2YXJpYXRpb24gb2YgY3VycmVudFZhcmlhdGlvbnMgfHwgW10pIHtcbiAgICBjb25zdCBpZCA9IHZhcmlhdGlvbkZpZWxkSWQodmFyaWF0aW9uKTtcbiAgICBpZiAoaWQgIT0gbnVsbCkgY3VycmVudEJ5RmllbGRJZC5zZXQoaWQsIHZhcmlhdGlvbik7XG4gIH1cblxuICBjb25zdCBtZW1iZXJzaGlwQ2hhbmdlZCA9ICFzYW1lRmllbGRNZW1iZXJzaGlwKFxuICAgIGN1cnJlbnRWYXJpYXRpb25zLFxuICAgIGRlc2lyZWRWYXJpYXRpb25zXG4gICk7XG4gIGxldCB2aXNpYmlsaXR5Q2hhbmdlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHZhcmlhdGlvbnMgPSAoZGVzaXJlZFZhcmlhdGlvbnMgfHwgW10pLm1hcCgoZGVzaXJlZCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkSWQgPSB2YXJpYXRpb25GaWVsZElkKGRlc2lyZWQpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBmaWVsZElkICE9IG51bGwgPyBjdXJyZW50QnlGaWVsZElkLmdldChmaWVsZElkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBkZXNpcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlZFNlbGVjdGFibGUgPVxuICAgICAgQXJyYXkuaXNBcnJheShkZXNpcmVkLnNlbGVjdGFibGVPcHRpb25zKSAmJlxuICAgICAgZGVzaXJlZC5zZWxlY3RhYmxlT3B0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgID8gZGVzaXJlZC5zZWxlY3RhYmxlT3B0aW9ucy5tYXAoKGRlc2lyZWRPcHRpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBvcHRpb25JZChkZXNpcmVkT3B0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb24gPSAoY3VycmVudC5zZWxlY3RhYmxlT3B0aW9ucyB8fCBbXSkuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbjogYW55KSA9PiBvcHRpb25JZChvcHRpb24pID09PSBpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY3VycmVudE9wdGlvbikgcmV0dXJuIGRlc2lyZWRPcHRpb247XG4gICAgICAgICAgICAvLyBEZXRlY3QgdmlzaWJpbGl0eSBkaWZmcyBhZ2FpbnN0IHRoZSBwcmV2aW91cyBmb3JtIHN0YXRlLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkZXNpcmVkT3B0aW9uLmlzVmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIGN1cnJlbnRPcHRpb24uaXNWaXNpYmxlICE9PSBkZXNpcmVkT3B0aW9uLmlzVmlzaWJsZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGVzaXJlZE9wdGlvbi5hdmFpbGFibGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICBjdXJyZW50T3B0aW9uLmF2YWlsYWJsZSAhPT0gZGVzaXJlZE9wdGlvbi5hdmFpbGFibGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2aXNpYmlsaXR5Q2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50T3B0aW9uLCAuLi5kZXNpcmVkT3B0aW9uIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBjdXJyZW50LnNlbGVjdGFibGVPcHRpb25zO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlc2lyZWQsXG4gICAgICB2YWx1ZTogY3VycmVudC52YWx1ZSxcbiAgICAgIHZhcmlhdGlvbkZpbGVzOiBjdXJyZW50LnZhcmlhdGlvbkZpbGVzID8/IGRlc2lyZWQudmFyaWF0aW9uRmlsZXMsXG4gICAgICB2YXJpYXRpb25GaWVsZDogcHJlZmVyVmFyaWF0aW9uRmllbGQoXG4gICAgICAgIGN1cnJlbnQudmFyaWF0aW9uRmllbGQsXG4gICAgICAgIGRlc2lyZWQudmFyaWF0aW9uRmllbGRcbiAgICAgICksXG4gICAgICBzZWxlY3RhYmxlT3B0aW9uczogbWVyZ2VkU2VsZWN0YWJsZSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHZhcmlhdGlvbnMsXG4gICAgbWVtYmVyc2hpcENoYW5nZWQsXG4gICAgdmlzaWJpbGl0eUNoYW5nZWQ6IHZpc2liaWxpdHlDaGFuZ2VkIHx8IG1lbWJlcnNoaXBDaGFuZ2VkLFxuICB9O1xufVxuXG4vKipcbiAqIEZpbHRlci9vcmRlciBwcm9kdWN0IGZpZWxkcyBieSBhIHZpc2libGUtaWQgc2V0IGFuZCByZXVzZSBjdXJyZW50IHZhbHVlc1xuICogd2hlbiBwcmVzZW50OyBvdGhlcndpc2UgdXNlIGBidWlsZEVtcHR5VmFyaWF0aW9uKGZpZWxkKWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyhcbiAgY3VycmVudFZhcmlhdGlvbnM6IGFueVtdIHwgdW5kZWZpbmVkLFxuICBwcm9kdWN0RmllbGRzOiBhbnlbXSB8IHVuZGVmaW5lZCxcbiAgdmlzaWJsZUZpZWxkSWRzOiBTZXQ8bnVtYmVyPixcbiAgYnVpbGRFbXB0eVZhcmlhdGlvbjogKGZpZWxkOiBhbnkpID0+IGFueVxuKTogYW55W10ge1xuICAvLyBXaXRob3V0IHByb2R1Y3QgZmllbGQgdGVtcGxhdGVzIHdlIGNhbm5vdCBtYXRlcmlhbGlzZSBnYXRlZCBmaWVsZHMg4oCUIGxlYXZlXG4gIC8vIHRoZSBjdXJyZW50IGxpc3QgYWxvbmUgcmF0aGVyIHRoYW4gd2lwaW5nIHRoZSBmb3JtLlxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvZHVjdEZpZWxkcykgfHwgcHJvZHVjdEZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY3VycmVudFZhcmlhdGlvbnMgfHwgW107XG4gIH1cblxuICBjb25zdCBjdXJyZW50QnlGaWVsZElkID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcbiAgZm9yIChjb25zdCB2YXJpYXRpb24gb2YgY3VycmVudFZhcmlhdGlvbnMgfHwgW10pIHtcbiAgICBjb25zdCBpZCA9IHZhcmlhdGlvbkZpZWxkSWQodmFyaWF0aW9uKTtcbiAgICBpZiAoaWQgIT0gbnVsbCkgY3VycmVudEJ5RmllbGRJZC5zZXQoaWQsIHZhcmlhdGlvbik7XG4gIH1cblxuICBjb25zdCBzb3J0ZWRGaWVsZHMgPSBbLi4ucHJvZHVjdEZpZWxkc10uc29ydChcbiAgICAoYSwgYikgPT4gKGE/LnBvc2l0aW9uIHx8IDApIC0gKGI/LnBvc2l0aW9uIHx8IDApXG4gICk7XG5cbiAgY29uc3QgZGVzaXJlZDogYW55W10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBzb3J0ZWRGaWVsZHMpIHtcbiAgICBjb25zdCBpZCA9IGZpZWxkPy5pZDtcbiAgICBpZiAoaWQgPT0gbnVsbCB8fCAhdmlzaWJsZUZpZWxkSWRzLmhhcyhOdW1iZXIoaWQpKSkgY29udGludWU7XG4gICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRCeUZpZWxkSWQuZ2V0KE51bWJlcihpZCkpO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICBkZXNpcmVkLnB1c2goY3VycmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc2lyZWQucHVzaChidWlsZEVtcHR5VmFyaWF0aW9uKGZpZWxkKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXNpcmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjdEZpZWxkVGVtcGxhdGVzQnlJZChwcm9kdWN0OiBhbnkpOiBNYXA8bnVtYmVyLCBhbnk+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcbiAgY29uc3QgYWRkID0gKGZpZWxkczogYW55W10gfCB1bmRlZmluZWQpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcyB8fCBbXSkge1xuICAgICAgaWYgKGZpZWxkPy5pZCAhPSBudWxsKSBtYXAuc2V0KE51bWJlcihmaWVsZC5pZCksIGZpZWxkKTtcbiAgICB9XG4gIH07XG4gIGFkZChwcm9kdWN0Py5ncm91cFZhcmlhdGlvbkZpZWxkcyk7XG4gIGFkZChwcm9kdWN0Py5pbmRlcGVuZGVudFZhcmlhdGlvbkZpZWxkcyk7XG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0RmllbGRzRm9yUHJpY2luZ0ZpZWxkcyhcbiAgcHJpY2luZ0ZpZWxkczogYW55W10gfCB1bmRlZmluZWQsXG4gIHByb2R1Y3Q6IGFueVxuKTogYW55W10gfCBudWxsIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHByaWNpbmdGaWVsZHMpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYnlJZCA9IHByb2R1Y3RGaWVsZFRlbXBsYXRlc0J5SWQocHJvZHVjdCk7XG4gIGlmIChieUlkLnNpemUgPT09IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gcHJpY2luZ0ZpZWxkc1xuICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZD8uaWQgIT0gbnVsbClcbiAgICAubWFwKChmaWVsZCkgPT4gYnlJZC5nZXQoTnVt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QUFJQyxNQUF5QixFQUFLO0lBQUEsSUFBQUMsVUFBQSxHQUFBdEUsMEJBQUEsQ0FDckJxRSxNQUFNLElBQUksRUFBRTtNQUFBRSxNQUFBO0lBQUE7TUFBaEMsS0FBQUQsVUFBQSxDQUFBcEUsQ0FBQSxNQUFBcUUsTUFBQSxHQUFBRCxVQUFBLENBQUFwRixDQUFBLElBQUFpQixJQUFBLEdBQWtDO1FBQUEsSUFBdkI0RCxLQUFLLEdBQUFRLE1BQUEsQ0FBQW5FLEtBQUE7UUFDZCxJQUFJLENBQUEyRCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWhGLEVBQUUsS0FBSSxJQUFJLEVBQUU4QyxHQUFHLENBQUN4QixHQUFHLENBQUNsQixNQUFNLENBQUM0RSxLQUFLLENBQUNoRixFQUFFLENBQUMsRUFBRWdGLEtBQUssQ0FBQztNQUN6RDtJQUFDLFNBQUF6RCxHQUFBO01BQUFnRSxVQUFBLENBQUEvRCxDQUFBLENBQUFELEdBQUE7SUFBQTtNQUFBZ0UsVUFBQSxDQUFBOUQsQ0FBQTtJQUFBO0VBQ0gsQ0FBQztFQUNENEQsR0FBRyxDQUFDRCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUssb0JBQW9CLENBQUM7RUFDbENKLEdBQUcsQ0FBQ0QsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVNLDBCQUEwQixDQUFDO0VBQ3hDLE9BQU81QyxHQUFHO0FBQ1o7QUFFQSxPQUFPLFNBQVM2Qyw2QkFBNkJBLENBQzNDQyxhQUFnQyxFQUNoQ1IsT0FBWSxFQUNFO0VBQ2QsSUFBSSxDQUFDeEUsS0FBSyxDQUFDQyxPQUFPLENBQUMrRSxhQUFhLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDOUMsSUFBTUMsSUFBSSxHQUFHVix5QkFBeUIsQ0FBQ0MsT0FBTyxDQUFDO0VBQy9DLElBQUlTLElBQUksQ0FBQ0MsSUFBSSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDaEMsT0FBT0YsYUFBYSxDQUNqQkcsTUFBTSxDQUFDLFVBQUNmLEtBQUs7SUFBQSxPQUFLLENBQUFBLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaEYsRUFBRSxLQUFJLElBQUk7RUFBQSxFQUFDLENBQ3BDOEMsR0FBRyxDQUFDLFVBQUNrQyxLQUFLO0lBQUEsT0FBS2EsSUFBSSxDQUFDL0QsR0FBRyxDQUFDMUIsTUFBTSxDQUFDNEUsS0FBSyxDQUFDaEYsRUFBRSxDQUFDLENBQUMsSUFBSWdGLEtBQUs7RUFBQSxFQUFDO0FBQ3hEIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,239 @@
1
+ import { buildDesiredVariationsFromFields, reconcileVariations, syncOptionVisibilityById, variationFieldId } from './reconcileVariations';
2
+ test('variationFieldId reads nested id', function () {
3
+ expect(variationFieldId({
4
+ variationField: {
5
+ id: 12
6
+ }
7
+ })).toBe(12);
8
+ expect(variationFieldId({})).toBeNull();
9
+ });
10
+ test('syncOptionVisibilityById matches by optionId not index', function () {
11
+ var current = [{
12
+ optionId: 10,
13
+ isVisible: true,
14
+ available: true
15
+ }, {
16
+ optionId: 20,
17
+ isVisible: true,
18
+ available: true
19
+ }];
20
+ var source = [{
21
+ optionId: 20,
22
+ isVisible: false,
23
+ available: false
24
+ }, {
25
+ optionId: 10,
26
+ isVisible: true,
27
+ available: true
28
+ }];
29
+ expect(syncOptionVisibilityById(current, source)).toBe(true);
30
+ expect(current[0]).toMatchObject({
31
+ optionId: 10,
32
+ isVisible: true,
33
+ available: true
34
+ });
35
+ expect(current[1]).toMatchObject({
36
+ optionId: 20,
37
+ isVisible: false,
38
+ available: false
39
+ });
40
+ });
41
+ test('reconcileVariations adds newly visible conditional fields', function () {
42
+ var current = [{
43
+ value: '1',
44
+ variationField: {
45
+ id: 1,
46
+ name: 'Size',
47
+ fieldType: 6,
48
+ selectedBy: []
49
+ },
50
+ selectableOptions: [{
51
+ optionId: 1,
52
+ isVisible: true
53
+ }]
54
+ }];
55
+ var desired = [{
56
+ value: '1',
57
+ variationField: {
58
+ id: 1,
59
+ name: 'Size',
60
+ fieldType: 6
61
+ },
62
+ selectableOptions: [{
63
+ optionId: 1,
64
+ isVisible: true
65
+ }],
66
+ unitCost: 2
67
+ }, {
68
+ value: '9',
69
+ variationField: {
70
+ id: 2,
71
+ name: 'Gated',
72
+ fieldType: 6
73
+ },
74
+ selectableOptions: [{
75
+ optionId: 9,
76
+ isVisible: true
77
+ }]
78
+ }];
79
+ var _reconcileVariations = reconcileVariations(current, desired),
80
+ variations = _reconcileVariations.variations,
81
+ membershipChanged = _reconcileVariations.membershipChanged,
82
+ visibilityChanged = _reconcileVariations.visibilityChanged;
83
+ expect(membershipChanged).toBe(true);
84
+ expect(visibilityChanged).toBe(true);
85
+ expect(variations).toHaveLength(2);
86
+ expect(variations[0].value).toBe('1');
87
+ expect(variations[0].unitCost).toBe(2);
88
+ // Preserve selectedBy from the form when the desired embed omits it.
89
+ expect(variations[0].variationField.selectedBy).toEqual([]);
90
+ expect(variations[1].variationField.id).toBe(2);
91
+ });
92
+ test('reconcileVariations removes fields that are no longer visible', function () {
93
+ var current = [{
94
+ value: '1',
95
+ variationField: {
96
+ id: 1,
97
+ fieldType: 6
98
+ }
99
+ }, {
100
+ value: '9',
101
+ variationField: {
102
+ id: 2,
103
+ fieldType: 6
104
+ }
105
+ }];
106
+ var desired = [{
107
+ value: '1',
108
+ variationField: {
109
+ id: 1,
110
+ fieldType: 6
111
+ }
112
+ }];
113
+ var _reconcileVariations2 = reconcileVariations(current, desired),
114
+ variations = _reconcileVariations2.variations,
115
+ membershipChanged = _reconcileVariations2.membershipChanged;
116
+ expect(membershipChanged).toBe(true);
117
+ expect(variations.map(function (v) {
118
+ return v.variationField.id;
119
+ })).toEqual([1]);
120
+ });
121
+ test('reconcileVariations detects option visibility changes without membership change', function () {
122
+ var current = [{
123
+ value: '1',
124
+ variationField: {
125
+ id: 1,
126
+ fieldType: 6
127
+ },
128
+ selectableOptions: [{
129
+ optionId: 1,
130
+ isVisible: true,
131
+ available: true
132
+ }]
133
+ }];
134
+ var desired = [{
135
+ value: '1',
136
+ variationField: {
137
+ id: 1,
138
+ fieldType: 6
139
+ },
140
+ selectableOptions: [{
141
+ optionId: 1,
142
+ isVisible: false,
143
+ available: true
144
+ }]
145
+ }];
146
+ var _reconcileVariations3 = reconcileVariations(current, desired),
147
+ membershipChanged = _reconcileVariations3.membershipChanged,
148
+ visibilityChanged = _reconcileVariations3.visibilityChanged,
149
+ variations = _reconcileVariations3.variations;
150
+ expect(membershipChanged).toBe(false);
151
+ expect(visibilityChanged).toBe(true);
152
+ expect(variations[0].selectableOptions[0].isVisible).toBe(false);
153
+ });
154
+ test('buildDesiredVariationsFromFields keeps current values and builds missing', function () {
155
+ var current = [{
156
+ value: 'picked',
157
+ variationField: {
158
+ id: 1,
159
+ position: 0
160
+ }
161
+ }];
162
+ var fields = [{
163
+ id: 2,
164
+ position: 1,
165
+ name: 'Gated'
166
+ }, {
167
+ id: 1,
168
+ position: 0,
169
+ name: 'Always'
170
+ }];
171
+ var desired = buildDesiredVariationsFromFields(current, fields, new Set([1, 2]), function (field) {
172
+ return {
173
+ value: 'default',
174
+ variationField: field
175
+ };
176
+ });
177
+ expect(desired).toHaveLength(2);
178
+ expect(desired[0].value).toBe('picked');
179
+ expect(desired[1].variationField.id).toBe(2);
180
+ expect(desired[1].value).toBe('default');
181
+ });
182
+ test('buildDesiredVariationsFromFields omits fields not in the visible set', function () {
183
+ var fields = [{
184
+ id: 1,
185
+ position: 0
186
+ }, {
187
+ id: 2,
188
+ position: 1
189
+ }];
190
+ var desired = buildDesiredVariationsFromFields([], fields, new Set([1]), function (field) {
191
+ return {
192
+ variationField: field
193
+ };
194
+ });
195
+ expect(desired.map(function (v) {
196
+ return v.variationField.id;
197
+ })).toEqual([1]);
198
+ });
199
+ test('buildDesiredVariationsFromFields can ignore independent fields in a group list', function () {
200
+ var fields = [{
201
+ id: 1,
202
+ position: 0,
203
+ independent: false
204
+ }, {
205
+ id: 356203,
206
+ position: 0,
207
+ independent: true,
208
+ name: 'Date required'
209
+ }, {
210
+ id: 2,
211
+ position: 1,
212
+ independent: false
213
+ }];
214
+ var desired = buildDesiredVariationsFromFields([], fields.filter(function (field) {
215
+ return field.independent !== true;
216
+ }), new Set([1, 2, 356203]), function (field) {
217
+ return {
218
+ variationField: field
219
+ };
220
+ });
221
+ expect(desired.map(function (v) {
222
+ return v.variationField.id;
223
+ })).toEqual([1, 2]);
224
+ });
225
+ test('buildDesiredVariationsFromFields keeps current when product fields missing', function () {
226
+ var current = [{
227
+ value: 'x',
228
+ variationField: {
229
+ id: 1
230
+ }
231
+ }];
232
+ expect(buildDesiredVariationsFromFields(current, undefined, new Set([1]), function () {
233
+ return {};
234
+ })).toBe(current);
235
+ expect(buildDesiredVariationsFromFields(current, [], new Set([1]), function () {
236
+ return {};
237
+ })).toBe(current);
238
+ });
239
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyIsInJlY29uY2lsZVZhcmlhdGlvbnMiLCJzeW5jT3B0aW9uVmlzaWJpbGl0eUJ5SWQiLCJ2YXJpYXRpb25GaWVsZElkIiwidGVzdCIsImV4cGVjdCIsInZhcmlhdGlvbkZpZWxkIiwiaWQiLCJ0b0JlIiwidG9CZU51bGwiLCJjdXJyZW50Iiwib3B0aW9uSWQiLCJpc1Zpc2libGUiLCJhdmFpbGFibGUiLCJzb3VyY2UiLCJ0b01hdGNoT2JqZWN0IiwidmFsdWUiLCJuYW1lIiwiZmllbGRUeXBlIiwic2VsZWN0ZWRCeSIsInNlbGVjdGFibGVPcHRpb25zIiwiZGVzaXJlZCIsInVuaXRDb3N0IiwiX3JlY29uY2lsZVZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zIiwibWVtYmVyc2hpcENoYW5nZWQiLCJ2aXNpYmlsaXR5Q2hhbmdlZCIsInRvSGF2ZUxlbmd0aCIsInRvRXF1YWwiLCJfcmVjb25jaWxlVmFyaWF0aW9uczIiLCJtYXAiLCJ2IiwiX3JlY29uY2lsZVZhcmlhdGlvbnMzIiwicG9zaXRpb24iLCJmaWVsZHMiLCJTZXQiLCJmaWVsZCIsImluZGVwZW5kZW50IiwiZmlsdGVyIiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JlY29uY2lsZVZhcmlhdGlvbnMudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyxcbiAgcmVjb25jaWxlVmFyaWF0aW9ucyxcbiAgc3luY09wdGlvblZpc2liaWxpdHlCeUlkLFxuICB2YXJpYXRpb25GaWVsZElkLFxufSBmcm9tICcuL3JlY29uY2lsZVZhcmlhdGlvbnMnO1xuXG50ZXN0KCd2YXJpYXRpb25GaWVsZElkIHJlYWRzIG5lc3RlZCBpZCcsICgpID0+IHtcbiAgZXhwZWN0KHZhcmlhdGlvbkZpZWxkSWQoeyB2YXJpYXRpb25GaWVsZDogeyBpZDogMTIgfSB9KSkudG9CZSgxMik7XG4gIGV4cGVjdCh2YXJpYXRpb25GaWVsZElkKHt9KSkudG9CZU51bGwoKTtcbn0pO1xuXG50ZXN0KCdzeW5jT3B0aW9uVmlzaWJpbGl0eUJ5SWQgbWF0Y2hlcyBieSBvcHRpb25JZCBub3QgaW5kZXgnLCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnQgPSBbXG4gICAgeyBvcHRpb25JZDogMTAsIGlzVmlzaWJsZTogdHJ1ZSwgYXZhaWxhYmxlOiB0cnVlIH0sXG4gICAgeyBvcHRpb25JZDogMjAsIGlzVmlzaWJsZTogdHJ1ZSwgYXZhaWxhYmxlOiB0cnVlIH0sXG4gIF07XG4gIGNvbnN0IHNvdXJjZSA9IFtcbiAgICB7IG9wdGlvbklkOiAyMCwgaXNWaXNpYmxlOiBmYWxzZSwgYXZhaWxhYmxlOiBmYWxzZSB9LFxuICAgIHsgb3B0aW9uSWQ6IDEwLCBpc1Zpc2libGU6IHRydWUsIGF2YWlsYWJsZTogdHJ1ZSB9LFxuICBdO1xuICBleHBlY3Qoc3luY09wdGlvblZpc2liaWxpdHlCeUlkKGN1cnJlbnQsIHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gIGV4cGVjdChjdXJyZW50WzBdKS50b01hdGNoT2JqZWN0KHsgb3B0aW9uSWQ6IDEwLCBpc1Zpc2libGU6IHRydWUsIGF2YWlsYWJsZTogdHJ1ZSB9KTtcbiAgZXhwZWN0KGN1cnJlbnRbMV0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgIG9wdGlvbklkOiAyMCxcbiAgICBpc1Zpc2libGU6IGZhbHNlLFxuICAgIGF2YWlsYWJsZTogZmFsc2UsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ3JlY29uY2lsZVZhcmlhdGlvbnMgYWRkcyBuZXdseSB2aXNpYmxlIGNvbmRpdGlvbmFsIGZpZWxkcycsICgpID0+IHtcbiAgY29uc3QgY3VycmVudCA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJzEnLFxuICAgICAgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDEsIG5hbWU6ICdTaXplJywgZmllbGRUeXBlOiA2LCBzZWxlY3RlZEJ5OiBbXSB9LFxuICAgICAgc2VsZWN0YWJsZU9wdGlvbnM6IFt7IG9wdGlvbklkOiAxLCBpc1Zpc2libGU6IHRydWUgfV0sXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgZGVzaXJlZCA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJzEnLFxuICAgICAgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDEsIG5hbWU6ICdTaXplJywgZmllbGRUeXBlOiA2IH0sXG4gICAgICBzZWxlY3RhYmxlT3B0aW9uczogW3sgb3B0aW9uSWQ6IDEsIGlzVmlzaWJsZTogdHJ1ZSB9XSxcbiAgICAgIHVuaXRDb3N0OiAyLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICc5JyxcbiAgICAgIHZhcmlhdGlvbkZpZWxkOiB7IGlkOiAyLCBuYW1lOiAnR2F0ZWQnLCBmaWVsZFR5cGU6IDYgfSxcbiAgICAgIHNlbGVjdGFibGVPcHRpb25zOiBbeyBvcHRpb25JZDogOSwgaXNWaXNpYmxlOiB0cnVlIH1dLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgeyB2YXJpYXRpb25zLCBtZW1iZXJzaGlwQ2hhbmdlZCwgdmlzaWJpbGl0eUNoYW5nZWQgfSA9XG4gICAgcmVjb25jaWxlVmFyaWF0aW9ucyhjdXJyZW50LCBkZXNpcmVkKTtcblxuICBleHBlY3QobWVtYmVyc2hpcENoYW5nZWQpLnRvQmUodHJ1ZSk7XG4gIGV4cGVjdCh2aXNpYmlsaXR5Q2hhbmdlZCkudG9CZSh0cnVlKTtcbiAgZXhwZWN0KHZhcmlhdGlvbnMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgZXhwZWN0KHZhcmlhdGlvbnNbMF0udmFsdWUpLnRvQmUoJzEnKTtcbiAgZXhwZWN0KHZhcmlhdGlvbnNbMF0udW5pdENvc3QpLnRvQmUoMik7XG4gIC8vIFByZXNlcnZlIHNlbGVjdGVkQnkgZnJvbSB0aGUgZm9ybSB3aGVuIHRoZSBkZXNpcmVkIGVtYmVkIG9taXRzIGl0LlxuICBleHBlY3QodmFyaWF0aW9uc1swXS52YXJpYXRpb25GaWVsZC5zZWxlY3RlZEJ5KS50b0VxdWFsKFtdKTtcbiAgZXhwZWN0KHZhcmlhdGlvbnNbMV0udmFyaWF0aW9uRmllbGQuaWQpLnRvQmUoMik7XG59KTtcblxudGVzdCgncmVjb25jaWxlVmFyaWF0aW9ucyByZW1vdmVzIGZpZWxkcyB0aGF0IGFyZSBubyBsb25nZXIgdmlzaWJsZScsICgpID0+IHtcbiAgY29uc3QgY3VycmVudCA9IFtcbiAgICB7IHZhbHVlOiAnMScsIHZhcmlhdGlvbkZpZWxkOiB7IGlkOiAxLCBmaWVsZFR5cGU6IDYgfSB9LFxuICAgIHsgdmFsdWU6ICc5JywgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDIsIGZpZWxkVHlwZTogNiB9IH0sXG4gIF07XG4gIGNvbnN0IGRlc2lyZWQgPSBbeyB2YWx1ZTogJzEnLCB2YXJpYXRpb25GaWVsZDogeyBpZDogMSwgZmllbGRUeXBlOiA2IH0gfV07XG4gIGNvbnN0IHsgdmFyaWF0aW9ucywgbWVtYmVyc2hpcENoYW5nZWQgfSA9IHJlY29uY2lsZVZhcmlhdGlvbnMoY3VycmVudCwgZGVzaXJlZCk7XG4gIGV4cGVjdChtZW1iZXJzaGlwQ2hhbmdlZCkudG9CZSh0cnVlKTtcbiAgZXhwZWN0KHZhcmlhdGlvbnMubWFwKCh2KSA9PiB2LnZhcmlhdGlvbkZpZWxkLmlkKSkudG9FcXVhbChbMV0pO1xufSk7XG5cbnRlc3QoJ3JlY29uY2lsZVZhcmlhdGlvbnMgZGV0ZWN0cyBvcHRpb24gdmlzaWJpbGl0eSBjaGFuZ2VzIHdpdGhvdXQgbWVtYmVyc2hpcCBjaGFuZ2UnLCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnQgPSBbXG4gICAge1xuICAgICAgdmFsdWU6ICcxJyxcbiAgICAgIHZhcmlhdGlvbkZpZWxkOiB7IGlkOiAxLCBmaWVsZFR5cGU6IDYgfSxcbiAgICAgIHNlbGVjdGFibGVPcHRpb25zOiBbeyBvcHRpb25JZDogMSwgaXNWaXNpYmxlOiB0cnVlLCBhdmFpbGFibGU6IHRydWUgfV0sXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgZGVzaXJlZCA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogJzEnLFxuICAgICAgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDEsIGZpZWxkVHlwZTogNiB9LFxuICAgICAgc2VsZWN0YWJsZU9wdGlvbnM6IFt7IG9wdGlvbklkOiAxLCBpc1Zpc2libGU6IGZhbHNlLCBhdmFpbGFibGU6IHRydWUgfV0sXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgeyBtZW1iZXJzaGlwQ2hhbmdlZCwgdmlzaWJpbGl0eUNoYW5nZWQsIHZhcmlhdGlvbnMgfSA9XG4gICAgcmVjb25jaWxlVmFyaWF0aW9ucyhjdXJyZW50LCBkZXNpcmVkKTtcbiAgZXhwZWN0KG1lbWJlcnNoaXBDaGFuZ2VkKS50b0JlKGZhbHNlKTtcbiAgZXhwZWN0KHZpc2liaWxpdHlDaGFuZ2VkKS50b0JlKHRydWUpO1xuICBleHBlY3QodmFyaWF0aW9uc1swXS5zZWxlY3RhYmxlT3B0aW9uc1swXS5pc1Zpc2libGUpLnRvQmUoZmFsc2UpO1xufSk7XG5cbnRlc3QoJ2J1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzIGtlZXBzIGN1cnJlbnQgdmFsdWVzIGFuZCBidWlsZHMgbWlzc2luZycsICgpID0+IHtcbiAgY29uc3QgY3VycmVudCA9IFtcbiAgICB7IHZhbHVlOiAncGlja2VkJywgdmFyaWF0aW9uRmllbGQ6IHsgaWQ6IDEsIHBvc2l0aW9uOiAwIH0gfSxcbiAgXTtcbiAgY29uc3QgZmllbGRzID0gW1xuICAgIHsgaWQ6IDIsIHBvc2l0aW9uOiAxLCBuYW1lOiAnR2F0ZWQnIH0sXG4gICAgeyBpZDogMSwgcG9zaXRpb246IDAsIG5hbWU6ICdBbHdheXMnIH0sXG4gIF07XG4gIGNvbnN0IGRlc2lyZWQgPSBidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyhcbiAgICBjdXJyZW50LFxuICAgIGZpZWxkcyxcbiAgICBuZXcgU2V0KFsxLCAyXSksXG4gICAgKGZpZWxkKSA9PiAoeyB2YWx1ZTogJ2RlZmF1bHQnLCB2YXJpYXRpb25GaWVsZDogZmllbGQgfSlcbiAgKTtcbiAgZXhwZWN0KGRlc2lyZWQpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgZXhwZWN0KGRlc2lyZWRbMF0udmFsdWUpLnRvQmUoJ3BpY2tlZCcpO1xuICBleHBlY3QoZGVzaXJlZFsxXS52YXJpYXRpb25GaWVsZC5pZCkudG9CZSgyKTtcbiAgZXhwZWN0KGRlc2lyZWRbMV0udmFsdWUpLnRvQmUoJ2RlZmF1bHQnKTtcbn0pO1xuXG50ZXN0KCdidWlsZERlc2lyZWRWYXJpYXRpb25zRnJvbUZpZWxkcyBvbWl0cyBmaWVsZHMgbm90IGluIHRoZSB2aXNpYmxlIHNldCcsICgpID0+IHtcbiAgY29uc3QgZmllbGRzID0gW1xuICAgIHsgaWQ6IDEsIHBvc2l0aW9uOiAwIH0sXG4gICAgeyBpZDogMiwgcG9zaXRpb246IDEgfSxcbiAgXTtcbiAgY29uc3QgZGVzaXJlZCA9IGJ1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzKFxuICAgIFtdLFxuICAgIGZpZWxkcyxcbiAgICBuZXcgU2V0KFsxXSksXG4gICAgKGZpZWxkKSA9PiAoeyB2YXJpYXRpb25GaWVsZDogZmllbGQgfSlcbiAgKTtcbiAgZXhwZWN0KGRlc2lyZWQubWFwKCh2KSA9PiB2LnZhcmlhdGlvbkZpZWxkLmlkKSkudG9FcXVhbChbMV0pO1xufSk7XG5cbnRlc3QoJ2J1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzIGNhbiBpZ25vcmUgaW5kZXBlbmRlbnQgZmllbGRzIGluIGEgZ3JvdXAgbGlzdCcsICgpID0+IHtcbiAgY29uc3QgZmllbGRzID0gW1xuICAgIHsgaWQ6IDEsIHBvc2l0aW9uOiAwLCBpbmRlcGVuZGVudDogZmFsc2UgfSxcbiAgICB7IGlkOiAzNTYyMDMsIHBvc2l0aW9uOiAwLCBpbmRlcGVuZGVudDogdHJ1ZSwgbmFtZTogJ0RhdGUgcmVxdWlyZWQnIH0sXG4gICAgeyBpZDogMiwgcG9zaXRpb246IDEsIGluZGVwZW5kZW50OiBmYWxzZSB9LFxuICBdO1xuICBjb25zdCBkZXNpcmVkID0gYnVpbGREZXNpcmVkVmFyaWF0aW9uc0Zyb21GaWVsZHMoXG4gICAgW10sXG4gICAgZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmluZGVwZW5kZW50ICE9PSB0cnVlKSxcbiAgICBuZXcgU2V0KFsxLCAyLCAzNTYyMDNdKSxcbiAgICAoZmllbGQpID0+ICh7IHZhcmlhdGlvbkZpZWxkOiBmaWVsZCB9KVxuICApO1xuICBleHBlY3QoZGVzaXJlZC5tYXAoKHYpID0+IHYudmFyaWF0aW9uRmllbGQuaWQpKS50b0VxdWFsKFsxLCAyXSk7XG59KTtcblxudGVzdCgnYnVpbGREZXNpcmVkVmFyaWF0aW9uc0Zyb21GaWVsZHMga2VlcHMgY3VycmVudCB3aGVuIHByb2R1Y3QgZmllbGRzIG1pc3NpbmcnLCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnQgPSBbeyB2YWx1ZTogJ3gnLCB2YXJpYXRpb25GaWVsZDogeyBpZDogMSB9IH1dO1xuICBleHBlY3QoXG4gICAgYnVpbGREZXNpcmVkVmFyaWF0aW9uc0Zyb21GaWVsZHMoY3VycmVudCwgdW5kZWZpbmVkLCBuZXcgU2V0KFsxXSksICgpID0+ICh7fSkpXG4gICkudG9CZShjdXJyZW50KTtcbiAgZXhwZWN0KFxuICAgIGJ1aWxkRGVzaXJlZFZhcmlhdGlvbnNGcm9tRmllbGRzKGN1cnJlbnQsIFtdLCBuZXcgU2V0KFsxXSksICgpID0+ICh7fSkpXG4gICkudG9CZShjdXJyZW50KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxnQ0FBZ0MsRUFDaENDLG1CQUFtQixFQUNuQkMsd0JBQXdCLEVBQ3hCQyxnQkFBZ0IsUUFDWCx1QkFBdUI7QUFFOUJDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxZQUFNO0VBQzdDQyxNQUFNLENBQUNGLGdCQUFnQixDQUFDO0lBQUVHLGNBQWMsRUFBRTtNQUFFQyxFQUFFLEVBQUU7SUFBRztFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDakVILE1BQU0sQ0FBQ0YsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTSxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRkwsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLFlBQU07RUFDbkUsSUFBTU0sT0FBTyxHQUFHLENBQ2Q7SUFBRUMsUUFBUSxFQUFFLEVBQUU7SUFBRUMsU0FBUyxFQUFFLElBQUk7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxFQUNsRDtJQUFFRixRQUFRLEVBQUUsRUFBRTtJQUFFQyxTQUFTLEVBQUUsSUFBSTtJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQ25EO0VBQ0QsSUFBTUMsTUFBTSxHQUFHLENBQ2I7SUFBRUgsUUFBUSxFQUFFLEVBQUU7SUFBRUMsU0FBUyxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQU0sQ0FBQyxFQUNwRDtJQUFFRixRQUFRLEVBQUUsRUFBRTtJQUFFQyxTQUFTLEVBQUUsSUFBSTtJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQ25EO0VBQ0RSLE1BQU0sQ0FBQ0gsd0JBQXdCLENBQUNRLE9BQU8sRUFBRUksTUFBTSxDQUFDLENBQUMsQ0FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQztFQUM1REgsTUFBTSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO0lBQUVKLFFBQVEsRUFBRSxFQUFFO0lBQUVDLFNBQVMsRUFBRSxJQUFJO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQztFQUNwRlIsTUFBTSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO0lBQy9CSixRQUFRLEVBQUUsRUFBRTtJQUNaQyxTQUFTLEVBQUUsS0FBSztJQUNoQkMsU0FBUyxFQUFFO0VBQ2IsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUZULElBQUksQ0FBQywyREFBMkQsRUFBRSxZQUFNO0VBQ3RFLElBQU1NLE9BQU8sR0FBRyxDQUNkO0lBQ0VNLEtBQUssRUFBRSxHQUFHO0lBQ1ZWLGNBQWMsRUFBRTtNQUFFQyxFQUFFLEVBQUUsQ0FBQztNQUFFVSxJQUFJLEVBQUUsTUFBTTtNQUFFQyxTQUFTLEVBQUUsQ0FBQztNQUFFQyxVQUFVLEVBQUU7SUFBRyxDQUFDO0lBQ3JFQyxpQkFBaUIsRUFBRSxDQUFDO01BQUVULFFBQVEsRUFBRSxDQUFDO01BQUVDLFNBQVMsRUFBRTtJQUFLLENBQUM7RUFDdEQsQ0FBQyxDQUNGO0VBQ0QsSUFBTVMsT0FBTyxHQUFHLENBQ2Q7SUFDRUwsS0FBSyxFQUFFLEdBQUc7SUFDVlYsY0FBYyxFQUFFO01BQUVDLEVBQUUsRUFBRSxDQUFDO01BQUVVLElBQUksRUFBRSxNQUFNO01BQUVDLFNBQVMsRUFBRTtJQUFFLENBQUM7SUFDckRFLGlCQUFpQixFQUFFLENBQUM7TUFBRVQsUUFBUSxFQUFFLENBQUM7TUFBRUMsU0FBUyxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBQ3JEVSxRQUFRLEVBQUU7RUFDWixDQUFDLEVBQ0Q7SUFDRU4sS0FBSyxFQUFFLEdBQUc7SUFDVlYsY0FBYyxFQUFFO01BQUVDLEVBQUUsRUFBRSxDQUFDO01BQUVVLElBQUksRUFBRSxPQUFPO01BQUVDLFNBQVMsRUFBRTtJQUFFLENBQUM7SUFDdERFLGlCQUFpQixFQUFFLENBQUM7TUFBRVQsUUFBUSxFQUFFLENBQUM7TUFBRUMsU0FBUyxFQUFFO0lBQUssQ0FBQztFQUN0RCxDQUFDLENBQ0Y7RUFFRCxJQUFBVyxvQkFBQSxHQUNFdEIsbUJBQW1CLENBQUNTLE9BQU8sRUFBRVcsT0FBTyxDQUFDO0lBRC9CRyxVQUFVLEdBQUFELG9CQUFBLENBQVZDLFVBQVU7SUFBRUMsaUJBQWlCLEdBQUFGLG9CQUFBLENBQWpCRSxpQkFBaUI7SUFBRUMsaUJBQWlCLEdBQUFILG9CQUFBLENBQWpCRyxpQkFBaUI7RUFHeERyQixNQUFNLENBQUNvQixpQkFBaUIsQ0FBQyxDQUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNwQ0gsTUFBTSxDQUFDcUIsaUJBQWlCLENBQUMsQ0FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDcENILE1BQU0sQ0FBQ21CLFVBQVUsQ0FBQyxDQUFDRyxZQUFZLENBQUMsQ0FBQyxDQUFDO0VBQ2xDdEIsTUFBTSxDQUFDbUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDUixLQUFLLENBQUMsQ0FBQ1IsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUNyQ0gsTUFBTSxDQUFDbUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDRixRQUFRLENBQUMsQ0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN0QztFQUNBSCxNQUFNLENBQUNtQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNsQixjQUFjLENBQUNhLFVBQVUsQ0FBQyxDQUFDUyxPQUFPLENBQUMsRUFBRSxDQUFDO0VBQzNEdkIsTUFBTSxDQUFDbUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDbEIsY0FBYyxDQUFDQyxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7QUFFRkosSUFBSSxDQUFDLCtEQUErRCxFQUFFLFlBQU07RUFDMUUsSUFBTU0sT0FBTyxHQUFHLENBQ2Q7SUFBRU0sS0FBSyxFQUFFLEdBQUc7SUFBRVYsY0FBYyxFQUFFO01BQUVDLEVBQUUsRUFBRSxDQUFDO01BQUVXLFNBQVMsRUFBRTtJQUFFO0VBQUUsQ0FBQyxFQUN2RDtJQUFFRixLQUFLLEVBQUUsR0FBRztJQUFFVixjQUFjLEVBQUU7TUFBRUMsRUFBRSxFQUFFLENBQUM7TUFBRVcsU0FBUyxFQUFFO0lBQUU7RUFBRSxDQUFDLENBQ3hEO0VBQ0QsSUFBTUcsT0FBTyxHQUFHLENBQUM7SUFBRUwsS0FBSyxFQUFFLEdBQUc7SUFBRVYsY0FBYyxFQUFFO01BQUVDLEVBQUUsRUFBRSxDQUFDO01BQUVXLFNBQVMsRUFBRTtJQUFFO0VBQUUsQ0FBQyxDQUFDO0VBQ3pFLElBQUFXLHFCQUFBLEdBQTBDNUIsbUJBQW1CLENBQUNTLE9BQU8sRUFBRVcsT0FBTyxDQUFDO0lBQXZFRyxVQUFVLEdBQUFLLHFCQUFBLENBQVZMLFVBQVU7SUFBRUMsaUJBQWlCLEdBQUFJLHFCQUFBLENBQWpCSixpQkFBaUI7RUFDckNwQixNQUFNLENBQUNvQixpQkFBaUIsQ0FBQyxDQUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNwQ0gsTUFBTSxDQUFDbUIsVUFBVSxDQUFDTSxHQUFHLENBQUMsVUFBQ0MsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBQ3pCLGNBQWMsQ0FBQ0MsRUFBRTtFQUFBLEVBQUMsQ0FBQyxDQUFDcUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyxDQUFDO0FBRUZ4QixJQUFJLENBQUMsaUZBQWlGLEVBQUUsWUFBTTtFQUM1RixJQUFNTSxPQUFPLEdBQUcsQ0FDZDtJQUNFTSxLQUFLLEVBQUUsR0FBRztJQUNWVixjQUFjLEVBQUU7TUFBRUMsRUFBRSxFQUFFLENBQUM7TUFBRVcsU0FBUyxFQUFFO0lBQUUsQ0FBQztJQUN2Q0UsaUJBQWlCLEVBQUUsQ0FBQztNQUFFVCxRQUFRLEVBQUUsQ0FBQztNQUFFQyxTQUFTLEVBQUUsSUFBSTtNQUFFQyxTQUFTLEVBQUU7SUFBSyxDQUFDO0VBQ3ZFLENBQUMsQ0FDRjtFQUNELElBQU1RLE9BQU8sR0FBRyxDQUNkO0lBQ0VMLEtBQUssRUFBRSxHQUFHO0lBQ1ZWLGNBQWMsRUFBRTtNQUFFQyxFQUFFLEVBQUUsQ0FBQztNQUFFVyxTQUFTLEVBQUU7SUFBRSxDQUFDO0lBQ3ZDRSxpQkFBaUIsRUFBRSxDQUFDO01BQUVULFFBQVEsRUFBRSxDQUFDO01BQUVDLFNBQVMsRUFBRSxLQUFLO01BQUVDLFNBQVMsRUFBRTtJQUFLLENBQUM7RUFDeEUsQ0FBQyxDQUNGO0VBQ0QsSUFBQW1CLHFCQUFBLEdBQ0UvQixtQkFBbUIsQ0FBQ1MsT0FBTyxFQUFFVyxPQUFPLENBQUM7SUFEL0JJLGlCQUFpQixHQUFBTyxxQkFBQSxDQUFqQlAsaUJBQWlCO0lBQUVDLGlCQUFpQixHQUFBTSxxQkFBQSxDQUFqQk4saUJBQWlCO0lBQUVGLFVBQVUsR0FBQVEscUJBQUEsQ0FBVlIsVUFBVTtFQUV4RG5CLE1BQU0sQ0FBQ29CLGlCQUFpQixDQUFDLENBQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3JDSCxNQUFNLENBQUNxQixpQkFBaUIsQ0FBQyxDQUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNwQ0gsTUFBTSxDQUFDbUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDSixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ1IsU0FBUyxDQUFDLENBQUNKLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUZKLElBQUksQ0FBQywwRUFBMEUsRUFBRSxZQUFNO0VBQ3JGLElBQU1NLE9BQU8sR0FBRyxDQUNkO0lBQUVNLEtBQUssRUFBRSxRQUFRO0lBQUVWLGNBQWMsRUFBRTtNQUFFQyxFQUFFLEVBQUUsQ0FBQztNQUFFMEIsUUFBUSxFQUFFO0lBQUU7RUFBRSxDQUFDLENBQzVEO0VBQ0QsSUFBTUMsTUFBTSxHQUFHLENBQ2I7SUFBRTNCLEVBQUUsRUFBRSxDQUFDO0lBQUUwQixRQUFRLEVBQUUsQ0FBQztJQUFFaEIsSUFBSSxFQUFFO0VBQVEsQ0FBQyxFQUNyQztJQUFFVixFQUFFLEVBQUUsQ0FBQztJQUFFMEIsUUFBUSxFQUFFLENBQUM7SUFBRWhCLElBQUksRUFBRTtFQUFTLENBQUMsQ0FDdkM7RUFDRCxJQUFNSSxPQUFPLEdBQUdyQixnQ0FBZ0MsQ0FDOUNVLE9BQU8sRUFDUHdCLE1BQU0sRUFDTixJQUFJQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDZixVQUFDQyxLQUFLO0lBQUEsT0FBTTtNQUFFcEIsS0FBSyxFQUFFLFNBQVM7TUFBRVYsY0FBYyxFQUFFOEI7SUFBTSxDQUFDO0VBQUEsQ0FDekQsQ0FBQztFQUNEL0IsTUFBTSxDQUFDZ0IsT0FBTyxDQUFDLENBQUNNLFlBQVksQ0FBQyxDQUFDLENBQUM7RUFDL0J0QixNQUFNLENBQUNnQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNMLEtBQUssQ0FBQyxDQUFDUixJQUFJLENBQUMsUUFBUSxDQUFDO0VBQ3ZDSCxNQUFNLENBQUNnQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNmLGNBQWMsQ0FBQ0MsRUFBRSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDNUNILE1BQU0sQ0FBQ2dCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ0wsS0FBSyxDQUFDLENBQUNSLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUZKLElBQUksQ0FBQyxzRUFBc0UsRUFBRSxZQUFNO0VBQ2pGLElBQU04QixNQUFNLEdBQUcsQ0FDYjtJQUFFM0IsRUFBRSxFQUFFLENBQUM7SUFBRTBCLFFBQVEsRUFBRTtFQUFFLENBQUMsRUFDdEI7SUFBRTFCLEVBQUUsRUFBRSxDQUFDO0lBQUUwQixRQUFRLEVBQUU7RUFBRSxDQUFDLENBQ3ZCO0VBQ0QsSUFBTVosT0FBTyxHQUFHckIsZ0NBQWdDLENBQzlDLEVBQUUsRUFDRmtDLE1BQU0sRUFDTixJQUFJQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNaLFVBQUNDLEtBQUs7SUFBQSxPQUFNO01BQUU5QixjQUFjLEVBQUU4QjtJQUFNLENBQUM7RUFBQSxDQUN2QyxDQUFDO0VBQ0QvQixNQUFNLENBQUNnQixPQUFPLENBQUNTLEdBQUcsQ0FBQyxVQUFDQyxDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFDekIsY0FBYyxDQUFDQyxFQUFFO0VBQUEsRUFBQyxDQUFDLENBQUNxQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFFRnhCLElBQUksQ0FBQyxnRkFBZ0YsRUFBRSxZQUFNO0VBQzNGLElBQU04QixNQUFNLEdBQUcsQ0FDYjtJQUFFM0IsRUFBRSxFQUFFLENBQUM7SUFBRTBCLFFBQVEsRUFBRSxDQUFDO0lBQUVJLFdBQVcsRUFBRTtFQUFNLENBQUMsRUFDMUM7SUFBRTlCLEVBQUUsRUFBRSxNQUFNO0lBQUUwQixRQUFRLEVBQUUsQ0FBQztJQUFFSSxXQUFXLEVBQUUsSUFBSTtJQUFFcEIsSUFBSSxFQUFFO0VBQWdCLENBQUMsRUFDckU7SUFBRVYsRUFBRSxFQUFFLENBQUM7SUFBRTBCLFFBQVEsRUFBRSxDQUFDO0lBQUVJLFdBQVcsRUFBRTtFQUFNLENBQUMsQ0FDM0M7RUFDRCxJQUFNaEIsT0FBTyxHQUFHckIsZ0NBQWdDLENBQzlDLEVBQUUsRUFDRmtDLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDLFVBQUNGLEtBQUs7SUFBQSxPQUFLQSxLQUFLLENBQUNDLFdBQVcsS0FBSyxJQUFJO0VBQUEsRUFBQyxFQUNwRCxJQUFJRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQ3ZCLFVBQUNDLEtBQUs7SUFBQSxPQUFNO01BQUU5QixjQUFjLEVBQUU4QjtJQUFNLENBQUM7RUFBQSxDQUN2QyxDQUFDO0VBQ0QvQixNQUFNLENBQUNnQixPQUFPLENBQUNTLEdBQUcsQ0FBQyxVQUFDQyxDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFDekIsY0FBYyxDQUFDQyxFQUFFO0VBQUEsRUFBQyxDQUFDLENBQUNxQixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyxDQUFDO0FBRUZ4QixJQUFJLENBQUMsNEVBQTRFLEVBQUUsWUFBTTtFQUN2RixJQUFNTSxPQUFPLEdBQUcsQ0FBQztJQUFFTSxLQUFLLEVBQUUsR0FBRztJQUFFVixjQUFjLEVBQUU7TUFBRUMsRUFBRSxFQUFFO0lBQUU7RUFBRSxDQUFDLENBQUM7RUFDM0RGLE1BQU0sQ0FDSkwsZ0NBQWdDLENBQUNVLE9BQU8sRUFBRTZCLFNBQVMsRUFBRSxJQUFJSixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQUEsT0FBTyxDQUFDLENBQUM7RUFBQSxDQUFDLENBQy9FLENBQUMsQ0FBQzNCLElBQUksQ0FBQ0UsT0FBTyxDQUFDO0VBQ2ZMLE1BQU0sQ0FDSkwsZ0NBQWdDLENBQUNVLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSXlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFBQSxPQUFPLENBQUMsQ0FBQztFQUFBLENBQUMsQ0FDeEUsQ0FBQyxDQUFDM0IsSUFBSSxDQUFDRSxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,6 @@
1
+ /** Derive label costs from currently selected options (not stale variation.unitCost). */
2
+ export declare function costsFromSelectedOptions(variation: any, selectedValue: any): {
3
+ onceOffCost: any;
4
+ unitCost: any;
5
+ currency: any;
6
+ };
@@ -0,0 +1,59 @@
1
+ import { FieldType } from './types';
2
+ function splitSelectedOptionIds(value) {
3
+ if (Array.isArray(value)) {
4
+ return value.map(String).filter(Boolean);
5
+ }
6
+ if (typeof value === 'string' && value) {
7
+ return value.split(',').map(function (id) {
8
+ return id.trim();
9
+ }).filter(Boolean);
10
+ }
11
+ return [];
12
+ }
13
+ function optionOnceOff(option) {
14
+ return parseFloat(option === null || option === void 0 ? void 0 : option.onceOffCost) || parseFloat(option === null || option === void 0 ? void 0 : option.variationCost) || 0;
15
+ }
16
+ function optionUnit(option) {
17
+ return parseFloat(option === null || option === void 0 ? void 0 : option.unitCost) || parseFloat(option === null || option === void 0 ? void 0 : option.variationUnitCost) || 0;
18
+ }
19
+
20
+ /** Derive label costs from currently selected options (not stale variation.unitCost). */
21
+ export function costsFromSelectedOptions(variation, selectedValue) {
22
+ var _variation$variationF, _variation$variationF2, _variation$variationF3;
23
+ var selectedIds = splitSelectedOptionIds(selectedValue);
24
+ var selectable = (variation === null || variation === void 0 ? void 0 : variation.selectableOptions) || [];
25
+ var selected = selectable.filter(function (option) {
26
+ return selectedIds.includes(String(option.optionId));
27
+ });
28
+ var fromExtractedSelectedOptions = false;
29
+
30
+ // Colour extract keeps live choices on selectedOptions (id, not optionId).
31
+ if (!selected.length && Array.isArray(variation === null || variation === void 0 ? void 0 : variation.selectedOptions)) {
32
+ selected = variation.selectedOptions.filter(function (option) {
33
+ var _option$id;
34
+ return selectedIds.includes(String((_option$id = option.id) !== null && _option$id !== void 0 ? _option$id : option.optionId));
35
+ });
36
+ fromExtractedSelectedOptions = selected.length > 0;
37
+ }
38
+ if (!selected.length) {
39
+ return {
40
+ onceOffCost: variation === null || variation === void 0 ? void 0 : variation.onceOffCost,
41
+ unitCost: variation === null || variation === void 0 ? void 0 : variation.unitCost,
42
+ currency: variation === null || variation === void 0 ? void 0 : variation.currency
43
+ };
44
+ }
45
+ var isColourExtract = Number(variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.fieldType) === FieldType.COLOUR_EXTRACT;
46
+ var includeFieldCosts = fromExtractedSelectedOptions || isColourExtract;
47
+ var fieldOnce = includeFieldCosts ? parseFloat(variation === null || variation === void 0 || (_variation$variationF2 = variation.variationField) === null || _variation$variationF2 === void 0 ? void 0 : _variation$variationF2.variationCost) || 0 : 0;
48
+ var fieldUnit = includeFieldCosts ? parseFloat(variation === null || variation === void 0 || (_variation$variationF3 = variation.variationField) === null || _variation$variationF3 === void 0 ? void 0 : _variation$variationF3.variationUnitCost) || 0 : 0;
49
+ return {
50
+ onceOffCost: fieldOnce + selected.reduce(function (sum, option) {
51
+ return sum + optionOnceOff(option);
52
+ }, 0),
53
+ unitCost: fieldUnit + selected.reduce(function (sum, option) {
54
+ return sum + optionUnit(option);
55
+ }, 0),
56
+ currency: selected[0].currency || (variation === null || variation === void 0 ? void 0 : variation.currency)
57
+ };
58
+ }
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFR5cGUiLCJzcGxpdFNlbGVjdGVkT3B0aW9uSWRzIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJTdHJpbmciLCJmaWx0ZXIiLCJCb29sZWFuIiwic3BsaXQiLCJpZCIsInRyaW0iLCJvcHRpb25PbmNlT2ZmIiwib3B0aW9uIiwicGFyc2VGbG9hdCIsIm9uY2VPZmZDb3N0IiwidmFyaWF0aW9uQ29zdCIsIm9wdGlvblVuaXQiLCJ1bml0Q29zdCIsInZhcmlhdGlvblVuaXRDb3N0IiwiY29zdHNGcm9tU2VsZWN0ZWRPcHRpb25zIiwidmFyaWF0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsIl92YXJpYXRpb24kdmFyaWF0aW9uRjIiLCJfdmFyaWF0aW9uJHZhcmlhdGlvbkYzIiwic2VsZWN0ZWRJZHMiLCJzZWxlY3RhYmxlIiwic2VsZWN0YWJsZU9wdGlvbnMiLCJzZWxlY3RlZCIsImluY2x1ZGVzIiwib3B0aW9uSWQiLCJmcm9tRXh0cmFjdGVkU2VsZWN0ZWRPcHRpb25zIiwibGVuZ3RoIiwic2VsZWN0ZWRPcHRpb25zIiwiX29wdGlvbiRpZCIsImN1cnJlbmN5IiwiaXNDb2xvdXJFeHRyYWN0IiwiTnVtYmVyIiwidmFyaWF0aW9uRmllbGQiLCJmaWVsZFR5cGUiLCJDT0xPVVJfRVhUUkFDVCIsImluY2x1ZGVGaWVsZENvc3RzIiwiZmllbGRPbmNlIiwiZmllbGRVbml0IiwicmVkdWNlIiwic3VtIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlbGVjdGVkVmFyaWF0aW9uQ29zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHNwbGl0U2VsZWN0ZWRPcHRpb25JZHModmFsdWU6IGFueSk6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChTdHJpbmcpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcCgoaWQpID0+IGlkLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uT25jZU9mZihvcHRpb246IGFueSk6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgcGFyc2VGbG9hdChvcHRpb24/Lm9uY2VPZmZDb3N0KSB8fFxuICAgIHBhcnNlRmxvYXQob3B0aW9uPy52YXJpYXRpb25Db3N0KSB8fFxuICAgIDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uVW5pdChvcHRpb246IGFueSk6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgcGFyc2VGbG9hdChvcHRpb24/LnVuaXRDb3N0KSB8fFxuICAgIHBhcnNlRmxvYXQob3B0aW9uPy52YXJpYXRpb25Vbml0Q29zdCkgfHxcbiAgICAwXG4gICk7XG59XG5cbi8qKiBEZXJpdmUgbGFiZWwgY29zdHMgZnJvbSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9ucyAobm90IHN0YWxlIHZhcmlhdGlvbi51bml0Q29zdCkuICovXG5leHBvcnQgZnVuY3Rpb24gY29zdHNGcm9tU2VsZWN0ZWRPcHRpb25zKHZhcmlhdGlvbjogYW55LCBzZWxlY3RlZFZhbHVlOiBhbnkpIHtcbiAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBzcGxpdFNlbGVjdGVkT3B0aW9uSWRzKHNlbGVjdGVkVmFsdWUpO1xuICBjb25zdCBzZWxlY3RhYmxlID0gdmFyaWF0aW9uPy5zZWxlY3RhYmxlT3B0aW9ucyB8fCBbXTtcbiAgbGV0IHNlbGVjdGVkID0gc2VsZWN0YWJsZS5maWx0ZXIoKG9wdGlvbjogYW55KSA9PlxuICAgIHNlbGVjdGVkSWRzLmluY2x1ZGVzKFN0cmluZyhvcHRpb24ub3B0aW9uSWQpKVxuICApO1xuICBsZXQgZnJvbUV4dHJhY3RlZFNlbGVjdGVkT3B0aW9ucyA9IGZhbHNlO1xuXG4gIC8vIENvbG91ciBleHRyYWN0IGtlZXBzIGxpdmUgY2hvaWNlcyBvbiBzZWxlY3RlZE9wdGlvbnMgKGlkLCBub3Qgb3B0aW9uSWQpLlxuICBpZiAoIXNlbGVjdGVkLmxlbmd0aCAmJiBBcnJheS5pc0FycmF5KHZhcmlhdGlvbj8uc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgIHNlbGVjdGVkID0gdmFyaWF0aW9uLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogYW55KSA9PlxuICAgICAgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoU3RyaW5nKG9wdGlvbi5pZCA/PyBvcHRpb24ub3B0aW9uSWQpKVxuICAgICk7XG4gICAgZnJvbUV4dHJhY3RlZFNlbGVjdGVkT3B0aW9ucyA9IHNlbGVjdGVkLmxlbmd0aCA+IDA7XG4gIH1cblxuICBpZiAoIXNlbGVjdGVkLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICBvbmNlT2ZmQ29zdDogdmFyaWF0aW9uPy5vbmNlT2ZmQ29zdCxcbiAgICAgIHVuaXRDb3N0OiB2YXJpYXRpb24/LnVuaXRDb3N0LFxuICAgICAgY3VycmVuY3k6IHZhcmlhdGlvbj8uY3VycmVuY3ksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGlzQ29sb3VyRXh0cmFjdCA9XG4gICAgTnVtYmVyKHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ/LmZpZWxkVHlwZSkgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVDtcbiAgY29uc3QgaW5jbHVkZUZpZWxkQ29zdHMgPSBmcm9tRXh0cmFjdGVkU2VsZWN0ZWRPcHRpb25zIHx8IGlzQ29sb3VyRXh0cmFjdDtcbiAgY29uc3QgZmllbGRPbmNlID0gaW5jbHVkZUZpZWxkQ29zdHNcbiAgICA/IHBhcnNlRmxvYXQodmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8udmFyaWF0aW9uQ29zdCkgfHwgMFxuICAgIDogMDtcbiAgY29uc3QgZmllbGRVbml0ID0gaW5jbHVkZUZpZWxkQ29zdHNcbiAgICA/IHBhcnNlRmxvYXQodmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8udmFyaWF0aW9uVW5pdENvc3QpIHx8IDBcbiAgICA6IDA7XG5cbiAgcmV0dXJuIHtcbiAgICBvbmNlT2ZmQ29zdDpcbiAgICAgIGZpZWxkT25jZSArXG4gICAgICBzZWxlY3RlZC5yZWR1Y2UoKHN1bTogbnVtYmVyLCBvcHRpb246IGFueSkgPT4gc3VtICsgb3B0aW9uT25jZU9mZihvcHRpb24pLCAwKSxcbiAgICB1bml0Q29zdDpcbiAgICAgIGZpZWxkVW5pdCArXG4gICAgICBzZWxlY3RlZC5yZWR1Y2UoKHN1bTogbnVtYmVyLCBvcHRpb246IGFueSkgPT4gc3VtICsgb3B0aW9uVW5pdChvcHRpb24pLCAwKSxcbiAgICBjdXJyZW5jeTogc2VsZWN0ZWRbMF0uY3VycmVuY3kgfHwgdmFyaWF0aW9uPy5jdXJyZW5jeSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxRQUFRLFNBQVM7QUFFbkMsU0FBU0Msc0JBQXNCQSxDQUFDQyxLQUFVLEVBQVk7RUFDcEQsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLEtBQUssQ0FBQyxFQUFFO0lBQ3hCLE9BQU9BLEtBQUssQ0FBQ0csR0FBRyxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFPLENBQUM7RUFDMUM7RUFDQSxJQUFJLE9BQU9OLEtBQUssS0FBSyxRQUFRLElBQUlBLEtBQUssRUFBRTtJQUN0QyxPQUFPQSxLQUFLLENBQUNPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0osR0FBRyxDQUFDLFVBQUNLLEVBQUU7TUFBQSxPQUFLQSxFQUFFLENBQUNDLElBQUksQ0FBQyxDQUFDO0lBQUEsRUFBQyxDQUFDSixNQUFNLENBQUNDLE9BQU8sQ0FBQztFQUNoRTtFQUNBLE9BQU8sRUFBRTtBQUNYO0FBRUEsU0FBU0ksYUFBYUEsQ0FBQ0MsTUFBVyxFQUFVO0VBQzFDLE9BQ0VDLFVBQVUsQ0FBQ0QsTUFBTSxhQUFOQSxNQUFNLHVCQUFO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