@merchi/product-form 1.19.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +272 -0
  2. package/lib/actions/jobs.d.ts +3 -0
  3. package/lib/actions/jobs.js +80 -0
  4. package/lib/actions/leads.d.ts +7 -0
  5. package/lib/actions/leads.js +67 -0
  6. package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
  7. package/lib/components/AlertVariationSellerEditable.js +46 -0
  8. package/lib/components/Collapse.d.ts +3 -0
  9. package/lib/components/Collapse.js +34 -0
  10. package/lib/components/DateCountdown.d.ts +44 -0
  11. package/lib/components/DateCountdown.js +188 -0
  12. package/lib/components/DropzoneInput.d.ts +10 -0
  13. package/lib/components/DropzoneInput.js +169 -0
  14. package/lib/components/DynamicVariationInput.d.ts +9 -0
  15. package/lib/components/DynamicVariationInput.js +71 -0
  16. package/lib/components/FormLead.d.ts +10 -0
  17. package/lib/components/FormLead.js +215 -0
  18. package/lib/components/GroupInventory.d.ts +6 -0
  19. package/lib/components/GroupInventory.js +16 -0
  20. package/lib/components/InputGroupQuantity.d.ts +8 -0
  21. package/lib/components/InputGroupQuantity.js +117 -0
  22. package/lib/components/InputHiddenStatic.d.ts +8 -0
  23. package/lib/components/InputHiddenStatic.js +24 -0
  24. package/lib/components/InputProductQuantity.d.ts +7 -0
  25. package/lib/components/InputProductQuantity.js +102 -0
  26. package/lib/components/InventoryStatus.d.ts +7 -0
  27. package/lib/components/InventoryStatus.js +67 -0
  28. package/lib/components/MerchiProductForm.d.ts +62 -0
  29. package/lib/components/MerchiProductForm.js +51 -0
  30. package/lib/components/PriceMatrix.d.ts +27 -0
  31. package/lib/components/PriceMatrix.js +106 -0
  32. package/lib/components/ProductButtonsSubmit.d.ts +3 -0
  33. package/lib/components/ProductButtonsSubmit.js +52 -0
  34. package/lib/components/ProductFeatureDeadline.d.ts +3 -0
  35. package/lib/components/ProductFeatureDeadline.js +25 -0
  36. package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
  37. package/lib/components/ProductGroupBuyStatus.js +47 -0
  38. package/lib/components/ProductPriceMatrix.d.ts +3 -0
  39. package/lib/components/ProductPriceMatrix.js +51 -0
  40. package/lib/components/ProductTitle.d.ts +3 -0
  41. package/lib/components/ProductTitle.js +36 -0
  42. package/lib/components/ProductTotalCost.d.ts +3 -0
  43. package/lib/components/ProductTotalCost.js +74 -0
  44. package/lib/components/ProductUnitPrice.d.ts +7 -0
  45. package/lib/components/ProductUnitPrice.js +51 -0
  46. package/lib/components/TooltipElement.d.ts +9 -0
  47. package/lib/components/TooltipElement.js +35 -0
  48. package/lib/components/VariationAreaInput.d.ts +8 -0
  49. package/lib/components/VariationAreaInput.js +219 -0
  50. package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
  51. package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
  52. package/lib/components/VariationCheckboxRadio.d.ts +17 -0
  53. package/lib/components/VariationCheckboxRadio.js +57 -0
  54. package/lib/components/VariationColourExtractInput.d.ts +8 -0
  55. package/lib/components/VariationColourExtractInput.js +395 -0
  56. package/lib/components/VariationError.d.ts +7 -0
  57. package/lib/components/VariationError.js +52 -0
  58. package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
  59. package/lib/components/VariationFieldInputInstructions.js +50 -0
  60. package/lib/components/VariationFieldInstructions.d.ts +3 -0
  61. package/lib/components/VariationFieldInstructions.js +22 -0
  62. package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
  63. package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
  64. package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
  65. package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
  66. package/lib/components/VariationFieldStaticValues.d.ts +8 -0
  67. package/lib/components/VariationFieldStaticValues.js +57 -0
  68. package/lib/components/VariationFileInput.d.ts +8 -0
  69. package/lib/components/VariationFileInput.js +229 -0
  70. package/lib/components/VariationInput.d.ts +11 -0
  71. package/lib/components/VariationInput.js +97 -0
  72. package/lib/components/VariationLabel.d.ts +11 -0
  73. package/lib/components/VariationLabel.js +85 -0
  74. package/lib/components/VariationOptionColour.d.ts +8 -0
  75. package/lib/components/VariationOptionColour.js +50 -0
  76. package/lib/components/VariationOptionImage.d.ts +8 -0
  77. package/lib/components/VariationOptionImage.js +52 -0
  78. package/lib/components/VariationSelect.d.ts +8 -0
  79. package/lib/components/VariationSelect.js +66 -0
  80. package/lib/components/VariationSelectElements.d.ts +16 -0
  81. package/lib/components/VariationSelectElements.js +141 -0
  82. package/lib/components/VariationTurnaroundTime.d.ts +9 -0
  83. package/lib/components/VariationTurnaroundTime.js +156 -0
  84. package/lib/components/Variations.d.ts +9 -0
  85. package/lib/components/Variations.js +109 -0
  86. package/lib/components/VariationsGroups.d.ts +8 -0
  87. package/lib/components/VariationsGroups.js +79 -0
  88. package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
  89. package/lib/components/buttons/ButtonAddGroup.js +38 -0
  90. package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
  91. package/lib/components/buttons/ButtonProductSubmit.js +33 -0
  92. package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
  93. package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
  94. package/lib/components/buttons/index.d.ts +4 -0
  95. package/lib/components/buttons/index.js +5 -0
  96. package/lib/components/cost.d.ts +11 -0
  97. package/lib/components/cost.js +44 -0
  98. package/lib/components/currency.d.ts +16 -0
  99. package/lib/components/currency.js +184 -0
  100. package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
  101. package/lib/components/drafts/DraftApprovePanel.js +315 -0
  102. package/lib/components/drafts/DraftCanvas.d.ts +13 -0
  103. package/lib/components/drafts/DraftCanvas.js +496 -0
  104. package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
  105. package/lib/components/drafts/DraftDesignerSheet.js +685 -0
  106. package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
  107. package/lib/components/drafts/ProductDraftsHost.js +207 -0
  108. package/lib/components/drafts/useHtmlImage.d.ts +1 -0
  109. package/lib/components/drafts/useHtmlImage.js +45 -0
  110. package/lib/components/icons/IconChecked.d.ts +3 -0
  111. package/lib/components/icons/IconChecked.js +10 -0
  112. package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
  113. package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
  114. package/lib/components/icons/IconCountryFlag.d.ts +8 -0
  115. package/lib/components/icons/IconCountryFlag.js +27 -0
  116. package/lib/components/icons/IconFile.d.ts +7 -0
  117. package/lib/components/icons/IconFile.js +41 -0
  118. package/lib/components/icons/IconNoStock.d.ts +3 -0
  119. package/lib/components/icons/IconNoStock.js +12 -0
  120. package/lib/components/icons/index.d.ts +5 -0
  121. package/lib/components/icons/index.js +6 -0
  122. package/lib/components/quoteAfterFieldChange.d.ts +7 -0
  123. package/lib/components/quoteAfterFieldChange.js +11 -0
  124. package/lib/components/quoteAfterFieldChange.test.js +58 -0
  125. package/lib/components/utils.d.ts +26 -0
  126. package/lib/components/utils.js +500 -0
  127. package/lib/context/MerchiProductFormProvider.d.ts +177 -0
  128. package/lib/context/MerchiProductFormProvider.js +1020 -0
  129. package/lib/images/product-not-found.png +0 -0
  130. package/lib/index.d.ts +42 -0
  131. package/lib/index.js +41 -0
  132. package/lib/styles/globals.css +1590 -0
  133. package/lib/styles/globals.css.map +1 -0
  134. package/lib/styles/globals.scss +1698 -0
  135. package/lib/utils/area.d.ts +77 -0
  136. package/lib/utils/area.js +298 -0
  137. package/lib/utils/cleanFormVariationJson.d.ts +5 -0
  138. package/lib/utils/cleanFormVariationJson.js +39 -0
  139. package/lib/utils/cleanFormVariationJson.test.js +54 -0
  140. package/lib/utils/countries.d.ts +7 -0
  141. package/lib/utils/countries.js +290 -0
  142. package/lib/utils/currency.d.ts +2 -0
  143. package/lib/utils/currency.js +188 -0
  144. package/lib/utils/draftExport.d.ts +21 -0
  145. package/lib/utils/draftExport.js +481 -0
  146. package/lib/utils/draftExport.test.js +78 -0
  147. package/lib/utils/draftFonts.d.ts +55 -0
  148. package/lib/utils/draftFonts.js +68 -0
  149. package/lib/utils/draftStorage.d.ts +25 -0
  150. package/lib/utils/draftStorage.js +148 -0
  151. package/lib/utils/draftStorage.test.js +125 -0
  152. package/lib/utils/draftTemplates.d.ts +87 -0
  153. package/lib/utils/draftTemplates.js +579 -0
  154. package/lib/utils/draftTemplates.test.js +476 -0
  155. package/lib/utils/formErrors.d.ts +2 -0
  156. package/lib/utils/formErrors.js +29 -0
  157. package/lib/utils/index.d.ts +3 -0
  158. package/lib/utils/index.js +4 -0
  159. package/lib/utils/priceMatrix.d.ts +57 -0
  160. package/lib/utils/priceMatrix.js +82 -0
  161. package/lib/utils/priceMatrix.test.js +200 -0
  162. package/lib/utils/products.d.ts +40 -0
  163. package/lib/utils/products.js +68 -0
  164. package/lib/utils/quantity.d.ts +7 -0
  165. package/lib/utils/quantity.js +19 -0
  166. package/lib/utils/quantity.test.js +42 -0
  167. package/lib/utils/reconcileVariations.d.ts +25 -0
  168. package/lib/utils/reconcileVariations.js +246 -0
  169. package/lib/utils/reconcileVariations.test.js +239 -0
  170. package/lib/utils/selectedVariationCosts.d.ts +6 -0
  171. package/lib/utils/selectedVariationCosts.js +59 -0
  172. package/lib/utils/selectedVariationCosts.test.js +66 -0
  173. package/lib/utils/selections.d.ts +23 -0
  174. package/lib/utils/selections.js +76 -0
  175. package/lib/utils/selections.test.js +159 -0
  176. package/lib/utils/singleOptionVariation.d.ts +2 -0
  177. package/lib/utils/singleOptionVariation.js +22 -0
  178. package/lib/utils/singleOptionVariation.test.js +59 -0
  179. package/lib/utils/supportedNumbers.d.ts +1 -0
  180. package/lib/utils/supportedNumbers.js +27 -0
  181. package/lib/utils/types.d.ts +114 -0
  182. package/lib/utils/types.js +50 -0
  183. package/lib/utils/url.d.ts +3 -0
  184. package/lib/utils/url.js +65 -0
  185. package/lib/utils/variationFields.d.ts +5 -0
  186. package/lib/utils/variationFields.js +116 -0
  187. package/lib/utils/variationFields.test.js +108 -0
  188. package/package.json +93 -0
