UNPKG

@catull/igniteui-angular

Version:

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

693 lines 115 kB
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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