@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,82 @@
|
|
|
1
|
+
import { productMoqFloor } from './quantity';
|
|
2
|
+
import { productHasGroups } from './products';
|
|
3
|
+
function buildPriceMatrixFn() {
|
|
4
|
+
try {
|
|
5
|
+
var _ref = require('@merchi/sdk'),
|
|
6
|
+
pricing = _ref.pricing;
|
|
7
|
+
return typeof (pricing === null || pricing === void 0 ? void 0 : pricing.buildPriceMatrix) === 'function' ? pricing.buildPriceMatrix : null;
|
|
8
|
+
} catch (_unused) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Compact pricing-rules bundle from product JSON when the live bundle is absent. */
|
|
13
|
+
export function pricingRulesFromProduct(product) {
|
|
14
|
+
var _product$taxType;
|
|
15
|
+
var raw = (product === null || product === void 0 ? void 0 : product.unitPriceDiscountGroup) || (product === null || product === void 0 ? void 0 : product.discountGroup);
|
|
16
|
+
var discounts = ((raw === null || raw === void 0 ? void 0 : raw.discounts) || []).map(function (discount) {
|
|
17
|
+
return {
|
|
18
|
+
lowerLimit: Number(discount.lowerLimit),
|
|
19
|
+
amount: Number(discount.amount)
|
|
20
|
+
};
|
|
21
|
+
}).filter(function (discount) {
|
|
22
|
+
return Number.isFinite(discount.lowerLimit) && Number.isFinite(discount.amount);
|
|
23
|
+
});
|
|
24
|
+
if (!discounts.length) return null;
|
|
25
|
+
var minimumPrice = product === null || product === void 0 ? void 0 : product.minimumPrice;
|
|
26
|
+
return {
|
|
27
|
+
currency: (product === null || product === void 0 ? void 0 : product.currency) || 'AUD',
|
|
28
|
+
taxPercent: Number(product === null || product === void 0 || (_product$taxType = product.taxType) === null || _product$taxType === void 0 ? void 0 : _product$taxType.taxPercent) || 0,
|
|
29
|
+
product: {
|
|
30
|
+
unitPrice: Number(product === null || product === void 0 ? void 0 : product.unitPrice) || 0,
|
|
31
|
+
minimumPrice: minimumPrice == null || minimumPrice === '' ? null : Number(minimumPrice),
|
|
32
|
+
setupPrice: Number(product === null || product === void 0 ? void 0 : product.setupPrice) || 0,
|
|
33
|
+
setupPerGroup: Boolean(product === null || product === void 0 ? void 0 : product.setupPerGroup),
|
|
34
|
+
discountGroup: {
|
|
35
|
+
groupRestricted: Boolean(raw.groupRestricted),
|
|
36
|
+
discounts: discounts
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
fields: [],
|
|
40
|
+
groupFields: [],
|
|
41
|
+
hasGroups: false
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function resolvePricingRules(pricingRules, product) {
|
|
45
|
+
if (pricingRules && !pricingRules.unsupported) return pricingRules;
|
|
46
|
+
return pricingRulesFromProduct(product);
|
|
47
|
+
}
|
|
48
|
+
export function currentOrderQuantity(job, product) {
|
|
49
|
+
var hasGroups = productHasGroups(product);
|
|
50
|
+
if (hasGroups && Array.isArray(job === null || job === void 0 ? void 0 : job.variationsGroups)) {
|
|
51
|
+
return job.variationsGroups.reduce(function (sum, group) {
|
|
52
|
+
var n = Number(group === null || group === void 0 ? void 0 : group.quantity);
|
|
53
|
+
return sum + (Number.isFinite(n) ? n : 0);
|
|
54
|
+
}, 0);
|
|
55
|
+
}
|
|
56
|
+
var n = Number(job === null || job === void 0 ? void 0 : job.quantity);
|
|
57
|
+
return Number.isFinite(n) ? n : 0;
|
|
58
|
+
}
|
|
59
|
+
export function activeBandIndex(matrix, quantity) {
|
|
60
|
+
if (!matrix.bands.length || quantity < matrix.bands[0].quantity) return -1;
|
|
61
|
+
for (var i = matrix.bands.length - 1; i >= 0; i--) {
|
|
62
|
+
if (quantity >= matrix.bands[i].quantity) return i;
|
|
63
|
+
}
|
|
64
|
+
return -1;
|
|
65
|
+
}
|
|
66
|
+
/** Build or pass through a price table. No form context required. */
|
|
67
|
+
export function resolvePriceMatrix() {
|
|
68
|
+
var _options$matrix;
|
|
69
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
70
|
+
if ((_options$matrix = options.matrix) !== null && _options$matrix !== void 0 && (_options$matrix = _options$matrix.bands) !== null && _options$matrix !== void 0 && _options$matrix.length) return options.matrix;
|
|
71
|
+
var buildPriceMatrix = options.buildPriceMatrix || buildPriceMatrixFn();
|
|
72
|
+
if (!buildPriceMatrix) return null;
|
|
73
|
+
var rules = resolvePricingRules(options.rules, options.product);
|
|
74
|
+
if (!rules) return null;
|
|
75
|
+
var minQuantity = options.minQuantity != null ? options.minQuantity : productMoqFloor(options.product);
|
|
76
|
+
return buildPriceMatrix(rules, options.selections || {
|
|
77
|
+
fieldValues: {}
|
|
78
|
+
}, {
|
|
79
|
+
minQuantity: minQuantity
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9kdWN0TW9xRmxvb3IiLCJwcm9kdWN0SGFzR3JvdXBzIiwiYnVpbGRQcmljZU1hdHJpeEZuIiwiX3JlZiIsInJlcXVpcmUiLCJwcmljaW5nIiwiYnVpbGRQcmljZU1hdHJpeCIsIl91bnVzZWQiLCJwcmljaW5nUnVsZXNGcm9tUHJvZHVjdCIsInByb2R1Y3QiLCJfcHJvZHVjdCR0YXhUeXBlIiwicmF3IiwidW5pdFByaWNlRGlzY291bnRHcm91cCIsImRpc2NvdW50R3JvdXAiLCJkaXNjb3VudHMiLCJtYXAiLCJkaXNjb3VudCIsImxvd2VyTGltaXQiLCJOdW1iZXIiLCJhbW91bnQiLCJmaWx0ZXIiLCJpc0Zpbml0ZSIsImxlbmd0aCIsIm1pbmltdW1QcmljZSIsImN1cnJlbmN5IiwidGF4UGVyY2VudCIsInRheFR5cGUiLCJ1bml0UHJpY2UiLCJzZXR1cFByaWNlIiwic2V0dXBQZXJHcm91cCIsIkJvb2xlYW4iLCJncm91cFJlc3RyaWN0ZWQiLCJmaWVsZHMiLCJncm91cEZpZWxkcyIsImhhc0dyb3VwcyIsInJlc29sdmVQcmljaW5nUnVsZXMiLCJwcmljaW5nUnVsZXMiLCJ1bnN1cHBvcnRlZCIsImN1cnJlbnRPcmRlclF1YW50aXR5Iiwiam9iIiwiQXJyYXkiLCJpc0FycmF5IiwidmFyaWF0aW9uc0dyb3VwcyIsInJlZHVjZSIsInN1bSIsImdyb3VwIiwibiIsInF1YW50aXR5IiwiYWN0aXZlQmFuZEluZGV4IiwibWF0cml4IiwiYmFuZHMiLCJpIiwicmVzb2x2ZVByaWNlTWF0cml4IiwiX29wdGlvbnMkbWF0cml4Iiwib3B0aW9ucyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInJ1bGVzIiwibWluUXVhbnRpdHkiLCJzZWxlY3Rpb25zIiwiZmllbGRWYWx1ZXMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcHJpY2VNYXRyaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvZHVjdE1vcUZsb29yIH0gZnJvbSAnLi9xdWFudGl0eSc7XG5pbXBvcnQgeyBwcm9kdWN0SGFzR3JvdXBzIH0gZnJvbSAnLi9wcm9kdWN0cyc7XG5cbmZ1bmN0aW9uIGJ1aWxkUHJpY2VNYXRyaXhGbigpOlxuICB8ICgocnVsZXM6IGFueSwgc2VsZWN0aW9ucz86IGFueSwgb3B0aW9ucz86IGFueSkgPT4gUHJpY2VNYXRyaXhEYXRhIHwgbnVsbClcbiAgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHByaWNpbmcgfSA9IHJlcXVpcmUoJ0BtZXJjaGkvc2RrJykgYXMge1xuICAgICAgcHJpY2luZz86IHtcbiAgICAgICAgYnVpbGRQcmljZU1hdHJpeD86IChcbiAgICAgICAgICBydWxlczogYW55LFxuICAgICAgICAgIHNlbGVjdGlvbnM/OiBhbnksXG4gICAgICAgICAgb3B0aW9ucz86IGFueVxuICAgICAgICApID0+IFByaWNlTWF0cml4RGF0YSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIHR5cGVvZiBwcmljaW5nPy5idWlsZFByaWNlTWF0cml4ID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHByaWNpbmcuYnVpbGRQcmljZU1hdHJpeFxuICAgICAgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByaWNlTWF0cml4QmFuZCB7XG4gIHF1YW50aXR5OiBudW1iZXI7XG4gIHVwcGVyTGltaXQ6IG51bWJlciB8IG51bGw7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2VNYXRyaXhDZWxsIHtcbiAgcXVhbnRpdHk6IG51bWJlcjtcbiAgY29zdFBlclVuaXQ6IG51bWJlcjtcbiAgdW5pdFByaWNlOiBudW1iZXI7XG4gIGNvc3Q6IG51bWJlcjtcbiAgdGF4QW1vdW50OiBudW1iZXI7XG4gIHRvdGFsQ29zdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByaWNlTWF0cml4RGF0YSB7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIHRheFBlcmNlbnQ6IG51bWJlcjtcbiAgYmFuZHM6IFByaWNlTWF0cml4QmFuZFtdO1xuICBjZWxsczogUHJpY2VNYXRyaXhDZWxsW107XG59XG5cbmludGVyZmFjZSBQcmljaW5nUnVsZXNMaWtlIHtcbiAgdW5zdXBwb3J0ZWQ/OiBzdHJpbmc7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICB0YXhQZXJjZW50PzogbnVtYmVyO1xuICBwcm9kdWN0Pzoge1xuICAgIHVuaXRQcmljZT86IG51bWJlcjtcbiAgICBtaW5pbXVtUHJpY2U/OiBudW1iZXIgfCBudWxsO1xuICAgIHNldHVwUHJpY2U/OiBudW1iZXI7XG4gICAgc2V0dXBQZXJHcm91cD86IGJvb2xlYW47XG4gICAgZGlzY291bnRHcm91cD86IHsgZ3JvdXBSZXN0cmljdGVkPzogYm9vbGVhbjsgZGlzY291bnRzPzogYW55W10gfSB8IG51bGw7XG4gIH07XG4gIGZpZWxkcz86IGFueVtdO1xuICBncm91cEZpZWxkcz86IGFueVtdO1xuICBoYXNHcm91cHM/OiBib29sZWFuO1xufVxuXG4vKiogQ29tcGFjdCBwcmljaW5nLXJ1bGVzIGJ1bmRsZSBmcm9tIHByb2R1Y3QgSlNPTiB3aGVuIHRoZSBsaXZlIGJ1bmRsZSBpcyBhYnNlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpY2luZ1J1bGVzRnJvbVByb2R1Y3QocHJvZHVjdDogYW55KTogUHJpY2luZ1J1bGVzTGlrZSB8IG51bGwge1xuICBjb25zdCByYXcgPSBwcm9kdWN0Py51bml0UHJpY2VEaXNjb3VudEdyb3VwIHx8IHByb2R1Y3Q/LmRpc2NvdW50R3JvdXA7XG4gIGNvbnN0IGRpc2NvdW50cyA9IChyYXc/LmRpc2NvdW50cyB8fCBbXSlcbiAgICAubWFwKChkaXNjb3VudDogYW55KSA9PiAoe1xuICAgICAgbG93ZXJMaW1pdDogTnVtYmVyKGRpc2NvdW50Lmxvd2VyTGltaXQpLFxuICAgICAgYW1vdW50OiBOdW1iZXIoZGlzY291bnQuYW1vdW50KSxcbiAgICB9KSlcbiAgICAuZmlsdGVyKFxuICAgICAgKGRpc2NvdW50OiB7IGxvd2VyTGltaXQ6IG51bWJlcjsgYW1vdW50OiBudW1iZXIgfSkgPT5cbiAgICAgICAgTnVtYmVyLmlzRmluaXRlKGRpc2NvdW50Lmxvd2VyTGltaXQpICYmIE51bWJlci5pc0Zpbml0ZShkaXNjb3VudC5hbW91bnQpXG4gICAgKTtcbiAgaWYgKCFkaXNjb3VudHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbWluaW11bVByaWNlID0gcHJvZHVjdD8ubWluaW11bVByaWNlO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBwcm9kdWN0Py5jdXJyZW5jeSB8fCAnQVVEJyxcbiAgICB0YXhQZXJjZW50OiBOdW1iZXIocHJvZHVjdD8udGF4VHlwZT8udGF4UGVyY2VudCkgfHwgMCxcbiAgICBwcm9kdWN0OiB7XG4gICAgICB1bml0UHJpY2U6IE51bWJlcihwcm9kdWN0Py51bml0UHJpY2UpIHx8IDAsXG4gICAgICBtaW5pbXVtUHJpY2U6XG4gICAgICAgIG1pbmltdW1QcmljZSA9PSBudWxsIHx8IG1pbmltdW1QcmljZSA9PT0gJydcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IE51bWJlcihtaW5pbXVtUHJpY2UpLFxuICAgICAgc2V0dXBQcmljZTogTnVtYmVyKHByb2R1Y3Q/LnNldHVwUHJpY2UpIHx8IDAsXG4gICAgICBzZXR1cFBlckdyb3VwOiBCb29sZWFuKHByb2R1Y3Q/LnNldHVwUGVyR3JvdXApLFxuICAgICAgZGlzY291bnRHcm91cDoge1xuICAgICAgICBncm91cFJlc3RyaWN0ZWQ6IEJvb2xlYW4ocmF3Lmdyb3VwUmVzdHJpY3RlZCksXG4gICAgICAgIGRpc2NvdW50cyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGdyb3VwRmllbGRzOiBbXSxcbiAgICBoYXNHcm91cHM6IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVByaWNpbmdSdWxlcyhcbiAgcHJpY2luZ1J1bGVzOiBQcmljaW5nUnVsZXNMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcHJvZHVjdDogYW55XG4pOiBQcmljaW5nUnVsZXNMaWtlIHwgbnVsbCB7XG4gIGlmIChwcmljaW5nUnVsZXMgJiYgIXByaWNpbmdSdWxlcy51bnN1cHBvcnRlZCkgcmV0dXJuIHByaWNpbmdSdWxlcztcbiAgcmV0dXJuIHByaWNpbmdSdWxlc0Zyb21Qcm9kdWN0KHByb2R1Y3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudE9yZGVyUXVhbnRpdHkoam9iOiBhbnksIHByb2R1Y3Q6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGhhc0dyb3VwcyA9IHByb2R1Y3RIYXNHcm91cHMocHJvZHVjdCk7XG4gIGlmIChoYXNHcm91cHMgJiYgQXJyYXkuaXNBcnJheShqb2I/LnZhcmlhdGlvbnNHcm91cHMpKSB7XG4gICAgcmV0dXJuIGpvYi52YXJpYXRpb25zR3JvdXBzLnJlZHVjZSgoc3VtOiBudW1iZXIsIGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIoZ3JvdXA/LnF1YW50aXR5KTtcbiAgICAgIHJldHVybiBzdW0gKyAoTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IDApO1xuICAgIH0sIDApO1xuICB9XG4gIGNvbnN0IG4gPSBOdW1iZXIoam9iPy5xdWFudGl0eSk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2ZUJhbmRJbmRleChtYXRyaXg6IFByaWNlTWF0cml4RGF0YSwgcXVhbnRpdHk6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghbWF0cml4LmJhbmRzLmxlbmd0aCB8fCBxdWFudGl0eSA8IG1hdHJpeC5iYW5kc1swXS5xdWFudGl0eSkgcmV0dXJuIC0xO1xuICBmb3IgKGxldCBpID0gbWF0cml4LmJhbmRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHF1YW50aXR5ID49IG1hdHJpeC5iYW5kc1tpXS5xdWFudGl0eSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVQcmljZU1hdHJpeE9wdGlvbnMge1xuICBtYXRyaXg/OiBQcmljZU1hdHJpeERhdGEgfCBudWxsO1xuICBydWxlcz86IFByaWNpbmdSdWxlc0xpa2UgfCBudWxsO1xuICBwcm9kdWN0PzogYW55O1xuICBzZWxlY3Rpb25zPzogeyBxdWFudGl0eT86IG51bWJlcjsgZmllbGRWYWx1ZXM/OiBSZWNvcmQ8bnVtYmVyLCBhbnk+OyBncm91cHM/OiBhbnlbXSB9O1xuICBtaW5RdWFudGl0eT86IG51bWJlcjtcbiAgYnVpbGRQcmljZU1hdHJpeD86IChcbiAgICBydWxlczogYW55LFxuICAgIHNlbGVjdGlvbnM/OiBhbnksXG4gICAgb3B0aW9ucz86IGFueVxuICApID0+IFByaWNlTWF0cml4RGF0YSB8IG51bGw7XG59XG5cbi8qKiBCdWlsZCBvciBwYXNzIHRocm91Z2ggYSBwcmljZSB0YWJsZS4gTm8gZm9ybSBjb250ZXh0IHJlcXVpcmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQcmljZU1hdHJpeChcbiAgb3B0aW9uczogUmVzb2x2ZVByaWNlTWF0cml4T3B0aW9ucyA9IHt9XG4pOiBQcmljZU1hdHJpeERhdGEgfCBudWxsIHtcbiAgaWYgKG9wdGlvbnMubWF0cml4Py5iYW5kcz8ubGVuZ3RoKSByZXR1cm4gb3B0aW9ucy5tYXRyaXg7XG4gIGNvbnN0IGJ1aWxkUHJpY2VNYXRyaXggPSBvcHRpb25zLmJ1aWxkUHJpY2VNYXRyaXggfHwgYnVpbGRQcmljZU1hdHJpeEZuKCk7XG4gIGlmICghYnVpbGRQcmljZU1hdHJpeCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJ1bGVzID0gcmVzb2x2ZVByaWNpbmdSdWxlcyhvcHRpb25zLnJ1bGVzLCBvcHRpb25zLnByb2R1Y3QpO1xuICBpZiAoIXJ1bGVzKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbWluUXVhbnRpdHkgPVxuICAgIG9wdGlvbnMubWluUXVhbnRpdHkgIT0gbnVsbFxuICAgICAgPyBvcHRpb25zLm1pblF1YW50aXR5XG4gICAgICA6IHByb2R1Y3RNb3FGbG9vcihvcHRpb25zLnByb2R1Y3QpO1xuICByZXR1cm4gYnVpbGRQcmljZU1hdHJpeChcbiAgICBydWxlcyxcbiAgICBvcHRpb25zLnNlbGVjdGlvbnMgfHwgeyBmaWVsZFZhbHVlczoge30gfSxcbiAgICB7IG1pblF1YW50aXR5IH1cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZUFBZSxRQUFRLFlBQVk7QUFDNUMsU0FBU0MsZ0JBQWdCLFFBQVEsWUFBWTtBQUU3QyxTQUFTQyxrQkFBa0JBLENBQUEsRUFFbEI7RUFDUCxJQUFJO0lBQ0YsSUFBQUMsSUFBQSxHQUFvQkMsT0FBTyxDQUFDLGFBQWEsQ0FBQztNQUFsQ0MsT0FBTyxHQUFBRixJQUFBLENBQVBFLE9BQU87SUFTZixPQUFPLFFBQU9BLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFQyxnQkFBZ0IsTUFBSyxVQUFVLEdBQ2xERCxPQUFPLENBQUNDLGdCQUFnQixHQUN4QixJQUFJO0VBQ1YsQ0FBQyxDQUFDLE9BQUFDLE9BQUEsRUFBTTtJQUNOLE9BQU8sSUFBSTtFQUNiO0FBQ0Y7QUF3Q0E7QUFDQSxPQUFPLFNBQVNDLHVCQUF1QkEsQ0FBQ0MsT0FBWSxFQUEyQjtFQUFBLElBQUFDLGdCQUFBO0VBQzdFLElBQU1DLEdBQUcsR0FBRyxDQUFBRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUcsc0JBQXNCLE1BQUlILE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFSSxhQUFhO0VBQ3JFLElBQU1DLFNBQVMsR0FBRyxDQUFDLENBQUFILEdBQUcsYUFBSEEsR0FBRyx1QkFBSEEsR0FBRyxDQUFFRyxTQUFTLEtBQUksRUFBRSxFQUNwQ0MsR0FBRyxDQUFDLFVBQUNDLFFBQWE7SUFBQSxPQUFNO01BQ3ZCQyxVQUFVLEVBQUVDLE1BQU0s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
|
|
@@ -0,0 +1,200 @@
|
|
|
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 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; }
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
6
|
+
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); }
|
|
7
|
+
import { activeBandIndex, currentOrderQuantity, pricingRulesFromProduct, resolvePriceMatrix, resolvePricingRules } from './priceMatrix';
|
|
8
|
+
test('pricingRulesFromProduct maps unit-price discount groups', function () {
|
|
9
|
+
var rules = pricingRulesFromProduct({
|
|
10
|
+
currency: 'USD',
|
|
11
|
+
unitPrice: 12,
|
|
12
|
+
minimumPrice: 0,
|
|
13
|
+
setupPrice: 5,
|
|
14
|
+
setupPerGroup: true,
|
|
15
|
+
taxType: {
|
|
16
|
+
taxPercent: 10
|
|
17
|
+
},
|
|
18
|
+
unitPriceDiscountGroup: {
|
|
19
|
+
groupRestricted: true,
|
|
20
|
+
discounts: [{
|
|
21
|
+
lowerLimit: 50,
|
|
22
|
+
amount: 10
|
|
23
|
+
}, {
|
|
24
|
+
lowerLimit: 'nope',
|
|
25
|
+
amount: 5
|
|
26
|
+
}]
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
expect(rules).toMatchObject({
|
|
30
|
+
currency: 'USD',
|
|
31
|
+
taxPercent: 10,
|
|
32
|
+
product: {
|
|
33
|
+
unitPrice: 12,
|
|
34
|
+
minimumPrice: 0,
|
|
35
|
+
setupPrice: 5,
|
|
36
|
+
setupPerGroup: true,
|
|
37
|
+
discountGroup: {
|
|
38
|
+
groupRestricted: true,
|
|
39
|
+
discounts: [{
|
|
40
|
+
lowerLimit: 50,
|
|
41
|
+
amount: 10
|
|
42
|
+
}]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
test('pricingRulesFromProduct falls back to discountGroup and defaults', function () {
|
|
48
|
+
expect(pricingRulesFromProduct({})).toBeNull();
|
|
49
|
+
expect(pricingRulesFromProduct({
|
|
50
|
+
discountGroup: {
|
|
51
|
+
discounts: [{
|
|
52
|
+
lowerLimit: 10,
|
|
53
|
+
amount: 5
|
|
54
|
+
}]
|
|
55
|
+
}
|
|
56
|
+
})).toMatchObject({
|
|
57
|
+
currency: 'AUD',
|
|
58
|
+
taxPercent: 0,
|
|
59
|
+
product: {
|
|
60
|
+
unitPrice: 0,
|
|
61
|
+
minimumPrice: null,
|
|
62
|
+
setupPrice: 0
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
test('resolvePricingRules prefers a live bundle', function () {
|
|
67
|
+
var _resolvePricingRules;
|
|
68
|
+
var live = {
|
|
69
|
+
currency: 'NZD',
|
|
70
|
+
product: {
|
|
71
|
+
unitPrice: 1
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
expect(resolvePricingRules(live, {})).toBe(live);
|
|
75
|
+
expect(resolvePricingRules({
|
|
76
|
+
unsupported: 'group_buy'
|
|
77
|
+
}, {})).toBeNull();
|
|
78
|
+
expect((_resolvePricingRules = resolvePricingRules(null, {
|
|
79
|
+
unitPriceDiscountGroup: {
|
|
80
|
+
discounts: [{
|
|
81
|
+
lowerLimit: 5,
|
|
82
|
+
amount: 1
|
|
83
|
+
}]
|
|
84
|
+
}
|
|
85
|
+
})) === null || _resolvePricingRules === void 0 ? void 0 : _resolvePricingRules.currency).toBe('AUD');
|
|
86
|
+
});
|
|
87
|
+
test('currentOrderQuantity sums groups or reads job.quantity', function () {
|
|
88
|
+
expect(currentOrderQuantity({
|
|
89
|
+
variationsGroups: [{
|
|
90
|
+
quantity: 4
|
|
91
|
+
}, {
|
|
92
|
+
quantity: '6'
|
|
93
|
+
}, {
|
|
94
|
+
quantity: 'x'
|
|
95
|
+
}]
|
|
96
|
+
}, {
|
|
97
|
+
groupVariationFields: [{
|
|
98
|
+
id: 1
|
|
99
|
+
}]
|
|
100
|
+
})).toBe(10);
|
|
101
|
+
expect(currentOrderQuantity({
|
|
102
|
+
quantity: 7
|
|
103
|
+
}, {})).toBe(7);
|
|
104
|
+
expect(currentOrderQuantity({}, {})).toBe(0);
|
|
105
|
+
});
|
|
106
|
+
test('activeBandIndex highlights the highest matching break', function () {
|
|
107
|
+
var matrix = {
|
|
108
|
+
currency: 'AUD',
|
|
109
|
+
taxPercent: 0,
|
|
110
|
+
bands: [{
|
|
111
|
+
quantity: 1,
|
|
112
|
+
upperLimit: 49,
|
|
113
|
+
label: '1–49'
|
|
114
|
+
}, {
|
|
115
|
+
quantity: 50,
|
|
116
|
+
upperLimit: null,
|
|
117
|
+
label: '50+'
|
|
118
|
+
}],
|
|
119
|
+
cells: []
|
|
120
|
+
};
|
|
121
|
+
expect(activeBandIndex(matrix, 0)).toBe(-1);
|
|
122
|
+
expect(activeBandIndex(matrix, 1)).toBe(0);
|
|
123
|
+
expect(activeBandIndex(matrix, 49)).toBe(0);
|
|
124
|
+
expect(activeBandIndex(matrix, 50)).toBe(1);
|
|
125
|
+
expect(activeBandIndex(_objectSpread(_objectSpread({}, matrix), {}, {
|
|
126
|
+
bands: []
|
|
127
|
+
}), 10)).toBe(-1);
|
|
128
|
+
});
|
|
129
|
+
test('resolvePriceMatrix returns a provided matrix', function () {
|
|
130
|
+
var matrix = {
|
|
131
|
+
currency: 'AUD',
|
|
132
|
+
taxPercent: 10,
|
|
133
|
+
bands: [{
|
|
134
|
+
quantity: 1,
|
|
135
|
+
upperLimit: null,
|
|
136
|
+
label: '1+'
|
|
137
|
+
}],
|
|
138
|
+
cells: []
|
|
139
|
+
};
|
|
140
|
+
expect(resolvePriceMatrix({
|
|
141
|
+
matrix: matrix
|
|
142
|
+
})).toBe(matrix);
|
|
143
|
+
});
|
|
144
|
+
test('resolvePriceMatrix builds from a product discount group', function () {
|
|
145
|
+
var matrix = resolvePriceMatrix({
|
|
146
|
+
product: {
|
|
147
|
+
currency: 'AUD',
|
|
148
|
+
unitPrice: 10,
|
|
149
|
+
unitPriceDiscountGroup: {
|
|
150
|
+
discounts: [{
|
|
151
|
+
lowerLimit: 100,
|
|
152
|
+
amount: 10
|
|
153
|
+
}]
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
buildPriceMatrix: function buildPriceMatrix(rules) {
|
|
157
|
+
return {
|
|
158
|
+
currency: rules.currency,
|
|
159
|
+
taxPercent: rules.taxPercent,
|
|
160
|
+
bands: [{
|
|
161
|
+
quantity: 1,
|
|
162
|
+
upperLimit: 99,
|
|
163
|
+
label: '1–99'
|
|
164
|
+
}, {
|
|
165
|
+
quantity: 100,
|
|
166
|
+
upperLimit: null,
|
|
167
|
+
label: '100+'
|
|
168
|
+
}],
|
|
169
|
+
cells: [{
|
|
170
|
+
quantity: 1,
|
|
171
|
+
costPerUnit: 10,
|
|
172
|
+
unitPrice: 10,
|
|
173
|
+
cost: 10,
|
|
174
|
+
taxAmount: 0,
|
|
175
|
+
totalCost: 10
|
|
176
|
+
}, {
|
|
177
|
+
quantity: 100,
|
|
178
|
+
costPerUnit: 9,
|
|
179
|
+
unitPrice: 9,
|
|
180
|
+
cost: 900,
|
|
181
|
+
taxAmount: 0,
|
|
182
|
+
totalCost: 900
|
|
183
|
+
}]
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
expect(matrix === null || matrix === void 0 ? void 0 : matrix.bands.map(function (band) {
|
|
188
|
+
return band.quantity;
|
|
189
|
+
})).toEqual([1, 100]);
|
|
190
|
+
expect(matrix === null || matrix === void 0 ? void 0 : matrix.cells[1].costPerUnit).toBe(9);
|
|
191
|
+
});
|
|
192
|
+
test('resolvePriceMatrix returns null without breaks or a matrix', function () {
|
|
193
|
+
expect(resolvePriceMatrix({
|
|
194
|
+
product: {
|
|
195
|
+
unitPrice: 10
|
|
196
|
+
}
|
|
197
|
+
})).toBeNull();
|
|
198
|
+
expect(resolvePriceMatrix({})).toBeNull();
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3RpdmVCYW5kSW5kZXgiLCJjdXJyZW50T3JkZXJRdWFudGl0eSIsInByaWNpbmdSdWxlc0Zyb21Qcm9kdWN0IiwicmVzb2x2ZVByaWNlTWF0cml4IiwicmVzb2x2ZVByaWNpbmdSdWxlcyIsInRlc3QiLCJydWxlcyIsImN1cnJlbmN5IiwidW5pdFByaWNlIiwibWluaW11bVByaWNlIiwic2V0dXBQcmljZSIsInNldHVwUGVyR3JvdXAiLCJ0YXhUeXBlIiwidGF4UGVyY2VudCIsInVuaXRQcmljZURpc2NvdW50R3JvdXAiLCJncm91cFJlc3RyaWN0ZWQiLCJkaXNjb3VudHMiLCJsb3dlckxpbWl0IiwiYW1vdW50IiwiZXhwZWN0IiwidG9NYXRjaE9iamVjdCIsInByb2R1Y3QiLCJkaXNjb3VudEdyb3VwIiwidG9CZU51bGwiLCJfcmVzb2x2ZVByaWNpbmdSdWxlcyIsImxpdmUiLCJ0b0JlIiwidW5zdXBwb3J0ZWQiLCJ2YXJpYXRpb25zR3JvdXBzIiwicXVhbnRpdHkiLCJncm91cFZhcmlhdGlvbkZpZWxkcyIsImlkIiwibWF0cml4IiwiYmFuZHMiLCJ1cHBlckxpbWl0IiwibGFiZWwiLCJjZWxscyIsIl9vYmplY3RTcHJlYWQiLCJidWlsZFByaWNlTWF0cml4IiwiY29zdFBlclVuaXQiLCJjb3N0IiwidGF4QW1vdW50IiwidG90YWxDb3N0IiwibWFwIiwiYmFuZCIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcHJpY2VNYXRyaXgudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhY3RpdmVCYW5kSW5kZXgsXG4gIGN1cnJlbnRPcmRlclF1YW50aXR5LFxuICBwcmljaW5nUnVsZXNGcm9tUHJvZHVjdCxcbiAgcmVzb2x2ZVByaWNlTWF0cml4LFxuICByZXNvbHZlUHJpY2luZ1J1bGVzLFxufSBmcm9tICcuL3ByaWNlTWF0cml4JztcblxudGVzdCgncHJpY2luZ1J1bGVzRnJvbVByb2R1Y3QgbWFwcyB1bml0LXByaWNlIGRpc2NvdW50IGdyb3VwcycsICgpID0+IHtcbiAgY29uc3QgcnVsZXMgPSBwcmljaW5nUnVsZXNGcm9tUHJvZHVjdCh7XG4gICAgY3VycmVuY3k6ICdVU0QnLFxuICAgIHVuaXRQcmljZTogMTIsXG4gICAgbWluaW11bVByaWNlOiAwLFxuICAgIHNldHVwUHJpY2U6IDUsXG4gICAgc2V0dXBQZXJHcm91cDogdHJ1ZSxcbiAgICB0YXhUeXBlOiB7IHRheFBlcmNlbnQ6IDEwIH0sXG4gICAgdW5pdFByaWNlRGlzY291bnRHcm91cDoge1xuICAgICAgZ3JvdXBSZXN0cmljdGVkOiB0cnVlLFxuICAgICAgZGlzY291bnRzOiBbXG4gICAgICAgIHsgbG93ZXJMaW1pdDogNTAsIGFtb3VudDogMTAgfSxcbiAgICAgICAgeyBsb3dlckxpbWl0OiAnbm9wZScsIGFtb3VudDogNSB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcbiAgZXhwZWN0KHJ1bGVzKS50b01hdGNoT2JqZWN0KHtcbiAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgdGF4UGVyY2VudDogMTAsXG4gICAgcHJvZHVjdDoge1xuICAgICAgdW5pdFByaWNlOiAxMixcbiAgICAgIG1pbmltdW1QcmljZTogMCxcbiAgICAgIHNldHVwUHJpY2U6IDUsXG4gICAgICBzZXR1cFBlckdyb3VwOiB0cnVlLFxuICAgICAgZGlzY291bnRHcm91cDoge1xuICAgICAgICBncm91cFJlc3RyaWN0ZWQ6IHRydWUsXG4gICAgICAgIGRpc2NvdW50czogW3sgbG93ZXJMaW1pdDogNTAsIGFtb3VudDogMTAgfV0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbnRlc3QoJ3ByaWNpbmdSdWxlc0Zyb21Qcm9kdWN0IGZhbGxzIGJhY2sgdG8gZGlzY291bnRHcm91cCBhbmQgZGVmYXVsdHMnLCAoKSA9PiB7XG4gIGV4cGVjdChwcmljaW5nUnVsZXNGcm9tUHJvZHVjdCh7fSkpLnRvQmVOdWxsKCk7XG4gIGV4cGVjdChcbiAgICBwcmljaW5nUnVsZXNGcm9tUHJvZHVjdCh7XG4gICAgICBkaXNjb3VudEdyb3VwOiB7IGRpc2NvdW50czogW3sgbG93ZXJMaW1pdDogMTAsIGFtb3VudDogNSB9XSB9LFxuICAgIH0pXG4gICkudG9NYXRjaE9iamVjdCh7XG4gICAgY3VycmVuY3k6ICdBVUQnLFxuICAgIHRheFBlcmNlbnQ6IDAsXG4gICAgcHJvZHVjdDogeyB1bml0UHJpY2U6IDAsIG1pbmltdW1QcmljZTogbnVsbCwgc2V0dXBQcmljZTogMCB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KCdyZXNvbHZlUHJpY2luZ1J1bGVzIHByZWZlcnMgYSBsaXZlIGJ1bmRsZScsICgpID0+IHtcbiAgY29uc3QgbGl2ZSA9IHsgY3VycmVuY3k6ICdOWkQnLCBwcm9kdWN0OiB7IHVuaXRQcmljZTogMSB9IH07XG4gIGV4cGVjdChyZXNvbHZlUHJpY2luZ1J1bGVzKGxpdmUsIHt9KSkudG9CZShsaXZlKTtcbiAgZXhwZWN0KHJlc29sdmVQcmljaW5nUnVsZXMoeyB1bnN1cHBvcnRlZDogJ2dyb3VwX2J1eScgfSwge30pKS50b0JlTnVsbCgpO1xuICBleHBlY3QoXG4gICAgcmVzb2x2ZVByaWNpbmdSdWxlcyhudWxsLCB7XG4gICAgICB1bml0UHJpY2VEaXNjb3VudEdyb3VwOiB7IGRpc2NvdW50czogW3sgbG93ZXJMaW1pdDogNSwgYW1vdW50OiAxIH1dIH0sXG4gICAgfSk/LmN1cnJlbmN5XG4gICkudG9CZSgnQVVEJyk7XG59KTtcblxudGVzdCgnY3VycmVudE9yZGVyUXVhbnRpdHkgc3VtcyBncm91cHMgb3IgcmVhZHMgam9iLnF1YW50aXR5JywgKCkgPT4ge1xuICBleHBlY3QoXG4gICAgY3VycmVudE9yZGVyUXVhbnRpdHkoXG4gICAgICB7IHZhcmlhdGlvbnNHcm91cHM6IFt7IHF1YW50aXR5OiA0IH0sIHsgcXVhbnRpdHk6ICc2JyB9LCB7IHF1YW50aXR5OiAneCcgfV0gfSxcbiAgICAgIHsgZ3JvdXBWYXJpYXRpb25GaWVsZHM6IFt7IGlkOiAxIH1dIH1cbiAgICApXG4gICkudG9CZSgxMCk7XG4gIGV4cGVjdChjdXJyZW50T3JkZXJRdWFudGl0eSh7IHF1YW50aXR5OiA3IH0sIHt9KSkudG9CZSg3KTtcbiAgZXhwZWN0KGN1cnJlbnRPcmRlclF1YW50aXR5KHt9LCB7fSkpLnRvQmUoMCk7XG59KTtcblxudGVzdCgnYWN0aXZlQmFuZEluZGV4IGhpZ2hsaWdodHMgdGhlIGhpZ2hlc3QgbWF0Y2hpbmcgYnJlYWsnLCAoKSA9PiB7XG4gIGNvbnN0IG1hdHJpeCA9IHtcbiAgICBjdXJyZW5jeTogJ0FVRCcsXG4gICAgdGF4UGVyY2VudDogMCxcbiAgICBiYW5kczogW1xuICAgICAgeyBxdWFudGl0eTogMSwgdXBwZXJMaW1pdDogNDksIGxhYmVsOiAnMeKAkzQ5JyB9LFxuICAgICAgeyBxdWFudGl0eTogNTAsIHVwcGVyTGltaXQ6IG51bGwsIGxhYmVsOiAnNTArJyB9LFxuICAgIF0sXG4gICAgY2VsbHM6IFtdLFxuICB9O1xuICBleHBlY3QoYWN0aXZlQmFuZEluZGV4KG1hdHJpeCwgMCkpLnRvQmUoLTEpO1xuICBleHBlY3QoYWN0aXZlQmFuZEluZGV4KG1hdHJpeCwgMSkpLnRvQmUoMCk7XG4gIGV4cGVjdChhY3RpdmVCYW5kSW5kZXgobWF0cml4LCA0OSkpLnRvQmUoMCk7XG4gIGV4cGVjdChhY3RpdmVCYW5kSW5kZXgobWF0cml4LCA1MCkpLnRvQmUoMSk7XG4gIGV4cGVjdChhY3RpdmVCYW5kSW5kZXgoeyAuLi5tYXRyaXgsIGJhbmRzOiBbXSB9LCAxMCkpLnRvQmUoLTEpO1xufSk7XG5cbnRlc3QoJ3Jlc29sdmVQcmljZU1hdHJpeCByZXR1cm5zIGEgcHJvdmlkZWQgbWF0cml4JywgKCkgPT4ge1xuICBjb25zdCBtYXRyaXggPSB7XG4gICAgY3VycmVuY3k6ICdBVUQnLFxuICAgIHRheFBlcmNlbnQ6IDEwLFxuICAgIGJhbmRzOiBbeyBxdWFudGl0eTogMSwgdXBwZXJMaW1pdDogbnVsbCwgbGFiZWw6ICcxKycgfV0sXG4gICAgY2VsbHM6IFtdLFxuICB9O1xuICBleHBlY3QocmVzb2x2ZVByaWNlTWF0cml4KHsgbWF0cml4IH0pKS50b0JlKG1hdHJpeCk7XG59KTtcblxudGVzdCgncmVzb2x2ZVByaWNlTWF0cml4IGJ1aWxkcyBmcm9tIGEgcHJvZHVjdCBkaXNjb3VudCBncm91cCcsICgpID0+IHtcbiAgY29uc3QgbWF0cml4ID0gcmVzb2x2ZVByaWNlTWF0cml4KHtcbiAgICBwcm9kdWN0OiB7XG4gICAgICBjdXJyZW5jeTogJ0FVRCcsXG4gICAgICB1bml0UHJpY2U6IDEwLFxuICAgICAgdW5pdFByaWNlRGlzY291bnRHcm91cDoge1xuICAgICAgICBkaXNjb3VudHM6IFt7IGxvd2VyTGltaXQ6IDEwMCwgYW1vdW50OiAxMCB9XSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBidWlsZFByaWNlTWF0cml4OiAocnVsZXMpID0+ICh7XG4gICAgICBjdXJyZW5jeTogcnVsZXMuY3VycmVuY3ksXG4gICAgICB0YXhQZXJjZW50OiBydWxlcy50YXhQZXJjZW50LFxuICAgICAgYmFuZHM6IFtcbiAgICAgICAgeyBxdWFudGl0eTogMSwgdXBwZXJMaW1pdDogOTksIGxhYmVsOiAnMeKAkzk5JyB9LFxuICAgICAgICB7IHF1YW50aXR5OiAxMDAsIHVwcGVyTGltaXQ6IG51bGwsIGxhYmVsOiAnMTAwKycgfSxcbiAgICAgIF0sXG4gICAgICBjZWxsczogW1xuICAgICAgICB7IHF1YW50aXR5OiAxLCBjb3N0UGVyVW5pdDogMTAsIHVuaXRQcmljZTogMTAsIGNvc3Q6IDEwLCB0YXhBbW91bnQ6IDAsIHRvdGFsQ29zdDogMTAgfSxcbiAgICAgICAgeyBxdWFudGl0eTogMTAwLCBjb3N0UGVyVW5pdDogOSwgdW5pdFByaWNlOiA5LCBjb3N0OiA5MDAsIHRheEFtb3VudDogMCwgdG90YWxDb3N0OiA5MDAgfSxcbiAgICAgIF0sXG4gICAgfSksXG4gIH0pO1xuICBleHBlY3QobWF0cml4Py5iYW5kcy5tYXAoKGJhbmQpID0+IGJhbmQucXVhbnRpdHkpKS50b0VxdWFsKFsxLCAxMDBdKTtcbiAgZXhwZWN0KG1hdHJpeD8uY2VsbHNbMV0uY29zdFBlclVuaXQpLnRvQmUoOSk7XG59KTtcblxudGVzdCgncmVzb2x2ZVByaWNlTWF0cml4IHJldHVybnMgbnVsbCB3aXRob3V0IGJyZWFrcyBvciBhIG1hdHJpeCcsICgpID0+IHtcbiAgZXhwZWN0KHJlc29sdmVQcmljZU1hdHJpeCh7IHByb2R1Y3Q6IHsgdW5pdFByaWNlOiAxMCB9IH0pKS50b0JlTnVsbCgpO1xuICBleHBlY3QocmVzb2x2ZVByaWNlTWF0cml4KHt9KSkudG9CZU51bGwoKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUNFQSxlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQkMsdUJBQXVCLEVBQ3ZCQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixRQUNkLGVBQWU7QUFFdEJDLElBQUksQ0FBQyx5REFBeUQsRUFBRSxZQUFNO0VBQ3BFLElBQU1DLEtBQUssR0FBR0osdUJBQXVCLENBQUM7SUFDcENLLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLFNBQVMsRUFBRSxFQUFFO0lBQ2JDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFVBQVUsRUFBRSxDQUFDO0lBQ2JDLGFBQWEsRUFBRSxJQUFJO0lBQ25CQyxPQUFPLEVBQUU7TUFBRUMsVUFBVSxFQUFFO0lBQUcsQ0FBQztJQUMzQkMsc0JBQXNCLEVBQUU7TUFDdEJDLGVBQWUsRUFBRSxJQUFJO01BQ3JCQyxTQUFTLEVBQUUsQ0FDVDtRQUFFQyxVQUFVLEVBQUUsRUFBRTtRQUFFQyxNQUFNLEVBQUU7TUFBRyxDQUFDLEVBQzlCO1FBQUVELFVBQVUsRUFBRSxNQUFNO1FBQUVDLE1BQU0sRUFBRTtNQUFFLENBQUM7SUFFckM7RUFDRixDQUFDLENBQUM7RUFDRkMsTUFBTSxDQUFDYixLQUFLLENBQUMsQ0FBQ2MsYUFBYSxDQUFDO0lBQzFCYixRQUFRLEVBQUUsS0FBSztJQUNmTSxVQUFVLEVBQUUsRUFBRTtJQUNkUSxPQUFPLEVBQUU7TUFDUGIsU0FBUyxFQUFFLEVBQUU7TUFDYkMsWUFBWSxFQUFFLENBQUM7TUFDZkMsVUFBVSxFQUFFLENBQUM7TUFDYkMsYUFBYSxFQUFFLElBQUk7TUFDbkJXLGFBQWEsRUFBRTtRQUNiUCxlQUFlLEVBQUUsSUFBSTtRQUNyQkMsU0FBUyxFQUFFLENBQUM7VUFBRUMsVUFBVSxFQUFFLEVBQUU7VUFBRUMsTUFBTSxFQUFFO1FBQUcsQ0FBQztNQUM1QztJQUNGO0VBQ0YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUZiLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxZQUFNO0VBQzdFYyxNQUFNLENBQUNqQix1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNxQixRQUFRLENBQUMsQ0FBQztFQUM5Q0osTUFBTSxDQUNKakIsdUJBQXVCLENBQUM7SUFDdEJvQixhQUFhLEVBQUU7TUFBRU4sU0FBUyxFQUFFLENBQUM7UUFBRUMsVUFBVSxFQUFFLEVBQUU7UUFBRUMsTUFBTSxFQUFFO01BQUUsQ0FBQztJQUFFO0VBQzlELENBQUMsQ0FDSCxDQUFDLENBQUNFLGFBQWEsQ0FBQztJQUNkYixRQUFRLEVBQUUsS0FBSztJQUNmTSxVQUFVLEVBQUUsQ0FBQztJQUNiUSxPQUFPLEVBQUU7TUFBRWIsU0FBUyxFQUFFLENBQUM7TUFBRUMsWUFBWSxFQUFFLElBQUk7TUFBRUMsVUFBVSxFQUFFO0lBQUU7RUFDN0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUZMLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxZQUFNO0VBQUEsSUFBQW1CLG9CQUFBO0VBQ3RELElBQU1DLElBQUksR0FBRztJQUFFbEIsUUFBUSxFQUFFLEtBQUs7SUFBRWMsT0FBTyxFQUFFO01BQUViLFNBQVMsRUFBRTtJQUFFO0VBQUUsQ0FBQztFQUMzRFcsTUFBTSxDQUFDZixtQkFBbUIsQ0FBQ3FCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQ0QsSUFBSSxDQUFDO0VBQ2hETixNQUFNLENBQUNmLG1CQUFtQixDQUFDO0lBQUV1QixXQUFXLEVBQUU7RUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDSixRQUFRLENBQUMsQ0FBQztFQUN4RUosTUFBTSxFQUFBSyxvQkFBQSxHQUNKcEIsbUJBQW1CLENBQUMsSUFBSSxFQUFFO0lBQ3hCVSxzQkFBc0IsRUFBRTtNQUFFRSxTQUFTLEVBQUUsQ0FBQztRQUFFQyxVQUFVLEVBQUUsQ0FBQztRQUFFQyxNQUFNLEVBQUU7TUFBRSxDQUFDO0lBQUU7RUFDdEUsQ0FBQyxDQUFDLGNBQUFNLG9CQUFBLHVCQUZGQSxvQkFBQSxDQUVJakIsUUFDTixDQUFDLENBQUNtQixJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUZyQixJQUFJLENBQUMsd0RBQXdELEVBQUUsWUFBTTtFQUNuRWMsTUFBTSxDQUNKbEIsb0JBQW9CLENBQ2xCO0lBQUUyQixnQkFBZ0IsRUFBRSxDQUFDO01BQUVDLFFBQVEsRUFBRTtJQUFFLENBQUMsRUFBRTtNQUFFQSxRQUFRLEVBQUU7SUFBSSxDQUFDLEVBQUU7TUFBRUEsUUFBUSxFQUFFO0lBQUksQ0FBQztFQUFFLENBQUMsRUFDN0U7SUFBRUMsb0JBQW9CLEVBQUUsQ0FBQztNQUFFQyxFQUFFLEVBQUU7SUFBRSxDQUFDO0VBQUUsQ0FDdEMsQ0FDRixDQUFDLENBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDVlAsTUFBTSxDQUFDbEIsb0JBQW9CLENBQUM7SUFBRTRCLFFBQVEsRUFBRTtFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNILElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekRQLE1BQU0sQ0FBQ2xCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lCLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBRUZyQixJQUFJLENBQUMsdURBQXVELEVBQUUsWUFBTTtFQUNsRSxJQUFNMkIsTUFBTSxHQUFHO0lBQ2J6QixRQUFRLEVBQUUsS0FBSztJQUNmTSxVQUFVLEVBQUUsQ0FBQztJQUNib0IsS0FBSyxFQUFFLENBQ0w7TUFBRUosUUFBUSxFQUFFLENBQUM7TUFBRUssVUFBVSxFQUFFLEVBQUU7TUFBRUMsS0FBSyxFQUFFO0lBQU8sQ0FBQyxFQUM5QztNQUFFTixRQUFRLEVBQUUsRUFBRTtNQUFFSyxVQUFVLEVBQUUsSUFBSTtNQUFFQyxLQUFLLEVBQUU7SUFBTSxDQUFDLENBQ2pEO0lBQ0RDLEtBQUssRUFBRTtFQUNULENBQUM7RUFDRGpCLE1BQU0sQ0FBQ25CLGVBQWUsQ0FBQ2dDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDTixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0NQLE1BQU0sQ0FBQ25CLGVBQWUsQ0FBQ2dDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDTixJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzFDUCxNQUFNLENBQUNuQixlQUFlLENBQUNnQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMzQ1AsTUFBTSxDQUFDbkIsZUFBZSxDQUFDZ0MsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUNOLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0NQLE1BQU0sQ0FBQ25CLGVBQWUsQ0FBQXFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFNTCxNQUFNO0lBQUVDLEtBQUssRUFBRTtFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQztBQUVGckIsSUFBSSxDQUFDLDhDQUE4QyxFQUFFLFlBQU07RUFDekQsSUFBTTJCLE1BQU0sR0FBRztJQUNiekIsUUFBUSxFQUFFLEtBQUs7SUFDZk0sVUFBVSxFQUFFLEVBQUU7SUFDZG9CLEtBQUssRUFBRSxDQUFDO01BQUVKLFFBQVEsRUFBRSxDQUFDO01BQUVLLFVBQVUsRUFBRSxJQUFJO01BQUVDLEtBQUssRUFBRTtJQUFLLENBQUMsQ0FBQztJQUN2REMsS0FBSyxFQUFFO0VBQ1QsQ0FBQztFQUNEakIsTUFBTSxDQUFDaEIsa0JBQWtCLENBQUM7SUFBRTZCLE1BQU0sRUFBTkE7RUFBTyxDQUFDLENBQUMsQ0FBQyxDQUFDTixJQUFJLENBQUNNLE1BQU0sQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRjNCLElBQUksQ0FBQyx5REFBeUQsRUFBRSxZQUFNO0VBQ3BFLElBQU0yQixNQUFNLEdBQUc3QixrQkFBa0IsQ0FBQztJQUNoQ2tCLE9BQU8sRUFBRTtNQUNQZCxRQUFRLEVBQUUsS0FBSztNQUNmQyxTQUFTLEVBQUUsRUFBRTtNQUNiTSxzQkFBc0IsRUFBRTtRQUN0QkUsU0FBUyxFQUFFLENBQUM7VUFBRUMsVUFBVSxFQUFFLEdBQUc7VUFBRUMsTUFBTSxFQUFFO1FBQUcsQ0FBQztNQUM3QztJQUNGLENBQUM7SUFDRG9CLGdCQUFnQixFQUFFLFNBQWxCQSxnQkFBZ0JBLENBQUdoQyxLQUFLO01BQUEsT0FBTTtRQUM1QkMsUUFBUSxFQUFFRCxLQUFLLENBQUNDLFFBQVE7UUFDeEJNLFVBQVUsRUFBRVAsS0FBSyxDQUFDTyxVQUFVO1FBQzVCb0IsS0FBSyxFQUFFLENBQ0w7VUFBRUosUUFBUSxFQUFFLENBQUM7VUFBRUssVUFBVSxFQUFFLEVBQUU7VUFBRUMsS0FBSyxFQUFFO1FBQU8sQ0FBQyxFQUM5QztVQUFFTixRQUFRLEVBQUUsR0FBRztVQUFFSyxVQUFVLEVBQUUsSUFBSTtVQUFFQyxLQUFLLEVBQUU7UUFBTyxDQUFDLENBQ25EO1FBQ0RDLEtBQUssRUFBRSxDQUNMO1VBQUVQLFFBQVEsRUFBRSxDQUFDO1VBQUVVLFdBQVcsRUFBRSxFQUFFO1VBQUUvQixTQUFTLEVBQUUsRUFBRTtVQUFFZ0MsSUFBSSxFQUFFLEVBQUU7VUFBRUMsU0FBUyxFQUFFLENBQUM7VUFBRUMsU0FBUyxFQUFFO1FBQUcsQ0FBQyxFQUN0RjtVQUFFYixRQUFRLEVBQUUsR0FBRztVQUFFVSxXQUFXLEVBQUUsQ0FBQztVQUFFL0IsU0FBUyxFQUFFLENBQUM7VUFBRWdDLElBQUksRUFBRSxHQUFHO1VBQUVDLFNBQVMsRUFBRSxDQUFDO1VBQUVDLFNBQVMsRUFBRTtRQUFJLENBQUM7TUFFNUYsQ0FBQztJQUFBO0VBQ0gsQ0FBQyxDQUFDO0VBQ0Z2QixNQUFNLENBQUNhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFQyxLQUFLLENBQUNVLEdBQUcsQ0FBQyxVQUFDQyxJQUFJO0lBQUEsT0FBS0EsSUFBSSxDQUFDZixRQUFRO0VBQUEsRUFBQyxDQUFDLENBQUNnQixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDcEUxQixNQUFNLENBQUNhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNHLFdBQVcsQ0FBQyxDQUFDYixJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQztBQUVGckIsSUFBSSxDQUFDLDREQUE0RCxFQUFFLFlBQU07RUFDdkVjLE1BQU0sQ0FBQ2hCLGtCQUFrQixDQUFDO0lBQUVrQixPQUFPLEVBQUU7TUFBRWIsU0FBUyxFQUFFO0lBQUc7RUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDZSxRQUFRLENBQUMsQ0FBQztFQUNyRUosTUFBTSxDQUFDaEIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDb0IsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const supplierProductCreationTypes: Array<number>;
|
|
2
|
+
export declare const embedProducts: any;
|
|
3
|
+
export declare const embedProduct: {
|
|
4
|
+
component: {};
|
|
5
|
+
defaultJob: {};
|
|
6
|
+
domain: {
|
|
7
|
+
activeTheme: {
|
|
8
|
+
mainCss: {};
|
|
9
|
+
};
|
|
10
|
+
logo: {};
|
|
11
|
+
};
|
|
12
|
+
draftTemplates: {
|
|
13
|
+
file: {};
|
|
14
|
+
selectedByVariationFieldOptions: {};
|
|
15
|
+
editedByVariationFields: {};
|
|
16
|
+
};
|
|
17
|
+
groupBuyStatus: {};
|
|
18
|
+
groupVariationFields: {
|
|
19
|
+
options: {
|
|
20
|
+
linkedFile: {};
|
|
21
|
+
selectedBy: {};
|
|
22
|
+
};
|
|
23
|
+
selectedBy: {};
|
|
24
|
+
};
|
|
25
|
+
images: {};
|
|
26
|
+
independentVariationFields: {
|
|
27
|
+
options: {
|
|
28
|
+
linkedFile: {};
|
|
29
|
+
selectedBy: {};
|
|
30
|
+
};
|
|
31
|
+
selectedBy: {};
|
|
32
|
+
};
|
|
33
|
+
publicFiles: {};
|
|
34
|
+
};
|
|
35
|
+
export declare function productProfileUrl(product: any): any;
|
|
36
|
+
export declare function productFeatureImageUrl(product: any, noImageSrc?: string): any;
|
|
37
|
+
export declare function productHasGroups(product: any): boolean;
|
|
38
|
+
export declare function productHasGroupRows(job: any): boolean;
|
|
39
|
+
/** Product-level qty when there are no real group fields, or group rows never materialised. */
|
|
40
|
+
export declare function needsProductLevelQuantity(product: any, job?: any): boolean;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ProductType } from "./types";
|
|
2
|
+
import { sanitizeProductVariationFields } from './variationFields';
|
|
3
|
+
var productNotFound = require('../images/product-not-found.png');
|
|
4
|
+
export var supplierProductCreationTypes = [ProductType.SUPPLIER_MOD, ProductType.SUPPLIER];
|
|
5
|
+
export var embedProducts = {
|
|
6
|
+
domain: {
|
|
7
|
+
company: {},
|
|
8
|
+
logo: {}
|
|
9
|
+
},
|
|
10
|
+
featureImage: {},
|
|
11
|
+
images: {}
|
|
12
|
+
};
|
|
13
|
+
export var embedProduct = {
|
|
14
|
+
component: {},
|
|
15
|
+
defaultJob: {},
|
|
16
|
+
domain: {
|
|
17
|
+
activeTheme: {
|
|
18
|
+
mainCss: {}
|
|
19
|
+
},
|
|
20
|
+
logo: {}
|
|
21
|
+
},
|
|
22
|
+
draftTemplates: {
|
|
23
|
+
file: {},
|
|
24
|
+
selectedByVariationFieldOptions: {},
|
|
25
|
+
editedByVariationFields: {}
|
|
26
|
+
},
|
|
27
|
+
groupBuyStatus: {},
|
|
28
|
+
groupVariationFields: {
|
|
29
|
+
options: {
|
|
30
|
+
linkedFile: {},
|
|
31
|
+
selectedBy: {}
|
|
32
|
+
},
|
|
33
|
+
selectedBy: {}
|
|
34
|
+
},
|
|
35
|
+
images: {},
|
|
36
|
+
independentVariationFields: {
|
|
37
|
+
options: {
|
|
38
|
+
linkedFile: {},
|
|
39
|
+
selectedBy: {}
|
|
40
|
+
},
|
|
41
|
+
selectedBy: {}
|
|
42
|
+
},
|
|
43
|
+
publicFiles: {}
|
|
44
|
+
};
|
|
45
|
+
export function productProfileUrl(product) {
|
|
46
|
+
if (product && product.featureImage && product.featureImage.viewUrl) {
|
|
47
|
+
return String(product.featureImage.viewUrl);
|
|
48
|
+
}
|
|
49
|
+
var image = productNotFound["default"] || productNotFound;
|
|
50
|
+
return image ? image.src || image : '';
|
|
51
|
+
}
|
|
52
|
+
export function productFeatureImageUrl(product, noImageSrc) {
|
|
53
|
+
return product.featureImage && product.featureImage.viewUrl ? product.featureImage.viewUrl : product.images && product.images[0] && product.images[0].viewUrl ? product.images[0].viewUrl : noImageSrc ? noImageSrc : productProfileUrl(product);
|
|
54
|
+
}
|
|
55
|
+
export function productHasGroups(product) {
|
|
56
|
+
var _sanitizeProductVaria;
|
|
57
|
+
var fields = (_sanitizeProductVaria = sanitizeProductVariationFields(product)) === null || _sanitizeProductVaria === void 0 ? void 0 : _sanitizeProductVaria.groupVariationFields;
|
|
58
|
+
return Array.isArray(fields) && fields.length > 0;
|
|
59
|
+
}
|
|
60
|
+
export function productHasGroupRows(job) {
|
|
61
|
+
return Array.isArray(job === null || job === void 0 ? void 0 : job.variationsGroups) && job.variationsGroups.length > 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Product-level qty when there are no real group fields, or group rows never materialised. */
|
|
65
|
+
export function needsProductLevelQuantity(product, job) {
|
|
66
|
+
return !productHasGroups(product) || !productHasGroupRows(job);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0VHlwZSIsInNhbml0aXplUHJvZHVjdFZhcmlhdGlvbkZpZWxkcyIsInByb2R1Y3ROb3RGb3VuZCIsInJlcXVpcmUiLCJzdXBwbGllclByb2R1Y3RDcmVhdGlvblR5cGVzIiwiU1VQUExJRVJfTU9EIiwiU1VQUExJRVIiLCJlbWJlZFByb2R1Y3RzIiwiZG9tYWluIiwiY29tcGFueSIsImxvZ28iLCJmZWF0dXJlSW1hZ2UiLCJpbWFnZXMiLCJlbWJlZFByb2R1Y3QiLCJjb21wb25lbnQiLCJkZWZhdWx0Sm9iIiwiYWN0aXZlVGhlbWUiLCJtYWluQ3NzIiwiZHJhZnRUZW1wbGF0ZXMiLCJmaWxlIiwic2VsZWN0ZWRCeVZhcmlhdGlvbkZpZWxkT3B0aW9ucyIsImVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzIiwiZ3JvdXBCdXlTdGF0dXMiLCJncm91cFZhcmlhdGlvbkZpZWxkcyIsIm9wdGlvbnMiLCJsaW5rZWRGaWxlIiwic2VsZWN0ZWRCeSIsImluZGVwZW5kZW50VmFyaWF0aW9uRmllbGRzIiwicHVibGljRmlsZXMiLCJwcm9kdWN0UHJvZmlsZVVybCIsInByb2R1Y3QiLCJ2aWV3VXJsIiwiU3RyaW5nIiwiaW1hZ2UiLCJzcmMiLCJwcm9kdWN0RmVhdHVyZUltYWdlVXJsIiwibm9JbWFnZVNyYyIsInByb2R1Y3RIYXNHcm91cHMiLCJfc2FuaXRpemVQcm9kdWN0VmFyaWEiLCJmaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJwcm9kdWN0SGFzR3JvdXBSb3dzIiwiam9iIiwidmFyaWF0aW9uc0dyb3VwcyIsIm5lZWRzUHJvZHVjdExldmVsUXVhbnRpdHkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcHJvZHVjdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvZHVjdFR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgc2FuaXRpemVQcm9kdWN0VmFyaWF0aW9uRmllbGRzIH0gZnJvbSAnLi92YXJpYXRpb25GaWVsZHMnO1xuY29uc3QgcHJvZHVjdE5vdEZvdW5kID0gcmVxdWlyZSgnLi4vaW1hZ2VzL3Byb2R1Y3Qtbm90LWZvdW5kLnBuZycpO1xuXG5leHBvcnQgY29uc3Qgc3VwcGxpZXJQcm9kdWN0Q3JlYXRpb25UeXBlczogQXJyYXk8bnVtYmVyPiA9IFtcbiAgUHJvZHVjdFR5cGUuU1VQUExJRVJfTU9ELFxuICBQcm9kdWN0VHlwZS5TVVBQTElFUixcbl07XG5cbmV4cG9ydCBjb25zdCBlbWJlZFByb2R1Y3RzOiBhbnkgPSB7XG4gIGRvbWFpbjoge1xuICAgIGNvbXBhbnk6IHt9LFxuICAgIGxvZ286IHt9LFxuICB9LFxuICBmZWF0dXJlSW1hZ2U6IHt9LFxuICBpbWFnZXM6IHt9LFxufTtcblxuZXhwb3J0IGNvbnN0IGVtYmVkUHJvZHVjdCA9IHtcbiAgY29tcG9uZW50OiB7fSxcbiAgZGVmYXVsdEpvYjoge30sXG4gIGRvbWFpbjoge1xuICAgIGFjdGl2ZVRoZW1lOiB7IG1haW5Dc3M6IHt9IH0sXG4gICAgbG9nbzoge31cbiAgfSxcbiAgZHJhZnRUZW1wbGF0ZXM6IHtcbiAgICBmaWxlOiB7fSxcbiAgICBzZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zOiB7fSxcbiAgICBlZGl0ZWRCeVZhcmlhdGlvbkZpZWxkczoge30sXG4gIH0sXG4gIGdyb3VwQnV5U3RhdHVzOiB7fSxcbiAgZ3JvdXBWYXJpYXRpb25GaWVsZHM6IHtcbiAgICBvcHRpb25zOiB7IGxpbmtlZEZpbGU6IHt9LCBzZWxlY3RlZEJ5OiB7fSB9LFxuICAgIHNlbGVjdGVkQnk6IHt9LFxuICB9LFxuICBpbWFnZXM6IHt9LFxuICBpbmRlcGVuZGVudFZhcmlhdGlvbkZpZWxkczoge1xuICAgIG9wdGlvbnM6IHsgbGlua2VkRmlsZToge30sIHNlbGVjdGVkQnk6IHt9IH0sXG4gICAgc2VsZWN0ZWRCeToge30sXG4gIH0sXG4gIHB1YmxpY0ZpbGVzOiB7fSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0UHJvZmlsZVVybChwcm9kdWN0OiBhbnkpIHtcbiAgaWYgKHByb2R1Y3QgJiYgcHJvZHVjdC5mZWF0dXJlSW1hZ2UgJiYgcHJvZHVjdC5mZWF0dXJlSW1hZ2Uudmlld1VybCkge1xuICAgIHJldHVybiBTdHJpbmcocHJvZHVjdC5mZWF0dXJlSW1hZ2Uudmlld1VybCk7XG4gIH1cbiAgY29uc3QgaW1hZ2UgPSBwcm9kdWN0Tm90Rm91bmQuZGVmYXVsdCB8fCBwcm9kdWN0Tm90Rm91bmQ7XG4gIHJldHVybiBpbWFnZSA/IChpbWFnZS5zcmMgfHwgaW1hZ2UpIDogJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0RmVhdHVyZUltYWdlVXJsKHByb2R1Y3Q6IGFueSwgbm9JbWFnZVNyYz86IHN0cmluZykge1xuICByZXR1cm4gcHJvZHVjdCEuZmVhdHVyZUltYWdlXG4gICAgJiYgcHJvZHVjdCEuZmVhdHVyZUltYWdlIS52aWV3VXJsXG4gICAgPyBwcm9kdWN0IS5mZWF0dXJlSW1hZ2UhLnZpZXdVcmxcbiAgICA6IHByb2R1Y3QhLmltYWdlcyAmJiBwcm9kdWN0IS5pbWFnZXNbMF1cbiAgICAgICYmIHByb2R1Y3QhLmltYWdlc1swXSEudmlld1VybFxuICAgICAgPyBwcm9kdWN0IS5pbWFnZXNbMF0hLnZpZXdVcmxcbiAgICAgIDogbm9JbWFnZVNyY1xuICAgICAgICA/IG5vSW1hZ2VTcmNcbiAgICAgICAgOiBwcm9kdWN0UHJvZmlsZVVybChwcm9kdWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RIYXNHcm91cHMocHJvZHVjdDogYW55KSB7XG4gIGNvbnN0IGZpZWxkcyA9IHNhbml0aXplUHJvZHVjdFZhcmlhdGlvbkZpZWxkcyhwcm9kdWN0KT8uZ3JvdXBWYXJpYXRpb25GaWVsZHM7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGZpZWxkcykgJiYgZmllbGRzLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0SGFzR3JvdXBSb3dzKGpvYjogYW55KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGpvYj8udmFyaWF0aW9uc0dyb3VwcykgJiYgam9iLnZhcmlhdGlvbnNHcm91cHMubGVuZ3RoID4gMDtcbn1cblxuLyoqIFByb2R1Y3QtbGV2ZWwgcXR5IHdoZW4gdGhlcmUgYXJlIG5vIHJlYWwgZ3JvdXAgZmllbGRzLCBvciBncm91cCByb3dzIG5ldmVyIG1hdGVyaWFsaXNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZWVkc1Byb2R1Y3RMZXZlbFF1YW50aXR5KHByb2R1Y3Q6IGFueSwgam9iPzogYW55KSB7XG4gIHJldHVybiAhcHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KSB8fCAhcHJvZHVjdEhhc0dyb3VwUm93cyhqb2IpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLFFBQVEsU0FBUztBQUNyQyxTQUFTQyw4QkFBOEIsUUFBUSxtQkFBbUI7QUFDbEUsSUFBTUMsZUFBZSxHQUFHQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7QUFFbEUsT0FBTyxJQUFNQyw0QkFBMkMsR0FBRyxDQUN6REosV0FBVyxDQUFDSyxZQUFZLEVBQ3hCTCxXQUFXLENBQUNNLFFBQVEsQ0FDckI7QUFFRCxPQUFPLElBQU1DLGFBQWtCLEdBQUc7RUFDaENDLE1BQU0sRUFBRTtJQUNOQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ1hDLElBQUksRUFBRSxDQUFDO0VBQ1QsQ0FBQztFQUNEQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCQyxNQUFNLEVBQUUsQ0FBQztBQUNYLENBQUM7QUFFRCxPQUFPLElBQU1DLFlBQVksR0FBRztFQUMxQkMsU0FBUyxFQUFFLENBQUMsQ0FBQztFQUNiQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0VBQ2RQLE1BQU0sRUFBRTtJQUNOUSxXQUFXLEVBQUU7TUFBRUMsT0FBTyxFQUFFLENBQUM7SUFBRSxDQUFDO0lBQzVCUCxJQUFJLEVBQUUsQ0FBQztFQUNULENBQUM7RUFDRFEsY0FBYyxFQUFFO0lBQ2RDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDUkMsK0JB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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Product MOQ as a number, or 0 when unset / invalid. */
|
|
2
|
+
export declare function productMinimumQuantity(product: any): number;
|
|
3
|
+
/** Floor used for quantity inputs: at least 1, or the product MOQ when higher. */
|
|
4
|
+
export declare function productMoqFloor(product: any): number;
|
|
5
|
+
export declare function enforceMoqPerGroup(product: any): boolean;
|
|
6
|
+
/** Quantity to seed on a newly added variation group. */
|
|
7
|
+
export declare function defaultGroupQuantity(product: any): number;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Product MOQ as a number, or 0 when unset / invalid. */
|
|
2
|
+
export function productMinimumQuantity(product) {
|
|
3
|
+
var n = Number(product === null || product === void 0 ? void 0 : product.minimum);
|
|
4
|
+
return Number.isFinite(n) && n > 0 ? n : 0;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** Floor used for quantity inputs: at least 1, or the product MOQ when higher. */
|
|
8
|
+
export function productMoqFloor(product) {
|
|
9
|
+
return Math.max(1, productMinimumQuantity(product));
|
|
10
|
+
}
|
|
11
|
+
export function enforceMoqPerGroup(product) {
|
|
12
|
+
return Boolean(product === null || product === void 0 ? void 0 : product.minimumPerGroup);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Quantity to seed on a newly added variation group. */
|
|
16
|
+
export function defaultGroupQuantity(product) {
|
|
17
|
+
return productMoqFloor(product);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9kdWN0TWluaW11bVF1YW50aXR5IiwicHJvZHVjdCIsIm4iLCJOdW1iZXIiLCJtaW5pbXVtIiwiaXNGaW5pdGUiLCJwcm9kdWN0TW9xRmxvb3IiLCJNYXRoIiwibWF4IiwiZW5mb3JjZU1vcVBlckdyb3VwIiwiQm9vbGVhbiIsIm1pbmltdW1QZXJHcm91cCIsImRlZmF1bHRHcm91cFF1YW50aXR5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3F1YW50aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBQcm9kdWN0IE1PUSBhcyBhIG51bWJlciwgb3IgMCB3aGVuIHVuc2V0IC8gaW52YWxpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0TWluaW11bVF1YW50aXR5KHByb2R1Y3Q6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG4gPSBOdW1iZXIocHJvZHVjdD8ubWluaW11bSk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgJiYgbiA+IDAgPyBuIDogMDtcbn1cblxuLyoqIEZsb29yIHVzZWQgZm9yIHF1YW50aXR5IGlucHV0czogYXQgbGVhc3QgMSwgb3IgdGhlIHByb2R1Y3QgTU9RIHdoZW4gaGlnaGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RNb3FGbG9vcihwcm9kdWN0OiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoMSwgcHJvZHVjdE1pbmltdW1RdWFudGl0eShwcm9kdWN0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTW9xUGVyR3JvdXAocHJvZHVjdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKHByb2R1Y3Q/Lm1pbmltdW1QZXJHcm91cCk7XG59XG5cbi8qKiBRdWFudGl0eSB0byBzZWVkIG9uIGEgbmV3bHkgYWRkZWQgdmFyaWF0aW9uIGdyb3VwLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRHcm91cFF1YW50aXR5KHByb2R1Y3Q6IGFueSk6IG51bWJlciB7XG4gIHJldHVybiBwcm9kdWN0TW9xRmxvb3IocHJvZHVjdCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsT0FBTyxTQUFTQSxzQkFBc0JBLENBQUNDLE9BQVksRUFBVTtFQUMzRCxJQUFNQyxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0YsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVHLE9BQU8sQ0FBQztFQUNsQyxPQUFPRCxNQUFNLENBQUNFLFFBQVEsQ0FBQ0gsQ0FBQyxDQUFDLElBQUlBLENBQUMsR0FBRyxDQUFDLEdBQUdBLENBQUMsR0FBRyxDQUFDO0FBQzVDOztBQUVBO0FBQ0EsT0FBTyxTQUFTSSxlQUFlQSxDQUFDTCxPQUFZLEVBQVU7RUFDcEQsT0FBT00sSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFUixzQkFBc0IsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7QUFDckQ7QUFFQSxPQUFPLFNBQVNRLGtCQUFrQkEsQ0FBQ1IsT0FBWSxFQUFXO0VBQ3hELE9BQU9TLE9BQU8sQ0FBQ1QsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVVLGVBQWUsQ0FBQztBQUMxQzs7QUFFQTtBQUNBLE9BQU8sU0FBU0Msb0JBQW9CQSxDQUFDWCxPQUFZLEVBQVU7RUFDekQsT0FBT0ssZUFBZSxDQUFDTCxPQUFPLENBQUM7QUFDakMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { defaultGroupQuantity, enforceMoqPerGroup, productMinimumQuantity, productMoqFloor } from './quantity';
|
|
2
|
+
describe('product MOQ helpers', function () {
|
|
3
|
+
test('productMinimumQuantity reads numeric minimum', function () {
|
|
4
|
+
expect(productMinimumQuantity({
|
|
5
|
+
minimum: 50
|
|
6
|
+
})).toBe(50);
|
|
7
|
+
expect(productMinimumQuantity({
|
|
8
|
+
minimum: '25'
|
|
9
|
+
})).toBe(25);
|
|
10
|
+
expect(productMinimumQuantity({
|
|
11
|
+
minimum: 0
|
|
12
|
+
})).toBe(0);
|
|
13
|
+
expect(productMinimumQuantity({})).toBe(0);
|
|
14
|
+
});
|
|
15
|
+
test('productMoqFloor is at least 1', function () {
|
|
16
|
+
expect(productMoqFloor({
|
|
17
|
+
minimum: 50
|
|
18
|
+
})).toBe(50);
|
|
19
|
+
expect(productMoqFloor({
|
|
20
|
+
minimum: 0
|
|
21
|
+
})).toBe(1);
|
|
22
|
+
expect(productMoqFloor({})).toBe(1);
|
|
23
|
+
});
|
|
24
|
+
test('enforceMoqPerGroup follows minimumPerGroup', function () {
|
|
25
|
+
expect(enforceMoqPerGroup({
|
|
26
|
+
minimumPerGroup: true
|
|
27
|
+
})).toBe(true);
|
|
28
|
+
expect(enforceMoqPerGroup({
|
|
29
|
+
minimumPerGroup: false
|
|
30
|
+
})).toBe(false);
|
|
31
|
+
expect(enforceMoqPerGroup({})).toBe(false);
|
|
32
|
+
});
|
|
33
|
+
test('defaultGroupQuantity seeds at MOQ floor', function () {
|
|
34
|
+
expect(defaultGroupQuantity({
|
|
35
|
+
minimum: 100
|
|
36
|
+
})).toBe(100);
|
|
37
|
+
expect(defaultGroupQuantity({
|
|
38
|
+
minimum: 0
|
|
39
|
+
})).toBe(1);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBRdWFudGl0eSIsImVuZm9yY2VNb3FQZXJHcm91cCIsInByb2R1Y3RNaW5pbXVtUXVhbnRpdHkiLCJwcm9kdWN0TW9xRmxvb3IiLCJkZXNjcmliZSIsInRlc3QiLCJleHBlY3QiLCJtaW5pbXVtIiwidG9CZSIsIm1pbmltdW1QZXJHcm91cCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9xdWFudGl0eS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRlZmF1bHRHcm91cFF1YW50aXR5LFxuICBlbmZvcmNlTW9xUGVyR3JvdXAsXG4gIHByb2R1Y3RNaW5pbXVtUXVhbnRpdHksXG4gIHByb2R1Y3RNb3FGbG9vcixcbn0gZnJvbSAnLi9xdWFudGl0eSc7XG5cbmRlc2NyaWJlKCdwcm9kdWN0IE1PUSBoZWxwZXJzJywgKCkgPT4ge1xuICB0ZXN0KCdwcm9kdWN0TWluaW11bVF1YW50aXR5IHJlYWRzIG51bWVyaWMgbWluaW11bScsICgpID0+IHtcbiAgICBleHBlY3QocHJvZHVjdE1pbmltdW1RdWFudGl0eSh7IG1pbmltdW06IDUwIH0pKS50b0JlKDUwKTtcbiAgICBleHBlY3QocHJvZHVjdE1pbmltdW1RdWFudGl0eSh7IG1pbmltdW06ICcyNScgfSkpLnRvQmUoMjUpO1xuICAgIGV4cGVjdChwcm9kdWN0TWluaW11bVF1YW50aXR5KHsgbWluaW11bTogMCB9KSkudG9CZSgwKTtcbiAgICBleHBlY3QocHJvZHVjdE1pbmltdW1RdWFudGl0eSh7fSkpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Byb2R1Y3RNb3FGbG9vciBpcyBhdCBsZWFzdCAxJywgKCkgPT4ge1xuICAgIGV4cGVjdChwcm9kdWN0TW9xRmxvb3IoeyBtaW5pbXVtOiA1MCB9KSkudG9CZSg1MCk7XG4gICAgZXhwZWN0KHByb2R1Y3RNb3FGbG9vcih7IG1pbmltdW06IDAgfSkpLnRvQmUoMSk7XG4gICAgZXhwZWN0KHByb2R1Y3RNb3FGbG9vcih7fSkpLnRvQmUoMSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2VuZm9yY2VNb3FQZXJHcm91cCBmb2xsb3dzIG1pbmltdW1QZXJHcm91cCcsICgpID0+IHtcbiAgICBleHBlY3QoZW5mb3JjZU1vcVBlckdyb3VwKHsgbWluaW11bVBlckdyb3VwOiB0cnVlIH0pKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChlbmZvcmNlTW9xUGVyR3JvdXAoeyBtaW5pbXVtUGVyR3JvdXA6IGZhbHNlIH0pKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QoZW5mb3JjZU1vcVBlckdyb3VwKHt9KSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHRHcm91cFF1YW50aXR5IHNlZWRzIGF0IE1PUSBmbG9vcicsICgpID0+IHtcbiAgICBleHBlY3QoZGVmYXVsdEdyb3VwUXVhbnRpdHkoeyBtaW5pbXVtOiAxMDAgfSkpLnRvQmUoMTAwKTtcbiAgICBleHBlY3QoZGVmYXVsdEdyb3VwUXVhbnRpdHkoeyBtaW5pbXVtOiAwIH0pKS50b0JlKDEpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMsc0JBQXNCLEVBQ3RCQyxlQUFlLFFBQ1YsWUFBWTtBQUVuQkMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLFlBQU07RUFDcENDLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxZQUFNO0lBQ3pEQyxNQUFNLENBQUNKLHNCQUFzQixDQUFDO01BQUVLLE9BQU8sRUFBRTtJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDeERGLE1BQU0sQ0FBQ0osc0JBQXNCLENBQUM7TUFBRUssT0FBTyxFQUFFO0lBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMxREYsTUFBTSxDQUFDSixzQkFBc0IsQ0FBQztNQUFFSyxPQUFPLEVBQUU7SUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RERixNQUFNLENBQUNKLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ00sSUFBSSxDQUFDLENBQUMsQ0FBQztFQUM1QyxDQUFDLENBQUM7RUFFRkgsSUFBSSxDQUFDLCtCQUErQixFQUFFLFlBQU07SUFDMUNDLE1BQU0sQ0FBQ0gsZUFBZSxDQUFDO01BQUVJLE9BQU8sRUFBRTtJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakRGLE1BQU0sQ0FBQ0gsZUFBZSxDQUFDO01BQUVJLE9BQU8sRUFBRTtJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0NGLE1BQU0sQ0FBQ0gsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNyQyxDQUFDLENBQUM7RUFFRkgsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLFlBQU07SUFDdkRDLE1BQU0sQ0FBQ0wsa0JBQWtCLENBQUM7TUFBRVEsZUFBZSxFQUFFO0lBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoRUYsTUFBTSxDQUFDTCxrQkFBa0IsQ0FBQztNQUFFUSxlQUFlLEVBQUU7SUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2xFRixNQUFNLENBQUNMLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ08sSUFBSSxDQUFDLEtBQUssQ0FBQztFQUM1QyxDQUFDLENBQUM7RUFFRkgsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLFlBQU07SUFDcERDLE1BQU0sQ0FBQ04sb0JBQW9CLENBQUM7TUFBRU8sT0FBTyxFQUFFO0lBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN4REYsTUFBTSxDQUFDTixvQkFBb0IsQ0FBQztNQUFFTyxPQUFPLEVBQUU7SUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3RELENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reconcile form variation arrays with a desired list (server quote or
|
|
3
|
+
* client-side visible fields). Membership is matched by variationField.id so
|
|
4
|
+
* conditional fields the server/client adds or removes are adopted without a
|
|
5
|
+
* full form reset that would throw away in-progress quantity edits.
|
|
6
|
+
*/
|
|
7
|
+
export declare function variationFieldId(variation: any): number | null;
|
|
8
|
+
/** Sync isVisible / available onto current options by optionId (not index). */
|
|
9
|
+
export declare function syncOptionVisibilityById(currentOptions: any[] | undefined, sourceOptions: any[] | undefined): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Build the next variations array from `desiredVariations`, preserving user
|
|
12
|
+
* `value` / `variationFiles` for fields that already exist on the form.
|
|
13
|
+
*/
|
|
14
|
+
export declare function reconcileVariations(currentVariations: any[] | undefined, desiredVariations: any[] | undefined): {
|
|
15
|
+
variations: any[];
|
|
16
|
+
membershipChanged: boolean;
|
|
17
|
+
visibilityChanged: boolean;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Filter/order product fields by a visible-id set and reuse current values
|
|
21
|
+
* when present; otherwise use `buildEmptyVariation(field)`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildDesiredVariationsFromFields(currentVariations: any[] | undefined, productFields: any[] | undefined, visibleFieldIds: Set<number>, buildEmptyVariation: (field: any) => any): any[];
|
|
24
|
+
export declare function productFieldTemplatesById(product: any): Map<number, any>;
|
|
25
|
+
export declare function productFieldsForPricingFields(pricingFields: any[] | undefined, product: any): any[] | null;
|