@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.
- package/dist/{BrandsPage-DM5ZRz8L.js → BrandsPage-DmRW5bhm.js} +53 -55
- package/dist/BrandsPage-DmRW5bhm.js.map +1 -0
- package/dist/CategoriesPage-BsS5IQh3.js +391 -0
- package/dist/CategoriesPage-BsS5IQh3.js.map +1 -0
- package/dist/{DashboardPage-CW77OzUg.js → DashboardPage-C3bKc5na.js} +14 -14
- package/dist/{DashboardPage-CW77OzUg.js.map → DashboardPage-C3bKc5na.js.map} +1 -1
- package/dist/{FacilityPicker-C2drWyqo.js → FacilityPicker-BiZeupmP.js} +2 -2
- package/dist/{FacilityPicker-C2drWyqo.js.map → FacilityPicker-BiZeupmP.js.map} +1 -1
- package/dist/InventoryPage-C_AxSy7A.js +655 -0
- package/dist/InventoryPage-C_AxSy7A.js.map +1 -0
- package/dist/{MemberProfileCard-D9jepThR.js → MemberProfileCard-BdUNgHRB.js} +3 -3
- package/dist/{MemberProfileCard-D9jepThR.js.map → MemberProfileCard-BdUNgHRB.js.map} +1 -1
- package/dist/{PaymentCreatePage-DAUWv5RO.js → PaymentCreatePage-CIVe0P0p.js} +99 -100
- package/dist/PaymentCreatePage-CIVe0P0p.js.map +1 -0
- package/dist/{PaymentsPage-B6Fs2xey.js → PaymentsPage-BvPe5Q9F.js} +42 -43
- package/dist/PaymentsPage-BvPe5Q9F.js.map +1 -0
- package/dist/PickupBatchLinesEditor-DHmcAG23.js +116 -0
- package/dist/PickupBatchLinesEditor-DHmcAG23.js.map +1 -0
- package/dist/{PickupCreatePage-4ffB1_yq.js → PickupCreatePage-CB0Sl0Hb.js} +302 -258
- package/dist/PickupCreatePage-CB0Sl0Hb.js.map +1 -0
- package/dist/PickupsPage-Ctpghavs.js +812 -0
- package/dist/PickupsPage-Ctpghavs.js.map +1 -0
- package/dist/{PmGuard-DrbbysnW.js → PmGuard-b10TGXEi.js} +3 -3
- package/dist/{PmGuard-DrbbysnW.js.map → PmGuard-b10TGXEi.js.map} +1 -1
- package/dist/PmTable-_GbScaa4.js +544 -0
- package/dist/PmTable-_GbScaa4.js.map +1 -0
- package/dist/ProductEditPage-C1thoKHu.js +1294 -0
- package/dist/ProductEditPage-C1thoKHu.js.map +1 -0
- package/dist/{ProductsPage-DFgK9-13.js → ProductsPage-CupVmOD4.js} +61 -64
- package/dist/ProductsPage-CupVmOD4.js.map +1 -0
- package/dist/{PurchaseCreatePage-B1eV15aS.js → PurchaseCreatePage-YD3NmhPQ.js} +210 -153
- package/dist/PurchaseCreatePage-YD3NmhPQ.js.map +1 -0
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N.js +1543 -0
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N.js.map +1 -0
- package/dist/PurchaseRequestsPage-DPAPzpmm.js +280 -0
- package/dist/PurchaseRequestsPage-DPAPzpmm.js.map +1 -0
- package/dist/{PurchasesPage-Bsrqxvb1.js → PurchasesPage-It1GHiXl.js} +40 -41
- package/dist/PurchasesPage-It1GHiXl.js.map +1 -0
- package/dist/{SaleCreatePage-CPyVj3Dh.js → SaleCreatePage-C9kFmTvm.js} +106 -107
- package/dist/SaleCreatePage-C9kFmTvm.js.map +1 -0
- package/dist/{SalesPage-BWpgPKz_.js → SalesPage-D18DCseD.js} +79 -80
- package/dist/SalesPage-D18DCseD.js.map +1 -0
- package/dist/SettingsPage-VsxI-ano.js +746 -0
- package/dist/SettingsPage-VsxI-ano.js.map +1 -0
- package/dist/StorageUnitsPage-7EqwuMOI.js +718 -0
- package/dist/StorageUnitsPage-7EqwuMOI.js.map +1 -0
- package/dist/{TransactionsPage-DQBjCHoN.js → TransactionsPage-DrH53pVS.js} +108 -83
- package/dist/TransactionsPage-DrH53pVS.js.map +1 -0
- package/dist/{TransferCreatePage-DdVExUif.js → TransferCreatePage-CuvoMrYH.js} +73 -74
- package/dist/TransferCreatePage-CuvoMrYH.js.map +1 -0
- package/dist/{TransfersPage-C1qS9kNL.js → TransfersPage-Cf701t8s.js} +67 -68
- package/dist/TransfersPage-Cf701t8s.js.map +1 -0
- package/dist/{VialsPage-rTAYlXGZ.js → VialsPage-8oAc1yFv.js} +83 -84
- package/dist/VialsPage-8oAc1yFv.js.map +1 -0
- package/dist/constants-ClZJY2x1.js +405 -0
- package/dist/constants-ClZJY2x1.js.map +1 -0
- package/dist/format-UOyOu75i.js.map +1 -1
- package/dist/index.js +599 -395
- package/dist/index.js.map +1 -1
- package/dist/{settingsStore-GLCtI-tv.js → settingsStore-BifOsjlB.js} +88 -57
- package/dist/settingsStore-BifOsjlB.js.map +1 -0
- package/dist/{validation-BkUPqrdA.js → validation-BzlHnL-r.js} +24 -22
- package/dist/validation-BzlHnL-r.js.map +1 -0
- package/package.json +1 -1
- package/dist/BrandsPage-DM5ZRz8L.js.map +0 -1
- package/dist/CategoriesPage-v7vz_i2N.js +0 -342
- package/dist/CategoriesPage-v7vz_i2N.js.map +0 -1
- package/dist/InventoryPage-_VWlqD2e.js +0 -686
- package/dist/InventoryPage-_VWlqD2e.js.map +0 -1
- package/dist/PaymentCreatePage-DAUWv5RO.js.map +0 -1
- package/dist/PaymentsPage-B6Fs2xey.js.map +0 -1
- package/dist/PickupCreatePage-4ffB1_yq.js.map +0 -1
- package/dist/PickupsPage-C-21LwTf.js +0 -604
- package/dist/PickupsPage-C-21LwTf.js.map +0 -1
- package/dist/PmTable-BMFiuHdG.js +0 -375
- package/dist/PmTable-BMFiuHdG.js.map +0 -1
- package/dist/ProductEditPage-BinNxjlB.js +0 -708
- package/dist/ProductEditPage-BinNxjlB.js.map +0 -1
- package/dist/ProductsPage-DFgK9-13.js.map +0 -1
- package/dist/PurchaseCreatePage-B1eV15aS.js.map +0 -1
- package/dist/PurchaseRequestDetailPage-52S6Nf7a.js +0 -588
- package/dist/PurchaseRequestDetailPage-52S6Nf7a.js.map +0 -1
- package/dist/PurchaseRequestsPage-DNNUnXy4.js +0 -266
- package/dist/PurchaseRequestsPage-DNNUnXy4.js.map +0 -1
- package/dist/PurchasesPage-Bsrqxvb1.js.map +0 -1
- package/dist/SaleCreatePage-CPyVj3Dh.js.map +0 -1
- package/dist/SalesPage-BWpgPKz_.js.map +0 -1
- package/dist/SettingsPage-Ch-37E5R.js +0 -663
- package/dist/SettingsPage-Ch-37E5R.js.map +0 -1
- package/dist/StorageUnitsPage-DF0MC356.js +0 -471
- package/dist/StorageUnitsPage-DF0MC356.js.map +0 -1
- package/dist/TransactionsPage-DQBjCHoN.js.map +0 -1
- package/dist/TransferCreatePage-DdVExUif.js.map +0 -1
- package/dist/TransfersPage-C1qS9kNL.js.map +0 -1
- package/dist/VialsPage-rTAYlXGZ.js.map +0 -1
- package/dist/constants-CdzV0PxZ.js +0 -270
- package/dist/constants-CdzV0PxZ.js.map +0 -1
- package/dist/settingsStore-GLCtI-tv.js.map +0 -1
- package/dist/validation-BkUPqrdA.js.map +0 -1
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as r, n as i, s as
|
|
3
|
-
import { i as
|
|
4
|
-
import { t as
|
|
5
|
-
import { a as
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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),
|
|
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
|
-
|
|
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 =
|
|
87
|
-
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:
|
|
91
|
-
}, Q =
|
|
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
|
|
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
|
-
}),
|
|
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),
|
|
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(
|
|
118
|
+
return /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(s, {}), /* @__PURE__ */ f(l, {
|
|
121
119
|
perm: "view.manage.productManagement.brand",
|
|
122
|
-
children: [/* @__PURE__ */ f(
|
|
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(
|
|
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(
|
|
139
|
+
children: [L ? /* @__PURE__ */ d(se, {
|
|
142
140
|
severity: "error",
|
|
143
141
|
sx: { mb: 2 },
|
|
144
142
|
children: L
|
|
145
|
-
}) : null, /* @__PURE__ */ d(
|
|
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(
|
|
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(
|
|
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(
|
|
166
|
-
/* @__PURE__ */ d(
|
|
167
|
-
/* @__PURE__ */ d(
|
|
168
|
-
/* @__PURE__ */ d(
|
|
169
|
-
/* @__PURE__ */ d(
|
|
170
|
-
/* @__PURE__ */ d(
|
|
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(
|
|
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(
|
|
186
|
+
return /* @__PURE__ */ f(S, {
|
|
189
187
|
hover: !0,
|
|
190
188
|
children: [
|
|
191
|
-
/* @__PURE__ */ d(
|
|
189
|
+
/* @__PURE__ */ d(x, {
|
|
192
190
|
sx: { maxWidth: 240 },
|
|
193
|
-
children: /* @__PURE__ */ d(
|
|
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(
|
|
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(
|
|
219
|
+
/* @__PURE__ */ d(x, { children: t || n ? /* @__PURE__ */ f(y, {
|
|
222
220
|
spacing: .25,
|
|
223
|
-
children: [t ? /* @__PURE__ */ d(
|
|
221
|
+
children: [t ? /* @__PURE__ */ d(w, {
|
|
224
222
|
variant: "caption",
|
|
225
223
|
sx: { fontWeight: 600 },
|
|
226
224
|
children: t
|
|
227
|
-
}) : null, n ? /* @__PURE__ */ d(
|
|
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(
|
|
230
|
+
}) : /* @__PURE__ */ d(w, {
|
|
233
231
|
variant: "caption",
|
|
234
232
|
color: "text.disabled",
|
|
235
233
|
children: "—"
|
|
236
234
|
}) }),
|
|
237
|
-
/* @__PURE__ */ d(
|
|
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(
|
|
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(
|
|
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(
|
|
268
|
-
/* @__PURE__ */ d(
|
|
265
|
+
/* @__PURE__ */ d(g, { children: B ? "Edit Brand" : "New Brand" }),
|
|
266
|
+
/* @__PURE__ */ d(de, {
|
|
269
267
|
dividers: !0,
|
|
270
|
-
children: /* @__PURE__ */ f(
|
|
268
|
+
children: /* @__PURE__ */ f(y, {
|
|
271
269
|
spacing: 2,
|
|
272
270
|
sx: { pt: 1 },
|
|
273
271
|
children: [
|
|
274
|
-
/* @__PURE__ */ d(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
360
|
-
control: /* @__PURE__ */ d(
|
|
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(
|
|
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-
|
|
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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"}
|