@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,11 @@
1
+ const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./Env-DoS-iQjs.cjs");let n=require("sweetalert2");n=e.t(n,1);let r=require("sweetalert2-react-content");r=e.t(r,1);let i=require("bootstrap");require("date-fns");let a=require("decimal.js");a=e.t(a,1),t.n();var o=e=>t.t()[e]??``,s=(e,t=!0)=>{let n=typeof e==`string`?document.querySelector(e):e;if(n){if(t)n.querySelector(`.boxSpinner`)||n.insertAdjacentHTML(`afterbegin`,`<div class="boxSpinner rounded">
2
+ <div class="spinner">
3
+ <div class="rect1"></div>
4
+ <div class="rect2"></div>
5
+ <div class="rect3"></div>
6
+ <div class="rect4"></div>
7
+ <div class="rect5"></div>
8
+ <div class="rect6"></div>
9
+ <div class="rect7"></div>
10
+ </div>
11
+ </div>`);else{let e=n.querySelector(`.boxSpinner`);e&&e.remove()}}},c=e=>{let t=new FormData;return Object.entries(e).forEach(([e,n])=>{if(n!=null){if(n instanceof FileList){Array.from(n).forEach(n=>t.append(e,n));return}if(n instanceof File){t.append(e,n);return}if(Array.isArray(n)&&n.every(e=>e instanceof File)){n.forEach(n=>t.append(e,n));return}if(Array.isArray(n)&&n.every(e=>[`string`,`number`,`boolean`].includes(typeof e))){n.forEach(n=>t.append(e,n.toString()));return}if(typeof n==`object`){t.append(e,JSON.stringify(n));return}n!=null&&typeof n!=`function`&&typeof n!=`object`&&t.append(e,String(n))}}),t},l=class extends Error{errorCode;constructor(e,t){super(e),this.name=`ApiError`,this.errorCode=t}};async function u(e,t={},n=`POST`,r=`application/json`,i=!0){let a={"Secret-Key":o(`SECRET_KEY`)};r!==`multipart/form-data`&&(a[`Content-Type`]=r);let s={method:n,headers:a,credentials:`include`};if(n==`POST`&&(s.body=r===`multipart/form-data`?c(t):JSON.stringify(t)),n===`GET`&&Object.keys(t).length>0){let n=new URLSearchParams;Object.entries(t).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,String(t))):n.append(e,String(t))});let r=n.toString();e+=(e.includes(`?`)?`&`:`?`)+r}let u=await(await fetch(e,s)).text(),d=null;if(u)try{d=JSON.parse(u)}catch{d=u}if(d&&typeof d!=`string`&&d.status==200)return d;if(d&&typeof d!=`string`&&d.msg&&i)throw new l(d.msg,d.errorCode??`unknown`);if(i)throw Error(`invalid_response`);return!1}var d=(e=`Bạn có chắc muốn thực hiện thao tác này ?`,t=`Đồng ý`)=>(0,r.default)(n.default).fire({title:`Xác nhận`,text:e,icon:`warning`,showCancelButton:!0,confirmButtonColor:`#4CAF50`,cancelButtonColor:`#F44336`,confirmButtonText:t,cancelButtonText:`Hủy`,position:`top`}),f=(e,t=`top`,i=!1)=>{(0,r.default)(n.default).fire({toast:i,icon:`success`,position:t,title:e,showConfirmButton:!1,timer:1500})},p=e=>{(0,r.default)(n.default).fire({icon:`error`,position:`top`,title:e,showConfirmButton:!1})},m=e=>{if(!e)return null;let t=new Date(e);return isNaN(t.getTime())?null:{dd:String(t.getDate()).padStart(2,`0`),MM:String(t.getMonth()+1).padStart(2,`0`),yyyy:t.getFullYear(),hh:String(t.getHours()).padStart(2,`0`),mm:String(t.getMinutes()).padStart(2,`0`),ss:String(t.getSeconds()).padStart(2,`0`)}},h=e=>{let t=m(e);return t?`${t.dd}/${t.MM}/${t.yyyy}`:e?`Invalid Date`:``},g=e=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,n])=>{Array.isArray(n)?n.forEach(n=>{n!=null&&t.append(e,String(n))}):n!=null&&t.set(e,String(n))}),t.toString()},_=(e=typeof window<`u`?window.location.pathname:``,t=/\/(?:edit|detail|update)\/(\d+)(?=\/|$)/i)=>{let n=new RegExp(t.source,t.flags.includes(`g`)?t.flags:t.flags+`g`),r=null,i;for(;(i=n.exec(e))!==null;)r=i;if(!r)return null;let a=Number(r[1]);return Number.isFinite(a)?a:null},v=(e,t=`/styles/default.jpg`)=>e?o(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):t,y=e=>e?o(`STATIC_URL`)+(`/`+e).replaceAll(`//`,`/`):``,b=(e,t=`/styles/default.jpg`)=>e?o(`API_URL`)+(`/`+e).replaceAll(`//`,`/`):t,x=(e,t=`/styles/default.jpg`)=>e?o(`UPLOADS_URL`)+`/`+e:t;function S(e){let t=``;for(let n=0;n<e;n++){let e=Math.floor(Math.random()*62);t+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`[e]}return t}var C=/\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i,w=(e,t)=>{if(!e)return t;let n=e.split(`,`).map(e=>{let t=e.trim();return(t.includes(`/`)?t.slice(t.indexOf(`/`)+1):t).replace(/^\./,``)}).filter(Boolean);if(n.length===0)return t;let r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`));return RegExp(`\\.(${r.join(`|`)})$`,`i`)},T=(e,t=20,n=C)=>new Promise((r,i)=>{let a=Array.from(e??[]);if(a.length===0)return i(Error(`Tập tin không tồn tại`));for(let e of a){if(!n.test(e.name))return p(`Tập tin không hợp lệ`),i(Error(`Tập tin không hợp lệ`));if(e.size>t*1024*1024)return p(`Tập tin tải lên không quá ${t}M`),i(Error(`Tập tin tải lên không quá ${t}M`))}r()}),E={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`},D=e=>String(e??``).replace(/[&<>"']/g,e=>E[e]),O=new Set([`danger`,`success`,`warning`,`info`,`primary`,`secondary`,`light`,`dark`]),k=(e=``,t=`danger`,n={})=>{let r=O.has(t)?t:`danger`,i=e=>n.raw?e:D(e);return typeof e==`string`?e.trim()===``?``:`<div class="alert alert-${r}">${i(e)}</div>`:!e||typeof e!=`object`?``:Object.values(e).filter(e=>e!=null&&String(e).trim()!==``).map(e=>`<div class="alert alert-${r}">${i(String(e))}</div>`).join(``)},A=(e,t={})=>new Promise((n,r)=>{try{let r=window.jQuery,i=r(e);if(!i.length)throw Error(`invalid_elfinder`);let a={url:o(`API_URL`)+`/elfinder/connector`,height:500,resizable:!0,baseUrl:`/assets/plugins/elFinder/`,defaultView:`list`,useBrowserHistory:!1,getFileCallback:e=>{n(e)}};i.elfinder(`destroy`).elfinder({...a,...t})}catch(e){r(e)}}),j=e=>{if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}},M=e=>new Promise((t,n)=>{try{let n=typeof e==`string`?document.querySelector(e):e;if(!n)throw Error(`invalid_modalEl_btnEl`);n.querySelectorAll(`.btn-md-close`)?.forEach(e=>{e?.addEventListener(`click`,()=>{r.hide()})});let r=i.Modal.getOrCreateInstance(n,{backdrop:`static`,keyboard:!1});t({md:r,modalEl:n})}catch(e){console.log(e),n(e)}}),N=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),M(t).then(({modalEl:t,md:i})=>{A(`#elfinderStatic`).then(t=>{n&&n({data:t,btnEl:e,md:i})}),t.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),i.show()})})},P=(e,t,n=!1,r=!1)=>{if(!e)throw Error(`invalid_btnEl`);e.addEventListener(`click`,i=>{i.preventDefault(),M(t).then(({modalEl:t,md:i})=>{A(`#elfinderStatic`,{url:o(`API_URL`)+`/elfinder/connectorFiles`}).then(t=>{n&&n({data:t,btnEl:e,md:i})}),t.addEventListener(`hidden.bs.modal`,()=>{r&&r()}),i.show()})})},F=(e=!1)=>{let t=[{id:1,name:`Tiếng Việt`}];return e===!1?t:t.find(t=>t.id===e)?.name||``};Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return k}});
@@ -0,0 +1,267 @@
1
+ import { n as e, t } from "./Env-SHztUA3s.js";
2
+ import n from "sweetalert2";
3
+ import r from "sweetalert2-react-content";
4
+ import { Modal as i } from "bootstrap";
5
+ import "date-fns";
6
+ import "decimal.js";
7
+ //#region src/utils/Common.ts
8
+ e();
9
+ var a = (e) => t()[e] ?? "", o = (e, t = !0) => {
10
+ let n = typeof e == "string" ? document.querySelector(e) : e;
11
+ if (n) {
12
+ if (t) n.querySelector(".boxSpinner") || n.insertAdjacentHTML("afterbegin", "<div class=\"boxSpinner rounded\">\n <div class=\"spinner\">\n <div class=\"rect1\"></div>\n <div class=\"rect2\"></div>\n <div class=\"rect3\"></div>\n <div class=\"rect4\"></div>\n <div class=\"rect5\"></div>\n <div class=\"rect6\"></div>\n <div class=\"rect7\"></div>\n </div>\n </div>");
13
+ else {
14
+ let e = n.querySelector(".boxSpinner");
15
+ e && e.remove();
16
+ }
17
+ }
18
+ }, s = (e) => {
19
+ let t = new FormData();
20
+ return Object.entries(e).forEach(([e, n]) => {
21
+ if (n != null) {
22
+ if (n instanceof FileList) {
23
+ Array.from(n).forEach((n) => t.append(e, n));
24
+ return;
25
+ }
26
+ if (n instanceof File) {
27
+ t.append(e, n);
28
+ return;
29
+ }
30
+ if (Array.isArray(n) && n.every((e) => e instanceof File)) {
31
+ n.forEach((n) => t.append(e, n));
32
+ return;
33
+ }
34
+ if (Array.isArray(n) && n.every((e) => [
35
+ "string",
36
+ "number",
37
+ "boolean"
38
+ ].includes(typeof e))) {
39
+ n.forEach((n) => t.append(e, n.toString()));
40
+ return;
41
+ }
42
+ if (typeof n == "object") {
43
+ t.append(e, JSON.stringify(n));
44
+ return;
45
+ }
46
+ n != null && typeof n != "function" && typeof n != "object" && t.append(e, String(n));
47
+ }
48
+ }), t;
49
+ }, c = class extends Error {
50
+ errorCode;
51
+ constructor(e, t) {
52
+ super(e), this.name = "ApiError", this.errorCode = t;
53
+ }
54
+ };
55
+ async function l(e, t = {}, n = "POST", r = "application/json", i = !0) {
56
+ let o = { "Secret-Key": a("SECRET_KEY") };
57
+ r !== "multipart/form-data" && (o["Content-Type"] = r);
58
+ let l = {
59
+ method: n,
60
+ headers: o,
61
+ credentials: "include"
62
+ };
63
+ if (n == "POST" && (l.body = r === "multipart/form-data" ? s(t) : JSON.stringify(t)), n === "GET" && Object.keys(t).length > 0) {
64
+ let n = new URLSearchParams();
65
+ Object.entries(t).forEach(([e, t]) => {
66
+ Array.isArray(t) ? t.forEach((t) => n.append(e, String(t))) : n.append(e, String(t));
67
+ });
68
+ let r = n.toString();
69
+ e += (e.includes("?") ? "&" : "?") + r;
70
+ }
71
+ let u = await (await fetch(e, l)).text(), d = null;
72
+ if (u) try {
73
+ d = JSON.parse(u);
74
+ } catch {
75
+ d = u;
76
+ }
77
+ if (d && typeof d != "string" && d.status == 200) return d;
78
+ if (d && typeof d != "string" && d.msg && i) throw new c(d.msg, d.errorCode ?? "unknown");
79
+ if (i) throw Error("invalid_response");
80
+ return !1;
81
+ }
82
+ var u = (e = "Bạn có chắc muốn thực hiện thao tác này ?", t = "Đồng ý") => r(n).fire({
83
+ title: "Xác nhận",
84
+ text: e,
85
+ icon: "warning",
86
+ showCancelButton: !0,
87
+ confirmButtonColor: "#4CAF50",
88
+ cancelButtonColor: "#F44336",
89
+ confirmButtonText: t,
90
+ cancelButtonText: "Hủy",
91
+ position: "top"
92
+ }), d = (e, t = "top", i = !1) => {
93
+ r(n).fire({
94
+ toast: i,
95
+ icon: "success",
96
+ position: t,
97
+ title: e,
98
+ showConfirmButton: !1,
99
+ timer: 1500
100
+ });
101
+ }, f = (e) => {
102
+ r(n).fire({
103
+ icon: "error",
104
+ position: "top",
105
+ title: e,
106
+ showConfirmButton: !1
107
+ });
108
+ }, p = (e) => {
109
+ if (!e) return null;
110
+ let t = new Date(e);
111
+ return isNaN(t.getTime()) ? null : {
112
+ dd: String(t.getDate()).padStart(2, "0"),
113
+ MM: String(t.getMonth() + 1).padStart(2, "0"),
114
+ yyyy: t.getFullYear(),
115
+ hh: String(t.getHours()).padStart(2, "0"),
116
+ mm: String(t.getMinutes()).padStart(2, "0"),
117
+ ss: String(t.getSeconds()).padStart(2, "0")
118
+ };
119
+ }, m = (e) => {
120
+ let t = p(e);
121
+ return t ? `${t.dd}/${t.MM}/${t.yyyy}` : e ? "Invalid Date" : "";
122
+ }, h = (e) => {
123
+ let t = new URLSearchParams();
124
+ return Object.entries(e).forEach(([e, n]) => {
125
+ Array.isArray(n) ? n.forEach((n) => {
126
+ n != null && t.append(e, String(n));
127
+ }) : n != null && t.set(e, String(n));
128
+ }), t.toString();
129
+ }, g = (e = typeof window < "u" ? window.location.pathname : "", t = /\/(?:edit|detail|update)\/(\d+)(?=\/|$)/i) => {
130
+ let n = new RegExp(t.source, t.flags.includes("g") ? t.flags : t.flags + "g"), r = null, i;
131
+ for (; (i = n.exec(e)) !== null;) r = i;
132
+ if (!r) return null;
133
+ let a = Number(r[1]);
134
+ return Number.isFinite(a) ? a : null;
135
+ }, _ = (e, t = "/styles/default.jpg") => e ? a("STATIC_URL") + ("/" + e).replaceAll("//", "/") : t, v = (e) => e ? a("STATIC_URL") + ("/" + e).replaceAll("//", "/") : "", y = (e, t = "/styles/default.jpg") => e ? a("API_URL") + ("/" + e).replaceAll("//", "/") : t, b = (e, t = "/styles/default.jpg") => e ? a("UPLOADS_URL") + "/" + e : t;
136
+ function x(e) {
137
+ let t = "";
138
+ for (let n = 0; n < e; n++) {
139
+ let e = Math.floor(Math.random() * 62);
140
+ t += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[e];
141
+ }
142
+ return t;
143
+ }
144
+ var S = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, C = (e, t) => {
145
+ if (!e) return t;
146
+ let n = e.split(",").map((e) => {
147
+ let t = e.trim();
148
+ return (t.includes("/") ? t.slice(t.indexOf("/") + 1) : t).replace(/^\./, "");
149
+ }).filter(Boolean);
150
+ if (n.length === 0) return t;
151
+ let r = n.map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
152
+ return RegExp(`\\.(${r.join("|")})$`, "i");
153
+ }, w = (e, t = 20, n = S) => new Promise((r, i) => {
154
+ let a = Array.from(e ?? []);
155
+ if (a.length === 0) return i(/* @__PURE__ */ Error("Tập tin không tồn tại"));
156
+ for (let e of a) {
157
+ if (!n.test(e.name)) return f("Tập tin không hợp lệ"), i(/* @__PURE__ */ Error("Tập tin không hợp lệ"));
158
+ if (e.size > t * 1024 * 1024) return f(`Tập tin tải lên không quá ${t}M`), i(/* @__PURE__ */ Error(`Tập tin tải lên không quá ${t}M`));
159
+ }
160
+ r();
161
+ }), T = {
162
+ "&": "&amp;",
163
+ "<": "&lt;",
164
+ ">": "&gt;",
165
+ "\"": "&quot;",
166
+ "'": "&#39;"
167
+ }, E = (e) => String(e ?? "").replace(/[&<>"']/g, (e) => T[e]), D = /* @__PURE__ */ new Set([
168
+ "danger",
169
+ "success",
170
+ "warning",
171
+ "info",
172
+ "primary",
173
+ "secondary",
174
+ "light",
175
+ "dark"
176
+ ]), O = (e = "", t = "danger", n = {}) => {
177
+ let r = D.has(t) ? t : "danger", i = (e) => n.raw ? e : E(e);
178
+ return typeof e == "string" ? e.trim() === "" ? "" : `<div class="alert alert-${r}">${i(e)}</div>` : !e || typeof e != "object" ? "" : Object.values(e).filter((e) => e != null && String(e).trim() !== "").map((e) => `<div class="alert alert-${r}">${i(String(e))}</div>`).join("");
179
+ }, k = (e, t = {}) => new Promise((n, r) => {
180
+ try {
181
+ let r = window.jQuery, i = r(e);
182
+ if (!i.length) throw Error("invalid_elfinder");
183
+ let o = {
184
+ url: a("API_URL") + "/elfinder/connector",
185
+ height: 500,
186
+ resizable: !0,
187
+ baseUrl: "/assets/plugins/elFinder/",
188
+ defaultView: "list",
189
+ useBrowserHistory: !1,
190
+ getFileCallback: (e) => {
191
+ n(e);
192
+ }
193
+ };
194
+ i.elfinder("destroy").elfinder({
195
+ ...o,
196
+ ...t
197
+ });
198
+ } catch (e) {
199
+ r(e);
200
+ }
201
+ }), A = (e) => {
202
+ if (e instanceof Error) return e.message;
203
+ if (typeof e == "string") return e;
204
+ try {
205
+ return JSON.stringify(e) ?? String(e);
206
+ } catch {
207
+ return String(e);
208
+ }
209
+ }, j = (e) => new Promise((t, n) => {
210
+ try {
211
+ let n = typeof e == "string" ? document.querySelector(e) : e;
212
+ if (!n) throw Error("invalid_modalEl_btnEl");
213
+ n.querySelectorAll(".btn-md-close")?.forEach((e) => {
214
+ e?.addEventListener("click", () => {
215
+ r.hide();
216
+ });
217
+ });
218
+ let r = i.getOrCreateInstance(n, {
219
+ backdrop: "static",
220
+ keyboard: !1
221
+ });
222
+ t({
223
+ md: r,
224
+ modalEl: n
225
+ });
226
+ } catch (e) {
227
+ console.log(e), n(e);
228
+ }
229
+ }), M = (e, t, n = !1, r = !1) => {
230
+ if (!e) throw Error("invalid_btnEl");
231
+ e.addEventListener("click", (i) => {
232
+ i.preventDefault(), j(t).then(({ modalEl: t, md: i }) => {
233
+ k("#elfinderStatic").then((t) => {
234
+ n && n({
235
+ data: t,
236
+ btnEl: e,
237
+ md: i
238
+ });
239
+ }), t.addEventListener("hidden.bs.modal", () => {
240
+ r && r();
241
+ }), i.show();
242
+ });
243
+ });
244
+ }, N = (e, t, n = !1, r = !1) => {
245
+ if (!e) throw Error("invalid_btnEl");
246
+ e.addEventListener("click", (i) => {
247
+ i.preventDefault(), j(t).then(({ modalEl: t, md: i }) => {
248
+ k("#elfinderStatic", { url: a("API_URL") + "/elfinder/connectorFiles" }).then((t) => {
249
+ n && n({
250
+ data: t,
251
+ btnEl: e,
252
+ md: i
253
+ });
254
+ }), t.addEventListener("hidden.bs.modal", () => {
255
+ r && r();
256
+ }), i.show();
257
+ });
258
+ });
259
+ }, P = (e = !1) => {
260
+ let t = [{
261
+ id: 1,
262
+ name: "Tiếng Việt"
263
+ }];
264
+ return e === !1 ? t : t.find((t) => t.id === e)?.name || "";
265
+ };
266
+ //#endregion
267
+ export { o as C, d as S, N as _, h as a, u as b, E as c, g as d, _ as f, x as g, b as h, j as i, m as l, y as m, l as n, k as o, P as p, w as r, A as s, C as t, v as u, M as v, f as x, O as y };
@@ -0,0 +1 @@
1
+ var e={},t=null,n=!1;function r(){return n?Promise.resolve(e):t||(t=fetch(`/env.json`,{cache:`no-cache`}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status} ${e.statusText}`);return e.json()}).then(t=>(e=t??{},e)).catch(t=>(console.warn(`[@materialui-reactjs/admin] Không tải được /env.json — dùng cấu hình rỗng.`,t),e={},e)).then(e=>(n=!0,e)),t)}function i(){return e}function a(){return n=!1,t=null,r()}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
@@ -0,0 +1,16 @@
1
+ //#region src/utils/Env.ts
2
+ var e = {}, t = null, n = !1;
3
+ function r() {
4
+ return n ? Promise.resolve(e) : t || (t = fetch("/env.json", { cache: "no-cache" }).then((e) => {
5
+ if (!e.ok) throw Error(`HTTP ${e.status} ${e.statusText}`);
6
+ return e.json();
7
+ }).then((t) => (e = t ?? {}, e)).catch((t) => (console.warn("[@materialui-reactjs/admin] Không tải được /env.json — dùng cấu hình rỗng.", t), e = {}, e)).then((e) => (n = !0, e)), t);
8
+ }
9
+ function i() {
10
+ return e;
11
+ }
12
+ function a() {
13
+ return n = !1, t = null, r();
14
+ }
15
+ //#endregion
16
+ export { r as n, a as r, i as t };
@@ -0,0 +1 @@
1
+ const e=require("./Common-DFahMuQE.cjs");let t=require("react/jsx-runtime"),n=require("react-router-dom"),r=require("@mui/material"),i=require("react-helmet-async");function a({title:e,children:n,placement:i=`bottom`,y:a=-10}){return(0,t.jsx)(r.Tooltip,{title:e,placement:i,slotProps:{popper:{modifiers:[{name:`offset`,options:{offset:[0,a]}}]}},children:n})}var o=({data:e,onChange:r,onClickPage:i})=>{let a=Array.isArray(e?.items)?e.items:[],o=e?.length||10,s=e?.page||1,c=e?.recordTotal||0,l=Math.ceil(c/o),u=(s-1)*o,d=s-1,f=s+1,p=d>=1,m=l>s;return(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,t.jsxs)(`span`,{children:[`Đang xem từ `,u+1,` đến `,u+a.length,` trong tổng số `,c]}),(0,t.jsx)(`nav`,{children:(0,t.jsxs)(`ul`,{className:`pagination`,children:[s>2&&(0,t.jsx)(`li`,{className:`page-item`,children:(0,t.jsx)(n.NavLink,{className:`first page-link`,to:`#`,"data-page":1,title:`Trang đầu tiên`,onClick:i,children:(0,t.jsx)(`i`,{className:`fal fa-fast-backward`})})}),p&&(0,t.jsx)(`li`,{className:`page-item`,children:(0,t.jsx)(n.NavLink,{className:`prev page-link`,to:`#`,"data-page":d,title:`Trang trước`,onClick:i,children:(0,t.jsx)(`i`,{className:`fal fa-angle-left`})})}),l>1&&(()=>{let e=Math.max(1,s-2),t=Math.min(l,s+2),n=[];for(let r=e;r<=t;r++)n.push(r);return n})().map(e=>(0,t.jsx)(`li`,{className:`page-item ${s===e?`active`:``}`,children:(0,t.jsx)(n.NavLink,{className:`page-link`,to:`#`,"data-page":e,onClick:s===e?void 0:i,children:e})},e)),m&&(0,t.jsx)(`li`,{className:`page-item`,children:(0,t.jsx)(n.NavLink,{className:`next page-link`,to:`#`,"data-page":f,title:`Trang tiếp theo`,onClick:i,children:(0,t.jsx)(`i`,{className:`fal fa-angle-right`})})}),s<l-1&&(0,t.jsx)(`li`,{className:`page-item`,children:(0,t.jsx)(n.NavLink,{className:`first page-link`,to:`#`,"data-page":l,title:`Trang cuối cùng`,onClick:i,children:(0,t.jsx)(`i`,{className:`fal fa-fast-forward`})})})]})}),(0,t.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,t.jsx)(`span`,{className:`me-2`,children:`Xem`}),(0,t.jsx)(`div`,{className:`form-group pagination-length`,children:(0,t.jsxs)(`select`,{className:`pageLen`,name:`pageLen`,defaultValue:o,onChange:r,children:[(0,t.jsx)(`option`,{value:`10`,children:`10`}),(0,t.jsx)(`option`,{value:`25`,children:`25`}),(0,t.jsx)(`option`,{value:`50`,children:` 50`}),(0,t.jsx)(`option`,{value:`100`,children:`100`}),(0,t.jsx)(`option`,{value:`500`,children:`500`})]})})]})]})})},s=async(t,n)=>{try{let r=new URLSearchParams;for(let[e,n]of Object.entries(t))n!=null&&r.append(e,String(n));let i=`${n}?${r.toString()}`;return(await e.n(i,{},`GET`)).data}catch{return{items:[],page:1,length:10,pageTotal:0,recordTotal:0}}},c=async(t,n,r,i)=>{let a=t.currentTarget,o=Number(a.getAttribute(`data-page`)??1),s={...n,page:o};return i(`${r}?${e.a(s)}`,{replace:!0}),s},l=async(t,n,r)=>{let i={...t,page:1};return r(`${n}?${e.a(i)}`,{replace:!0}),i},u=async(e,t)=>{e.preventDefault();let{name:n,value:r}=e.target,i={...t};return n===`pageLen`?(i.pageLen=Number(r),i.page=1):i[n]=r,i},d=({title:e=``,cUri:r=``,fluid:a=!1,cUriTitle:o=``})=>(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.Helmet,{children:(0,t.jsx)(`title`,{children:e||`Truy cập không được phép`})}),(0,t.jsxs)(`div`,{className:`${a?`container-fluid`:`container`}`,children:[(0,t.jsx)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:(0,t.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,t.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:`/`,children:(0,t.jsx)(`i`,{className:`fal fa-home`})})}),(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:r,children:o})})]})})}),(0,t.jsx)(`div`,{style:{minHeight:`50vh`},className:`d-flex align-items-center`,children:(0,t.jsxs)(`div`,{className:`m-auto text-center`,children:[(0,t.jsx)(`h1`,{className:`display-1 text-bolder text-white`,children:`403`}),(0,t.jsx)(`h2`,{className:`text-white`,children:`Truy cập không được phép`}),(0,t.jsx)(`p`,{className:`lead text-white`,children:`Xin lỗi, bạn không có quyền truy cập vào trang này.`}),(0,t.jsx)(n.Link,{to:`/`,className:`btn btn-outline-white mt-4`,children:`trang chủ`})]})})]})]}),f=({title:e=``,cUri:r=``,fluid:a=!1,cUriTitle:o=``})=>(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.Helmet,{children:(0,t.jsx)(`title`,{children:e||`Không tìm thấy dữ liệu`})}),(0,t.jsxs)(`div`,{className:`${a?`container-fluid`:`container`}`,children:[(0,t.jsx)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:(0,t.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,t.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:`/`,children:(0,t.jsx)(`i`,{className:`fal fa-home`})})}),(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:r,children:o})})]})})}),(0,t.jsx)(`div`,{style:{minHeight:`50vh`},className:`d-flex align-items-center`,children:(0,t.jsxs)(`div`,{className:`m-auto text-center`,children:[(0,t.jsx)(`h1`,{className:`display-1 text-bolder text-white`,children:`404`}),(0,t.jsx)(`h2`,{className:`text-white`,children:`Không tìm thấy dữ liệu`}),(0,t.jsx)(`p`,{className:`lead text-white`,children:`Xin lỗi, dữ liệu của bạn không được tìm thấy`}),(0,t.jsx)(n.Link,{to:`/`,className:`btn btn-outline-white mt-4`,children:`trang chủ`})]})})]})]}),p=({adminUri:e,cUri:r,title:i,isSave:o=!1,titleAction:s=`Chi tiết`})=>(0,t.jsxs)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:[(0,t.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,t.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:e,children:(0,t.jsx)(`i`,{className:`fal fa-home`})})}),(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:r,children:i})}),(0,t.jsx)(`li`,{className:`breadcrumb-item text-white active`,"aria-current":`page`,children:s})]})}),(0,t.jsxs)(`div`,{className:`ms-auto`,children:[o&&(0,t.jsx)(a,{title:`Lưu lại`,children:(0,t.jsx)(`button`,{type:`submit`,className:`btn btn-sm btn-icon btn-success me-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`save`})})}),(0,t.jsx)(a,{title:`Trở lại`,children:(0,t.jsx)(n.Link,{to:r,className:`btn btn-sm btn-icon btn-secondary`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`reply`})})})]})]}),m=({adminUri:e,cUri:r,title:i,isCre:o=!1,isDel:s=!1,isCpy:c=!1,isImp:l=!1,isExp:u=!1,isField:d=!1,isReply:f=!1,replyUri:p=`#`,onDelete:m,onExport:h,onCopy:g})=>(0,t.jsxs)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,"navbar-scroll":`true`,children:[(0,t.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,t.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:e||`/`,children:(0,t.jsx)(`i`,{className:`fal fa-home`})})}),(0,t.jsx)(`li`,{className:`breadcrumb-item text-white active`,"aria-current":`page`,children:i})]})}),(0,t.jsxs)(`div`,{className:`ms-auto`,children:[o&&(0,t.jsx)(a,{title:`Tạo mới`,children:(0,t.jsx)(n.Link,{to:r+`/create`,className:`btn btn-success btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`add`})})}),u&&(0,t.jsx)(a,{title:`Export Excel`,children:(0,t.jsx)(`button`,{type:`button`,onClick:h,className:`btn btn-warning btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`fal fa-download`})})}),l&&(0,t.jsx)(a,{title:`Import Excel`,children:(0,t.jsx)(n.Link,{to:r+`/import`,className:`btn btn-info btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`fal fa-file-import`})})}),c&&(0,t.jsx)(a,{title:`Sao chép`,children:(0,t.jsx)(`button`,{onClick:g,type:`button`,className:`btn btn-purple btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`copy`})})}),s&&(0,t.jsx)(a,{title:`Xóa`,children:(0,t.jsx)(`button`,{onClick:m,type:`button`,className:`btn btn-danger btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`delete`})})}),d&&(0,t.jsx)(a,{title:`Tùy chỉnh trường dữ liệu`,children:(0,t.jsx)(n.Link,{to:r+`/fields`,className:`btn btn-purple btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`manage_accounts`})})}),f&&(0,t.jsx)(a,{title:`Trở về`,children:(0,t.jsx)(n.Link,{to:p,className:`btn btn-secondary btn-sm btn-icon ms-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`reply`})})})]})]}),h=({adminUri:e,cUri:r,title:i,itemId:o,isSave:s=!0,titleAction:c})=>(0,t.jsxs)(`div`,{className:`navbar navbar-main navbar-expand-lg px-0 shadow-none border-radius-xl py-3`,children:[(0,t.jsx)(`nav`,{"aria-label":`breadcrumb`,children:(0,t.jsxs)(`ol`,{className:`breadcrumb bg-transparent m-0 p-0`,children:[(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:e||`/`,children:(0,t.jsx)(`i`,{className:`fal fa-home`})})}),(0,t.jsx)(`li`,{className:`breadcrumb-item`,children:(0,t.jsx)(n.Link,{className:`text-white`,to:r,children:i})}),(0,t.jsx)(`li`,{className:`breadcrumb-item text-white active`,"aria-current":`page`,children:c??(o?`Chỉnh sửa`:`Thêm mới`)})]})}),(0,t.jsxs)(`div`,{className:`ms-auto`,children:[s&&(0,t.jsx)(a,{title:`Lưu lại`,children:(0,t.jsx)(`button`,{type:`submit`,className:`btn btn-sm btn-icon btn-success me-1`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`save`})})}),(0,t.jsx)(a,{title:`Trở lại`,children:(0,t.jsx)(n.Link,{to:r,className:`btn btn-sm btn-icon btn-secondary`,children:(0,t.jsx)(`i`,{className:`material-icons text-white position-relative text-lg`,children:`reply`})})})]})]});Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return o}});
@@ -1,4 +1,4 @@
1
- import { i as e, t } from "./Common-BURf0rBN.js";
1
+ import { a as e, n as t } from "./Common-_PK8HLKN.js";
2
2
  import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
3
3
  import { Link as a, NavLink as o } from "react-router-dom";
4
4
  import { Tooltip as s } from "@mui/material";
@@ -18,22 +18,22 @@ function l({ title: e, children: t, placement: n = "bottom", y: i = -10 }) {
18
18
  //#endregion
19
19
  //#region src/components/meta/Pagination.tsx
20
20
  var u = ({ data: e, onChange: t, onClickPage: a }) => {
21
- let s = Math.ceil(e.recordTotal / e.length), c = (e.page - 1) * e.length, l = e.page - 1, u = e.page + 1, d = l >= 1, f = s > e.page;
21
+ let s = Array.isArray(e?.items) ? e.items : [], c = e?.length || 10, l = e?.page || 1, u = e?.recordTotal || 0, d = Math.ceil(u / c), f = (l - 1) * c, p = l - 1, m = l + 1, h = p >= 1, g = d > l;
22
22
  return /* @__PURE__ */ r(n, { children: /* @__PURE__ */ i("div", {
23
23
  className: "d-flex justify-content-between align-items-center",
24
24
  children: [
25
25
  /* @__PURE__ */ i("span", { children: [
26
26
  "Đang xem từ ",
27
- c + 1,
27
+ f + 1,
28
28
  " đến ",
29
- c + e.items.length,
29
+ f + s.length,
30
30
  " trong tổng số ",
31
- e.recordTotal
31
+ u
32
32
  ] }),
33
33
  /* @__PURE__ */ r("nav", { children: /* @__PURE__ */ i("ul", {
34
34
  className: "pagination",
35
35
  children: [
36
- e.page > 2 && /* @__PURE__ */ r("li", {
36
+ l > 2 && /* @__PURE__ */ r("li", {
37
37
  className: "page-item",
38
38
  children: /* @__PURE__ */ r(o, {
39
39
  className: "first page-link",
@@ -44,48 +44,48 @@ var u = ({ data: e, onChange: t, onClickPage: a }) => {
44
44
  children: /* @__PURE__ */ r("i", { className: "fal fa-fast-backward" })
45
45
  })
46
46
  }),
47
- d && /* @__PURE__ */ r("li", {
47
+ h && /* @__PURE__ */ r("li", {
48
48
  className: "page-item",
49
49
  children: /* @__PURE__ */ r(o, {
50
50
  className: "prev page-link",
51
51
  to: "#",
52
- "data-page": l,
52
+ "data-page": p,
53
53
  title: "Trang trước",
54
54
  onClick: a,
55
55
  children: /* @__PURE__ */ r("i", { className: "fal fa-angle-left" })
56
56
  })
57
57
  }),
58
- s > 1 && (() => {
59
- let t = Math.max(1, e.page - 2), n = Math.min(s, e.page + 2), r = [];
60
- for (let e = t; e <= n; e++) r.push(e);
61
- return r;
62
- })().map((t) => /* @__PURE__ */ r("li", {
63
- className: `page-item ${e.page === t ? "active" : ""}`,
58
+ d > 1 && (() => {
59
+ let e = Math.max(1, l - 2), t = Math.min(d, l + 2), n = [];
60
+ for (let r = e; r <= t; r++) n.push(r);
61
+ return n;
62
+ })().map((e) => /* @__PURE__ */ r("li", {
63
+ className: `page-item ${l === e ? "active" : ""}`,
64
64
  children: /* @__PURE__ */ r(o, {
65
65
  className: "page-link",
66
66
  to: "#",
67
- "data-page": t,
68
- onClick: e.page === t ? void 0 : a,
69
- children: t
67
+ "data-page": e,
68
+ onClick: l === e ? void 0 : a,
69
+ children: e
70
70
  })
71
- }, t)),
72
- f && /* @__PURE__ */ r("li", {
71
+ }, e)),
72
+ g && /* @__PURE__ */ r("li", {
73
73
  className: "page-item",
74
74
  children: /* @__PURE__ */ r(o, {
75
75
  className: "next page-link",
76
76
  to: "#",
77
- "data-page": u,
77
+ "data-page": m,
78
78
  title: "Trang tiếp theo",
79
79
  onClick: a,
80
80
  children: /* @__PURE__ */ r("i", { className: "fal fa-angle-right" })
81
81
  })
82
82
  }),
83
- e.page < s - 1 && /* @__PURE__ */ r("li", {
83
+ l < d - 1 && /* @__PURE__ */ r("li", {
84
84
  className: "page-item",
85
85
  children: /* @__PURE__ */ r(o, {
86
86
  className: "first page-link",
87
87
  to: "#",
88
- "data-page": s,
88
+ "data-page": d,
89
89
  title: "Trang cuối cùng",
90
90
  onClick: a,
91
91
  children: /* @__PURE__ */ r("i", { className: "fal fa-fast-forward" })
@@ -103,7 +103,7 @@ var u = ({ data: e, onChange: t, onClickPage: a }) => {
103
103
  children: /* @__PURE__ */ i("select", {
104
104
  className: "pageLen",
105
105
  name: "pageLen",
106
- defaultValue: e.length,
106
+ defaultValue: c,
107
107
  onChange: t,
108
108
  children: [
109
109
  /* @__PURE__ */ r("option", {
@@ -134,8 +134,10 @@ var u = ({ data: e, onChange: t, onClickPage: a }) => {
134
134
  }) });
135
135
  }, d = async (e, n) => {
136
136
  try {
137
- let r = `${n}?${new URLSearchParams(e).toString()}`;
138
- return (await t(r, {}, "GET")).data;
137
+ let r = new URLSearchParams();
138
+ for (let [t, n] of Object.entries(e)) n != null && r.append(t, String(n));
139
+ let i = `${n}?${r.toString()}`;
140
+ return (await t(i, {}, "GET")).data;
139
141
  } catch {
140
142
  return {
141
143
  items: [],
@@ -354,6 +356,7 @@ var u = ({ data: e, onChange: t, onClickPage: a }) => {
354
356
  d && /* @__PURE__ */ r(l, {
355
357
  title: "Export Excel",
356
358
  children: /* @__PURE__ */ r("button", {
359
+ type: "button",
357
360
  onClick: g,
358
361
  className: "btn btn-warning btn-sm btn-icon ms-1",
359
362
  children: /* @__PURE__ */ r("i", { className: "fal fa-download" })
@@ -0,0 +1 @@
1
+ let e=require("react/jsx-runtime"),t=require("@dnd-kit/utilities"),n=require("@dnd-kit/sortable");function r({id:r,className:i,iconSize:a=`24px`,iconStyle:o={cursor:`move`,right:`5px`,top:`5px`},children:s}){let{attributes:c,listeners:l,setNodeRef:u,transform:d,transition:f}=(0,n.useSortable)({id:r}),p={transform:t.CSS.Transform.toString(d),transition:f};return(0,e.jsxs)(`div`,{ref:u,style:p,className:i,children:[(0,e.jsx)(`div`,{...c,...l,style:o,className:`position-absolute`,children:(0,e.jsx)(`i`,{className:`fal fa-arrows-up-down-left-right`,style:{fontSize:a}})}),s]})}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}});
@@ -0,0 +1 @@
1
+ let e=require("react/jsx-runtime");var t=({children:t,loading:n,style:r})=>(0,e.jsxs)(e.Fragment,{children:[n&&(0,e.jsx)(`div`,{className:`boxSpinner rounded`,"aria-hidden":`true`,style:r,children:(0,e.jsxs)(`div`,{className:`spinner`,children:[(0,e.jsx)(`div`,{className:`rect1`}),(0,e.jsx)(`div`,{className:`rect2`}),(0,e.jsx)(`div`,{className:`rect3`}),(0,e.jsx)(`div`,{className:`rect4`}),(0,e.jsx)(`div`,{className:`rect5`}),(0,e.jsx)(`div`,{className:`rect6`}),(0,e.jsx)(`div`,{className:`rect7`})]})}),!n&&t]});Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -1,6 +1,6 @@
1
1
  import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
2
  //#region src/components/loader/SpinnerLoader.tsx
3
- var r = ({ children: r, loading: i, style: a }) => /* @__PURE__ */ n(e, { children: [i === !0 && /* @__PURE__ */ t("div", {
3
+ var r = ({ children: r, loading: i, style: a }) => /* @__PURE__ */ n(e, { children: [i && /* @__PURE__ */ t("div", {
4
4
  className: "boxSpinner rounded",
5
5
  "aria-hidden": "true",
6
6
  style: a,
@@ -16,6 +16,6 @@ var r = ({ children: r, loading: i, style: a }) => /* @__PURE__ */ n(e, { childr
16
16
  /* @__PURE__ */ t("div", { className: "rect7" })
17
17
  ]
18
18
  })
19
- }), i === !1 && r] });
19
+ }), !i && r] });
20
20
  //#endregion
21
21
  export { r as t };
@@ -0,0 +1,96 @@
1
+ import { r as e, t } from "./Common-_PK8HLKN.js";
2
+ import { useRef as n, useState as r } from "react";
3
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ //#region src/components/form/UDragFile.tsx
5
+ var o = ({ label: o, name: s, cpnClass: c = "", required: l = !1, onChange: u, ext: d = ".xlsx, .xls, .docx, .doc, .pdf" }) => {
6
+ let f = n(null), [p, m] = r(null), [h, g] = r(!1), _ = async (n) => {
7
+ n.preventDefault();
8
+ let r = f.current?.querySelector(".default-file-input"), i = r?.files;
9
+ if (!i) return;
10
+ let a = /\.(pdf|docx|doc|xlsx|xls)$/i, o = r.getAttribute("accept"), s = t(o, a);
11
+ e(i, 10, s).then(() => {
12
+ m(i[0]), u(n);
13
+ }).catch((e) => {
14
+ console.error("[UDragFile] Tập tin không hợp lệ:", e.message);
15
+ });
16
+ }, v = async (e) => {
17
+ e.preventDefault(), e.stopPropagation(), e.type === "dragenter" || e.type === "dragover" ? g(!0) : e.type === "dragleave" && g(!1);
18
+ };
19
+ return /* @__PURE__ */ i("div", {
20
+ className: c,
21
+ children: /* @__PURE__ */ a("div", {
22
+ ref: f,
23
+ className: "upload-files-container mb-3",
24
+ children: [/* @__PURE__ */ a("label", {
25
+ className: "drag-file-area mb-2",
26
+ onDragEnter: v,
27
+ onDragOver: v,
28
+ onDragLeave: v,
29
+ onDrop: async (n) => {
30
+ n.preventDefault(), n.stopPropagation();
31
+ let r = n.dataTransfer.files;
32
+ if (!r) return;
33
+ let i = f.current?.querySelector(".default-file-input"), a = /\.(pdf|docx|doc|xlsx|xls)$/i, o = i?.getAttribute("accept"), c = t(o, a);
34
+ e(r, 10, c).then(() => {
35
+ m(r[0] ?? null), u({
36
+ target: {
37
+ type: "file",
38
+ name: s,
39
+ files: r,
40
+ value: ""
41
+ },
42
+ preventDefault: () => {}
43
+ }), g(!1);
44
+ }).catch((e) => {
45
+ console.error("[UDragFile] Tập tin không hợp lệ:", e.message), g(!1);
46
+ });
47
+ },
48
+ "aria-label": o,
49
+ htmlFor: "importFile1",
50
+ children: [
51
+ /* @__PURE__ */ i("span", {
52
+ className: "upload-icon",
53
+ children: /* @__PURE__ */ i("i", { className: "fas fa-upload" })
54
+ }),
55
+ /* @__PURE__ */ a("h3", {
56
+ className: "dynamic-message",
57
+ children: [h ? "Thả tập tin vào đây" : "Chọn tập tin (" + d + ")", " "]
58
+ }),
59
+ /* @__PURE__ */ i("span", {
60
+ className: "label",
61
+ children: h ? "" : "hoặc kéo thả"
62
+ }),
63
+ /* @__PURE__ */ i("span", {
64
+ className: "browse-files d-none",
65
+ children: /* @__PURE__ */ i("input", {
66
+ id: "importFile1",
67
+ onChange: _,
68
+ type: "file",
69
+ required: l,
70
+ name: s,
71
+ className: "default-file-input",
72
+ accept: d
73
+ })
74
+ })
75
+ ]
76
+ }), /* @__PURE__ */ i("div", {
77
+ className: "file-block",
78
+ children: p && /* @__PURE__ */ i("div", {
79
+ className: "inputClone",
80
+ children: /* @__PURE__ */ a("div", {
81
+ className: "file-info",
82
+ children: [/* @__PURE__ */ i("span", {
83
+ className: "file-name me-2",
84
+ children: p.name
85
+ }), /* @__PURE__ */ a("div", { children: ["|", /* @__PURE__ */ i("span", {
86
+ className: "ms-2 file-size",
87
+ children: (p.size / 1024).toFixed(1) + " KB"
88
+ })] })]
89
+ })
90
+ })
91
+ })]
92
+ })
93
+ });
94
+ };
95
+ //#endregion
96
+ export { o as t };
@@ -0,0 +1 @@
1
+ const e=require("./Common-DFahMuQE.cjs");let t=require("react"),n=require("react/jsx-runtime");var r=({label:r,name:i,cpnClass:a=``,required:o=!1,onChange:s,ext:c=`.xlsx, .xls, .docx, .doc, .pdf`})=>{let l=(0,t.useRef)(null),[u,d]=(0,t.useState)(null),[f,p]=(0,t.useState)(!1),m=async t=>{t.preventDefault();let n=l.current?.querySelector(`.default-file-input`),r=n?.files;if(!r)return;let i=/\.(pdf|docx|doc|xlsx|xls)$/i,a=n.getAttribute(`accept`),o=e.t(a,i);e.r(r,10,o).then(()=>{d(r[0]),s(t)}).catch(e=>{console.error(`[UDragFile] Tập tin không hợp lệ:`,e.message)})},h=async e=>{e.preventDefault(),e.stopPropagation(),e.type===`dragenter`||e.type===`dragover`?p(!0):e.type===`dragleave`&&p(!1)};return(0,n.jsx)(`div`,{className:a,children:(0,n.jsxs)(`div`,{ref:l,className:`upload-files-container mb-3`,children:[(0,n.jsxs)(`label`,{className:`drag-file-area mb-2`,onDragEnter:h,onDragOver:h,onDragLeave:h,onDrop:async t=>{t.preventDefault(),t.stopPropagation();let n=t.dataTransfer.files;if(!n)return;let r=l.current?.querySelector(`.default-file-input`),a=/\.(pdf|docx|doc|xlsx|xls)$/i,o=r?.getAttribute(`accept`),c=e.t(o,a);e.r(n,10,c).then(()=>{d(n[0]??null),s({target:{type:`file`,name:i,files:n,value:``},preventDefault:()=>{}}),p(!1)}).catch(e=>{console.error(`[UDragFile] Tập tin không hợp lệ:`,e.message),p(!1)})},"aria-label":r,htmlFor:`importFile1`,children:[(0,n.jsx)(`span`,{className:`upload-icon`,children:(0,n.jsx)(`i`,{className:`fas fa-upload`})}),(0,n.jsxs)(`h3`,{className:`dynamic-message`,children:[f?`Thả tập tin vào đây`:`Chọn tập tin (`+c+`)`,` `]}),(0,n.jsx)(`span`,{className:`label`,children:f?``:`hoặc kéo thả`}),(0,n.jsx)(`span`,{className:`browse-files d-none`,children:(0,n.jsx)(`input`,{id:`importFile1`,onChange:m,type:`file`,required:o,name:i,className:`default-file-input`,accept:c})})]}),(0,n.jsx)(`div`,{className:`file-block`,children:u&&(0,n.jsx)(`div`,{className:`inputClone`,children:(0,n.jsxs)(`div`,{className:`file-info`,children:[(0,n.jsx)(`span`,{className:`file-name me-2`,children:u.name}),(0,n.jsxs)(`div`,{children:[`|`,(0,n.jsx)(`span`,{className:`ms-2 file-size`,children:(u.size/1024).toFixed(1)+` KB`})]})]})})})]})})};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}});