vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
47 lines (46 loc) • 1.55 kB
JavaScript
import { inject as f, computed as i } from "vue";
import { Utils as h } from "@vuux/utils";
const k = (a, u) => {
const n = f("menuContext"), l = i(() => n?.props.skey), d = i(() => n?.props.trigger === "hover" && n?.props.mode !== "vertical" && !h.isMobile), v = i(() => n?.props.mode === "horizontal"), r = (e, t) => {
e.disabled || n?.onOpenKeys(e[l.value], t);
};
let o = null;
return {
menuContext: n,
onMouseenter: (e) => {
if (e.children?.length && d.value) {
o && (clearTimeout(o), o = null);
for (let t = 0; t < a.data.length; t++) {
const s = a.data[t];
n?.openKeys.value.includes(s[l.value]) && s !== e && n?.onOpenKeys(s[l.value], !1);
}
r(e, !0);
}
},
onMouseleave: (e) => {
!e.children?.length || !d.value || (o = window.setTimeout(() => r(e, !1), 100));
},
handleClick: (e, t) => {
if (t.stopPropagation(), !e.disabled) {
o && (clearTimeout(o), o = null);
for (let s = 0; s < a.data.length; s++) {
const c = a.data[s];
if (n?.openKeys.value.includes(c[l.value]) && c !== e) {
n?.onOpenKeys(c[l.value], !1);
break;
}
}
e.children?.length ? r(e, !n?.openKeys.value.includes(e[l.value])) : (n?.onSelectKey(e[l.value]), v.value && (n.openKeys.value = [])), u("select", e), u("change", e);
}
},
onSelect: (e) => {
u("select", e);
},
onChange: (e) => {
u("change", e);
}
};
};
export {
k as useItemMenu
};