igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
1,120 lines • 118 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { FilterMode } from './grid-base.component';
import { first } from 'rxjs/operators';
import { IgxGridGroupByRowComponent } from './grid/groupby-row.component';
/** @enum {string} */
var MoveDirection = {
LEFT: 'left',
RIGHT: 'right',
};
/**
* @hidden
*/
var IgxGridNavigationService = /** @class */ (function () {
function IgxGridNavigationService() {
}
Object.defineProperty(IgxGridNavigationService.prototype, "displayContainerWidth", {
get: /**
* @return {?}
*/
function () {
return parseInt(this.grid.parentVirtDir.dc.instance._viewContainer.element.nativeElement.offsetWidth, 10);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridNavigationService.prototype, "displayContainerScrollLeft", {
get: /**
* @return {?}
*/
function () {
return parseInt(this.grid.parentVirtDir.getHorizontalScroll().scrollLeft, 10);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridNavigationService.prototype, "verticalDisplayContainerElement", {
get: /**
* @return {?}
*/
function () {
return this.grid.verticalScrollContainer.dc.instance._viewContainer.element.nativeElement;
},
enumerable: true,
configurable: true
});
/**
* @param {?} rowIndex
* @return {?}
*/
IgxGridNavigationService.prototype.horizontalScroll = /**
* @param {?} rowIndex
* @return {?}
*/
function (rowIndex) {
/** @type {?} */
var rowComp = this.grid.dataRowList.find(function (row) { return row.index === rowIndex; }) ?
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;
};
/**
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.getColumnUnpinnedIndex = /**
* @param {?} visibleColumnIndex
* @return {?}
*/
function (visibleColumnIndex) {
/** @type {?} */
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;
};
/**
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.isColumnFullyVisible = /**
* @param {?} visibleColumnIndex
* @return {?}
*/
function (visibleColumnIndex) {
/** @type {?} */
var forOfDir;
if (this.grid.dataRowList.length > 0) {
forOfDir = this.grid.dataRowList.first.virtDirRow;
}
else {
forOfDir = this.grid.headerContainer;
}
/** @type {?} */
var horizontalScroll = forOfDir.getHorizontalScroll();
if (!horizontalScroll.clientWidth ||
this.grid.columnList.filter(function (c) { return !c.columnGroup; }).find(function (column) { return column.visibleIndex === visibleColumnIndex; }).pinned) {
return true;
}
/** @type {?} */
var index = this.getColumnUnpinnedIndex(visibleColumnIndex);
return this.displayContainerWidth >= forOfDir.getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft;
};
/**
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.isColumnLeftFullyVisible = /**
* @param {?} visibleColumnIndex
* @return {?}
*/
function (visibleColumnIndex) {
/** @type {?} */
var forOfDir;
if (this.grid.dataRowList.length > 0) {
forOfDir = this.grid.dataRowList.first.virtDirRow;
}
else {
forOfDir = this.grid.headerContainer;
}
/** @type {?} */
var horizontalScroll = forOfDir.getHorizontalScroll();
if (!horizontalScroll.clientWidth ||
this.grid.columnList.filter(function (c) { return !c.columnGroup; }).find(function (column) { return column.visibleIndex === visibleColumnIndex; }).pinned) {
return true;
}
/** @type {?} */
var index = this.getColumnUnpinnedIndex(visibleColumnIndex);
return this.displayContainerScrollLeft <= forOfDir.getColumnScrollLeft(index);
};
Object.defineProperty(IgxGridNavigationService.prototype, "gridOrderedColumns", {
get: /**
* @return {?}
*/
function () {
return tslib_1.__spread(this.grid.pinnedColumns, this.grid.unpinnedColumns).filter(function (c) { return !c.columnGroup; });
},
enumerable: true,
configurable: true
});
/**
* @param {?} rowIndex
* @return {?}
*/
IgxGridNavigationService.prototype.isRowInEditMode = /**
* @param {?} rowIndex
* @return {?}
*/
function (rowIndex) {
return this.grid.rowEditable && (this.grid.rowInEditMode && this.grid.rowInEditMode.index === rowIndex);
};
/**
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.isColumnEditable = /**
* @param {?} visibleColumnIndex
* @return {?}
*/
function (visibleColumnIndex) {
/** @type {?} */
var column = this.gridOrderedColumns.find(function (c) { return c.visibleIndex === visibleColumnIndex; });
return column ? column.editable : false;
};
/**
* @param {?} direction
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.findNextEditable = /**
* @param {?} direction
* @param {?} visibleColumnIndex
* @return {?}
*/
function (direction, visibleColumnIndex) {
/** @type {?} */
var gridColumns = this.gridOrderedColumns;
if (direction === MoveDirection.LEFT) {
return gridColumns.splice(0, visibleColumnIndex + 1).reverse().findIndex(function (e) { return e.editable; });
}
else if (direction === MoveDirection.RIGHT) {
return gridColumns.splice(visibleColumnIndex, gridColumns.length - 1).findIndex(function (e) { return e.editable; });
}
};
/**
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.getCellElementByVisibleIndex = /**
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
function (rowIndex, visibleColumnIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
/** @type {?} */
var cellSelector = this.getCellSelector(visibleColumnIndex, isSummary);
return this.grid.nativeElement.querySelector(cellSelector + "[data-rowindex=\"" + rowIndex + "\"][data-visibleIndex=\"" + visibleColumnIndex + "\"]");
};
/**
* @param {?} element
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.onKeydownArrowRight = /**
* @param {?} element
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
function (element, rowIndex, visibleColumnIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
if (this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex) {
return;
}
if (this.isColumnFullyVisible(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.isColumnLeftFullyVisible(visibleColumnIndex + 1)) {
element.nextElementSibling.firstElementChild.focus({ preventScroll: true });
}
else {
this.grid.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);
}
};
/**
* @param {?} element
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.onKeydownArrowLeft = /**
* @param {?} element
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
function (element, rowIndex, visibleColumnIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
if (visibleColumnIndex === 0) {
return;
}
/** @type {?} */
var index = this.getColumnUnpinnedIndex(visibleColumnIndex - 1);
if (!element.previousElementSibling && this.grid.pinnedColumns.length && index === -1) {
element.parentNode.previousElementSibling.focus({ preventScroll: true });
}
else if (!this.isColumnLeftFullyVisible(visibleColumnIndex - 1)) {
this.performHorizontalScrollToCell(rowIndex, visibleColumnIndex - 1, isSummary);
}
else {
element.previousElementSibling.focus({ preventScroll: true });
}
};
/**
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.movePreviousEditable = /**
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
function (rowIndex, visibleColumnIndex) {
/** @type {?} */
var addedIndex = this.isColumnEditable(visibleColumnIndex - 1) ?
0 :
this.findNextEditable(MoveDirection.LEFT, visibleColumnIndex - 1);
if (addedIndex === -1) {
this.grid.rowEditTabs.last.element.nativeElement.focus();
return;
}
/** @type {?} */
var editableIndex = visibleColumnIndex - 1 - addedIndex;
if (this.getColumnUnpinnedIndex(editableIndex) === -1 && this.grid.pinnedColumns.length) {
// if target is NOT pinned and there are pinned columns
// since addedIndex !== -1, there will always be a target
this.getCellElementByVisibleIndex(rowIndex, editableIndex).focus();
}
else if (!this.isColumnLeftFullyVisible(editableIndex)) { // if not fully visible, perform scroll
this.performHorizontalScrollToCell(rowIndex, editableIndex);
}
else {
this.getCellElementByVisibleIndex(rowIndex, editableIndex).focus(); // if fully visible, just focus
}
};
/**
* @param {?} element
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.moveNextEditable = /**
* @param {?} element
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
function (element, rowIndex, visibleColumnIndex) {
/** @type {?} */
var addedIndex = 0;
addedIndex = this.isColumnEditable(visibleColumnIndex + 1) ?
0 :
this.findNextEditable(MoveDirection.RIGHT, visibleColumnIndex + 1);
if (addedIndex === -1 && this.grid.rowEditTabs) { // no previous edit column -> go to RE buttons
this.grid.rowEditTabs.first.element.nativeElement.focus();
return;
}
/** @type {?} */
var editableIndex = visibleColumnIndex + 1 + addedIndex;
if (this.isColumnFullyVisible(editableIndex)) { // If column is fully visible
if (element.classList.contains('igx-grid__td--pinned-last')) { // If this is pinned
if (this.isColumnLeftFullyVisible(editableIndex)) { // If next column is fully visible LEFT
this.getCellElementByVisibleIndex(rowIndex, editableIndex).focus(); // focus
}
else { // if NOT fully visible, perform scroll
this.performHorizontalScrollToCell(rowIndex, editableIndex);
}
}
else { // cell is next cell
this.getCellElementByVisibleIndex(rowIndex, editableIndex).focus();
}
}
else {
this.performHorizontalScrollToCell(rowIndex, editableIndex);
}
};
/**
* @param {?} rowIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.onKeydownHome = /**
* @param {?} rowIndex
* @param {?=} isSummary
* @return {?}
*/
function (rowIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
/** @type {?} */
var rowList = isSummary ? this.grid.summariesRowList : this.grid.dataRowList;
/** @type {?} */
var rowElement = rowList.find(function (row) { return row.index === rowIndex; });
/** @type {?} */
var cellSelector = this.getCellSelector(0, isSummary);
if (!rowElement) {
return;
}
rowElement = rowElement.nativeElement;
/** @type {?} */
var firstCell = rowElement.querySelector(cellSelector);
if (this.grid.pinnedColumns.length || this.displayContainerScrollLeft === 0) {
firstCell.focus({ preventScroll: true });
}
else {
this.grid.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);
}
};
/**
* @param {?} rowIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.onKeydownEnd = /**
* @param {?} rowIndex
* @param {?=} isSummary
* @return {?}
*/
function (rowIndex, isSummary) {
var _this = this;
if (isSummary === void 0) { isSummary = false; }
/** @type {?} */
var index = this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex;
/** @type {?} */
var rowList = isSummary ? this.grid.summariesRowList : this.grid.dataRowList;
/** @type {?} */
var rowElement = rowList.find(function (row) { return row.index === rowIndex; });
if (!rowElement) {
return;
}
rowElement = rowElement.nativeElement;
if (this.isColumnFullyVisible(index)) {
/** @type {?} */
var allCells = rowElement.querySelectorAll(this.getCellSelector(-1, isSummary));
allCells[allCells.length - 1].focus({ preventScroll: true });
}
else {
this.grid.nativeElement.focus({ preventScroll: true });
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
/** @type {?} */
var allCells = rowElement.querySelectorAll(_this.getCellSelector(-1, isSummary));
allCells[allCells.length - 1].focus({ preventScroll: true });
});
this.horizontalScroll(rowIndex).scrollTo(this.getColumnUnpinnedIndex(index));
}
};
/**
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.navigateTop = /**
* @param {?} visibleColumnIndex
* @return {?}
*/
function (visibleColumnIndex) {
var _this = this;
/** @type {?} */
var verticalScroll = this.grid.verticalScrollContainer.getVerticalScroll();
/** @type {?} */
var cellSelector = this.getCellSelector(visibleColumnIndex);
if (verticalScroll.scrollTop === 0) {
/** @type {?} */
var cells = this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
cells[0].focus();
}
else {
this.grid.nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(0);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
/** @type {?} */
var cells = _this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
if (cells.length > 0) {
cells[0].focus();
}
});
}
};
/**
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.navigateBottom = /**
* @param {?} visibleColumnIndex
* @return {?}
*/
function (visibleColumnIndex) {
var _this = this;
/** @type {?} */
var verticalScroll = this.grid.verticalScrollContainer.getVerticalScroll();
/** @type {?} */
var cellSelector = this.getCellSelector(visibleColumnIndex);
if (verticalScroll.scrollHeight === 0 ||
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
/** @type {?} */
var cells = this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
cells[cells.length - 1].focus();
}
else {
this.grid.nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(this.grid.verticalScrollContainer.igxForOf.length - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
/** @type {?} */
var cells = _this.grid.nativeElement.querySelectorAll(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
if (cells.length > 0) {
cells[cells.length - 1].focus();
}
});
}
};
/**
* @param {?} rowElement
* @param {?} currentRowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.navigateUp = /**
* @param {?} rowElement
* @param {?} currentRowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
function (rowElement, currentRowIndex, visibleColumnIndex) {
var _this = this;
if (currentRowIndex === 0) {
return;
}
/** @type {?} */
var containerTopOffset = parseInt(this.verticalDisplayContainerElement.style.top, 10);
if (!rowElement.previousElementSibling ||
rowElement.previousElementSibling.offsetTop < Math.abs(containerTopOffset)) {
this.grid.nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(currentRowIndex - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first())
.subscribe(function () {
/** @type {?} */
var tag = rowElement.tagName.toLowerCase();
/** @type {?} */
var rowSelector = _this.getRowSelector();
if (tag === rowSelector || tag === 'igx-grid-summary-row') {
rowElement = _this.getRowByIndex(currentRowIndex, tag);
}
else {
rowElement = _this.grid.nativeElement.querySelector("igx-grid-groupby-row[data-rowindex=\"" + currentRowIndex + "\"]");
}
_this.focusPreviousElement(rowElement, visibleColumnIndex);
});
}
else {
this.focusPreviousElement(rowElement, visibleColumnIndex);
}
};
/**
* @protected
* @param {?} currentRowEl
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.focusPreviousElement = /**
* @protected
* @param {?} currentRowEl
* @param {?} visibleColumnIndex
* @return {?}
*/
function (currentRowEl, visibleColumnIndex) {
this.focusElem(currentRowEl.previousElementSibling, visibleColumnIndex);
};
/**
* @param {?} rowElement
* @param {?} currentRowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.navigateDown = /**
* @param {?} rowElement
* @param {?} currentRowIndex
* @param {?} visibleColumnIndex
* @return {?}
*/
function (rowElement, currentRowIndex, visibleColumnIndex) {
var _this = this;
if (currentRowIndex === this.grid.verticalScrollContainer.igxForOf.length - 1 ||
(currentRowIndex === 0 && rowElement.tagName.toLowerCase() === 'igx-grid-summary-row')) { // check if this is rootSummary row
return;
}
/** @type {?} */
var rowHeight = this.grid.verticalScrollContainer.getSizeAt(currentRowIndex + 1);
/** @type {?} */
var containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;
/** @type {?} */
var targetEndTopOffset = rowElement.nextElementSibling ?
rowElement.nextElementSibling.offsetTop + rowHeight + parseInt(this.verticalDisplayContainerElement.style.top, 10) :
containerHeight + rowHeight;
this.grid.nativeElement.focus({ preventScroll: true });
if (containerHeight && containerHeight < targetEndTopOffset) {
/** @type {?} */
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);
}
};
/**
* @protected
* @param {?} rowElement
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.focusElem = /**
* @protected
* @param {?} rowElement
* @param {?} visibleColumnIndex
* @return {?}
*/
function (rowElement, visibleColumnIndex) {
if (rowElement.tagName.toLowerCase() === 'igx-grid-groupby-row') {
rowElement.focus();
}
else {
/** @type {?} */
var isSummaryRow = rowElement.tagName.toLowerCase() === 'igx-grid-summary-row';
if (this.isColumnFullyVisible(visibleColumnIndex) && this.isColumnLeftFullyVisible(visibleColumnIndex)) {
/** @type {?} */
var cellSelector = this.getCellSelector(visibleColumnIndex, isSummaryRow);
/** @type {?} */
var cell = rowElement.querySelector(cellSelector + "[data-visibleIndex=\"" + visibleColumnIndex + "\"]");
if (cell) {
cell.focus();
}
return cell;
}
this.grid.nativeElement.focus({ preventScroll: true });
this.performHorizontalScrollToCell(parseInt(rowElement.getAttribute('data-rowindex'), 10), visibleColumnIndex, isSummaryRow);
}
};
/**
* @protected
* @param {?} rowElement
* @param {?} visibleColumnIndex
* @return {?}
*/
IgxGridNavigationService.prototype.focusNextElement = /**
* @protected
* @param {?} rowElement
* @param {?} visibleColumnIndex
* @return {?}
*/
function (rowElement, visibleColumnIndex) {
return this.focusElem(rowElement.nextElementSibling, visibleColumnIndex);
};
/**
* @return {?}
*/
IgxGridNavigationService.prototype.goToFirstCell = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var verticalScroll = this.grid.verticalScrollContainer.getVerticalScroll();
/** @type {?} */
var horizontalScroll = this.grid.dataRowList.first.virtDirRow.getHorizontalScroll();
if (verticalScroll.scrollTop === 0) {
this.onKeydownHome(this.grid.dataRowList.first.index);
}
else {
if (!horizontalScroll.clientWidth || parseInt(horizontalScroll.scrollLeft, 10) <= 1 || this.grid.pinnedColumns.length) {
this.navigateTop(0);
}
else {
this.grid.nativeElement.focus({ preventScroll: true });
this.horizontalScroll(this.grid.dataRowList.first.index).scrollTo(0);
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
_this.navigateTop(0);
});
}
}
};
/**
* @return {?}
*/
IgxGridNavigationService.prototype.goToLastCell = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var verticalScroll = this.grid.verticalScrollContainer.getVerticalScroll();
if (verticalScroll.scrollHeight === 0 ||
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
/** @type {?} */
var rows = this.getAllRows();
/** @type {?} */
var rowIndex = parseInt(rows[rows.length - 1].getAttribute('data-rowIndex'), 10);
this.onKeydownEnd(rowIndex);
}
else {
this.grid.nativeElement.focus({ preventScroll: true });
this.grid.verticalScrollContainer.scrollTo(this.grid.verticalScrollContainer.igxForOf.length - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
/** @type {?} */
var rows = _this.getAllRows();
if (rows.length > 0) {
/** @type {?} */
var rowIndex = parseInt(rows[rows.length - 1].getAttribute('data-rowIndex'), 10);
_this.onKeydownEnd(rowIndex);
}
});
}
};
/**
* @return {?}
*/
IgxGridNavigationService.prototype.goToLastBodyElement = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var verticalScroll = this.grid.verticalScrollContainer.getVerticalScroll();
if (verticalScroll.scrollHeight === 0 ||
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
/** @type {?} */
var rowIndex = this.grid.verticalScrollContainer.igxForOf.length - 1;
/** @type {?} */
var row = this.grid.nativeElement.querySelector("[data-rowindex=\"" + rowIndex + "\"]");
if (row && row.tagName.toLowerCase() === 'igx-grid-groupby-row') {
row.focus();
return;
}
/** @type {?} */
var isSummary = (row && row.tagName.toLowerCase() === 'igx-grid-summary-row') ? true : false;
this.onKeydownEnd(rowIndex, isSummary);
}
else {
this.grid.verticalScrollContainer.scrollTo(this.grid.verticalScrollContainer.igxForOf.length - 1);
this.grid.verticalScrollContainer.onChunkLoad
.pipe(first()).subscribe(function () {
/** @type {?} */
var rowIndex = _this.grid.verticalScrollContainer.igxForOf.length - 1;
/** @type {?} */
var row = _this.grid.nativeElement.querySelector("[data-rowindex=\"" + rowIndex + "\"]");
if (row && row.tagName.toLowerCase() === 'igx-grid-groupby-row') {
row.focus();
return;
}
/** @type {?} */
var isSummary = (row && row.tagName.toLowerCase() === 'igx-grid-summary-row') ? true : false;
_this.onKeydownEnd(rowIndex, isSummary);
});
}
};
/**
* @param {?} currentRowEl
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummaryRow
* @return {?}
*/
IgxGridNavigationService.prototype.performTab = /**
* @param {?} currentRowEl
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummaryRow
* @return {?}
*/
function (currentRowEl, rowIndex, visibleColumnIndex, isSummaryRow) {
if (isSummaryRow === void 0) { isSummaryRow = false; }
if (isSummaryRow && rowIndex === 0 &&
this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex) {
return;
}
if (this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex) {
if (this.isRowInEditMode(rowIndex)) {
this.grid.rowEditTabs.first.element.nativeElement.focus();
return;
}
/** @type {?} */
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.verticalScrollContainer.igxForOf.length - 1 && this.grid.rootSummariesEnabled) {
this.onKeydownHome(0, true);
return;
}
if (rowEl) {
this.navigateDown(currentRowEl, rowIndex, 0);
}
}
else {
/** @type {?} */
var cell = this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummaryRow);
if (cell) {
if (this.grid.rowEditable && this.isRowInEditMode(rowIndex)) {
this.moveNextEditable(cell, rowIndex, visibleColumnIndex);
return;
}
this.onKeydownArrowRight(cell, rowIndex, visibleColumnIndex, isSummaryRow);
}
}
};
/**
* @param {?=} toStart
* @return {?}
*/
IgxGridNavigationService.prototype.moveFocusToFilterCell = /**
* @param {?=} toStart
* @return {?}
*/
function (toStart) {
if (this.grid.filteringService.isFilterRowVisible) {
this.grid.filteringService.focusFilterRowCloseButton();
return;
}
/** @type {?} */
var columns = this.grid.filteringService.unpinnedFilterableColumns;
/** @type {?} */
var targetIndex = toStart ? 0 : columns.length - 1;
/** @type {?} */
var visibleIndex = columns[targetIndex].visibleIndex;
/** @type {?} */
var isVisible = toStart ? this.isColumnLeftFullyVisible(visibleIndex) : this.isColumnFullyVisible(visibleIndex);
if (isVisible) {
this.grid.filteringService.focusFilterCellChip(columns[targetIndex], false);
}
else {
this.grid.filteringService.scrollToFilterCell(columns[targetIndex], false);
}
};
/**
* @param {?} column
* @param {?} eventArgs
* @return {?}
*/
IgxGridNavigationService.prototype.navigatePrevFilterCell = /**
* @param {?} column
* @param {?} eventArgs
* @return {?}
*/
function (column, eventArgs) {
/** @type {?} */
var cols = this.grid.filteringService.unpinnedFilterableColumns;
/** @type {?} */
var prevFilterableIndex = cols.indexOf(column) - 1;
/** @type {?} */
var visibleIndex = column.visibleIndex;
if (visibleIndex === 0 || prevFilterableIndex < 0) {
// prev is not filter cell
/** @type {?} */
var firstFiltarableCol = this.getFirstPinnedFilterableColumn();
if (!firstFiltarableCol || column === firstFiltarableCol) {
eventArgs.preventDefault();
}
return;
}
/** @type {?} */
var prevColumn = cols[prevFilterableIndex];
/** @type {?} */
var prevVisibleIndex = prevColumn.visibleIndex;
if (prevFilterableIndex >= 0 && visibleIndex > 0 && !this.isColumnLeftFullyVisible(prevVisibleIndex) && !column.pinned) {
eventArgs.preventDefault();
this.grid.filteringService.scrollToFilterCell(prevColumn, false);
}
};
/**
* @param {?} eventArgs
* @return {?}
*/
IgxGridNavigationService.prototype.navigateFirstCellIfPossible = /**
* @param {?} eventArgs
* @return {?}
*/
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();
};
/**
* @param {?} column
* @param {?} eventArgs
* @return {?}
*/
IgxGridNavigationService.prototype.navigateNextFilterCell = /**
* @param {?} column
* @param {?} eventArgs
* @return {?}
*/
function (column, eventArgs) {
/** @type {?} */
var cols = this.grid.filteringService.unpinnedFilterableColumns;
/** @type {?} */
var nextFilterableIndex = cols.indexOf(column) + 1;
if (nextFilterableIndex >= this.grid.filteringService.unpinnedFilterableColumns.length) {
// next is not filter cell
this.navigateFirstCellIfPossible(eventArgs);
return;
}
/** @type {?} */
var nextColumn = cols[nextFilterableIndex];
/** @type {?} */
var nextVisibleIndex = nextColumn.visibleIndex;
if (!column.pinned && !this.isColumnFullyVisible(nextVisibleIndex)) {
eventArgs.preventDefault();
this.grid.filteringService.scrollToFilterCell(nextColumn, true);
}
else if (column === this.getLastPinnedFilterableColumn() && !this.isColumnFullyVisible(nextVisibleIndex)) {
this.grid.filteringService.scrollToFilterCell(nextColumn, false);
eventArgs.stopPropagation();
}
};
/**
* @private
* @return {?}
*/
IgxGridNavigationService.prototype.getLastPinnedFilterableColumn = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var pinnedFilterableColums = this.grid.pinnedColumns.filter(function (col) { return !(col.columnGroup) && col.filterable; });
return pinnedFilterableColums[pinnedFilterableColums.length - 1];
};
/**
* @private
* @return {?}
*/
IgxGridNavigationService.prototype.getFirstPinnedFilterableColumn = /**
* @private
* @return {?}
*/
function () {
return this.grid.pinnedColumns.filter(function (col) { return !(col.columnGroup) && col.filterable; })[0];
};
/**
* @param {?} currentRowEl
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.performShiftTabKey = /**
* @param {?} currentRowEl
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
function (currentRowEl, rowIndex, visibleColumnIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
if (isSummary && rowIndex === 0 && visibleColumnIndex === 0 && this.grid.rowList.length) {
this.goToLastBodyElement();
return;
}
if (visibleColumnIndex === 0) {
if (this.isRowInEditMode(rowIndex)) {
this.grid.rowEditTabs.last.element.nativeElement.focus();
return;
}
if (rowIndex === 0 && this.grid.allowFiltering && this.grid.filterMode === FilterMode.quickFilter) {
this.moveFocusToFilterCell();
}
else {
this.navigateUp(currentRowEl, rowIndex, this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex);
}
}
else {
/** @type {?} */
var cell = this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummary);
if (cell) {
if (this.grid.rowEditable && this.isRowInEditMode(rowIndex)) {
this.movePreviousEditable(rowIndex, visibleColumnIndex);
return;
}
this.onKeydownArrowLeft(cell, rowIndex, visibleColumnIndex, isSummary);
}
}
};
/**
* @param {?} targetRowIndex
* @return {?}
*/
IgxGridNavigationService.prototype.shouldPerformVerticalScroll = /**
* @param {?} targetRowIndex
* @return {?}
*/
function (targetRowIndex) {
/** @type {?} */
var containerTopOffset = parseInt(this.verticalDisplayContainerElement.style.top, 10);
/** @type {?} */
var targetRow = this.grid.summariesRowList.filter(function (s) { return s.index !== 0; })
.concat(this.grid.rowList.toArray()).find(function (r) { return r.index === targetRowIndex; });
/** @type {?} */
var rowHeight = this.grid.verticalScrollContainer.getSizeAt(targetRowIndex);
/** @type {?} */
var containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;
/** @type {?} */
var targetEndTopOffset = targetRow ? targetRow.nativeElement.offsetTop + rowHeight + containerTopOffset :
containerHeight + rowHeight;
if (!targetRow || targetRow.nativeElement.offsetTop < Math.abs(containerTopOffset)
|| containerHeight && containerHeight < targetEndTopOffset) {
return true;
}
else {
return false;
}
};
/**
* @private
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.performHorizontalScrollToCell = /**
* @private
* @param {?} rowIndex
* @param {?} visibleColumnIndex
* @param {?=} isSummary
* @return {?}
*/
function (rowIndex, visibleColumnIndex, isSummary) {
var _this = this;
if (isSummary === void 0) { isSummary = false; }
/** @type {?} */
var unpinnedIndex = this.getColumnUnpinnedIndex(visibleColumnIndex);
this.grid.nativeElement.focus({ preventScroll: true });
this.grid.parentVirtDir.onChunkLoad
.pipe(first())
.subscribe(function () {
_this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummary).focus({ preventScroll: true });
});
this.horizontalScroll(rowIndex).scrollTo(unpinnedIndex);
};
/**
* @protected
* @param {?} index
* @param {?=} selector
* @return {?}
*/
IgxGridNavigationService.prototype.getRowByIndex = /**
* @protected
* @param {?} index
* @param {?=} selector
* @return {?}
*/
function (index, selector) {
if (selector === void 0) { selector = this.getRowSelector(); }
return this.grid.nativeElement.querySelector(selector + "[data-rowindex=\"" + index + "\"]");
};
/**
* @protected
* @param {?} nextIndex
* @return {?}
*/
IgxGridNavigationService.prototype.getNextRowByIndex = /**
* @protected
* @param {?} nextIndex
* @return {?}
*/
function (nextIndex) {
return this.grid.tbody.nativeElement.querySelector("[data-rowindex=\"" + nextIndex + "\"]");
};
/**
* @private
* @return {?}
*/
IgxGridNavigationService.prototype.getAllRows = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var selector = this.getRowSelector();
return this.grid.nativeElement.querySelectorAll(selector);
};
/**
* @protected
* @param {?=} visibleIndex
* @param {?=} isSummary
* @return {?}
*/
IgxGridNavigationService.prototype.getCellSelector = /**
* @protected
* @param {?=} visibleIndex
* @param {?=} isSummary
* @return {?}
*/
function (visibleIndex, isSummary) {
if (isSummary === void 0) { isSummary = false; }
return isSummary ? 'igx-grid-summary-cell' : 'igx-grid-cell';
};
/**
* @protected
* @return {?}
*/
IgxGridNavigationService.prototype.getRowSelector = /**
* @protected
* @return {?}
*/
function () {
return 'igx-grid-row';
};
IgxGridNavigationService.decorators = [
{ type: Injectable }
];
return IgxGridNavigationService;
}());
export { IgxGridNavigationService };
if (false) {
/** @type {?} */
IgxGridNavigationService.prototype.grid;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2dyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXdCLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0lBR3RFLE1BQU8sTUFBTTtJQUNiLE9BQVEsT0FBTzs7Ozs7QUFJbkI7SUFBQTtJQWdsQkEsQ0FBQztJQTVrQkcsc0JBQUksMkRBQXFCOzs7O1FBQXpCO1lBQ0ksT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUcsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxnRUFBMEI7Ozs7UUFBOUI7WUFDSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLHFFQUErQjs7OztRQUFuQztZQUNJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzlGLENBQUM7OztPQUFBOzs7OztJQUVNLG1EQUFnQjs7OztJQUF2QixVQUF3QixRQUFROztZQUN4QixPQUFPLEdBQUcsSUFB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