adverich-kun-ui
Version:
Una librería de componentes Vue.js con Tailwind CSS
160 lines (159 loc) • 5.04 kB
JavaScript
import { ref as d, computed as M, watch as H, nextTick as F } from "vue";
import { isArray as S, isObject as O, fullCopy as L } from "../../../../utils/utils.js";
function U(t, y, c, v) {
const l = d(null), b = d(null), x = d(null), i = d(!1), g = d(""), N = (e, n) => {
if (t.returnObject) return s(e, t.itemTitle);
const u = l.value.find((f) => f[t.itemValue] === e);
return s(u, t.itemTitle);
}, B = M(() => l.value !== null && l.value !== void 0 ? S(l.value) ? l.value.length ? s(l.value, t.itemTitle, "hasDefault") : t.placeholderText : O(l.value) ? s(l.value, t.itemTitle, "hasDefault") : l.value.toString() : v.value.length ? t.placeholderText : t.textNoItems), R = M(() => {
const e = t.itemText;
return typeof e == "string" && e.includes(",") ? e.split(",") : e;
});
function s(e, n, u) {
var f;
if (O(e)) {
if (n) {
if (S(n))
return n.map((r) => {
if (r.includes(".")) {
const o = r.split(".");
let a = e;
for (const h of o)
a = a != null ? a[h] : "";
return a ?? "No definido";
}
return e[r] ?? "No definido";
}).join(" - ");
if (n.includes(","))
return n.split(",").map((r) => e[r]).join(" - ");
if (n.includes(".")) {
const r = n.split(".");
let o = e;
for (const a of r)
o = o != null ? o[a] : "";
return o;
}
return !t.returnObject && typeof e[n] == "number" || e[n] !== void 0 && e[n] !== null ? e[n].toString() : "";
}
if (u)
return Object.values(e)[0];
}
return S(e) ? t.returnObject ? e.map((r) => r[n]).join(" - ") : e.map((r) => r).join(" - ") : u && typeof e != "number" ? e.includes(",") ? e.split(",") : e : ((f = e == null ? void 0 : e.toString) == null ? void 0 : f.call(e)) ?? "";
}
function C(e) {
try {
let n = null;
if (l.value = L(e), !t.multiple)
t.returnObject ? n = e : O(e) ? t.itemValue ? n = e[t.itemValue] : n = Object.values(e)[0] : n = e, i.value = !1, j();
else if (T(e)) {
e && I(e);
return;
} else {
const u = t.returnObject ? e : O(e) ? t.itemValue ? e[t.itemValue] : Object.values(e)[0] : e;
n = [...c.value || [], u];
}
c.value === n ? y("update:modelValue", n) : c.value = n, y("selectedItem", l.value);
} catch (n) {
console.log(n);
} finally {
F(() => {
A();
});
}
}
H(
[() => c.value, () => v.value],
([e]) => {
const n = D(e);
JSON.stringify(l.value) !== JSON.stringify(n) && (l.value = n);
},
{ immediate: !0 }
);
function D(e) {
return e == null ? null : t.multiple && Array.isArray(e) ? t.returnObject ? e : e.map((u) => v.value.find((f) => f[t.itemValue] === u)).filter(Boolean) : t.returnObject ? e : v.value.find(
(u) => typeof u == "object" ? u[t.itemValue] === e : u === e
) ?? e;
}
function T(e) {
if (!c.value || !e) return !1;
const n = t.returnObject ? e : e[t.itemValue];
return c.value.some((u) => u === n);
}
function I(e) {
const n = t.returnObject ? e : e[t.itemValue];
c.value = c.value.filter((u) => u !== n);
}
function A(e) {
t.clearSearchOnSelect && (g.value = ""), t.clearOnSelect && E(), t.focusOnSelect && j();
}
function k() {
i.value || (i.value = !0);
}
function J() {
i.value && (i.value = !1);
}
function V() {
i.value = !i.value;
}
function w(e) {
return e.length === 1 && e.match(/\w/);
}
function j() {
b.value.inputField.focus();
}
function K() {
i.value = !0, x.value && b.value.$el.focus();
}
function $(e) {
const n = e.key;
(w(n) || n === "Backspace") && (k(), j(), F(() => {
var f;
const u = (f = b.value) == null ? void 0 : f.inputField;
if (u) {
const r = u.selectionStart, o = u.selectionEnd, a = u.value, h = e.key.length === 1 ? e.key : "";
u.value = a.slice(0, r) + h + a.slice(o), u.selectionStart = u.selectionEnd = r + h.length, u.dispatchEvent(new Event("input", { bubbles: !0 }));
}
}));
}
function q() {
i.value = !1, y("createItem");
}
function z(e) {
let n = c.value.indexOf(e);
c.value.splice(n, 1);
}
function E() {
g.value !== "" && (g.value = ""), c.value !== null && (c.value = null), l.value !== null && (l.value = null);
}
function G(e) {
return !!e.disabled;
}
return {
selectedItem: l,
textFieldRef: b,
listRef: x,
menuModel: i,
search: g,
getArrayText: N,
placeholder: B,
textArr: R,
itemToString: s,
getSelectedItem: C,
checkIfValueExist: T,
removeFromArray: I,
lightReset: A,
openMenu: k,
closeMenu: J,
toggleMenu: V,
focusOnMenu: K,
onMenuKeydown: $,
createItem: q,
removeItem: z,
clearSelection: E,
checkDisabled: G,
isAlphanumeric: w
};
}
export {
U as useAutocomplete
};