@progress/kendo-vue-grid
Version:
9 lines (8 loc) • 3.63 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 d=require("vue"),a=require("@progress/kendo-vue-common"),s=d.defineComponent({name:"KendoGridNav",props:{columnsRef:Array,dataRef:Array,id:String,dir:String},emits:["keydown","navigationaction","keyboardselectionchange","movetonextpage","movetoprevpage","columnreorder","setcurrentontop"],inject:{onNavKeyDown:{default:a.noop},onNavFocus:{default:a.noop},onNavMount:{default:a.noop},onNavBeforeUpdate:{default:a.noop},onNavUpdate:{default:a.noop},handleDispatchFocus:{default:a.noop},kbContext:{default:null},navigation:{default:null}},mounted(){this.onNavMount({scope:this.$el||void 0})},updated(){this.onNavUpdate({scope:this.$el||void 0}),this.handlePendingStickyNav()},setup(e,n){return{pendingStickyNavRef:d.ref(null)}},methods:{handleStickyKeyDown(e){var t,r;const n=e.target;if((e.keyCode===38||e.keyCode===40)&&n.closest(".k-grid-sticky-container")){const o=parseInt(((t=n.closest("tr"))==null?void 0:t.getAttribute("absolute-row-index"))||"",10),i=n.getAttribute("data-keyboardnavid");if(!isNaN(o)&&i&&!((r=this.$el)==null?void 0:r.querySelector(`.k-grid-content .k-table-tbody>tr[absolute-row-index="${o}"]`)))return this.pendingStickyNavRef={navId:i,key:e.key,code:e.code,keyCode:e.keyCode},e.preventDefault(),e.stopPropagation(),this.$emit("setcurrentontop",{rowIndex:o}),!0}return!1},handlePendingStickyNav(){var i;if(!this.pendingStickyNavRef||!this.$el)return;const{navId:e,key:n,code:t,keyCode:r}=this.pendingStickyNavRef,o=(i=this.$el)==null?void 0:i.querySelector(`.k-grid-content .k-table-tbody td[data-keyboardnavid="${e}"]`);o&&o.dispatchEvent(new KeyboardEvent("keydown",{key:n,code:t,keyCode:r,bubbles:!0,cancelable:!0})),this.pendingStickyNavRef=null},onKeyDown(e){this.handleStickyKeyDown(e)||(this.onNavKeyDown(e,{navigation:this.navigation,kbContext:this.kbContext,onNavigationAction:this.onNavigationAction}),this.onNavBeforeUpdate({scope:this.$el||void 0,kbContext:this.kbContext,navigation:this.navigation}),this.$emit("keydown",{dataItems:this.getLeafDataItems(),componentId:this._gridId,selectedField:this.$props.selectedField,event:e}))},onFocus(e){this.onNavFocus(e,{kbContext:this.kbContext})},onNavigationAction(e){const{columnsRef:n}=this.$props;if(e.action==="moveToNextPage"&&this.$emit("movetonextpage",e.event),e.action==="moveToPrevPage"&&this.$emit("movetoprevpage",e.event),e.focusElement&&(e.action==="reorderToRight"||e.action==="reorderToLeft")){const t=parseInt(e.focusElement.ariaColIndex,10)-1;if(!n[t].reorderable)return;if(e.action==="reorderToRight"&&t<this.$props.columnsRef.length-1){if(n[t+1].disableReorder)return;this.$emit("columnreorder",t,t+1,e.event)}if(e.action==="reorderToLeft"&&t>0){if(n[t-1].disableReorder)return;this.$emit("columnreorder",t,t-1,e.event)}}e.action==="select"&&this.$emit("keyboardselectionchange",e.event),this.$emit("navigationaction",{focusElement:e.focusElement,event:e.event})},getLeafDataItems(){return this.$props.dataRef.filter(e=>e.rowType==="data").map(e=>e.dataItem)}},render(){const e=a.getDefaultSlots(this);return d.createVNode("div",{onKeydown:this.onKeyDown,onFocusin:this.onFocus,id:this.$props.id,dir:this.$props.dir,"data-keyboardnavscope":!0},[e])}});exports.GridNav=s;