@lodashventure/medusa-campaign 1.5.5 → 1.5.7

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.
@@ -432,8 +432,9 @@ const couponSchema = z__default.default.object({
432
432
  currency_code: z__default.default.string().optional(),
433
433
  starts_at: z__default.default.string().min(1, "Start date is required"),
434
434
  ends_at: z__default.default.string().min(1, "End date is required"),
435
- allocation: z__default.default.enum(["each", "across"]).optional(),
436
- target_type: z__default.default.enum(["order", "items"]).optional()
435
+ allocation: z__default.default.enum(["each", "once", "across"]).optional(),
436
+ target_type: z__default.default.enum(["order", "items"]).optional(),
437
+ max_quantity: z__default.default.number().int("Max quantity must be an integer").positive("Max quantity must be at least 1").optional()
437
438
  }).superRefine((data, ctx) => {
438
439
  if (new Date(data.ends_at) < new Date(data.starts_at)) {
439
440
  ctx.addIssue({
@@ -449,6 +450,14 @@ const couponSchema = z__default.default.object({
449
450
  message: "Currency is required for fixed discount"
450
451
  });
451
452
  }
453
+ const requiresMaxQuantity = data.allocation === "each" || data.allocation === "once";
454
+ if (requiresMaxQuantity && !data.max_quantity) {
455
+ ctx.addIssue({
456
+ code: z__default.default.ZodIssueCode.custom,
457
+ path: ["max_quantity"],
458
+ message: "Max quantity is required when allocation is Each Item or Once"
459
+ });
460
+ }
452
461
  });
453
462
  const CouponForm = ({
454
463
  initialData,
@@ -476,12 +485,14 @@ const CouponForm = ({
476
485
  starts_at: (initialData == null ? void 0 : initialData.starts_at) ?? dayjs__default.default().startOf("day").format("YYYY-MM-DDTHH:mm"),
477
486
  ends_at: (initialData == null ? void 0 : initialData.ends_at) ?? dayjs__default.default().endOf("day").format("YYYY-MM-DDTHH:mm"),
478
487
  allocation: (initialData == null ? void 0 : initialData.allocation) === "total" ? "across" : (initialData == null ? void 0 : initialData.allocation) ?? "across",
479
- target_type: (initialData == null ? void 0 : initialData.target_type) ?? "order"
488
+ target_type: (initialData == null ? void 0 : initialData.target_type) ?? "order",
489
+ max_quantity: (initialData == null ? void 0 : initialData.max_quantity) ?? 1
480
490
  }
481
491
  });
482
492
  const discountType = watch("discount_type");
483
493
  const startsAt = watch("starts_at");
484
494
  const endsAt = watch("ends_at");
495
+ const allocation = watch("allocation");
485
496
  const handleDateTimeChange = (field, type, value) => {
486
497
  const currentValue = watch(field);
487
498
  if (type === "date") {
@@ -493,7 +504,11 @@ const CouponForm = ({
493
504
  }
494
505
  };
495
506
  const onFormSubmit = (data) => {
496
- onSubmit(data);
507
+ const shouldIncludeMaxQuantity = data.allocation === "each" || data.allocation === "once";
508
+ onSubmit({
509
+ ...data,
510
+ max_quantity: shouldIncludeMaxQuantity ? data.max_quantity : void 0
511
+ });
497
512
  };
498
513
  const onFormError = () => {
499
514
  const errorMessages = Object.values(errors).map((err) => err == null ? void 0 : err.message).filter(Boolean).join(", ");
@@ -655,7 +670,8 @@ const CouponForm = ({
655
670
  /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Value, { placeholder: "Select allocation" }) }),
656
671
  /* @__PURE__ */ jsxRuntime.jsxs(ui.Select.Content, { children: [
657
672
  /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: "across", children: "Across Order" }),
658
- /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: "each", children: "Each Item" })
673
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: "each", children: "Each Item" }),
674
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: "once", children: "Once per order" })
659
675
  ] })
660
676
  ]
661
677
  }
@@ -689,6 +705,30 @@ const CouponForm = ({
689
705
  )
690
706
  ] })
691
707
  ] }),
