@userfrosting/sprinkle-core
Version:
Core Sprinkle for UserFrosting
210 lines (209 loc) • 7.36 kB
JavaScript
import { i as e, r as t, t as n } from "./stores-DoFJy34U.js";
import { t as r } from "./interfaces-d11lley8.js";
import i from "axios";
import { computed as a, ref as o, toValue as s, watchEffect as c } from "vue";
import { between as l, email as u, integer as d, maxLength as f, minLength as p, not as m, numeric as h, oneOf as g, regex as _, required as v, url as y, withMessage as b } from "@regle/rules";
//#region app/assets/composables/useCsrf.ts
var x = () => {
let t = o(u()), n = o(d()), r = o(f(t.value)), a = o(f(n.value));
function s() {
i.defaults.headers.post[t.value] = r.value, i.defaults.headers.post[n.value] = a.value, i.defaults.headers.put[t.value] = r.value, i.defaults.headers.put[n.value] = a.value, i.defaults.headers.delete[t.value] = r.value, i.defaults.headers.delete[n.value] = a.value, i.defaults.headers.patch[t.value] = r.value, i.defaults.headers.patch[n.value] = a.value;
}
async function l() {
m((await i.get("/api/csrf")).headers);
}
function u() {
return e().get("csrf.name", "csrf") + "_name";
}
function d() {
return e().get("csrf.name", "csrf") + "_value";
}
function f(e) {
return document.querySelector("meta[name='" + e + "']")?.getAttribute("content") ?? "";
}
function p(e, t) {
let n = document.querySelector("meta[name='" + e + "']");
if (n) n.setAttribute("content", t);
else {
let n = document.createElement("meta");
n.setAttribute("name", e), n.setAttribute("content", t), document.head.appendChild(n);
}
}
function m(t) {
let n = e(), i = n.get("csrf.name", "csrf") + "-name", o = n.get("csrf.name", "csrf") + "-value";
i in t && (r.value = t[i]), o in t && (a.value = t[o]);
}
function h() {
return e().get("csrf.enabled", !0);
}
return c(() => {
h() && r.value !== "" && a.value !== "" && (p(t.value, r.value), p(n.value, a.value), s());
}), {
key_name: t,
key_value: n,
name: r,
token: a,
isEnabled: h,
updateFromHeaders: m,
fetchCsrfToken: l
};
}, S = (e, t = {}, n = {}, r = 10, l = 0) => {
let u = o(r), d = o(l), f = o(t), p = o(n), m = o({
count: 0,
count_filtered: 0,
rows: [],
listable: {},
sortable: [],
filterable: []
}), h = o(!1), g = o(null);
async function _() {
h.value = !0, i.get(s(e), { params: {
size: u.value,
page: d.value,
sorts: f.value,
filters: p.value
} }).then((e) => {
m.value.count = e.data.count, m.value.count_filtered = e.data.count_filtered, m.value.rows = e.data.rows, m.value.listable = e.data.listable ?? {}, m.value.sortable = e.data.sortable ?? [], m.value.filterable = e.data.filterable ?? [];
}).catch((e) => {
g.value = e.response.data;
}).finally(() => {
h.value = !1;
});
}
let v = a(() => u.value === "all" ? 0 : Math.max(Math.ceil((m.value.count_filtered ?? 0) / u.value) - 1, 0)), y = a(() => m.value.count ?? 0), b = a(() => u.value === "all" ? 1 : Math.min(d.value * u.value + 1, m.value.count ?? 0)), x = a(() => u.value === "all" ? m.value.count_filtered ?? 0 : Math.min((d.value + 1) * u.value, m.value.count_filtered ?? 0)), S = a(() => m.value.count_filtered ?? 0), C = a(() => m.value.rows ?? []);
function w() {
h.value = !0, i.get(s(e), {
params: {
size: u.value,
page: d.value,
sorts: f.value,
filters: p.value,
format: "csv"
},
responseType: "blob"
}).then((e) => {
let t = window.URL.createObjectURL(new Blob([e.data])), n = document.createElement("a");
n.href = t, n.setAttribute("download", "export.csv"), document.body.appendChild(n), n.click(), n.remove(), window.URL.revokeObjectURL(t);
}).catch((e) => {
g.value = e.response.data;
}).finally(() => {
h.value = !1;
});
}
function T(e) {
let t;
t = f.value[e] === "asc" ? "desc" : f.value[e] === "desc" ? null : "asc", f.value[e] = t;
}
return c(() => {
_();
}), {
dataUrl: e,
size: u,
page: d,
sorts: f,
filters: p,
data: m,
fetch: _,
loading: h,
error: g,
downloadCsv: w,
totalPages: v,
countFiltered: S,
count: y,
rows: C,
first: b,
last: x,
toggleSort: T
};
}, C = () => {
i.interceptors.response.use((e) => e, (e) => (e.response.status !== 401 && n().push({
title: e.response.data.title ?? e.response?.statusText,
description: e.response?.data?.description ?? e.message,
style: r.Danger
}), Promise.reject(e)));
};
//#endregion
//#region app/assets/composables/useRuleSchemaAdapter.ts
function w() {
function e(e) {
let t = {};
for (let n in e) if (Object.prototype.hasOwnProperty.call(e, n)) {
let i = e[n]?.validators || {}, a = {};
for (let e of Object.keys(i)) r(e, i, a);
t[n] = a;
}
return t;
}
function n(e) {
let { translate: n } = t();
if (!e.message) return "";
let r = { ...e };
return delete r.message, n(e.message, r);
}
function r(e, t, r) {
if (e === "required" && t.required) {
let e = n(t.required);
r.required = e === "" ? v : b(v, e);
}
if (e === "email" && t.email) {
let e = n(t.email);
r.email = b(u, e);
}
if (e === "length" && t.length) {
if (t.length.min !== void 0) {
let e = n(t.length);
r.minLength = e === "" ? p(t.length.min) : b(p(t.length.min), e);
}
if (t.length.max !== void 0) {
let e = n(t.length);
r.maxLength = e === "" ? f(t.length.max) : b(f(t.length.max), e);
}
}
if (e === "matches" && t.matches && console.warn("Validation rule \"matches\" not implemented yet"), e === "equals" && t.equals && console.warn("Validation rule \"equals\" not implemented yet"), e === "integer" && t.integer) {
let e = n(t.integer);
r.integer = e === "" ? d : b(d, e);
}
if (e === "member_of" && t.member_of) {
let e = n(t.member_of);
r.member_of = e === "" ? g(t.member_of.values) : b(g(t.member_of.values), e);
}
if (e === "no_leading_whitespace" && t.no_leading_whitespace) {
let e = n(t.no_leading_whitespace);
r.no_leading_whitespace = e === "" ? _(/^\S.*$/) : b(_(/^\S.*$/), e);
}
if (e === "no_trailing_whitespace" && t.no_trailing_whitespace) {
let e = n(t.no_trailing_whitespace);
r.no_trailing_whitespace = e === "" ? _(/^.*\S$/) : b(_(/^.*\S$/), e);
}
if (e === "not_equals" && t.not_equals && console.warn("Validation rule \"not_equals\" not implemented yet"), e === "not_matches" && t.not_matches && console.warn("Validation rule \"not_matches\" not implemented yet"), e === "not_member_of" && t.not_member_of) {
let e = n(t.not_member_of);
r.not_member_of = e === "" ? m(g(t.not_member_of.values)) : b(m(g(t.not_member_of.values)), e);
}
if (e === "numeric" && t.numeric) {
let e = n(t.numeric);
r.numeric = e === "" ? h : b(h, e);
}
if (e === "range" && t.range) {
let e = n(t.range);
r.range = e === "" ? l(t.range.min, t.range.max) : b(l(t.range.min, t.range.max), e);
}
if (e === "regex" && t.regex) {
let e = n(t.regex);
r.regex = e === "" ? _(new RegExp(t.regex.regex)) : b(_(new RegExp(t.regex.regex)), e);
}
if (e === "telephone" && t.telephone && console.warn("Validation rule \"telephone\" not implemented yet"), e === "uri" && t.uri) {
let e = n(t.uri);
r.uri = e === "" ? y : b(y, e);
}
if (e === "username" && t.username) {
let e = n(t.username);
r.username = e === "" ? _(/^([a-z0-9.\-_])+$/i) : b(_(/^([a-z0-9.\-_])+$/i), e);
}
}
return {
adapt: e,
translateMessage: n
};
}
//#endregion
export { x as i, C as n, S as r, w as t };