devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
104 lines (103 loc) • 4.54 kB
JavaScript
/**
* DevExtreme (esm/__internal/grids/data_grid/keyboard_navigation/m_headers_keyboard_navigation.js)
* Version: 25.1.3
* Build date: Wed Jun 25 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import _extends from "@babel/runtime/helpers/esm/extends";
import {
isCommandKeyPressed
} from "../../../../common/core/events/utils";
import $ from "../../../../core/renderer";
import {
isDefined
} from "../../../../core/utils/type";
import {
KEY_CODES
} from "../../../grids/grid_core/keyboard_navigation/const";
import {
headersKeyboardNavigationModule
} from "../../../grids/grid_core/keyboard_navigation/m_headers_keyboard_navigation";
import gridCore from "../m_core";
import {
ColumnKeyboardNavigationMixin
} from "./m_column_keyboard_navigation_mixin";
const headersKeyboardNavigation = Base => class extends(ColumnKeyboardNavigationMixin(Base)) {
getNewFocusedColumnBeforeGrouping(column, rowIndex) {
if (column.showWhenGrouped) {
return column
}
const focusableColumns = this.getFocusableColumns(rowIndex, column.ownerBand);
if (1 === focusableColumns.length && isDefined(column.ownerBand)) {
return this._columnsController.getParentColumn(column, true)
}
if (1 === focusableColumns.length) {
return
}
const visibleColumnIndex = focusableColumns.findIndex((col => col.index === column.index));
return visibleColumnIndex === focusableColumns.length - 1 ? focusableColumns[visibleColumnIndex - 1] : focusableColumns[visibleColumnIndex + 1]
}
groupColumnByPressingKey(e) {
var _e$originalEvent;
const $cell = $(e.originalEvent.target).closest("td");
const rowIndex = this._getRowIndex($cell.parent());
const column = this._getColumnByCellElement($cell, rowIndex);
this.groupColumn(column, rowIndex);
null === (_e$originalEvent = e.originalEvent) || void 0 === _e$originalEvent || _e$originalEvent.preventDefault()
}
canGroupColumnByPressingKey(e) {
return e.which === KEY_CODES.G && isCommandKeyPressed(e.originalEvent)
}
getRowIndexFromEvent(e) {
const $cell = $(e.originalEvent.target).closest("td");
return this._getRowIndex($cell.parent())
}
getColumnFromEvent(e) {
const $cell = $(e.originalEvent.target).closest("td");
const rowIndex = this._getRowIndex($cell.parent());
return this._getColumnByCellElement($cell, rowIndex)
}
keyDownHandler(e) {
let isHandled = super.keyDownHandler(e);
if (isHandled) {
return true
}
if (this.canGroupColumnByPressingKey(e)) {
this.groupColumnByPressingKey(e);
isHandled = true
}
return isHandled
}
groupColumn(column) {
let rowIndex = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
if (!isDefined(column.groupIndex) && null !== column && void 0 !== column && column.allowGrouping) {
var _this$_columnsControl;
const newGroupIndex = (null === (_this$_columnsControl = this._columnsController.getGroupColumns()) || void 0 === _this$_columnsControl ? void 0 : _this$_columnsControl.length) ?? 0;
const newFocusedColumn = this.getNewFocusedColumnBeforeGrouping(column, rowIndex);
this.changeGroupColumnIndex(newGroupIndex, column, newFocusedColumn)
}
}
ungroupAllColumns() {
const $focusedCell = this._getFocusedCell();
const focusedColumn = this._getColumnByCellElement($focusedCell);
this._columnsController.beginUpdate();
super.ungroupAllColumns();
const rowIndex = this._columnsController.getRowIndex(focusedColumn.index, true);
const newVisibleIndex = this.getVisibleIndex(focusedColumn);
this.updateFocusPosition({
rowIndex: rowIndex,
columnIndex: newVisibleIndex
});
this._columnsController.endUpdate()
}
};
gridCore.registerModule("headersKeyboardNavigation", _extends({}, headersKeyboardNavigationModule, {
extenders: {
controllers: {
headersKeyboardNavigation: headersKeyboardNavigation
},
views: _extends({}, headersKeyboardNavigationModule.extenders.views)
}
}));