@medusajs/dashboard 2.10.4-preview-20251013090155 → 2.10.4-preview-20251013180156

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 (33) hide show
  1. package/dist/{add-campaign-promotions-ZQ7H3KCD.mjs → add-campaign-promotions-QDZCKCU6.mjs} +3 -3
  2. package/dist/app.js +46 -16
  3. package/dist/app.mjs +2 -2
  4. package/dist/{campaign-create-RMYCUOFT.mjs → campaign-create-XXBD33GR.mjs} +2 -2
  5. package/dist/{campaign-detail-SWAD2NM7.mjs → campaign-detail-EAANXYWM.mjs} +18 -6
  6. package/dist/{chunk-GHA6UFUO.mjs → chunk-AG6KIQLK.mjs} +18 -18
  7. package/dist/{chunk-XQEAV77R.mjs → chunk-AHQI2S2Z.mjs} +5 -4
  8. package/dist/{chunk-FDMCSOKJ.mjs → chunk-CFFXVQ3O.mjs} +1 -1
  9. package/dist/{chunk-EQHIGOPG.mjs → chunk-E3JEIPVS.mjs} +1 -1
  10. package/dist/{chunk-B7LPFYWD.mjs → chunk-J3KQDDL3.mjs} +1 -1
  11. package/dist/{chunk-IWDYA2EJ.mjs → chunk-MK4E5XQX.mjs} +1 -1
  12. package/dist/{chunk-SKJUOXJH.mjs → chunk-QGSOFMKY.mjs} +1 -1
  13. package/dist/{chunk-GNQ6ZW3N.mjs → chunk-SLRZEIR7.mjs} +10 -2
  14. package/dist/{chunk-QA5BD4VL.mjs → chunk-WYOAWFIU.mjs} +16 -7
  15. package/dist/{product-attributes-7HBZTULS.mjs → product-attributes-55JJDKDH.mjs} +3 -3
  16. package/dist/{product-create-ZY23Z5ML.mjs → product-create-L4I2E3SR.mjs} +3 -3
  17. package/dist/{product-detail-45B2ZY5V.mjs → product-detail-DGVVORW6.mjs} +3 -3
  18. package/dist/{product-edit-YKMPVNAC.mjs → product-edit-XBYPWPBY.mjs} +3 -3
  19. package/dist/{product-media-JEQJQ5JP.mjs → product-media-OPVI2XZ2.mjs} +2 -2
  20. package/dist/{product-organization-BCQLIE2Y.mjs → product-organization-QMVG3ARX.mjs} +3 -3
  21. package/dist/{product-shipping-profile-PH7AUB2Z.mjs → product-shipping-profile-2ZYBA25Z.mjs} +3 -3
  22. package/dist/{promotion-add-campaign-JLDQC3G3.mjs → promotion-add-campaign-IB6R5PGV.mjs} +2 -2
  23. package/dist/{promotion-create-ATRV3OCR.mjs → promotion-create-AKBRDVAQ.mjs} +3 -3
  24. package/dist/{promotion-detail-THEQHD4Q.mjs → promotion-detail-6QLCN3HQ.mjs} +2 -2
  25. package/dist/{promotion-list-75AEJGK5.mjs → promotion-list-XOEU6YSH.mjs} +3 -3
  26. package/dist/{reset-password-WZAI3Q5G.mjs → reset-password-HJNFHUUK.mjs} +1 -1
  27. package/dist/{tax-region-create-IOQK5F6G.mjs → tax-region-create-YP3PDE4R.mjs} +1 -1
  28. package/package.json +9 -9
  29. package/src/i18n/translations/$schema.json +42 -3
  30. package/src/i18n/translations/en.json +10 -2
  31. package/src/routes/campaigns/campaign-detail/components/campaign-budget/campaign-budget.tsx +17 -5
  32. package/src/routes/campaigns/common/components/create-campaign-form-fields/create-campaign-form-fields.tsx +5 -4
  33. package/src/routes/promotions/promotion-add-campaign/components/add-campaign-promotion-form/campaign-details.tsx +18 -6
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  usePromotionTableColumns,
3
3
  usePromotionTableQuery
4
- } from "./chunk-FDMCSOKJ.mjs";
5
- import "./chunk-B7LPFYWD.mjs";
4
+ } from "./chunk-CFFXVQ3O.mjs";
5
+ import "./chunk-J3KQDDL3.mjs";
6
6
  import "./chunk-MSDRGCRR.mjs";
7
7
  import "./chunk-ADOCJB6L.mjs";
8
8
  import "./chunk-LQTHYS2Z.mjs";
@@ -30,7 +30,7 @@ import {
30
30
  useRouteModal
31
31
  } from "./chunk-AERWK3TJ.mjs";
32
32
  import "./chunk-4GQOUCX6.mjs";
33
- import "./chunk-GNQ6ZW3N.mjs";
33
+ import "./chunk-SLRZEIR7.mjs";
34
34
  import "./chunk-LPEUYMRK.mjs";
35
35
  import "./chunk-OC7BQLYI.mjs";
36
36
  import "./chunk-S4DMV3ZT.mjs";
package/dist/app.js CHANGED
@@ -11040,6 +11040,10 @@ var init_en = __esm({
11040
11040
  }
11041
11041
  },
