Skip to content

Commit 169d55f

Browse files
authored
Merge branch 'master' into mkirova/fix-6411-9.0.x
2 parents 6dbf0d0 + 0a80908 commit 169d55f

File tree

4 files changed

+40
-9
lines changed

4 files changed

+40
-9
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
@@ -65,4 +65,5 @@ export interface GridType extends IGridDataBindable {
6565
clearSort(name?: string): void;
6666
isColumnGrouped(fieldName: string): boolean;
6767
isDetailRecord(rec: any): boolean;
68+
isGroupByRecord(rec: any): boolean;
6869
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2893,6 +2893,14 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28932893
return false;
28942894
}
28952895

2896+
/**
2897+
* @hidden
2898+
* @internal
2899+
*/
2900+
public isGroupByRecord(rec) {
2901+
return false;
2902+
}
2903+
28962904
/**
28972905
* @hidden
28982906
* @internal

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

Lines changed: 31 additions & 8 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) && !this.grid.isDetailRecord(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) && !this.grid.isDetailRecord(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(
@@ -366,12 +385,14 @@ export class IgxGridNavigationService {
366385
}
367386

368387
public goToFirstCell() {
388+
const targetIndex = this.findFirstDataRowIndex();
389+
const targetScr = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, false);
369390
const verticalScroll = this.grid.verticalScrollContainer.getScroll();
370-
if (verticalScroll.scrollTop === 0) {
391+
if (verticalScroll.scrollTop === targetScr) {
371392
this.onKeydownHome(this.grid.dataRowList.first.index);
372393
} else {
373394
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
374-
this.grid.verticalScrollContainer.scrollTo(0);
395+
this.grid.verticalScrollContainer.scrollTo(targetIndex !== -1 ? targetIndex : 0);
375396
this.grid.verticalScrollContainer.onChunkLoad
376397
.pipe(first()).subscribe(() => {
377398
this.onKeydownHome(this.grid.dataRowList.first.index);
@@ -380,15 +401,17 @@ export class IgxGridNavigationService {
380401
}
381402

382403
public goToLastCell() {
404+
const targetIndex = this.findLastDataRowIndex();
405+
const targetScr = this.grid.verticalScrollContainer.getScrollForIndex(targetIndex, true);
383406
const verticalScroll = this.grid.verticalScrollContainer.getScroll();
384407
if (verticalScroll.scrollHeight === 0 ||
385-
verticalScroll.scrollTop === verticalScroll.scrollHeight - this.grid.verticalScrollContainer.igxForContainerSize) {
408+
verticalScroll.scrollTop === targetScr) {
386409
const rows = this.getAllRows();
387410
const rowIndex = parseInt(rows[rows.length - 1].getAttribute('data-rowIndex'), 10);
388411
this.onKeydownEnd(rowIndex);
389412
} else {
390413
this.getFocusableGrid().nativeElement.focus({ preventScroll: true });
391-
this.grid.verticalScrollContainer.scrollTo(this.grid.dataView.length - 1);
414+
this.grid.verticalScrollContainer.scrollTo(targetIndex !== -1 ? targetIndex : this.grid.dataView.length - 1);
392415
this.grid.verticalScrollContainer.onChunkLoad
393416
.pipe(first()).subscribe(() => {
394417
const rows = this.getAllRows();

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ export class IgxHierarchicalGridCellComponent extends IgxGridCellComponent imple
9090
* @hidden
9191
* @internal
9292
*/
93-
@HostListener('keydown', ['$event'])
9493
dispatchEvent(event: KeyboardEvent) {
9594
const key = event.key.toLowerCase();
9695
if (event.altKey && !this.row.added) {

0 commit comments

Comments
 (0)