@argusoft/medplat-product-management 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BrandsPage-CjL0bBk0.js → BrandsPage-CdqGFmGf.js} +57 -58
- package/dist/BrandsPage-CdqGFmGf.js.map +1 -0
- package/dist/CategoriesPage-DJM0Nalw.js +392 -0
- package/dist/CategoriesPage-DJM0Nalw.js.map +1 -0
- package/dist/{DashboardPage-C_H1Jrey.js → DashboardPage-BASkXr00.js} +14 -14
- package/dist/{DashboardPage-C_H1Jrey.js.map → DashboardPage-BASkXr00.js.map} +1 -1
- package/dist/{FacilityPicker-Diq2hnYg.js → FacilityPicker-jV-qXp1k.js} +8 -6
- package/dist/{FacilityPicker-Diq2hnYg.js.map → FacilityPicker-jV-qXp1k.js.map} +1 -1
- package/dist/InventoryPage-CTdq6txa.js +658 -0
- package/dist/InventoryPage-CTdq6txa.js.map +1 -0
- package/dist/{MemberProfileCard-BLUVRILO.js → MemberProfileCard-DwWda-tS.js} +3 -3
- package/dist/{MemberProfileCard-BLUVRILO.js.map → MemberProfileCard-DwWda-tS.js.map} +1 -1
- package/dist/{PaymentCreatePage-mvUFdr7u.js → PaymentCreatePage-B3bP-K01.js} +137 -138
- package/dist/PaymentCreatePage-B3bP-K01.js.map +1 -0
- package/dist/{PaymentsPage-DY6BclkN.js → PaymentsPage-Dh8bqXVE.js} +42 -43
- package/dist/PaymentsPage-Dh8bqXVE.js.map +1 -0
- package/dist/PickupBatchLinesEditor-B2fLx1lU.js +116 -0
- package/dist/PickupBatchLinesEditor-B2fLx1lU.js.map +1 -0
- package/dist/{PickupCreatePage-CCSiyFQF.js → PickupCreatePage-BeYhR45k.js} +301 -257
- package/dist/PickupCreatePage-BeYhR45k.js.map +1 -0
- package/dist/PickupsPage-C6lBtAoQ.js +814 -0
- package/dist/PickupsPage-C6lBtAoQ.js.map +1 -0
- package/dist/{PmGuard-C90yhpsN.js → PmGuard-DrIl1sHL.js} +3 -3
- package/dist/{PmGuard-C90yhpsN.js.map → PmGuard-DrIl1sHL.js.map} +1 -1
- package/dist/PmTable-BSV_bMJZ.js +545 -0
- package/dist/PmTable-BSV_bMJZ.js.map +1 -0
- package/dist/ProductEditPage-DZTUH95T.js +1295 -0
- package/dist/ProductEditPage-DZTUH95T.js.map +1 -0
- package/dist/{ProductsPage-i8QVw_Jm.js → ProductsPage-CqOsah4_.js} +61 -64
- package/dist/ProductsPage-CqOsah4_.js.map +1 -0
- package/dist/{PurchaseCreatePage-73Q_xY7S.js → PurchaseCreatePage-D6os7srp.js} +210 -153
- package/dist/PurchaseCreatePage-D6os7srp.js.map +1 -0
- package/dist/PurchaseRequestDetailPage-DErqGKiq.js +1544 -0
- package/dist/PurchaseRequestDetailPage-DErqGKiq.js.map +1 -0
- package/dist/PurchaseRequestsPage-CHBoRzzH.js +280 -0
- package/dist/PurchaseRequestsPage-CHBoRzzH.js.map +1 -0
- package/dist/{PurchasesPage-BQEToymQ.js → PurchasesPage-C-2K7wH6.js} +40 -41
- package/dist/PurchasesPage-C-2K7wH6.js.map +1 -0
- package/dist/SaleCreatePage-DB3_UEgy.js +543 -0
- package/dist/SaleCreatePage-DB3_UEgy.js.map +1 -0
- package/dist/{SalesPage-CTBJMxZe.js → SalesPage-BhBGG426.js} +89 -90
- package/dist/SalesPage-BhBGG426.js.map +1 -0
- package/dist/SettingsPage-CBUu9DZK.js +746 -0
- package/dist/SettingsPage-CBUu9DZK.js.map +1 -0
- package/dist/StorageUnitsPage-oe0lXLd1.js +719 -0
- package/dist/StorageUnitsPage-oe0lXLd1.js.map +1 -0
- package/dist/{TransactionsPage-Cocn4901.js → TransactionsPage-7dRZpZOD.js} +107 -82
- package/dist/TransactionsPage-7dRZpZOD.js.map +1 -0
- package/dist/{TransferCreatePage-DbjcjuOg.js → TransferCreatePage-DtkAlP9l.js} +73 -74
- package/dist/TransferCreatePage-DtkAlP9l.js.map +1 -0
- package/dist/{TransfersPage-BFVF7Xvc.js → TransfersPage-BaEjbvnj.js} +67 -68
- package/dist/TransfersPage-BaEjbvnj.js.map +1 -0
- package/dist/{VialsPage-hZmS5xPt.js → VialsPage-vo9Of9oC.js} +83 -84
- package/dist/VialsPage-vo9Of9oC.js.map +1 -0
- package/dist/constants-ClZJY2x1.js +405 -0
- package/dist/constants-ClZJY2x1.js.map +1 -0
- package/dist/index.js +582 -391
- package/dist/index.js.map +1 -1
- package/dist/{settingsStore-KW217unV.js → settingsStore-BlA2GIhl.js} +91 -57
- package/dist/settingsStore-BlA2GIhl.js.map +1 -0
- package/dist/{validation-BkUPqrdA.js → validation-B6Kl5Xf9.js} +23 -22
- package/dist/validation-B6Kl5Xf9.js.map +1 -0
- package/package.json +1 -1
- package/dist/BrandsPage-CjL0bBk0.js.map +0 -1
- package/dist/CategoriesPage-CLcAUEvh.js +0 -342
- package/dist/CategoriesPage-CLcAUEvh.js.map +0 -1
- package/dist/InventoryPage-C1ho56CY.js +0 -508
- package/dist/InventoryPage-C1ho56CY.js.map +0 -1
- package/dist/PaymentCreatePage-mvUFdr7u.js.map +0 -1
- package/dist/PaymentsPage-DY6BclkN.js.map +0 -1
- package/dist/PickupCreatePage-CCSiyFQF.js.map +0 -1
- package/dist/PickupsPage-DGi6T5Of.js +0 -604
- package/dist/PickupsPage-DGi6T5Of.js.map +0 -1
- package/dist/PmTable-BkK65bJQ.js +0 -375
- package/dist/PmTable-BkK65bJQ.js.map +0 -1
- package/dist/ProductEditPage-CIQKtw2Z.js +0 -650
- package/dist/ProductEditPage-CIQKtw2Z.js.map +0 -1
- package/dist/ProductsPage-i8QVw_Jm.js.map +0 -1
- package/dist/PurchaseCreatePage-73Q_xY7S.js.map +0 -1
- package/dist/PurchaseRequestDetailPage-BR20EKBJ.js +0 -588
- package/dist/PurchaseRequestDetailPage-BR20EKBJ.js.map +0 -1
- package/dist/PurchaseRequestsPage-BJqDlNrc.js +0 -266
- package/dist/PurchaseRequestsPage-BJqDlNrc.js.map +0 -1
- package/dist/PurchasesPage-BQEToymQ.js.map +0 -1
- package/dist/SaleCreatePage-BVThnWsk.js +0 -523
- package/dist/SaleCreatePage-BVThnWsk.js.map +0 -1
- package/dist/SalesPage-CTBJMxZe.js.map +0 -1
- package/dist/SettingsPage-CiwVmzM3.js +0 -663
- package/dist/SettingsPage-CiwVmzM3.js.map +0 -1
- package/dist/StorageUnitsPage--ECPMVhB.js +0 -471
- package/dist/StorageUnitsPage--ECPMVhB.js.map +0 -1
- package/dist/TransactionsPage-Cocn4901.js.map +0 -1
- package/dist/TransferCreatePage-DbjcjuOg.js.map +0 -1
- package/dist/TransfersPage-BFVF7Xvc.js.map +0 -1
- package/dist/VialsPage-hZmS5xPt.js.map +0 -1
- package/dist/constants-5ZCZo-Zm.js +0 -257
- package/dist/constants-5ZCZo-Zm.js.map +0 -1
- package/dist/settingsStore-KW217unV.js.map +0 -1
- package/dist/validation-BkUPqrdA.js.map +0 -1
|
@@ -1,20 +1,19 @@
|
|
|
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-BlA2GIhl.js";
|
|
2
|
+
import { c as ee, l as r, n as i, s as te, t as a } from "./PmTable-BSV_bMJZ.js";
|
|
3
|
+
import { i as ne, m as o, t as re } from "./validation-B6Kl5Xf9.js";
|
|
4
|
+
import { t as s } from "./useFieldErrors-hDG8ox_x.js";
|
|
5
|
+
import { a as c, i as l, n as ie, r as ae, t as oe } from "./PmGuard-DrIl1sHL.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 {
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import T from "@mui/icons-material/
|
|
13
|
-
import E from "@mui/icons-material/
|
|
14
|
-
import D from "
|
|
15
|
-
import O from "@/views/custom-components/CustomSwitch";
|
|
8
|
+
import { Alert as se, Box as p, Button as m, Checkbox as h, Chip as ce, Dialog as le, DialogActions as ue, DialogContent as de, DialogTitle as fe, FormControlLabel as g, InputAdornment as pe, Skeleton as _, Stack as v, TableBody as y, TableCell as b, TableHead as me, TableRow as x, TextField as S, Typography as C } from "@mui/material";
|
|
9
|
+
import { findCountry as he, validatePhoneForCountry as ge } from "@/common/constants/countries";
|
|
10
|
+
import { v4 as _e } from "uuid";
|
|
11
|
+
import w from "@mui/icons-material/AddRounded";
|
|
12
|
+
import T from "@mui/icons-material/RefreshRounded";
|
|
13
|
+
import E from "@mui/icons-material/SellRounded";
|
|
14
|
+
import D from "@/views/custom-components/CustomSwitch";
|
|
16
15
|
//#region src/views/BrandsPage.jsx
|
|
17
|
-
function
|
|
16
|
+
function O(e) {
|
|
18
17
|
if (!e) return {
|
|
19
18
|
phone: "",
|
|
20
19
|
email: ""
|
|
@@ -32,12 +31,12 @@ function k(e) {
|
|
|
32
31
|
};
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
|
-
function
|
|
34
|
+
function k({ phone: e, email: t }) {
|
|
36
35
|
let n = {};
|
|
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
|
-
function
|
|
40
|
-
let
|
|
38
|
+
function A() {
|
|
39
|
+
let A = l().has("update.manage.productManagement.brand"), j = n(), M = he(j?.countryCode), [N, P] = u([]), [F, I] = u(!1), [L, R] = u(""), [ve, z] = u(!1), [B, V] = u(null), [H, ye] = u(!1), [U, W] = u(K()), G = s();
|
|
41
40
|
function K() {
|
|
42
41
|
return {
|
|
43
42
|
id: "",
|
|
@@ -51,11 +50,11 @@ function j() {
|
|
|
51
50
|
async function q() {
|
|
52
51
|
I(!0), R("");
|
|
53
52
|
try {
|
|
54
|
-
let
|
|
55
|
-
P(
|
|
53
|
+
let t = await e(void 0, !0);
|
|
54
|
+
P(t);
|
|
56
55
|
} catch (e) {
|
|
57
56
|
let t = e?.response?.data?.message ?? e?.message ?? "Failed to load brands";
|
|
58
|
-
R(t),
|
|
57
|
+
R(t), r({
|
|
59
58
|
message: t,
|
|
60
59
|
type: "error"
|
|
61
60
|
});
|
|
@@ -69,11 +68,11 @@ function j() {
|
|
|
69
68
|
function J() {
|
|
70
69
|
V(null), W({
|
|
71
70
|
...K(),
|
|
72
|
-
id:
|
|
71
|
+
id: _e()
|
|
73
72
|
}), G.reset(), R(""), z(!0);
|
|
74
73
|
}
|
|
75
|
-
function
|
|
76
|
-
let { phone: t, email: n } =
|
|
74
|
+
function be(e) {
|
|
75
|
+
let { phone: t, email: n } = O(e.contactInfo);
|
|
77
76
|
V(e), G.reset(), R(""), W({
|
|
78
77
|
id: e.id,
|
|
79
78
|
name: e.name ?? "",
|
|
@@ -83,43 +82,43 @@ function j() {
|
|
|
83
82
|
isActive: e.isActive !== !1
|
|
84
83
|
}), z(!0);
|
|
85
84
|
}
|
|
86
|
-
let Y = o(U.manufacturerCode, "Manufacturer code"), X = U.manufacturerCode.trim().toUpperCase(),
|
|
85
|
+
let Y = o(U.manufacturerCode, "Manufacturer code"), X = U.manufacturerCode.trim().toUpperCase(), xe = !Y && X && N.some((e) => e.id !== U.id && (e.manufacturerCode || "").toUpperCase() === X), Z = {
|
|
87
86
|
name: o(U.name, "Name"),
|
|
88
|
-
manufacturerCode: Y || (
|
|
89
|
-
contactPhone:
|
|
90
|
-
contactEmail:
|
|
91
|
-
}, Q =
|
|
92
|
-
async function
|
|
87
|
+
manufacturerCode: Y || (xe ? "Code is already in use — edit it manually to make it unique." : ""),
|
|
88
|
+
contactPhone: ge(U.contactPhone, M),
|
|
89
|
+
contactEmail: ne(U.contactEmail)
|
|
90
|
+
}, Q = re(Z);
|
|
91
|
+
async function Se() {
|
|
93
92
|
if (!Q) {
|
|
94
93
|
G.markAllTouched(), R("Please fix the highlighted fields.");
|
|
95
94
|
return;
|
|
96
95
|
}
|
|
97
96
|
try {
|
|
98
|
-
await
|
|
97
|
+
await t({
|
|
99
98
|
id: U.id,
|
|
100
99
|
name: U.name.trim(),
|
|
101
100
|
manufacturerCode: U.manufacturerCode.trim().toUpperCase(),
|
|
102
|
-
contactInfo:
|
|
101
|
+
contactInfo: k({
|
|
103
102
|
phone: U.contactPhone,
|
|
104
103
|
email: U.contactEmail
|
|
105
104
|
}),
|
|
106
105
|
isActive: U.isActive
|
|
107
|
-
}),
|
|
106
|
+
}), r({
|
|
108
107
|
message: "Brand saved.",
|
|
109
108
|
type: "success"
|
|
110
109
|
}), z(!1), await q();
|
|
111
110
|
} catch (e) {
|
|
112
111
|
let t = e?.response?.data?.message ?? e?.message ?? "Failed to save brand";
|
|
113
|
-
R(t),
|
|
112
|
+
R(t), r({
|
|
114
113
|
message: t,
|
|
115
114
|
type: "error"
|
|
116
115
|
});
|
|
117
116
|
}
|
|
118
117
|
}
|
|
119
118
|
let $ = H ? N : N.filter((e) => e.isActive !== !1);
|
|
120
|
-
return /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(ie, {}), /* @__PURE__ */ f(
|
|
119
|
+
return /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(ie, {}), /* @__PURE__ */ f(oe, {
|
|
121
120
|
perm: "view.manage.productManagement.brand",
|
|
122
|
-
children: [/* @__PURE__ */ f(
|
|
121
|
+
children: [/* @__PURE__ */ f(c, {
|
|
123
122
|
title: "Brands",
|
|
124
123
|
subtitle: "The manufacturer or supplier of each product.",
|
|
125
124
|
chips: ["Catalog"],
|
|
@@ -128,28 +127,28 @@ function j() {
|
|
|
128
127
|
spacing: 1,
|
|
129
128
|
children: [/* @__PURE__ */ d(m, {
|
|
130
129
|
variant: "outlined",
|
|
131
|
-
startIcon: /* @__PURE__ */ d(
|
|
130
|
+
startIcon: /* @__PURE__ */ d(T, {}),
|
|
132
131
|
onClick: () => void q(),
|
|
133
132
|
children: "Refresh"
|
|
134
|
-
}),
|
|
133
|
+
}), A ? /* @__PURE__ */ d(m, {
|
|
135
134
|
variant: "contained",
|
|
136
|
-
startIcon: /* @__PURE__ */ d(
|
|
135
|
+
startIcon: /* @__PURE__ */ d(w, {}),
|
|
137
136
|
onClick: J,
|
|
138
137
|
children: "New Brand"
|
|
139
138
|
}) : null]
|
|
140
139
|
}),
|
|
141
|
-
children: [L ? /* @__PURE__ */ d(
|
|
140
|
+
children: [L ? /* @__PURE__ */ d(se, {
|
|
142
141
|
severity: "error",
|
|
143
142
|
sx: { mb: 2 },
|
|
144
143
|
children: L
|
|
145
|
-
}) : null, /* @__PURE__ */ d(
|
|
144
|
+
}) : null, /* @__PURE__ */ d(ee, {
|
|
146
145
|
eyebrow: "Master data",
|
|
147
146
|
title: "Brands",
|
|
148
147
|
subtitle: F ? "Loading…" : `${$.length} ${$.length === 1 ? "brand" : "brands"}`,
|
|
149
148
|
actions: /* @__PURE__ */ d(g, {
|
|
150
|
-
control: /* @__PURE__ */ d(
|
|
149
|
+
control: /* @__PURE__ */ d(D, {
|
|
151
150
|
checked: H,
|
|
152
|
-
onChange: (e) =>
|
|
151
|
+
onChange: (e) => ye(e.target.checked)
|
|
153
152
|
}),
|
|
154
153
|
label: /* @__PURE__ */ d(C, {
|
|
155
154
|
variant: "body2",
|
|
@@ -162,7 +161,7 @@ function j() {
|
|
|
162
161
|
ml: 0
|
|
163
162
|
}
|
|
164
163
|
}),
|
|
165
|
-
children: /* @__PURE__ */ f(
|
|
164
|
+
children: /* @__PURE__ */ f(te, { children: [/* @__PURE__ */ d(me, { children: /* @__PURE__ */ f(x, { children: [
|
|
166
165
|
/* @__PURE__ */ d(b, { children: "Name" }),
|
|
167
166
|
/* @__PURE__ */ d(b, { children: "Manufacturer Code" }),
|
|
168
167
|
/* @__PURE__ */ d(b, { children: "Contact" }),
|
|
@@ -171,20 +170,20 @@ function j() {
|
|
|
171
170
|
align: "right",
|
|
172
171
|
children: "Action"
|
|
173
172
|
})
|
|
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(
|
|
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(a, {
|
|
175
174
|
colSpan: 5,
|
|
176
|
-
icon:
|
|
175
|
+
icon: E,
|
|
177
176
|
title: N.length === 0 ? "No brands yet" : "No active brands",
|
|
178
177
|
hint: N.length === 0 ? "Add manufacturers so you can link them to your products." : "Turn on “Show inactive” to see deactivated brands.",
|
|
179
|
-
action: N.length === 0 &&
|
|
178
|
+
action: N.length === 0 && A ? /* @__PURE__ */ d(m, {
|
|
180
179
|
variant: "contained",
|
|
181
180
|
size: "small",
|
|
182
|
-
startIcon: /* @__PURE__ */ d(
|
|
181
|
+
startIcon: /* @__PURE__ */ d(w, {}),
|
|
183
182
|
onClick: J,
|
|
184
183
|
children: "Create first brand"
|
|
185
184
|
}) : null
|
|
186
185
|
}) : $.map((e) => {
|
|
187
|
-
let { phone: t, email: n } =
|
|
186
|
+
let { phone: t, email: n } = O(e.contactInfo);
|
|
188
187
|
return /* @__PURE__ */ f(x, {
|
|
189
188
|
hover: !0,
|
|
190
189
|
children: [
|
|
@@ -247,10 +246,10 @@ function j() {
|
|
|
247
246
|
}) }),
|
|
248
247
|
/* @__PURE__ */ d(b, {
|
|
249
248
|
align: "right",
|
|
250
|
-
children:
|
|
249
|
+
children: A ? /* @__PURE__ */ d(m, {
|
|
251
250
|
size: "small",
|
|
252
251
|
variant: "outlined",
|
|
253
|
-
onClick: () =>
|
|
252
|
+
onClick: () => be(e),
|
|
254
253
|
children: "Edit"
|
|
255
254
|
}) : null
|
|
256
255
|
})
|
|
@@ -259,13 +258,13 @@ function j() {
|
|
|
259
258
|
}) })] })
|
|
260
259
|
})]
|
|
261
260
|
}), /* @__PURE__ */ f(le, {
|
|
262
|
-
open:
|
|
261
|
+
open: ve,
|
|
263
262
|
onClose: () => z(!1),
|
|
264
263
|
fullWidth: !0,
|
|
265
264
|
maxWidth: "sm",
|
|
266
265
|
children: [
|
|
267
|
-
/* @__PURE__ */ d(
|
|
268
|
-
/* @__PURE__ */ d(
|
|
266
|
+
/* @__PURE__ */ d(fe, { children: B ? "Edit Brand" : "New Brand" }),
|
|
267
|
+
/* @__PURE__ */ d(de, {
|
|
269
268
|
dividers: !0,
|
|
270
269
|
children: /* @__PURE__ */ f(v, {
|
|
271
270
|
spacing: 2,
|
|
@@ -329,7 +328,7 @@ function j() {
|
|
|
329
328
|
onBlur: G.onBlur("contactPhone"),
|
|
330
329
|
error: G.show("contactPhone") && !!Z.contactPhone,
|
|
331
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.",
|
|
332
|
-
InputProps: M ? { startAdornment: /* @__PURE__ */ d(
|
|
331
|
+
InputProps: M ? { startAdornment: /* @__PURE__ */ d(pe, {
|
|
333
332
|
position: "start",
|
|
334
333
|
children: /* @__PURE__ */ d(p, {
|
|
335
334
|
component: "span",
|
|
@@ -357,7 +356,7 @@ function j() {
|
|
|
357
356
|
helperText: G.show("contactEmail") ? Z.contactEmail : ""
|
|
358
357
|
}),
|
|
359
358
|
/* @__PURE__ */ d(g, {
|
|
360
|
-
control: /* @__PURE__ */ d(
|
|
359
|
+
control: /* @__PURE__ */ d(h, {
|
|
361
360
|
checked: U.isActive,
|
|
362
361
|
onChange: (e) => W({
|
|
363
362
|
...U,
|
|
@@ -375,7 +374,7 @@ function j() {
|
|
|
375
374
|
}), /* @__PURE__ */ d(m, {
|
|
376
375
|
variant: "contained",
|
|
377
376
|
disabled: !Q,
|
|
378
|
-
onClick: () => void
|
|
377
|
+
onClick: () => void Se(),
|
|
379
378
|
children: "Save"
|
|
380
379
|
})] })
|
|
381
380
|
]
|
|
@@ -383,6 +382,6 @@ function j() {
|
|
|
383
382
|
})] });
|
|
384
383
|
}
|
|
385
384
|
//#endregion
|
|
386
|
-
export {
|
|
385
|
+
export { A as default };
|
|
387
386
|
|
|
388
|
-
//# sourceMappingURL=BrandsPage-
|
|
387
|
+
//# sourceMappingURL=BrandsPage-CdqGFmGf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrandsPage-CdqGFmGf.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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"}
|