@argusoft/medplat-product-management 1.0.6 → 1.0.8

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 (99) hide show
  1. package/dist/{BrandsPage-DM5ZRz8L.js → BrandsPage-DmRW5bhm.js} +53 -55
  2. package/dist/BrandsPage-DmRW5bhm.js.map +1 -0
  3. package/dist/CategoriesPage-BsS5IQh3.js +391 -0
  4. package/dist/CategoriesPage-BsS5IQh3.js.map +1 -0
  5. package/dist/{DashboardPage-CW77OzUg.js → DashboardPage-C3bKc5na.js} +14 -14
  6. package/dist/{DashboardPage-CW77OzUg.js.map → DashboardPage-C3bKc5na.js.map} +1 -1
  7. package/dist/{FacilityPicker-C2drWyqo.js → FacilityPicker-BiZeupmP.js} +2 -2
  8. package/dist/{FacilityPicker-C2drWyqo.js.map → FacilityPicker-BiZeupmP.js.map} +1 -1
  9. package/dist/InventoryPage-C_AxSy7A.js +655 -0
  10. package/dist/InventoryPage-C_AxSy7A.js.map +1 -0
  11. package/dist/{MemberProfileCard-D9jepThR.js → MemberProfileCard-BdUNgHRB.js} +3 -3
  12. package/dist/{MemberProfileCard-D9jepThR.js.map → MemberProfileCard-BdUNgHRB.js.map} +1 -1
  13. package/dist/{PaymentCreatePage-DAUWv5RO.js → PaymentCreatePage-CIVe0P0p.js} +99 -100
  14. package/dist/PaymentCreatePage-CIVe0P0p.js.map +1 -0
  15. package/dist/{PaymentsPage-B6Fs2xey.js → PaymentsPage-BvPe5Q9F.js} +42 -43
  16. package/dist/PaymentsPage-BvPe5Q9F.js.map +1 -0
  17. package/dist/PickupBatchLinesEditor-DHmcAG23.js +116 -0
  18. package/dist/PickupBatchLinesEditor-DHmcAG23.js.map +1 -0
  19. package/dist/{PickupCreatePage-4ffB1_yq.js → PickupCreatePage-CB0Sl0Hb.js} +302 -258
  20. package/dist/PickupCreatePage-CB0Sl0Hb.js.map +1 -0
  21. package/dist/PickupsPage-Ctpghavs.js +812 -0
  22. package/dist/PickupsPage-Ctpghavs.js.map +1 -0
  23. package/dist/{PmGuard-DrbbysnW.js → PmGuard-b10TGXEi.js} +3 -3
  24. package/dist/{PmGuard-DrbbysnW.js.map → PmGuard-b10TGXEi.js.map} +1 -1
  25. package/dist/PmTable-_GbScaa4.js +544 -0
  26. package/dist/PmTable-_GbScaa4.js.map +1 -0
  27. package/dist/ProductEditPage-C1thoKHu.js +1294 -0
  28. package/dist/ProductEditPage-C1thoKHu.js.map +1 -0
  29. package/dist/{ProductsPage-DFgK9-13.js → ProductsPage-CupVmOD4.js} +61 -64
  30. package/dist/ProductsPage-CupVmOD4.js.map +1 -0
  31. package/dist/{PurchaseCreatePage-B1eV15aS.js → PurchaseCreatePage-YD3NmhPQ.js} +210 -153
  32. package/dist/PurchaseCreatePage-YD3NmhPQ.js.map +1 -0
  33. package/dist/PurchaseRequestDetailPage-Dg_MRY_N.js +1543 -0
  34. package/dist/PurchaseRequestDetailPage-Dg_MRY_N.js.map +1 -0
  35. package/dist/PurchaseRequestsPage-DPAPzpmm.js +280 -0
  36. package/dist/PurchaseRequestsPage-DPAPzpmm.js.map +1 -0
  37. package/dist/{PurchasesPage-Bsrqxvb1.js → PurchasesPage-It1GHiXl.js} +40 -41
  38. package/dist/PurchasesPage-It1GHiXl.js.map +1 -0
  39. package/dist/{SaleCreatePage-CPyVj3Dh.js → SaleCreatePage-C9kFmTvm.js} +106 -107
  40. package/dist/SaleCreatePage-C9kFmTvm.js.map +1 -0
  41. package/dist/{SalesPage-BWpgPKz_.js → SalesPage-D18DCseD.js} +79 -80
  42. package/dist/SalesPage-D18DCseD.js.map +1 -0
  43. package/dist/SettingsPage-VsxI-ano.js +746 -0
  44. package/dist/SettingsPage-VsxI-ano.js.map +1 -0
  45. package/dist/StorageUnitsPage-7EqwuMOI.js +718 -0
  46. package/dist/StorageUnitsPage-7EqwuMOI.js.map +1 -0
  47. package/dist/{TransactionsPage-DQBjCHoN.js → TransactionsPage-DrH53pVS.js} +108 -83
  48. package/dist/TransactionsPage-DrH53pVS.js.map +1 -0
  49. package/dist/{TransferCreatePage-DdVExUif.js → TransferCreatePage-CuvoMrYH.js} +73 -74
  50. package/dist/TransferCreatePage-CuvoMrYH.js.map +1 -0
  51. package/dist/{TransfersPage-C1qS9kNL.js → TransfersPage-Cf701t8s.js} +67 -68
  52. package/dist/TransfersPage-Cf701t8s.js.map +1 -0
  53. package/dist/{VialsPage-rTAYlXGZ.js → VialsPage-8oAc1yFv.js} +83 -84
  54. package/dist/VialsPage-8oAc1yFv.js.map +1 -0
  55. package/dist/constants-ClZJY2x1.js +405 -0
  56. package/dist/constants-ClZJY2x1.js.map +1 -0
  57. package/dist/format-UOyOu75i.js.map +1 -1
  58. package/dist/index.js +599 -395
  59. package/dist/index.js.map +1 -1
  60. package/dist/{settingsStore-GLCtI-tv.js → settingsStore-BifOsjlB.js} +88 -57
  61. package/dist/settingsStore-BifOsjlB.js.map +1 -0
  62. package/dist/{validation-BkUPqrdA.js → validation-BzlHnL-r.js} +24 -22
  63. package/dist/validation-BzlHnL-r.js.map +1 -0
  64. package/package.json +1 -1
  65. package/dist/BrandsPage-DM5ZRz8L.js.map +0 -1
  66. package/dist/CategoriesPage-v7vz_i2N.js +0 -342
  67. package/dist/CategoriesPage-v7vz_i2N.js.map +0 -1
  68. package/dist/InventoryPage-_VWlqD2e.js +0 -686
  69. package/dist/InventoryPage-_VWlqD2e.js.map +0 -1
  70. package/dist/PaymentCreatePage-DAUWv5RO.js.map +0 -1
  71. package/dist/PaymentsPage-B6Fs2xey.js.map +0 -1
  72. package/dist/PickupCreatePage-4ffB1_yq.js.map +0 -1
  73. package/dist/PickupsPage-C-21LwTf.js +0 -604
  74. package/dist/PickupsPage-C-21LwTf.js.map +0 -1
  75. package/dist/PmTable-BMFiuHdG.js +0 -375
  76. package/dist/PmTable-BMFiuHdG.js.map +0 -1
  77. package/dist/ProductEditPage-BinNxjlB.js +0 -708
  78. package/dist/ProductEditPage-BinNxjlB.js.map +0 -1
  79. package/dist/ProductsPage-DFgK9-13.js.map +0 -1
  80. package/dist/PurchaseCreatePage-B1eV15aS.js.map +0 -1
  81. package/dist/PurchaseRequestDetailPage-52S6Nf7a.js +0 -588
  82. package/dist/PurchaseRequestDetailPage-52S6Nf7a.js.map +0 -1
  83. package/dist/PurchaseRequestsPage-DNNUnXy4.js +0 -266
  84. package/dist/PurchaseRequestsPage-DNNUnXy4.js.map +0 -1
  85. package/dist/PurchasesPage-Bsrqxvb1.js.map +0 -1
  86. package/dist/SaleCreatePage-CPyVj3Dh.js.map +0 -1
  87. package/dist/SalesPage-BWpgPKz_.js.map +0 -1
  88. package/dist/SettingsPage-Ch-37E5R.js +0 -663
  89. package/dist/SettingsPage-Ch-37E5R.js.map +0 -1
  90. package/dist/StorageUnitsPage-DF0MC356.js +0 -471
  91. package/dist/StorageUnitsPage-DF0MC356.js.map +0 -1
  92. package/dist/TransactionsPage-DQBjCHoN.js.map +0 -1
  93. package/dist/TransferCreatePage-DdVExUif.js.map +0 -1
  94. package/dist/TransfersPage-C1qS9kNL.js.map +0 -1
  95. package/dist/VialsPage-rTAYlXGZ.js.map +0 -1
  96. package/dist/constants-CdzV0PxZ.js +0 -270
  97. package/dist/constants-CdzV0PxZ.js.map +0 -1
  98. package/dist/settingsStore-GLCtI-tv.js.map +0 -1
  99. package/dist/validation-BkUPqrdA.js.map +0 -1
