vxe-table
Version:
A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.
1 lines • 6.38 kB
JavaScript
var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let hooks=_ui.VxeUI.hooks;hooks.add("tableKeyboardModule",{setupTable(k){let{props:_,reactData:y,internalData:D}=k,O=k.getRefMaps().refElem,{computeEditOpts:C,computeCheckboxOpts:a,computeMouseOpts:c,computeTreeOpts:s,computeRowOpts:F,computeColumnOpts:w,computeCellOpts:H,computeDefaultRowHeight:V,computeCurrentRowOpts:f,computeCurrentColumnOpts:p}=k.getComputeMaps();let g=(e,S)=>{var t=D.elemStore,l=(0,_util.getRefElem)(t["main-body-scroll"]),o=(0,_util.getRefElem)(t["left-body-scroll"]),t=(0,_util.getRefElem)(t["right-body-scroll"]),{column:r,cell:n}=S;if("checkbox"===r.type){let M=l;if(o&&"left"===r.fixed?M=o:t&&"right"===r.fixed&&(M=t),M){l=M.getBoundingClientRect();let t=O.value,i=e.clientX,a=e.clientY,c=M.querySelector(".vxe-table--checkbox-range"),s=n.parentElement,g=k.getCheckboxRecords(),d=[],h=1,m=e.clientY-l.y+M.scrollTop,v=e.clientX-l.x+M.scrollLeft,C=M.scrollTop,u=s.offsetHeight,w=s.getBoundingClientRect(),f=a-w.y,p=null,x=!1,R=1,b=(e,t)=>{k.dispatchEvent("checkbox-range-"+e,{records:()=>k.getCheckboxRecords(),reserves:()=>k.getCheckboxReserveRecords()},t)},I=e=>{var{clientX:t,clientY:l}=e,t=t-i,l=l-a+(M.scrollTop-C);let o=Math.abs(l),r=Math.abs(t),n=m,u=v;l<h?(n+=l)<h&&(n=h,o=m):o=Math.min(o,M.scrollHeight-m-h),t<h?(u+=t,r>v&&(u=h,r=v)):r=Math.min(r,M.clientWidth-v-h),c.style.height=o+"px",c.style.width=r+"px",c.style.left=u+"px",c.style.top=n+"px",c.style.display="block";t=((e,t,l,o,r)=>{var n=_.showOverflow,{fullAllDataRowIdData:u,isResizeCellHeight:i}=D,a=F.value,c=H.value,s=V.value,e=e.row;let g=0,d=[],h=0;var m=0<r,v=y.scrollYLoad,C=D.afterFullData;if(h=m?o+r:l.height-o+Math.abs(r),v){l=k.getVTRowIndex(e);if(!(i||c.height||a.height)&&n)d=m?C.slice(l,l+Math.ceil(h/s)):C.slice(l-Math.floor(h/s),l+1);else if(m)for(let e=l;e<C.length;e++){var w=C[e],f=u[k.getRowid(w)]||{};if(g+=f.resizeHeight||c.height||a.height||f.height||s,d.push(w),g>h)return d}else for(let e=l;0<=e;e--){var p=C[e],x=u[k.getRowid(p)]||{};if(g+=x.resizeHeight||c.height||a.height||x.height||s,d.push(p),g>h)return d}}else for(var R=m?"next":"previous";t&&g<h;){var b=k.getRowNode(t);b&&(d.push(b.item),g+=t.offsetHeight,t=t[R+"ElementSibling"])}return d})(S,s,w,f,l<h?-o:o);10<o&&t.length!==d.length&&(l=(0,_dom.hasControlKey)(e),d=t,l?t.forEach(e=>{k.handleBatchSelectRows([e],-1===g.indexOf(e))}):(k.setAllCheckboxRow(!1),k.handleCheckedCheckboxRow(t,!0,!1)),b("change",e))},T=()=>{clearTimeout(p),p=null},E=n=>{T(),p=setTimeout(()=>{var e,t,l,o,r;p&&({scrollLeft:e,scrollTop:t,clientHeight:l,scrollHeight:o}=M,r=Math.ceil(50*R/u),x?t+l<o?(k.scrollTo(e,t+r),E(n),I(n)):T():t?(k.scrollTo(e,t-r),E(n),I(n)):T())},50)};(0,_dom.addClass)(t,"drag--range"),document.onmousemove=e=>{e.preventDefault(),e.stopPropagation();var t=e.clientY,l=(0,_dom.getAbsolutePos)(M).boundingTop;t<l?(x=!1,R=l-t,p||E(e)):t>l+M.clientHeight?(x=!0,R=t-l-M.clientHeight,p||E(e)):p&&T(),I(e)},document.onmouseup=e=>{T(),(0,_dom.removeClass)(t,"drag--range"),c.removeAttribute("style"),document.onmousemove=null,document.onmouseup=null,b("end",e)},b("start",e)}}};let d=(e,t,l,o,r,n)=>{var{afterFullData:u,visibleColumn:i}=D;let a=Object.assign({},t);var t=k.getVTRowIndex(a.row),c=k.getVTColumnIndex(a.column);return e.preventDefault(),o&&0<t?(a.rowIndex=t-1,a.row=u[a.rowIndex]):n&&t<u.length-1?(a.rowIndex=t+1,a.row=u[a.rowIndex]):l&&c?(a.columnIndex=c-1,a.column=i[a.columnIndex]):r&&c<i.length-1&&(a.columnIndex=c+1,a.column=i[a.columnIndex]),k.scrollToRow(a.row,a.column).then(()=>{a.cell=k.getCellElement(a.row,a.column),k.handleSelected(a,e)}),a};return{moveTabSelected(e,t,l){var o=_.editConfig,{afterFullData:r,visibleColumn:n}=D,u=C.value,i=F.value,a=f.value,c=w.value,s=p.value;let g,d,h,m=Object.assign({},e);var e=k.getVTRowIndex(m.row),v=k.getVTColumnIndex(m.column),t=(l.preventDefault(),t?v<=0?0<e&&(d=e-1,g=r[d],h=n.length-1):h=v-1:v>=n.length-1?e<r.length-1&&(d=e+1,g=r[d],h=0):h=v+1,n[h]);t&&(g?(m.rowIndex=d,m.row=g):m.rowIndex=e,m.columnIndex=h,m.column=t,m.cell=k.getCellElement(m.row,m.column),i.isCurrent&&a.isFollowSelected&&k.triggerCurrentRowEvent(l,m),c.isCurrent&&s.isFollowSelected&&k.triggerCurrentColumnEvent(l,m),o?"click"!==u.trigger&&"dblclick"!==u.trigger||("row"===u.mode?k.handleEdit(m,l):k.scrollToRow(m.row,m.column).then(()=>{k.handleSelected(m,l)})):k.scrollToRow(m.row,m.column).then(()=>{k.handleSelected(m,l)}))},moveCurrentRow(e,t,l){var o=_.treeConfig;let r=y.currentRow;var n=D.afterFullData,u=s.value,u=u.children||u.childrenField;let i;if(r?o?({index:o,items:u}=_xeUtils.default.findTree(n,e=>e===r,{children:u}),e&&0<o?i=u[o-1]:t&&o<u.length-1&&(i=u[o+1])):(u=k.getVTRowIndex(r),e&&0<u?i=n[u-1]:t&&u<n.length-1&&(i=n[u+1])):i=n[0],i){l.preventDefault();let e={$table:k,row:i,rowIndex:k.getRowIndex(i),$rowIndex:k.getVMRowIndex(i)};k.scrollToRow(i).then(()=>k.triggerCurrentRowEvent(l,e))}},moveCurrentColumn(e,t,l){var o=y.currentColumn,r=D.visibleColumn;let n=null;if(o?(o=k.getVTColumnIndex(o),e&&0<o?n=r[o-1]:t&&o<r.length-1&&(n=r[o+1])):n=r[0],n){l.preventDefault();let e={$table:k,column:n,columnIndex:k.getColumnIndex(n),$columnIndex:k.getVMColumnIndex(n)};k.scrollToColumn(n).then(()=>k.triggerCurrentColumnEvent(l,e))}},moveArrowSelected(e,t,l,o,r,n){var{highlightCurrentRow:u,highlightCurrentColumn:i}=_,a=F.value,c=f.value,s=w.value,g=p.value,e=d(n,e,t,l,o,r);(a.isCurrent||u)&&(c.isFollowSelected?k.triggerCurrentRowEvent(n,e):(l||r)&&(a.isCurrent||u)&&k.moveCurrentRow(l,r,n)),(s.isCurrent||i)&&(g.isFollowSelected?k.triggerCurrentColumnEvent(n,e):(t||o)&&(s.isCurrent||i)&&k.moveCurrentColumn(t,o,n))},moveEnterSelected(e,t,l,o,r,n){var{highlightCurrentRow:u,highlightCurrentColumn:i}=_,a=F.value,c=f.value,s=w.value,g=p.value,e=d(n,e,t,l,o,r);(a.isCurrent||u)&&c.isFollowSelected&&k.triggerCurrentRowEvent(n,e),(s.isCurrent||i)&&g.isFollowSelected&&k.triggerCurrentColumnEvent(n,e)},moveSelected(e,t,l,o,r,n){d(n,e,t,l,o,r)},handleCellMousedownEvent:(e,t)=>{var{editConfig:l,checkboxConfig:o,mouseConfig:r}=_,n=a.value,u=c.value,i=C.value;if(r&&u.area&&k.triggerCellAreaModnEvent)return k.triggerCellAreaModnEvent(e,t);o&&n.range&&g(e,t),r&&u.selected&&(l&&"cell"!==i.mode||k.handleSelected(t,e))}}}});