ant-design-x-vue-next
Version:
Ant Design X for Vue — community continuation aligned with @ant-design/x
2 lines (1 loc) • 3.42 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),g=require("ant-design-vue"),u=require("../chunks/module-chunk.js");require("../x-provider/index.js");const C=require("./utils.js"),w=require("../x-provider/hooks/use-x-provider-context.js"),K=o.defineComponent({name:"AXFolderDirectoryTree",__name:"DirectoryTree",props:{treeData:null,directoryIcons:{type:Boolean},selectedKeys:{default:()=>[]},expandedKeys:null,onSelect:{type:Function},onExpand:{type:Function},showLine:{type:Boolean,default:!1},defaultExpandAll:{type:Boolean,default:!0},className:null,classNames:null,styles:null,style:null,directoryTitle:{type:Boolean},prefixCls:null,contextMenu:{type:Function},onRightClick:{type:Function}},emits:["select","expand","rightClick"],setup(M,{emit:T}){const e=M,a=T,{getPrefixCls:k}=w.default(),f=o.computed(()=>k("folder",e.prefixCls)),d=o.ref(!1),y=o.ref(void 0),p=o.ref(new Map),i=o.ref(!1),h=t=>typeof t=="function"?t():t||null,D=t=>{var l,c;if(e.directoryIcons===!1||e.directoryIcons==null)return null;if(C.isFolderNode(t)){const s=(l=e.directoryIcons)==null?void 0:l.directory;return h(s)||o.createVNode(u.FolderOutlined,null,null)}const n=t.path.toLowerCase().split(".").pop();if(n){const s=(c=e.directoryIcons)==null?void 0:c[n];if(s)return h(s)}return o.createVNode(u.FileOutlined,null,null)},N=(t,r=[])=>t.path==="/"&&r.length===0?["/"]:[...r,t.path].filter(n=>n!==""),x=(t,r,n=[])=>t.map(l=>{const c=N(l,n),s=c.join("/").replace(/^\/+/,"");return r.set(s,l),{...l,key:s,path:s,pathSegments:c,title:l.title,icon:D(l),isLeaf:!C.isFolderNode(l),children:l.children?x(l.children,r,c):void 0}}),m=o.ref([]);o.watch(()=>[e.treeData,e.directoryIcons],()=>{const t=new Map;m.value=x(e.treeData||[],t),p.value=t},{immediate:!0,deep:!0});const v=o.computed(()=>e.directoryTitle===!1||e.directoryTitle==null?null:typeof e.directoryTitle=="function"?e.directoryTitle():e.directoryTitle),_=t=>{var c;const r=String(t.node.key),n=p.value.get(r);i.value=!0;let l;(n==null?void 0:n.contextMenu)===!1?l=void 0:n!=null&&n.contextMenu?l=typeof n.contextMenu=="function"?n.contextMenu(r):n.contextMenu:e.contextMenu&&(l=typeof e.contextMenu=="function"?e.contextMenu(n||{},r):e.contextMenu),l&&l.length>0?(y.value=l,d.value=!0):i.value=!1,(c=e.onRightClick)==null||c.call(e,t),a("rightClick",t)},I=(t,r)=>{var l;if(i.value){i.value=!1;return}const n=t.map(String);(l=e.onSelect)==null||l.call(e,n,r),a("select",n,r)},F=t=>{var n;const r=t.map(String);(n=e.onExpand)==null||n.call(e,r),a("expand",r)},S=t=>{t&&!i.value||(d.value=t,t||(i.value=!1))};return()=>{var t,r;return o.createVNode(o.Fragment,null,[v.value?o.createVNode("div",{style:{...(t=e.styles)==null?void 0:t.directoryTitle,...e.style},class:u.classnames(`${f.value}-directory-tree-title`,e.className,(r=e.classNames)==null?void 0:r.directoryTitle)},[v.value]):null,o.createVNode(g.Dropdown,{menu:{items:y.value||[]},open:d.value,onOpenChange:S,trigger:["contextmenu"]},{default:()=>[o.createVNode("div",{style:{height:"100%"}},[o.createVNode(g.Tree.DirectoryTree,{treeData:m.value,selectedKeys:e.selectedKeys,expandedKeys:e.expandedKeys,onSelect:I,onExpand:F,onRightClick:_,multiple:!1,blockNode:!0,showIcon:e.directoryIcons!==!1,showLine:e.showLine,defaultExpandAll:e.defaultExpandAll,class:u.classnames(`${f.value}-directory-tree-content`)},null)])]})])}}});exports.default=K;