UNPKG

ll-package

Version:

2 lines (1 loc) 14.2 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const at=require("../../../@babel/runtime/helpers/esm/objectSpread2.js"),k=require("../../../@babel/runtime/helpers/esm/extends.js"),d=require("vue"),xe=require("./contextTypes.js"),f=require("./util.js"),C=require("./utils/treeUtil.js"),X=require("./NodeList.js"),ce=require("./utils/conductUtil.js"),nt=require("./DropIndicator.js"),lt=require("../_util/props-util/initDefaultProps.js"),dt=require("./props.js"),re=require("../vc-util/warning.js"),q=require("../_util/KeyCode.js"),ot=require("../_util/classNames.js"),st=require("../_util/pickAttrs.js"),ct=require("./useMaxLevel.js"),rt=10,ut=d.defineComponent({compatConfig:{MODE:3},name:"Tree",inheritAttrs:!1,props:lt.default(dt.treeProps(),{prefixCls:"vc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,expandAction:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:nt.default,allowDrop:()=>!0}),setup(n,Ce){let{attrs:ue,slots:z,expose:De}=Ce;const Ne=d.shallowRef(!1);let I={};const Y=d.shallowRef(),S=d.shallowRef([]),x=d.shallowRef([]),O=d.shallowRef([]),b=d.shallowRef([]),D=d.shallowRef([]),g=d.shallowRef([]),J={},u=d.reactive({draggingNodeKey:null,dragChildrenKeys:[],dropTargetKey:null,dropPosition:null,dropContainerKey:null,dropLevelOffset:null,dropTargetPos:null,dropAllowed:!0,dragOverNodeKey:null}),_=d.shallowRef([]);d.watch([()=>n.treeData,()=>n.children],()=>{_.value=n.treeData!==void 0?d.toRaw(n.treeData).slice():C.convertTreeToData(d.toRaw(n.children))},{immediate:!0,deep:!0});const K=d.shallowRef({}),B=d.shallowRef(!1),m=d.shallowRef(null),Q=d.shallowRef(!1),L=d.computed(()=>C.fillFieldNames(n.fieldNames)),Z=d.shallowRef();let W=null,w=null,j=null;const ee=d.computed(()=>({expandedKeysSet:R.value,selectedKeysSet:ie.value,loadedKeysSet:te.value,loadingKeysSet:ae.value,checkedKeysSet:ne.value,halfCheckedKeysSet:fe.value,dragOverNodeKey:u.dragOverNodeKey,dropPosition:u.dropPosition,keyEntities:K.value})),R=d.computed(()=>new Set(g.value)),ie=d.computed(()=>new Set(S.value)),te=d.computed(()=>new Set(b.value)),ae=d.computed(()=>new Set(D.value)),ne=d.computed(()=>new Set(x.value)),fe=d.computed(()=>new Set(O.value));d.watchEffect(()=>{if(_.value){const e=C.convertDataToEntities(_.value,{fieldNames:L.value});K.value=k.default({[X.MOTION_KEY]:X.MotionEntity},e.keyEntities)}});let A=!1;d.watch([()=>n.expandedKeys,()=>n.autoExpandParent,K],(e,t)=>{let[a,o]=e,[s,c]=t,l=g.value;if(n.expandedKeys!==void 0||A&&o!==c)l=n.autoExpandParent||!A&&n.defaultExpandParent?f.conductExpandParent(n.expandedKeys,K.value):n.expandedKeys;else if(!A&&n.defaultExpandAll){const i=k.default({},K.value);delete i[X.MOTION_KEY],l=Object.keys(i).map(v=>i[v].key)}else!A&&n.defaultExpandedKeys&&(l=n.autoExpandParent||n.defaultExpandParent?f.conductExpandParent(n.defaultExpandedKeys,K.value):n.defaultExpandedKeys);l&&(g.value=l),A=!0},{immediate:!0});const E=d.shallowRef([]);d.watchEffect(()=>{E.value=C.flattenTreeData(_.value,g.value,L.value)}),d.watchEffect(()=>{n.selectable&&(n.selectedKeys!==void 0?S.value=f.calcSelectedKeys(n.selectedKeys,n):!A&&n.defaultSelectedKeys&&(S.value=f.calcSelectedKeys(n.defaultSelectedKeys,n)))});const{maxLevel:le,levelEntities:de}=ct.default(K);d.watchEffect(()=>{if(n.checkable){let e;if(n.checkedKeys!==void 0?e=f.parseCheckedKeys(n.checkedKeys)||{}:!A&&n.defaultCheckedKeys?e=f.parseCheckedKeys(n.defaultCheckedKeys)||{}:_.value&&(e=f.parseCheckedKeys(n.checkedKeys)||{checkedKeys:x.value,halfCheckedKeys:O.value}),e){let{checkedKeys:t=[],halfCheckedKeys:a=[]}=e;n.checkStrictly||({checkedKeys:t,halfCheckedKeys:a}=ce.conductCheck(t,!0,K.value,le.value,de.value)),x.value=t,O.value=a}}}),d.watchEffect(()=>{n.loadedKeys&&(b.value=n.loadedKeys)});const H=()=>{k.default(u,{dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})},oe=e=>{Z.value.scrollTo(e)};d.watch(()=>n.activeKey,()=>{n.activeKey!==void 0&&(m.value=n.activeKey)},{immediate:!0}),d.watch(m,e=>{d.nextTick(()=>{e!==null&&oe({key:e})})},{immediate:!0,flush:"post"});const F=e=>{n.expandedKeys===void 0&&(g.value=e)},ve=()=>{u.draggingNodeKey!==null&&k.default(u,{draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),W=null,j=null},ye=(e,t)=>{const{onDragend:a}=n;u.dragOverNodeKey=null,ve(),a==null||a({event:e,node:t.eventData}),w=null},se=e=>{ye(e,null),window.removeEventListener("dragend",se)},pe=(e,t)=>{const{onDragstart:a}=n,{eventKey:o,eventData:s}=t;w=t,W={x:e.clientX,y:e.clientY};const c=f.arrDel(g.value,o);u.draggingNodeKey=o,u.dragChildrenKeys=f.getDragChildrenKeys(o,K.value),Y.value=Z.value.getIndentWidth(),F(c),window.addEventListener("dragend",se),a&&a({event:e,node:s})},Pe=(e,t)=>{const{onDragenter:a,onExpand:o,allowDrop:s,direction:c}=n,{pos:l,eventKey:i}=t;if(j!==i&&(j=i),!w){H();return}const{dropPosition:v,dropLevelOffset:r,dropTargetKey:y,dropContainerKey:h,dropTargetPos:N,dropAllowed:p,dragOverNodeKey:P}=f.calcDropPosition(e,w,t,Y.value,W,s,E.value,K.value,R.value,c);if(u.dragChildrenKeys.indexOf(y)!==-1||!p){H();return}if(I||(I={}),Object.keys(I).forEach(T=>{clearTimeout(I[T])}),w.eventKey!==t.eventKey&&(I[l]=window.setTimeout(()=>{if(u.draggingNodeKey===null)return;let T=g.value.slice();const G=K.value[t.eventKey];G&&(G.children||[]).length&&(T=f.arrAdd(g.value,t.eventKey)),F(T),o&&o(T,{node:t.eventData,expanded:!0,nativeEvent:e})},800)),w.eventKey===y&&r===0){H();return}k.default(u,{dragOverNodeKey:P,dropPosition:v,dropLevelOffset:r,dropTargetKey:y,dropContainerKey:h,dropTargetPos:N,dropAllowed:p}),a&&a({event:e,node:t.eventData,expandedKeys:g.value})},be=(e,t)=>{const{onDragover:a,allowDrop:o,direction:s}=n;if(!w)return;const{dropPosition:c,dropLevelOffset:l,dropTargetKey:i,dropContainerKey:v,dropAllowed:r,dropTargetPos:y,dragOverNodeKey:h}=f.calcDropPosition(e,w,t,Y.value,W,o,E.value,K.value,R.value,s);u.dragChildrenKeys.indexOf(i)!==-1||!r||(w.eventKey===i&&l===0?u.dropPosition===null&&u.dropLevelOffset===null&&u.dropTargetKey===null&&u.dropContainerKey===null&&u.dropTargetPos===null&&u.dropAllowed===!1&&u.dragOverNodeKey===null||H():c===u.dropPosition&&l===u.dropLevelOffset&&i===u.dropTargetKey&&v===u.dropContainerKey&&y===u.dropTargetPos&&r===u.dropAllowed&&h===u.dragOverNodeKey||k.default(u,{dropPosition:c,dropLevelOffset:l,dropTargetKey:i,dropContainerKey:v,dropTargetPos:y,dropAllowed:r,dragOverNodeKey:h}),a&&a({event:e,node:t.eventData}))},Te=(e,t)=>{j===t.eventKey&&!e.currentTarget.contains(e.relatedTarget)&&(H(),j=null);const{onDragleave:a}=n;a&&a({event:e,node:t.eventData})},Se=function(e,t){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;var o;const{dragChildrenKeys:s,dropPosition:c,dropTargetKey:l,dropTargetPos:i,dropAllowed:v}=u;if(!v)return;const{onDrop:r}=n;if(u.dragOverNodeKey=null,ve(),l===null)return;const y=k.default(k.default({},C.getTreeNodeProps(l,d.toRaw(ee.value))),{active:((o=$.value)===null||o===void 0?void 0:o.key)===l,data:K.value[l].node}),h=s.indexOf(l)!==-1;re.warning(!h,"Can not drop to dragNode's children node. Maybe this is a bug of ant-design-vue. Please report an issue.");const N=f.posToArr(i),p={event:e,node:C.convertNodePropsToEventData(y),dragNode:w?w.eventData:null,dragNodesKeys:[w.eventKey].concat(s),dropToGap:c!==0,dropPosition:c+Number(N[N.length-1])};a||r==null||r(p),w=null},he=(e,t)=>{const{expanded:a,key:o}=t,s=E.value.filter(l=>l.key===o)[0],c=C.convertNodePropsToEventData(k.default(k.default({},C.getTreeNodeProps(o,ee.value)),{data:s.data}));F(a?f.arrDel(g.value,o):f.arrAdd(g.value,o)),V(e,c)},Oe=(e,t)=>{const{onClick:a,expandAction:o}=n;o==="click"&&he(e,t),a&&a(e,t)},Ae=(e,t)=>{const{onDblclick:a,expandAction:o}=n;(o==="doubleclick"||o==="dblclick")&&he(e,t),a&&a(e,t)},Ke=(e,t)=>{let a=S.value;const{onSelect:o,multiple:s}=n,{selected:c}=t,l=t[L.value.key],i=!c;i?s?a=f.arrAdd(a,l):a=[l]:a=f.arrDel(a,l);const v=K.value,r=a.map(y=>{const h=v[y];return h?h.node:null}).filter(y=>y);n.selectedKeys===void 0&&(S.value=a),o&&o(a,{event:"select",selected:i,node:t,selectedNodes:r,nativeEvent:e})},ge=(e,t,a)=>{const{checkStrictly:o,onCheck:s}=n,c=t[L.value.key];let l;const i={event:"check",node:t,checked:a,nativeEvent:e},v=K.value;if(o){const r=a?f.arrAdd(x.value,c):f.arrDel(x.value,c),y=f.arrDel(O.value,c);l={checked:r,halfChecked:y},i.checkedNodes=r.map(h=>v[h]).filter(h=>h).map(h=>h.node),n.checkedKeys===void 0&&(x.value=r)}else{let{checkedKeys:r,halfCheckedKeys:y}=ce.conductCheck([...x.value,c],!0,v,le.value,de.value);if(!a){const h=new Set(r);h.delete(c),{checkedKeys:r,halfCheckedKeys:y}=ce.conductCheck(Array.from(h),{checked:!1,halfCheckedKeys:y},v,le.value,de.value)}l=r,i.checkedNodes=[],i.checkedNodesPositions=[],i.halfCheckedKeys=y,r.forEach(h=>{const N=v[h];if(!N)return;const{node:p,pos:P}=N;i.checkedNodes.push(p),i.checkedNodesPositions.push({node:p,pos:P})}),n.checkedKeys===void 0&&(x.value=r,O.value=y)}s&&s(l,i)},ke=e=>{const t=e[L.value.key],a=new Promise((o,s)=>{const{loadData:c,onLoad:l}=n;if(!c||te.value.has(t)||ae.value.has(t))return null;c(e).then(()=>{const v=f.arrAdd(b.value,t),r=f.arrDel(D.value,t);l&&l(v,{event:"load",node:e}),n.loadedKeys===void 0&&(b.value=v),D.value=r,o()}).catch(v=>{const r=f.arrDel(D.value,t);if(D.value=r,J[t]=(J[t]||0)+1,J[t]>=rt){re.warning(!1,"Retry for `loadData` many times but still failed. No more retry.");const y=f.arrAdd(b.value,t);n.loadedKeys===void 0&&(b.value=y),o()}s(v)}),D.value=f.arrAdd(D.value,t)});return a.catch(()=>{}),a},Le=(e,t)=>{const{onMouseenter:a}=n;a&&a({event:e,node:t})},Re=(e,t)=>{const{onMouseleave:a}=n;a&&a({event:e,node:t})},Me=(e,t)=>{const{onRightClick:a}=n;a&&(e.preventDefault(),a({event:e,node:t}))},qe=e=>{const{onFocus:t}=n;B.value=!0,t&&t(e)},Ie=e=>{const{onBlur:t}=n;B.value=!1,M(null),t&&t(e)},V=(e,t)=>{let a=g.value;const{onExpand:o,loadData:s}=n,{expanded:c}=t,l=t[L.value.key];if(Q.value)return;const i=a.indexOf(l),v=!c;if(re.warning(c&&i!==-1||!c&&i===-1,"Expand state not sync with index check"),v?a=f.arrAdd(a,l):a=f.arrDel(a,l),F(a),o&&o(a,{node:t,expanded:v,nativeEvent:e}),v&&s){const r=ke(t);r&&r.then(()=>{}).catch(y=>{const h=f.arrDel(g.value,l);F(h),Promise.reject(y)})}},_e=()=>{Q.value=!0},je=()=>{setTimeout(()=>{Q.value=!1})},M=e=>{const{onActiveChange:t}=n;m.value!==e&&(n.activeKey!==void 0&&(m.value=e),e!==null&&oe({key:e}),t&&t(e))},$=d.computed(()=>m.value===null?null:E.value.find(e=>{let{key:t}=e;return t===m.value})||null),we=e=>{let t=E.value.findIndex(o=>{let{key:s}=o;return s===m.value});t===-1&&e<0&&(t=E.value.length),t=(t+e+E.value.length)%E.value.length;const a=E.value[t];if(a){const{key:o}=a;M(o)}else M(null)},He=d.computed(()=>C.convertNodePropsToEventData(k.default(k.default({},C.getTreeNodeProps(m.value,ee.value)),{data:$.value.data,active:!0}))),me=e=>{const{onKeydown:t,checkable:a,selectable:o}=n;switch(e.which){case q.default.UP:{we(-1),e.preventDefault();break}case q.default.DOWN:{we(1),e.preventDefault();break}}const s=$.value;if(s&&s.data){const c=s.data.isLeaf===!1||!!(s.data.children||[]).length,l=He.value;switch(e.which){case q.default.LEFT:{c&&R.value.has(m.value)?V({},l):s.parent&&M(s.parent.key),e.preventDefault();break}case q.default.RIGHT:{c&&!R.value.has(m.value)?V({},l):s.children&&s.children.length&&M(s.children[0].key),e.preventDefault();break}case q.default.ENTER:case q.default.SPACE:{a&&!l.disabled&&l.checkable!==!1&&!l.disableCheckbox?ge({},l,!ne.value.has(m.value)):!a&&o&&!l.disabled&&l.selectable!==!1&&Ke({},l);break}}}t&&t(e)};return De({onNodeExpand:V,scrollTo:oe,onKeydown:me,selectedKeys:d.computed(()=>S.value),checkedKeys:d.computed(()=>x.value),halfCheckedKeys:d.computed(()=>O.value),loadedKeys:d.computed(()=>b.value),loadingKeys:d.computed(()=>D.value),expandedKeys:d.computed(()=>g.value)}),d.onUnmounted(()=>{window.removeEventListener("dragend",se),Ne.value=!0}),xe.useProvideKeysState({expandedKeys:g,selectedKeys:S,loadedKeys:b,loadingKeys:D,checkedKeys:x,halfCheckedKeys:O,expandedKeysSet:R,selectedKeysSet:ie,loadedKeysSet:te,loadingKeysSet:ae,checkedKeysSet:ne,halfCheckedKeysSet:fe,flattenNodes:E}),()=>{const{draggingNodeKey:e,dropLevelOffset:t,dropContainerKey:a,dropTargetKey:o,dropPosition:s,dragOverNodeKey:c}=u,{prefixCls:l,showLine:i,focusable:v,tabindex:r=0,selectable:y,showIcon:h,icon:N=z.icon,switcherIcon:p,draggable:P,checkable:T,checkStrictly:G,disabled:Ee,motion:Fe,loadData:Ve,filterTreeNode:Ue,height:Ye,itemHeight:Be,virtual:We,dropIndicatorRender:$e,onContextmenu:Ge,onScroll:Xe,direction:ze,rootClassName:Je,rootStyle:Qe}=n,{class:Ze,style:et}=ue,tt=st.default(k.default(k.default({},n),ue),{aria:!0,data:!0});let U;return P?typeof P=="object"?U=P:typeof P=="function"?U={nodeDraggable:P}:U={}:U=!1,d.createVNode(xe.TreeContext,{value:{prefixCls:l,selectable:y,showIcon:h,icon:N,switcherIcon:p,draggable:U,draggingNodeKey:e,checkable:T,customCheckable:z.checkable,checkStrictly:G,disabled:Ee,keyEntities:K.value,dropLevelOffset:t,dropContainerKey:a,dropTargetKey:o,dropPosition:s,dragOverNodeKey:c,dragging:e!==null,indent:Y.value,direction:ze,dropIndicatorRender:$e,loadData:Ve,filterTreeNode:Ue,onNodeClick:Oe,onNodeDoubleClick:Ae,onNodeExpand:V,onNodeSelect:Ke,onNodeCheck:ge,onNodeLoad:ke,onNodeMouseEnter:Le,onNodeMouseLeave:Re,onNodeContextMenu:Me,onNodeDragStart:pe,onNodeDragEnter:Pe,onNodeDragOver:be,onNodeDragLeave:Te,onNodeDragEnd:ye,onNodeDrop:Se,slots:z}},{default:()=>[d.createVNode("div",{role:"tree",class:ot.default(l,Ze,Je,{[`${l}-show-line`]:i,[`${l}-focused`]:B.value,[`${l}-active-focused`]:m.value!==null}),style:Qe},[d.createVNode(X.default,at.default({ref:Z,prefixCls:l,style:et,disabled:Ee,selectable:y,checkable:!!T,motion:Fe,height:Ye,itemHeight:Be,virtual:We,focusable:v,focused:B.value,tabindex:r,activeItem:$.value,onFocus:qe,onBlur:Ie,onKeydown:me,onActiveChange:M,onListChangeStart:_e,onListChangeEnd:je,onContextmenu:Ge,onScroll:Xe},tt),null)])]})}}});exports.default=ut;