@materialui-reactjs/admin 1.0.6 → 2.0.1

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 (129) hide show
  1. package/CHANGELOG.md +322 -0
  2. package/LICENSE +21 -0
  3. package/README.md +587 -453
  4. package/dist/Common-DFahMuQE.cjs +11 -0
  5. package/dist/Common-_PK8HLKN.js +267 -0
  6. package/dist/Env-DoS-iQjs.cjs +1 -0
  7. package/dist/Env-SHztUA3s.js +16 -0
  8. package/dist/HeaderUpdate-Dirxjmxs.cjs +1 -0
  9. package/dist/{chunks/HeaderUpdate-DuS-gHNR.js → HeaderUpdate-drlnuHI8.js} +28 -25
  10. package/dist/SortableItem-C3KzO8Xh.cjs +1 -0
  11. package/dist/SpinnerLoader-BujLjvC3.cjs +1 -0
  12. package/dist/{chunks/SpinnerLoader-h8RDIarB.js → SpinnerLoader-CyhOQC6d.js} +2 -2
  13. package/dist/UDragFile-D8wOZ1Ut.js +96 -0
  14. package/dist/UDragFile-Db0sK4M7.cjs +1 -0
  15. package/dist/{chunks/Validator-CXYkI7vJ.js → Validator-D2zwZeov.js} +83 -52
  16. package/dist/Validator-DBxl8wtE.cjs +1 -0
  17. package/dist/assets/css/form.css +1 -1
  18. package/dist/assets/css/index.css +1 -1
  19. package/dist/ckeditor/ckeditor.d.ts +3 -0
  20. package/dist/ckeditor/plugins/elfinder.d.ts +11 -0
  21. package/dist/ckeditor/plugins/fullscreen.d.ts +15 -0
  22. package/dist/ckeditor/plugins/pdffinder.d.ts +18 -0
  23. package/dist/ckeditor/types.d.ts +37 -0
  24. package/dist/common-CEZp8xpQ.js +30 -0
  25. package/dist/common-ivDX6gGq.cjs +1 -0
  26. package/dist/components/echarts/index.cjs +1 -0
  27. package/dist/components/echarts/index.js +1 -1
  28. package/dist/components/form/AdvancedMultiSelect.d.ts +6 -3
  29. package/dist/components/form/AsxhUImages.d.ts +2 -1
  30. package/dist/components/form/BoxAddRow.d.ts +13 -2
  31. package/dist/components/form/CheckTreeBox.d.ts +12 -3
  32. package/dist/components/form/CusForm.d.ts +19 -6
  33. package/dist/components/form/DateInput.d.ts +2 -1
  34. package/dist/components/form/Editor.d.ts +2 -1
  35. package/dist/components/form/EfFile.d.ts +2 -1
  36. package/dist/components/form/EfImage.d.ts +2 -1
  37. package/dist/components/form/EfImages.d.ts +2 -1
  38. package/dist/components/form/PImage.d.ts +2 -1
  39. package/dist/components/form/SelectAddRowBox.d.ts +9 -5
  40. package/dist/components/form/SelectAddRowBoxAdvanced.d.ts +13 -4
  41. package/dist/components/form/SelectBox.d.ts +20 -7
  42. package/dist/components/form/UDragFile.d.ts +2 -1
  43. package/dist/components/form/UFile.d.ts +2 -1
  44. package/dist/components/form/UFiles.d.ts +9 -2
  45. package/dist/components/form/UImages.d.ts +2 -1
  46. package/dist/components/form/index.cjs +1 -0
  47. package/dist/components/form/index.js +2 -2
  48. package/dist/components/loader/SpinnerLoader.d.ts +5 -1
  49. package/dist/components/loader/index.cjs +1 -0
  50. package/dist/components/loader/index.js +1 -2
  51. package/dist/components/meta/CardTable.d.ts +11 -5
  52. package/dist/components/meta/CardTable.types.d.ts +57 -0
  53. package/dist/components/meta/CusTooltip.d.ts +8 -2
  54. package/dist/components/meta/Head.d.ts +10 -1
  55. package/dist/components/meta/HeaderDetail.d.ts +2 -1
  56. package/dist/components/meta/HeaderUpdate.d.ts +5 -1
  57. package/dist/components/meta/ModalForm.d.ts +41 -11
  58. package/dist/components/meta/Navtabs.d.ts +1 -1
  59. package/dist/components/meta/ScrollTable.d.ts +7 -3
  60. package/dist/components/meta/SearchBox.d.ts +8 -5
  61. package/dist/components/meta/SortableItem.d.ts +11 -1
  62. package/dist/components/meta/index.cjs +1 -0
  63. package/dist/components/meta/index.d.ts +1 -0
  64. package/dist/components/meta/index.js +3 -3
  65. package/dist/components/sidebar/Sidebar.types.d.ts +9 -7
  66. package/dist/components/sidebar/index.cjs +1 -0
  67. package/dist/components/sidebar/index.js +1 -1
  68. package/dist/components/single/Detail.d.ts +8 -3
  69. package/dist/components/single/Fields.d.ts +10 -4
  70. package/dist/components/single/Import.d.ts +8 -3
  71. package/dist/components/single/List.d.ts +33 -7
  72. package/dist/components/single/Update.d.ts +10 -4
  73. package/dist/components/single/UpdateDetail.d.ts +3 -2
  74. package/dist/components/single/UpdateTableDetail.d.ts +4 -3
  75. package/dist/components/single/index.cjs +1 -0
  76. package/dist/components/single/index.js +1 -1
  77. package/dist/components/top-navbar/index.cjs +1 -0
  78. package/dist/components/top-navbar/index.js +78 -2
  79. package/dist/echarts-Bi3uwLbg.cjs +1 -0
  80. package/dist/{chunks/echarts-CRmndsxC.js → echarts-CTzMqeR5.js} +4 -4
  81. package/dist/form-heyswTRq.js +3897 -0
  82. package/dist/form-sgtop6li.cjs +49 -0
  83. package/dist/hook/common.d.ts +87 -0
  84. package/dist/hook/detail.cjs +1 -0
  85. package/dist/hook/detail.d.ts +9 -15
  86. package/dist/hook/detail.js +1 -11
  87. package/dist/hook/fields.cjs +1 -0
  88. package/dist/hook/fields.d.ts +6 -14
  89. package/dist/hook/fields.js +1 -11
  90. package/dist/hook/import.d.ts +6 -11
  91. package/dist/hook/index.cjs +1 -0
  92. package/dist/hook/index.d.ts +29 -20
  93. package/dist/hook/index.js +14 -11
  94. package/dist/hook/update.cjs +1 -0
  95. package/dist/hook/update.d.ts +11 -19
  96. package/dist/hook/update.js +12 -9
  97. package/dist/index.cjs +1 -0
  98. package/dist/index.d.ts +16 -0
  99. package/dist/index.js +14 -11
  100. package/dist/meta-BANk9kHW.cjs +1 -0
  101. package/dist/meta-CheDAmMh.js +745 -0
  102. package/dist/rolldown-runtime-BocRIvOZ.cjs +1 -0
  103. package/dist/sidebar-CfQAYWi-.cjs +1 -0
  104. package/dist/{chunks/sidebar-Dj4Xr9du.js → sidebar-CzRmfvhi.js} +10 -13
  105. package/dist/{chunks/single-CRF61o_U.js → single-BsJ7TYJi.js} +364 -282
  106. package/dist/single-C2WPEjhk.cjs +1 -0
  107. package/dist/style.cjs +0 -0
  108. package/dist/style.d.ts +0 -0
  109. package/dist/style.js +0 -0
  110. package/dist/types/Menu.d.ts +25 -0
  111. package/dist/utils/Common.d.ts +224 -43
  112. package/dist/utils/CusRoute.d.ts +21 -1
  113. package/dist/utils/Env.d.ts +23 -2
  114. package/dist/utils/Group.d.ts +12 -1
  115. package/dist/utils/Validator.d.ts +34 -12
  116. package/dist/utils/index.cjs +11 -0
  117. package/dist/utils/index.d.ts +2 -1
  118. package/dist/utils/index.js +212 -171
  119. package/package.json +190 -163
  120. package/dist/chunks/Common-BURf0rBN.js +0 -222
  121. package/dist/chunks/Env-DRXhvUcb.js +0 -16
  122. package/dist/chunks/UDragFile-BnUR3riq.js +0 -92
  123. package/dist/chunks/form-CPkpL5eA.js +0 -45889
  124. package/dist/chunks/loader-BUiOnhOH.js +0 -1
  125. package/dist/chunks/meta-4qPWijBT.js +0 -758
  126. package/dist/chunks/top-navbar-Bob0gMUh.js +0 -78
  127. package/scripts/postinstall.cjs +0 -80
  128. /package/dist/{chunks/SortableItem-B4-Zsso3.js → SortableItem-B4-Zsso3.js} +0 -0
  129. /package/dist/{components/meta/Pdfviewer.d.ts → hook/import.cjs} +0 -0
