@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
693 lines • 115 kB
JavaScript
import { __decorate, __read, __spread } from "tslib";
import { Injectable } from '@angular/core';
import { first } from 'rxjs/operators';
import { IgxGridGroupByRowComponent } from './grid/groupby-row.component';
import { FilterMode } from './common/enums';
var MoveDirection;
(function (MoveDirection) {
MoveDirection["LEFT"] = "left";
MoveDirection["RIGHT"] = "right";
})(MoveDirection || (MoveDirection = {}));
/** @hidden */
var IgxGridNavigationService = /** @class */ (function () {
function IgxGridNavigationService() {
}
Object.defineProperty(IgxGridNavigationService.prototype, "displayContainerWidth", {
get: function () {
return Math.round(this.grid.parentVirtDir.dc.instance._viewContainer.element.nativeElement.offsetWidth);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridNavigationService.prototype, "displayContainerScrollLeft", {
get: function () {
return Math.ceil(this.grid.headerContainer.scrollPosition);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridNavigationService.prototype, "verticalDisplayContainerElement", {
get: function () {
return this.grid.verticalScrollContainer.dc.instance._viewContainer.element.nativeElement;
},
enumerable: true,
configurable: true
});
IgxGridNavigationService.prototype.horizontalScroll = function (rowIndex) {
var rowComp = this.grid.dataRowList.find(function (row) { return row.index === rowIndex; }) || this.grid.dataRowList.first;
if (!rowComp) {
rowComp = this.grid.summariesRowList.find(function (row) { return row.index === rowIndex; });
}
return rowComp.virtDirRow;
};
IgxGridNavigationService.prototype.getColumnUnpinnedIndex = function (visibleColumnIndex) {
var column = this.grid.unpinnedColumns.find(function (col) { return !col.columnGroup && col.visibleIndex === visibleColumnIndex; });
return this.grid.pinnedColumns.length ? this.grid.unpinnedColumns.filter(function (c) { return !c.columnGroup; }).indexOf(column) :
visibleColumnIndex;
};
IgxGridNavigationService.prototype.isColumnFullyVisible = function (columnIndex) {
return this.isColumnRightEdgeVisible(columnIndex) && this.isColumnLeftEdgeVisible(columnIndex);
};
IgxGridNavigationService.prototype.isColumnRightEdgeVisible = function (columnIndex) {
var forOfDir = this.forOfDir();
if (this.isColumnPinned(columnIndex, forOfDir)) {
return true;
}
var index = this.getColumnUnpinnedIndex(columnIndex);
return this.displayContainerWidth >= forOfDir.getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft;
};
IgxGridNavigationService.prototype.isColumnLeftEdgeVisible = function (columnIndex) {
var forOfDir = this.forOfDir();
if (this.isColumnPinned(columnIndex, forOfDir)) {
return true;
}
var index = this.getColumnUnpinnedIndex(columnIndex);
return this.displayContainerScrollLeft <= forOfDir.getColumnScrollLeft(index);
};
IgxGridNavigationService.prototype.forOfDir = function () {
var forOfDir;
if (this.grid.dataRowList.length > 0) {
forOfDir = this.grid.dataRowList.first.virtDirRow;
}
else {
forOfDir = this.grid.headerContainer;
}
return forOfDir;
};
IgxGridNavigationService.prototype.isColumnPinned = function (columnIndex, forOfDir) {
var horizontalScroll = forOfDir.getScroll();
var column = this.grid.columnList.filter(function (c) { return !c.columnGroup; }).find(function (col) { return col.visibleIndex === columnIndex; });
return (!horizontalScroll.clientWidth || column.pinned);
};
Object.defineProperty(IgxGridNavigationService.prototype, "gridOrderedColumns", {
get: function () {
return __spread(this.grid.pinnedColumns, this.grid.unpinnedColumns).filter(function (c) { return !c.columnGroup; });
},
enumerable: true,
configurable: true
});
IgxGridNavigationService.prototype.isRowInEditMode = function (rowIndex) {
return this.grid.rowEditable && (this.grid.rowInEditMode && this.grid.rowInEditMode.index === rowIndex);
};
IgxGridNavigationService.prototype.findNextEditable = function (direction, visibleColumnIndex) {
// go trough all columns in one cycle instead of
// splice().reverse().find()
var gridColumns = this.gridOrderedColumns;
var start = visibleColumnIndex;
var end = 0;
var step = 0;
var result = -1;
if (direction === MoveDirection.LEFT) {
end = 0;
step = -1;
}
else if (direction === MoveDirection.RIGHT) {
end = gridColumns.length - 1;
step = 1;
}
for (var c = start; (c * step) <= end; c += step) {
var column = gridColumns[c];
if (column.editable) {
result = c;
break;
}
}
return result;
};
IgxGridNavigationService.prototype.getCellElementByVisibleIndex = function (rowIndex, visibleColumnIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
var cellSelector = this.getCellSelector(visibleColumnIndex, isSummary);
return this.grid.nativeElement.querySelector(cellSelector + "[data-rowindex=\"" + rowIndex + "\"][data-visibleIndex=\"" + visibleColumnIndex + "\"]");
};
IgxGridNavigationService.prototype.onKeydownArrowRight = function (element, selectedNode) {
var rowIndex = selectedNode.row;
var visibleColumnIndex = selectedNode.column;
var isSummary = selectedNode.isSummaryRow;
if (this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex) {
return;
}
if (this.isColumnRightEdgeVisible(visibleColumnIndex + 1)) { // if next column is fully visible or is pinned
if (element.classList.contains('igx-grid__td--pinned-last') || element.classList.contains('igx-grid-summary--pinned-last')) {
if (this.isColumnLeftEdgeVisible(visibleColumnIndex + 1)) {
element.nextElementSibling.firstElementChild.focus({ preventScroll: true });
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
element.nextElementSibling.firstElementChild.focus({ preventScroll: true });
});
this.horizontalScroll(rowIndex).scrollTo(0);
}
}
else {
element.nextElementSibling.focus({ preventScroll: true });
}
}
else {
this.performHorizontalScrollToCell(rowIndex, visibleColumnIndex + 1, isSummary);
}
};
IgxGridNavigationService.prototype.onKeydownArrowLeft = function (element, selectedNode) {
var rowIndex = selectedNode.row;
var visibleColumnIndex = selectedNode.column;
var isSummary = selectedNode.isSummaryRow;
if (visibleColumnIndex === 0) {
return;
}
var index = this.getColumnUnpinnedIndex(visibleColumnIndex - 1);
if (!element.previousElementSibling && this.grid.pinnedColumns.length && index === -1) {
element.parentNode.previousElementSibling.focus({ preventScroll: true });
}
else if (!this.isColumnLeftEdgeVisible(visibleColumnIndex - 1)) {
this.performHorizontalScrollToCell(rowIndex, visibleColumnIndex - 1, isSummary);
}
else {
element.previousElementSibling.focus({ preventScroll: true });
}
};
IgxGridNavigationService.prototype.movePreviousEditable = function (rowIndex, currentColumnVisibleIndex) {
var prevEditableColumnIndex = this.findNextEditable(MoveDirection.LEFT, currentColumnVisibleIndex - 1);
if (prevEditableColumnIndex === -1) {
if (this.grid.rowEditTabs.length) {
// TODO: make gridAPI visible for internal use and remove cast to any
this.grid.gridAPI.submit_value();
this.grid.rowEditTabs.last.element.nativeElement.focus();
return;
}
else {
// In case when row edit template is empty select last editable cell
prevEditableColumnIndex = this.grid.lastEditableColumnIndex;
}
}
this.focusEditableTarget(rowIndex, prevEditableColumnIndex);
};
IgxGridNavigationService.prototype.moveNextEditable = function (rowIndex, currentColumnVisibleIndex) {
var nextEditableColumnIndex = this.findNextEditable(MoveDirection.RIGHT, currentColumnVisibleIndex + 1);
if (nextEditableColumnIndex === -1) {
if (this.grid.rowEditTabs.length) {
// TODO: make gridAPI visible for internal use and remove cast to any
this.grid.gridAPI.submit_value();
this.grid.rowEditTabs.first.element.nativeElement.focus();
return;
}
else {
// In case when row edit template is empty select first editable cell
nextEditableColumnIndex = this.grid.firstEditableColumnIndex;
}
}
this.focusEditableTarget(rowIndex, nextEditableColumnIndex);
};
IgxGridNavigationService.prototype.focusEditableTarget = function (rowIndex, columnIndex) {
if (this.isColumnFullyVisible(columnIndex)) {
this.getCellElementByVisibleIndex(rowIndex, columnIndex).focus();
}
else {
this.performHorizontalScrollToCell(rowIndex, columnIndex);
}
};
IgxGridNavigationService.prototype.onKeydownHome = function (rowIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
var rowList = isSummary ? this.grid.summariesRowList : this.grid.dataRowList;
var rowElement = rowList.find(function (row) { return row.index === rowIndex; });
var cellSelector = this.getCellSelector(0, isSummary);
if (!rowElement) {
return;
}
rowElement = rowElement.nativeElement;
var firstCell = rowElement.querySelector(cellSelector);
if (this.grid.pinnedColumns.length || this.displayContainerScrollLeft === 0) {
firstCell.focus({ preventScroll: true });
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
firstCell = rowElement.querySelector(cellSelector);
firstCell.focus({ preventScroll: true });
});
this.horizontalScroll(rowIndex).scrollTo(0);
}
};
IgxGridNavigationService.prototype.onKeydownEnd = function (rowIndex, isSummary) {
var _this = this;
if (isSummary === void 0) { isSummary = false; }
var index = this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex;
var rowList = isSummary ? this.grid.summariesRowList : this.grid.dataRowList;
var rowElement = rowList.find(function (row) { return row.index === rowIndex; });
if (!rowElement) {
return;
}
rowElement = rowElement.nativeElement;
if (this.isColumnRightEdgeVisible(index)) {
var allCells = rowElement.querySelectorAll(this.getCellSelector(-1, isSummary));
allCells[allCells.length - 1].focus({ preventScroll: true });
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
var allCells = rowElement.querySelectorAll(_this.getCellSelector(-1, isSummary));
allCells[allCells.length - 1].focus({ preventScroll: true });
});
this.horizontalScroll(rowIndex).scrollTo(this.getColumnUnpinnedIndex(index));
}
};
IgxGridNavigationService.prototype.navigateTop = function (visibleColumnIndex) {
var _this = this;
var verticalScroll = this.grid.verticalScrollContainer.getScroll();
var cellSelector = this.getCellSelector(visibleColumnIndex);
if (verticalScroll.scrollTop === 0) {
var cells = this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
cells[0].focus();
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(0);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
var cells = _this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
if (cells.length > 0) {
cells[0].focus();
}
});
}
};
IgxGridNavigationService.prototype.navigateBottom = function (visibleColumnIndex) {
var _this = this;
var verticalScroll = this.grid.verticalScrollContainer.getScroll();
var cellSelector = this.getCellSelector(visibleColumnIndex);
if (verticalScroll.scrollHeight === 0 ||
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
var cells = this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
cells[cells.length - 1].focus();
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
var cells = _this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
if (cells.length > 0) {
cells[cells.length - 1].focus({ preventScroll: true });
}
});
}
};
IgxGridNavigationService.prototype.navigateUp = function (rowElement, selectedNode) {
var _this = this;
var currentRowIndex = selectedNode.row;
var visibleColumnIndex = selectedNode.column;
if (currentRowIndex === 0) {
return;
}
var containerTopOffset = parseInt(this.verticalDisplayContainerElement.style.top, 10);
if (!rowElement.previousElementSibling ||
rowElement.previousElementSibling.offsetTop < Math.abs(containerTopOffset)) {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(currentRowIndex - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first())
.subscribe(function () {
var tag = rowElement.tagName.toLowerCase();
rowElement = _this.getRowByIndex(currentRowIndex, tag);
_this.focusPreviousElement(rowElement, visibleColumnIndex);
});
}
else {
this.focusPreviousElement(rowElement, visibleColumnIndex);
}
};
IgxGridNavigationService.prototype.focusPreviousElement = function (currentRowEl, visibleColumnIndex) {
this.focusElem(currentRowEl.previousElementSibling, visibleColumnIndex);
};
IgxGridNavigationService.prototype.navigateDown = function (rowElement, selectedNode) {
var _this = this;
var currentRowIndex = selectedNode.row;
var visibleColumnIndex = selectedNode.column;
if (currentRowIndex === this.grid.dataView.length - 1 ||
(currentRowIndex === 0 && rowElement.tagName.toLowerCase() === 'igx-grid-summary-row')) {
// check if this is rootSummary row
return;
}
var rowHeight = this.grid.verticalScrollContainer.getSizeAt(currentRowIndex + 1);
var containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;
var targetEndTopOffset = rowElement.nextElementSibling ?
rowElement.nextElementSibling.offsetTop + rowHeight + parseInt(this.verticalDisplayContainerElement.style.top, 10) :
containerHeight + rowHeight;
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
if (containerHeight && containerHeight < targetEndTopOffset) {
var nextIndex_1 = currentRowIndex + 1;
this.grid.verticalScrollContainer.scrollTo(nextIndex_1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first())
.subscribe(function () {
rowElement = _this.getNextRowByIndex(nextIndex_1);
_this.focusElem(rowElement, visibleColumnIndex);
});
}
else {
this.focusNextElement(rowElement, visibleColumnIndex);
}
};
IgxGridNavigationService.prototype.focusElem = function (rowElement, visibleColumnIndex) {
if (rowElement.tagName.toLowerCase() === 'igx-grid-groupby-row' || rowElement.className === 'igx-grid__tr-container') {
rowElement.focus();
}
else {
var isSummaryRow = rowElement.tagName.toLowerCase() === 'igx-grid-summary-row';
if (this.isColumnFullyVisible(visibleColumnIndex)) {
var cellSelector = this.getCellSelector(visibleColumnIndex, isSummaryRow);
var cell = rowElement.querySelector(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
cell.focus();
return cell;
}
this.performHorizontalScrollToCell(parseInt(rowElement.getAttribute('data-rowindex'), 10), visibleColumnIndex, isSummaryRow);
}
};
IgxGridNavigationService.prototype.focusNextElement = function (rowElement, visibleColumnIndex) {
return this.focusElem(rowElement.nextElementSibling, visibleColumnIndex);
};
IgxGridNavigationService.prototype.goToFirstCell = function () {
var _this = this;
var verticalScroll = this.grid.verticalScrollContainer.getScroll();
if (verticalScroll.scrollTop === 0) {
this.onKeydownHome(this.grid.dataRowList.first.index);
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(0);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
_this.onKeydownHome(_this.grid.dataRowList.first.index);
});
}
};
IgxGridNavigationService.prototype.goToLastCell = function () {
var _this = this;
var verticalScroll = this.grid.verticalScrollContainer.getScroll();
if (verticalScroll.scrollHeight === 0 ||
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
var rows = this.getAllRows();
var rowIndex = parseInt(rows[rows.length - 1].getAttribute('data-rowIndex'), 10);
this.onKeydownEnd(rowIndex);
}
else {
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
var rows = _this.getAllRows();
if (rows.length > 0) {
var rowIndex = parseInt(rows[rows.length - 1].getAttribute('data-rowIndex'), 10);
_this.onKeydownEnd(rowIndex);
}
});
}
};
IgxGridNavigationService.prototype.goToLastBodyElement = function () {
var _this = this;
var verticalScroll = this.grid.verticalScrollContainer.getScroll();
if (verticalScroll.scrollHeight === 0 ||
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
var rowIndex = this.grid.dataView.length - 1;
var row = this.grid.nativeElement.querySelector("[data-rowindex=\"" + rowIndex + "\"]");
var isRowTarget = row.tagName.toLowerCase() === 'igx-grid-groupby-row' ||
this.grid.isDetailRecord(this.grid.dataView[rowIndex]);
if (row && isRowTarget) {
row.focus();
return;
}
var isSummary = (row && row.tagName.toLowerCase() === 'igx-grid-summary-row') ? true : false;
this.onKeydownEnd(rowIndex, isSummary);
}
else {
this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
var rowIndex = _this.grid.dataView.length - 1;
var row = _this.grid.nativeElement.querySelector("[data-rowindex=\"" + rowIndex + "\"]");
var isRowTarget = row.tagName.toLowerCase() === 'igx-grid-groupby-row' ||
_this.grid.isDetailRecord(_this.grid.dataView[rowIndex]);
if (row && isRowTarget) {
row.focus();
return;
}
var isSummary = (row && row.tagName.toLowerCase() === 'igx-grid-summary-row') ? true : false;
_this.onKeydownEnd(rowIndex, isSummary);
});
}
};
IgxGridNavigationService.prototype.performTab = function (currentRowEl, selectedNode) {
var rowIndex = selectedNode.row;
var visibleColumnIndex = selectedNode.column;
var isSummaryRow = selectedNode.isSummaryRow;
var nextIsDetailRow = rowIndex + 1 <= this.grid.dataView.length - 1 ?
this.grid.isDetailRecord(this.grid.dataView[rowIndex + 1]) : false;
var isLastColumn = this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex;
if (isSummaryRow && rowIndex === 0 &&
this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex) {
return;
}
if (this.isRowInEditMode(rowIndex)) {
this.moveNextEditable(rowIndex, visibleColumnIndex);
return;
}
if (nextIsDetailRow && isLastColumn) {
this.navigateDown(currentRowEl, { row: rowIndex, column: visibleColumnIndex });
return;
}
if (isLastColumn) {
var rowEl = this.grid.rowList.find(function (row) { return row.index === rowIndex + 1; }) ?
this.grid.rowList.find(function (row) { return row.index === rowIndex + 1; }) :
this.grid.summariesRowList.find(function (row) { return row.index === rowIndex + 1; });
if (rowIndex === this.grid.dataView.length - 1 && this.grid.rootSummariesEnabled) {
this.onKeydownHome(0, true);
return;
}
if (rowEl) {
this.navigateDown(currentRowEl, { row: rowIndex, column: 0 });
}
}
else {
var cell = this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummaryRow);
if (cell) {
this.onKeydownArrowRight(cell, selectedNode);
}
}
};
IgxGridNavigationService.prototype.moveFocusToFilterCell = function (toStart) {
if (this.grid.filteringService.isFilterRowVisible) {
this.grid.filteringService.focusFilterRowCloseButton();
return;
}
var columns = this.grid.filteringService.unpinnedFilterableColumns;
var targetIndex = toStart ? 0 : columns.length - 1;
var visibleIndex = columns[targetIndex].visibleIndex;
var isVisible = toStart ? this.isColumnLeftEdgeVisible(visibleIndex) : this.isColumnRightEdgeVisible(visibleIndex);
if (isVisible) {
this.grid.filteringService.focusFilterCellChip(columns[targetIndex], false);
}
else {
this.grid.filteringService.scrollToFilterCell(columns[targetIndex], false);
}
};
IgxGridNavigationService.prototype.navigatePrevFilterCell = function (column, eventArgs) {
var cols = this.grid.filteringService.unpinnedFilterableColumns;
var prevFilterableIndex = cols.indexOf(column) - 1;
var visibleIndex = column.visibleIndex;
if (visibleIndex === 0 || prevFilterableIndex < 0) {
// prev is not filter cell
var firstFiltarableCol = this.getFirstPinnedFilterableColumn();
if (!firstFiltarableCol || column === firstFiltarableCol) {
eventArgs.preventDefault();
}
return;
}
var prevColumn = cols[prevFilterableIndex];
var prevVisibleIndex = prevColumn.visibleIndex;
if (prevFilterableIndex >= 0 && visibleIndex > 0 && !this.isColumnLeftEdgeVisible(prevVisibleIndex) && !column.pinned) {
eventArgs.preventDefault();
this.grid.filteringService.scrollToFilterCell(prevColumn, false);
}
};
IgxGridNavigationService.prototype.navigateFirstCellIfPossible = function (eventArgs) {
if (this.grid.rowList.length > 0) {
if (this.grid.rowList.filter(function (row) { return row instanceof IgxGridGroupByRowComponent; }).length > 0) {
eventArgs.stopPropagation();
return;
}
this.goToFirstCell();
}
else if (this.grid.rootSummariesEnabled) {
this.onKeydownHome(0, true);
}
eventArgs.preventDefault();
};
IgxGridNavigationService.prototype.navigateNextFilterCell = function (column, eventArgs) {
var cols = this.grid.filteringService.unpinnedFilterableColumns;
var nextFilterableIndex = cols.indexOf(column) + 1;
if (nextFilterableIndex >= this.grid.filteringService.unpinnedFilterableColumns.length) {
// next is not filter cell
this.navigateFirstCellIfPossible(eventArgs);
return;
}
var nextColumn = cols[nextFilterableIndex];
var nextVisibleIndex = nextColumn.visibleIndex;
if (!column.pinned && !this.isColumnRightEdgeVisible(nextVisibleIndex)) {
eventArgs.preventDefault();
this.grid.filteringService.scrollToFilterCell(nextColumn, true);
}
else if (column === this.getLastPinnedFilterableColumn() && !this.isColumnRightEdgeVisible(nextVisibleIndex)) {
this.grid.filteringService.scrollToFilterCell(nextColumn, false);
eventArgs.stopPropagation();
}
};
IgxGridNavigationService.prototype.getLastPinnedFilterableColumn = function () {
var pinnedFilterableColums = this.grid.pinnedColumns.filter(function (col) { return !(col.columnGroup) && col.filterable; });
return pinnedFilterableColums[pinnedFilterableColums.length - 1];
};
IgxGridNavigationService.prototype.getFirstPinnedFilterableColumn = function () {
return this.grid.pinnedColumns.filter(function (col) { return !(col.columnGroup) && col.filterable; })[0];
};
IgxGridNavigationService.prototype.performShiftTabKey = function (currentRowEl, selectedNode) {
var _this = this;
var rowIndex = selectedNode.row;
var visibleColumnIndex = selectedNode.column;
var isSummary = selectedNode.isSummaryRow;
if (isSummary && rowIndex === 0 && visibleColumnIndex === 0 && this.grid.rowList.length) {
this.goToLastBodyElement();
return;
}
if (this.isRowInEditMode(rowIndex)) {
this.movePreviousEditable(rowIndex, visibleColumnIndex);
return;
}
var prevIsDetailRow = rowIndex > 0 ? this.grid.isDetailRecord(this.grid.dataView[rowIndex - 1]) : false;
if (visibleColumnIndex === 0 && prevIsDetailRow) {
var target_1 = currentRowEl.previousElementSibling;
var applyFocusFunc_1 = function () {
target_1 = _this.getRowByIndex(rowIndex - 1, '');
target_1.focus({ preventScroll: true });
};
if (target_1) {
applyFocusFunc_1();
}
else {
this.performVerticalScrollToCell(rowIndex - 1, visibleColumnIndex, function () {
applyFocusFunc_1();
});
}
return;
}
if (visibleColumnIndex === 0) {
if (rowIndex === 0 && this.grid.allowFiltering && this.grid.filterMode === FilterMode.quickFilter) {
this.moveFocusToFilterCell();
}
else {
this.navigateUp(currentRowEl, {
row: rowIndex,
column: this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex
});
}
}
else {
var cell = this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummary);
if (cell) {
this.onKeydownArrowLeft(cell, selectedNode);
}
}
};
IgxGridNavigationService.prototype.shouldPerformVerticalScroll = function (targetRowIndex, visibleColumnIndex) {
var containerTopOffset = parseInt(this.verticalDisplayContainerElement.style.top, 10);
var targetRow = this.getRowByIndex(targetRowIndex, '');
var rowHeight = this.grid.verticalScrollContainer.getSizeAt(targetRowIndex);
var containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;
var targetEndTopOffset = targetRow ? targetRow.offsetTop + rowHeight + containerTopOffset :
containerHeight + rowHeight;
if (!targetRow || targetRow.offsetTop < Math.abs(containerTopOffset)
|| containerHeight && containerHeight < targetEndTopOffset) {
return true;
}
else {
return false;
}
};
IgxGridNavigationService.prototype.performVerticalScrollToCell = function (rowIndex, visibleColIndex, cb) {
this.grid.verticalScrollContainer.scrollTo(rowIndex);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
cb();
});
};
IgxGridNavigationService.prototype.performHorizontalScrollToCell = function (rowIndex, visibleColumnIndex, isSummary, cb) {
var _this = this;
if (isSummary === void 0) { isSummary = false; }
var unpinnedIndex = this.getColumnUnpinnedIndex(visibleColumnIndex);
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
if (cb) {
cb();
}
else {
var cellElement = _this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummary);
if (cellElement) {
cellElement.focus({ preventScroll: true });
}
}
});
this.horizontalScroll(rowIndex).scrollTo(unpinnedIndex);
};
IgxGridNavigationService.prototype.getFocusableGrid = function () {
return this.grid;
};
IgxGridNavigationService.prototype.getRowByIndex = function (index, selector) {
var _this = this;
if (selector === void 0) { selector = this.getRowSelector(); }
var gridTag = this.grid.nativeElement.tagName.toLocaleLowerCase();
var row = Array.from(this.grid.tbody.nativeElement.querySelectorAll(selector + "[data-rowindex=\"" + index + "\"]"))
.find(function (x) { return _this.getClosestElemByTag(x, gridTag).getAttribute('id') === _this.grid.id; });
return row;
};
IgxGridNavigationService.prototype.getNextRowByIndex = function (nextIndex) {
var _this = this;
var gridTag = this.grid.nativeElement.tagName.toLocaleLowerCase();
var row = Array.from(this.grid.tbody.nativeElement.querySelectorAll("[data-rowindex=\"" + nextIndex + "\"]")).find(function (x) { return _this.getClosestElemByTag(x, gridTag).getAttribute('id') === _this.grid.id; });
return row;
};
IgxGridNavigationService.prototype.getAllRows = function () {
var selector = this.getRowSelector();
return this.grid.nativeElement.querySelectorAll(selector);
};
IgxGridNavigationService.prototype.getCellSelector = function (visibleIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
if (visibleIndex === 0 && this.grid.hasDetails && !isSummary) {
return 'igx-expandable-grid-cell';
}
return isSummary ? 'igx-grid-summary-cell' : 'igx-grid-cell';
};
IgxGridNavigationService.prototype.getRowSelector = function () {
return 'igx-grid-row';
};
IgxGridNavigationService.prototype.getClosestElemByTag = function (sourceElem, targetTag) {
var result = sourceElem;
while (result !== null && result.nodeType === 1) {
if (result.tagName.toLowerCase() === targetTag.toLowerCase()) {
return result;
}
result = result.parentNode;
}
return null;
};
IgxGridNavigationService = __decorate([
Injectable()
], IgxGridNavigationService);
return IgxGridNavigationService;
}());
export { IgxGridNavigationService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2dyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUkxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsSUFBSyxhQUdKO0FBSEQsV0FBSyxhQUFhO0lBQ2QsOEJBQWEsQ0FBQTtJQUNiLGdDQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUhJLGFBQWEsS0FBYixhQUFhLFFBR2pCO0FBRUQsY0FBYztBQUVkO0lBQUE7SUFvcUJBLENBQUM7SUFqcUJHLHNCQUFJLDJEQUFxQjthQUF6QjtZQUNJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVHLENBQUM7OztPQUFBO0lBRUQsc0JBQUksZ0VBQTBCO2FBQTlCO1lBQ0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7OztPQUFBO0lBRUQsc0JBQUkscUVBQStCO2FBQW5DO1lBQ0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDOUYsQ0FBQzs7O09BQUE7SUFFTSxtREFBZ0IsR0FB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