@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
575 lines • 107 kB
JavaScript
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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