UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

1,120 lines • 118 kB
/** * @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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