@argusoft/medplat-product-management 1.0.2 → 1.0.4

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 (83) hide show
  1. package/dist/{BrandsPage-CSA3meke.js → BrandsPage-BE3kn-8b.js} +77 -75
  2. package/dist/BrandsPage-BE3kn-8b.js.map +1 -0
  3. package/dist/{CategoriesPage-BrspzkJL.js → CategoriesPage-COqi3pMi.js} +71 -70
  4. package/dist/{CategoriesPage-BrspzkJL.js.map → CategoriesPage-COqi3pMi.js.map} +1 -1
  5. package/dist/{DashboardPage-CqaquOs2.js → DashboardPage-C_H1Jrey.js} +90 -89
  6. package/dist/DashboardPage-C_H1Jrey.js.map +1 -0
  7. package/dist/{FacilityPicker-Dv_H95WW.js → FacilityPicker-Diq2hnYg.js} +2 -2
  8. package/dist/{FacilityPicker-Dv_H95WW.js.map → FacilityPicker-Diq2hnYg.js.map} +1 -1
  9. package/dist/{InventoryPage-CPbzfDMR.js → InventoryPage-Bjpw6vTz.js} +106 -115
  10. package/dist/InventoryPage-Bjpw6vTz.js.map +1 -0
  11. package/dist/{MemberProfileCard-0vjO3Gzd.js → MemberProfileCard-BLUVRILO.js} +10 -9
  12. package/dist/MemberProfileCard-BLUVRILO.js.map +1 -0
  13. package/dist/{PaymentCreatePage-BYmDZAIB.js → PaymentCreatePage-B5VOgTx9.js} +173 -177
  14. package/dist/PaymentCreatePage-B5VOgTx9.js.map +1 -0
  15. package/dist/{PaymentsPage-BXPvKon-.js → PaymentsPage-DY6BclkN.js} +24 -23
  16. package/dist/{PaymentsPage-BXPvKon-.js.map → PaymentsPage-DY6BclkN.js.map} +1 -1
  17. package/dist/PickupCreatePage-CCSiyFQF.js +706 -0
  18. package/dist/PickupCreatePage-CCSiyFQF.js.map +1 -0
  19. package/dist/{PickupsPage-D66_Wta4.js → PickupsPage-DGi6T5Of.js} +83 -90
  20. package/dist/PickupsPage-DGi6T5Of.js.map +1 -0
  21. package/dist/PmGuard-C90yhpsN.js +592 -0
  22. package/dist/PmGuard-C90yhpsN.js.map +1 -0
  23. package/dist/{PmTable-B9970kPY.js → PmTable-BkK65bJQ.js} +98 -98
  24. package/dist/PmTable-BkK65bJQ.js.map +1 -0
  25. package/dist/{ProductEditPage-B8qFTCW9.js → ProductEditPage-CQj9egzW.js} +138 -137
  26. package/dist/ProductEditPage-CQj9egzW.js.map +1 -0
  27. package/dist/{ProductsPage-C7_r9cKn.js → ProductsPage-i8QVw_Jm.js} +65 -64
  28. package/dist/{ProductsPage-C7_r9cKn.js.map → ProductsPage-i8QVw_Jm.js.map} +1 -1
  29. package/dist/PurchaseCreatePage-Bp6bl9n8.js +591 -0
  30. package/dist/PurchaseCreatePage-Bp6bl9n8.js.map +1 -0
  31. package/dist/{PurchaseRequestDetailPage-C7aAwEqw.js → PurchaseRequestDetailPage-CNAqIFef.js} +216 -215
  32. package/dist/PurchaseRequestDetailPage-CNAqIFef.js.map +1 -0
  33. package/dist/{PurchaseRequestsPage-BwCkbpaX.js → PurchaseRequestsPage-BJqDlNrc.js} +57 -56
  34. package/dist/{PurchaseRequestsPage-BwCkbpaX.js.map → PurchaseRequestsPage-BJqDlNrc.js.map} +1 -1
  35. package/dist/{PurchasesPage-CvaZouVy.js → PurchasesPage-BQEToymQ.js} +76 -75
  36. package/dist/{PurchasesPage-CvaZouVy.js.map → PurchasesPage-BQEToymQ.js.map} +1 -1
  37. package/dist/{SaleCreatePage-DP1Qmltu.js → SaleCreatePage-DbfBK4PH.js} +149 -173
  38. package/dist/SaleCreatePage-DbfBK4PH.js.map +1 -0
  39. package/dist/{SalesPage-CO3cdYX5.js → SalesPage-CTBJMxZe.js} +50 -49
  40. package/dist/SalesPage-CTBJMxZe.js.map +1 -0
  41. package/dist/SettingsPage-CiwVmzM3.js +663 -0
  42. package/dist/SettingsPage-CiwVmzM3.js.map +1 -0
  43. package/dist/{StorageUnitsPage-B9Hr_RkW.js → StorageUnitsPage-BV7nK_iE.js} +57 -56
  44. package/dist/{StorageUnitsPage-B9Hr_RkW.js.map → StorageUnitsPage-BV7nK_iE.js.map} +1 -1
  45. package/dist/{TransactionsPage-HKIGwEZN.js → TransactionsPage-Cocn4901.js} +55 -54
  46. package/dist/TransactionsPage-Cocn4901.js.map +1 -0
  47. package/dist/TransferCreatePage-DbjcjuOg.js +316 -0
  48. package/dist/TransferCreatePage-DbjcjuOg.js.map +1 -0
  49. package/dist/TransfersPage-BFVF7Xvc.js +471 -0
  50. package/dist/TransfersPage-BFVF7Xvc.js.map +1 -0
  51. package/dist/VialsPage-BNzYTLVd.js +321 -0
  52. package/dist/VialsPage-BNzYTLVd.js.map +1 -0
  53. package/dist/index.js +652 -34
  54. package/dist/index.js.map +1 -1
  55. package/dist/settingsStore-KW217unV.js +417 -0
  56. package/dist/settingsStore-KW217unV.js.map +1 -0
  57. package/package.json +1 -1
  58. package/dist/BrandsPage-CSA3meke.js.map +0 -1
  59. package/dist/DashboardPage-CqaquOs2.js.map +0 -1
  60. package/dist/InventoryPage-CPbzfDMR.js.map +0 -1
  61. package/dist/MemberProfileCard-0vjO3Gzd.js.map +0 -1
  62. package/dist/PaymentCreatePage-BYmDZAIB.js.map +0 -1
  63. package/dist/PickupCreatePage-CMGwoAXj.js +0 -426
  64. package/dist/PickupCreatePage-CMGwoAXj.js.map +0 -1
  65. package/dist/PickupsPage-D66_Wta4.js.map +0 -1
  66. package/dist/PmTable-B9970kPY.js.map +0 -1
  67. package/dist/ProductEditPage-B8qFTCW9.js.map +0 -1
  68. package/dist/PurchaseCreatePage-CDfNDcKG.js +0 -627
  69. package/dist/PurchaseCreatePage-CDfNDcKG.js.map +0 -1
  70. package/dist/PurchaseRequestDetailPage-C7aAwEqw.js.map +0 -1
  71. package/dist/SaleCreatePage-DP1Qmltu.js.map +0 -1
  72. package/dist/SalesPage-CO3cdYX5.js.map +0 -1
  73. package/dist/SettingsPage-DvVRwSFw.js +0 -711
  74. package/dist/SettingsPage-DvVRwSFw.js.map +0 -1
  75. package/dist/TransactionsPage-HKIGwEZN.js.map +0 -1
  76. package/dist/TransferCreatePage-DMuZqQ3c.js +0 -363
  77. package/dist/TransferCreatePage-DMuZqQ3c.js.map +0 -1
  78. package/dist/TransfersPage-COIyouL4.js +0 -480
  79. package/dist/TransfersPage-COIyouL4.js.map +0 -1
  80. package/dist/VialsPage-BNPUwGCU.js +0 -922
  81. package/dist/VialsPage-BNPUwGCU.js.map +0 -1
  82. package/dist/currency-ClRLIEg2.js +0 -1372
  83. package/dist/currency-ClRLIEg2.js.map +0 -1
