@materialui-reactjs/admin 2.0.0 → 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.
- package/CHANGELOG.md +30 -0
- package/README.md +4 -1
- package/dist/Common-DFahMuQE.cjs +11 -0
- package/dist/{Common-1GAoFU4L.js → Common-_PK8HLKN.js} +22 -16
- package/dist/HeaderUpdate-Dirxjmxs.cjs +1 -0
- package/dist/{HeaderUpdate-UXncZcAD.js → HeaderUpdate-drlnuHI8.js} +24 -25
- package/dist/{UDragFile-BqGt1-gK.js → UDragFile-D8wOZ1Ut.js} +2 -2
- package/dist/UDragFile-Db0sK4M7.cjs +1 -0
- package/dist/{Validator-aKlMgoxl.js → Validator-D2zwZeov.js} +73 -50
- package/dist/Validator-DBxl8wtE.cjs +1 -0
- package/dist/ckeditor/ckeditor.d.ts +3 -0
- package/dist/ckeditor/plugins/elfinder.d.ts +11 -0
- package/dist/ckeditor/plugins/fullscreen.d.ts +15 -0
- package/dist/ckeditor/plugins/pdffinder.d.ts +18 -0
- package/dist/ckeditor/types.d.ts +37 -0
- package/dist/{common-DVWX6AUQ.js → common-CEZp8xpQ.js} +14 -3
- package/dist/common-ivDX6gGq.cjs +1 -0
- package/dist/components/echarts/index.cjs +1 -1
- package/dist/components/echarts/index.js +1 -1
- package/dist/components/form/AsxhUImages.d.ts +2 -1
- package/dist/components/form/BoxAddRow.d.ts +2 -1
- package/dist/components/form/CusForm.d.ts +19 -6
- package/dist/components/form/Editor.d.ts +2 -1
- package/dist/components/form/EfImage.d.ts +2 -1
- package/dist/components/form/EfImages.d.ts +2 -1
- package/dist/components/form/PImage.d.ts +2 -1
- package/dist/components/form/SelectAddRowBoxAdvanced.d.ts +13 -4
- package/dist/components/form/SelectBox.d.ts +20 -7
- package/dist/components/form/UDragFile.d.ts +2 -1
- package/dist/components/form/UFile.d.ts +2 -1
- package/dist/components/form/UFiles.d.ts +9 -2
- package/dist/components/form/UImages.d.ts +2 -1
- package/dist/components/form/index.cjs +1 -1
- package/dist/components/form/index.js +2 -2
- package/dist/components/meta/CardTable.d.ts +4 -2
- package/dist/components/meta/CardTable.types.d.ts +11 -5
- package/dist/components/meta/CusTooltip.d.ts +7 -1
- package/dist/components/meta/Head.d.ts +10 -1
- package/dist/components/meta/HeaderDetail.d.ts +2 -1
- package/dist/components/meta/ScrollTable.d.ts +7 -3
- package/dist/components/meta/SearchBox.d.ts +2 -1
- package/dist/components/meta/SortableItem.d.ts +11 -1
- package/dist/components/meta/index.cjs +1 -1
- package/dist/components/meta/index.js +2 -2
- package/dist/components/sidebar/index.cjs +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/single/List.d.ts +15 -4
- package/dist/components/single/Update.d.ts +2 -1
- package/dist/components/single/UpdateTableDetail.d.ts +2 -1
- package/dist/components/single/index.cjs +1 -1
- package/dist/components/single/index.js +1 -1
- package/dist/components/top-navbar/index.cjs +1 -1
- package/dist/components/top-navbar/index.js +28 -28
- package/dist/echarts-Bi3uwLbg.cjs +1 -0
- package/dist/{echarts-CRmndsxC.js → echarts-CTzMqeR5.js} +4 -4
- package/dist/form-heyswTRq.js +3897 -0
- package/dist/form-sgtop6li.cjs +49 -0
- package/dist/hook/common.d.ts +22 -0
- package/dist/hook/detail.cjs +1 -1
- package/dist/hook/detail.js +1 -1
- package/dist/hook/fields.cjs +1 -1
- package/dist/hook/fields.js +1 -1
- package/dist/hook/index.cjs +1 -1
- package/dist/hook/index.d.ts +4 -3
- package/dist/hook/index.js +10 -10
- package/dist/hook/update.cjs +1 -1
- package/dist/hook/update.d.ts +2 -2
- package/dist/hook/update.js +10 -7
- package/dist/index.cjs +1 -1
- package/dist/index.js +11 -11
- package/dist/meta-BANk9kHW.cjs +1 -0
- package/dist/meta-CheDAmMh.js +745 -0
- package/dist/sidebar-CfQAYWi-.cjs +1 -0
- package/dist/{sidebar-CVORMKBY.js → sidebar-CzRmfvhi.js} +3 -3
- package/dist/{single-CqD5cgNi.js → single-BsJ7TYJi.js} +240 -252
- package/dist/single-C2WPEjhk.cjs +1 -0
- package/dist/utils/Common.d.ts +100 -27
- package/dist/utils/Env.d.ts +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +49 -40
- package/package.json +1 -1
- package/dist/Common-BBYXssMH.cjs +0 -11
- package/dist/HeaderUpdate-DIwc8EAA.cjs +0 -1
- package/dist/UDragFile-oJ05zNLR.cjs +0 -1
- package/dist/Validator-BcydBvOg.cjs +0 -1
- package/dist/common-CHDJQ2Ca.cjs +0 -1
- package/dist/echarts-Dla22xas.cjs +0 -1
- package/dist/form-BNAbGCXe.js +0 -45955
- package/dist/form-DUL_O4IY.cjs +0 -65
- package/dist/meta-CXHXSPbq.cjs +0 -1
- package/dist/meta-Dhll5zt9.js +0 -764
- package/dist/sidebar-G5Ody16K.cjs +0 -1
- package/dist/single-CsUaxEjQ.cjs +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,36 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **BỎ bundle `ckeditor.js`, dùng source TypeScript trực tiếp (BREAKING).**
|
|
13
|
+
`src/ckeditor/ckeditor.js` — file webpack build sẵn (~1.37 MB) — đã bị xoá và
|
|
14
|
+
thay bằng source TS nằm ngay trong repo: `ckeditor.ts` + `plugins/{elfinder,
|
|
15
|
+
pdffinder,fullscreen}.ts` + `types.ts`. `Editor.tsx` import trực tiếp module
|
|
16
|
+
mới nên sửa plugin/toolbar giờ được typecheck và lint như phần còn lại của
|
|
17
|
+
`src/`, thay vì phải build lại rồi copy file.
|
|
18
|
+
|
|
19
|
+
Hệ quả mong muốn:
|
|
20
|
+
- CKEditor **không còn** bị đóng cứng ở version 47.3.0 — nay dùng version
|
|
21
|
+
của consumer (`ckeditor5` ^48.4.0), nên không còn trường hợp lệch version
|
|
22
|
+
giữa code JS và CSS.
|
|
23
|
+
- `ckeditor5` là optional peer dependency và `vite.config.ts` đánh dấu
|
|
24
|
+
external, nên CKEditor **không** bị đóng gói vào `dist/` (đã kiểm tra:
|
|
25
|
+
output chỉ còn `import ... from "ckeditor5"`, 0 dòng code CKEditor).
|
|
26
|
+
App của consumer chỉ có **một** bản CKEditor duy nhất.
|
|
27
|
+
- `import "ckeditor5/ckeditor5.css"` được giữ nguyên — CSS giờ lấy từ
|
|
28
|
+
package thay vì bị webpack nhúng vào bundle.
|
|
29
|
+
|
|
30
|
+
Không đổi hành vi runtime: toolbar, `defaultConfig`, và logic 3 plugin được
|
|
31
|
+
giữ nguyên so với bản build cũ. `src/types/ckeditor.d.ts` (ambient
|
|
32
|
+
`declare module` vì `.js` không có type) cũng bị xoá vì không còn cần.
|
|
33
|
+
|
|
34
|
+
Thay đổi phụ trong `Editor.tsx`: `config` không còn ép `as any` mà được
|
|
35
|
+
kiểu `M4DEditorConfig`, và `editor.plugins.get("WordCount")` chuyển sang
|
|
36
|
+
`editor.plugins.get(WordCount)` để `wordCountContainer` có đúng kiểu.
|
|
37
|
+
|
|
8
38
|
## [2.4.0] - 2026-09-27
|
|
9
39
|
|
|
10
40
|
Ba lỗi chặn publish, tìm ra bằng cách **pack thật rồi cài vào một project sạch**
|
package/README.md
CHANGED
|
@@ -511,7 +511,10 @@ Test sources live in `test/` and are kept out of the published package (`files`
|
|
|
511
511
|
Prettier config fails fast instead of accumulating as unreviewed diff noise.
|
|
512
512
|
|
|
513
513
|
`ckeditor5` is declared as an **optional** peer dependency: it is only needed if you use
|
|
514
|
-
the `Editor` component
|
|
514
|
+
the `Editor` component. The editor build (`src/ckeditor/`) is plain TypeScript that
|
|
515
|
+
imports from `ckeditor5`, so CKEditor is **never** bundled into this package — the
|
|
516
|
+
consumer installs it and their bundler tree-shakes it, so an app only ever ships a
|
|
517
|
+
single copy of CKEditor.
|
|
515
518
|
|
|
516
519
|
```bash
|
|
517
520
|
npm test # run once
|
|
@@ -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={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},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}});
|
|
@@ -43,7 +43,7 @@ var a = (e) => t()[e] ?? "", o = (e, t = !0) => {
|
|
|
43
43
|
t.append(e, JSON.stringify(n));
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
|
-
t.append(e, n);
|
|
46
|
+
n != null && typeof n != "function" && typeof n != "object" && t.append(e, String(n));
|
|
47
47
|
}
|
|
48
48
|
}), t;
|
|
49
49
|
}, c = class extends Error {
|
|
@@ -198,7 +198,15 @@ var S = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, C = (e, t) => {
|
|
|
198
198
|
} catch (e) {
|
|
199
199
|
r(e);
|
|
200
200
|
}
|
|
201
|
-
}), A = (e) =>
|
|
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) => {
|
|
202
210
|
try {
|
|
203
211
|
let n = typeof e == "string" ? document.querySelector(e) : e;
|
|
204
212
|
if (!n) throw Error("invalid_modalEl_btnEl");
|
|
@@ -218,39 +226,37 @@ var S = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, C = (e, t) => {
|
|
|
218
226
|
} catch (e) {
|
|
219
227
|
console.log(e), n(e);
|
|
220
228
|
}
|
|
221
|
-
}),
|
|
229
|
+
}), M = (e, t, n = !1, r = !1) => {
|
|
222
230
|
if (!e) throw Error("invalid_btnEl");
|
|
223
231
|
e.addEventListener("click", (i) => {
|
|
224
|
-
i.preventDefault(),
|
|
225
|
-
let { modalEl: i, md: a } = t;
|
|
232
|
+
i.preventDefault(), j(t).then(({ modalEl: t, md: i }) => {
|
|
226
233
|
k("#elfinderStatic").then((t) => {
|
|
227
234
|
n && n({
|
|
228
235
|
data: t,
|
|
229
236
|
btnEl: e,
|
|
230
|
-
md:
|
|
237
|
+
md: i
|
|
231
238
|
});
|
|
232
|
-
}),
|
|
239
|
+
}), t.addEventListener("hidden.bs.modal", () => {
|
|
233
240
|
r && r();
|
|
234
|
-
}),
|
|
241
|
+
}), i.show();
|
|
235
242
|
});
|
|
236
243
|
});
|
|
237
|
-
},
|
|
244
|
+
}, N = (e, t, n = !1, r = !1) => {
|
|
238
245
|
if (!e) throw Error("invalid_btnEl");
|
|
239
246
|
e.addEventListener("click", (i) => {
|
|
240
|
-
i.preventDefault(),
|
|
241
|
-
let { modalEl: i, md: o } = t;
|
|
247
|
+
i.preventDefault(), j(t).then(({ modalEl: t, md: i }) => {
|
|
242
248
|
k("#elfinderStatic", { url: a("API_URL") + "/elfinder/connectorFiles" }).then((t) => {
|
|
243
249
|
n && n({
|
|
244
250
|
data: t,
|
|
245
251
|
btnEl: e,
|
|
246
|
-
md:
|
|
252
|
+
md: i
|
|
247
253
|
});
|
|
248
|
-
}),
|
|
254
|
+
}), t.addEventListener("hidden.bs.modal", () => {
|
|
249
255
|
r && r();
|
|
250
|
-
}),
|
|
256
|
+
}), i.show();
|
|
251
257
|
});
|
|
252
258
|
});
|
|
253
|
-
},
|
|
259
|
+
}, P = (e = !1) => {
|
|
254
260
|
let t = [{
|
|
255
261
|
id: 1,
|
|
256
262
|
name: "Tiếng Việt"
|
|
@@ -258,4 +264,4 @@ var S = /\.(jpg|jpeg|png|jfif|doc|docx|xls|xlsx|pdf)$/i, C = (e, t) => {
|
|
|
258
264
|
return e === !1 ? t : t.find((t) => t.id === e)?.name || "";
|
|
259
265
|
};
|
|
260
266
|
//#endregion
|
|
261
|
-
export {
|
|
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
|
+
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 { a as e, n as t } from "./Common-
|
|
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,23 +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 =
|
|
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
|
-
|
|
27
|
+
f + 1,
|
|
28
28
|
" đến ",
|
|
29
|
-
|
|
30
|
-
" trong tổng số",
|
|
31
|
-
|
|
32
|
-
e.recordTotal
|
|
29
|
+
f + s.length,
|
|
30
|
+
" trong tổng số ",
|
|
31
|
+
u
|
|
33
32
|
] }),
|
|
34
33
|
/* @__PURE__ */ r("nav", { children: /* @__PURE__ */ i("ul", {
|
|
35
34
|
className: "pagination",
|
|
36
35
|
children: [
|
|
37
|
-
|
|
36
|
+
l > 2 && /* @__PURE__ */ r("li", {
|
|
38
37
|
className: "page-item",
|
|
39
38
|
children: /* @__PURE__ */ r(o, {
|
|
40
39
|
className: "first page-link",
|
|
@@ -45,48 +44,48 @@ var u = ({ data: e, onChange: t, onClickPage: a }) => {
|
|
|
45
44
|
children: /* @__PURE__ */ r("i", { className: "fal fa-fast-backward" })
|
|
46
45
|
})
|
|
47
46
|
}),
|
|
48
|
-
|
|
47
|
+
h && /* @__PURE__ */ r("li", {
|
|
49
48
|
className: "page-item",
|
|
50
49
|
children: /* @__PURE__ */ r(o, {
|
|
51
50
|
className: "prev page-link",
|
|
52
51
|
to: "#",
|
|
53
|
-
"data-page":
|
|
52
|
+
"data-page": p,
|
|
54
53
|
title: "Trang trước",
|
|
55
54
|
onClick: a,
|
|
56
55
|
children: /* @__PURE__ */ r("i", { className: "fal fa-angle-left" })
|
|
57
56
|
})
|
|
58
57
|
}),
|
|
59
|
-
|
|
60
|
-
let
|
|
61
|
-
for (let
|
|
62
|
-
return
|
|
63
|
-
})().map((
|
|
64
|
-
className: `page-item ${
|
|
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" : ""}`,
|
|
65
64
|
children: /* @__PURE__ */ r(o, {
|
|
66
65
|
className: "page-link",
|
|
67
66
|
to: "#",
|
|
68
|
-
"data-page":
|
|
69
|
-
onClick:
|
|
70
|
-
children:
|
|
67
|
+
"data-page": e,
|
|
68
|
+
onClick: l === e ? void 0 : a,
|
|
69
|
+
children: e
|
|
71
70
|
})
|
|
72
|
-
},
|
|
73
|
-
|
|
71
|
+
}, e)),
|
|
72
|
+
g && /* @__PURE__ */ r("li", {
|
|
74
73
|
className: "page-item",
|
|
75
74
|
children: /* @__PURE__ */ r(o, {
|
|
76
75
|
className: "next page-link",
|
|
77
76
|
to: "#",
|
|
78
|
-
"data-page":
|
|
77
|
+
"data-page": m,
|
|
79
78
|
title: "Trang tiếp theo",
|
|
80
79
|
onClick: a,
|
|
81
80
|
children: /* @__PURE__ */ r("i", { className: "fal fa-angle-right" })
|
|
82
81
|
})
|
|
83
82
|
}),
|
|
84
|
-
|
|
83
|
+
l < d - 1 && /* @__PURE__ */ r("li", {
|
|
85
84
|
className: "page-item",
|
|
86
85
|
children: /* @__PURE__ */ r(o, {
|
|
87
86
|
className: "first page-link",
|
|
88
87
|
to: "#",
|
|
89
|
-
"data-page":
|
|
88
|
+
"data-page": d,
|
|
90
89
|
title: "Trang cuối cùng",
|
|
91
90
|
onClick: a,
|
|
92
91
|
children: /* @__PURE__ */ r("i", { className: "fal fa-fast-forward" })
|
|
@@ -104,7 +103,7 @@ var u = ({ data: e, onChange: t, onClickPage: a }) => {
|
|
|
104
103
|
children: /* @__PURE__ */ i("select", {
|
|
105
104
|
className: "pageLen",
|
|
106
105
|
name: "pageLen",
|
|
107
|
-
defaultValue:
|
|
106
|
+
defaultValue: c,
|
|
108
107
|
onChange: t,
|
|
109
108
|
children: [
|
|
110
109
|
/* @__PURE__ */ r("option", {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as e, t } from "./Common-
|
|
1
|
+
import { r as e, t } from "./Common-_PK8HLKN.js";
|
|
2
2
|
import { useRef as n, useState as r } from "react";
|
|
3
3
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
4
|
//#region src/components/form/UDragFile.tsx
|
|
@@ -32,7 +32,7 @@ var o = ({ label: o, name: s, cpnClass: c = "", required: l = !1, onChange: u, e
|
|
|
32
32
|
if (!r) return;
|
|
33
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
34
|
e(r, 10, c).then(() => {
|
|
35
|
-
m(r[0]), u({
|
|
35
|
+
m(r[0] ?? null), u({
|
|
36
36
|
target: {
|
|
37
37
|
type: "file",
|
|
38
38
|
name: s,
|
|
@@ -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}});
|
|
@@ -1,13 +1,33 @@
|
|
|
1
|
+
//#region src/hook/common.ts
|
|
2
|
+
var e = (e, t, n) => ({
|
|
3
|
+
target: n === void 0 ? {
|
|
4
|
+
name: e,
|
|
5
|
+
value: t
|
|
6
|
+
} : {
|
|
7
|
+
name: e,
|
|
8
|
+
value: t,
|
|
9
|
+
type: n
|
|
10
|
+
},
|
|
11
|
+
preventDefault: () => {}
|
|
12
|
+
});
|
|
13
|
+
function t(e) {
|
|
14
|
+
if (!e) return;
|
|
15
|
+
let t = e.id;
|
|
16
|
+
if (t == null || t === "") return;
|
|
17
|
+
let n = Number(t);
|
|
18
|
+
return Number.isNaN(n) ? void 0 : n;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
1
21
|
//#region src/hook/update.ts
|
|
2
|
-
var
|
|
22
|
+
var n = (e) => {
|
|
3
23
|
e.preventDefault();
|
|
4
|
-
let { name:
|
|
5
|
-
if (
|
|
6
|
-
let
|
|
7
|
-
return { [
|
|
24
|
+
let { name: t, type: n, value: i } = r(e);
|
|
25
|
+
if (n === "file") {
|
|
26
|
+
let n = e.target.files;
|
|
27
|
+
return { [t]: n?.[0] ?? null };
|
|
8
28
|
}
|
|
9
|
-
return { [
|
|
10
|
-
},
|
|
29
|
+
return { [t]: i };
|
|
30
|
+
}, r = (e) => {
|
|
11
31
|
let { name: t, type: n, value: r } = e.target, i = t.split(/[{}]+/).filter(Boolean), a = i.shift();
|
|
12
32
|
if (!a || i.length === 0) return {
|
|
13
33
|
name: t,
|
|
@@ -15,27 +35,30 @@ var e = (e) => {
|
|
|
15
35
|
value: r
|
|
16
36
|
};
|
|
17
37
|
let o = {}, s = o;
|
|
18
|
-
for (let e = 0; e < i.length - 1; e++)
|
|
38
|
+
for (let e = 0; e < i.length - 1; e++) {
|
|
39
|
+
let t = {};
|
|
40
|
+
s[i[e]] = t, s = t;
|
|
41
|
+
}
|
|
19
42
|
return s[i[i.length - 1]] = r, {
|
|
20
43
|
name: a,
|
|
21
44
|
type: n,
|
|
22
45
|
value: o
|
|
23
46
|
};
|
|
24
|
-
},
|
|
25
|
-
let
|
|
47
|
+
}, i = (e) => typeof e == "object" && !!e && !Array.isArray(e) && !(e instanceof File) && !(e instanceof Blob), a = (e, t) => {
|
|
48
|
+
let n = { ...e };
|
|
26
49
|
return Object.keys(t).forEach((e) => {
|
|
27
|
-
let
|
|
28
|
-
i
|
|
29
|
-
}),
|
|
30
|
-
},
|
|
31
|
-
if (
|
|
50
|
+
let r = t[e], o = n[e];
|
|
51
|
+
i(r) && i(o) ? n[e] = a(o, r) : n[e] = r;
|
|
52
|
+
}), n;
|
|
53
|
+
}, o = null, s = () => {
|
|
54
|
+
if (o) return o;
|
|
32
55
|
let e = typeof window < "u" ? window.jQuery ?? window.$ : void 0;
|
|
33
56
|
if (typeof e != "function") throw Error("[@materialui-reactjs/admin] Validator cần jQuery. Hãy thêm \"jquery\" vào dependencies và nạp nó TRƯỚC khi dùng Validator.");
|
|
34
|
-
return
|
|
35
|
-
},
|
|
36
|
-
apply: (e, t, n) =>
|
|
37
|
-
get: (e, t) =>
|
|
38
|
-
}),
|
|
57
|
+
return o = e, o;
|
|
58
|
+
}, c = new Proxy((() => {}), {
|
|
59
|
+
apply: (e, t, n) => s()(...n),
|
|
60
|
+
get: (e, t) => s()[t]
|
|
61
|
+
}), l = class e {
|
|
39
62
|
options;
|
|
40
63
|
validators;
|
|
41
64
|
$element;
|
|
@@ -67,7 +90,7 @@ var e = (e) => {
|
|
|
67
90
|
},
|
|
68
91
|
match: function(t) {
|
|
69
92
|
let n = t.attr("data-match");
|
|
70
|
-
return n && t.val() !==
|
|
93
|
+
return n && t.val() !== c(n).val() && e.DEFAULTS.errors.match;
|
|
71
94
|
},
|
|
72
95
|
minlength: function(t) {
|
|
73
96
|
let n = Number(t.attr("data-minlength"));
|
|
@@ -95,21 +118,21 @@ var e = (e) => {
|
|
|
95
118
|
}
|
|
96
119
|
};
|
|
97
120
|
constructor(t, n = !1) {
|
|
98
|
-
this.options = n || e.DEFAULTS, this.validators =
|
|
99
|
-
this.clearErrors(
|
|
121
|
+
this.options = n || e.DEFAULTS, this.validators = c.extend({}, e.VALIDATORS), this.$element = c(t), this.$btn = this.$element.find("button[type=\"submit\"], input[type=\"submit\"], .submitAjax"), this.$inputs = this.$element.find(e.INPUT_SELECTOR).add(this.$element.find("[data-validate=\"true\"]")).not(this.$element.find("[data-validate=\"false\"]").each((e, t) => {
|
|
122
|
+
this.clearErrors(c(t));
|
|
100
123
|
}));
|
|
101
124
|
}
|
|
102
125
|
static getValue(e) {
|
|
103
|
-
return e.is("[type=\"checkbox\"]") ? !!e.prop("checked") : e.is("[type=\"radio\"]") ?
|
|
126
|
+
return e.is("[type=\"checkbox\"]") ? !!e.prop("checked") : e.is("[type=\"radio\"]") ? c(`[name="${e.attr("name")}"]:checked`).length > 0 : e.is("select[multiple]") ? (e.val() ?? []).length : e.val() ?? "";
|
|
104
127
|
}
|
|
105
128
|
update = () => {
|
|
106
129
|
let t = this;
|
|
107
130
|
return this.$inputs = this.$element.find(e.INPUT_SELECTOR).add(this.$element.find("[data-validate=\"true\"]")).not(this.$element.find("[data-validate=\"false\"]").each((e, n) => {
|
|
108
|
-
t.clearErrors(
|
|
131
|
+
t.clearErrors(c(n));
|
|
109
132
|
})), this.toggleSubmit(), this;
|
|
110
133
|
};
|
|
111
134
|
onInput = (e) => {
|
|
112
|
-
let t = this, n =
|
|
135
|
+
let t = this, n = c(e.target), r = e.type !== "focusout";
|
|
113
136
|
this.$inputs.is(n) && this.validateInput(n, r)?.done(function() {
|
|
114
137
|
t.toggleSubmit();
|
|
115
138
|
});
|
|
@@ -117,58 +140,58 @@ var e = (e) => {
|
|
|
117
140
|
validateInput = (e, t) => {
|
|
118
141
|
let n = e.data("bs.validator.errors");
|
|
119
142
|
e.is("[type=\"radio\"]") && (e = this.$element.find("input[name=\"" + e.attr("name") + "\"]"));
|
|
120
|
-
let r =
|
|
143
|
+
let r = c.Event("validate.bs.validator", { relatedTarget: e[0] });
|
|
121
144
|
if (this.$element.trigger(r), r.isDefaultPrevented()) return;
|
|
122
145
|
let i = this;
|
|
123
|
-
return this.runValidators(e).done(function(
|
|
124
|
-
e.data("bs.validator.errors",
|
|
146
|
+
return this.runValidators(e).done(function(a) {
|
|
147
|
+
e.data("bs.validator.errors", a), a.length ? t ? i.defer(e, i.showErrors) : i.showErrors(e) : i.clearErrors(e), (!n || a.toString() !== n.toString()) && (r = a.length ? c.Event("invalid.bs.validator", {
|
|
125
148
|
relatedTarget: e[0],
|
|
126
|
-
detail:
|
|
127
|
-
}) :
|
|
149
|
+
detail: a
|
|
150
|
+
}) : c.Event("valid.bs.validator", {
|
|
128
151
|
relatedTarget: e[0],
|
|
129
152
|
detail: n
|
|
130
|
-
}), i.$element.trigger(r)), i.toggleSubmit(), i.$element.trigger(
|
|
153
|
+
}), i.$element.trigger(r)), i.toggleSubmit(), i.$element.trigger(c.Event("validated.bs.validator", { relatedTarget: e[0] }));
|
|
131
154
|
});
|
|
132
155
|
};
|
|
133
156
|
runValidators = (t) => {
|
|
134
|
-
let n = [], r =
|
|
157
|
+
let n = [], r = c.Deferred(), i = t.data("bs.validator.deferred");
|
|
135
158
|
i && i.reject(), t.data("bs.validator.deferred", r);
|
|
136
|
-
function
|
|
159
|
+
function a(e) {
|
|
137
160
|
return t.attr("data-" + e + "-error");
|
|
138
161
|
}
|
|
139
|
-
function
|
|
162
|
+
function o() {
|
|
140
163
|
let e = t[0];
|
|
141
164
|
if (!(e instanceof HTMLInputElement) && !(e instanceof HTMLSelectElement) && !(e instanceof HTMLTextAreaElement)) return null;
|
|
142
165
|
let n = e.validity;
|
|
143
166
|
return n.typeMismatch ? t.attr("data-type-error") ?? null : n.patternMismatch ? t.attr("data-pattern-error") ?? null : n.stepMismatch ? t.attr("data-step-error") ?? null : n.rangeOverflow ? t.attr("data-max-error") ?? null : n.rangeUnderflow ? t.attr("data-min-error") ?? null : n.valueMissing ? t.attr("data-required-error") ?? null : null;
|
|
144
167
|
}
|
|
145
|
-
function
|
|
168
|
+
function s() {
|
|
146
169
|
return t.attr("data-error");
|
|
147
170
|
}
|
|
148
171
|
function l(e) {
|
|
149
|
-
return
|
|
172
|
+
return a(e) || o() || s();
|
|
150
173
|
}
|
|
151
|
-
return
|
|
174
|
+
return c.each(this.validators, c.proxy(function(r, i) {
|
|
152
175
|
let a;
|
|
153
176
|
(e.getValue(t) || t.attr("required")) && (t.attr("data-" + r) !== void 0 || r == "native") && (a = i.call(this, t)) && (a = l(r) || a, n.indexOf(a) === -1 && n.push(a));
|
|
154
177
|
}, this)), r.resolve(n), r.promise();
|
|
155
178
|
};
|
|
156
179
|
validate = () => {
|
|
157
180
|
let e = this;
|
|
158
|
-
return
|
|
181
|
+
return c.when(this.$inputs.map((t, n) => e.validateInput(c(n), !1))).then(function() {
|
|
159
182
|
e.toggleSubmit(), e.focusError();
|
|
160
183
|
}), this;
|
|
161
184
|
};
|
|
162
185
|
focusError = () => {
|
|
163
186
|
if (!this.options.focus) return;
|
|
164
187
|
let t = this.$element.find(".has-error:first :input");
|
|
165
|
-
t.length !== 0 && (
|
|
188
|
+
t.length !== 0 && (c("html, body").animate({ scrollTop: t.offset().top - e.FOCUS_OFFSET }, 250), t.focus());
|
|
166
189
|
};
|
|
167
190
|
showErrors = (e) => {
|
|
168
191
|
this.options.html;
|
|
169
192
|
let t = e.data("bs.validator.errors"), n = e.closest(".form-group"), r = n.find(".form-control-feedback");
|
|
170
|
-
t.length && (t =
|
|
171
|
-
let t =
|
|
193
|
+
t.length && (t = c("<ul/>").addClass("list-unstyled").append(c.map(t, (e) => {
|
|
194
|
+
let t = c("<li/>");
|
|
172
195
|
return this.options.html ? t.html(e) : t.text(e);
|
|
173
196
|
})), n.addClass("has-error has-danger"), n.find(".invalid-tooltip, .invalid-feedback").remove(), n.find(".select2,.form-control").removeClass("is-valid").addClass("is-invalid"), n.append(`<div class="invalid-feedback"><ul class="list-unstyled">${t.html()}<ul/></div>`), n.removeClass("has-success"), n.hasClass("has-feedback"), r.removeClass(this.options.feedback?.success), r.addClass(this.options.feedback?.error));
|
|
174
197
|
};
|
|
@@ -177,10 +200,10 @@ var e = (e) => {
|
|
|
177
200
|
t.removeClass("has-error has-danger has-success"), t.find(".invalid-tooltip, .invalid-feedback").remove(), t.find(".select2,.form-control").addClass("is-valid").removeClass("is-invalid"), t.addClass("has-success"), t.hasClass("has-feedback"), n.removeClass(this.options.feedback?.error), n.removeClass(this.options.feedback?.success), n.addClass(this.options.feedback?.success);
|
|
178
201
|
};
|
|
179
202
|
hasErrors = () => !!this.$inputs.filter(function() {
|
|
180
|
-
return !!(
|
|
203
|
+
return !!(c(this).data("bs.validator.errors") || []).length;
|
|
181
204
|
}).length;
|
|
182
205
|
isIncomplete = () => !!this.$inputs.filter("[required]").filter((t, n) => {
|
|
183
|
-
let r = e.getValue(
|
|
206
|
+
let r = e.getValue(c(n));
|
|
184
207
|
return !(typeof r == "string" ? r.trim() : r);
|
|
185
208
|
}).length;
|
|
186
209
|
onSubmit = (e) => {
|
|
@@ -194,21 +217,21 @@ var e = (e) => {
|
|
|
194
217
|
window.clearTimeout(e.data("bs.validator.timeout")), e.data("bs.validator.timeout", window.setTimeout(t, this.options.delay));
|
|
195
218
|
};
|
|
196
219
|
reset = () => (this.$element.find(".form-control-feedback").removeClass(this.options?.feedback.error).removeClass(this.options.feedback.success), this.$inputs.removeData(["bs.validator.errors", "bs.validator.deferred"]).each(() => {
|
|
197
|
-
let e =
|
|
220
|
+
let e = c(this), t = e.data("bs.validator.timeout");
|
|
198
221
|
window.clearTimeout(t), e.removeData("bs.validator.timeout");
|
|
199
222
|
}), this.$element.find(".invalid-tooltip, .invalid-feedback").each(() => {
|
|
200
|
-
let e =
|
|
223
|
+
let e = c(this), t = e.data("bs.validator.originalContent");
|
|
201
224
|
e.removeData("bs.validator.originalContent").html(t);
|
|
202
225
|
}), this.$btn.removeClass("disabled"), this.$element.find(".has-error, .has-danger, .has-success, .is-invalid, .is-valid").removeClass("has-error has-danger has-success is-invalid is-valid"), this);
|
|
203
226
|
destroy = () => (this.reset(), this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator"), this.$inputs.off(".bs.validator"), this.options = null, this.validators = null, this.$element = null, this.$btn = null, this.$inputs = null, this);
|
|
204
227
|
run = () => {
|
|
205
228
|
this.update(), this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator", this.onInput.bind(this)), this.$element.on("submit.bs.validator", this.onSubmit.bind(this)), this.$element.on("reset.bs.validator", this.reset.bind(this)), this.$element.find("[data-match]").each(function() {
|
|
206
|
-
let t =
|
|
207
|
-
n &&
|
|
229
|
+
let t = c(this), n = t.attr("data-match");
|
|
230
|
+
n && c(n).on("input.bs.validator", function() {
|
|
208
231
|
e.getValue(t) && t.trigger("input.bs.validator");
|
|
209
232
|
});
|
|
210
|
-
}), this.$inputs.filter((t, n) => e.getValue(
|
|
233
|
+
}), this.$inputs.filter((t, n) => e.getValue(c(n)) && !c(this).closest(".has-error").length).trigger("focusout"), this.$element.attr("novalidate", !0);
|
|
211
234
|
};
|
|
212
235
|
};
|
|
213
236
|
//#endregion
|
|
214
|
-
export {
|
|
237
|
+
export { e as a, r as i, a as n, t as o, n as r, l as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=(e,t,n)=>({target:n===void 0?{name:e,value:t}:{name:e,value:t,type:n},preventDefault:()=>{}});function t(e){if(!e)return;let t=e.id;if(t==null||t===``)return;let n=Number(t);return Number.isNaN(n)?void 0:n}var n=e=>{e.preventDefault();let{name:t,type:n,value:i}=r(e);if(n===`file`){let n=e.target.files;return{[t]:n?.[0]??null}}return{[t]:i}},r=e=>{let{name:t,type:n,value:r}=e.target,i=t.split(/[{}]+/).filter(Boolean),a=i.shift();if(!a||i.length===0)return{name:t,type:n,value:r};let o={},s=o;for(let e=0;e<i.length-1;e++){let t={};s[i[e]]=t,s=t}return s[i[i.length-1]]=r,{name:a,type:n,value:o}},i=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof File)&&!(e instanceof Blob),a=(e,t)=>{let n={...e};return Object.keys(t).forEach(e=>{let r=t[e],o=n[e];i(r)&&i(o)?n[e]=a(o,r):n[e]=r}),n},o=null,s=()=>{if(o)return o;let e=typeof window<`u`?window.jQuery??window.$:void 0;if(typeof e!=`function`)throw Error(`[@materialui-reactjs/admin] Validator cần jQuery. Hãy thêm "jquery" vào dependencies và nạp nó TRƯỚC khi dùng Validator.`);return o=e,o},c=new Proxy((()=>{}),{apply:(e,t,n)=>s()(...n),get:(e,t)=>s()[t]}),l=class e{options;validators;$element;$btn;$inputs;static VERSION=`0.11.9`;static INPUT_SELECTOR=`:input:not(.nvali,[type="hidden"], [type="submit"], [type="reset"], button)`;static FOCUS_OFFSET=20;static DEFAULTS={delay:500,html:!1,disable:!0,focus:!0,custom:{},errors:{match:`Does not match`,minlength:`Too short`,maxlength:`Too long`},feedback:{success:`glyphicon-ok`,error:`glyphicon-remove`}};static VALIDATORS={native:function(e){let t=e[0];if(t.checkValidity)return!t.checkValidity()&&!t.validity.valid&&(t.validationMessage||`error!`)},match:function(t){let n=t.attr(`data-match`);return n&&t.val()!==c(n).val()&&e.DEFAULTS.errors.match},minlength:function(t){let n=Number(t.attr(`data-minlength`));return String(t.val()??``).length<n&&e.DEFAULTS.errors.minlength},maxlength:function(t){let n=Number(t.attr(`data-maxlength`));return String(t.val()??``).length>n&&e.DEFAULTS.errors.maxlength},filesize:function(e){let t=Number(e.data(`filesize`)),n=e[0];return n?.files?.length?n.files[0].size>t*1024*1024:!1},accept:function(e){let t=e.attr(`data-accept`);if(!t)return!1;let n=e[0];if(!n?.files?.length)return!1;let r=n.files[0];return!new RegExp(t).test(r.name)},pattern:function(e){let t=e.attr(`data-pattern`);return t?!new RegExp(t).test(String(e.val()??``)):!1}};constructor(t,n=!1){this.options=n||e.DEFAULTS,this.validators=c.extend({},e.VALIDATORS),this.$element=c(t),this.$btn=this.$element.find(`button[type="submit"], input[type="submit"], .submitAjax`),this.$inputs=this.$element.find(e.INPUT_SELECTOR).add(this.$element.find(`[data-validate="true"]`)).not(this.$element.find(`[data-validate="false"]`).each((e,t)=>{this.clearErrors(c(t))}))}static getValue(e){return e.is(`[type="checkbox"]`)?!!e.prop(`checked`):e.is(`[type="radio"]`)?c(`[name="${e.attr(`name`)}"]:checked`).length>0:e.is(`select[multiple]`)?(e.val()??[]).length:e.val()??``}update=()=>{let t=this;return this.$inputs=this.$element.find(e.INPUT_SELECTOR).add(this.$element.find(`[data-validate="true"]`)).not(this.$element.find(`[data-validate="false"]`).each((e,n)=>{t.clearErrors(c(n))})),this.toggleSubmit(),this};onInput=e=>{let t=this,n=c(e.target),r=e.type!==`focusout`;this.$inputs.is(n)&&this.validateInput(n,r)?.done(function(){t.toggleSubmit()})};validateInput=(e,t)=>{let n=e.data(`bs.validator.errors`);e.is(`[type="radio"]`)&&(e=this.$element.find(`input[name="`+e.attr(`name`)+`"]`));let r=c.Event(`validate.bs.validator`,{relatedTarget:e[0]});if(this.$element.trigger(r),r.isDefaultPrevented())return;let i=this;return this.runValidators(e).done(function(a){e.data(`bs.validator.errors`,a),a.length?t?i.defer(e,i.showErrors):i.showErrors(e):i.clearErrors(e),(!n||a.toString()!==n.toString())&&(r=a.length?c.Event(`invalid.bs.validator`,{relatedTarget:e[0],detail:a}):c.Event(`valid.bs.validator`,{relatedTarget:e[0],detail:n}),i.$element.trigger(r)),i.toggleSubmit(),i.$element.trigger(c.Event(`validated.bs.validator`,{relatedTarget:e[0]}))})};runValidators=t=>{let n=[],r=c.Deferred(),i=t.data(`bs.validator.deferred`);i&&i.reject(),t.data(`bs.validator.deferred`,r);function a(e){return t.attr(`data-`+e+`-error`)}function o(){let e=t[0];if(!(e instanceof HTMLInputElement)&&!(e instanceof HTMLSelectElement)&&!(e instanceof HTMLTextAreaElement))return null;let n=e.validity;return n.typeMismatch?t.attr(`data-type-error`)??null:n.patternMismatch?t.attr(`data-pattern-error`)??null:n.stepMismatch?t.attr(`data-step-error`)??null:n.rangeOverflow?t.attr(`data-max-error`)??null:n.rangeUnderflow?t.attr(`data-min-error`)??null:n.valueMissing?t.attr(`data-required-error`)??null:null}function s(){return t.attr(`data-error`)}function l(e){return a(e)||o()||s()}return c.each(this.validators,c.proxy(function(r,i){let a;(e.getValue(t)||t.attr(`required`))&&(t.attr(`data-`+r)!==void 0||r==`native`)&&(a=i.call(this,t))&&(a=l(r)||a,n.indexOf(a)===-1&&n.push(a))},this)),r.resolve(n),r.promise()};validate=()=>{let e=this;return c.when(this.$inputs.map((t,n)=>e.validateInput(c(n),!1))).then(function(){e.toggleSubmit(),e.focusError()}),this};focusError=()=>{if(!this.options.focus)return;let t=this.$element.find(`.has-error:first :input`);t.length!==0&&(c(`html, body`).animate({scrollTop:t.offset().top-e.FOCUS_OFFSET},250),t.focus())};showErrors=e=>{this.options.html;let t=e.data(`bs.validator.errors`),n=e.closest(`.form-group`),r=n.find(`.form-control-feedback`);t.length&&(t=c(`<ul/>`).addClass(`list-unstyled`).append(c.map(t,e=>{let t=c(`<li/>`);return this.options.html?t.html(e):t.text(e)})),n.addClass(`has-error has-danger`),n.find(`.invalid-tooltip, .invalid-feedback`).remove(),n.find(`.select2,.form-control`).removeClass(`is-valid`).addClass(`is-invalid`),n.append(`<div class="invalid-feedback"><ul class="list-unstyled">${t.html()}<ul/></div>`),n.removeClass(`has-success`),n.hasClass(`has-feedback`),r.removeClass(this.options.feedback?.success),r.addClass(this.options.feedback?.error))};clearErrors=e=>{let t=e.closest(`.form-group`),n=t.find(`.form-control-feedback`);t.removeClass(`has-error has-danger has-success`),t.find(`.invalid-tooltip, .invalid-feedback`).remove(),t.find(`.select2,.form-control`).addClass(`is-valid`).removeClass(`is-invalid`),t.addClass(`has-success`),t.hasClass(`has-feedback`),n.removeClass(this.options.feedback?.error),n.removeClass(this.options.feedback?.success),n.addClass(this.options.feedback?.success)};hasErrors=()=>!!this.$inputs.filter(function(){return!!(c(this).data(`bs.validator.errors`)||[]).length}).length;isIncomplete=()=>!!this.$inputs.filter(`[required]`).filter((t,n)=>{let r=e.getValue(c(n));return!(typeof r==`string`?r.trim():r)}).length;onSubmit=e=>{this.validate(),(this.isIncomplete()||this.hasErrors())&&e.preventDefault()};toggleSubmit=()=>{this.options.disable};defer=(e,t)=>{if(t=t.bind(this,e),!this.options.delay)return t();window.clearTimeout(e.data(`bs.validator.timeout`)),e.data(`bs.validator.timeout`,window.setTimeout(t,this.options.delay))};reset=()=>(this.$element.find(`.form-control-feedback`).removeClass(this.options?.feedback.error).removeClass(this.options.feedback.success),this.$inputs.removeData([`bs.validator.errors`,`bs.validator.deferred`]).each(()=>{let e=c(this),t=e.data(`bs.validator.timeout`);window.clearTimeout(t),e.removeData(`bs.validator.timeout`)}),this.$element.find(`.invalid-tooltip, .invalid-feedback`).each(()=>{let e=c(this),t=e.data(`bs.validator.originalContent`);e.removeData(`bs.validator.originalContent`).html(t)}),this.$btn.removeClass(`disabled`),this.$element.find(`.has-error, .has-danger, .has-success, .is-invalid, .is-valid`).removeClass(`has-error has-danger has-success is-invalid is-valid`),this);destroy=()=>(this.reset(),this.$element.removeAttr(`novalidate`).removeData(`bs.validator`).off(`.bs.validator`),this.$inputs.off(`.bs.validator`),this.options=null,this.validators=null,this.$element=null,this.$btn=null,this.$inputs=null,this);run=()=>{this.update(),this.$element.on(`input.bs.validator change.bs.validator focusout.bs.validator`,this.onInput.bind(this)),this.$element.on(`submit.bs.validator`,this.onSubmit.bind(this)),this.$element.on(`reset.bs.validator`,this.reset.bind(this)),this.$element.find(`[data-match]`).each(function(){let t=c(this),n=t.attr(`data-match`);n&&c(n).on(`input.bs.validator`,function(){e.getValue(t)&&t.trigger(`input.bs.validator`)})}),this.$inputs.filter((t,n)=>e.getValue(c(n))&&!c(this).closest(`.has-error`).length).trigger(`focusout`),this.$element.attr(`novalidate`,!0)}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return l}});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Plugin } from 'ckeditor5';
|
|
2
|
+
/**
|
|
3
|
+
* Nút toolbar `elfinder` — mở file manager để chèn ảnh.
|
|
4
|
+
*
|
|
5
|
+
* Plugin KHÔNG tự quản lý UI: nó chỉ đăng ký button rồi gọi lại callback
|
|
6
|
+
* `config.elfinder` do `Editor.tsx` truyền vào. Nhờ vậy plugin không phụ
|
|
7
|
+
* thuộc vào jQuery/Bootstrap/elFinder — mọi thứ UI thuộc về component React.
|
|
8
|
+
*/
|
|
9
|
+
export default class ElFinder extends Plugin {
|
|
10
|
+
init(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Plugin } from 'ckeditor5';
|
|
2
|
+
/**
|
|
3
|
+
* Nút toolbar `fullscreen` — phóng editor phủ toàn màn hình.
|
|
4
|
+
*
|
|
5
|
+
* CKEditor 5 v48 đã có plugin Fullscreen chính thức, nhưng bản đó đòi hỏi
|
|
6
|
+
* `GeneralHtmlSupport` và đổi hành vi toolbar. Ở đây giữ bản custom để hành vi
|
|
7
|
+
* không đổi so với bản build cũ: chỉ đặt inline style `position: fixed` lên
|
|
8
|
+
* chính thẻ `.ck-editor` rồi khôi phục lại khi bấm lần nữa.
|
|
9
|
+
*/
|
|
10
|
+
export default class Fullscreen extends Plugin {
|
|
11
|
+
private isFullscreen;
|
|
12
|
+
private originalStyles;
|
|
13
|
+
init(): void;
|
|
14
|
+
toggle(): void;
|
|
15
|
+
}
|