708
+ (allocation === "each" || allocation === "once") && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
709
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Max Quantity" }),
710
+ /* @__PURE__ */ jsxRuntime.jsx(
711
+ reactHookForm.Controller,
712
+ {
713
+ name: "max_quantity",
714
+ control,
715
+ render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
716
+ ui.Input,
717
+ {
718
+ type: "number",
719
+ min: 1,
720
+ step: 1,
721
+ value: field.value ?? "",
722
+ onChange: (e) => field.onChange(
723
+ e.target.value === "" ? void 0 : Number(e.target.value)
724
+ ),
725
+ disabled
726
+ }
727
+ )
728
+ }
729
+ ),
730
+ errors.max_quantity && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.max_quantity.message })
731
+ ] }) }),
692
732
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2", children: [
693
733
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", type: "button", onClick: onCancel, children: "Cancel" }),
694
734
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { type: "submit", disabled, children: "Save Coupon" })
@@ -1046,7 +1086,9 @@ const CampaignImageUploader = ({
1046
1086
  const newImageUrl = imageType === "image" ? (_a = result.campaign_detail) == null ? void 0 : _a.image_url : (_b = result.campaign_detail) == null ? void 0 : _b.thumbnail_url;
1047
1087
  setDisplayImage(newImageUrl);
1048
1088
  setPreviewUrl(null);
1049
- onSuccess == null ? void 0 : onSuccess();
1089
+ if (onSuccess) {
1090
+ await onSuccess();
1091
+ }
1050
1092
  setTimeout(() => {
1051
1093
  onClose();
1052
1094
  }, 1e3);
@@ -1078,7 +1120,9 @@ const CampaignImageUploader = ({
1078
1120
  if (response.ok) {
1079
1121
  setDisplayImage(null);
1080
1122
  setPreviewUrl(null);
1081
- onSuccess == null ? void 0 : onSuccess();
1123
+ if (onSuccess) {
1124
+ await onSuccess();
1125
+ }
1082
1126
  setTimeout(() => {
1083
1127
  onClose();
1084
1128
  }, 500);
@@ -1570,7 +1614,7 @@ const CampaignDetailForm = ({
1570
1614
  ] });
1571
1615
  };
1572
1616
  const CouponDetail = () => {
1573
- var _a, _b, _c, _d, _e, _f, _g;
1617
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1574
1618
  const { id } = reactRouterDom.useParams();
1575
1619
  const navigate = reactRouterDom.useNavigate();
1576
1620
  const [isEditing, setIsEditing] = react.useState(false);
@@ -1594,7 +1638,8 @@ const CouponDetail = () => {
1594
1638
  starts_at: campaign.starts_at ? dayjs__default.default(campaign.starts_at).format("YYYY-MM-DDTHH:mm") : void 0,
1595
1639
  ends_at: campaign.ends_at ? dayjs__default.default(campaign.ends_at).format("YYYY-MM-DDTHH:mm") : void 0,
1596
1640
  allocation: ((_e = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _e.allocation) === "total" ? "across" : ((_f = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _f.allocation) ?? "across",
1597
- target_type: ((_g = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _g.target_type) ?? "order"
1641
+ target_type: ((_g = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _g.target_type) ?? "order",
1642
+ max_quantity: ((_h = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _h.max_quantity) ?? void 0
1598
1643
  };
1599
1644
  const handleSubmit = async (formData) => {
1600
1645
  var _a2, _b2;
@@ -426,8 +426,9 @@ const couponSchema = z.object({
426
426
  currency_code: z.string().optional(),
427
427
  starts_at: z.string().min(1, "Start date is required"),
428
428
  ends_at: z.string().min(1, "End date is required"),
429
- allocation: z.enum(["each", "across"]).optional(),
430
- target_type: z.enum(["order", "items"]).optional()
429
+ allocation: z.enum(["each", "once", "across"]).optional(),
430
+ target_type: z.enum(["order", "items"]).optional(),
431
+ max_quantity: z.number().int("Max quantity must be an integer").positive("Max quantity must be at least 1").optional()
431
432
  }).superRefine((data, ctx) => {
432
433
  if (new Date(data.ends_at) < new Date(data.starts_at)) {
433
434
  ctx.addIssue({
@@ -443,6 +444,14 @@ const couponSchema = z.object({
443
444
  message: "Currency is required for fixed discount"
444
445
  });
445
446
  }
447
+ const requiresMaxQuantity = data.allocation === "each" || data.allocation === "once";
448
+ if (requiresMaxQuantity && !data.max_quantity) {
449
+ ctx.addIssue({
450
+ code: z.ZodIssueCode.custom,
451
+ path: ["max_quantity"],
452
+ message: "Max quantity is required when allocation is Each Item or Once"
453
+ });
454
+ }
446
455
  });
447
456
  const CouponForm = ({
448
457
  initialData,
@@ -470,12 +479,14 @@ const CouponForm = ({
470
479
  starts_at: (initialData == null ? void 0 : initialData.starts_at) ?? dayjs().startOf("day").format("YYYY-MM-DDTHH:mm"),
471
480
  ends_at: (initialData == null ? void 0 : initialData.ends_at) ?? dayjs().endOf("day").format("YYYY-MM-DDTHH:mm"),
472
481
  allocation: (initialData == null ? void 0 : initialData.allocation) === "total" ? "across" : (initialData == null ? void 0 : initialData.allocation) ?? "across",
473
- target_type: (initialData == null ? void 0 : initialData.target_type) ?? "order"
482
+ target_type: (initialData == null ? void 0 : initialData.target_type) ?? "order",
483
+ max_quantity: (initialData == null ? void 0 : initialData.max_quantity) ?? 1
474
484
  }
475
485
  });
476
486
  const discountType = watch("discount_type");
477
487
  const startsAt = watch("starts_at");
478
488
  const endsAt = watch("ends_at");
489
+ const allocation = watch("allocation");
479
490
  const handleDateTimeChange = (field, type, value) => {
480
491
  const currentValue = watch(field);
481
492
  if (type === "date") {
@@ -487,7 +498,11 @@ const CouponForm = ({
487
498
  }
488
499
  };
489
500
  const onFormSubmit = (data) => {
490
- onSubmit(data);
501
+ const shouldIncludeMaxQuantity = data.allocation === "each" || data.allocation === "once";
502
+ onSubmit({
503
+ ...data,
504
+ max_quantity: shouldIncludeMaxQuantity ? data.max_quantity : void 0
505
+ });
491
506
  };
492
507
  const onFormError = () => {
493
508
  const errorMessages = Object.values(errors).map((err) => err == null ? void 0 : err.message).filter(Boolean).join(", ");
@@ -649,7 +664,8 @@ const CouponForm = ({
649
664
  /* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select allocation" }) }),
650
665
  /* @__PURE__ */ jsxs(Select.Content, { children: [
651
666
  /* @__PURE__ */ jsx(Select.Item, { value: "across", children: "Across Order" }),
652
- /* @__PURE__ */ jsx(Select.Item, { value: "each", children: "Each Item" })
667
+ /* @__PURE__ */ jsx(Select.Item, { value: "each", children: "Each Item" }),
668
+ /* @__PURE__ */ jsx(Select.Item, { value: "once", children: "Once per order" })
653
669
  ] })
654
670
  ]
655
671
  }
@@ -683,6 +699,30 @@ const CouponForm = ({
683
699
  )
684
700
  ] })
685
701
  ] }),
702
+ (allocation === "each" || allocation === "once") && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
703
+ /* @__PURE__ */ jsx(Label, { children: "Max Quantity" }),
704
+ /* @__PURE__ */ jsx(
705
+ Controller,
706
+ {
707
+ name: "max_quantity",
708
+ control,
709
+ render: ({ field }) => /* @__PURE__ */ jsx(
710
+ Input,
711
+ {
712
+ type: "number",
713
+ min: 1,
714
+ step: 1,
715
+ value: field.value ?? "",
716
+ onChange: (e) => field.onChange(
717
+ e.target.value === "" ? void 0 : Number(e.target.value)
718
+ ),
719
+ disabled
720
+ }
721
+ )
722
+ }
723
+ ),
724
+ errors.max_quantity && /* @__PURE__ */ jsx("p", { className: "text-red-500 text-sm mt-1", children: errors.max_quantity.message })
725
+ ] }) }),
686
726
  /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
687
727
  /* @__PURE__ */ jsx(Button, { variant: "secondary", type: "button", onClick: onCancel, children: "Cancel" }),
688
728
  /* @__PURE__ */ jsx(Button, { type: "submit", disabled, children: "Save Coupon" })
@@ -1040,7 +1080,9 @@ const CampaignImageUploader = ({
1040
1080
  const newImageUrl = imageType === "image" ? (_a = result.campaign_detail) == null ? void 0 : _a.image_url : (_b = result.campaign_detail) == null ? void 0 : _b.thumbnail_url;
1041
1081
  setDisplayImage(newImageUrl);
1042
1082
  setPreviewUrl(null);
1043
- onSuccess == null ? void 0 : onSuccess();
1083
+ if (onSuccess) {
1084
+ await onSuccess();
1085
+ }
1044
1086
  setTimeout(() => {
1045
1087
  onClose();
1046
1088
  }, 1e3);
@@ -1072,7 +1114,9 @@ const CampaignImageUploader = ({
1072
1114
  if (response.ok) {
1073
1115
  setDisplayImage(null);
1074
1116
  setPreviewUrl(null);
1075
- onSuccess == null ? void 0 : onSuccess();
1117
+ if (onSuccess) {
1118
+ await onSuccess();
1119
+ }
1076
1120
  setTimeout(() => {
1077
1121
  onClose();
1078
1122
  }, 500);
@@ -1564,7 +1608,7 @@ const CampaignDetailForm = ({
1564
1608
  ] });
1565
1609
  };
1566
1610
  const CouponDetail = () => {
1567
- var _a, _b, _c, _d, _e, _f, _g;
1611
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1568
1612
  const { id } = useParams();
1569
1613
  const navigate = useNavigate();
1570
1614
  const [isEditing, setIsEditing] = useState(false);
@@ -1588,7 +1632,8 @@ const CouponDetail = () => {
1588
1632
  starts_at: campaign.starts_at ? dayjs(campaign.starts_at).format("YYYY-MM-DDTHH:mm") : void 0,
1589
1633
  ends_at: campaign.ends_at ? dayjs(campaign.ends_at).format("YYYY-MM-DDTHH:mm") : void 0,
1590
1634
  allocation: ((_e = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _e.allocation) === "total" ? "across" : ((_f = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _f.allocation) ?? "across",
1591
- target_type: ((_g = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _g.target_type) ?? "order"
1635
+ target_type: ((_g = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _g.target_type) ?? "order",
1636
+ max_quantity: ((_h = promotion == null ? void 0 : promotion.application_method) == null ? void 0 : _h.max_quantity) ?? void 0
1592
1637
  };
1593
1638
  const handleSubmit = async (formData) => {
1594
1639
  var _a2, _b2;
@@ -66,6 +66,7 @@ const PUT = async (req, res) => {
66
66
  currency_code: body.currency_code,
67
67
  allocation: body.allocation,
68
68
  target_type: body.target_type,
69
+ max_quantity: body.max_quantity,
69
70
  },
70
71
  });
71
72
  res.status(200).json({
@@ -73,4 +74,4 @@ const PUT = async (req, res) => {
73
74
  });
74
75
  };
75
76
  exports.PUT = PUT;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvdXBvbnMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBK0U7QUFDL0UscURBQWlFO0FBQ2pFLDhDQUFvQjtBQUNwQixvQ0FBc0Q7QUFDdEQscUhBQWtIO0FBQ2xILDJFQUE4RTtBQUU5RSxzR0FBaUc7QUFFakcsTUFBTSxrQkFBa0IsR0FBRyxrQ0FBMEIsQ0FBQyxVQUFVLENBQUM7SUFDL0QsSUFBSSxFQUFFLGFBQUMsQ0FBQyxPQUFPLENBQUMscUNBQWdCLENBQUMsTUFBTSxDQUFDO0NBQ3pDLENBQUMsQ0FBQztBQUVJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixNQUFNLGdCQUFnQixHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxNQUFNLDJCQUEyQixHQUMvQixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIseUNBQXNCLENBQUMsQ0FBQztJQUV6RSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRTtZQUMzRCxTQUFTLEVBQUUsQ0FBQyxZQUFZLEVBQUUsK0JBQStCLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsMkJBQTJCLENBQzVCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUNsQixNQUFNLDJCQUEyQixDQUFDLHVCQUF1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
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvdXBvbnMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBK0U7QUFDL0UscURBQWlFO0FBQ2pFLDhDQUFvQjtBQUNwQixvQ0FBc0Q7QUFDdEQscUhBQWtIO0FBQ2xILDJFQUE4RTtBQUU5RSxzR0FBaUc7QUFFakcsTUFBTSxrQkFBa0IsR0FBRyxrQ0FBMEIsQ0FBQyxVQUFVLENBQUM7SUFDL0QsSUFBSSxFQUFFLGFBQUMsQ0FBQyxPQUFPLENBQUMscUNBQWdCLENBQUMsTUFBTSxDQUFDO0NBQ3pDLENBQUMsQ0FBQztBQUVJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixNQUFNLGdCQUFnQixHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxNQUFNLDJCQUEyQixHQUMvQixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIseUNBQXNCLENBQUMsQ0FBQztJQUV6RSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRTtZQUMzRCxTQUFTLEVBQUUsQ0FBQyxZQUFZLEVBQUUsK0JBQStCLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsMkJBQTJCLENBQzVCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUNsQixNQUFNLDJCQUEyQixDQUFDLHVCQUF1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
@@ -22,8 +22,13 @@ exports.createCouponCampaignSchema = zod_1.default
22
22
  discount_type: zod_1.default.enum(["percentage", "fixed"]),
23
23
  discount_value: zod_1.default.number().positive("Discount value must be positive"),
24
24
  currency_code: zod_1.default.string().optional(),
25
- allocation: zod_1.default.enum(["each", "across"]).optional(),
25
+ allocation: zod_1.default.enum(["each", "once", "across"]).optional(),
26
26
  target_type: zod_1.default.enum(["order", "items"]).optional(),
27
+ max_quantity: zod_1.default
28
+ .number()
29
+ .int("max_quantity must be an integer")
30
+ .positive("max_quantity must be at least 1")
31
+ .optional(),
27
32
  })
28
33
  .superRefine((data, ctx) => {
29
34
  if (data.ends_at <= data.starts_at) {
@@ -40,6 +45,14 @@ exports.createCouponCampaignSchema = zod_1.default
40
45
  path: ["currency_code"],
41
46
  });
42
47
  }
48
+ const requiresMaxQuantity = data.allocation === "each" || data.allocation === "once";
49
+ if (requiresMaxQuantity && !data.max_quantity) {
50
+ ctx.addIssue({
51
+ code: zod_1.default.ZodIssueCode.custom,
52
+ message: "max_quantity is required when allocation is 'each' or 'once'",
53
+ path: ["max_quantity"],
54
+ });
55
+ }
43
56
  });
44
57
  exports.GetCouponCampaignsSchema = (0, validators_1.createFindParams)({
45
58
  order: "-created_at",
@@ -52,6 +65,7 @@ const POST = async (req, res) => {
52
65
  const { result } = await createCouponCampaignWorkflow_1.createCouponCampaignWorkflow.run({
53
66
  input: {
54
67
  ...body,
68
+ max_quantity: body.max_quantity,
55
69
  },
56
70
  });
57
71
  res.status(200).json(result);
@@ -85,4 +99,4 @@ const GET = async (req, res) => {
85
99
  });
86
100
  };
87
101
  exports.GET = GET;
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvdXBvbnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUdtQztBQUNuQyxzRUFBeUU7QUFDekUsOENBQW9CO0FBQ3BCLG1HQUE4RjtBQUM5RixrSEFBK0c7QUFDL0csd0VBQTJFO0FBRzlELFFBQUEsMEJBQTBCLEdBQUcsYUFBQztLQUN4QyxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDM0MsV0FBVyxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQ3pELElBQUksRUFBRSxhQUFDLENBQUMsT0FBTyxDQUFDLHFDQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLENBQUM7SUFDbEQsU0FBUyxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0lBQzFCLE9BQU8sRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtJQUN4QixhQUFhLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxjQUFjLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQztJQUN0RSxhQUFhLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxVQUFVLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFB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
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvdXBvbnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUdtQztBQUNuQyxzRUFBeUU7QUFDekUsOENBQW9CO0FBQ3BCLG1HQUE4RjtBQUM5RixrSEFBK0c7QUFDL0csd0VBQTJFO0FBRzlELFFBQUEsMEJBQTBCLEdBQUcsYUFBQztLQUN4QyxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDM0MsV0FBVyxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQ3pELElBQUksRUFBRSxhQUFDLENBQUMsT0FBTyxDQUFDLHFDQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLENBQUM7SUFDbEQsU0FBUyxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0lBQzFCLE9BQU8sRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtJQUN4QixhQUFhLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxjQUFjLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQztJQUN0RSxhQUFhLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxVQUFVLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FB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
@@ -13,6 +13,11 @@ const createCouponCampaignStep = (0, workflows_sdk_1.createStep)("create-coupon-
13
13
  if (input.discount_type === "fixed" && !input.currency_code) {
14
14
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "currency_code is required for fixed discount type");
15
15
  }
16
+ const requiresMaxQuantity = (input.allocation ?? "across") === "each" ||
17
+ (input.allocation ?? "across") === "once";
18
+ if (requiresMaxQuantity && !input.max_quantity) {
19
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "max_quantity is required when allocation is set to 'each' or 'once'");
20
+ }
16
21
  const link = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.LINK);
17
22
  const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
18
23
  const campaignIdentifier = `${input.type}-${Date.now()}`;
@@ -20,6 +25,7 @@ const createCouponCampaignStep = (0, workflows_sdk_1.createStep)("create-coupon-
20
25
  let promotion;
21
26
  let customCampaignType;
22
27
  try {
28
+ const allocation = input.allocation ?? "across";
23
29
  const { result: [createdCampaign], } = await core_flows_1.createCampaignsWorkflow.run({
24
30
  input: {
25
31
  campaignsData: [
@@ -45,12 +51,14 @@ const createCouponCampaignStep = (0, workflows_sdk_1.createStep)("create-coupon-
45
51
  campaign_id: campaign.id,
46
52
  application_method: {
47
53
  target_type: input.target_type ?? "order",
48
- allocation: input.allocation ?? "across",
54
+ // Medusa types currently miss the "once" allocation option
55
+ allocation: allocation,
49
56
  type: input.discount_type,
50
57
  value: input.discount_value,
51
58
  currency_code: input.discount_type === "fixed" && input.currency_code
52
59
  ? input.currency_code
53
60
  : undefined,
61
+ max_quantity: requiresMaxQuantity ? input.max_quantity : undefined,
54
62
  },
55
63
  },
56
64
  ],
@@ -102,4 +110,4 @@ exports.createCouponCampaignWorkflow = (0, workflows_sdk_1.createWorkflow)("crea
102
110
  const couponCampaign = createCouponCampaignStep(input);
103
111
  return new workflows_sdk_1.WorkflowResponse(couponCampaign);
104
112
  });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ291cG9uQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL2NyZWF0ZUNvdXBvbkNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBT2hELHFEQUltQztBQUNuQyxxRUFLMkM7QUFDM0MsNERBS3FDO0FBQ3JDLHFFQUF3RTtBQWtCeEUsTUFBTSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsS0FBZ0MsRUFBRSxFQUFFO0lBQ3pDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1DQUFtQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbURBQW1ELENBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFFekUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFFekQsSUFBSSxRQUFpQyxD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
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ291cG9uQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL2NyZWF0ZUNvdXBvbkNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBT2hELHFEQUltQztBQUNuQyxxRUFLMkM7QUFDM0MsNERBS3FDO0FBQ3JDLHFFQUF3RTtBQW1CeEUsTUFBTSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsS0FBZ0MsRUFBRSxFQUFFO0lBQ3pDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1DQUFtQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbURBQW1ELENBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FDdkIsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxLQUFLLE1BQU07UUFDekMsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUU1QyxJQUFJLG1CQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZ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
@@ -57,7 +57,7 @@ const createCustomCampaignStep = (0, workflows_sdk_1.createStep)("create-custom-
57
57
  promotions = _promotions;
58
58
  const productPromotionMap = new Map();
59
59
  promotions.forEach((promotion) => {
60
- const productId = promotion.code?.split("-").at(-1);
60
+ const productId = promotion.code?.split("-").pop();
61
61
  if (!productId) {
62
62
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid product id");
63
63
  }
@@ -127,4 +127,4 @@ exports.createCustomCampaignWorkflow = (0, workflows_sdk_1.createWorkflow)("crea
127
127
  const customCampaign = createCustomCampaignStep(data);
128
128
  return new workflows_sdk_1.WorkflowResponse(customCampaign);
129
129
  });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL2NyZWF0ZUN1c3RvbUNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBT2hELHFEQUltQztBQUNuQyxxRUFLMkM7QUFDM0MsNERBS3FDO0FBRXJDLHFFQUF3RTtBQUd4RSxNQUFNLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDekMsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxJQUFvQixFQUFFLEVBQUU7SUFDN0IsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFDekUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFFeEQsSUFBSSxRQUFpQyxDQUFDO0lBQ3RDLElBQUksVUFBc0MsQ0FBQztJQUMzQyxJQUFJLGtCQUlTLENBQUM7SUFDZCxJQUFJLG1CQUlTLENBQUM7SUFFZCxNQUFNLEVBQ0osTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQ3BCLEdBQUcsTUFBTSxvQ0FBdUIsQ0FBQyxHQUFHLENBQUM7UUFDcEMsS0FBSyxFQUFFO1lBQ0wsYUFBYSxFQUFFO2dCQUNiO29CQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixtQkFBbUIsRUFBRSxrQkFBa0I7b0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxJ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
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL2NyZWF0ZUN1c3RvbUNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBT2hELHFEQUltQztBQUNuQyxxRUFLMkM7QUFDM0MsNERBS3FDO0FBRXJDLHFFQUF3RTtBQUd4RSxNQUFNLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDekMsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxJQUFvQixFQUFFLEVBQUU7SUFDN0IsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFDekUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFFeEQsSUFBSSxRQUFpQyxDQUFDO0lBQ3RDLElBQUksVUFBc0MsQ0FBQztJQUMzQyxJQUFJLGtCQUlTLENBQUM7SUFDZCxJQUFJLG1CQUlTLENBQUM7SUFFZCxNQUFNLEVBQ0osTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQ3BCLEdBQUcsTUFBTSxvQ0FBdUIsQ0FBQyxHQUFHLENBQUM7UUFDcEMsS0FBSyxFQUFFO1lBQ0wsYUFBYSxFQUFFO2dCQUNiO29CQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixtQkFBbUIsRUFBRSxrQkFBa0I7b0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxJ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
@@ -12,6 +12,11 @@ const updateCouponCampaignStep = (0, workflows_sdk_1.createStep)("update-coupon-
12
12
  if (input.discount_type === "fixed" && !input.currency_code) {
13
13
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "currency_code is required for fixed discount type");
14
14
  }
15
+ const requiresMaxQuantity = (input.allocation ?? "across") === "each" ||
16
+ (input.allocation ?? "across") === "once";
17
+ if (requiresMaxQuantity && !input.max_quantity) {
18
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "max_quantity is required when allocation is set to 'each' or 'once'");
19
+ }
15
20
  const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
16
21
  const promotions = await promotionService.listPromotions({
17
22
  campaign_id: input.id,
@@ -33,17 +38,20 @@ const updateCouponCampaignStep = (0, workflows_sdk_1.createStep)("update-coupon-
33
38
  ],
34
39
  },
35
40
  });
41
+ const allocation = input.allocation ?? "across";
36
42
  const updateData = {
37
43
  id: promotion.id,
38
44
  code: input.code,
39
45
  application_method: {
40
46
  type: input.discount_type,
41
47
  target_type: input.target_type ?? "order",
42
- allocation: input.allocation ?? "across",
48
+ // Medusa types currently miss the "once" allocation option
49
+ allocation: allocation,
43
50
  value: input.discount_value,
44
51
  currency_code: input.discount_type === "fixed" && input.currency_code
45
52
  ? input.currency_code
46
53
  : undefined,
54
+ max_quantity: requiresMaxQuantity ? input.max_quantity : undefined,
47
55
  },
48
56
  };
49
57
  await promotionService.updatePromotions([updateData]);
@@ -56,4 +64,4 @@ exports.updateCouponCampaignWorkflow = (0, workflows_sdk_1.createWorkflow)("upda
56
64
  const result = updateCouponCampaignStep(input);
57
65
  return new workflows_sdk_1.WorkflowResponse(result);
58
66
  });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ291cG9uQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL3VwZGF0ZUNvdXBvbkNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBS2hELHFEQUFpRTtBQUNqRSxxRUFLMkM7QUFDM0MsNERBQXNFO0FBZ0J0RSxNQUFNLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDekMsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxLQUFnQyxFQUFFLEVBQUU7SUFDekMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbUNBQW1DLENBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixtREFBbUQsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5RCxNQUFNLFVBQVUsR0FBRyxNQUFNLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUN2RCxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7S0FDZixDQUFDLENBQUM7SUFFVixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLHlDQUF5QyxDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoQyxNQUFNLG9DQUF1QixDQUFDLEdBQUcsQ0FBQztRQUNoQyxLQUFLLEVBQUU7WUFDTCxhQUFhLEVBQUU7Z0JBQ2I7b0JBQ0UsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNaLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO29CQUM5QixTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQ0w7YUFDOUI7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUF1QjtRQUNyQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLGtCQUFrQixFQUFFO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsYUFBYTtZQUN6QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxPQUFPO1lBQ3pDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLFFBQVE7WUFDeEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQzNCLGFBQWEsRUFDWCxLQUFLLENBQUMsYUFBYSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsYUFBYTtnQkFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUNyQixDQUFDLENBQUMsU0FBUztTQUNoQjtLQUNGLENBQUM7SUFFRixNQUFNLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV0RCxPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDckIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0tBQzNCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSw0QkFBNEIsR0FBRyxJQUFBLDhCQUFjLEVBQ3hELHdCQUF3QixFQUN4QixDQUFDLEtBQWdDLEVBQUUsRUFBRTtJQUNuQyxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUNGLENBQUMifQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ291cG9uQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL3VwZGF0ZUNvdXBvbkNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBS2hELHFEQUFpRTtBQUNqRSxxRUFLMkM7QUFDM0MsNERBQXNFO0FBaUJ0RSxNQUFNLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDekMsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxLQUFnQyxFQUFFLEVBQUU7SUFDekMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbUNBQW1DLENBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixtREFBbUQsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUN2QixDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLEtBQUssTUFBTTtRQUN6QyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDO0lBRTVDLElBQUksbUJBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUVB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
@@ -93,7 +93,7 @@ const updateCustomFlashSaleStep = (0, workflows_sdk_1.createStep)("update-custom
93
93
  });
94
94
  const productPromotionMap = new Map();
95
95
  createdPromotions.forEach((promotion) => {
96
- const productId = promotion.code?.split("-").at(-1);
96
+ const productId = promotion.code?.split("-").pop();
97
97
  if (!productId) {
98
98
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid product id");
99
99
  }
@@ -112,4 +112,4 @@ exports.updateCustomFlashSaleWorkflow = (0, workflows_sdk_1.createWorkflow)("upd
112
112
  const updatedFlashSale = updateCustomFlashSaleStep(data);
113
113
  return new workflows_sdk_1.WorkflowResponse(updatedFlashSale);
114
114
  });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ3VzdG9tRmxhc2hTYWxlV29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2N1c3RvbS1jYW1wYWlnbi91cGRhdGVDdXN0b21GbGFzaFNhbGVXb3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBZ0Q7QUFPaEQscURBQWlFO0FBQ2pFLHFFQUsyQztBQUMzQyw0REFLcUM7QUFFckMscUVBQXdFO0FBT3hFLE1BQU0seUJBQXlCLEdBQUcsSUFBQSwwQkFBVSxFQUMxQywrQkFBK0IsRUFDL0IsS0FBSyxFQUFFLElBQTBCLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBRTVCLE1BQU0sMkJBQTJCLEdBQy9CLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix5Q0FBc0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV0RSx3Q0FBd0M7SUFDeEMsTUFBTSxvQkFBb0IsR0FDeEIsTUFBTSwyQkFBMkIsQ0FBQyx3QkFBd0IsQ0FBQztRQUN6RCxXQUFXLEVBQUUsV0FBVztLQUN6QixDQUFDLENBQUM7SUFFTCx1REFBdUQ7SUFDdkQsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLEdBQUcsQ0FDbEQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FB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
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ3VzdG9tRmxhc2hTYWxlV29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2N1c3RvbS1jYW1wYWlnbi91cGRhdGVDdXN0b21GbGFzaFNhbGVXb3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBZ0Q7QUFPaEQscURBQWlFO0FBQ2pFLHFFQUsyQztBQUMzQyw0REFLcUM7QUFFckMscUVBQXdFO0FBT3hFLE1BQU0seUJBQXlCLEdBQUcsSUFBQSwwQkFBVSxFQUMxQywrQkFBK0IsRUFDL0IsS0FBSyxFQUFFLElBQTBCLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBRTVCLE1BQU0sMkJBQTJCLEdBQy9CLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix5Q0FBc0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV0RSx3Q0FBd0M7SUFDeEMsTUFBTSxvQkFBb0IsR0FDeEIsTUFBTSwyQkFBMkIsQ0FBQyx3QkFBd0IsQ0FBQztRQUN6RCxXQUFXLEVBQUUsV0FBVztLQUN6QixDQUFDLENBQUM7SUFFTCx1REFBdUQ7SUFDdkQsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLEdBQUcsQ0FDbEQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-campaign",
3
- "version": "1.5.5",
3
+ "version": "1.5.7",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",
@@ -30,28 +30,28 @@
30
30
  "prepublishOnly": "medusa plugin:build"
31
31
  },
32
32
  "devDependencies": {
33
- "@hookform/resolvers": "^3.10.0",
34
- "@medusajs/admin-sdk": "2.11.2",
35
- "@medusajs/admin-shared": "2.11.2",
36
- "@medusajs/cli": "2.11.2",
37
- "@medusajs/framework": "2.11.2",
38
- "@medusajs/icons": "^2.11.2",
39
- "@medusajs/medusa": "2.11.2",
40
- "@medusajs/test-utils": "2.11.2",
41
- "@medusajs/ui": "^4.0.17",
42
- "@swc/core": "1.5.7",
43
- "@types/lodash": "^4",
44
- "@types/node": "^20.0.0",
45
- "@types/react": "^18.3.2",
46
- "@types/react-dom": "^18.2.25",
33
+ "@hookform/resolvers": "^5.2.2",
34
+ "@medusajs/admin-sdk": "2.11.3",
35
+ "@medusajs/admin-shared": "2.11.3",
36
+ "@medusajs/cli": "2.11.3",
37
+ "@medusajs/framework": "2.11.3",
38
+ "@medusajs/icons": "^2.11.3",
39
+ "@medusajs/medusa": "2.11.3",
40
+ "@medusajs/test-utils": "2.11.3",
41
+ "@medusajs/ui": "^4.0.27",
42
+ "@swc/core": "1.15.0",
43
+ "@types/lodash": "^4.17.20",
44
+ "@types/node": "^24.10.0",
45
+ "@types/react": "^19.2.2",
46
+ "@types/react-dom": "^19.2.2",
47
47
  "prop-types": "^15.8.1",
48
- "react": "^18.2.0",
49
- "react-dom": "^18.2.0",
48
+ "react": "^19.2.0",
49
+ "react-dom": "^19.2.0",
50
50
  "react-hook-form": "^7.66.0",
51
51
  "ts-node": "^10.9.2",
52
- "typescript": "^5.6.2",
53
- "vite": "^5.2.11",
54
- "yalc": "^1.0.0-pre.53"
52
+ "typescript": "^5.9.3",
53
+ "vite": "^7.2.2",
54
+ "yalc": "1.0.0-pre.53"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "@medusajs/admin-sdk": "2.11.2",
@@ -67,10 +67,10 @@
67
67
  "node": ">=20"
68
68
  },
69
69
  "dependencies": {
70
- "axios": "^1.12.2",
71
- "dayjs": "^1.11.13",
70
+ "axios": "^1.13.2",
71
+ "dayjs": "^1.11.19",
72
72
  "lodash": "^4.17.21",
73
73
  "multer": "^2.0.2",
74
- "zod": "^4.1.5"
74
+ "zod": "^4.1.12"
75
75
  }
76
76
  }
@@ -24,8 +24,13 @@ const couponSchema = z
24
24
  currency_code: z.string().optional(),
25
25
  starts_at: z.string().min(1, "Start date is required"),
26
26
  ends_at: z.string().min(1, "End date is required"),
27
- allocation: z.enum(["each", "across"]).optional(),
27
+ allocation: z.enum(["each", "once", "across"]).optional(),
28
28
  target_type: z.enum(["order", "items"]).optional(),
29
+ max_quantity: z
30
+ .number()
31
+ .int("Max quantity must be an integer")
32
+ .positive("Max quantity must be at least 1")
33
+ .optional(),
29
34
  })
30
35
  .superRefine((data, ctx) => {
31
36
  if (new Date(data.ends_at) < new Date(data.starts_at)) {
@@ -43,6 +48,18 @@ const couponSchema = z
43
48
  message: "Currency is required for fixed discount",
44
49
  });
45
50
  }
51
+
52
+ const requiresMaxQuantity =
53
+ data.allocation === "each" || data.allocation === "once";
54
+
55
+ if (requiresMaxQuantity && !data.max_quantity) {
56
+ ctx.addIssue({
57
+ code: z.ZodIssueCode.custom,
58
+ path: ["max_quantity"],
59
+ message:
60
+ "Max quantity is required when allocation is Each Item or Once",
61
+ });
62
+ }
46
63
  });
47
64
 
48
65
  export type CouponFormData = z.infer<typeof couponSchema>;
@@ -88,12 +105,14 @@ export const CouponForm: FC<CouponFormProps> = ({
88
105
  ? "across"
89
106
  : initialData?.allocation ?? "across",
90
107
  target_type: initialData?.target_type ?? "order",
108
+ max_quantity: initialData?.max_quantity ?? 1,
91
109
  },
92
110
  });
93
111
 
94
112
  const discountType = watch("discount_type");
95
113
  const startsAt = watch("starts_at");
96
114
  const endsAt = watch("ends_at");
115
+ const allocation = watch("allocation");
97
116
 
98
117
  const handleDateTimeChange = (
99
118
  field: "starts_at" | "ends_at",
@@ -118,7 +137,12 @@ export const CouponForm: FC<CouponFormProps> = ({
118
137
  };
119
138
 
120
139
  const onFormSubmit = (data: CouponFormData) => {
121
- onSubmit(data);
140
+ const shouldIncludeMaxQuantity =
141
+ data.allocation === "each" || data.allocation === "once";
142
+ onSubmit({
143
+ ...data,
144
+ max_quantity: shouldIncludeMaxQuantity ? data.max_quantity : undefined,
145
+ });
122
146
  };
123
147
 
124
148
  const onFormError = () => {
@@ -311,6 +335,7 @@ export const CouponForm: FC<CouponFormProps> = ({
311
335
  <Select.Content>
312
336
  <Select.Item value="across">Across Order</Select.Item>
313
337
  <Select.Item value="each">Each Item</Select.Item>
338
+ <Select.Item value="once">Once per order</Select.Item>
314
339
  </Select.Content>
315
340
  </Select>
316
341
  )}
@@ -341,6 +366,37 @@ export const CouponForm: FC<CouponFormProps> = ({
341
366
  </div>
342
367
  </div>
343
368
 
369
+ {(allocation === "each" || allocation === "once") && (
370
+ <div className="grid grid-cols-2 gap-4">
371
+ <div className="space-y-2">
372
+ <Label>Max Quantity</Label>
373
+ <Controller
374
+ name="max_quantity"
375
+ control={control}
376
+ render={({ field }) => (
377
+ <Input
378
+ type="number"
379
+ min={1}
380
+ step={1}
381
+ value={field.value ?? ""}
382
+ onChange={(e) =>
383
+ field.onChange(
384
+ e.target.value === "" ? undefined : Number(e.target.value),
385
+ )
386
+ }
387
+ disabled={disabled}
388
+ />
389
+ )}
390
+ />
391
+ {errors.max_quantity && (
392
+ <p className="text-red-500 text-sm mt-1">
393
+ {errors.max_quantity.message}
394
+ </p>
395
+ )}
396
+ </div>
397
+ </div>
398
+ )}
399
+
344
400
  <div className="flex justify-end gap-2">
345
401
  <Button variant="secondary" type="button" onClick={onCancel}>
346
402
  Cancel
@@ -1,10 +1,5 @@
1
1
  import { useState, useCallback } from "react";
2
- import {
3
- PhotoSolid,
4
- Trash,
5
- CloudArrowUp,
6
- X,
7
- } from "@medusajs/icons";
2
+ import { PhotoSolid, Trash, CloudArrowUp, X } from "@medusajs/icons";
8
3
  import { Button, Heading, Text, Alert, clx } from "@medusajs/ui";
9
4
 
10
5
  interface CampaignImageUploaderProps {
@@ -72,7 +67,7 @@ export const CampaignImageUploader = ({
72
67
  method: "POST",
73
68
  body: formData,
74
69
  credentials: "include",
75
- }
70
+ },
76
71
  );
77
72
 
78
73
  if (response.ok) {
@@ -84,8 +79,10 @@ export const CampaignImageUploader = ({
84
79
  setDisplayImage(newImageUrl);
85
80
  setPreviewUrl(null);
86
81
 
87
- // Call onSuccess callback if provided
88
- onSuccess?.();
82
+ // Call onSuccess callback first to refresh parent data
83
+ if (onSuccess) {
84
+ await onSuccess();
85
+ }
89
86
 
90
87
  // Show success for a moment before closing
91
88
  setTimeout(() => {
@@ -117,15 +114,17 @@ export const CampaignImageUploader = ({
117
114
  {
118
115
  method: "DELETE",
119
116
  credentials: "include",
120
- }
117
+ },
121
118
  );
122
119
 
123
120
  if (response.ok) {
124
121
  setDisplayImage(null);
125
122
  setPreviewUrl(null);
126
123
 
127
- // Call onSuccess callback if provided
128
- onSuccess?.();
124
+ // Call onSuccess callback first to refresh parent data
125
+ if (onSuccess) {
126
+ await onSuccess();
127
+ }
129
128
 
130
129
  setTimeout(() => {
131
130
  onClose();
@@ -206,7 +205,7 @@ export const CampaignImageUploader = ({
206
205
  alt={`Campaign ${imageType}`}
207
206
  className={clx(
208
207
  "w-full object-contain",
209
- isThumbnail ? "h-32" : "h-64"
208
+ isThumbnail ? "h-32" : "h-64",
210
209
  )}
211
210
  />
212
211
  {isUploading && (
@@ -244,7 +243,7 @@ export const CampaignImageUploader = ({
244
243
  isDragging
245
244
  ? "border-ui-border-interactive bg-ui-bg-highlight"
246
245
  : "border-ui-border-base bg-ui-bg-subtle",
247
- !isUploading && "cursor-pointer"
246
+ !isUploading && "cursor-pointer",
248
247
  )}
249
248
  onDragEnter={handleDragEnter}
250
249
  onDragLeave={handleDragLeave}
@@ -62,6 +62,7 @@ const CouponDetail: FC = () => {
62
62
  ? "across"
63
63
  : promotion?.application_method?.allocation ?? "across",
64
64
  target_type: promotion?.application_method?.target_type ?? "order",
65
+ max_quantity: promotion?.application_method?.max_quantity ?? undefined,
65
66
  };
66
67
 
67
68
  const handleSubmit = async (formData: CouponFormData) => {
@@ -89,6 +89,7 @@ export const PUT = async (
89
89
  currency_code: body.currency_code,
90
90
  allocation: body.allocation,
91
91
  target_type: body.target_type,
92
+ max_quantity: body.max_quantity,
92
93
  },
93
94
  });
94
95
 
@@ -21,8 +21,13 @@ export const createCouponCampaignSchema = z
21
21
  discount_type: z.enum(["percentage", "fixed"]),
22
22
  discount_value: z.number().positive("Discount value must be positive"),
23
23
  currency_code: z.string().optional(),
24
- allocation: z.enum(["each", "across"]).optional(),
24
+ allocation: z.enum(["each", "once", "across"]).optional(),
25
25
  target_type: z.enum(["order", "items"]).optional(),
26
+ max_quantity: z
27
+ .number()
28
+ .int("max_quantity must be an integer")
29
+ .positive("max_quantity must be at least 1")
30
+ .optional(),
26
31
  })
27
32
  .superRefine((data, ctx) => {
28
33
  if (data.ends_at <= data.starts_at) {
@@ -40,6 +45,17 @@ export const createCouponCampaignSchema = z
40
45
  path: ["currency_code"],
41
46
  });
42
47
  }
48
+
49
+ const requiresMaxQuantity =
50
+ data.allocation === "each" || data.allocation === "once";
51
+
52
+ if (requiresMaxQuantity && !data.max_quantity) {
53
+ ctx.addIssue({
54
+ code: z.ZodIssueCode.custom,
55
+ message: "max_quantity is required when allocation is 'each' or 'once'",
56
+ path: ["max_quantity"],
57
+ });
58
+ }
43
59
  });
44
60
 
45
61
  export type CouponCampaignInput = z.infer<typeof createCouponCampaignSchema>;
@@ -64,6 +80,7 @@ export const POST = async (
64
80
  const { result } = await createCouponCampaignWorkflow.run({
65
81
  input: {
66
82
  ...body,
83
+ max_quantity: body.max_quantity,
67
84
  },
68
85
  });
69
86
 
@@ -36,8 +36,9 @@ export type CreateCouponCampaignInput = {
36
36
  discount_type: "percentage" | "fixed";
37
37
  discount_value: number;
38
38
  currency_code?: string | null;
39
- allocation?: "each" | "across";
39
+ allocation?: "each" | "once" | "across";
40
40
  target_type?: "order" | "items";
41
+ max_quantity?: number;
41
42
  };
42
43
 
43
44
  const createCouponCampaignStep = createStep(
@@ -57,6 +58,17 @@ const createCouponCampaignStep = createStep(
57
58
  );
58
59
  }
59
60
 
61
+ const requiresMaxQuantity =
62
+ (input.allocation ?? "across") === "each" ||
63
+ (input.allocation ?? "across") === "once";
64
+
65
+ if (requiresMaxQuantity && !input.max_quantity) {
66
+ throw new MedusaError(
67
+ MedusaError.Types.INVALID_DATA,
68
+ "max_quantity is required when allocation is set to 'each' or 'once'",
69
+ );
70
+ }
71
+
60
72
  const link = container.resolve(ContainerRegistrationKeys.LINK);
61
73
  const customCampaignModuleService =
62
74
  container.resolve<CustomCampaignModuleService>(CUSTOM_CAMPAIGN_MODULE);
@@ -71,10 +83,11 @@ const createCouponCampaignStep = createStep(
71
83
  >[number]
72
84
  | undefined;
73
85
 
74
- try {
75
- const {
76
- result: [createdCampaign],
77
- } = await createCampaignsWorkflow.run({
86
+ try {
87
+ const allocation = input.allocation ?? "across";
88
+ const {
89
+ result: [createdCampaign],
90
+ } = await createCampaignsWorkflow.run({
78
91
  input: {
79
92
  campaignsData: [
80
93
  {
@@ -103,13 +116,15 @@ const createCouponCampaignStep = createStep(
103
116
  campaign_id: campaign.id,
104
117
  application_method: {
105
118
  target_type: input.target_type ?? "order",
106
- allocation: input.allocation ?? "across",
119
+ // Medusa types currently miss the "once" allocation option
120
+ allocation: allocation as any,
107
121
  type: input.discount_type,
108
122
  value: input.discount_value,
109
123
  currency_code:
110
124
  input.discount_type === "fixed" && input.currency_code
111
125
  ? input.currency_code
112
126
  : undefined,
127
+ max_quantity: requiresMaxQuantity ? input.max_quantity : undefined,
113
128
  } satisfies CreateApplicationMethodDTO,
114
129
  } satisfies CreatePromotionDTO,
115
130
  ],
@@ -97,7 +97,7 @@ const createCustomCampaignStep = createStep(
97
97
 
98
98
  const productPromotionMap = new Map<string, string>();
99
99
  promotions.forEach((promotion) => {
100
- const productId = promotion.code?.split("-").at(-1);
100
+ const productId = promotion.code?.split("-").pop();
101
101
  if (!productId) {
102
102
  throw new MedusaError(
103
103
  MedusaError.Types.INVALID_DATA,
@@ -22,8 +22,9 @@ export type UpdateCouponCampaignInput = {
22
22
  discount_type: "percentage" | "fixed";
23
23
  discount_value: number;
24
24
  currency_code?: string | null;
25
- allocation?: "each" | "across";
25
+ allocation?: "each" | "once" | "across";
26
26
  target_type?: "order" | "items";
27
+ max_quantity?: number;
27
28
  };
28
29
 
29
30
  const updateCouponCampaignStep = createStep(
@@ -43,6 +44,17 @@ const updateCouponCampaignStep = createStep(
43
44
  );
44
45
  }
45
46
 
47
+ const requiresMaxQuantity =
48
+ (input.allocation ?? "across") === "each" ||
49
+ (input.allocation ?? "across") === "once";
50
+
51
+ if (requiresMaxQuantity && !input.max_quantity) {
52
+ throw new MedusaError(
53
+ MedusaError.Types.INVALID_DATA,
54
+ "max_quantity is required when allocation is set to 'each' or 'once'",
55
+ );
56
+ }
57
+
46
58
  const promotionService = container.resolve(Modules.PROMOTION);
47
59
 
48
60
  const promotions = await promotionService.listPromotions({
@@ -72,18 +84,21 @@ const updateCouponCampaignStep = createStep(
72
84
  },
73
85
  });
74
86
 
87
+ const allocation = input.allocation ?? "across";
75
88
  const updateData: UpdatePromotionDTO = {
76
89
  id: promotion.id,
77
90
  code: input.code,
78
91
  application_method: {
79
92
  type: input.discount_type,
80
93
  target_type: input.target_type ?? "order",
81
- allocation: input.allocation ?? "across",
94
+ // Medusa types currently miss the "once" allocation option
95
+ allocation: allocation as any,
82
96
  value: input.discount_value,
83
97
  currency_code:
84
98
  input.discount_type === "fixed" && input.currency_code
85
99
  ? input.currency_code
86
100
  : undefined,
101
+ max_quantity: requiresMaxQuantity ? input.max_quantity : undefined,
87
102
  },
88
103
  };
89
104
 
@@ -153,7 +153,7 @@ const updateCustomFlashSaleStep = createStep(
153
153
  });
154
154
  const productPromotionMap = new Map<string, string>();
155
155
  createdPromotions.forEach((promotion) => {
156
- const productId = promotion.code?.split("-").at(-1);
156
+ const productId = promotion.code?.split("-").pop();
157
157
  if (!productId) {
158
158
  throw new MedusaError(
159
159
  MedusaError.Types.INVALID_DATA,