@progress/kendo-vue-data-tools
Version:
9 lines (8 loc) • 6.99 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue"),y=require("../interfaces/SortSettings.js"),S=require("../drag/ColumnResizer.js"),R=require("../drag/ColumnDraggable.js"),M=require("./HeaderCell.js"),V=require("../columnmenu/ColumnMenu.js"),O=require("./HeaderSelectionCell.js"),c=require("@progress/kendo-vue-common"),g=require("@progress/kendo-svg-icons"),N=require("./HeaderThElement.js");function m(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Object]"&&!n.isVNode(t)}const F={none:"none",asc:"ascending",desc:"descending"},j={true:{asc:"desc",desc:"","":"asc"},false:{asc:"desc",desc:"asc","":"asc"}},w=n.defineComponent({name:"KendoHeaderRow",props:{grid:Object,cellRender:[String,Function,Object],groupable:[Boolean,Object],reorderable:Boolean,sortable:[Boolean,Object],sort:{type:Array},selectedField:String,filter:Object,filterable:Boolean,filterOperators:Object,onFilterChange:Function,filterRow:Object,columns:Array,columnsMap:Array,columnResize:Object,columnMenu:[Boolean,String,Function,Object],columnMenuAnimate:{type:[Boolean,Object],default:function(){return!0}},size:String,isRtl:Boolean,onSortChange:Function,onSelectionchange:Function,onPressHandler:Function,onDragHandler:Function,onReleaseHandler:Function},inject:{onNavFocus:{default:c.noop}},data(){return{columnMenuOpened:{}}},created(){this.serviceIndex=0,this.index=-1,this._element=null,this.cellClick=this.cellClick.bind(this)},methods:{pressHandler(t,l){this.$emit("pressHandler",t,l)},dragHandler(t,l){this.$emit("dragHandler",t,l)},releaseHandler(t){this.$emit("releaseHandler",t)},selectionChangeHandler(t){this.$emit("selectionchange",t)},cellClick(t,l){if(t.preventDefault(),!c.hasListener.call(this,"sortChange"))return;const{allowUnsort:a,mode:e}=y.normalize(this.$props.sortable||!1,l.sortable||!1),s=(this.$props.sort||[]).filter(p=>p.field===l.field)[0],i=j[a][s&&s.dir||""],h=e==="single"?[]:(this.$props.sort||[]).filter(p=>p.field!==l.field);i!==""&&l.field&&h.push({field:l.field,dir:i}),this.sortChangeHandler(h,{event:t,field:l.field})},sortChangeHandler(t,l){this.$emit("sortChange",t,l)},filterChangeHandler(t,l){this.$emit("filterChange",t,l)},cellClass(t,l,a){const e=l?" "+l:"";let s="k-header"+(a?" k-grid-header-sticky":"")+e;return this.$props.sort&&this.$props.sort.filter(i=>i.field===t).length>0&&(s+=" k-sorted"),s},cellKeyDown(t,l){t.defaultPrevented||(t.keyCode===c.Keys.enter&&this.cellClick(t,l),t.altKey&&t.keyCode===c.Keys.down&&l.field&&(t.preventDefault(),this.columnMenuOpened={[l.field]:!0}))},getTemplate(t){return c.templateRendering.call(this.$props.grid,t,c.getListeners.call(this.$props.grid))},columnMenuClose(){this.onNavFocus({}),this.columnMenuOpened={}}},computed:{element(){return this._element},theadClasses(){return{"k-table-thead":!0,"k-grid-header":!0}}},render(){this.serviceIndex=0,this.index=-1;const t=function(l){return l.map(function(a){const e=this.$props.columns[a],s=this.$props.sortable&&e.sortable,i=this.$props.sort?this.$props.sort.findIndex(r=>r.field===e.field):-1,h=i>=0&&this.$props.sort[i].dir||"none",o=function(r){if(!this.$props.sort)return null;const f=r>=0?this.$props.sort[r].dir:"";return r>=0&&[n.createVNode(c.Icon,{key:1,name:`sort-${f}-small`,icon:f==="asc"?g.sortAscSmallIcon:g.sortDescSmallIcon},null),this.$props.sort.length>1&&n.createVNode("span",{key:2,class:"k-sort-order"},[r+1])]}.call(this,i),d=e.columnMenu||e.columnMenu===!1?e.columnMenu:this.$props.columnMenu,C=(e.kFirst?"k-first ":"")+this.cellClass(e.field,e.headerClassName,e.locked)+(d?" k-filterable":""),b=!d||typeof d=="boolean"?!!d:this.getTemplate(d),$=e.left!==void 0?this.$props.isRtl?{left:e.right+"px",right:e.left+"px"}:{left:e.left+"px",right:e.right+"px"}:{},u=e.isAccessible?{ariaSort:F[h],role:"columnheader",ariaColumnIndex:e.ariaColumnIndex,ariaSelected:!1}:{role:"presentation"},k=e.declarationIndex>=0?++this.index:--this.serviceIndex;return n.createVNode(N.HeaderThElement,{ariaSort:u.ariaSort,role:u.role,ariaColumnIndex:u.ariaColumnIndex,ariaSelected:u.ariaSelected,key:k,colSpan:e.colSpan,rowSpan:e.rowSpan,class:C,style:$,columnId:e.id,navigatable:e.navigatable,onKeydown:r=>this.cellKeyDown(r,e)},{default:()=>[[e.children.length===0&&d&&n.createVNode(V.ColumnMenu,{key:0,column:{field:e.field,filter:e.filter},opened:this.columnMenuOpened[e.field],animate:this.$props.columnMenuAnimate,sortable:s,sort:this.$props.sort,onClose:this.columnMenuClose,onSortchange:this.sortChangeHandler,filter:this.$props.filter,filterable:this.$props.filterable&&e.filterable,filterOperators:this.$props.filterOperators,onFilterchange:this.filterChangeHandler,render:b},null),e.internalHeaderCell&&n.createVNode("span",{class:"k-cell-inner"},[n.createVNode(e.internalHeaderCell,{key:1,field:e.field,sortable:s,onHeadercellclick:r=>this.cellClick(r,e),onSelectionchange:this.selectionChangeHandler,selectionValue:e.headerSelectionValue,title:e.title,render:(e.headerCell||this.$props.cellRender)&&this.getTemplate(e.headerCell||this.$props.cellRender)},m(o)?o:{default:()=>[o]})])||this.$props.selectedField&&e.field===this.$props.selectedField&&n.createVNode("span",{class:"k-cell-inner"},[n.createVNode(O.HeaderSelectionCell,{key:1,field:e.field,sortable:s,onHeadercellclick:r=>this.cellClick(r,e),onSelectionchange:this.selectionChangeHandler,selectionValue:e.headerSelectionValue,title:e.title,render:(e.headerCell||this.$props.cellRender)&&this.getTemplate(e.headerCell||this.$props.cellRender)},m(o)?o:{default:()=>[o]})])||n.createVNode("span",{class:"k-cell-inner"},[n.createVNode(M.HeaderCell,{key:1,field:e.field,sortable:s,onHeadercellclick:r=>this.cellClick(r,e),selectionValue:e.headerSelectionValue,title:e.title,render:(e.headerCell||this.$props.cellRender)&&this.getTemplate(e.headerCell||this.$props.cellRender)},m(o)?o:{default:()=>[o]})]),this.$props.columnResize&&this.$props.columnResize.resizable&&e.resizable&&n.createVNode(S.ColumnResizer,{key:2,onResize:(r,f,H)=>this.$props.columnResize&&this.$props.columnResize.dragHandler(r,e,f,H)},null)]]})},this)};return n.createVNode("thead",{role:"presentation",class:this.theadClasses,"data-keyboardnavheader":!0},[this.$props.columnsMap.map(function(l,a){let e;return(this.$props.groupable||this.$props.reorderable)&&n.createVNode(R.ColumnDraggable,{key:a,onPressHandler:this.pressHandler,onDragHandler:this.dragHandler,onReleaseHandler:this.releaseHandler},m(e=t.call(this,l))?e:{default:()=>[e]})||n.createVNode("tr",{class:"k-table-row",role:"row"},[t.call(this,l)])},this),this.$props.filterRow])}});exports.HeaderRow=w;