@progress/kendo-vue-grid
Version:
9 lines (8 loc) • 3.24 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 t=require("vue"),o=require("@progress/kendo-vue-common"),s=require("@progress/kendo-vue-popup"),c=require("@progress/kendo-svg-icons"),u=require("./ColumnMenuContent.js"),l=require("@progress/kendo-vue-data-tools"),a=require("@progress/kendo-vue-intl"),i=require("../messages/main.js"),h=t.defineComponent({name:"KendoColumnMenu",props:{animate:{type:[Boolean,Object],default:function(){return!0}},column:Object,sortable:[Boolean,Object],sort:{type:Array},opened:Boolean,filter:Object,filterable:Boolean,filterOperators:Object,render:[Boolean,String,Function,Object],columnMenuIcon:o.SvgIcon,onClose:Function,onSortchange:Function,onFilterchange:Function},inject:{kendoIntlService:{default:null},kendoLocalizationService:{default:null}},data(){return{show:!1,blurTimeout:void 0}},created(){this._anchor=o.guid()},computed:{currentOpen(){return this.show||this.$props.opened}},watch:{currentOpen:function(e){this.$nextTick(function(){if(this._content=this.$refs.content,e&&this._content){const n=l.tableKeyboardNavigationTools.getFocusableElements(this._content,{focusable:!0});n.length?n[0].focus():this._content.focus()}})}},methods:{blur(){clearTimeout(this.blurTimeout),this.blurTimeout=setTimeout(()=>{this.closeMenu()},200)},focus(){clearTimeout(this.blurTimeout)},handleFocus(e){clearTimeout(this.blurTimeout)},anchorClick(e){e.preventDefault(),this.show=!this.show},closeMenu(){this.$emit("close"),this.show=!1},sortChange(e,n){this.$emit("sortchange",e,n)},filterChange(e,n){this.$emit("filterchange",e,n)}},setup(){return{kendoLocalizationService:t.inject("kendoLocalizationService",{})}},render(){const e=this.$props.render,n=a.provideLocalizationService(this),{columnMenuIcon:r}=this.$props;return t.createVNode("div",{style:{display:"inline"}},[t.createVNode("a",{class:"k-grid-header-menu k-grid-column-menu",title:`${this.$props.column.field} ${n.toLanguageString(i.columnMenu,i.messages[i.columnMenu])}`,ref:o.setRef(this,"kendoAnchor"),onClick:this.anchorClick,href:"#"},[r?t.createVNode(o.Icon,{name:r.name,icon:r},null):t.createVNode(o.Icon,{name:"more-vertical",icon:c.moreVerticalIcon},null)]),t.createVNode(s.Popup,{animate:this.$props.animate,anchor:this._anchor,show:this.currentOpen},{default:()=>[t.createVNode("div",{ref:"content",class:"k-column-menu k-grid-columnmenu-popup",tabindex:0,onFocusout:this.blur,onFocusin:this.focus,style:{outline:"none",width:"230px"}},[t.createVNode(u.ColumnMenuContent,{column:this.$props.column,sortable:this.$props.sortable,sort:this.$props.sort,filter:this.$props.filter,filterable:this.$props.filterable,filterOperators:this.$props.filterOperators,render:e,onContentfocus:this.handleFocus,onClosemenu:this.closeMenu,onSortchange:this.sortChange,onFilterchange:this.filterChange},null)])]})])}});exports.ColumnMenu=h;