vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
2 lines (1 loc) • 1.23 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("vue"),M=require("@vuux/utils"),x=(e,v,o)=>{const m=c.computed(()=>({"app-menu":!0,["is-"+e.mode]:!0,["is-"+e.theme]:!0,"is-shadow":e.shadow})),u=c.ref(e.selectedKey),t=c.ref([]),h=(n,i)=>{if(i&&!t.value.includes(n))t.value.push(n);else if(!i){const s=t.value.indexOf(n);s!==-1&&t.value.splice(s,1)}},y=n=>{u.value=n},d=n=>{if(e.mode==="horizontal")return;const i=(k,f)=>{for(const l of k){if(l[e.skey]===f)return[l[e.skey]];if(l.children){const r=i(l.children,f);if(r)return[l[e.skey],...r]}}return null},s=i(e.data,n);t.value=s||[]},a=()=>{t.value=[],u.value=""},K=n=>{o("change",n)},g=n=>{o("select",n)};return c.provide("menuContext",{props:e,openKeys:t,selectKeys:u,onOpenKeys:h,onSelectKey:y}),c.watch(()=>e.selectedKey,n=>{u.value=n,n?d(n):t.value=[]}),M.Utils.useClickOutside(v,()=>{e.mode=="horizontal"&&(t.value=[])}),c.onMounted(()=>{e.selectedKey&&d(e.selectedKey),e.trigger==="click"&&e.mode==="horizontal"&&document.addEventListener("click",a,!1)}),c.onBeforeUnmount(()=>{e.trigger==="click"&&e.mode==="horizontal"&&document.removeEventListener("click",a,!1)}),{classNames:m,onChange:K,onSelect:g}};exports.useMenu=x;