@@ -0,0 +1,745 @@
1
+ import { C as e, S as t, b as n, l as r, m as i, n as a, s as o, x as s } from "./Common-_PK8HLKN.js";
2
+ import { a as c, i as l, t as u } from "./Validator-D2zwZeov.js";
3
+ import { d, l as f, s as p, u as m } from "./HeaderUpdate-drlnuHI8.js";
4
+ import { useEffect as h, useLayoutEffect as g, useRef as _, useState as v } from "react";
5
+ import y from "react-select";
6
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
7
+ import { Modal as C } from "bootstrap";
8
+ import { Form as w, Link as T, useNavigate as E } from "react-router-dom";
9
+ import { Helmet as D } from "react-helmet-async";
10
+ //#region src/components/meta/BtnGroup.tsx
11
+ var O = ({ cUri: e, itemId: t, isEdit: n = !1, isDel: r = !1, onDelete: i }) => /* @__PURE__ */ S("div", {
12
+ className: "btn-group",
13
+ children: [n && /* @__PURE__ */ x(d, {
14
+ title: "Chỉnh sửa",
15
+ children: /* @__PURE__ */ x(T, {
16
+ to: e + "/edit/" + t,
17
+ className: "btn btn-sm btn-icon btn-info",
18
+ children: /* @__PURE__ */ x("i", {
19
+ className: "material-icons text-white position-relative text-lg",
20
+ children: "drive_file_rename_outline"
21
+ })
22
+ })
23
+ }), r && /* @__PURE__ */ x(d, {
24
+ title: "Xóa",
25
+ children: /* @__PURE__ */ x("button", {
26
+ type: "button",
27
+ onClick: () => i?.(t),
28
+ className: "btn btn-sm btn-icon btn-danger",
29
+ children: /* @__PURE__ */ x("i", {
30
+ className: "material-icons text-white position-relative text-lg",
31
+ children: "delete"
32
+ })
33
+ })
34
+ })]
35
+ }), k = ({ modalRef: t, title: n, apiGetDetail: r, frmBody: i, onSubmit: o, onHide: s, itemId: c, setItemId: d, data: f, clsWidth: p = "xl", btnTxt: m = "Lưu lại", style: g = {}, clsBody: y = "" }) => {
36
+ let b = _(null), [T, E] = v(), [D, O] = v({});
37
+ h(() => {
38
+ if (!t.current) return;
39
+ E(C.getOrCreateInstance(t.current, {
40
+ backdrop: "static",
41
+ keyboard: !1
42
+ }));
43
+ let e = () => {
44
+ b?.current && new u(b?.current).run();
45
+ }, n = () => {
46
+ d && d(0), O({}), b?.current && new u(b?.current).destroy();
47
+ };
48
+ return t.current.addEventListener("shown.bs.modal", e), t.current.addEventListener("hidden.bs.modal", n), () => {
49
+ t.current?.removeEventListener("shown.bs.modal", e), t.current?.removeEventListener("hidden.bs.modal", n);
50
+ };
51
+ }, []), h(() => {
52
+ c && (async () => {
53
+ try {
54
+ if (!r) return;
55
+ b.current && e(b.current, !0);
56
+ let t = await a(r + "/" + c, {}, "GET", "application/json", !1), n = t ? t.data : void 0;
57
+ b.current && e(b.current, !1), O(n ?? {});
58
+ } catch (e) {
59
+ console.log(e);
60
+ }
61
+ })();
62
+ }, [c]), h(() => {
63
+ f && O(f);
64
+ }, [f]);
65
+ let k = (e) => {
66
+ e.preventDefault(), document.activeElement?.blur(), T?.hide(), s && s();
67
+ };
68
+ return /* @__PURE__ */ x("div", {
69
+ ref: t,
70
+ className: "modal fade p-0 mx-auto",
71
+ tabIndex: -1,
72
+ "data-bs-backdrop": "static",
73
+ "data-bs-keyboard": "false",
74
+ children: /* @__PURE__ */ x("div", {
75
+ className: `modal-dialog modal-${p}`,
76
+ style: g,
77
+ children: /* @__PURE__ */ x("div", {
78
+ className: "modal-content",
79
+ children: /* @__PURE__ */ S(w, {
80
+ ref: b,
81
+ className: "position-relative",
82
+ encType: "multipart/form-data",
83
+ "data-toggle": "validator",
84
+ role: "form",
85
+ method: "POST",
86
+ onSubmit: async (e) => {
87
+ if (e.preventDefault(), !b?.current) return;
88
+ let t = new u(b?.current);
89
+ !t.hasErrors() && !t.isIncomplete() && T && o(D, T, O);
90
+ },
91
+ children: [
92
+ /* @__PURE__ */ S("div", {
93
+ className: "modal-header py-3",
94
+ children: [/* @__PURE__ */ x("h5", {
95
+ className: "modal-title",
96
+ children: n
97
+ }), /* @__PURE__ */ x("button", {
98
+ type: "button",
99
+ className: "btn-close btn-md-close",
100
+ onClick: k,
101
+ children: /* @__PURE__ */ x("span", {
102
+ "aria-hidden": "true",
103
+ children: /* @__PURE__ */ x("i", {
104
+ className: "fal fa-times",
105
+ style: { fontSize: "1rem" }
106
+ })
107
+ })
108
+ })]
109
+ }),
110
+ /* @__PURE__ */ x("div", {
111
+ className: `modal-body rounded-bottom pb-0 ${y}`,
112
+ style: { overflowY: "auto" },
113
+ children: i(D, async (e) => {
114
+ let { name: t, value: n } = l(e);
115
+ O((e) => ({
116
+ ...e,
117
+ [t]: n
118
+ }));
119
+ })
120
+ }),
121
+ /* @__PURE__ */ S("div", {
122
+ className: "modal-footer d-flex justify-content-center",
123
+ children: [/* @__PURE__ */ x("button", {
124
+ type: "button",
125
+ className: "btn btn-secondary btn-md-close",
126
+ "data-bs-original-title": "reply",
127
+ onClick: k,
128
+ children: "Hủy"
129
+ }), /* @__PURE__ */ x("button", {
130
+ type: "submit",
131
+ className: "btn btn-success",
132
+ "data-bs-original-title": "save",
133
+ children: m
134
+ })]
135
+ })
136
+ ]
137
+ })
138
+ })
139
+ })
140
+ });
141
+ }, A = ({ header: e, data: t, numOfFirst: n = 0, numOfLast: r = 0, columnWidth: i = 200, ...a }) => {
142
+ let o = Array.isArray(e) ? e : [], s = Array.isArray(t) ? t : [], c = _(null), [l, u] = v(0), [d, f] = v(0), [p, m] = v(!1), [g, y] = v(!1), b = (e, t, n, r) => e < n ? { position: "left" } : e >= t - r ? { position: "right" } : { position: "none" };
143
+ h(() => {
144
+ let e = c.current;
145
+ if (!e) return;
146
+ let t = () => {
147
+ u(e.scrollLeft), f(e.scrollWidth - e.offsetWidth);
148
+ };
149
+ return t(), e.addEventListener("scroll", t), window.addEventListener("resize", t), () => {
150
+ e.removeEventListener("scroll", t), window.removeEventListener("resize", t);
151
+ };
152
+ }, []), h(() => {
153
+ let e = l > 5, t = l < d - 5;
154
+ m(e), y(t);
155
+ }, [l, d]);
156
+ let C = (e) => {
157
+ c.current && (c.current.scrollLeft += e.deltaY);
158
+ }, w = (e) => {
159
+ c.current && c.current.scrollBy({
160
+ left: e ? 150 : -150,
161
+ behavior: "smooth"
162
+ });
163
+ }, T = (e) => o[e]?.width ?? i, E = o.slice(0, n).reduce((e, t, n) => e + T(n), 0) || 0, D = o.slice(o.length - r).reduce((e, t, n) => e + T(o.length - r + n), 0) || 0;
164
+ return /* @__PURE__ */ S("div", {
165
+ className: "scroll-table-group",
166
+ children: [
167
+ /* @__PURE__ */ x("div", {
168
+ className: `fade-overlay fade-left ${p ? "fade-visible" : "fade-hidden"}`,
169
+ style: { left: `${E}px` }
170
+ }),
171
+ /* @__PURE__ */ x("div", {
172
+ className: `fade-overlay fade-right ${g ? "fade-visible" : "fade-hidden"}`,
173
+ style: { right: `${D}px` }
174
+ }),
175
+ p && /* @__PURE__ */ x("button", {
176
+ title: "Phải",
177
+ className: "scroll-btn left-btn",
178
+ onClick: () => w(!1),
179
+ style: { left: `${E}px` },
180
+ children: /* @__PURE__ */ x("i", { className: "fa-solid fa-chevron-left" })
181
+ }),
182
+ g && /* @__PURE__ */ x("button", {
183
+ title: "Trái",
184
+ className: "scroll-btn right-btn",
185
+ onClick: () => w(!0),
186
+ style: { right: `${D}px` },
187
+ children: /* @__PURE__ */ x("i", { className: "fa-solid fa-chevron-right" })
188
+ }),
189
+ /* @__PURE__ */ x("div", {
190
+ ref: c,
191
+ onWheel: C,
192
+ className: "table-container",
193
+ children: /* @__PURE__ */ S("table", {
194
+ className: "custom-table",
195
+ ...a,
196
+ children: [/* @__PURE__ */ x("thead", { children: /* @__PURE__ */ x("tr", {
197
+ className: "text-center",
198
+ children: o.map((e, t) => {
199
+ let { position: a } = b(t, o.length, n, r), s = e.width ?? i, c = {
200
+ left: a === "left" ? `${o.slice(0, t).reduce((e, t, n) => e + T(n), 0)}px` : void 0,
201
+ right: a === "right" ? `${o.slice(t + 1).reduce((e, n, r) => e + T(t + 1 + r), 0)}px` : void 0,
202
+ minWidth: `${s}px`
203
+ };
204
+ return /* @__PURE__ */ x("th", {
205
+ style: c,
206
+ className: `custom-th ${a === "none" ? "" : "sticky-col"} ${e.thClassName ?? ""}`,
207
+ children: e.label
208
+ }, t);
209
+ })
210
+ }) }), /* @__PURE__ */ S("tbody", { children: [s.map((e, t) => /* @__PURE__ */ x("tr", {
211
+ className: "custom-tr",
212
+ children: o.map((t, a) => {
213
+ let s = Object.values(e)[a], { position: c } = b(a, o.length, n, r), l = t.width ?? i, u = {
214
+ left: c === "left" ? `${o.slice(0, a).reduce((e, t, n) => e + T(n), 0)}px` : void 0,
215
+ right: c === "right" ? `${o.slice(a + 1).reduce((e, t, n) => e + T(a + 1 + n), 0)}px` : void 0,
216
+ minWidth: `${l}px`
217
+ };
218
+ return /* @__PURE__ */ x("td", {
219
+ style: u,
220
+ className: `custom-td ${c === "none" ? "" : "sticky-col"} ${t.tdClassName ?? ""}`,
221
+ children: s
222
+ }, a);
223
+ })
224
+ }, t)), s.length ? "" : /* @__PURE__ */ x("tr", {
225
+ className: "text-center",
226
+ children: /* @__PURE__ */ x("td", {
227
+ className: "px-3 pt-2",
228
+ colSpan: 20,
229
+ children: /* @__PURE__ */ x("p", { children: "Không có dữ liệu" })
230
+ })
231
+ })] })]
232
+ })
233
+ })
234
+ ]
235
+ });
236
+ }, j = (e, t) => {
237
+ t?.(e);
238
+ let n = e.currentTarget.closest(".input-group-outline");
239
+ e.currentTarget.value.trim() === "" ? n?.classList.remove("is-filled") : n?.classList.add("is-filled");
240
+ }, M = (e) => {
241
+ e.preventDefault(), e.currentTarget.closest(".input-group-outline")?.classList.add("is-focused");
242
+ }, N = (e) => {
243
+ e.preventDefault(), e.currentTarget.closest(".input-group-outline")?.classList.remove("is-focused");
244
+ }, P = ({ label: e, name: t, value: n = "", required: r = !1, disabled: i = !1, readonly: a = !1, cpnClass: o = "", minLength: s = 0, maxLength: l = 255, onChange: u, style: d = {} }) => {
245
+ let f = _(null);
246
+ return h(() => {
247
+ document.activeElement !== f.current && u && u(c(t, n));
248
+ }, [n]), /* @__PURE__ */ x("div", {
249
+ className: "form-group " + (o ?? ""),
250
+ children: /* @__PURE__ */ S("div", {
251
+ className: `input-group input-group-outline ${n ? "is-filled" : ""}`,
252
+ children: [/* @__PURE__ */ x("div", {
253
+ className: "form-label",
254
+ children: e + (r ? " *" : "")
255
+ }), /* @__PURE__ */ x("input", {
256
+ style: d,
257
+ name: t,
258
+ placeholder: "",
259
+ readOnly: a,
260
+ disabled: i,
261
+ required: r,
262
+ minLength: s,
263
+ maxLength: l,
264
+ "data-required-error": "Vui lòng nhập dữ liệu",
265
+ "data-error": "Dữ liệu không hợp lệ",
266
+ className: "form-control",
267
+ value: n,
268
+ onChange: (e) => j(e, u),
269
+ onFocus: M,
270
+ onBlur: N
271
+ })]
272
+ })
273
+ });
274
+ }, F = (e, t) => e.find((e) => e.value === t) || null, I = (e, t, n, r, i) => {
275
+ let a = [];
276
+ r && a.push({
277
+ value: -1,
278
+ label: "Tất cả"
279
+ }), i && a.push({
280
+ value: 0,
281
+ label: "Không có"
282
+ });
283
+ let o = Array.isArray(e) ? e.map((e) => ({
284
+ value: e[t],
285
+ label: e[n]
286
+ })) : [];
287
+ return [...a, ...o];
288
+ }, L = ({ label: e, name: t, lists: n = [], keyValue: r = "id", keyName: i = "name", value: a = "", cpnClass: o = "", required: s = !1, disabled: l = !1, all: u = !1, zero: d = !1, onChange: f, style: p = {} }) => {
289
+ let [m, g] = v([]);
290
+ h(() => {
291
+ g(I(n, r, i, u, d));
292
+ }, [n]);
293
+ let b = _(!1);
294
+ h(() => {
295
+ b.current || m.length && (b.current = !0, f?.(c(t, a)));
296
+ }, [m]);
297
+ let C = (e) => {
298
+ f && f(c(t, e));
299
+ }, w = _(null);
300
+ return h(() => {
301
+ let e = w.current?.querySelector(`input[name="${t}"][required]`);
302
+ e && e.setCustomValidity(a ? "" : "Vui lòng nhập dữ liệu");
303
+ }, [
304
+ a,
305
+ t,
306
+ s
307
+ ]), /* @__PURE__ */ x("div", {
308
+ ref: w,
309
+ className: "form-group box-select " + (o ?? ""),
310
+ style: p,
311
+ children: /* @__PURE__ */ S("div", {
312
+ className: "input-group input-group-outline is-filled",
313
+ children: [/* @__PURE__ */ x("span", {
314
+ className: "form-label",
315
+ children: e + (s ? " *" : "")
316
+ }), /* @__PURE__ */ x(y, {
317
+ menuPortalTarget: document.body,
318
+ styles: { menuPortal: (e) => ({
319
+ ...e,
320
+ zIndex: 99999
321
+ }) },
322
+ classNamePrefix: "react-select",
323
+ placeholder: "Chọn",
324
+ name: t,
325
+ options: m,
326
+ value: F(m, a),
327
+ onChange: (e) => C(e?.value ?? null),
328
+ noOptionsMessage: () => "Không có dữ liệu",
329
+ isDisabled: l,
330
+ required: s,
331
+ "data-required-error": "Vui lòng nhập dữ liệu",
332
+ "data-error": "Dữ liệu không hợp lệ",
333
+ className: "form-control"
334
+ })]
335
+ })
336
+ });
337
+ }, R = ({ ftfield: e, service: t, options: n, filter: r, handleChange: i, handleSearchForm: a }) => {
338
+ let o = Array.isArray(e) ? e : [];
339
+ return /* @__PURE__ */ S(w, {
340
+ className: "d-flex align-items-center",
341
+ onSubmit: a,
342
+ children: [
343
+ /* @__PURE__ */ x("div", {
344
+ className: "mb-3 me-3",
345
+ children: "Tìm kiếm"
346
+ }),
347
+ /* @__PURE__ */ x("div", {
348
+ className: `row grid-space-16 row-cols-${o.length} flex-1`,
349
+ children: o.map((e, a) => {
350
+ let o = t.ftFields(e);
351
+ switch (o.type) {
352
+ case "text": return /* @__PURE__ */ x(P, {
353
+ style: { minWidth: 100 },
354
+ label: t.fieldName(e),
355
+ name: e,
356
+ cpnClass: "mb-3 col",
357
+ value: String(r?.[e] ?? ""),
358
+ onChange: i
359
+ }, a);
360
+ case "select": {
361
+ let s = typeof o.option == "string" ? n?.[o.option] ?? [] : o.option ?? [], c = o.keyName || "name";
362
+ return /* @__PURE__ */ x(L, {
363
+ style: { minWidth: 100 },
364
+ label: t.fieldName(e),
365
+ name: e,
366
+ lists: s,
367
+ keyName: c,
368
+ cpnClass: "mb-3 col",
369
+ all: !0,
370
+ value: r?.[e] ?? -1,
371
+ onChange: i
372
+ }, a);
373
+ }
374
+ default: return "";
375
+ }
376
+ })
377
+ }),
378
+ /* @__PURE__ */ x("div", {
379
+ className: "mb-3 ms-3",
380
+ children: /* @__PURE__ */ x("button", {
381
+ title: "Tìm kiếm",
382
+ type: "submit",
383
+ className: "btn btn-primary",
384
+ children: "Tìm"
385
+ })
386
+ })
387
+ ]
388
+ });
389
+ }, z = ({ frmBody: i, service: c, apiOption: l, options: u, tbOption: d, roleOption: g, clsWidth: y = "xl", btnTxt: w = "Lưu lại" }) => {
390
+ let T = _(null), D = E(), [O, j] = v(0), [M, N] = v({
391
+ items: [],
392
+ page: 1,
393
+ filter: {},
394
+ length: 10,
395
+ pageTotal: 0,
396
+ recordTotal: 0
397
+ }), P = _(!1);
398
+ h(() => {
399
+ P.current || (P.current = !0, F());
400
+ }, []);
401
+ let F = async (e) => {
402
+ try {
403
+ let t = l.filter || {}, n = e ?? M.filter ?? {}, r = (await a(l.apiGetData, {
404
+ ...n,
405
+ ...t
406
+ }, "GET"))?.data ?? {};
407
+ N({
408
+ ...M,
409
+ ...r,
410
+ items: Array.isArray(r.items) ? r.items : [],
411
+ filter: r.filter ?? {
412
+ ...n,
413
+ ...t
414
+ }
415
+ });
416
+ } catch (e) {
417
+ console.log(e);
418
+ }
419
+ }, I = (e) => {
420
+ if (!T.current) return;
421
+ let t = C.getOrCreateInstance(T?.current, {
422
+ backdrop: "static",
423
+ keyboard: !1
424
+ });
425
+ j(e), t.show();
426
+ }, L = async (e) => {
427
+ try {
428
+ e.preventDefault();
429
+ let t = await p(e, M?.filter || {}, l?.cUri, D);
430
+ N({
431
+ ...M,
432
+ filter: t
433
+ }), await F(t);
434
+ } catch (e) {
435
+ console.log(e);
436
+ }
437
+ }, z = async (e) => {
438
+ e.preventDefault();
439
+ let t = await f(e, M?.filter || {});
440
+ N({
441
+ ...M,
442
+ filter: t
443
+ });
444
+ }, B = async (e) => {
445
+ e.preventDefault(), await F();
446
+ }, V = async (n, r) => {
447
+ try {
448
+ T?.current && e(T?.current, !0), n = {
449
+ ...n,
450
+ ...l.formData
451
+ };
452
+ let i = n.id, o = i ? l.apiEdit + "/" + i : l.apiCreate, s = await a(o, n, "POST");
453
+ t(i ? "Cập nhật thành công" : "Thêm mới thành công", "top-end", !0), s?.data?.id && (await F(), document.activeElement?.blur(), r.hide());
454
+ } catch (e) {
455
+ s(o(e));
456
+ } finally {
457
+ T?.current && e(T?.current, !1);
458
+ }
459
+ }, H = async (e) => {
460
+ try {
461
+ if (!(await n()).isConfirmed) return;
462
+ await a(`${l.apiDelete}/${e}`, {}, "DELETE"), t("Xoá thành công!", "top-end", !0), await F();
463
+ } catch (e) {
464
+ s(o(e));
465
+ }
466
+ }, U = [], W = d.numOfLast - 1;
467
+ U.push({
468
+ label: "STT",
469
+ width: 50,
470
+ tdClassName: "text-center px-0"
471
+ });
472
+ for (let e of d?.tbfield ?? []) {
473
+ let t = c.tbFields(e);
474
+ U.push({
475
+ label: c.fieldName(e),
476
+ width: t?.width || 150,
477
+ tdClassName: t?.tdClassName || "text-start"
478
+ });
479
+ }
480
+ (g?.isDelOne || g?.isEdit) && (W += 1, U.push({
481
+ label: "Thao tác",
482
+ width: 100,
483
+ align: "center",
484
+ thClassName: "p-0",
485
+ tdClassName: "text-center"
486
+ }));
487
+ let G = M?.items?.length ? M?.items.map((e, t) => {
488
+ let n = {};
489
+ n.stt = t + 1;
490
+ for (let t of d?.tbfield ?? []) {
491
+ let i = c.tbFields(t);
492
+ switch (i.type) {
493
+ case "number":
494
+ n[t] = e[t]?.toLocaleString("vi-VN");
495
+ break;
496
+ case "selecthtml": {
497
+ let r = i?.func;
498
+ n[t] = r ? /* @__PURE__ */ x("span", { dangerouslySetInnerHTML: { __html: String(r(e[t], !0)) } }) : /* @__PURE__ */ x("span", { children: e[t] ?? "" });
499
+ break;
500
+ }
501
+ case "select": {
502
+ let r = i?.func;
503
+ n[t] = r ? r(e[t], !0) : e[t];
504
+ break;
505
+ }
506
+ case "date":
507
+ n[t] = r(e[t]);
508
+ break;
509
+ default: n[t] = e[t];
510
+ }
511
+ }
512
+ return (g?.isDelOne || g?.isEdit) && (n.action = /* @__PURE__ */ S("div", {
513
+ className: "btn-group",
514
+ children: [/* @__PURE__ */ x("button", {
515
+ title: "Chỉnh sửa",
516
+ type: "button",
517
+ onClick: () => I(e.id),
518
+ className: "btn btn-sm btn-icon btn-info",
519
+ children: /* @__PURE__ */ x("i", {
520
+ className: "material-icons text-white position-relative text-lg",
521
+ children: "drive_file_rename_outline"
522
+ })
523
+ }), /* @__PURE__ */ x("button", {
524
+ title: "Xóa",
525
+ type: "button",
526
+ onClick: () => H(e.id),
527
+ className: "btn btn-sm btn-icon btn-danger",
528
+ children: /* @__PURE__ */ x("i", {
529
+ className: "material-icons text-white position-relative text-lg",
530
+ children: "delete"
531
+ })
532
+ })]
533
+ })), n;
534
+ }) : [];
535
+ return /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ S("div", {
536
+ className: "card mb-20",
537
+ children: [
538
+ /* @__PURE__ */ S("div", {
539
+ className: "card-header flex-auto col-auto d-flex align-items-center",
540
+ children: [/* @__PURE__ */ x("h3", {
541
+ className: "card-title",
542
+ children: d.title
543
+ }), g?.isCre && /* @__PURE__ */ x("button", {
544
+ type: "button",
545
+ title: "Thêm mới",
546
+ className: "btn btn-success btn-sm btn-icon ms-auto",
547
+ onClick: () => I(0),
548
+ children: /* @__PURE__ */ x("i", {
549
+ className: "material-icons text-white position-relative text-lg",
550
+ children: "add"
551
+ })
552
+ })]
553
+ }),
554
+ /* @__PURE__ */ x("hr", { className: "m-0" }),
555
+ /* @__PURE__ */ S("div", {
556
+ className: "card-body",
557
+ children: [
558
+ /* @__PURE__ */ x(R, {
559
+ ftfield: d.ftfield,
560
+ service: c,
561
+ options: u,
562
+ filter: M?.filter || {},
563
+ handleChange: z,
564
+ handleSearchForm: B
565
+ }),
566
+ /* @__PURE__ */ x(A, {
567
+ header: U,
568
+ data: G,
569
+ numOfFirst: d.numOfFirst,
570
+ numOfLast: W,
571
+ columnWidth: d.columnWidth
572
+ }),
573
+ M?.items?.length ? /* @__PURE__ */ x(m, {
574
+ data: M,
575
+ onChange: z,
576
+ onClickPage: L
577
+ }) : ""
578
+ ]
579
+ })
580
+ ]
581
+ }), /* @__PURE__ */ x(k, {
582
+ title: "Thêm mới",
583
+ modalRef: T,
584
+ frmBody: i,
585
+ clsWidth: y,
586
+ onSubmit: V,
587
+ btnTxt: w,
588
+ itemId: O,
589
+ setItemId: j,
590
+ apiGetDetail: l.apiGetDetail
591
+ })] });
592
+ }, B = ({ id: e, title: t = "Hình ảnh", clsWidth: n = "xl", elId: r }) => /* @__PURE__ */ x(b, { children: /* @__PURE__ */ x("div", {
593
+ id: e,
594
+ className: "modal fade p-0 mx-auto",
595
+ "data-bs-backdrop": "static",
596
+ "data-bs-keyboard": "false",
597
+ children: /* @__PURE__ */ x("div", {
598
+ className: `modal-dialog modal-dialog-scrollable modal-${n}`,
599
+ children: /* @__PURE__ */ S("div", {
600
+ className: "modal-content",
601
+ children: [/* @__PURE__ */ S("div", {
602
+ className: "modal-header py-3",
603
+ children: [/* @__PURE__ */ x("h5", {
604
+ className: "modal-title",
605
+ children: t
606
+ }), /* @__PURE__ */ x("button", {
607
+ type: "button",
608
+ className: "btn-close btn-md-close",
609
+ children: /* @__PURE__ */ x("span", {
610
+ "aria-hidden": "true",
611
+ children: /* @__PURE__ */ x("i", {
612
+ className: "fal fa-times",
613
+ style: { fontSize: "1rem" }
614
+ })
615
+ })
616
+ })]
617
+ }), /* @__PURE__ */ x("div", {
618
+ className: "modal-body rounded-bottom pb-0",
619
+ children: /* @__PURE__ */ x("div", {
620
+ id: r,
621
+ style: { height: "500px" }
622
+ })
623
+ })]
624
+ })
625
+ })
626
+ }) }), V = ({ config: e }) => /* @__PURE__ */ x(b, { children: /* @__PURE__ */ S(D, { children: [
627
+ /* @__PURE__ */ x("title", { children: e?.name }),
628
+ /* @__PURE__ */ x("link", {
629
+ rel: "shortcut icon",
630
+ href: i(e?.favicon || "/styles/favicon.ico"),
631
+ type: "image/x-icon"
632
+ }),
633
+ /* @__PURE__ */ x("link", {
634
+ rel: "canonical",
635
+ href: "/"
636
+ }),
637
+ /* @__PURE__ */ x("link", {
638
+ rel: "apple-touch-icon",
639
+ href: i(e?.logotext || "/styles/logotext.png")
640
+ }),
641
+ /* @__PURE__ */ x("link", {
642
+ rel: "stylesheet",
643
+ type: "text/css",
644
+ href: "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,900|Roboto+Slab:400,700"
645
+ })
646
+ ] }) });
647
+ //#endregion
648
+ //#region src/components/meta/Navtabs.tsx
649
+ function H({ tabs: e, onChange: t }) {
650
+ let n = Array.isArray(e) ? e : [], r = _(null), i = _(null), a = _([]), [o, s] = v(n[0]?.key), c = (e) => {
651
+ let t = i.current, n = a.current[e], o = r.current;
652
+ if (!t || !n || !o) return;
653
+ let s = o.getBoundingClientRect(), c = n.getBoundingClientRect(), l = c.left - s.left;
654
+ t.style.width = `${c.width}px`, t.style.transform = `translate3d(${l}px, 0, 0)`;
655
+ };
656
+ g(() => {
657
+ if (!n.length) return;
658
+ let e = n.findIndex((e) => e.key === o), t = e === -1 ? 0 : e;
659
+ s(n[t].key), c(t);
660
+ }, [e]), g(() => {
661
+ let e = n.findIndex((e) => e.key === o);
662
+ e !== -1 && c(e);
663
+ }, [o]), h(() => {
664
+ if (!r.current) return;
665
+ let e = () => {
666
+ let e = n.findIndex((e) => e.key === o);
667
+ e !== -1 && c(e);
668
+ };
669
+ window.addEventListener("resize", e);
670
+ let t = new ResizeObserver(e);
671
+ return t.observe(r.current), () => {
672
+ window.removeEventListener("resize", e), t.disconnect();
673
+ };
674
+ }, [o, e]);
675
+ let l = (e) => {
676
+ s(e), t?.(e);
677
+ };
678
+ return /* @__PURE__ */ x("div", {
679
+ className: "nav-wrapper position-relative",
680
+ children: /* @__PURE__ */ S("ul", {
681
+ ref: r,
682
+ className: "nav nav-pills nav-fill p-1 position-relative",
683
+ children: [/* @__PURE__ */ x("div", {
684
+ ref: i,
685
+ className: "moving-tab position-absolute nav-link",
686
+ style: {
687
+ padding: 0,
688
+ top: "0.25rem",
689
+ left: 0,
690
+ pointerEvents: "none",
691
+ transition: "transform 0.5s ease, width 0.5s ease",
692
+ willChange: "transform, width",
693
+ zIndex: 1
694
+ },
695
+ children: /* @__PURE__ */ x("div", {
696
+ className: "nav-link mb-0 px-0 py-2 cursor-pointer active",
697
+ children: n.find((e) => e.key === o)?.label
698
+ })
699
+ }), n.map((e, t) => /* @__PURE__ */ x("li", {
700
+ ref: (e) => {
701
+ e && (a.current[t] = e);
702
+ },
703
+ className: "nav-item",
704
+ children: /* @__PURE__ */ x("div", {
705
+ className: `nav-link cursor-pointer align-middle ${o === e.key ? "active" : ""}`,
706
+ onClick: () => l(e.key),
707
+ style: {
708
+ position: "relative",
709
+ zIndex: 2
710
+ },
711
+ children: /* @__PURE__ */ S("div", {
712
+ className: "d-flex align-items-center justify-content-center",
713
+ children: [e.icon && /* @__PURE__ */ x("i", {
714
+ className: "material-icons text-md position-relative line-height-1 me-1",
715
+ style: { top: 0 },
716
+ children: e.icon
717
+ }), e.label]
718
+ })
719
+ })
720
+ }, e.key))]
721
+ })
722
+ });
723
+ }
724
+ //#endregion
725
+ //#region src/components/meta/PDFEmbed.tsx
726
+ function U({ src: e, title: t = "PDF Viewer", fullWidth: n = !0, fullHeight: r = !0, className: i = "", style: a = {} }) {
727
+ let o = {
728
+ width: n ? "100%" : "auto",
729
+ height: r ? "100vh" : "600px",
730
+ border: "none",
731
+ ...a
732
+ };
733
+ return /* @__PURE__ */ x("div", {
734
+ className: `w-full h-full ${i}`,
735
+ style: { position: "relative" },
736
+ children: /* @__PURE__ */ x("iframe", {
737
+ src: e,
738
+ title: t,
739
+ style: o,
740
+ allow: "fullscreen"
741
+ })
742
+ });
743
+ }
744
+ //#endregion
745
+ export { z as a, k as c, B as i, O as l, H as n, R as o, V as r, A as s, U as t };