UNPKG

@progress/kendo-vue-grid

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