@progress/kendo-vue-grid
Version:
9 lines (8 loc) • 8.68 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2026 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 r=require("vue"),E=require("../interfaces/GridSortSettings.js"),U=require("../drag/ColumnResizer.js"),W=require("../drag/ColumnDraggable.js"),J=require("./GridHeaderCell.js"),Q=require("../columnMenu/ColumnMenu.js"),u=require("@progress/kendo-vue-common"),X=require("@progress/kendo-vue-data-tools"),Y=require("../utils/main.js"),i=require("../messages/main.js"),Z=require("@progress/kendo-vue-intl"),A=require("@progress/kendo-svg-icons"),ee=require("../utils/virtualColumns.js");function S(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Object]"&&!r.isVNode(t)}const M={none:"none",asc:"ascending",desc:"descending"},te={true:{asc:"desc",desc:"","":"asc"},false:{asc:"desc",desc:"asc","":"asc"}},ne=r.defineComponent({name:"KendoHeaderRow",props:{grid:Object,cellRender:[String,Function,Object],cells:Object,groupable:[Boolean,Object],reorderable:Boolean,sortable:[Boolean,Object],sort:{type:Array},filter:Object,filterable:Boolean,filterOperators:Object,filterChange:Function,filterRow:Object,columns:Array,cellsToRender:Array,columnVirtualization:Boolean,columnsMap:Array,columnResize:Object,columnMenu:[Boolean,String,Function,Object],columnMenuAnimate:{type:[Boolean,Object],default:function(){return!0}},columnMenuIcon:Object,isRtl:Boolean,isColCountDefined:Boolean,headerSelectionValue:[Boolean,Array],columnsInitial:Array,onSortChange:Function,onFilterChange:Function,onSelectionchange:Function,onPressHandler:Function,onDragHandler:Function,onReleaseHandler:Function},inject:{onNavFocus:{default:u.noop},kendoLocalizationService:{default:null},gridContext:{default:null}},data(){return{columnMenuOpened:{}}},created(){this.serviceIndex=0,this.index=-1,this._element=null,this.cellClick=this.cellClick.bind(this)},methods:{pressHandler(t,n){this.$emit("pressHandler",t,n)},dragHandler(t,n){this.$emit("dragHandler",t,n)},releaseHandler(t){this.$emit("releaseHandler",t)},selectionChangeHandler(t){this.$emit("selectionchange",t)},cellClick(t,n){if(t.preventDefault(),!u.hasListener.call(this,"sortChange"))return;const{allowUnsort:o,mode:a}=E.normalize(this.$props.sortable||!1,n.sortable||!1),c=(this.$props.sort||[]).filter(s=>s.field===n.field)[0],p=te[o][c&&c.dir||""],h=a==="single"?[]:(this.$props.sort||[]).filter(s=>s.field!==n.field);p!==""&&n.field&&h.push({field:n.field,dir:p}),this.sortChangeHandler(h,{event:t,field:n.field})},sortChangeHandler(t,n){this.$emit("sortChange",t,n)},filterChangeHandler(t,n){this.$emit("filterChange",t,n)},cellClass(t,n,o){const a=n?" "+n:"";let c="k-header"+(o?" k-grid-header-sticky":"")+a;return this.$props.sort&&this.$props.sort.filter(p=>p.field===t).length>0&&(c+=" k-sorted"),c},cellKeyDown(t,n){t.defaultPrevented||(t.keyCode===u.Keys.enter&&this.cellClick(t,n),t.altKey&&t.keyCode===u.Keys.down&&n.field&&(t.preventDefault(),this.columnMenuOpened={[n.field]:!0}))},getTemplate(t){return u.templateRendering.call(this.$props.grid,t,u.getListeners.call(this.$props.grid))},columnMenuClose(){this.onNavFocus({}),this.columnMenuOpened={}},triggerContextMenu(t,n){var o,a;(a=(o=this.gridContext)==null?void 0:o.onContextMenu)==null||a.call(o,t,void 0,n.field)}},computed:{element(){return this._element},theadClasses(){return{"k-table-thead":!0}}},render(){const t=Z.provideLocalizationService(this),n=t.toLanguageString(i.sortableColumnAriaLabel,i.messages[i.sortableColumnAriaLabel]),o=t.toLanguageString(i.sortableColumnAscendingAriaLabel,i.messages[i.sortableColumnAscendingAriaLabel]),a=t.toLanguageString(i.sortableColumnDescendingAriaLabel,i.messages[i.sortableColumnDescendingAriaLabel]);this.serviceIndex=0,this.index=-1;const c=this.$props.columnVirtualization,p=function(h,s){const d=ee.getVirtualHeaderCellsToRender({cellsToRender:this.$props.cellsToRender||[],columns:this.$props.columns,rowIndex:s,enableVirtualization:c,columnsMap:this.$props.columnsMap}),V=c;let k=V&&d.columnsToRender?d.columnsToRender:h;const z=V?d.colSpans:[];return!k||k.length===0?[]:k.map(function(D,v){var I,L,x;const e=this.$props.columns[D],C=this.$props.sortable&&e.sortable,R=this.$props.sort?this.$props.sort.findIndex(l=>l.field===e.field):-1,H=R>=0&&this.$props.sort[R].dir||"none",m=function(l){if(!this.$props.sort)return null;const $=l>=0?this.$props.sort[l].dir:"";return l>=0&&[r.createVNode("span",{key:1,class:"k-sort-icon"},[r.createVNode(u.Icon,{name:"sort-"+$+"-small",icon:$==="asc"?A.sortAscSmallIcon:A.sortDescSmallIcon},null)]),this.$props.sort.length>1&&r.createVNode("span",{key:2,class:"k-sort-icon"},[r.createVNode("span",{class:"k-sort-order"},[l+1])])]}.call(this,R),f=e.columnMenu||e.columnMenu===!1?e.columnMenu:this.$props.columnMenu,N=e.menuIcon||this.$props.columnMenuIcon,j=(e.kFirst?"k-first ":"")+this.cellClass(e.field,e.headerClassName,e.locked)+(f?" k-filterable":""),w=!f||typeof f=="boolean"?!!f:this.getTemplate(f),T=d.skipOffset?{borderLeftWidth:"1px"}:void 0,F=e.locked&&(e.left!==void 0||e.right!==void 0)?this.$props.isRtl?{left:e.right+"px",right:e.left+"px"}:{left:e.left+"px",right:e.right+"px"}:T,q=M[H]==="none"?n:M[H]==="ascending"?o:a;let g=e.isAccessible?{ariaSort:M[H],ariaLabel:q,role:"columnheader",ariaColumnIndex:this.$props.isColCountDefined?this.$props.columnsInitial.findIndex(l=>l.field===e.field)+1:void 0,ariaSelected:!1,ariaHaspopup:f?"menu":this.$props.filterable&&e.filterable?"dialog":void 0}:{role:"columnheader"};const B=e.declarationIndex>=0?++this.index:--this.serviceIndex,K=e.columnMenuOpened!==void 0?e.columnMenuOpened:this.columnMenuOpened[e.field],P=(I=z[v])!=null?I:e.headerColSpan,y=Y.resolveCells(this.$props.cells,e.cells),O={ariaSort:C?g.ariaSort:void 0,ariaLabel:C?g.ariaLabel:void 0,role:g.role,ariaColumnIndex:g.ariaColumnIndex,ariaSelected:g.ariaSelected,ariaHaspopup:g.ariaHaspopup,key:B,colSpan:P,rowSpan:e.rowSpan,class:j,style:F,columnId:e.id,navigatable:e.navigatable,onKeydown:l=>this.cellKeyDown(l,e),onContextmenu:l=>this.triggerContextMenu(l,e)},b=[e.children.length===0&&f&&r.createVNode(Q.ColumnMenu,{key:0,column:{field:e.field,filter:e.filter},opened:K,animate:this.$props.columnMenuAnimate,sortable:C,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:w,columnMenuIcon:N},null),e.defaultHeaderCell&&r.createVNode("span",{class:"k-cell-inner"},[r.createVNode(e.defaultHeaderCell,{key:1,field:e.field,sortable:C,onHeadercellclick:l=>this.cellClick(l,e),onSelectionchange:this.selectionChangeHandler,selectionValue:(L=e.headerSelectionValue)!=null?L:this.$props.headerSelectionValue,title:e.title,render:(e.headerCell||this.$props.cellRender)&&this.getTemplate(e.headerCell||this.$props.cellRender)},S(m)?m:{default:()=>[m]})])||r.createVNode("span",{class:"k-cell-inner"},[r.createVNode(J.GridHeaderCell,{key:1,field:e.field,sortable:C,onHeadercellclick:l=>this.cellClick(l,e),selectionValue:(x=e.headerSelectionValue)!=null?x:this.$props.headerSelectionValue,title:e.title,render:(e.headerCell||this.$props.cellRender)&&this.getTemplate(e.headerCell||this.$props.cellRender)},S(m)?m:{default:()=>[m]})]),this.$props.columnResize&&this.$props.columnResize.resizable&&e.resizable&&r.createVNode(U.ColumnResizer,{key:2,onResize:(l,$,G)=>this.$props.columnResize&&this.$props.columnResize.dragHandler(l,e,$,G)},null)],_=r.createVNode(X.HeaderThElement,O,S(b)?b:{default:()=>[b]});return u.getTemplate.call(this,{h:r.h,template:y==null?void 0:y.headerCell,defaultRendering:_,additionalProps:{field:e.field,thProps:O},additionalListeners:{contextmenu:l=>this.triggerContextMenu(l,e)},defaultSlots:b})},this)};return r.createVNode("thead",{role:"rowgroup",class:this.theadClasses,"data-keyboardnavheader":!0},[this.$props.columnsMap.map(function(h,s){let d;return(this.$props.groupable||this.$props.reorderable)&&r.createVNode(W.ColumnDraggable,{key:s,onPressHandler:this.pressHandler,onDragHandler:this.dragHandler,onReleaseHandler:this.releaseHandler},S(d=p.call(this,h,s))?d:{default:()=>[d]})||r.createVNode("tr",{class:"k-table-row",role:"row","aria-rowindex":s+1},[p.call(this,h,s)])},this),this.$props.filterRow])}});exports.HeaderRow=ne;