Skip to content

Commit ba768ee

Browse files
authored
Merge branch '8.2.x' into mkirova/fix-throttle
2 parents 7237c58 + 8a873f2 commit ba768ee

File tree

6 files changed

+58
-22
lines changed

6 files changed

+58
-22
lines changed

projects/igniteui-angular/src/lib/grids/common/grid.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,5 @@ export interface GridType {
3333
lastEditableColumnIndex: number;
3434

3535
endEdit(commit: boolean, event?: Event): void;
36+
isGroupByRecord(rec: any): boolean;
3637
}

projects/igniteui-angular/src/lib/grids/grid-base.component.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,7 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
544544
this.onPagingDone.emit({ previous: this._page, current: val });
545545
this._page = val;
546546
this.pageChange.emit(this._page);
547+
this.navigateTo(0);
547548
this.notifyChanges();
548549
}
549550

@@ -5046,6 +5047,14 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
50465047
this.selectionService.clearRowSelection(event) : this.selectionService.selectAllRows(event);
50475048
}
50485049

5050+
/**
5051+
* @hidden
5052+
* @internal
5053+
*/
5054+
public isGroupByRecord(rec) {
5055+
return false;
5056+
}
5057+
50495058
/**
50505059
* @hidden
50515060
*/
@@ -5915,6 +5924,15 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
59155924
this.closeRowEditingOverlay();
59165925
}
59175926

