vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
36 lines (35 loc) • 1.39 kB
JavaScript
import { ref as c, watch as f } from "vue";
import { Utils as V } from "@vuux/utils";
const A = (a, u) => {
const e = c(a.multiple ? a.modelValue : a.modelValue ? [a.modelValue] : []), t = c(!1), i = c(null), m = () => {
a.disabled || (t.value = !t.value);
}, v = (l) => {
if (a.multiple)
if (Array.isArray(a.modelValue)) {
const d = a.modelValue;
d.includes(l) ? e.value = d.filter((n) => n !== l) : e.value = [...d, l], u("update:modelValue", e.value), u("change", e.value);
} else
e.value = a.modelValue === void 0 ? [l] : [a.modelValue, l], u("update:modelValue", e.value);
else
e.value = [l], u("update:modelValue", e.value[0]), u("change", e.value[0]), t.value = !1;
}, o = (l) => Array.isArray(e.value) ? e.value.includes(l) : [e.value].includes(l), r = (l) => {
Array.isArray(e.value) ? (e.value.splice(l, 1), u("update:modelValue", e.value)) : (e.value = "", u("update:modelValue", e.value));
}, s = (l) => a.data?.find((n) => n[a.value] === l)?.[a.label] || "";
return f([() => a.modelValue, () => a.multiple], ([l, d]) => {
e.value = d ? l : l ? [l] : [];
}), V.useClickOutside(i, () => {
t.value = !1;
}), {
items: e,
isOpen: t,
selectEl: i,
handleOpen: m,
handleClick: v,
handleIsSelected: o,
handleRemoveItem: r,
handleGetValue: s
};
};
export {
A as useSelect
};