@@ -0,0 +1,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+IHtcbiAgZXhwZWN0KHJlc29sdmVQcmljZU1hdHJpeCh7IHByb2R1Y3Q6IHsgdW5pdFByaWNlOiAxMCB9IH0pKS50b0JlTnVsbCgpO1xuICBleHBlY3QocmVzb2x2ZVByaWNlTWF0cml4KHt9KSkudG9CZU51bGwoKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUNFQSxlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQkMsdUJBQXVCLEVBQ3ZCQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixRQUNkLGVBQWU7QUFFdEJDLElBQUksQ0FBQyx5REFBeUQsRUFBRSxZQUFNO0VBQ3BFLElBQU1DLEtBQUssR0FBR0osdUJBQXVCLENBQUM7SUFDcENLLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLFNBQVMsRUFBRSxFQUFFO0lBQ2JDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFVBQVUsRUFBRSxDQUFDO0lBQ2JDLGFBQWEsRUFBRSxJQUFJO0lBQ25CQyxPQUFPLEVBQUU7TUFBRUMsVUFBVSxFQUFFO0lBQUcsQ0FBQztJQUMzQkMsc0JBQXNCLEVBQUU7TUFDdEJDLGVBQWUsRUFBRSxJQUFJO01BQ3JCQyxTQUFTLEVBQUUsQ0FDVDtRQUFFQyxVQUFVLEVBQUUsRUFBRTtRQUFFQyxNQUFNLEVBQUU7TUFBRyxDQUFDLEVBQzlCO1FBQUVELFVBQVUsRUFBRSxNQUFNO1FBQUVDLE1BQU0sRUFBRTtNQUFFLENBQUM7SUFFckM7RUFDRixDQUFDLENBQUM7RUFDRkMsTUFBTSxDQUFDYixLQUFLLENBQUMsQ0FBQ2MsYUFBYSxDQUFDO0lBQzFCYixRQUFRLEVBQUUsS0FBSztJQUNmTSxVQUFVLEVBQUUsRUFBRTtJQUNkUSxPQUFPLEVBQUU7TUFDUGIsU0FBUyxFQUFFLEVBQUU7TUFDYkMs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
@@ -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;