vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 6.22 kB
JavaScript
;const e=require("vue");require("../collapse-transition/index.cjs");require("../renderer/index.cjs");require("../resize-observer/index.cjs");const Y=require("@vexip-ui/config"),Z=require("@vexip-ui/hooks"),S=require("@vexip-ui/utils"),F=require("./symbol.cjs"),A=require("../resize-observer/resize-observer.cjs"),_=require("../collapse/collapse-transition.cjs"),N=require("../renderer/renderer.cjs"),ee=["draggable"],te=e.defineComponent({name:"TableRow",__name:"table-row",props:{row:{type:Object,default:()=>({})},index:{type:Number,default:null},isHead:{type:Boolean,default:!1},isFoot:{type:Boolean,default:!1},fixed:{type:String,default:null}},setup(l){const r=l,{state:o,getters:s,mutations:u}=e.inject(F.TABLE_STORE),n=e.inject(F.TABLE_ACTIONS),i=Y.useNameHelper("table"),{timer:v}=Z.useSetTimeout(),x=e.ref(!1),m=e.ref(!1),E=e.ref(),q=e.ref(),b=e.ref(),k=e.reactive({el:E,row:e.toRef(r,"row")}),d=e.computed(()=>r.row.key),a=e.computed(()=>r.isHead?"head":r.isFoot?"foot":void 0),P=e.computed(()=>{let t=null;return a.value||(typeof o.rowClass=="function"?t=o.rowClass(r.row.data,r.index):t=o.rowClass),[i.be("row"),{[i.bem("row","fixed")]:o.rowHeight&&o.rowHeight>0,[i.bem("row","hover")]:!a.value&&o.highlight&&d.value===o.hoveredRowKey,[i.bem("row","stripe")]:o.stripe&&r.index%2===1,[i.bem("row","checked")]:r.row.checked,[i.bem("row","dragging")]:x.value,[i.bem("row","drag-over")]:m.value},t]}),y=e.computed(()=>Math.max(...Object.values(r.row.cellHeights||{}),o.rowMinHeight)),z=e.computed(()=>{let t="";return a.value||(typeof o.rowStyle=="function"?t=o.rowStyle(r.row.data,r.index):t=o.rowStyle),[t,{height:o.rowHeight?`${o.rowHeight}px`:`${y.value}px`,minHeight:o.rowHeight?void 0:`${o.rowMinHeight}px`,border:"0"}]}),M=e.computed(()=>a.value?null:typeof o.rowAttrs=="function"?o.rowAttrs(r.row.data,r.index):o.rowAttrs),O=e.computed(()=>{if(r.isHead||r.isFoot)return;o.heightTrigger;const t=o.heightBITree&&!a.value&&r.index?o.heightBITree.sum(r.index):0;return{transform:t?`translate3d(0, ${t}px, 0)`:void 0}}),D=e.computed(()=>s.hasDragColumn&&!s.disableDragRows.has(d.value)),V=e.computed(()=>!a.value&&o.rowDraggable),R=e.computed(()=>!a.value&&(o.rowDraggable||D.value)),T=e.computed(()=>o.expandRenderer),C=e.computed(()=>r.isHead||r.isFoot||!s.expandColumn?!1:o.rightFixedColumns.length?r.fixed==="right":o.leftFixedColumns.length?r.fixed==="left":!!o.normalColumns.length&&!r.fixed);function c(){let t;r.row.expanded&&b.value?t=b.value.scrollHeight:t=0,t!==r.row.expandHeight&&(u.setRowProp(d.value,"expandHeight",t),H(!0))}function H(t=!1){if(o.heightBITree&&s.visibleKeys.has(d.value)&&(t||!r.fixed)){const g=r.row.height+r.row.expandHeight,h=o.heightBITree,w=h.get(r.index);g!==w&&(h.add(r.index,g-w),u.updateTotalHeight(),u.triggerHeightChange())}}function I(t){var h,w;const g=((w=(h=t.borderBoxSize)==null?void 0:h[0])==null?void 0:w.blockSize)??t.contentRect.height;u.setRowProp(d.value,"height",g),!a.value&&H()}e.watchEffect(()=>{r.isHead||r.isFoot||(u.setRowProp(d.value,"height",o.rowHeight||y.value),!a.value&&H(),e.nextTick(()=>{C.value&&c()}))}),e.onMounted(()=>{e.nextTick(()=>{u.setRowProp(d.value,"height",o.rowHeight||y.value),e.nextTick(()=>{C.value&&c()})})});function f(t){return{row:r.row.data,key:r.row.key,index:r.index,event:t}}function L(t){u.setHoveredRowKey(d.value),!a.value&&n&&n.emitRowEvent("Enter",f(t))}function K(t){u.setHoveredRowKey(null),!a.value&&n&&n.emitRowEvent("Leave",f(t))}function $(t){!a.value&&n&&n.emitRowEvent("Click",f(t))}function j(t){!a.value&&n&&n.emitRowEvent("Dblclick",f(t))}function G(t){!a.value&&n&&n.emitRowEvent("Contextmenu",f(t))}function p(){return R.value&&o.dragging}function J(t){!R.value&&!D.value||(x.value=!0,n.handleRowDragStart(k,t))}function Q(t){!p()||D.value&&!s.rowDragging||(clearTimeout(v.drag),t.stopPropagation(),t.preventDefault(),m.value=!0,n.handleRowDragOver(k,t))}function U(t){p()&&(clearTimeout(v.drag),t.stopPropagation(),t.preventDefault(),m.value=!1,n.handleRowDrop(k,t),e.nextTick(()=>u.handleDrag(d.value,!1)))}function W(t){p()&&(t.stopPropagation(),x.value=!0,n.handleRowDragEnd(t),e.nextTick(()=>u.handleDrag(d.value,!1)))}function X(t){p()&&(clearTimeout(v.drag),t.preventDefault(),v.drag=setTimeout(()=>{m.value=!1},100))}function B(){u.setRowProp(d.value,"expandAnimate",!1)}return(t,g)=>l.row.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"wrapper",ref:E,class:e.normalizeClass({[e.unref(i).be("group")]:!0,[e.unref(i).bem("group","checked")]:l.row.checked,[e.unref(i).bem("group","last")]:l.row.last}),role:"row",draggable:V.value||l.row.dragging,style:e.normalizeStyle(O.value),onMouseenter:L,onMouseleave:K,onClick:$,onDblclick:j,onContextmenu:G,onDragstart:e.withModifiers(J,["stop"]),onDragover:Q,onDrop:U,onDragend:W,onDragleave:X},[e.createVNode(e.unref(A),{"on-resize":I},{default:e.withCtx(()=>[e.createElementVNode("div",e.mergeProps(M.value,{ref_key:"rowEl",ref:q,class:P.value,style:z.value}),[e.renderSlot(t.$slots,"default")],16)]),_:3}),C.value?(e.openBlock(),e.createBlock(e.unref(_),{key:0,disabled:!l.row.expandAnimate,onEnter:c,onLeave:c,onAfterEnter:B,onAfterLeave:B},{default:e.withCtx(()=>[l.row.expanded?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"expandEl",ref:b,class:e.normalizeClass([e.unref(i).be("expanded"),l.fixed==="right"&&e.unref(i).bem("expanded","right")])},[e.createVNode(e.unref(A),{disabled:l.row.expandAnimate,"on-resize":c},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(e.unref(i).be("expanded-wrapper"))},[e.unref(S.isFunction)(e.unref(s).expandColumn.renderer)?(e.openBlock(),e.createBlock(e.unref(N),{key:0,renderer:e.unref(s).expandColumn.renderer,data:{leftFixed:0,rightFixed:0,row:l.row.data,rowIndex:l.index}},null,8,["renderer","data"])):e.unref(S.isFunction)(T.value)?(e.openBlock(),e.createBlock(e.unref(N),{key:1,renderer:T.value,data:{leftFixed:0,rightFixed:0,row:l.row.data,rowIndex:l.index}},null,8,["renderer","data"])):e.createCommentVNode("",!0)],2)]),_:1},8,["disabled"])],2)):e.createCommentVNode("",!0)]),_:1},8,["disabled"])):e.createCommentVNode("",!0)],46,ee))}});module.exports=te;
//# sourceMappingURL=table-row.vue2.cjs.map