@@ -1,15 +1,17 @@
1
- import { S as e, a as t, d as n, f as ee, i as te, l as ne, n as re, o as ie, ot as r, r as ae } from "./currency-ClRLIEg2.js";
2
- import { c as oe, n as i, s as se, t as a } from "./PmTable-B9970kPY.js";
3
- import { i as o, m as s, t as c } from "./validation-Ba7puFIO.js";
4
- import { t as ce } from "./useFieldErrors-hDG8ox_x.js";
5
- import { useState as l } from "react";
6
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
7
- import { v4 as le } from "uuid";
8
- import { Alert as ue, Box as f, Button as p, Checkbox as de, Chip as m, Dialog as fe, DialogActions as h, DialogContent as pe, DialogTitle as me, FormControlLabel as g, InputAdornment as _, Skeleton as v, Stack as y, TableBody as b, TableCell as x, TableHead as he, TableRow as S, TextField as C, Typography as w } from "@mui/material";
1
+ import { Z as e, p as t, r as n } from "./settingsStore-KW217unV.js";
2
+ import { c as r, n as i, s as a, t as ee } from "./PmTable-BkK65bJQ.js";
3
+ import { i as te, m as o, t as s } from "./validation-Ba7puFIO.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-C90yhpsN.js";
6
+ import { useState as u } from "react";
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";
10
+ import { findCountry as me, validatePhoneForCountry as he } from "@/common/constants/countries";
11
+ import { v4 as ge } from "uuid";
9
12
  import T from "@mui/icons-material/AddRounded";
