@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.
- package/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- 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+ICh7fSkpXG4gICkudG9CZShjdXJyZW50KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxnQ0FBZ0MsRUFDaENDLG1CQUFtQixFQUNuQkMsd0JBQXdCLEVBQ3hCQyxnQkFBZ0IsUUFDWCx1QkFBdUI7QUFFOUJDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxZQUFNO0VBQzdDQyxNQUFNLENBQUNGLGdCQUFnQixDQUFDO0lBQUVHLGNBQWMsRUFBRTtNQUFFQyxFQUFFLEVBQUU7SUFBRztFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDakVILE1BQU0sQ0FBQ0YsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTSxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFD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
|
|
@@ -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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
|