@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.
- package/CHANGELOG.md +322 -0
- package/LICENSE +21 -0
- package/README.md +587 -453
- package/dist/Common-DFahMuQE.cjs +11 -0
- package/dist/Common-_PK8HLKN.js +267 -0
- package/dist/Env-DoS-iQjs.cjs +1 -0
- package/dist/Env-SHztUA3s.js +16 -0
- package/dist/HeaderUpdate-Dirxjmxs.cjs +1 -0
- package/dist/{chunks/HeaderUpdate-DuS-gHNR.js → HeaderUpdate-drlnuHI8.js} +28 -25
- package/dist/SortableItem-C3KzO8Xh.cjs +1 -0
- package/dist/SpinnerLoader-BujLjvC3.cjs +1 -0
- package/dist/{chunks/SpinnerLoader-h8RDIarB.js → SpinnerLoader-CyhOQC6d.js} +2 -2
- package/dist/UDragFile-D8wOZ1Ut.js +96 -0
- package/dist/UDragFile-Db0sK4M7.cjs +1 -0
- package/dist/{chunks/Validator-CXYkI7vJ.js → Validator-D2zwZeov.js} +83 -52
- package/dist/Validator-DBxl8wtE.cjs +1 -0
- package/dist/assets/css/form.css +1 -1
- package/dist/assets/css/index.css +1 -1
- 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-CEZp8xpQ.js +30 -0
- package/dist/common-ivDX6gGq.cjs +1 -0
- package/dist/components/echarts/index.cjs +1 -0
- package/dist/components/echarts/index.js +1 -1
- package/dist/components/form/AdvancedMultiSelect.d.ts +6 -3
- package/dist/components/form/AsxhUImages.d.ts +2 -1
- package/dist/components/form/BoxAddRow.d.ts +13 -2
- package/dist/components/form/CheckTreeBox.d.ts +12 -3
- package/dist/components/form/CusForm.d.ts +19 -6
- package/dist/components/form/DateInput.d.ts +2 -1
- package/dist/components/form/Editor.d.ts +2 -1
- package/dist/components/form/EfFile.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/SelectAddRowBox.d.ts +9 -5
- 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 -0
- package/dist/components/form/index.js +2 -2
- package/dist/components/loader/SpinnerLoader.d.ts +5 -1
- package/dist/components/loader/index.cjs +1 -0
- package/dist/components/loader/index.js +1 -2
- package/dist/components/meta/CardTable.d.ts +11 -5
- package/dist/components/meta/CardTable.types.d.ts +57 -0
- package/dist/components/meta/CusTooltip.d.ts +8 -2
- package/dist/components/meta/Head.d.ts +10 -1
- package/dist/components/meta/HeaderDetail.d.ts +2 -1
- package/dist/components/meta/HeaderUpdate.d.ts +5 -1
- package/dist/components/meta/ModalForm.d.ts +41 -11
- package/dist/components/meta/Navtabs.d.ts +1 -1
- package/dist/components/meta/ScrollTable.d.ts +7 -3
- package/dist/components/meta/SearchBox.d.ts +8 -5
- package/dist/components/meta/SortableItem.d.ts +11 -1
- package/dist/components/meta/index.cjs +1 -0
- package/dist/components/meta/index.d.ts +1 -0
- package/dist/components/meta/index.js +3 -3
- package/dist/components/sidebar/Sidebar.types.d.ts +9 -7
- package/dist/components/sidebar/index.cjs +1 -0
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/single/Detail.d.ts +8 -3
- package/dist/components/single/Fields.d.ts +10 -4
- package/dist/components/single/Import.d.ts +8 -3
- package/dist/components/single/List.d.ts +33 -7
- package/dist/components/single/Update.d.ts +10 -4
- package/dist/components/single/UpdateDetail.d.ts +3 -2
- package/dist/components/single/UpdateTableDetail.d.ts +4 -3
- package/dist/components/single/index.cjs +1 -0
- package/dist/components/single/index.js +1 -1
- package/dist/components/top-navbar/index.cjs +1 -0
- package/dist/components/top-navbar/index.js +78 -2
- package/dist/echarts-Bi3uwLbg.cjs +1 -0
- package/dist/{chunks/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 +87 -0
- package/dist/hook/detail.cjs +1 -0
- package/dist/hook/detail.d.ts +9 -15
- package/dist/hook/detail.js +1 -11
- package/dist/hook/fields.cjs +1 -0
- package/dist/hook/fields.d.ts +6 -14
- package/dist/hook/fields.js +1 -11
- package/dist/hook/import.d.ts +6 -11
- package/dist/hook/index.cjs +1 -0
- package/dist/hook/index.d.ts +29 -20
- package/dist/hook/index.js +14 -11
- package/dist/hook/update.cjs +1 -0
- package/dist/hook/update.d.ts +11 -19
- package/dist/hook/update.js +12 -9
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +14 -11
- package/dist/meta-BANk9kHW.cjs +1 -0
- package/dist/meta-CheDAmMh.js +745 -0
- package/dist/rolldown-runtime-BocRIvOZ.cjs +1 -0
- package/dist/sidebar-CfQAYWi-.cjs +1 -0
- package/dist/{chunks/sidebar-Dj4Xr9du.js → sidebar-CzRmfvhi.js} +10 -13
- package/dist/{chunks/single-CRF61o_U.js → single-BsJ7TYJi.js} +364 -282
- package/dist/single-C2WPEjhk.cjs +1 -0
- package/dist/style.cjs +0 -0
- package/dist/style.d.ts +0 -0
- package/dist/style.js +0 -0
- package/dist/types/Menu.d.ts +25 -0
- package/dist/utils/Common.d.ts +224 -43
- package/dist/utils/CusRoute.d.ts +21 -1
- package/dist/utils/Env.d.ts +23 -2
- package/dist/utils/Group.d.ts +12 -1
- package/dist/utils/Validator.d.ts +34 -12
- package/dist/utils/index.cjs +11 -0
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +212 -171
- package/package.json +190 -163
- package/dist/chunks/Common-BURf0rBN.js +0 -222
- package/dist/chunks/Env-DRXhvUcb.js +0 -16
- package/dist/chunks/UDragFile-BnUR3riq.js +0 -92
- package/dist/chunks/form-CPkpL5eA.js +0 -45889
- package/dist/chunks/loader-BUiOnhOH.js +0 -1
- package/dist/chunks/meta-4qPWijBT.js +0 -758
- package/dist/chunks/top-navbar-Bob0gMUh.js +0 -78
- package/scripts/postinstall.cjs +0 -80
- /package/dist/{chunks/SortableItem-B4-Zsso3.js → SortableItem-B4-Zsso3.js} +0 -0
- /package/dist/{components/meta/Pdfviewer.d.ts → hook/import.cjs} +0 -0
|
@@ -1,33 +1,64 @@
|
|
|
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
|
-
},
|
|
11
|
-
let { name: t, type: n, value: r } = e.target, i = t.split(/[
|
|
29
|
+
return { [t]: i };
|
|
30
|
+
}, r = (e) => {
|
|
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,
|
|
14
34
|
type: n,
|
|
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
|
-
},
|
|
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;
|
|
55
|
+
let e = typeof window < "u" ? window.jQuery ?? window.$ : void 0;
|
|
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.");
|
|
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 {
|
|
31
62
|
options;
|
|
32
63
|
validators;
|
|
33
64
|
$element;
|
|
@@ -59,7 +90,7 @@ var e = (e) => {
|
|
|
59
90
|
},
|
|
60
91
|
match: function(t) {
|
|
61
92
|
let n = t.attr("data-match");
|
|
62
|
-
return n && t.val() !==
|
|
93
|
+
return n && t.val() !== c(n).val() && e.DEFAULTS.errors.match;
|
|
63
94
|
},
|
|
64
95
|
minlength: function(t) {
|
|
65
96
|
let n = Number(t.attr("data-minlength"));
|
|
@@ -87,44 +118,44 @@ var e = (e) => {
|
|
|
87
118
|
}
|
|
88
119
|
};
|
|
89
120
|
constructor(t, n = !1) {
|
|
90
|
-
this.options = n || e.DEFAULTS, this.validators =
|
|
91
|
-
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));
|
|
92
123
|
}));
|
|
93
124
|
}
|
|
94
125
|
static getValue(e) {
|
|
95
|
-
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() ?? "";
|
|
96
127
|
}
|
|
97
128
|
update = () => {
|
|
98
129
|
let t = this;
|
|
99
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) => {
|
|
100
|
-
t.clearErrors(
|
|
131
|
+
t.clearErrors(c(n));
|
|
101
132
|
})), this.toggleSubmit(), this;
|
|
102
133
|
};
|
|
103
134
|
onInput = (e) => {
|
|
104
|
-
let t = this, n =
|
|
105
|
-
this.$inputs.is(n) && this.validateInput(n,
|
|
135
|
+
let t = this, n = c(e.target), r = e.type !== "focusout";
|
|
136
|
+
this.$inputs.is(n) && this.validateInput(n, r)?.done(function() {
|
|
106
137
|
t.toggleSubmit();
|
|
107
138
|
});
|
|
108
139
|
};
|
|
109
140
|
validateInput = (e, t) => {
|
|
110
141
|
let n = e.data("bs.validator.errors");
|
|
111
142
|
e.is("[type=\"radio\"]") && (e = this.$element.find("input[name=\"" + e.attr("name") + "\"]"));
|
|
112
|
-
let
|
|
113
|
-
if (this.$element.trigger(
|
|
114
|
-
let
|
|
115
|
-
return this.runValidators(e).done(function(
|
|
116
|
-
e.data("bs.validator.errors",
|
|
143
|
+
let r = c.Event("validate.bs.validator", { relatedTarget: e[0] });
|
|
144
|
+
if (this.$element.trigger(r), r.isDefaultPrevented()) return;
|
|
145
|
+
let i = this;
|
|
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", {
|
|
117
148
|
relatedTarget: e[0],
|
|
118
|
-
detail:
|
|
119
|
-
}) :
|
|
149
|
+
detail: a
|
|
150
|
+
}) : c.Event("valid.bs.validator", {
|
|
120
151
|
relatedTarget: e[0],
|
|
121
152
|
detail: n
|
|
122
|
-
}),
|
|
153
|
+
}), i.$element.trigger(r)), i.toggleSubmit(), i.$element.trigger(c.Event("validated.bs.validator", { relatedTarget: e[0] }));
|
|
123
154
|
});
|
|
124
155
|
};
|
|
125
156
|
runValidators = (t) => {
|
|
126
|
-
let n = [],
|
|
127
|
-
|
|
157
|
+
let n = [], r = c.Deferred(), i = t.data("bs.validator.deferred");
|
|
158
|
+
i && i.reject(), t.data("bs.validator.deferred", r);
|
|
128
159
|
function a(e) {
|
|
129
160
|
return t.attr("data-" + e + "-error");
|
|
130
161
|
}
|
|
@@ -137,43 +168,43 @@ var e = (e) => {
|
|
|
137
168
|
function s() {
|
|
138
169
|
return t.attr("data-error");
|
|
139
170
|
}
|
|
140
|
-
function
|
|
171
|
+
function l(e) {
|
|
141
172
|
return a(e) || o() || s();
|
|
142
173
|
}
|
|
143
|
-
return
|
|
144
|
-
let a
|
|
145
|
-
(e.getValue(t) || t.attr("required")) && (t.attr("data-" + r) !== void 0 || r == "native") && (a = i.call(this, t)) && (a =
|
|
146
|
-
}, this)),
|
|
174
|
+
return c.each(this.validators, c.proxy(function(r, i) {
|
|
175
|
+
let a;
|
|
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));
|
|
177
|
+
}, this)), r.resolve(n), r.promise();
|
|
147
178
|
};
|
|
148
179
|
validate = () => {
|
|
149
180
|
let e = this;
|
|
150
|
-
return
|
|
181
|
+
return c.when(this.$inputs.map((t, n) => e.validateInput(c(n), !1))).then(function() {
|
|
151
182
|
e.toggleSubmit(), e.focusError();
|
|
152
183
|
}), this;
|
|
153
184
|
};
|
|
154
185
|
focusError = () => {
|
|
155
186
|
if (!this.options.focus) return;
|
|
156
187
|
let t = this.$element.find(".has-error:first :input");
|
|
157
|
-
t.length !== 0 && (
|
|
188
|
+
t.length !== 0 && (c("html, body").animate({ scrollTop: t.offset().top - e.FOCUS_OFFSET }, 250), t.focus());
|
|
158
189
|
};
|
|
159
190
|
showErrors = (e) => {
|
|
160
191
|
this.options.html;
|
|
161
|
-
let t = e.data("bs.validator.errors"), n = e.closest(".form-group"),
|
|
162
|
-
t.length && (t =
|
|
163
|
-
let t =
|
|
192
|
+
let t = e.data("bs.validator.errors"), n = e.closest(".form-group"), r = n.find(".form-control-feedback");
|
|
193
|
+
t.length && (t = c("<ul/>").addClass("list-unstyled").append(c.map(t, (e) => {
|
|
194
|
+
let t = c("<li/>");
|
|
164
195
|
return this.options.html ? t.html(e) : t.text(e);
|
|
165
|
-
})), 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"),
|
|
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));
|
|
166
197
|
};
|
|
167
198
|
clearErrors = (e) => {
|
|
168
199
|
let t = e.closest(".form-group"), n = t.find(".form-control-feedback");
|
|
169
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);
|
|
170
201
|
};
|
|
171
202
|
hasErrors = () => !!this.$inputs.filter(function() {
|
|
172
|
-
return !!(
|
|
203
|
+
return !!(c(this).data("bs.validator.errors") || []).length;
|
|
173
204
|
}).length;
|
|
174
205
|
isIncomplete = () => !!this.$inputs.filter("[required]").filter((t, n) => {
|
|
175
|
-
let
|
|
176
|
-
return !(typeof
|
|
206
|
+
let r = e.getValue(c(n));
|
|
207
|
+
return !(typeof r == "string" ? r.trim() : r);
|
|
177
208
|
}).length;
|
|
178
209
|
onSubmit = (e) => {
|
|
179
210
|
this.validate(), (this.isIncomplete() || this.hasErrors()) && e.preventDefault();
|
|
@@ -186,21 +217,21 @@ var e = (e) => {
|
|
|
186
217
|
window.clearTimeout(e.data("bs.validator.timeout")), e.data("bs.validator.timeout", window.setTimeout(t, this.options.delay));
|
|
187
218
|
};
|
|
188
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(() => {
|
|
189
|
-
let e =
|
|
220
|
+
let e = c(this), t = e.data("bs.validator.timeout");
|
|
190
221
|
window.clearTimeout(t), e.removeData("bs.validator.timeout");
|
|
191
222
|
}), this.$element.find(".invalid-tooltip, .invalid-feedback").each(() => {
|
|
192
|
-
let e =
|
|
223
|
+
let e = c(this), t = e.data("bs.validator.originalContent");
|
|
193
224
|
e.removeData("bs.validator.originalContent").html(t);
|
|
194
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);
|
|
195
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);
|
|
196
227
|
run = () => {
|
|
197
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() {
|
|
198
|
-
let t =
|
|
199
|
-
n &&
|
|
229
|
+
let t = c(this), n = t.attr("data-match");
|
|
230
|
+
n && c(n).on("input.bs.validator", function() {
|
|
200
231
|
e.getValue(t) && t.trigger("input.bs.validator");
|
|
201
232
|
});
|
|
202
|
-
}), 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);
|
|
203
234
|
};
|
|
204
235
|
};
|
|
205
236
|
//#endregion
|
|
206
|
-
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}});
|