@@ -1,12 +1,11 @@
1
- import { Z as e, p as t, r as n } from "./settingsStore-GLCtI-tv.js";
2
- import { c as r, n as i, s as a, t as ee } from "./PmTable-BMFiuHdG.js";
3
- import { i as te, m as o, t as s } from "./validation-BkUPqrdA.js";
4
- import { t as c } from "./useFieldErrors-hDG8ox_x.js";
5
- import { a as ne, i as re, n as ie, r as ae, t as l } from "./PmGuard-DrbbysnW.js";
1
+ import { g as e, ot as t, r as n } from "./settingsStore-BifOsjlB.js";
2
+ import { c as ee, l as r, n as i, s as te, t as ne } from "./PmTable-_GbScaa4.js";
3
+ import { i as re, m as a, t as o } from "./validation-BzlHnL-r.js";
4
+ import { t as ie } from "./useFieldErrors-hDG8ox_x.js";
5
+ import { a as ae, i as oe, n as s, r as c, t as l } from "./PmGuard-b10TGXEi.js";
6
6
  import { useState as u } from "react";
7
7
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
8
- import { Alert as oe, Box as p, Button as m, Checkbox as se, Chip as ce, Dialog as le, DialogActions as ue, DialogContent as h, DialogTitle as de, FormControlLabel as g, InputAdornment as fe, Skeleton as _, Stack as v, TableBody as y, TableCell as b, TableHead as pe, TableRow as x, TextField as S, Typography as C } from "@mui/material";
9
- import { showToast as w } from "@/common/toaster/toaster";
8
+ import { Alert as se, Box as p, Button as m, Checkbox as ce, Chip as le, Dialog as ue, DialogActions as h, DialogContent as de, DialogTitle as g, FormControlLabel as _, InputAdornment as fe, Skeleton as v, Stack as y, TableBody as b, TableCell as x, TableHead as pe, TableRow as S, TextField as C, Typography as w } from "@mui/material";
10
9
  import { findCountry as me, validatePhoneForCountry as he } from "@/common/constants/countries";