11042
11042
  budget: {
11043
+ attribute: {
11044
+ customer_id: "customer",
11045
+ customer_email: "email"
11046
+ },
11043
11047
  create: {
11044
11048
  hint: "Create a budget for the campaign.",
11045
11049
  header: "Campaign Budget"
@@ -11051,8 +11055,10 @@ var init_en = __esm({
11051
11055
  limit: "Limit",
11052
11056
  used: "Used",
11053
11057
  budgetAttribute: "Limit usage per",
11054
- budgetAttributeTooltip: "Define how many times the promotion can be used by a specific customer or email.",
11055
- totalUsedByAttribute: "Budget limit per: {{attribute}}"
11058
+ budgetAttributeTooltip: "Define how many times the promotion can be used by each customer or email.",
11059
+ totalUsedByAttribute: "Budget limit per: {{attribute}}",
11060
+ totalUsedByAttributeCustomerId: "Budget limit per customer",
11061
+ totalUsedByAttributeEmail: "Budget limit per email"
11056
11062
  },
11057
11063
  type: {
11058
11064
  spend: {
@@ -11065,6 +11071,8 @@ var init_en = __esm({
11065
11071
  },
11066
11072
  useByAttribute: {
11067
11073
  title: "Usage by attribute (customer id, email, etc.)",
11074
+ titleCustomerId: "Usage per customer",
11075
+ titleEmail: "Usage per email",
11068
11076
  description: "Set a limit on how many times the promotion can be used by a specific attribute value."
11069
11077
  }
11070
11078
  },
@@ -139996,11 +140004,12 @@ var init_create_campaign_form_fields = __esm({
139996
140004
  {
139997
140005
  label: t5("fields.email"),
139998
140006
  value: "customer_email"
139999
- },
140000
- {
140001
- label: t5("fields.promotionCode"),
140002
- value: "promotion_code"
140003
140007
  }
140008
+ // TEMP disable promotion code for now
140009
+ // {
140010
+ // label: t("fields.promotionCode"),
140011
+ // value: "promotion_code",
140012
+ // },
140004
140013
  ]
140005
140014
  },
140006
140015
  "attribute"
@@ -140025,7 +140034,7 @@ var init_create_campaign_form_fields2 = __esm({
140025
140034
  });
140026
140035
 
140027
140036
  // src/routes/promotions/promotion-add-campaign/components/add-campaign-promotion-form/campaign-details.tsx
140028
- var import_ui215, import_react192, import_react_i18next220, import_jsx_runtime296, translationKeyMap, CampaignDetails;
140037
+ var import_ui215, import_react192, import_react_i18next220, import_jsx_runtime296, translationKeyMap, getTranslationKey, CampaignDetails;
140029
140038
  var init_campaign_details = __esm({
140030
140039
  "src/routes/promotions/promotion-add-campaign/components/add-campaign-promotion-form/campaign-details.tsx"() {
140031
140040
  "use strict";
@@ -140038,6 +140047,18 @@ var init_campaign_details = __esm({
140038
140047
  usage: "usage",
140039
140048
  use_by_attribute: "useByAttribute"
140040
140049
  };
140050
+ getTranslationKey = (budget) => {
140051
+ const translationKey = translationKeyMap[budget?.type] || "-";
140052
+ if (budget?.type === "use_by_attribute") {
140053
+ if (budget?.attribute === "customer_id") {
140054
+ return `campaigns.budget.type.useByAttribute.titleCustomerId`;
140055
+ } else if (budget?.attribute === "customer_email") {
140056
+ return `campaigns.budget.type.useByAttribute.titleEmail`;
140057
+ }
140058
+ return `campaigns.budget.type.useByAttribute.title`;
140059
+ }
140060
+ return `campaigns.budget.type.${translationKey}.title`;
140061
+ };
140041
140062
  CampaignDetails = ({ campaign }) => {
140042
140063
  const { t: t5 } = (0, import_react_i18next220.useTranslation)();
140043
140064
  if (!campaign) {
@@ -140067,12 +140088,9 @@ var init_campaign_details = __esm({
140067
140088
  /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(import_ui215.Heading, { level: "h2", className: "mb-4", children: t5("campaigns.budget.details") }),
140068
140089
  /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center py-1", children: [
140069
140090
  /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(import_ui215.Text, { className: "txt-small-plus font-", children: t5("campaigns.budget.fields.type") }),
140070
- /* @__PURE__ */ (0, import_jsx_runtime296.jsx)("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(import_ui215.Text, { className: "txt-small truncate", children: t5(
140071
- `campaigns.budget.type.${translationKeyMap[campaign.budget?.type]}.title`,
140072
- {
140073
- defaultValue: "-"
140074
- }
140075
- ) }) })
140091
+ /* @__PURE__ */ (0, import_jsx_runtime296.jsx)("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(import_ui215.Text, { className: "txt-small truncate", children: t5(getTranslationKey(campaign.budget), {
140092
+ defaultValue: "-"
140093
+ }) }) })
140076
140094
  ] }),
140077
140095
  /* @__PURE__ */ (0, import_jsx_runtime296.jsxs)("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center py-1", children: [
140078
140096
  /* @__PURE__ */ (0, import_jsx_runtime296.jsx)(import_ui215.Text, { className: "txt-small-plus", children: t5("campaigns.budget.fields.currency") }),
@@ -143271,6 +143289,20 @@ var init_campaign_budget = __esm({
143271
143289
  import_jsx_runtime322 = require("react/jsx-runtime");
143272
143290
  CampaignBudget = ({ campaign }) => {
143273
143291
  const { t: t5 } = (0, import_react_i18next238.useTranslation)();
143292
+ const getTranslation = () => {
143293
+ const budget = campaign.budget;
143294
+ if (budget?.type === "use_by_attribute") {
143295
+ if (budget?.attribute === "customer_id") {
143296
+ return t5(`campaigns.budget.fields.totalUsedByAttributeCustomerId`);
143297
+ } else if (budget?.attribute === "customer_email") {
143298
+ return t5(`campaigns.budget.fields.totalUsedByAttributeEmail`);
143299
+ }
143300
+ return t5(`campaigns.budget.fields.totalUsedByAttribute`, {
143301
+ attribute: budget?.attribute
143302
+ });
143303
+ }
143304
+ return t5(`campaigns.fields.budget_limit`);
143305
+ };
143274
143306
  return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)(import_ui230.Container, { className: "flex flex-col gap-y-4 px-6 py-4", children: [
143275
143307
  /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "flex justify-between", children: [
143276
143308
  /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "flex-grow", children: [
@@ -143280,9 +143312,7 @@ var init_campaign_budget = __esm({
143280
143312
  {
143281
143313
  className: "text-ui-fg-subtle ms-10 mt-[1.5px] font-normal",
143282
143314
  level: "h3",
143283
- children: campaign.budget?.type === "use_by_attribute" ? t5("campaigns.budget.fields.totalUsedByAttribute", {
143284
- attribute: campaign.budget?.attribute
143285
- }) : t5("campaigns.fields.budget_limit")
143315
+ children: getTranslation()
143286
143316
  }
143287
143317
  )
143288
143318
  ] }),
package/dist/app.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  DashboardApp
3
- } from "./chunk-GHA6UFUO.mjs";
3
+ } from "./chunk-AG6KIQLK.mjs";
4
4
  import "./chunk-NQIC7ZFS.mjs";
5
5
  import "./chunk-ONB3JEHR.mjs";
6
6
  import "./chunk-VLOA5XAC.mjs";
7
7
  import "./chunk-4GQOUCX6.mjs";
8
8
  import "./chunk-2VTICXJR.mjs";
9
9
  import "./chunk-D3YQN7HV.mjs";
10
- import "./chunk-GNQ6ZW3N.mjs";
10
+ import "./chunk-SLRZEIR7.mjs";
11
11
  import "./chunk-MNXC6Q4F.mjs";
12
12
  import "./chunk-C5P5PL3E.mjs";
13
13
  import "./chunk-DG7J63J2.mjs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CreateCampaignForm
3
- } from "./chunk-IWDYA2EJ.mjs";
4
- import "./chunk-XQEAV77R.mjs";
3
+ } from "./chunk-MK4E5XQX.mjs";
4
+ import "./chunk-AHQI2S2Z.mjs";
5
5
  import "./chunk-F6ZOHZVB.mjs";
6
6
  import "./chunk-OFN7DIZA.mjs";
7
7
  import "./chunk-DK4WIVY6.mjs";
@@ -4,8 +4,8 @@ import {
4
4
  import {
5
5
  usePromotionTableColumns,
6
6
  usePromotionTableQuery
7
- } from "./chunk-FDMCSOKJ.mjs";
8
- import "./chunk-B7LPFYWD.mjs";
7
+ } from "./chunk-CFFXVQ3O.mjs";
8
+ import "./chunk-J3KQDDL3.mjs";
9
9
  import "./chunk-MSDRGCRR.mjs";
10
10
  import "./chunk-ADOCJB6L.mjs";
11
11
  import "./chunk-LQTHYS2Z.mjs";
@@ -31,7 +31,7 @@ import {
31
31
  import "./chunk-C76H5USB.mjs";
32
32
  import "./chunk-PFKKVLZX.mjs";
33
33
  import "./chunk-4GQOUCX6.mjs";
34
- import "./chunk-GNQ6ZW3N.mjs";
34
+ import "./chunk-SLRZEIR7.mjs";
35
35
  import {
36
36
  useExtension
37
37
  } from "./chunk-C5P5PL3E.mjs";
@@ -119,6 +119,20 @@ import { Trans, useTranslation } from "react-i18next";
119
119
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
120
120
  var CampaignBudget = ({ campaign }) => {
121
121
  const { t } = useTranslation();
122
+ const getTranslation = () => {
123
+ const budget = campaign.budget;
124
+ if (budget?.type === "use_by_attribute") {
125
+ if (budget?.attribute === "customer_id") {
126
+ return t(`campaigns.budget.fields.totalUsedByAttributeCustomerId`);
127
+ } else if (budget?.attribute === "customer_email") {
128
+ return t(`campaigns.budget.fields.totalUsedByAttributeEmail`);
129
+ }
130
+ return t(`campaigns.budget.fields.totalUsedByAttribute`, {
131
+ attribute: budget?.attribute
132
+ });
133
+ }
134
+ return t(`campaigns.fields.budget_limit`);
135
+ };
122
136
  return /* @__PURE__ */ jsxs(Container, { className: "flex flex-col gap-y-4 px-6 py-4", children: [
123
137
  /* @__PURE__ */ jsxs("div", { className: "flex justify-between", children: [
124
138
  /* @__PURE__ */ jsxs("div", { className: "flex-grow", children: [
@@ -128,9 +142,7 @@ var CampaignBudget = ({ campaign }) => {
128
142
  {
129
143
  className: "text-ui-fg-subtle ms-10 mt-[1.5px] font-normal",
130
144
  level: "h3",
131
- children: campaign.budget?.type === "use_by_attribute" ? t("campaigns.budget.fields.totalUsedByAttribute", {
132
- attribute: campaign.budget?.attribute
133
- }) : t("campaigns.fields.budget_limit")
145
+ children: getTranslation()
134
146
  }
135
147
  )
136
148
  ] }),
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-D3YQN7HV.mjs";
17
17
  import {
18
18
  I18n
19
- } from "./chunk-GNQ6ZW3N.mjs";
19
+ } from "./chunk-SLRZEIR7.mjs";
20
20
  import {
21
21
  Thumbnail
22
22
  } from "./chunk-MNXC6Q4F.mjs";
@@ -3248,7 +3248,7 @@ function getRouteMap({
3248
3248
  children: [
3249
3249
  {
3250
3250
  path: "create",
3251
- lazy: () => import("./product-create-ZY23Z5ML.mjs")
3251
+ lazy: () => import("./product-create-L4I2E3SR.mjs")
3252
3252
  },
3253
3253
  {
3254
3254
  path: "import",
@@ -3264,7 +3264,7 @@ function getRouteMap({
3264
3264
  path: ":id",
3265
3265
  errorElement: /* @__PURE__ */ jsx17(ErrorBoundary, {}),
3266
3266
  lazy: async () => {
3267
- const { Breadcrumb, loader } = await import("./product-detail-45B2ZY5V.mjs");
3267
+ const { Breadcrumb, loader } = await import("./product-detail-DGVVORW6.mjs");
3268
3268
  return {
3269
3269
  Component: Outlet4,
3270
3270
  loader,
@@ -3276,11 +3276,11 @@ function getRouteMap({
3276
3276
  children: [
3277
3277
  {
3278
3278
  path: "",
3279
- lazy: () => import("./product-detail-45B2ZY5V.mjs"),
3279
+ lazy: () => import("./product-detail-DGVVORW6.mjs"),
3280
3280
  children: [
3281
3281
  {
3282
3282
  path: "edit",
3283
- lazy: () => import("./product-edit-YKMPVNAC.mjs")
3283
+ lazy: () => import("./product-edit-XBYPWPBY.mjs")
3284
3284
  },
3285
3285
  {
3286
3286
  path: "edit-variant",
@@ -3292,19 +3292,19 @@ function getRouteMap({
3292
3292
  },
3293
3293
  {
3294
3294
  path: "attributes",
3295
- lazy: () => import("./product-attributes-7HBZTULS.mjs")
3295
+ lazy: () => import("./product-attributes-55JJDKDH.mjs")
3296
3296
  },
3297
3297
  {
3298
3298
  path: "organization",
3299
- lazy: () => import("./product-organization-BCQLIE2Y.mjs")
3299
+ lazy: () => import("./product-organization-QMVG3ARX.mjs")
3300
3300
  },
3301
3301
  {
3302
3302
  path: "shipping-profile",
3303
- lazy: () => import("./product-shipping-profile-PH7AUB2Z.mjs")
3303
+ lazy: () => import("./product-shipping-profile-2ZYBA25Z.mjs")
3304
3304
  },
3305
3305
  {
3306
3306
  path: "media",
3307
- lazy: () => import("./product-media-JEQJQ5JP.mjs")
3307
+ lazy: () => import("./product-media-OPVI2XZ2.mjs")
3308
3308
  },
3309
3309
  {
3310
3310
  path: "prices",
@@ -3514,16 +3514,16 @@ function getRouteMap({
3514
3514
  children: [
3515
3515
  {
3516
3516
  path: "",
3517
- lazy: () => import("./promotion-list-75AEJGK5.mjs")
3517
+ lazy: () => import("./promotion-list-XOEU6YSH.mjs")
3518
3518
  },
3519
3519
  {
3520
3520
  path: "create",
3521
- lazy: () => import("./promotion-create-ATRV3OCR.mjs")
3521
+ lazy: () => import("./promotion-create-AKBRDVAQ.mjs")
3522
3522
  },
3523
3523
  {
3524
3524
  path: ":id",
3525
3525
  lazy: async () => {
3526
- const { Component, Breadcrumb, loader } = await import("./promotion-detail-THEQHD4Q.mjs");
3526
+ const { Component, Breadcrumb, loader } = await import("./promotion-detail-6QLCN3HQ.mjs");
3527
3527
  return {
3528
3528
  Component,
3529
3529
  loader,
@@ -3539,7 +3539,7 @@ function getRouteMap({
3539
3539
  },
3540
3540
  {
3541
3541
  path: "add-to-campaign",
3542
- lazy: () => import("./promotion-add-campaign-JLDQC3G3.mjs")
3542
+ lazy: () => import("./promotion-add-campaign-IB6R5PGV.mjs")
3543
3543
  },
3544
3544
  {
3545
3545
  path: ":ruleType/edit",
@@ -3563,12 +3563,12 @@ function getRouteMap({
3563
3563
  },
3564
3564
  {
3565
3565
  path: "create",
3566
- lazy: () => import("./campaign-create-RMYCUOFT.mjs")
3566
+ lazy: () => import("./campaign-create-XXBD33GR.mjs")
3567
3567
  },
3568
3568
  {
3569
3569
  path: ":id",
3570
3570
  lazy: async () => {
3571
- const { Component, Breadcrumb, loader } = await import("./campaign-detail-SWAD2NM7.mjs");
3571
+ const { Component, Breadcrumb, loader } = await import("./campaign-detail-EAANXYWM.mjs");
3572
3572
  return {
3573
3573
  Component,
3574
3574
  loader,
@@ -3592,7 +3592,7 @@ function getRouteMap({
3592
3592
  },
3593
3593
  {
3594
3594
  path: "add-promotions",
3595
- lazy: () => import("./add-campaign-promotions-ZQ7H3KCD.mjs")
3595
+ lazy: () => import("./add-campaign-promotions-QDZCKCU6.mjs")
3596
3596
  }
3597
3597
  ]
3598
3598
  }
@@ -4472,7 +4472,7 @@ function getRouteMap({
4472
4472
  children: [
4473
4473
  {
4474
4474
  path: "create",
4475
- lazy: () => import("./tax-region-create-IOQK5F6G.mjs")
4475
+ lazy: () => import("./tax-region-create-YP3PDE4R.mjs")
4476
4476
  }
4477
4477
  ]
4478
4478
  },
@@ -4627,7 +4627,7 @@ function getRouteMap({
4627
4627
  },
4628
4628
  {
4629
4629
  path: "/reset-password",
4630
- lazy: () => import("./reset-password-WZAI3Q5G.mjs")
4630
+ lazy: () => import("./reset-password-HJNFHUUK.mjs")
4631
4631
  },
4632
4632
  {
4633
4633
  path: "/invite",
@@ -336,11 +336,12 @@ var CreateCampaignFormFields = ({ form, fieldScope = "" }) => {
336
336
  {
337
337
  label: t("fields.email"),
338
338
  value: "customer_email"
339
- },
340
- {
341
- label: t("fields.promotionCode"),
342
- value: "promotion_code"
343
339
  }
340
+ // TEMP disable promotion code for now
341
+ // {
342
+ // label: t("fields.promotionCode"),
343
+ // value: "promotion_code",
344
+ // },
344
345
  ]
345
346
  },
346
347
  "attribute"
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getPromotionStatus
3
- } from "./chunk-B7LPFYWD.mjs";
3
+ } from "./chunk-J3KQDDL3.mjs";
4
4
  import {
5
5
  TextCell,
6
6
  TextHeader
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-6GU6IDUA.mjs";
11
11
  import {
12
12
  i18n
13
- } from "./chunk-GNQ6ZW3N.mjs";
13
+ } from "./chunk-SLRZEIR7.mjs";
14
14
  import {
15
15
  Form
16
16
  } from "./chunk-OBQI23QM.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  i18n
3
- } from "./chunk-GNQ6ZW3N.mjs";
3
+ } from "./chunk-SLRZEIR7.mjs";
4
4
 
5
5
  // src/lib/promotions.ts
6
6
  var promotionStatusMap = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CreateCampaignFormFields
3
- } from "./chunk-XQEAV77R.mjs";
3
+ } from "./chunk-AHQI2S2Z.mjs";
4
4
  import {
5
5
  VisuallyHidden
6
6
  } from "./chunk-F6ZOHZVB.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getLinkedFields
3
- } from "./chunk-GHA6UFUO.mjs";
3
+ } from "./chunk-AG6KIQLK.mjs";
4
4
 
5
5
  // src/routes/products/product-detail/constants.ts
6
6
  var PRODUCT_DETAIL_FIELDS = getLinkedFields(
@@ -10990,6 +10990,10 @@ var en_default = {
10990
10990
  }
10991
10991
  },
10992
10992
  budget: {
10993
+ attribute: {
10994
+ customer_id: "customer",
10995
+ customer_email: "email"
10996
+ },
10993
10997
  create: {
10994
10998
  hint: "Create a budget for the campaign.",
10995
10999
  header: "Campaign Budget"
@@ -11001,8 +11005,10 @@ var en_default = {
11001
11005
  limit: "Limit",
11002
11006
  used: "Used",
11003
11007
  budgetAttribute: "Limit usage per",
11004
- budgetAttributeTooltip: "Define how many times the promotion can be used by a specific customer or email.",
11005
- totalUsedByAttribute: "Budget limit per: {{attribute}}"
11008
+ budgetAttributeTooltip: "Define how many times the promotion can be used by each customer or email.",
11009
+ totalUsedByAttribute: "Budget limit per: {{attribute}}",
11010
+ totalUsedByAttributeCustomerId: "Budget limit per customer",
11011
+ totalUsedByAttributeEmail: "Budget limit per email"
11006
11012
  },
11007
11013
  type: {
11008
11014
  spend: {
@@ -11015,6 +11021,8 @@ var en_default = {
11015
11021
  },
11016
11022
  useByAttribute: {
11017
11023
  title: "Usage by attribute (customer id, email, etc.)",
11024
+ titleCustomerId: "Usage per customer",
11025
+ titleEmail: "Usage per email",
11018
11026
  description: "Set a limit on how many times the promotion can be used by a specific attribute value."
11019
11027
  }
11020
11028
  },
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CreateCampaignFormFields
3
- } from "./chunk-XQEAV77R.mjs";
3
+ } from "./chunk-AHQI2S2Z.mjs";
4
4
  import {
5
5
  useComboboxData
6
6
  } from "./chunk-HFB3OQXI.mjs";
@@ -46,6 +46,18 @@ var translationKeyMap = {
46
46
  usage: "usage",
47
47
  use_by_attribute: "useByAttribute"
48
48
  };
49
+ var getTranslationKey = (budget) => {
50
+ const translationKey = translationKeyMap[budget?.type] || "-";
51
+ if (budget?.type === "use_by_attribute") {
52
+ if (budget?.attribute === "customer_id") {
53
+ return `campaigns.budget.type.useByAttribute.titleCustomerId`;
54
+ } else if (budget?.attribute === "customer_email") {
55
+ return `campaigns.budget.type.useByAttribute.titleEmail`;
56
+ }
57
+ return `campaigns.budget.type.useByAttribute.title`;
58
+ }
59
+ return `campaigns.budget.type.${translationKey}.title`;
60
+ };
49
61
  var CampaignDetails = ({ campaign }) => {
50
62
  const { t } = useTranslation();
51
63
  if (!campaign) {
@@ -75,12 +87,9 @@ var CampaignDetails = ({ campaign }) => {
75
87
  /* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4", children: t("campaigns.budget.details") }),
76
88
  /* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center py-1", children: [
77
89
  /* @__PURE__ */ jsx(Text, { className: "txt-small-plus font-", children: t("campaigns.budget.fields.type") }),
78
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsx(Text, { className: "txt-small truncate", children: t(
79
- `campaigns.budget.type.${translationKeyMap[campaign.budget?.type]}.title`,
80
- {
81
- defaultValue: "-"
82
- }
83
- ) }) })
90
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsx(Text, { className: "txt-small truncate", children: t(getTranslationKey(campaign.budget), {
91
+ defaultValue: "-"
92
+ }) }) })
84
93
  ] }),
85
94
  /* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center py-1", children: [
86
95
  /* @__PURE__ */ jsx(Text, { className: "txt-small-plus", children: t("campaigns.budget.fields.currency") }),
@@ -12,18 +12,18 @@ import {
12
12
  } from "./chunk-AERWK3TJ.mjs";
13
13
  import {
14
14
  PRODUCT_DETAIL_FIELDS
15
- } from "./chunk-SKJUOXJH.mjs";
15
+ } from "./chunk-QGSOFMKY.mjs";
16
16
  import {
17
17
  FormExtensionZone,
18
18
  useExtendableForm
19
- } from "./chunk-GHA6UFUO.mjs";
19
+ } from "./chunk-AG6KIQLK.mjs";
20
20
  import "./chunk-NQIC7ZFS.mjs";
21
21
  import "./chunk-ONB3JEHR.mjs";
22
22
  import "./chunk-VLOA5XAC.mjs";
23
23
  import "./chunk-4GQOUCX6.mjs";
24
24
  import "./chunk-2VTICXJR.mjs";
25
25
  import "./chunk-D3YQN7HV.mjs";
26
- import "./chunk-GNQ6ZW3N.mjs";
26
+ import "./chunk-SLRZEIR7.mjs";
27
27
  import "./chunk-MNXC6Q4F.mjs";
28
28
  import {
29
29
  useExtension
@@ -25,7 +25,7 @@ import {
25
25
  UploadMediaFormItem,
26
26
  decorateVariantsWithDefaultValues,
27
27
  normalizeProductFormValues
28
- } from "./chunk-EQHIGOPG.mjs";
28
+ } from "./chunk-E3JEIPVS.mjs";
29
29
  import "./chunk-ZQRKUG6J.mjs";
30
30
  import {
31
31
  DataGrid,
@@ -61,14 +61,14 @@ import {
61
61
  import {
62
62
  FormExtensionZone,
63
63
  useExtendableForm
64
- } from "./chunk-GHA6UFUO.mjs";
64
+ } from "./chunk-AG6KIQLK.mjs";
65
65
  import "./chunk-NQIC7ZFS.mjs";
66
66
  import "./chunk-ONB3JEHR.mjs";
67
67
  import "./chunk-VLOA5XAC.mjs";
68
68
  import "./chunk-4GQOUCX6.mjs";
69
69
  import "./chunk-2VTICXJR.mjs";
70
70
  import "./chunk-D3YQN7HV.mjs";
71
- import "./chunk-GNQ6ZW3N.mjs";
71
+ import "./chunk-SLRZEIR7.mjs";
72
72
  import "./chunk-MNXC6Q4F.mjs";
73
73
  import {
74
74
  useExtension
@@ -30,15 +30,15 @@ import {
30
30
  import "./chunk-PFKKVLZX.mjs";
31
31
  import {
32
32
  PRODUCT_DETAIL_FIELDS
33
- } from "./chunk-SKJUOXJH.mjs";
34
- import "./chunk-GHA6UFUO.mjs";
33
+ } from "./chunk-QGSOFMKY.mjs";
34
+ import "./chunk-AG6KIQLK.mjs";
35
35
  import "./chunk-NQIC7ZFS.mjs";
36
36
  import "./chunk-ONB3JEHR.mjs";
37
37
  import "./chunk-VLOA5XAC.mjs";
38
38
  import "./chunk-4GQOUCX6.mjs";
39
39
  import "./chunk-2VTICXJR.mjs";
40
40
  import "./chunk-D3YQN7HV.mjs";
41
- import "./chunk-GNQ6ZW3N.mjs";
41
+ import "./chunk-SLRZEIR7.mjs";
42
42
  import "./chunk-MNXC6Q4F.mjs";
43
43
  import {
44
44
  useExtension
@@ -15,18 +15,18 @@ import {
15
15
  } from "./chunk-AERWK3TJ.mjs";
16
16
  import {
17
17
  PRODUCT_DETAIL_FIELDS
18
- } from "./chunk-SKJUOXJH.mjs";
18
+ } from "./chunk-QGSOFMKY.mjs";
19
19
  import {
20
20
  FormExtensionZone,
21
21
  useExtendableForm
22
- } from "./chunk-GHA6UFUO.mjs";
22
+ } from "./chunk-AG6KIQLK.mjs";
23
23
  import "./chunk-NQIC7ZFS.mjs";
24
24
  import "./chunk-ONB3JEHR.mjs";
25
25
  import "./chunk-VLOA5XAC.mjs";
26
26
  import "./chunk-4GQOUCX6.mjs";
27
27
  import "./chunk-2VTICXJR.mjs";
28
28
  import "./chunk-D3YQN7HV.mjs";
29
- import "./chunk-GNQ6ZW3N.mjs";
29
+ import "./chunk-SLRZEIR7.mjs";
30
30
  import "./chunk-MNXC6Q4F.mjs";
31
31
  import {
32
32
  useExtension
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  EditProductMediaSchema,
3
3
  UploadMediaFormItem
4
- } from "./chunk-EQHIGOPG.mjs";
4
+ } from "./chunk-E3JEIPVS.mjs";
5
5
  import "./chunk-ZQRKUG6J.mjs";
6
6
  import "./chunk-TYTNUPXB.mjs";
7
7
  import "./chunk-6GU6IDUA.mjs";
@@ -13,7 +13,7 @@ import {
13
13
  RouteFocusModal,
14
14
  useRouteModal
15
15
  } from "./chunk-AERWK3TJ.mjs";
16
- import "./chunk-GNQ6ZW3N.mjs";
16
+ import "./chunk-SLRZEIR7.mjs";
17
17
  import "./chunk-OBQI23QM.mjs";
18
18
  import {
19
19
  useProduct,
@@ -17,18 +17,18 @@ import {
17
17
  } from "./chunk-AERWK3TJ.mjs";
18
18
  import {
19
19
  PRODUCT_DETAIL_FIELDS
20
- } from "./chunk-SKJUOXJH.mjs";
20
+ } from "./chunk-QGSOFMKY.mjs";
21
21
  import {
22
22
  FormExtensionZone,
23
23
  useExtendableForm
24
- } from "./chunk-GHA6UFUO.mjs";
24
+ } from "./chunk-AG6KIQLK.mjs";
25
25
  import "./chunk-NQIC7ZFS.mjs";
26
26
  import "./chunk-ONB3JEHR.mjs";
27
27
  import "./chunk-VLOA5XAC.mjs";
28
28
  import "./chunk-4GQOUCX6.mjs";
29
29
  import "./chunk-2VTICXJR.mjs";
30
30
  import "./chunk-D3YQN7HV.mjs";
31
- import "./chunk-GNQ6ZW3N.mjs";
31
+ import "./chunk-SLRZEIR7.mjs";
32
32
  import "./chunk-MNXC6Q4F.mjs";
33
33
  import {
34
34
  useExtension
@@ -14,15 +14,15 @@ import {
14
14
  } from "./chunk-AERWK3TJ.mjs";
15
15
  import {
16
16
  PRODUCT_DETAIL_FIELDS
17
- } from "./chunk-SKJUOXJH.mjs";
18
- import "./chunk-GHA6UFUO.mjs";
17
+ } from "./chunk-QGSOFMKY.mjs";
18
+ import "./chunk-AG6KIQLK.mjs";
19
19
  import "./chunk-NQIC7ZFS.mjs";
20
20
  import "./chunk-ONB3JEHR.mjs";
21
21
  import "./chunk-VLOA5XAC.mjs";
22
22
  import "./chunk-4GQOUCX6.mjs";
23
23
  import "./chunk-2VTICXJR.mjs";
24
24
  import "./chunk-D3YQN7HV.mjs";
25
- import "./chunk-GNQ6ZW3N.mjs";
25
+ import "./chunk-SLRZEIR7.mjs";
26
26
  import "./chunk-MNXC6Q4F.mjs";
27
27
  import "./chunk-C5P5PL3E.mjs";
28
28
  import "./chunk-DG7J63J2.mjs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AddCampaignPromotionForm
3
- } from "./chunk-QA5BD4VL.mjs";
4
- import "./chunk-XQEAV77R.mjs";
3
+ } from "./chunk-WYOAWFIU.mjs";
4
+ import "./chunk-AHQI2S2Z.mjs";
5
5
  import "./chunk-HFB3OQXI.mjs";
6
6
  import "./chunk-OFN7DIZA.mjs";
7
7
  import "./chunk-DK4WIVY6.mjs";
@@ -3,15 +3,15 @@ import {
3
3
  } from "./chunk-KEQOAJC2.mjs";
4
4
  import {
5
5
  AddCampaignPromotionFields
6
- } from "./chunk-QA5BD4VL.mjs";
6
+ } from "./chunk-WYOAWFIU.mjs";
7
7
  import {
8
8
  RulesFormField
9
9
  } from "./chunk-VI7MI3US.mjs";
10
10
  import {
11
11
  CreateCampaignSchema,
12
12
  DEFAULT_CAMPAIGN_VALUES
13
- } from "./chunk-IWDYA2EJ.mjs";
14
- import "./chunk-XQEAV77R.mjs";
13
+ } from "./chunk-MK4E5XQX.mjs";
14
+ import "./chunk-AHQI2S2Z.mjs";
15
15
  import "./chunk-F6ZOHZVB.mjs";
16
16
  import "./chunk-HFB3OQXI.mjs";
17
17
  import "./chunk-OFN7DIZA.mjs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-VAIHVNV6.mjs";
4
4
  import {
5
5
  getPromotionStatus
6
- } from "./chunk-B7LPFYWD.mjs";
6
+ } from "./chunk-J3KQDDL3.mjs";
7
7
  import {
8
8
  formatPercentage
9
9
  } from "./chunk-4FM6S5CX.mjs";
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-GIZFNLKK.mjs";
19
19
  import "./chunk-PFKKVLZX.mjs";
20
20
  import "./chunk-4GQOUCX6.mjs";
21
- import "./chunk-GNQ6ZW3N.mjs";
21
+ import "./chunk-SLRZEIR7.mjs";
22
22
  import {
23
23
  useExtension
24
24
  } from "./chunk-C5P5PL3E.mjs";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  usePromotionTableColumns,
3
3
  usePromotionTableQuery
4
- } from "./chunk-FDMCSOKJ.mjs";
5
- import "./chunk-B7LPFYWD.mjs";
4
+ } from "./chunk-CFFXVQ3O.mjs";
5
+ import "./chunk-J3KQDDL3.mjs";
6
6
  import "./chunk-MSDRGCRR.mjs";
7
7
  import "./chunk-ADOCJB6L.mjs";
8
8
  import "./chunk-LQTHYS2Z.mjs";
@@ -25,7 +25,7 @@ import {
25
25
  import "./chunk-C76H5USB.mjs";
26
26
  import "./chunk-PFKKVLZX.mjs";
27
27
  import "./chunk-4GQOUCX6.mjs";
28
- import "./chunk-GNQ6ZW3N.mjs";
28
+ import "./chunk-SLRZEIR7.mjs";
29
29
  import {
30
30
  useExtension
31
31
  } from "./chunk-C5P5PL3E.mjs";
@@ -3,7 +3,7 @@ import "./chunk-EQTBJSBZ.mjs";
3
3
  import "./chunk-4GQOUCX6.mjs";
4
4
  import {
5
5
  i18n
6
- } from "./chunk-GNQ6ZW3N.mjs";
6
+ } from "./chunk-SLRZEIR7.mjs";
7
7
  import {
8
8
  Form
9
9
  } from "./chunk-OBQI23QM.mjs";
@@ -25,7 +25,7 @@ import {
25
25
  import "./chunk-4GQOUCX6.mjs";
26
26
  import {
27
27
  i18n
28
- } from "./chunk-GNQ6ZW3N.mjs";
28
+ } from "./chunk-SLRZEIR7.mjs";
29
29
  import "./chunk-DG7J63J2.mjs";
30
30
  import {
31
31
  Form
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medusajs/dashboard",
3
- "version": "2.10.4-preview-20251013090155",
3
+ "version": "2.10.4-preview-20251013180156",
4
4
  "scripts": {
5
5
  "generate:static": "node ./scripts/generate-currencies.js && prettier --write ./src/lib/currencies.ts",
6
6
  "dev": "vite",
@@ -45,10 +45,10 @@
45
45
  "@dnd-kit/utilities": "^3.2.2",
46
46
  "@hookform/error-message": "^2.0.1",
47
47
  "@hookform/resolvers": "3.4.2",
48
- "@medusajs/admin-shared": "2.10.4-preview-20251013090155",
49
- "@medusajs/icons": "2.10.4-preview-20251013090155",
50
- "@medusajs/js-sdk": "2.10.4-preview-20251013090155",
51
- "@medusajs/ui": "4.0.24-preview-20251013090155",
48
+ "@medusajs/admin-shared": "2.10.4-preview-20251013180156",
49
+ "@medusajs/icons": "2.10.4-preview-20251013180156",
50
+ "@medusajs/js-sdk": "2.10.4-preview-20251013180156",
51
+ "@medusajs/ui": "4.0.24-preview-20251013180156",
52
52
  "@radix-ui/react-dialog": "1.1.4",
53
53
  "@radix-ui/react-dismissable-layer": "1.1.4",
54
54
  "@tanstack/react-query": "5.64.2",
@@ -78,10 +78,10 @@
78
78
  "zod": "3.25.76"
79
79
  },
80
80
  "devDependencies": {
81
- "@medusajs/admin-shared": "2.10.4-preview-20251013090155",
82
- "@medusajs/admin-vite-plugin": "2.10.4-preview-20251013090155",
83
- "@medusajs/types": "2.10.4-preview-20251013090155",
84
- "@medusajs/ui-preset": "2.10.4-preview-20251013090155",
81
+ "@medusajs/admin-shared": "2.10.4-preview-20251013180156",
82
+ "@medusajs/admin-vite-plugin": "2.10.4-preview-20251013180156",
83
+ "@medusajs/types": "2.10.4-preview-20251013180156",
84
+ "@medusajs/ui-preset": "2.10.4-preview-20251013180156",
85
85
  "@types/node": "^20.11.15",
86
86
  "@types/react": "^18.2.79",
87
87
  "@types/react-dom": "^18.2.25",
@@ -8345,6 +8345,19 @@
8345
8345
  "budget": {
8346
8346
  "type": "object",
8347
8347
  "properties": {
8348
+ "attribute": {
8349
+ "type": "object",
8350
+ "properties": {
8351
+ "customer_id": {
8352
+ "type": "string"
8353
+ },
8354
+ "customer_email": {
8355
+ "type": "string"
8356
+ }
8357
+ },
8358
+ "required": ["customer_id", "customer_email"],
8359
+ "additionalProperties": false
8360
+ },
8348
8361
  "create": {
8349
8362
  "type": "object",
8350
8363
  "properties": {
@@ -8384,6 +8397,12 @@
8384
8397
  },
8385
8398
  "totalUsedByAttribute": {
8386
8399
  "type": "string"
8400
+ },
8401
+ "totalUsedByAttributeCustomerId": {
8402
+ "type": "string"
8403
+ },
8404
+ "totalUsedByAttributeEmail": {
8405
+ "type": "string"
8387
8406
  }
8388
8407
  },
8389
8408
  "required": [
@@ -8393,7 +8412,9 @@
8393
8412
  "used",
8394
8413
  "budgetAttribute",
8395
8414
  "budgetAttributeTooltip",
8396
- "totalUsedByAttribute"
8415
+ "totalUsedByAttribute",
8416
+ "totalUsedByAttributeCustomerId",
8417
+ "totalUsedByAttributeEmail"
8397
8418
  ],
8398
8419
  "additionalProperties": false
8399
8420
  },
@@ -8432,11 +8453,22 @@
8432
8453
  "title": {
8433
8454
  "type": "string"
8434
8455
  },
8456
+ "titleCustomerId": {
8457
+ "type": "string"
8458
+ },
8459
+ "titleEmail": {
8460
+ "type": "string"
8461
+ },
8435
8462
  "description": {
8436
8463
  "type": "string"
8437
8464
  }
8438
8465
  },
8439
- "required": ["title", "description"],
8466
+ "required": [
8467
+ "title",
8468
+ "titleCustomerId",
8469
+ "titleEmail",
8470
+ "description"
8471
+ ],
8440
8472
  "additionalProperties": false
8441
8473
  }
8442
8474
  },
@@ -8454,7 +8486,14 @@
8454
8486
  "additionalProperties": false
8455
8487
  }
8456
8488
  },
8457
- "required": ["create", "details", "fields", "type", "edit"],
8489
+ "required": [
8490
+ "attribute",
8491
+ "create",
8492
+ "details",
8493
+ "fields",
8494
+ "type",
8495
+ "edit"
8496
+ ],
8458
8497
  "additionalProperties": false
8459
8498
  },
8460
8499
  "promotions": {
@@ -2240,6 +2240,10 @@
2240
2240
  }
2241
2241
  },
2242
2242
  "budget": {
2243
+ "attribute": {
2244
+ "customer_id": "customer",
2245
+ "customer_email": "email"
2246
+ },
2243
2247
  "create": {
2244
2248
  "hint": "Create a budget for the campaign.",
2245
2249
  "header": "Campaign Budget"
@@ -2251,8 +2255,10 @@
2251
2255
  "limit": "Limit",
2252
2256
  "used": "Used",
2253
2257
  "budgetAttribute": "Limit usage per",
2254
- "budgetAttributeTooltip": "Define how many times the promotion can be used by a specific customer or email.",
2255
- "totalUsedByAttribute": "Budget limit per: {{attribute}}"
2258
+ "budgetAttributeTooltip": "Define how many times the promotion can be used by each customer or email.",
2259
+ "totalUsedByAttribute": "Budget limit per: {{attribute}}",
2260
+ "totalUsedByAttributeCustomerId": "Budget limit per customer",
2261
+ "totalUsedByAttributeEmail": "Budget limit per email"
2256
2262
  },
2257
2263
  "type": {
2258
2264
  "spend": {
@@ -2265,6 +2271,8 @@
2265
2271
  },
2266
2272
  "useByAttribute": {
2267
2273
  "title": "Usage by attribute (customer id, email, etc.)",
2274
+ "titleCustomerId": "Usage per customer",
2275
+ "titleEmail": "Usage per email",
2268
2276
  "description": "Set a limit on how many times the promotion can be used by a specific attribute value."
2269
2277
  }
2270
2278
  },
@@ -11,6 +11,22 @@ type CampaignBudgetProps = {
11
11
  export const CampaignBudget = ({ campaign }: CampaignBudgetProps) => {
12
12
  const { t } = useTranslation()
13
13
 
14
+ const getTranslation = () => {
15
+ const budget = campaign.budget
16
+
17
+ if (budget?.type === "use_by_attribute") {
18
+ if (budget?.attribute === "customer_id") {
19
+ return t(`campaigns.budget.fields.totalUsedByAttributeCustomerId`)
20
+ } else if (budget?.attribute === "customer_email") {
21
+ return t(`campaigns.budget.fields.totalUsedByAttributeEmail`)
22
+ }
23
+ return t(`campaigns.budget.fields.totalUsedByAttribute`, {
24
+ attribute: budget?.attribute,
25
+ })
26
+ }
27
+ return t(`campaigns.fields.budget_limit`)
28
+ }
29
+
14
30
  return (
15
31
  <Container className="flex flex-col gap-y-4 px-6 py-4">
16
32
  <div className="flex justify-between">
@@ -25,11 +41,7 @@ export const CampaignBudget = ({ campaign }: CampaignBudgetProps) => {
25
41
  className="text-ui-fg-subtle ms-10 mt-[1.5px] font-normal"
26
42
  level="h3"
27
43
  >
28
- {campaign.budget?.type === "use_by_attribute"
29
- ? t("campaigns.budget.fields.totalUsedByAttribute", {
30
- attribute: campaign.budget?.attribute,
31
- })
32
- : t("campaigns.fields.budget_limit")}
44
+ {getTranslation()}
33
45
  </Heading>
34
46
  </div>
35
47
 
@@ -382,10 +382,11 @@ export const CreateCampaignFormFields = ({ form, fieldScope = "" }) => {
382
382
  label: t("fields.email"),
383
383
  value: "customer_email",
384
384
  },
385
- {
386
- label: t("fields.promotionCode"),
387
- value: "promotion_code",
388
- },
385
+ // TEMP disable promotion code for now
386
+ // {
387
+ // label: t("fields.promotionCode"),
388
+ // value: "promotion_code",
389
+ // },
389
390
  ]}
390
391
  ></Combobox>
391
392
  </Form.Control>
@@ -9,6 +9,21 @@ const translationKeyMap = {
9
9
  use_by_attribute: "useByAttribute",
10
10
  }
11
11
 
12
+ const getTranslationKey = (budget: AdminCampaign["budget"]) => {
13
+ const translationKey = translationKeyMap[budget?.type] || "-"
14
+
15
+ if (budget?.type === "use_by_attribute") {
16
+ if (budget?.attribute === "customer_id") {
17
+ return `campaigns.budget.type.useByAttribute.titleCustomerId`
18
+ } else if (budget?.attribute === "customer_email") {
19
+ return `campaigns.budget.type.useByAttribute.titleEmail`
20
+ }
21
+ return `campaigns.budget.type.useByAttribute.title`
22
+ }
23
+
24
+ return `campaigns.budget.type.${translationKey}.title`
25
+ }
26
+
12
27
  type CampaignDetailsProps = {
13
28
  campaign?: AdminCampaign
14
29
  }
@@ -84,12 +99,9 @@ export const CampaignDetails = ({ campaign }: CampaignDetailsProps) => {
84
99
 
85
100
  <div className="flex items-center gap-1">
86
101
  <Text className="txt-small truncate">
87
- {t(
88
- `campaigns.budget.type.${translationKeyMap[campaign.budget?.type]}.title`,
89
- {
90
- defaultValue: "-",
91
- }
92
- )}
102
+ {t(getTranslationKey(campaign.budget), {
103
+ defaultValue: "-",
104
+ })}
93
105
  </Text>
94
106
  </div>
95
107
  </div>