5927+
/**
5928+
* @hidden
5929+
*/
5930+
public gridOutletKeyboardHandler(event) {
5931+
// TODO: This should be removed after grid keyboard refactoring
5932+
// call stopPropagation for keydown event for the outlet not to propagate event to the grid
5933+
event.stopPropagation();
5934+
}
5935+
59185936
// TODO: Refactor
59195937
/**
59205938
* Finishes the row transactions on the current row.

projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -250,15 +250,17 @@ export class IgxGridNavigationService {
250250
}
251251

252252
public navigateTop(visibleColumnIndex) {
253+
const targetIndex = this.findFirstDataRowIndex();
253254
const verticalScroll = this.grid.verticalScrollContainer.getScroll();
254255
const cellSelector = this.getCellSelector(visibleColumnIndex);
255-
if (verticalScroll.scrollTop === 0) {
256+
const targetScr = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, false);
257+
if (targetScr >= verticalScroll.scrollTop) {
256258
const cells = this.grid.nativeElement.querySelectorAll(
257259
`${cellSelector}[data-visibleIndex="${visibleColumnIndex}"]`);
258260
(cells[0] as HTMLElement).focus();
259261
} else {
260262
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
261-
this.grid.verticalScrollContainer.scrollTo(0);
263+
this.grid.verticalScrollContainer.scrollTo(targetIndex !== -1 ? targetIndex : 0);
262264
this.grid.verticalScrollContainer.onChunkLoad
263265
.pipe(first()).subscribe(() => {
264266
const cells = this.grid.nativeElement.querySelectorAll(
@@ -268,17 +270,34 @@ export class IgxGridNavigationService {
268270
}
269271
}
270272

273+
private findFirstDataRowIndex() {
274+
const dv = this.grid.dataView;
275+
return dv.findIndex(rec => !this.grid.isGroupByRecord(rec));
276+
}
277+
278+
private findLastDataRowIndex() {
279+
let i = this.grid.dataView.length;
280+
while (i--) {
281+
const rec = this.grid.dataView[i];
282+
if (!this.grid.isGroupByRecord(rec)) {
283+
return i;
284+
}
285+
}
286+
}
287+
271288
public navigateBottom(visibleColumnIndex) {
289+
const targetIndex = this.findLastDataRowIndex();
290+
const targetScr = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, true);
272291
const verticalScroll = this.grid.verticalScrollContainer.getScroll();
273292
const cellSelector = this.getCellSelector(visibleColumnIndex);
274293
if (verticalScroll.scrollHeight === 0 ||
275-
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
294+
verticalScroll.scrollTop === targetScr) {
276295
const cells = this.grid.nativeElement.querySelectorAll(
277296
`${cellSelector}[data-visibleIndex="${visibleColumnIndex}"]`);
278297
(cells[cells.length - 1] as HTMLElement).focus();
279298
} else {
280299
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
281-
this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1);
300+
this.grid.verticalScrollContainer.scrollTo(targetIndex !== -1 ? targetIndex : this.grid.dataView.length - 1);
282301
this.grid.verticalScrollContainer.onChunkLoad
283302
.pipe(first()).subscribe(() => {
284303
const cells = this.grid.nativeElement.querySelectorAll(
@@ -372,35 +391,33 @@ export class IgxGridNavigationService {
372391
}
373392

374393
public goToFirstCell() {
394+
const targetIndex = this.findFirstDataRowIndex();
395+
const targetScr = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, false);
375396
const verticalScroll = this.grid.verticalScrollContainer.getScroll();
376-
const horizontalScroll = this.grid.dataRowList.first.virtDirRow.getScroll();
377-
if (verticalScroll.scrollTop === 0) {
397+
if (verticalScroll.scrollTop === targetScr) {
378398
this.onKeydownHome(this.grid.dataRowList.first.index);
379399
} else {
380-
if (!horizontalScroll.clientWidth || parseInt(horizontalScroll.scrollLeft, 10) <= 1 || this.grid.pinnedColumns.length) {
381-
this.navigateTop(0);
382-
} else {
383-
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
384-
this.horizontalScroll(this.grid.dataRowList.first.index).scrollTo(0);
385-
this.grid.parentVirtDir.onChunkLoad
386-
.pipe(first())
387-
.subscribe(() => {
388-
this.navigateTop(0);
389-
});
390-
}
400+
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
401+
this.grid.verticalScrollContainer.scrollTo(targetIndex !== -1 ? targetIndex : 0);
402+
this.grid.verticalScrollContainer.onChunkLoad
403+
.pipe(first()).subscribe(() => {
404+
this.onKeydownHome(this.grid.dataRowList.first.index);
405+
});
391406
}
392407
}
393408

394409
public goToLastCell() {
410+
const targetIndex = this.findLastDataRowIndex();
411+
const targetScr = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, true);
395412
const verticalScroll = this.grid.verticalScrollContainer.getScroll();
396413
if (verticalScroll.scrollHeight === 0 ||
397-
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
414+
verticalScroll.scrollTop === targetScr) {
398415
const rows = this.getAllRows();
399416
const rowIndex = parseInt(rows[rows.length - 1].getAttribute('data-rowIndex'), 10);
400417
this.onKeydownEnd(rowIndex);
401418
} else {
402419
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
403-
this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1);
420+
this.grid.verticalScrollContainer.scrollTo(targetIndex !== -1 ? targetIndex : this.grid.dataView.length - 1);
404421
this.grid.verticalScrollContainer.onChunkLoad
405422
.pipe(first()).subscribe(() => {
406423
const rows = this.getAllRows();

projects/igniteui-angular/src/lib/grids/grid/grid.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,4 +271,4 @@
271271

272272
<igx-grid-column-resizer *ngIf="colResizingService.showResizer"></igx-grid-column-resizer>
273273
<div class="igx-grid__loading-outlet" #igxLoadingOverlayOutlet igxOverlayOutlet></div>
274-
<div class="igx-grid__outlet" #igxFilteringOverlayOutlet igxOverlayOutlet></div>
274+
<div class="igx-grid__outlet" #igxFilteringOverlayOutlet igxOverlayOutlet (keydown)="gridOutletKeyboardHandler($event)"></div>

projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,4 @@
236236

237237
<igx-grid-column-resizer *ngIf="colResizingService.showResizer"></igx-grid-column-resizer>
238238
<div class="igx-grid__loading-outlet" #igxLoadingOverlayOutlet igxOverlayOutlet></div>
239-
<div class="igx-grid__outlet" #igxFilteringOverlayOutlet igxOverlayOutlet></div>
239+
<div class="igx-grid__outlet" #igxFilteringOverlayOutlet igxOverlayOutlet (keydown)="gridOutletKeyboardHandler($event)"></div>

projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,4 @@
212212

213213
<igx-grid-column-resizer *ngIf="colResizingService.showResizer"></igx-grid-column-resizer>
214214
<div class="igx-grid__loading-outlet" #igxLoadingOverlayOutlet igxOverlayOutlet></div>
215-
<div class="igx-grid__outlet" #igxFilteringOverlayOutlet igxOverlayOutlet></div>
215+
<div class="igx-grid__outlet" #igxFilteringOverlayOutlet igxOverlayOutlet (keydown)="gridOutletKeyboardHandler($event)"></div>

0 commit comments

Comments
 (0)