11
10
  import { v4 as ge } from "uuid";
12
11
  import T from "@mui/icons-material/AddRounded";
@@ -37,7 +36,7 @@ function A({ phone: e, email: t }) {
37
36
  return e?.trim() && (n.phone = e.trim()), t?.trim() && (n.email = t.trim()), Object.keys(n).length ? JSON.stringify(n) : null;
38
37
  }
39
38
  function j() {
40
- let j = re().has("update.manage.productManagement.brand"), M = me(n()?.countryCode), [N, P] = u([]), [F, I] = u(!1), [L, R] = u(""), [_e, z] = u(!1), [B, V] = u(null), [H, ve] = u(!1), [U, W] = u(K()), G = c();
39
+ let j = oe().has("update.manage.productManagement.brand"), M = me(n()?.countryCode), [N, P] = u([]), [F, I] = u(!1), [L, R] = u(""), [_e, z] = u(!1), [B, V] = u(null), [H, ve] = u(!1), [U, W] = u(K()), G = ie();
41
40
  function K() {
42
41
  return {
43
42
  id: "",
@@ -51,11 +50,10 @@ function j() {
51
50
  async function q() {
52
51
  I(!0), R("");
53
52
  try {
54
- let e = await t(void 0, !0);
55
- P(e);
53
+ P(await e(void 0, !0));
56
54
  } catch (e) {
57
55
  let t = e?.response?.data?.message ?? e?.message ?? "Failed to load brands";
58
- R(t), w({
56
+ R(t), r({
59
57
  message: t,
60
58
  type: "error"
61
59
  });
@@ -63,7 +61,7 @@ function j() {
63
61
  I(!1);
64
62
  }
65
63
  }
66
- ae("view.manage.productManagement.brand", () => {
64
+ c("view.manage.productManagement.brand", () => {
67
65
  q();
68
66
  }, []);
69
67
  function J() {
@@ -83,19 +81,19 @@ function j() {
83
81
  isActive: e.isActive !== !1
84
82
  }), z(!0);
85
83
  }
86
- let Y = o(U.manufacturerCode, "Manufacturer code"), X = U.manufacturerCode.trim().toUpperCase(), be = !Y && X && N.some((e) => e.id !== U.id && (e.manufacturerCode || "").toUpperCase() === X), Z = {
87
- name: o(U.name, "Name"),
84
+ let Y = a(U.manufacturerCode, "Manufacturer code"), X = U.manufacturerCode.trim().toUpperCase(), be = !Y && X && N.some((e) => e.id !== U.id && (e.manufacturerCode || "").toUpperCase() === X), Z = {
85
+ name: a(U.name, "Name"),
88
86
  manufacturerCode: Y || (be ? "Code is already in use — edit it manually to make it unique." : ""),
89
87
  contactPhone: he(U.contactPhone, M),
90
- contactEmail: te(U.contactEmail)
91
- }, Q = s(Z);
88
+ contactEmail: re(U.contactEmail)
89
+ }, Q = o(Z);
92
90
  async function xe() {
93
91
  if (!Q) {
94
92
  G.markAllTouched(), R("Please fix the highlighted fields.");
95
93
  return;
96
94
  }
97
95
  try {
98
- await e({
96
+ await t({
99
97
  id: U.id,
100
98
  name: U.name.trim(),
101
99
  manufacturerCode: U.manufacturerCode.trim().toUpperCase(),
@@ -104,26 +102,26 @@ function j() {
104
102
  email: U.contactEmail
105
103
  }),
106
104
  isActive: U.isActive
107
- }), w({
105
+ }), r({
108
106
  message: "Brand saved.",
109
107
  type: "success"
110
108
  }), z(!1), await q();
111
109
  } catch (e) {
112
110
  let t = e?.response?.data?.message ?? e?.message ?? "Failed to save brand";
113
- R(t), w({
111
+ R(t), r({
114
112
  message: t,
115
113
  type: "error"
116
114
  });
117
115
  }
118
116
  }
119
117
  let $ = H ? N : N.filter((e) => e.isActive !== !1);
120
- return /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(ie, {}), /* @__PURE__ */ f(l, {
118
+ return /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(s, {}), /* @__PURE__ */ f(l, {
121
119
  perm: "view.manage.productManagement.brand",
122
- children: [/* @__PURE__ */ f(ne, {
120
+ children: [/* @__PURE__ */ f(ae, {
123
121
  title: "Brands",
124
122
  subtitle: "The manufacturer or supplier of each product.",
125
123
  chips: ["Catalog"],
126
- actions: /* @__PURE__ */ f(v, {
124
+ actions: /* @__PURE__ */ f(y, {
127
125
  direction: "row",
128
126
  spacing: 1,
129
127
  children: [/* @__PURE__ */ d(m, {
@@ -138,20 +136,20 @@ function j() {
138
136
  children: "New Brand"
139
137
  }) : null]
140
138
  }),
141
- children: [L ? /* @__PURE__ */ d(oe, {
139
+ children: [L ? /* @__PURE__ */ d(se, {
142
140
  severity: "error",
143
141
  sx: { mb: 2 },
144
142
  children: L
145
- }) : null, /* @__PURE__ */ d(r, {
143
+ }) : null, /* @__PURE__ */ d(ee, {
146
144
  eyebrow: "Master data",
147
145
  title: "Brands",
148
146
  subtitle: F ? "Loading…" : `${$.length} ${$.length === 1 ? "brand" : "brands"}`,
149
- actions: /* @__PURE__ */ d(g, {
147
+ actions: /* @__PURE__ */ d(_, {
150
148
  control: /* @__PURE__ */ d(O, {
151
149
  checked: H,
152
150
  onChange: (e) => ve(e.target.checked)
153
151
  }),
154
- label: /* @__PURE__ */ d(C, {
152
+ label: /* @__PURE__ */ d(w, {
155
153
  variant: "body2",
156
154
  sx: { fontWeight: 600 },
157
155
  children: "Show inactive"
@@ -162,16 +160,16 @@ function j() {
162
160
  ml: 0
163
161
  }
164
162
  }),
165
- children: /* @__PURE__ */ f(a, { children: [/* @__PURE__ */ d(pe, { children: /* @__PURE__ */ f(x, { children: [
166
- /* @__PURE__ */ d(b, { children: "Name" }),
167
- /* @__PURE__ */ d(b, { children: "Manufacturer Code" }),
168
- /* @__PURE__ */ d(b, { children: "Contact" }),
169
- /* @__PURE__ */ d(b, { children: "Status" }),
170
- /* @__PURE__ */ d(b, {
163
+ children: /* @__PURE__ */ f(te, { children: [/* @__PURE__ */ d(pe, { children: /* @__PURE__ */ f(S, { children: [
164
+ /* @__PURE__ */ d(x, { children: "Name" }),
165
+ /* @__PURE__ */ d(x, { children: "Manufacturer Code" }),
166
+ /* @__PURE__ */ d(x, { children: "Contact" }),
167
+ /* @__PURE__ */ d(x, { children: "Status" }),
168
+ /* @__PURE__ */ d(x, {
171
169
  align: "right",
172
170
  children: "Action"
173
171
  })
174
- ] }) }), /* @__PURE__ */ d(y, { children: F ? Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ d(x, { children: Array.from({ length: 5 }).map((e, t) => /* @__PURE__ */ d(b, { children: /* @__PURE__ */ d(_, { height: 22 }) }, t)) }, t)) : $.length === 0 ? /* @__PURE__ */ d(ee, {
172
+ ] }) }), /* @__PURE__ */ d(b, { children: F ? Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ d(S, { children: Array.from({ length: 5 }).map((e, t) => /* @__PURE__ */ d(x, { children: /* @__PURE__ */ d(v, { height: 22 }) }, t)) }, t)) : $.length === 0 ? /* @__PURE__ */ d(ne, {
175
173
  colSpan: 5,
176
174
  icon: D,
177
175
  title: N.length === 0 ? "No brands yet" : "No active brands",
@@ -185,12 +183,12 @@ function j() {
185
183
  }) : null
186
184
  }) : $.map((e) => {
187
185
  let { phone: t, email: n } = k(e.contactInfo);
188
- return /* @__PURE__ */ f(x, {
186
+ return /* @__PURE__ */ f(S, {
189
187
  hover: !0,
190
188
  children: [
191
- /* @__PURE__ */ d(b, {
189
+ /* @__PURE__ */ d(x, {
192
190
  sx: { maxWidth: 240 },
193
- children: /* @__PURE__ */ d(C, {
191
+ children: /* @__PURE__ */ d(w, {
194
192
  variant: "body2",
195
193
  sx: {
196
194
  fontWeight: 700,
@@ -199,7 +197,7 @@ function j() {
199
197
  children: e.name
200
198
  })
201
199
  }),
202
- /* @__PURE__ */ d(b, {
200
+ /* @__PURE__ */ d(x, {
203
201
  sx: { maxWidth: 160 },
204
202
  children: /* @__PURE__ */ d(p, {
205
203
  component: "span",
@@ -218,23 +216,23 @@ function j() {
218
216
  children: e.manufacturerCode
219
217
  })
220
218
  }),
221
- /* @__PURE__ */ d(b, { children: t || n ? /* @__PURE__ */ f(v, {
219
+ /* @__PURE__ */ d(x, { children: t || n ? /* @__PURE__ */ f(y, {
222
220
  spacing: .25,
223
- children: [t ? /* @__PURE__ */ d(C, {
221
+ children: [t ? /* @__PURE__ */ d(w, {
224
222
  variant: "caption",
225
223
  sx: { fontWeight: 600 },
226
224
  children: t
227
- }) : null, n ? /* @__PURE__ */ d(C, {
225
+ }) : null, n ? /* @__PURE__ */ d(w, {
228
226
  variant: "caption",
229
227
  color: "text.secondary",
230
228
  children: n
231
229
  }) : null]
232
- }) : /* @__PURE__ */ d(C, {
230
+ }) : /* @__PURE__ */ d(w, {
233
231
  variant: "caption",
234
232
  color: "text.disabled",
235
233
  children: "—"
236
234
  }) }),
237
- /* @__PURE__ */ d(b, { children: /* @__PURE__ */ d(ce, {
235
+ /* @__PURE__ */ d(x, { children: /* @__PURE__ */ d(le, {
238
236
  size: "small",
239
237
  label: e.isActive ? "Active" : "Inactive",
240
238
  color: e.isActive ? "success" : "default",
@@ -245,7 +243,7 @@ function j() {
245
243
  height: 22
246
244
  }
247
245
  }) }),
248
- /* @__PURE__ */ d(b, {
246
+ /* @__PURE__ */ d(x, {
249
247
  align: "right",
250
248
  children: j ? /* @__PURE__ */ d(m, {
251
249
  size: "small",
@@ -258,20 +256,20 @@ function j() {
258
256
  }, e.id);
259
257
  }) })] })
260
258
  })]
261
- }), /* @__PURE__ */ f(le, {
259
+ }), /* @__PURE__ */ f(ue, {
262
260
  open: _e,
263
261
  onClose: () => z(!1),
264
262
  fullWidth: !0,
265
263
  maxWidth: "sm",
266
264
  children: [
267
- /* @__PURE__ */ d(de, { children: B ? "Edit Brand" : "New Brand" }),
268
- /* @__PURE__ */ d(h, {
265
+ /* @__PURE__ */ d(g, { children: B ? "Edit Brand" : "New Brand" }),
266
+ /* @__PURE__ */ d(de, {
269
267
  dividers: !0,
270
- children: /* @__PURE__ */ f(v, {
268
+ children: /* @__PURE__ */ f(y, {
271
269
  spacing: 2,
272
270
  sx: { pt: 1 },
273
271
  children: [
274
- /* @__PURE__ */ d(S, {
272
+ /* @__PURE__ */ d(C, {
275
273
  required: !0,
276
274
  label: "Name",
277
275
  size: "small",
@@ -295,7 +293,7 @@ function j() {
295
293
  max: 255
296
294
  })
297
295
  }),
298
- /* @__PURE__ */ d(S, {
296
+ /* @__PURE__ */ d(C, {
299
297
  required: !0,
300
298
  label: "Manufacturer code",
301
299
  size: "small",
@@ -315,7 +313,7 @@ function j() {
315
313
  max: 100
316
314
  })
317
315
  }),
318
- /* @__PURE__ */ d(S, {
316
+ /* @__PURE__ */ d(C, {
319
317
  label: "Contact Number",
320
318
  size: "small",
321
319
  fullWidth: !0,
@@ -341,7 +339,7 @@ function j() {
341
339
  })
342
340
  }) } : void 0
343
341
  }),
344
- /* @__PURE__ */ d(S, {
342
+ /* @__PURE__ */ d(C, {
345
343
  label: "Email",
346
344
  size: "small",
347
345
  fullWidth: !0,
@@ -356,8 +354,8 @@ function j() {
356
354
  error: G.show("contactEmail") && !!Z.contactEmail,
357
355
  helperText: G.show("contactEmail") ? Z.contactEmail : ""
358
356
  }),
359
- /* @__PURE__ */ d(g, {
360
- control: /* @__PURE__ */ d(se, {
357
+ /* @__PURE__ */ d(_, {
358
+ control: /* @__PURE__ */ d(ce, {
361
359
  checked: U.isActive,
362
360
  onChange: (e) => W({
363
361
  ...U,
@@ -369,7 +367,7 @@ function j() {
369
367
  ]
370
368
  })
371
369
  }),
372
- /* @__PURE__ */ f(ue, { children: [/* @__PURE__ */ d(m, {
370
+ /* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(m, {
373
371
  onClick: () => z(!1),
374
372
  children: "Cancel"
375
373
  }), /* @__PURE__ */ d(m, {
@@ -385,4 +383,4 @@ function j() {
385
383
  //#endregion
386
384
  export { j as default };
387
385
 
388
- //# sourceMappingURL=BrandsPage-DM5ZRz8L.js.map
386
+ //# sourceMappingURL=BrandsPage-DmRW5bhm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandsPage-DmRW5bhm.js","names":[],"sources":["../src/views/BrandsPage.jsx"],"sourcesContent":["import { useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n Alert,\n Box,\n Button,\n Checkbox,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n InputAdornment,\n Skeleton,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from '@mui/material';\nimport AddRoundedIcon from '@mui/icons-material/AddRounded';\nimport RefreshRoundedIcon from '@mui/icons-material/RefreshRounded';\nimport SellRoundedIcon from '@mui/icons-material/SellRounded';\nimport { showToast } from '@pm/utils/pmToast';\nimport CustomSwitch from '@/views/custom-components/CustomSwitch';\nimport PmPageShell from '@pm/components/PmPageShell';\nimport PmNav from '@pm/components/PmNav';\nimport PmGuard from '@pm/components/PmGuard';\nimport { usePermissionedEffect, usePmPermissions } from '@pm/utils/permissions';\nimport { PmEmptyRow, PmFieldHelp, PmTable, PmTableCard } from '@pm/components/PmTable';\nimport { getBrands, upsertBrand } from '@pm/services/pmApi';\nimport { isClean, validateEmail, validateRequired } from '@pm/utils/validation';\nimport { findCountry, validatePhoneForCountry } from '@/common/constants/countries';\nimport { usePmSettings } from '@pm/utils/settingsStore';\nimport { useFieldErrors } from '@pm/utils/useFieldErrors';\n\n// Backend stores contact_info as a JSON-encoded string. We keep the discrete\n// fields here so the UI is form-friendly, and only ever round-trip the JSON.\nfunction parseContactInfo(raw) {\n if (!raw) return { phone: '', email: '' };\n try {\n const obj = JSON.parse(raw);\n return {\n phone: typeof obj?.phone === 'string' ? obj.phone : '',\n email: typeof obj?.email === 'string' ? obj.email : '',\n };\n } catch {\n return { phone: '', email: '' };\n }\n}\n\nfunction serializeContactInfo({ phone, email }) {\n const out = {};\n if (phone?.trim()) out.phone = phone.trim();\n if (email?.trim()) out.email = email.trim();\n return Object.keys(out).length ? JSON.stringify(out) : null;\n}\n\nexport default function BrandsPage() {\n const perms = usePmPermissions();\n const canWrite = perms.has('update.manage.productManagement.brand');\n const settings = usePmSettings();\n const country = findCountry(settings?.countryCode);\n const [items, setItems] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [openDialog, setOpenDialog] = useState(false);\n const [editing, setEditing] = useState(null);\n // Default to active-only; the toggle above the table reveals inactive rows.\n const [showInactive, setShowInactive] = useState(false);\n const [form, setForm] = useState(emptyForm());\n const fieldErrors = useFieldErrors();\n\n function emptyForm() {\n return {\n id: '',\n name: '',\n manufacturerCode: '',\n contactPhone: '',\n contactEmail: '',\n isActive: true,\n };\n }\n\n async function load() {\n setLoading(true);\n setError('');\n try {\n const data = await getBrands(undefined, true);\n setItems(data);\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to load brands';\n setError(message);\n showToast({ message, type: 'error' });\n } finally {\n setLoading(false);\n }\n }\n\n usePermissionedEffect('view.manage.productManagement.brand', () => {\n void load();\n }, []);\n\n function openCreate() {\n setEditing(null);\n setForm({ ...emptyForm(), id: uuidv4() });\n fieldErrors.reset();\n setError('');\n setOpenDialog(true);\n }\n\n function openEdit(item) {\n const { phone, email } = parseContactInfo(item.contactInfo);\n setEditing(item);\n fieldErrors.reset();\n setError('');\n setForm({\n id: item.id,\n name: item.name ?? '',\n manufacturerCode: item.manufacturerCode ?? '',\n contactPhone: phone,\n contactEmail: email,\n isActive: item.isActive !== false,\n });\n setOpenDialog(true);\n }\n\n const mfrCodeBase = validateRequired(form.manufacturerCode, 'Manufacturer code');\n const mfrNorm = form.manufacturerCode.trim().toUpperCase();\n const mfrClash = !mfrCodeBase\n && mfrNorm\n && items.some((b) => b.id !== form.id && (b.manufacturerCode || '').toUpperCase() === mfrNorm);\n const formErrors = {\n name: validateRequired(form.name, 'Name'),\n manufacturerCode: mfrCodeBase || (mfrClash ? 'Code is already in use — edit it manually to make it unique.' : ''),\n contactPhone: validatePhoneForCountry(form.contactPhone, country),\n contactEmail: validateEmail(form.contactEmail),\n };\n const formIsValid = isClean(formErrors);\n\n async function save() {\n if (!formIsValid) {\n fieldErrors.markAllTouched();\n setError('Please fix the highlighted fields.');\n return;\n }\n try {\n await upsertBrand({\n id: form.id,\n name: form.name.trim(),\n manufacturerCode: form.manufacturerCode.trim().toUpperCase(),\n contactInfo: serializeContactInfo({\n phone: form.contactPhone,\n email: form.contactEmail,\n }),\n isActive: form.isActive,\n });\n showToast({ message: 'Brand saved.', type: 'success' });\n setOpenDialog(false);\n await load();\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to save brand';\n setError(message);\n showToast({ message, type: 'error' });\n }\n }\n\n const visible = showInactive ? items : items.filter((b) => b.isActive !== false);\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={'view.manage.productManagement.brand'}>\n <PmPageShell\n title=\"Brands\"\n subtitle=\"The manufacturer or supplier of each product.\"\n chips={['Catalog']}\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" startIcon={<RefreshRoundedIcon />} onClick={() => void load()}>Refresh</Button>\n {canWrite ? (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />} onClick={openCreate}>New Brand</Button>\n ) : null}\n </Stack>\n }\n >\n {error ? <Alert severity=\"error\" sx={{ mb: 2 }}>{error}</Alert> : null}\n\n <PmTableCard\n eyebrow=\"Master data\"\n title=\"Brands\"\n subtitle={loading ? 'Loading…' : `${visible.length} ${visible.length === 1 ? 'brand' : 'brands'}`}\n actions={\n <FormControlLabel\n control={<CustomSwitch checked={showInactive}\n onChange={(e) => setShowInactive(e.target.checked)} />}\n label={<Typography variant=\"body2\" sx={{ fontWeight: 600 }}>Show inactive</Typography>}\n labelPlacement=\"start\"\n sx={{ mr: 0.5, ml: 0 }}\n />\n }\n >\n <PmTable>\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Manufacturer Code</TableCell>\n <TableCell>Contact</TableCell>\n <TableCell>Status</TableCell>\n <TableCell align=\"right\">Action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n Array.from({ length: 4 }).map((_, i) => (\n <TableRow key={i}>\n {Array.from({ length: 5 }).map((__, j) => (\n <TableCell key={j}><Skeleton height={22} /></TableCell>\n ))}\n </TableRow>\n ))\n ) : visible.length === 0 ? (\n <PmEmptyRow\n colSpan={5}\n icon={SellRoundedIcon}\n title={items.length === 0 ? 'No brands yet' : 'No active brands'}\n hint={items.length === 0\n ? 'Add manufacturers so you can link them to your products.'\n : 'Turn on “Show inactive” to see deactivated brands.'}\n action={items.length === 0 && canWrite ? (\n <Button variant=\"contained\" size=\"small\" startIcon={<AddRoundedIcon />} onClick={openCreate}>\n Create first brand\n </Button>\n ) : null}\n />\n ) : visible.map((b) => {\n const { phone, email } = parseContactInfo(b.contactInfo);\n return (\n <TableRow key={b.id} hover>\n <TableCell sx={{ maxWidth: 240 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 700, wordBreak: 'break-word' }}>{b.name}</Typography>\n </TableCell>\n <TableCell sx={{ maxWidth: 160 }}>\n <Box component=\"span\" sx={{\n display: 'inline-block', px: 0.85, py: 0.25, borderRadius: 1,\n bgcolor: 'grey.100', fontFamily: 'monospace', fontSize: '0.72rem', fontWeight: 800,\n maxWidth: '100%', wordBreak: 'break-all',\n }}>\n {b.manufacturerCode}\n </Box>\n </TableCell>\n <TableCell>\n {phone || email ? (\n <Stack spacing={0.25}>\n {phone ? <Typography variant=\"caption\" sx={{ fontWeight: 600 }}>{phone}</Typography> : null}\n {email ? <Typography variant=\"caption\" color=\"text.secondary\">{email}</Typography> : null}\n </Stack>\n ) : <Typography variant=\"caption\" color=\"text.disabled\">—</Typography>}\n </TableCell>\n <TableCell>\n <Chip\n size=\"small\"\n label={b.isActive ? 'Active' : 'Inactive'}\n color={b.isActive ? 'success' : 'default'}\n variant={b.isActive ? 'filled' : 'outlined'}\n sx={{ fontWeight: 700, borderRadius: 1.5, height: 22 }}\n />\n </TableCell>\n <TableCell align=\"right\">\n {canWrite ? (\n <Button size=\"small\" variant=\"outlined\" onClick={() => openEdit(b)}>Edit</Button>\n ) : null}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </PmTable>\n </PmTableCard>\n </PmPageShell>\n\n <Dialog open={openDialog} onClose={() => setOpenDialog(false)} fullWidth maxWidth=\"sm\">\n <DialogTitle>{editing ? 'Edit Brand' : 'New Brand'}</DialogTitle>\n <DialogContent dividers>\n <Stack spacing={2} sx={{ pt: 1 }}>\n <TextField\n required\n label=\"Name\" size=\"small\" fullWidth\n value={form.name}\n inputProps={{ maxLength: 255 }}\n onChange={(e) => {\n const nextName = e.target.value;\n // Auto-derive manufacturer code from initials of every word — but\n // only on create (when editing an existing brand we never overwrite\n // a code the user has already curated).\n const initialsFromName = nextName\n .split(/\\s+/)\n .filter(Boolean)\n .map((w) => w[0])\n .join('')\n .toUpperCase();\n setForm((f) => ({\n ...f,\n name: nextName,\n manufacturerCode: editing ? f.manufacturerCode : initialsFromName,\n }));\n }}\n onBlur={fieldErrors.onBlur('name')}\n error={fieldErrors.show('name') && !!formErrors.name}\n FormHelperTextProps={{ component: 'div' }}\n helperText={<PmFieldHelp message={fieldErrors.show('name') ? formErrors.name : ''} value={form.name} max={255} />}\n />\n <TextField\n required\n label=\"Manufacturer code\" size=\"small\" fullWidth\n value={form.manufacturerCode}\n inputProps={{ maxLength: 100 }}\n onChange={(e) => setForm({ ...form, manufacturerCode: e.target.value.toUpperCase() })}\n onBlur={fieldErrors.onBlur('manufacturerCode')}\n error={fieldErrors.show('manufacturerCode') && !!formErrors.manufacturerCode}\n FormHelperTextProps={{ component: 'div' }}\n helperText={\n <PmFieldHelp\n message={fieldErrors.show('manufacturerCode') && formErrors.manufacturerCode\n ? formErrors.manufacturerCode\n : 'Auto-generated from the name as initials. Edit if needed to make it unique.'}\n value={form.manufacturerCode}\n max={100}\n />\n }\n />\n <TextField\n label=\"Contact Number\"\n size=\"small\"\n fullWidth\n type=\"tel\"\n placeholder={country\n ? (country.phoneMin === country.phoneMax\n ? `${country.phoneMin}-digit local number`\n : `${country.phoneMin}–${country.phoneMax} digit local number`)\n : 'Local number'}\n value={form.contactPhone}\n // Keep only digits and spaces — the dial code lives in the\n // adornment, not in the value.\n onChange={(e) => setForm({ ...form, contactPhone: e.target.value.replace(/[^\\d\\s]/g, '') })}\n onBlur={fieldErrors.onBlur('contactPhone')}\n error={fieldErrors.show('contactPhone') && !!formErrors.contactPhone}\n helperText={\n fieldErrors.show('contactPhone') && formErrors.contactPhone\n ? formErrors.contactPhone\n : country\n ? `Format for ${country.name}: ${country.phoneCode} followed by ${country.phoneMin}${country.phoneMin === country.phoneMax ? '' : `–${country.phoneMax}`} digits.`\n : 'Local number, digits only.'\n }\n InputProps={country ? {\n startAdornment: (\n <InputAdornment position=\"start\">\n <Box component=\"span\" sx={{ fontWeight: 700, color: 'text.secondary' }}>{country.phoneCode}</Box>\n </InputAdornment>\n ),\n } : undefined}\n />\n <TextField\n label=\"Email\"\n size=\"small\"\n fullWidth\n type=\"email\"\n placeholder=\"e.g. contact@manufacturer.example\"\n value={form.contactEmail}\n onChange={(e) => setForm({ ...form, contactEmail: e.target.value })}\n onBlur={fieldErrors.onBlur('contactEmail')}\n error={fieldErrors.show('contactEmail') && !!formErrors.contactEmail}\n helperText={fieldErrors.show('contactEmail') ? formErrors.contactEmail : ''}\n />\n <FormControlLabel\n control={<Checkbox checked={form.isActive}\n onChange={(e) => setForm({ ...form, isActive: e.target.checked })} />}\n label=\"Active\" />\n </Stack>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setOpenDialog(false)}>Cancel</Button>\n <Button variant=\"contained\" disabled={!formIsValid} onClick={() => void save()}>Save</Button>\n </DialogActions>\n </Dialog>\n </PmGuard>\n </Box>\n );\n}\n"],"mappings":"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"}