diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fae64cefcd..8b61f3e9bd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -81,6 +81,7 @@ For more information about the theming please read our [documentation](https://w - `isCellSelected` method has been deprecated. Now you can use `selected` property. - `rowSelectable` property has been deprecated. Now you can use `rowSelection` property to enable row selection and also you can show and hide the row selectors by setting `hideRowSelectors` property to true or false (which is the default value). - Removed deprecated event `OnFocusChange` + - `IgxGridBaseComponent` exposes a new property, `dataView` that returns the currently transformed paged/filtered/sorted/grouped data, displayed in the grid - **Breaking Change** `igxExcelStyleSortingTemplate` directive is renamed to `igxExcelStyleSorting`. - **Breaking Change** `igxExcelStyleMovingTemplate` directive is renamed to `igxExcelStyleMoving`. - **Breaking Change** `igxExcelStyleHidingTemplate` directive is renamed to `igxExcelStyleHiding`. diff --git a/projects/igniteui-angular/src/lib/grids/common/grid.interface.ts b/projects/igniteui-angular/src/lib/grids/common/grid.interface.ts index fe90470636d..ba18c9a1ceb 100644 --- a/projects/igniteui-angular/src/lib/grids/common/grid.interface.ts +++ b/projects/igniteui-angular/src/lib/grids/common/grid.interface.ts @@ -25,6 +25,7 @@ export interface GridType { pinnedColumns: any; summariesRowList: any; headerContainer: any; + dataView: any[]; rowInEditMode: any; rowEditTabs: any; diff --git a/projects/igniteui-angular/src/lib/grids/grid-base.component.ts b/projects/igniteui-angular/src/lib/grids/grid-base.component.ts index 414e541a6cf..957f32d45b4 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-base.component.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-base.component.ts @@ -4633,8 +4633,8 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements public hasVerticalSroll() { if (this._init) { return false; } const isScrollable = this.verticalScrollContainer ? this.verticalScrollContainer.isScrollable() : false; - return !!(this.calcWidth && this.verticalScrollContainer.igxForOf && - this.verticalScrollContainer.igxForOf.length > 0 && + return !!(this.calcWidth && this.dataView && + this.dataView.length > 0 && isScrollable); } @@ -5000,6 +5000,17 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements return 0; } + /** + * Returns the currently transformed paged/filtered/sorted/grouped data, displayed in the grid. + * ```typescript + * const dataView = this.grid.dataView; + * ``` + * @memberof IgxGridComponent + */ + get dataView(): any[] { + return this.verticalScrollContainer.igxForOf; + } + /** * Get current selection state. * Returns an array with selected rows' IDs (primaryKey or rowData) @@ -5218,7 +5229,7 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements * If `headers` is enabled, it will use the column header (if any) instead of the column field. */ getSelectedData(formatters = false, headers = false) { - const source = this.verticalScrollContainer.igxForOf; + const source = this.dataView; return this.extractDataFromSelection(source, formatters, headers); } @@ -5287,12 +5298,12 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements * @memberof IgxGridBaseComponent */ public navigateTo(rowIndex: number, visibleColIndex = -1, cb: Function = null) { - if (rowIndex < 0 || rowIndex > this.verticalScrollContainer.igxForOf.length - 1 + if (rowIndex < 0 || rowIndex > this.dataView.length - 1 || (visibleColIndex !== -1 && this.columnList.map(col => col.visibleIndex).indexOf(visibleColIndex) === -1)) { return; } this.wheelHandler(); - if (this.verticalScrollContainer.igxForOf.slice(rowIndex, rowIndex + 1).find(rec => rec.expression || rec.childGridsData)) { + if (this.dataView.slice(rowIndex, rowIndex + 1).find(rec => rec.expression || rec.childGridsData)) { visibleColIndex = -1; } if (visibleColIndex === -1 || this.navigation.isColumnFullyVisible(visibleColIndex)) { @@ -5328,7 +5339,7 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements const colIndexes = callback ? columns.filter((col) => callback(col)).map(editCol => editCol.visibleIndex).sort((a, b) => a - b) : columns.map(editCol => editCol.visibleIndex).sort((a, b) => a - b); const nextCellIndex = colIndexes.find(index => index > curVisibleColIndex); - if (this.verticalScrollContainer.igxForOf.slice(currRowIndex, currRowIndex + 1) + if (this.dataView.slice(currRowIndex, currRowIndex + 1) .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData) && nextCellIndex !== undefined) { return { rowIndex: currRowIndex, visibleColumnIndex: nextCellIndex }; } else { @@ -5360,7 +5371,7 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements const colIndexes = callback ? columns.filter((col) => callback(col)).map(editCol => editCol.visibleIndex).sort((a, b) => b - a) : columns.map(editCol => editCol.visibleIndex).sort((a, b) => b - a); const prevCellIndex = colIndexes.find(index => index < curVisibleColIndex); - if (this.verticalScrollContainer.igxForOf.slice(currRowIndex, currRowIndex + 1) + if (this.dataView.slice(currRowIndex, currRowIndex + 1) .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData) && prevCellIndex !== undefined) { return { rowIndex: currRowIndex, visibleColumnIndex: prevCellIndex }; } else { @@ -5403,24 +5414,24 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements private getPrevDataRowIndex(currentRowIndex): number { if (currentRowIndex <= 0) { return currentRowIndex; } - const prevRow = this.verticalScrollContainer.igxForOf.slice(0, currentRowIndex).reverse() + const prevRow = this.dataView.slice(0, currentRowIndex).reverse() .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData); - return prevRow ? this.verticalScrollContainer.igxForOf.indexOf(prevRow) : currentRowIndex; + return prevRow ? this.dataView.indexOf(prevRow) : currentRowIndex; } private getNextDataRowIndex(currentRowIndex): number { - if (currentRowIndex === this.verticalScrollContainer.igxForOf.length) { return currentRowIndex; } + if (currentRowIndex === this.dataView.length) { return currentRowIndex; } - const nextRow = this.verticalScrollContainer.igxForOf.slice(currentRowIndex + 1, this.verticalScrollContainer.igxForOf.length) + const nextRow = this.dataView.slice(currentRowIndex + 1, this.dataView.length) .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData); - return nextRow ? this.verticalScrollContainer.igxForOf.indexOf(nextRow) : currentRowIndex; + return nextRow ? this.dataView.indexOf(nextRow) : currentRowIndex; } private isValidPosition(rowIndex, colIndex): boolean { const rows = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).length; const cols = this.columnList.filter(col => !col.columnGroup && col.visibleIndex >= 0).length; if (rows < 1 || cols < 1) { return false; } - if (rowIndex > -1 && rowIndex < this.verticalScrollContainer.igxForOf.length && + if (rowIndex > -1 && rowIndex < this.dataView.length && colIndex > - 1 && colIndex <= this.unpinnedColumns[this.unpinnedColumns.length - 1].visibleIndex) { return true; } @@ -5617,11 +5628,11 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements if (delayScrolling) { this.verticalScrollContainer.onDataChanged.pipe(first()).subscribe(() => { this.scrollDirective(this.verticalScrollContainer, - typeof (row) === 'number' ? row : this.verticalScrollContainer.igxForOf.indexOf(row)); + typeof (row) === 'number' ? row : this.dataView.indexOf(row)); }); } else { this.scrollDirective(this.verticalScrollContainer, - typeof (row) === 'number' ? row : this.verticalScrollContainer.igxForOf.indexOf(row)); + typeof (row) === 'number' ? row : this.dataView.indexOf(row)); } this.scrollToHorizontally(column); diff --git a/projects/igniteui-angular/src/lib/grids/grid-mrl-navigation.service.ts b/projects/igniteui-angular/src/lib/grids/grid-mrl-navigation.service.ts index 3eff15e7133..dac709b9091 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-mrl-navigation.service.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-mrl-navigation.service.ts @@ -249,7 +249,7 @@ export class IgxGridMRLNavigationService extends IgxGridNavigationService { moveNext = true; } const rowIndex = moveNext ? selectedNode.row + 1 : selectedNode.row; - if (rowIndex > this.grid.verticalScrollContainer.igxForOf.length - 1) { + if (rowIndex > this.grid.dataView.length - 1) { // end of rows reached. return; } @@ -469,7 +469,7 @@ export class IgxGridMRLNavigationService extends IgxGridNavigationService { } private _isGroupRecordAt(rowIndex: number) { - const record = this.grid.verticalScrollContainer.igxForOf[rowIndex]; + const record = this.grid.dataView[rowIndex]; return record.records && record.records.length; } diff --git a/projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts b/projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts index 047e5ab47af..5d3ee042462 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts @@ -267,7 +267,7 @@ export class IgxGridNavigationService { (cells[cells.length - 1] as HTMLElement).focus(); } else { this.getFocusableGrid().nativeElement.focus({ preventScroll: true }); - this.grid.verticalScrollContainer.scrollTo(this.grid.verticalScrollContainer.igxForOf.length - 1); + this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1); this.grid.verticalScrollContainer.onChunkLoad .pipe(first()).subscribe(() => { const cells = this.grid.nativeElement.querySelectorAll( @@ -315,7 +315,7 @@ export class IgxGridNavigationService { public navigateDown(rowElement, selectedNode: ISelectionNode) { const currentRowIndex = selectedNode.row; const visibleColumnIndex = selectedNode.column; - if (currentRowIndex === this.grid.verticalScrollContainer.igxForOf.length - 1 || + if (currentRowIndex === this.grid.dataView.length - 1 || (currentRowIndex === 0 && rowElement.tagName.toLowerCase() === 'igx-grid-summary-row')) { // check if this is rootSummary row return; @@ -389,7 +389,7 @@ export class IgxGridNavigationService { this.onKeydownEnd(rowIndex); } else { this.getFocusableGrid().nativeElement.focus({ preventScroll: true }); - this.grid.verticalScrollContainer.scrollTo(this.grid.verticalScrollContainer.igxForOf.length - 1); + this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1); this.grid.verticalScrollContainer.onChunkLoad .pipe(first()).subscribe(() => { const rows = this.getAllRows(); @@ -405,7 +405,7 @@ export class IgxGridNavigationService { const verticalScroll = this.grid.verticalScrollContainer.getVerticalScroll(); if (verticalScroll.scrollHeight === 0 || verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) { - const rowIndex = this.grid.verticalScrollContainer.igxForOf.length - 1; + const rowIndex = this.grid.dataView.length - 1; const row = this.grid.nativeElement.querySelector(`[data-rowindex="${rowIndex}"]`) as HTMLElement; if (row && row.tagName.toLowerCase() === 'igx-grid-groupby-row') { row.focus(); @@ -414,10 +414,10 @@ export class IgxGridNavigationService { const 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.scrollTo(this.grid.dataView.length - 1); this.grid.verticalScrollContainer.onChunkLoad .pipe(first()).subscribe(() => { - const rowIndex = this.grid.verticalScrollContainer.igxForOf.length - 1; + const rowIndex = this.grid.dataView.length - 1; const row = this.grid.nativeElement.querySelector(`[data-rowindex="${rowIndex}"]`) as HTMLElement; if (row && row.tagName.toLowerCase() === 'igx-grid-groupby-row') { row.focus(); @@ -447,7 +447,7 @@ export class IgxGridNavigationService { const rowEl = this.grid.rowList.find(row => row.index === rowIndex + 1) ? this.grid.rowList.find(row => row.index === rowIndex + 1) : this.grid.summariesRowList.find(row => row.index === rowIndex + 1); - if (rowIndex === this.grid.verticalScrollContainer.igxForOf.length - 1 && this.grid.rootSummariesEnabled) { + if (rowIndex === this.grid.dataView.length - 1 && this.grid.rootSummariesEnabled) { this.onKeydownHome(0, true); return; } diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts index 08961fe66f1..94f9429a891 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts @@ -293,7 +293,7 @@ describe('IgxGrid - Cell selection #grid', () => { GridSelectionFunctions.verifyCellSelected(firstCell); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); @@ -514,7 +514,7 @@ describe('IgxGrid - Cell selection #grid', () => { expect(selectionChangeSpy).toHaveBeenCalledTimes(0); expect(grid.getSelectedData()).toEqual(expectedData); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); @@ -538,7 +538,7 @@ describe('IgxGrid - Cell selection #grid', () => { expect(selectionChangeSpy).toHaveBeenCalledTimes(0); expect(grid.getSelectedData()).toEqual(expectedData); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); @@ -1040,7 +1040,7 @@ describe('IgxGrid - Cell selection #grid', () => { GridSelectionFunctions.verifyCellsRegionSelected(grid, 0, 0, 0, 0); GridSelectionFunctions.verifySelectedRange(grid, 0, 0, 0, 0); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts index df5082eef47..d5326063aee 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts @@ -981,7 +981,7 @@ describe('IgxGrid - Keyboard navigation #grid', () => { }); fix.detectChanges(); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); @@ -1009,7 +1009,7 @@ describe('IgxGrid - Keyboard navigation #grid', () => { }); fix.detectChanges(); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts index fcf804821b1..b0f8114673d 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts @@ -1386,7 +1386,7 @@ describe('IgxGrid - Summaries #grid', () => { }); fix.detectChanges(); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(100); fix.detectChanges(); @@ -1452,7 +1452,7 @@ describe('IgxGrid - Summaries #grid', () => { ['Count', 'Earliest', 'Latest'], ['9', 'Dec 18, 2007', 'Dec 9, 2017']); GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Min', 'Max'], ['19', '50']); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(50); fix.detectChanges(); @@ -1482,7 +1482,7 @@ describe('IgxGrid - Summaries #grid', () => { GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 0, 4, ['Min', 'Max'], ['19', '50']); GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 0, 5, ['Count'], ['9']); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(50); fix.detectChanges(); GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 18, 5, ['Count'], ['1']); @@ -1545,7 +1545,7 @@ describe('IgxGrid - Summaries #grid', () => { GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 0, 2, ['Count'], ['8']); GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 0, 4, ['Min', 'Max'], ['19', '50']); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(50); fix.detectChanges(); @@ -1614,7 +1614,7 @@ describe('IgxGrid - Summaries #grid', () => { GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 4, 2, ['Count'], ['3']); GridSummaryFunctions.verifyColumnSummariesBySummaryRowIndex(fix, 4, 4, ['Min', 'Max'], ['19', '50']); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(50); fix.detectChanges(); @@ -1754,7 +1754,7 @@ describe('IgxGrid - Summaries #grid', () => { expect(groupRows[0].groupRow.value).toEqual(-1); expect(groupRows[1].groupRow.value).toEqual(19); - grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); + grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); await wait(50); fix.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts index fdb47aad8a6..d4b59ef209a 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts @@ -982,7 +982,7 @@ export class IgxGridComponent extends IgxGridBaseComponent implements IGridDataB }; - this.verticalScrollContainer.igxForOf.forEach(process); + this.dataView.forEach(process); return this.extractDataFromSelection(source, formatters, headers); } else { return super.getSelectedData(formatters, headers); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts index 2e9e61f86cf..0fc6ab866de 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts @@ -905,10 +905,10 @@ describe('IgxGrid - GroupBy #grid', () => { // verify virtualization states - should be in last chunk const virtState = grid.verticalScrollContainer.state; - expect(virtState.startIndex).toBe(grid.verticalScrollContainer.igxForOf.length - virtState.chunkSize); + expect(virtState.startIndex).toBe(grid.dataView.length - virtState.chunkSize); // verify last row is visible at bottom - const lastRow = grid.getRowByIndex(grid.verticalScrollContainer.igxForOf.length - 1); + const lastRow = grid.getRowByIndex(grid.dataView.length - 1); expect(lastRow.nativeElement.getBoundingClientRect().bottom).toBe(grid.tbody.nativeElement.getBoundingClientRect().bottom); }); diff --git a/projects/igniteui-angular/src/lib/grids/grid/groupby-row.component.ts b/projects/igniteui-angular/src/lib/grids/grid/groupby-row.component.ts index c73ca50b69c..6e82a309c56 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/groupby-row.component.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/groupby-row.component.ts @@ -275,7 +275,7 @@ export class IgxGridGroupByRowComponent { if (shift) { this.grid.navigation.performShiftTabKey(this.nativeElement, activeNode); } else { - if (this.index === this.grid.verticalScrollContainer.igxForOf.length - 1 && this.grid.rootSummariesEnabled) { + if (this.index === this.grid.dataView.length - 1 && this.grid.rootSummariesEnabled) { this.grid.navigation.onKeydownHome(0, true); } else { const orderedColumns = this.grid.navigation.gridOrderedColumns; diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.ts index bf6056d5820..e4c11161b76 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.ts @@ -52,7 +52,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi return scrollHeight === 0 || Math.round(scrollTop + grid.verticalScrollContainer.igxForContainerSize) === scrollHeight; } private getIsChildAtIndex(index) { - return this.grid.isChildGridRecord(this.grid.verticalScrollContainer.igxForOf[index]); + return this.grid.isChildGridRecord(this.grid.dataView[index]); } public getCellElementByVisibleIndex(rowIndex, visibleColumnIndex, isSummary = false) { @@ -122,11 +122,11 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi super.navigateDown(rowElement, selectedNode); } } - } else if (currentRowIndex !== this.grid.verticalScrollContainer.igxForOf.length - 1) { + } else if (currentRowIndex !== this.grid.dataView.length - 1) { // scroll next in view super.navigateDown(rowElement, selectedNode); } else if (this.grid.parent !== null && - currentRowIndex === this.grid.verticalScrollContainer.igxForOf.length - 1) { + currentRowIndex === this.grid.dataView.length - 1) { // move to next row in sibling layout or in parent this.focusNext(visibleColumnIndex); } @@ -154,7 +154,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi public navigateBottom(visibleColumnIndex) { // handle scenario where last index is child grid // in that case focus cell in last data row - const lastIndex = this.grid.verticalScrollContainer.igxForOf.length - 1; + const lastIndex = this.grid.dataView.length - 1; if (this.getIsChildAtIndex(lastIndex)) { const targetIndex = lastIndex - 1; const scrTopPosition = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, true); @@ -191,7 +191,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi public goToLastCell() { // handle scenario where last index is child grid // in that case focus last cell in last data row - const lastIndex = this.grid.verticalScrollContainer.igxForOf.length - 1; + const lastIndex = this.grid.dataView.length - 1; if (this.getIsChildAtIndex(lastIndex)) { const targetIndex = lastIndex - 1; const scrTopPosition = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, true); @@ -271,7 +271,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi const isSummaryRow = selectedNode.isSummaryRow; const summaryRows = this.grid.summariesRowList.toArray(); const hasSummaries = summaryRows.length > 0; - const isLastDataRow = rowIndex === this.grid.verticalScrollContainer.igxForOf.length - 1; + const isLastDataRow = rowIndex === this.grid.dataView.length - 1; const nextIsDataRow = this.grid.dataRowList.find(row => row.index === rowIndex + 1); const isLastColumn = this.grid.unpinnedColumns[this.grid.unpinnedColumns.length - 1].visibleIndex === visibleColumnIndex; const isLastSummaryRow = hasSummaries && isSummaryRow; @@ -315,7 +315,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi const parentHasSummary = parent.summariesRowList.length > 0; const parentRowIndex = parseInt( this.getClosestElemByTag(currentRowEl, 'igx-child-grid-row').parentNode.getAttribute('data-rowindex'), 10); - const isLastRowInParent = parent.verticalScrollContainer.igxForOf.length - 1 === parentRowIndex; + const isLastRowInParent = parent.dataView.length - 1 === parentRowIndex; // check if next is sibling const childRowContainer = this.getChildGridRowContainer(this.grid); const nextIsSiblingChild = !!childRowContainer.nextElementSibling; @@ -406,7 +406,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi const gridElem = this.getLastGridElem(currentRowEl.previousElementSibling); this.performShiftTabIntoChild(gridElem, currentRowEl, rowIndex); } else if (visibleColumnIndex === 0 && isSummary) { - const lastRowIndex = this.grid.verticalScrollContainer.igxForOf.length - 1; + const lastRowIndex = this.grid.dataView.length - 1; if (lastRowIndex === -1) { // no child data if (this.grid.allowFiltering && this.grid.filterMode === FilterMode.quickFilter) { @@ -533,7 +533,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi visibleColumnIndex = Math.min(lastCellIndex, visibleColumnIndex); const isScrolledToBottom = this._isScrolledToBottom(childGrid); - const lastIndex = childGrid.verticalScrollContainer.igxForOf.length - 1; + const lastIndex = childGrid.dataView.length - 1; if (!isScrolledToBottom) { // scroll to end this.scrollGrid(childGrid, 'bottom', () => this.focusPrevChild(elem, visibleColumnIndex, grid)); @@ -611,7 +611,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi const verticalScroll = nextParentGrid.verticalScrollContainer.getVerticalScroll(); const parentState = nextParentGrid.verticalScrollContainer.state; const atLastChunk = parentState.startIndex + parentState.chunkSize === - nextParentGrid.verticalScrollContainer.igxForOf.length; + nextParentGrid.dataView.length; if (next) { if (nextIsSiblingChild) { this.focusNextChild(next, visibleColumnIndex, nextParentGrid); @@ -754,7 +754,7 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi } else { switch (target) { case 'top': grid.verticalScrollContainer.scrollTo(0); break; - case 'bottom': grid.verticalScrollContainer.scrollTo(grid.verticalScrollContainer.igxForOf.length - 1); break; + case 'bottom': grid.verticalScrollContainer.scrollTo(grid.dataView.length - 1); break; case 'next': grid.verticalScrollContainer.scrollNext(); break; case 'prev': grid.verticalScrollContainer.scrollPrev(); break; } diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts index 122572f73b5..b6abff92f15 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts @@ -618,7 +618,7 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseCompone $implicit: rowData, moveView: view, owner: tmlpOutlet, - index: this.verticalScrollContainer.igxForOf.indexOf(rowData) + index: this.dataView.indexOf(rowData) }; } else { const rowID = this.primaryKey ? rowData.rowID : this.data.indexOf(rowData.rowID); @@ -626,14 +626,14 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseCompone return { $implicit: rowData, templateID: 'childRow-' + rowID, - index: this.verticalScrollContainer.igxForOf.indexOf(rowData) + index: this.dataView.indexOf(rowData) }; } } else { return { $implicit: rowData, templateID: 'dataRow', - index: this.verticalScrollContainer.igxForOf.indexOf(rowData) + index: this.dataView.indexOf(rowData) }; } } diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts index 543183535b3..b98cc1aad52 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts @@ -236,10 +236,10 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { }); fixture.detectChanges(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(100); fixture.detectChanges(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(100); fixture.detectChanges(); @@ -315,10 +315,10 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { // }); // fixture.detectChanges(); - // hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + // hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); // await wait(100); // fixture.detectChanges(); - // hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + // hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); // await wait(100); // fixture.detectChanges(); // const childGrids = fixture.debugElement.queryAll(By.css('igx-child-grid-row')); @@ -518,17 +518,17 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { hierarchicalGrid.reflow(); fixture.detectChanges(); - expect(hierarchicalGrid.verticalScrollContainer.igxForOf.length).toEqual(15); + expect(hierarchicalGrid.dataView.length).toEqual(15); hierarchicalGrid.dataRowList.toArray()[1].nativeElement.children[0].click(); fixture.detectChanges(); - expect(hierarchicalGrid.verticalScrollContainer.igxForOf.length).toEqual(16); + expect(hierarchicalGrid.dataView.length).toEqual(16); hierarchicalGrid.dataRowList.toArray()[0].nativeElement.children[0].click(); fixture.detectChanges(); - expect(hierarchicalGrid.verticalScrollContainer.igxForOf.length).toEqual(17); + expect(hierarchicalGrid.dataView.length).toEqual(17); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(100); fixture.detectChanges(); @@ -547,7 +547,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { expect((hierarchicalGrid.dataRowList.toArray()[0] as IgxHierarchicalRowComponent).expanded).toBeTruthy(); expect((hierarchicalGrid.dataRowList.toArray()[1] as IgxHierarchicalRowComponent).expanded).toBeTruthy(); - expect(hierarchicalGrid.verticalScrollContainer.igxForOf.length).toEqual(17); + expect(hierarchicalGrid.dataView.length).toEqual(17); let childGrids = fixture.debugElement.queryAll(By.css('igx-child-grid-row')); let childGrid = childGrids[0].query(By.css('igx-hierarchical-grid')).componentInstance; @@ -561,7 +561,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { expect(hierarchicalGrid.dataRowList.toArray()[0].cells.first.value).toEqual('15'); expect((hierarchicalGrid.dataRowList.toArray()[0] as IgxHierarchicalRowComponent).expanded).toBeFalsy(); expect((hierarchicalGrid.dataRowList.toArray()[1] as IgxHierarchicalRowComponent).expanded).toBeFalsy(); - expect(hierarchicalGrid.verticalScrollContainer.igxForOf.length).toEqual(15); + expect(hierarchicalGrid.dataView.length).toEqual(15); childGrids = fixture.debugElement.queryAll(By.css('igx-child-grid-row')); expect(childGrids.length).toEqual(0); @@ -573,7 +573,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { expect(hierarchicalGrid.dataRowList.toArray()[0].cells.first.value).toEqual('0'); expect((hierarchicalGrid.dataRowList.toArray()[0] as IgxHierarchicalRowComponent).expanded).toBeTruthy(); expect((hierarchicalGrid.dataRowList.toArray()[1] as IgxHierarchicalRowComponent).expanded).toBeTruthy(); - expect(hierarchicalGrid.verticalScrollContainer.igxForOf.length).toEqual(17); + expect(hierarchicalGrid.dataView.length).toEqual(17); childGrids = fixture.debugElement.queryAll(By.css('igx-child-grid-row')); childGrid = childGrids[0].query(By.css('igx-hierarchical-grid')).componentInstance; @@ -602,7 +602,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { expect(hierarchicalGrid.hasVerticalSroll()).toBeTruthy(); // scroll bottom - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(30); fixture.detectChanges(); @@ -617,7 +617,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { hierarchicalGrid.getRowByKey('1').nativeElement.children[0].click(); await wait(30); fixture.detectChanges(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(30); fixture.detectChanges(); @@ -632,7 +632,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { hierarchicalGrid.getRowByKey('2').nativeElement.children[0].click(); await wait(30); fixture.detectChanges(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(30); fixture.detectChanges(); @@ -647,7 +647,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { hierarchicalGrid.getRowByKey('3').nativeElement.children[0].click(); await wait(30); fixture.detectChanges(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(30); fixture.detectChanges(); @@ -662,7 +662,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { hierarchicalGrid.getRowByKey('4').nativeElement.children[0].click(); await wait(30); fixture.detectChanges(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(30); fixture.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts index b36305c0b2f..5e15d578937 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts @@ -548,7 +548,7 @@ describe('IgxHierarchicalGrid Basic Navigation #hGrid', () => { it('should retain focused cell when expand/collapse hierarchical row using ALT+Arrow Right/ALT+Arrow Left.', (async () => { // scroll to last row - const lastDataIndex = hierarchicalGrid.verticalScrollContainer.igxForOf.length - 2; + const lastDataIndex = hierarchicalGrid.dataView.length - 2; hierarchicalGrid.verticalScrollContainer.scrollTo(lastDataIndex); await wait(100); fixture.detectChanges(); @@ -888,7 +888,7 @@ describe('IgxHierarchicalGrid Complex Navigation #hGrid', () => { await wait(100); fixture.detectChanges(); const child = hierarchicalGrid.hgridAPI.getChildGrids(false)[0]; - const lastIndex = child.verticalScrollContainer.igxForOf.length - 1; + const lastIndex = child.dataView.length - 1; child.verticalScrollContainer.scrollTo(lastIndex); await wait(100); fixture.detectChanges(); @@ -967,7 +967,7 @@ describe('IgxHierarchicalGrid Multi-layout Navigation #hGrid', () => { const child1 = hierarchicalGrid.hgridAPI.getChildGrids(false)[0]; const child2 = hierarchicalGrid.hgridAPI.getChildGrids(false)[4]; - child1.verticalScrollContainer.scrollTo(child1.verticalScrollContainer.igxForOf.length - 1); + child1.verticalScrollContainer.scrollTo(child1.dataView.length - 1); await wait(100); fixture.detectChanges(); @@ -988,7 +988,7 @@ describe('IgxHierarchicalGrid Multi-layout Navigation #hGrid', () => { const child1 = hierarchicalGrid.hgridAPI.getChildGrids(false)[0]; const child2 = hierarchicalGrid.hgridAPI.getChildGrids(false)[4]; - child1.verticalScrollContainer.scrollTo(child1.verticalScrollContainer.igxForOf.length - 1); + child1.verticalScrollContainer.scrollTo(child1.dataView.length - 1); await wait(100); fixture.detectChanges(); const rowVirt = child1.dataRowList.toArray()[0].virtDirRow; diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts index 57835351bdb..022ed8934ce 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts @@ -142,7 +142,7 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => { fixture.detectChanges(); expect(row.expanded).toBe(true); // scroll to bottom - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(100); fixture.detectChanges(); // scroll to top @@ -619,7 +619,7 @@ describe('IgxHierarchicalGrid Row Islands #hGrid', () => { const child2 = children[1]; expect(child1._destroyed).toBeFalsy(); expect(child2._destroyed).toBeFalsy(); - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); await wait(100); fixture.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts index d2aaaaefa60..bbc6e3b4a3b 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts @@ -249,7 +249,7 @@ describe('IgxHierarchicalGrid Virtualization #hGrid', () => { fixture.detectChanges(); await wait(100); // scroll to bottom - hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.verticalScrollContainer.igxForOf.length - 1); + hierarchicalGrid.verticalScrollContainer.scrollTo(hierarchicalGrid.dataView.length - 1); fixture.detectChanges(); await wait(100); fixture.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts index 1d13b701893..0785e785487 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts @@ -127,7 +127,7 @@ describe('IgxTreeGrid - Multi Cell selection #tGrid', () => { { ID: 17 } ]; - treeGrid.verticalScrollContainer.scrollTo(treeGrid.verticalScrollContainer.igxForOf.length - 1); + treeGrid.verticalScrollContainer.scrollTo(treeGrid.dataView.length - 1); await wait(30); fix.detectChanges(); @@ -169,7 +169,7 @@ describe('IgxTreeGrid - Multi Cell selection #tGrid', () => { GridSelectionFunctions.verifyCellSelected(firstCell); - treeGrid.verticalScrollContainer.scrollTo(treeGrid.verticalScrollContainer.igxForOf.length - 1); + treeGrid.verticalScrollContainer.scrollTo(treeGrid.dataView.length - 1); await wait(200); fix.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts index ef6f1bcb8ac..35230a18b1e 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts @@ -1391,7 +1391,7 @@ describe('IgxTreeGrid - Summaries #tGrid', () => { treeGrid.expandAll(); fix.detectChanges(); - treeGrid.verticalScrollContainer.scrollTo(treeGrid.verticalScrollContainer.igxForOf.length - 1); + treeGrid.verticalScrollContainer.scrollTo(treeGrid.dataView.length - 1); await wait(100); fix.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts index 47eade9b688..7950acc7628 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts @@ -697,11 +697,11 @@ export class IgxTreeGridComponent extends IgxGridBaseComponent implements IGridD if (delayScrolling) { this.verticalScrollContainer.onDataChanged.pipe(first()).subscribe(() => { this.scrollDirective(this.verticalScrollContainer, - typeof(row) === 'number' ? row : this.verticalScrollContainer.igxForOf.indexOf(record)); + typeof(row) === 'number' ? row : this.dataView.indexOf(record)); }); } else { this.scrollDirective(this.verticalScrollContainer, - typeof(row) === 'number' ? row : this.verticalScrollContainer.igxForOf.indexOf(record)); + typeof(row) === 'number' ? row : this.dataView.indexOf(record)); } this.scrollToHorizontally(column); @@ -732,7 +732,7 @@ export class IgxTreeGridComponent extends IgxGridBaseComponent implements IGridD source.push(record.data); }; - this.verticalScrollContainer.igxForOf.forEach(process); + this.dataView.forEach(process); return this.extractDataFromSelection(source, formatters, headers); }