UNPKG

@catull/igniteui-angular

Version:

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

575 lines 107 kB
import { __decorate, __extends, __read, __spread } from "tslib"; import { Injectable } from '@angular/core'; import { first } from 'rxjs/operators'; import { IgxGridNavigationService } from './grid-navigation.service'; export var NavigationDirection; (function (NavigationDirection) { NavigationDirection["horizontal"] = "horizontal"; NavigationDirection["vertical"] = "vertical"; })(NavigationDirection || (NavigationDirection = {})); /** @hidden */ var IgxGridMRLNavigationService = /** @class */ (function (_super) { __extends(IgxGridMRLNavigationService, _super); function IgxGridMRLNavigationService() { return _super !== null && _super.apply(this, arguments) || this; } /** * @hidden * @internal */ IgxGridMRLNavigationService.prototype.setStartNavigationCell = function (colStart, rowStart, dir) { this.startNavigationCell = { colStart: colStart, rowStart: rowStart, direction: dir }; }; IgxGridMRLNavigationService.prototype.applyNavigationCell = function (colStart, rowStart, navDirection) { var oppositeDir = navDirection === NavigationDirection.vertical ? NavigationDirection.horizontal : NavigationDirection.vertical; if (this.startNavigationCell && this.startNavigationCell.direction !== navDirection) { this.startNavigationCell.direction = oppositeDir; } else { this.setStartNavigationCell(colStart, rowStart, oppositeDir); } return navDirection === NavigationDirection.vertical ? this.startNavigationCell.colStart : this.startNavigationCell.rowStart; }; IgxGridMRLNavigationService.prototype.navigateUp = function (rowElement, selectedNode) { this.focusCellUpFromLayout(rowElement, selectedNode); }; IgxGridMRLNavigationService.prototype.navigateDown = function (rowElement, selectedNode) { this.focusCellDownFromLayout(rowElement, selectedNode); }; IgxGridMRLNavigationService.prototype.isColumnRightEdgeVisible = function (visibleColumnIndex) { var column = this.grid.columnList.filter(function (c) { return !c.columnGroup; }).find(function (col) { return col.visibleIndex === visibleColumnIndex; }); var forOfDir = this.grid.headerContainer; var horizontalScroll = forOfDir.getScroll(); if (!horizontalScroll.clientWidth || (column && column.pinned)) { return true; } else if (column) { if (this.isParentColumnFullyVisible(column)) { return true; } var scrollPos = this.getChildColumnScrollPositions(visibleColumnIndex); return this.displayContainerWidth >= scrollPos.rightScroll - this.displayContainerScrollLeft && this.displayContainerScrollLeft <= scrollPos.leftScroll; } return false; }; IgxGridMRLNavigationService.prototype.isParentColumnFullyVisible = function (parent) { var forOfDir = this.grid.dataRowList.length > 0 ? this.grid.dataRowList.first.virtDirRow : this.grid.headerContainer; var horizontalScroll = forOfDir.getScroll(); if (!horizontalScroll.clientWidth || parent.pinned) { return true; } var index = forOfDir.igxForOf.indexOf(parent); return this.displayContainerWidth >= forOfDir.getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft && this.displayContainerScrollLeft <= forOfDir.getColumnScrollLeft(index); }; IgxGridMRLNavigationService.prototype.isColumnLeftEdgeVisible = function (visibleColumnIndex) { var forOfDir = this.grid.headerContainer; var horizontalScroll = forOfDir.getScroll(); var column = this.grid.columnList.filter(function (c) { return !c.columnGroup; }).find(function (col) { return col.visibleIndex === visibleColumnIndex; }); if (!horizontalScroll.clientWidth || column.pinned) { return true; } if (this.isParentColumnFullyVisible(column)) { return true; } var scrollPos = this.getChildColumnScrollPositions(visibleColumnIndex); return this.displayContainerScrollLeft <= scrollPos.leftScroll; }; IgxGridMRLNavigationService.prototype.onKeydownArrowRight = function (element, selectedNode) { this.focusNextCellFromLayout(element, selectedNode); }; IgxGridMRLNavigationService.prototype.onKeydownArrowLeft = function (element, selectedNode) { this.focusPrevCellFromLayout(element, selectedNode); }; Object.defineProperty(IgxGridMRLNavigationService.prototype, "gridOrderedColumns", { get: function () { return __spread(this.grid.pinnedColumns, this.grid.unpinnedColumns).filter(function (c) { return !c.columnGroup; }) .sort(function (a, b) { return a.visibleIndex - b.visibleIndex; }); }, enumerable: true, configurable: true }); IgxGridMRLNavigationService.prototype.performTab = function (currentRowEl, selectedNode) { var visibleColumnIndex = selectedNode.layout ? selectedNode.layout.columnVisibleIndex : 0; var nextElementColumn = this.grid.columns.find(function (x) { return !x.columnGroup && x.visibleIndex === visibleColumnIndex + 1; }); var rowIndex = selectedNode.row; var row = this.grid.getRowByIndex(rowIndex); this._moveFocusToCell(currentRowEl, nextElementColumn, row, selectedNode, 'next'); if (nextElementColumn) { this.setStartNavigationCell(nextElementColumn.colStart, nextElementColumn.rowStart, null); } }; IgxGridMRLNavigationService.prototype._moveFocusToCell = function (currentRowEl, nextElementColumn, row, selectedNode, dir) { var _this = this; if (nextElementColumn && row.cells) { var nextCell_1 = row.cells.find(function (currCell) { return currCell.column === nextElementColumn; }); var isVisible = this.isColumnRightEdgeVisible(nextElementColumn.visibleIndex); if (!nextCell_1 || !isVisible) { this.grid.nativeElement.focus({ preventScroll: true }); var cb = function () { nextCell_1 = row.cells.find(function (currCell) { return currCell.column === nextElementColumn; }); if (_this.grid.rowEditable && _this.isRowInEditMode(row.index)) { if (dir === 'next') { _this.moveNextEditable(row.index, selectedNode.layout.columnVisibleIndex); } else { _this.movePreviousEditable(row.index, selectedNode.layout.columnVisibleIndex); } return; } _this._focusCell(nextCell_1.nativeElement); }; this.performHorizontalScrollToCell(row.index, nextElementColumn.visibleIndex, false, cb); } else { if (this.grid.rowEditable && this.isRowInEditMode(row.index)) { if (dir === 'next') { this.moveNextEditable(row.index, selectedNode.layout.columnVisibleIndex); } else { this.movePreviousEditable(row.index, selectedNode.layout.columnVisibleIndex); } return; } this._focusCell(nextCell_1.nativeElement); } } else { // end of layout reached if (this.isRowInEditMode(row.index)) { // TODO: make gridAPI visible for internal use and remove cast to any this.grid.gridAPI.submit_value(); if (dir === 'next') { this.grid.rowEditTabs.first.element.nativeElement.focus(); } else { this.grid.rowEditTabs.last.element.nativeElement.focus(); } return; } if (dir === 'next') { _super.prototype.navigateDown.call(this, currentRowEl, { row: row.index, column: 0 }); } else { var lastVisibleIndex_1 = 0; this.grid.unpinnedColumns.forEach(function (col) { lastVisibleIndex_1 = Math.max(lastVisibleIndex_1, col.visibleIndex); }); _super.prototype.navigateUp.call(this, currentRowEl, { row: row.index, column: lastVisibleIndex_1 }); } } }; IgxGridMRLNavigationService.prototype.performShiftTabKey = function (currentRowEl, selectedNode) { var visibleColumnIndex = selectedNode.layout ? selectedNode.layout.columnVisibleIndex : 0; var rowIndex = selectedNode.row; var row = this.grid.getRowByIndex(rowIndex); var prevElementColumn = this.grid.columns.find(function (x) { return !x.columnGroup && x.visibleIndex === visibleColumnIndex - 1 && !x.hidden; }); this._moveFocusToCell(currentRowEl, prevElementColumn, row, selectedNode, 'prev'); if (prevElementColumn) { this.setStartNavigationCell(prevElementColumn.colStart, prevElementColumn.rowStart, null); } }; IgxGridMRLNavigationService.prototype.focusCellUpFromLayout = function (rowElement, selectedNode) { var _this = this; var isNonDataRow = rowElement.tagName.toLowerCase() === 'igx-grid-groupby-row' || this._isDetailRecordAt(selectedNode.row); var currentRowStart = selectedNode.layout ? selectedNode.layout.rowStart : 1; var currentColStart = this.applyNavigationCell(selectedNode.layout ? selectedNode.layout.colStart : 1, currentRowStart, NavigationDirection.vertical); var parentIndex = selectedNode.column; var columnLayout = this.grid.columns.find(function (x) { return x.columnLayout && x.visibleIndex === parentIndex; }); var movePrev; // check if element up is from the same layout var upperElementColumn = columnLayout.children.find(function (c) { return (c.rowEnd === currentRowStart || c.rowStart + c.gridRowSpan === currentRowStart) && c.colStart <= currentColStart && (currentColStart < c.colEnd || currentColStart < c.colStart + c.gridColumnSpan); }); if (isNonDataRow || !upperElementColumn) { // no prev row in current row layout, go to next row last rowstart var layoutRowEnd_1 = this.grid.multiRowLayoutRowSize + 1; upperElementColumn = columnLayout.children.find(function (c) { return (c.rowEnd === layoutRowEnd_1 || c.rowStart + c.gridRowSpan === layoutRowEnd_1) && c.colStart <= currentColStart && (currentColStart < c.colEnd || currentColStart < c.colStart + c.gridColumnSpan); }); movePrev = true; } var rowIndex = movePrev ? selectedNode.row - 1 : selectedNode.row; if (rowIndex < 0) { // end of rows reached. return; } var prevRow; var cb = function () { prevRow = _this.grid.getRowByIndex(rowIndex); if (prevRow && prevRow.cells) { _this._focusCell(upperElementColumn.cells.find(function (c) { return c.rowIndex === prevRow.index; }).nativeElement); } else if (prevRow) { prevRow.nativeElement.focus({ preventScroll: true }); } else { var prevElem = _this.getRowByIndex(rowIndex, ''); prevElem.focus({ preventScroll: true }); } }; if (this.shouldPerformVerticalScroll(rowIndex, upperElementColumn.visibleIndex)) { this.grid.nativeElement.focus({ preventScroll: true }); this.performVerticalScrollToCell(rowIndex, upperElementColumn.visibleIndex, cb); } else { cb(); } }; IgxGridMRLNavigationService.prototype.focusCellDownFromLayout = function (rowElement, selectedNode) { var _this = this; var isNonDataRow = rowElement.tagName.toLowerCase() === 'igx-grid-groupby-row' || this._isDetailRecordAt(selectedNode.row); var parentIndex = selectedNode.column; var columnLayout = this.grid.columns.find(function (x) { return x.columnLayout && x.visibleIndex === parentIndex; }); var currentRowEnd = selectedNode.layout ? selectedNode.layout.rowEnd || selectedNode.layout.rowStart + 1 : 2; var currentColStart = this.applyNavigationCell(selectedNode.layout ? selectedNode.layout.colStart : 1, selectedNode.layout ? selectedNode.layout.rowStart : 1, NavigationDirection.vertical); var moveNext; // check if element down is from the same layout var nextElementColumn = columnLayout.children.find(function (c) { return c.rowStart === currentRowEnd && c.colStart <= currentColStart && (currentColStart < c.colEnd || currentColStart < c.colStart + c.gridColumnSpan); }); if (isNonDataRow || !nextElementColumn) { // no next row in current row layout, go to next row first rowstart nextElementColumn = columnLayout.children.find(function (c) { return c.rowStart === 1 && c.colStart <= currentColStart && (currentColStart < c.colEnd || currentColStart < c.colStart + c.gridColumnSpan); }); moveNext = true; } var rowIndex = moveNext ? selectedNode.row + 1 : selectedNode.row; if (rowIndex > this.grid.dataView.length - 1) { // end of rows reached. return; } var nextRow; var cb = function () { nextRow = _this.grid.getRowByIndex(rowIndex); if (nextRow && nextRow.cells) { _this._focusCell(nextElementColumn.cells.find(function (c) { return c.rowIndex === nextRow.index; }).nativeElement); } else if (nextRow) { nextRow.nativeElement.focus({ preventScroll: true }); } else { var nextElem = _this.getRowByIndex(rowIndex, ''); nextElem.focus({ preventScroll: true }); } }; if (this.shouldPerformVerticalScroll(rowIndex, nextElementColumn.visibleIndex)) { this.grid.nativeElement.focus({ preventScroll: true }); this.performVerticalScrollToCell(rowIndex, nextElementColumn.visibleIndex, cb); } else { cb(); } }; IgxGridMRLNavigationService.prototype.focusNextCellFromLayout = function (cellElement, selectedNode) { var _this = this; var parentIndex = selectedNode.column; var columnLayout = this.grid.columns.find(function (x) { return x.columnLayout && x.visibleIndex === parentIndex; }); var currentColEnd = selectedNode.layout.colEnd || selectedNode.layout.colStart + 1; var currentRowStart = this.applyNavigationCell(selectedNode.layout.colStart, selectedNode.layout.rowStart, NavigationDirection.horizontal); var rowIndex = selectedNode.row; // check if next element is from the same layout var nextElementColumn = columnLayout.children.find(function (c) { return c.colStart === currentColEnd && c.rowStart <= currentRowStart && (currentRowStart < c.rowEnd || currentRowStart < c.rowStart + c.gridRowSpan); }); if (!nextElementColumn) { // no next column in current layout, search for next layout columnLayout = this.grid.columns.find(function (c) { return c.columnLayout && !c.hidden && c.visibleIndex === columnLayout.visibleIndex + 1; }); if (!columnLayout) { // reached the end return null; } // next element is from the next layout nextElementColumn = columnLayout.children.find(function (c) { return c.colStart === 1 && c.rowStart <= currentRowStart && (currentRowStart < c.rowEnd || currentRowStart < c.rowStart + c.gridRowSpan); }); } var cb = function () { var nextElement = nextElementColumn.cells.find(function (c) { return c.rowIndex === rowIndex; }).nativeElement; _this._focusCell(nextElement); }; if (!this.isColumnRightEdgeVisible(nextElementColumn.visibleIndex)) { this.grid.nativeElement.focus({ preventScroll: true }); this.performHorizontalScrollToCell(rowIndex, nextElementColumn.visibleIndex, false, cb); } else { cb(); } }; IgxGridMRLNavigationService.prototype.focusPrevCellFromLayout = function (cellElement, selectedNode) { var _this = this; var parentIndex = selectedNode.column; var columnLayout = this.grid.columns.find(function (x) { return x.columnLayout && x.visibleIndex === parentIndex; }); var currentColStart = selectedNode.layout.colStart; var currentRowStart = this.applyNavigationCell(currentColStart, selectedNode.layout.rowStart, NavigationDirection.horizontal); var rowIndex = selectedNode.row; // check previous element is from the same layout var prevElementColumn = columnLayout.children .find(function (c) { return (c.colEnd === currentColStart || c.colStart + c.gridColumnSpan === currentColStart) && c.rowStart <= currentRowStart && (currentRowStart < c.rowEnd || currentRowStart < c.rowStart + c.gridRowSpan); }); if (!prevElementColumn) { // no prev column in current layout, seacrh for prev layout columnLayout = this.grid.columns.find(function (c) { return c.columnLayout && !c.hidden && c.visibleIndex === columnLayout.visibleIndex - 1; }); if (!columnLayout) { // reached the end return null; } var layoutSize_1 = columnLayout.getInitialChildColumnSizes(columnLayout.children).length; // first element is from the next layout prevElementColumn = columnLayout.children .find(function (c) { return (c.colEnd === layoutSize_1 + 1 || c.colStart + c.gridColumnSpan === layoutSize_1 + 1) && c.rowStart <= currentRowStart && (currentRowStart < c.rowEnd || currentRowStart < c.rowStart + c.gridRowSpan); }); } var cb = function () { var prevElement = prevElementColumn.cells.find(function (c) { return c.rowIndex === rowIndex; }).nativeElement; _this._focusCell(prevElement); }; if (!this.isColumnLeftEdgeVisible(prevElementColumn.visibleIndex)) { this.grid.nativeElement.focus({ preventScroll: true }); this.performHorizontalScrollToCell(rowIndex, prevElementColumn.visibleIndex, false, cb); } else { cb(); } }; IgxGridMRLNavigationService.prototype.onKeydownEnd = function (rowIndex, isSummary, cellRowStart) { var _this = this; if (isSummary === void 0) { isSummary = false; } var layouts = this.grid.columns.filter(function (c) { return c.columnLayout && !c.hidden; }).sort(function (a, b) { return a.visibleIndex - b.visibleIndex; }); var lastLayout = layouts[layouts.length - 1]; var lastLayoutChildren = lastLayout.children; var layoutSize = lastLayout.getInitialChildColumnSizes(lastLayoutChildren).length; var currentRowStart = this.applyNavigationCell(this.startNavigationCell ? this.startNavigationCell.colStart : 1, cellRowStart || this.grid.multiRowLayoutRowSize, NavigationDirection.horizontal); var nextElementColumn = lastLayout.children.find(function (c) { return (c.colEnd === layoutSize + 1 || c.colStart + c.gridColumnSpan === layoutSize + 1) && c.rowStart <= currentRowStart && (currentRowStart < c.rowEnd || currentRowStart < c.rowStart + c.gridRowSpan); }); var indexInLayout = lastLayoutChildren.toArray().indexOf(nextElementColumn); 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(nextElementColumn.visibleIndex)) { this.grid.nativeElement.focus({ preventScroll: true }); var cb = function () { var allBlocks = rowElement.querySelectorAll(_this.getColumnLayoutSelector()); var cell = allBlocks[allBlocks.length - 1].children[indexInLayout]; _this._focusCell(cell); }; this.performHorizontalScrollToCell(rowIndex, nextElementColumn.visibleIndex, false, cb); return; } else { var allBlocks = rowElement.querySelectorAll(this.getColumnLayoutSelector()); var cell = allBlocks[allBlocks.length - 1].children[indexInLayout]; this._focusCell(cell); } }; IgxGridMRLNavigationService.prototype.onKeydownHome = function (rowIndex, isSummary, cellRowStart) { var _this = this; if (isSummary === void 0) { isSummary = false; } if (cellRowStart === void 0) { cellRowStart = 1; } var firstLayout = this.grid.columns.filter(function (c) { return c.columnLayout && !c.hidden; })[0]; var lastLayoutChildren = firstLayout.children.toArray(); var currentRowStart = this.applyNavigationCell(this.startNavigationCell ? this.startNavigationCell.colStart : 1, cellRowStart, NavigationDirection.horizontal); var nextElementColumn = firstLayout.children.find(function (c) { return c.colStart === 1 && c.rowStart <= currentRowStart && (currentRowStart < c.rowEnd || currentRowStart < c.rowStart + c.gridRowSpan); }); var indexInLayout = lastLayoutChildren.indexOf(nextElementColumn); 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.isColumnLeftEdgeVisible(nextElementColumn.visibleIndex)) { this.grid.nativeElement.focus({ preventScroll: true }); var cb = function () { var allBlocks = rowElement.querySelectorAll(_this.getColumnLayoutSelector()); var cell = allBlocks[0].children[indexInLayout]; _this._focusCell(cell); }; this.performHorizontalScrollToCell(rowIndex, nextElementColumn.visibleIndex, false, cb); return; } else { var allBlocks = rowElement.querySelectorAll(this.getColumnLayoutSelector()); var cell = allBlocks[0].children[indexInLayout]; this._focusCell(cell); } }; IgxGridMRLNavigationService.prototype.getColumnLayoutSelector = function () { return '.igx-grid__mrl-block'; }; IgxGridMRLNavigationService.prototype.getChildColumnScrollPositions = function (visibleColIndex) { var forOfDir = this.grid.dataRowList.length > 0 ? this.grid.dataRowList.first.virtDirRow : this.grid.headerContainer; var targetCol = this.getColunmByVisibleIndex(visibleColIndex); var parent = targetCol.parent; var parentVIndex = forOfDir.igxForOf.indexOf(parent); var leftScroll = forOfDir.getColumnScrollLeft(parentVIndex), rightScroll = 0; // caculate offset from parent based on target column colStart and colEnd and the resolved child column sizes. var childSizes = parent.getFilledChildColumnSizes(parent.children); var colStart = targetCol.colStart || 1; var colEnd = targetCol.colEnd || colStart + 1; for (var i = 1; i < colStart; i++) { leftScroll += parseInt(childSizes[i - 1], 10); } rightScroll += leftScroll; for (var j = colStart; j < colEnd; j++) { rightScroll += parseInt(childSizes[j - 1], 10); } return { leftScroll: leftScroll, rightScroll: rightScroll }; }; IgxGridMRLNavigationService.prototype.getColunmByVisibleIndex = function (visibleColIndex) { visibleColIndex = visibleColIndex < 0 ? 0 : visibleColIndex; return this.grid.columnList.find(function (col) { return !col.columnLayout && col.visibleIndex === visibleColIndex; }); }; IgxGridMRLNavigationService.prototype.shouldPerformVerticalScroll = function (rowIndex, visibleColumnIndex) { if (this._isGroupRecordAt(rowIndex) || this._isDetailRecordAt(rowIndex)) { return _super.prototype.shouldPerformVerticalScroll.call(this, rowIndex, visibleColumnIndex); } if (!_super.prototype.shouldPerformVerticalScroll.call(this, rowIndex, visibleColumnIndex)) { return false; } var targetRow = this.grid.summariesRowList.filter(function (s) { return s.index !== 0; }) .concat(this.grid.rowList.toArray()).find(function (r) { return r.index === rowIndex; }); var scrollTop = Math.abs(this.grid.verticalScrollContainer.getScroll().scrollTop); var containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0; var scrollPos = this.getVerticalScrollPositions(rowIndex, visibleColumnIndex); if (!targetRow || targetRow.nativeElement.offsetTop + scrollPos.topOffset < Math.abs(this.verticalDCTopOffset) || containerHeight && containerHeight < scrollPos.rowBottom - scrollTop) { return true; } else { return false; } }; Object.defineProperty(IgxGridMRLNavigationService.prototype, "verticalDCTopOffset", { get: function () { return parseInt(this.grid.verticalScrollContainer.dc.instance._viewContainer.element.nativeElement.style.top, 10); }, enumerable: true, configurable: true }); IgxGridMRLNavigationService.prototype._isGroupRecordAt = function (rowIndex) { var record = this.grid.dataView[rowIndex]; return record.records && record.records.length; }; IgxGridMRLNavigationService.prototype._isDetailRecordAt = function (rowIndex) { var record = this.grid.dataView[rowIndex]; return this.grid.isDetailRecord(record); }; IgxGridMRLNavigationService.prototype.performVerticalScrollToCell = function (rowIndex, visibleColumnIndex, cb) { if (this._isGroupRecordAt(rowIndex) || this._isDetailRecordAt(rowIndex)) { return _super.prototype.performVerticalScrollToCell.call(this, rowIndex, visibleColumnIndex, cb); } var containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0; var scrollTop = Math.abs(this.grid.verticalScrollContainer.getScroll().scrollTop); var scrollPos = this.getVerticalScrollPositions(rowIndex, visibleColumnIndex); var targetRow = this.grid.summariesRowList.filter(function (s) { return s.index !== 0; }) .concat(this.grid.rowList.toArray()).find(function (r) { return r.index === rowIndex; }); var isPrevious = (scrollTop > scrollPos.rowTop) && (!targetRow || targetRow.nativeElement.offsetTop + scrollPos.topOffset < Math.abs(this.verticalDCTopOffset)); var scrollAmount = isPrevious ? scrollPos.rowTop : Math.abs(scrollTop + containerHeight - scrollPos.rowBottom); this.grid.verticalScrollContainer.onChunkLoad .pipe(first()).subscribe(function () { cb(); }); if (isPrevious) { this.grid.verticalScrollContainer.scrollPosition = scrollAmount; } else { this.grid.verticalScrollContainer.addScrollTop(scrollAmount); } }; IgxGridMRLNavigationService.prototype.getVerticalScrollPositions = function (rowIndex, visibleColIndex) { var targetCol = this.getColunmByVisibleIndex(visibleColIndex); var topOffset = (targetCol.rowStart - 1) * this.grid.defaultRowHeight; var rowTop = this.grid.verticalScrollContainer.sizesCache[rowIndex] + topOffset; var rowBottom = rowTop + (this.grid.defaultRowHeight * targetCol.gridRowSpan); return { rowTop: rowTop, rowBottom: rowBottom, topOffset: topOffset }; }; IgxGridMRLNavigationService.prototype.performHorizontalScrollToCell = function (rowIndex, visibleColumnIndex, isSummary, cb) { var _this = this; if (isSummary === void 0) { isSummary = false; } var scrollPos = this.getChildColumnScrollPositions(visibleColumnIndex); var hScroll = this.horizontalScroll(rowIndex); this.grid.parentVirtDir.onChunkLoad .pipe(first()) .subscribe(function () { if (cb) { cb(); } else { _this._focusCell(_this.getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummary)); } }); var isPrevItem = hScroll.getScroll().scrollLeft > scrollPos.leftScroll; var containerSize = parseInt(hScroll.igxForContainerSize, 10); var nextScroll = isPrevItem ? scrollPos.leftScroll : scrollPos.rightScroll - containerSize; hScroll.scrollPosition = nextScroll; }; IgxGridMRLNavigationService.prototype._focusCell = function (cellElem) { // in case of variable row heights in mrl grid make sure cell is really in view after it has been rendered. var gridBoundingClientRect = this.grid.tbody.nativeElement.getBoundingClientRect(); var diffTop = cellElem.getBoundingClientRect().top - gridBoundingClientRect.top; var diffBottom = cellElem.getBoundingClientRect().bottom - gridBoundingClientRect.bottom; if (diffTop < 0) { // cell is above grid top - not visible this.grid.nativeElement.focus({ preventScroll: true }); this.grid.verticalScrollContainer.onChunkLoad .pipe(first()) .subscribe(function () { cellElem.focus({ preventScroll: true }); }); this.grid.verticalScrollContainer.addScrollTop(diffTop); } else if (diffBottom > 0) { // cell is below grid bottom - not visible this.grid.nativeElement.focus({ preventScroll: true }); this.grid.verticalScrollContainer.onChunkLoad .pipe(first()) .subscribe(function () { cellElem.focus({ preventScroll: true }); }); this.grid.verticalScrollContainer.addScrollTop(diffBottom); } else { // cell is visible cellElem.focus({ preventScroll: true }); } }; IgxGridMRLNavigationService.prototype.goToFirstCell = function () { this.startNavigationCell = null; _super.prototype.goToFirstCell.call(this); }; IgxGridMRLNavigationService.prototype.goToLastCell = function () { this.startNavigationCell = null; _super.prototype.goToLastCell.call(this); }; IgxGridMRLNavigationService = __decorate([ Injectable() ], IgxGridMRLNavigationService); return IgxGridMRLNavigationService; }(IgxGridNavigationService)); export { IgxGridMRLNavigationService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tcmwtbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9ncmlkLW1ybC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVXJFLE1BQU0sQ0FBTixJQUFZLG1CQUdYO0FBSEQsV0FBWSxtQkFBbUI7SUFDM0IsZ0RBQXlCLENBQUE7SUFDekIsNENBQXFCLENBQUE7QUFDekIsQ0FBQyxFQUhXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFHOUI7QUFHRCxjQUFjO0FBRWQ7SUFBaUQsK0NBQXdCO0lBQXpFOztJQTBpQkEsQ0FBQztJQXBpQkc7OztPQUdHO0lBQ0ksNERBQXNCLEdBQTdCLFVBQThCLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxHQUF3QjtRQUN0RixJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDdkIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsU0FBUyxFQUFFLEdBQUc7U0FDakIsQ0FBQztJQUNOLENBQUM7SUFFTyx5REFBbUIsR0FBM0IsVUFBNEIsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFlBQWlDO1FBQzdGLElBQU0sV0FBVyxHQUFHLFlBQVksS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUNsRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxLQUFLLFlBQVksRUFBRTtZQUNqRixJQUFJ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