10
- import ge from "@mui/icons-material/RefreshRounded";
11
- import E from "@mui/icons-material/SellRounded";
12
- import { showToast as D } from "@/common/toaster/toaster";
13
+ import E from "@mui/icons-material/RefreshRounded";
14
+ import D from "@mui/icons-material/SellRounded";
13
15
  import O from "@/views/custom-components/CustomSwitch";
14
16
  //#region src/views/BrandsPage.jsx
15
17
  function k(e) {
@@ -35,7 +37,7 @@ function A({ phone: e, email: t }) {
35
37
  return e?.trim() && (n.phone = e.trim()), t?.trim() && (n.email = t.trim()), Object.keys(n).length ? JSON.stringify(n) : null;
36
38
  }
37
39
  function j() {
38
- let j = t().has("update.manage.productManagement.brand"), M = n(ne()?.countryCode), [N, P] = l([]), [F, I] = l(!1), [L, R] = l(""), [_e, z] = l(!1), [B, V] = l(null), [H, ve] = l(!1), [U, W] = l(K()), G = ce();
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
41
  function K() {
40
42
  return {
41
43
  id: "",
@@ -49,10 +51,10 @@ function j() {
49
51
  async function q() {
50
52
  I(!0), R("");
51
53
  try {
52
- P(await e(void 0, !0));
54
+ P(await t(void 0, !0));
53
55
  } catch (e) {
54
56
  let t = e?.response?.data?.message ?? e?.message ?? "Failed to load brands";
55
- R(t), D({
57
+ R(t), w({
56
58
  message: t,
57
59
  type: "error"
58
60
  });
@@ -60,13 +62,13 @@ function j() {
60
62
  I(!1);
61
63
  }
62
64
  }
63
- te("view.manage.productManagement.brand", () => {
65
+ ae("view.manage.productManagement.brand", () => {
64
66
  q();
65
67
  }, []);
66
68
  function J() {
67
69
  V(null), W({
68
70
  ...K(),
69
- id: le()
71
+ id: ge()
70
72
  }), G.reset(), R(""), z(!0);
71
73
  }
72
74
  function ye(e) {
@@ -80,19 +82,19 @@ function j() {
80
82
  isActive: e.isActive !== !1
81
83
  }), z(!0);
82
84
  }
83
- let Y = s(U.manufacturerCode, "Manufacturer code"), X = U.manufacturerCode.trim().toUpperCase(), be = !Y && X && N.some((e) => e.id !== U.id && (e.manufacturerCode || "").toUpperCase() === X), Z = {
84
- name: s(U.name, "Name"),
85
+ 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 = {
86
+ name: o(U.name, "Name"),
85
87
  manufacturerCode: Y || (be ? "Code is already in use — edit it manually to make it unique." : ""),
86
- contactPhone: ee(U.contactPhone, M),
87
- contactEmail: o(U.contactEmail)
88
- }, Q = c(Z);
88
+ contactPhone: he(U.contactPhone, M),
89
+ contactEmail: te(U.contactEmail)
90
+ }, Q = s(Z);
89
91
  async function xe() {
90
92
  if (!Q) {
91
93
  G.markAllTouched(), R("Please fix the highlighted fields.");
92
94
  return;
93
95
  }
94
96
  try {
95
- await r({
97
+ await e({
96
98
  id: U.id,
97
99
  name: U.name.trim(),
98
100
  manufacturerCode: U.manufacturerCode.trim().toUpperCase(),
@@ -101,54 +103,54 @@ function j() {
101
103
  email: U.contactEmail
102
104
  }),
103
105
  isActive: U.isActive
104
- }), D({
106
+ }), w({
105
107
  message: "Brand saved.",
106
108
  type: "success"
107
109
  }), z(!1), await q();
108
110
  } catch (e) {
109
111
  let t = e?.response?.data?.message ?? e?.message ?? "Failed to save brand";
110
- R(t), D({
112
+ R(t), w({
111
113
  message: t,
112
114
  type: "error"
113
115
  });
114
116
  }
115
117
  }
116
118
  let $ = H ? N : N.filter((e) => e.isActive !== !1);
117
- return /* @__PURE__ */ d(f, { children: [/* @__PURE__ */ u(ae, {}), /* @__PURE__ */ d(re, {
119
+ return /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(ie, {}), /* @__PURE__ */ f(l, {
118
120
  perm: "view.manage.productManagement.brand",
119
- children: [/* @__PURE__ */ d(ie, {
121
+ children: [/* @__PURE__ */ f(ne, {
120
122
  title: "Brands",
121
123
  subtitle: "The manufacturer or supplier of each product.",
122
124
  chips: ["Catalog"],
123
- actions: /* @__PURE__ */ d(y, {
125
+ actions: /* @__PURE__ */ f(v, {
124
126
  direction: "row",
125
127
  spacing: 1,
126
- children: [/* @__PURE__ */ u(p, {
128
+ children: [/* @__PURE__ */ d(m, {
127
129
  variant: "outlined",
128
- startIcon: /* @__PURE__ */ u(ge, {}),
130
+ startIcon: /* @__PURE__ */ d(E, {}),
129
131
  onClick: () => void q(),
130
132
  children: "Refresh"
131
- }), j ? /* @__PURE__ */ u(p, {
133
+ }), j ? /* @__PURE__ */ d(m, {
132
134
  variant: "contained",
133
- startIcon: /* @__PURE__ */ u(T, {}),
135
+ startIcon: /* @__PURE__ */ d(T, {}),
134
136
  onClick: J,
135
137
  children: "New Brand"
136
138
  }) : null]
137
139
  }),
138
- children: [L ? /* @__PURE__ */ u(ue, {
140
+ children: [L ? /* @__PURE__ */ d(oe, {
139
141
  severity: "error",
140
142
  sx: { mb: 2 },
141
143
  children: L
142
- }) : null, /* @__PURE__ */ u(oe, {
144
+ }) : null, /* @__PURE__ */ d(r, {
143
145
  eyebrow: "Master data",
144
146
  title: "Brands",
145
147
  subtitle: F ? "Loading…" : `${$.length} ${$.length === 1 ? "brand" : "brands"}`,
146
- actions: /* @__PURE__ */ u(g, {
147
- control: /* @__PURE__ */ u(O, {
148
+ actions: /* @__PURE__ */ d(g, {
149
+ control: /* @__PURE__ */ d(O, {
148
150
  checked: H,
149
151
  onChange: (e) => ve(e.target.checked)
150
152
  }),
151
- label: /* @__PURE__ */ u(w, {
153
+ label: /* @__PURE__ */ d(C, {
152
154
  variant: "body2",
153
155
  sx: { fontWeight: 600 },
154
156
  children: "Show inactive"
@@ -159,35 +161,35 @@ function j() {
159
161
  ml: 0
160
162
  }
161
163
  }),
162
- children: /* @__PURE__ */ d(se, { children: [/* @__PURE__ */ u(he, { children: /* @__PURE__ */ d(S, { children: [
163
- /* @__PURE__ */ u(x, { children: "Name" }),
164
- /* @__PURE__ */ u(x, { children: "Manufacturer Code" }),
165
- /* @__PURE__ */ u(x, { children: "Contact" }),
166
- /* @__PURE__ */ u(x, { children: "Status" }),
167
- /* @__PURE__ */ u(x, {
164
+ children: /* @__PURE__ */ f(a, { children: [/* @__PURE__ */ d(pe, { children: /* @__PURE__ */ f(x, { children: [
165
+ /* @__PURE__ */ d(b, { children: "Name" }),
166
+ /* @__PURE__ */ d(b, { children: "Manufacturer Code" }),
167
+ /* @__PURE__ */ d(b, { children: "Contact" }),
168
+ /* @__PURE__ */ d(b, { children: "Status" }),
169
+ /* @__PURE__ */ d(b, {
168
170
  align: "right",
169
171
  children: "Action"
170
172
  })
171
- ] }) }), /* @__PURE__ */ u(b, { children: F ? Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ u(S, { children: Array.from({ length: 5 }).map((e, t) => /* @__PURE__ */ u(x, { children: /* @__PURE__ */ u(v, { height: 22 }) }, t)) }, t)) : $.length === 0 ? /* @__PURE__ */ u(a, {
173
+ ] }) }), /* @__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
174
  colSpan: 5,
173
- icon: E,
175
+ icon: D,
174
176
  title: N.length === 0 ? "No brands yet" : "No active brands",
175
177
  hint: N.length === 0 ? "Add manufacturers so you can link them to your products." : "Turn on “Show inactive” to see deactivated brands.",
176
- action: N.length === 0 && j ? /* @__PURE__ */ u(p, {
178
+ action: N.length === 0 && j ? /* @__PURE__ */ d(m, {
177
179
  variant: "contained",
178
180
  size: "small",
179
- startIcon: /* @__PURE__ */ u(T, {}),
181
+ startIcon: /* @__PURE__ */ d(T, {}),
180
182
  onClick: J,
181
183
  children: "Create first brand"
182
184
  }) : null
183
185
  }) : $.map((e) => {
184
186
  let { phone: t, email: n } = k(e.contactInfo);
185
- return /* @__PURE__ */ d(S, {
187
+ return /* @__PURE__ */ f(x, {
186
188
  hover: !0,
187
189
  children: [
188
- /* @__PURE__ */ u(x, {
190
+ /* @__PURE__ */ d(b, {
189
191
  sx: { maxWidth: 240 },
190
- children: /* @__PURE__ */ u(w, {
192
+ children: /* @__PURE__ */ d(C, {
191
193
  variant: "body2",
192
194
  sx: {
193
195
  fontWeight: 700,
@@ -196,9 +198,9 @@ function j() {
196
198
  children: e.name
197
199
  })
198
200
  }),
199
- /* @__PURE__ */ u(x, {
201
+ /* @__PURE__ */ d(b, {
200
202
  sx: { maxWidth: 160 },
201
- children: /* @__PURE__ */ u(f, {
203
+ children: /* @__PURE__ */ d(p, {
202
204
  component: "span",
203
205
  sx: {
204
206
  display: "inline-block",
@@ -215,23 +217,23 @@ function j() {
215
217
  children: e.manufacturerCode
216
218
  })
217
219
  }),
218
- /* @__PURE__ */ u(x, { children: t || n ? /* @__PURE__ */ d(y, {
220
+ /* @__PURE__ */ d(b, { children: t || n ? /* @__PURE__ */ f(v, {
219
221
  spacing: .25,
220
- children: [t ? /* @__PURE__ */ u(w, {
222
+ children: [t ? /* @__PURE__ */ d(C, {
221
223
  variant: "caption",
222
224
  sx: { fontWeight: 600 },
223
225
  children: t
224
- }) : null, n ? /* @__PURE__ */ u(w, {
226
+ }) : null, n ? /* @__PURE__ */ d(C, {
225
227
  variant: "caption",
226
228
  color: "text.secondary",
227
229
  children: n
228
230
  }) : null]
229
- }) : /* @__PURE__ */ u(w, {
231
+ }) : /* @__PURE__ */ d(C, {
230
232
  variant: "caption",
231
233
  color: "text.disabled",
232
234
  children: "—"
233
235
  }) }),
234
- /* @__PURE__ */ u(x, { children: /* @__PURE__ */ u(m, {
236
+ /* @__PURE__ */ d(b, { children: /* @__PURE__ */ d(ce, {
235
237
  size: "small",
236
238
  label: e.isActive ? "Active" : "Inactive",
237
239
  color: e.isActive ? "success" : "default",
@@ -242,9 +244,9 @@ function j() {
242
244
  height: 22
243
245
  }
244
246
  }) }),
245
- /* @__PURE__ */ u(x, {
247
+ /* @__PURE__ */ d(b, {
246
248
  align: "right",
247
- children: j ? /* @__PURE__ */ u(p, {
249
+ children: j ? /* @__PURE__ */ d(m, {
248
250
  size: "small",
249
251
  variant: "outlined",
250
252
  onClick: () => ye(e),
@@ -255,20 +257,20 @@ function j() {
255
257
  }, e.id);
256
258
  }) })] })
257
259
  })]
258
- }), /* @__PURE__ */ d(fe, {
260
+ }), /* @__PURE__ */ f(le, {
259
261
  open: _e,
260
262
  onClose: () => z(!1),
261
263
  fullWidth: !0,
262
264
  maxWidth: "sm",
263
265
  children: [
264
- /* @__PURE__ */ u(me, { children: B ? "Edit Brand" : "New Brand" }),
265
- /* @__PURE__ */ u(pe, {
266
+ /* @__PURE__ */ d(de, { children: B ? "Edit Brand" : "New Brand" }),
267
+ /* @__PURE__ */ d(h, {
266
268
  dividers: !0,
267
- children: /* @__PURE__ */ d(y, {
269
+ children: /* @__PURE__ */ f(v, {
268
270
  spacing: 2,
269
271
  sx: { pt: 1 },
270
272
  children: [
271
- /* @__PURE__ */ u(C, {
273
+ /* @__PURE__ */ d(S, {
272
274
  required: !0,
273
275
  label: "Name",
274
276
  size: "small",
@@ -286,13 +288,13 @@ function j() {
286
288
  onBlur: G.onBlur("name"),
287
289
  error: G.show("name") && !!Z.name,
288
290
  FormHelperTextProps: { component: "div" },
289
- helperText: /* @__PURE__ */ u(i, {
291
+ helperText: /* @__PURE__ */ d(i, {
290
292
  message: G.show("name") ? Z.name : "",
291
293
  value: U.name,
292
294
  max: 255
293
295
  })
294
296
  }),
295
- /* @__PURE__ */ u(C, {
297
+ /* @__PURE__ */ d(S, {
296
298
  required: !0,
297
299
  label: "Manufacturer code",
298
300
  size: "small",
@@ -306,13 +308,13 @@ function j() {
306
308
  onBlur: G.onBlur("manufacturerCode"),
307
309
  error: G.show("manufacturerCode") && !!Z.manufacturerCode,
308
310
  FormHelperTextProps: { component: "div" },
309
- helperText: /* @__PURE__ */ u(i, {
311
+ helperText: /* @__PURE__ */ d(i, {
310
312
  message: G.show("manufacturerCode") && Z.manufacturerCode ? Z.manufacturerCode : "Auto-generated from the name as initials. Edit if needed to make it unique.",
311
313
  value: U.manufacturerCode,
312
314
  max: 100
313
315
  })
314
316
  }),
315
- /* @__PURE__ */ u(C, {
317
+ /* @__PURE__ */ d(S, {
316
318
  label: "Contact Number",
317
319
  size: "small",
318
320
  fullWidth: !0,
@@ -326,9 +328,9 @@ function j() {
326
328
  onBlur: G.onBlur("contactPhone"),
327
329
  error: G.show("contactPhone") && !!Z.contactPhone,
328
330
  helperText: G.show("contactPhone") && Z.contactPhone ? Z.contactPhone : M ? `Format for ${M.name}: ${M.phoneCode} followed by ${M.phoneMin}${M.phoneMin === M.phoneMax ? "" : `–${M.phoneMax}`} digits.` : "Local number, digits only.",
329
- InputProps: M ? { startAdornment: /* @__PURE__ */ u(_, {
331
+ InputProps: M ? { startAdornment: /* @__PURE__ */ d(fe, {
330
332
  position: "start",
331
- children: /* @__PURE__ */ u(f, {
333
+ children: /* @__PURE__ */ d(p, {
332
334
  component: "span",
333
335
  sx: {
334
336
  fontWeight: 700,
@@ -338,7 +340,7 @@ function j() {
338
340
  })
339
341
  }) } : void 0
340
342
  }),
341
- /* @__PURE__ */ u(C, {
343
+ /* @__PURE__ */ d(S, {
342
344
  label: "Email",
343
345
  size: "small",
344
346
  fullWidth: !0,
@@ -353,8 +355,8 @@ function j() {
353
355
  error: G.show("contactEmail") && !!Z.contactEmail,
354
356
  helperText: G.show("contactEmail") ? Z.contactEmail : ""
355
357
  }),
356
- /* @__PURE__ */ u(g, {
357
- control: /* @__PURE__ */ u(de, {
358
+ /* @__PURE__ */ d(g, {
359
+ control: /* @__PURE__ */ d(se, {
358
360
  checked: U.isActive,
359
361
  onChange: (e) => W({
360
362
  ...U,
@@ -366,10 +368,10 @@ function j() {
366
368
  ]
367
369
  })
368
370
  }),
369
- /* @__PURE__ */ d(h, { children: [/* @__PURE__ */ u(p, {
371
+ /* @__PURE__ */ f(ue, { children: [/* @__PURE__ */ d(m, {
370
372
  onClick: () => z(!1),
371
373
  children: "Cancel"
372
- }), /* @__PURE__ */ u(p, {
374
+ }), /* @__PURE__ */ d(m, {
373
375
  variant: "contained",
374
376
  disabled: !Q,
375
377
  onClick: () => void xe(),
@@ -382,4 +384,4 @@ function j() {
382
384
  //#endregion
383
385
  export { j as default };
384
386
 
385
- //# sourceMappingURL=BrandsPage-CSA3meke.js.map
387
+ //# sourceMappingURL=BrandsPage-BE3kn-8b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandsPage-BE3kn-8b.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 '@/common/toaster/toaster';\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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"}