Skip to content

Commit 12621e0

Browse files
authored
Merge branch '8.2.x' into set-width-hideallcolumns-82x
2 parents 12483ac + afcb07d commit 12621e0

14 files changed

+70
-34
lines changed

projects/igniteui-angular/karma.grid.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ module.exports = function (config) {
4242
colors: true,
4343
logLevel: config.LOG_INFO,
4444
autoWatch: true,
45-
browsers: ['Chrome'],
45+
browsers: ['ChromeHeadless'],
4646
singleRun: false
4747
});
4848
};

projects/igniteui-angular/karma.hierarchical-grid.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ module.exports = function (config) {
4141
colors: true,
4242
logLevel: config.LOG_INFO,
4343
autoWatch: true,
44-
browsers: ['Chrome'],
44+
browsers: ['ChromeHeadless'],
4545
singleRun: false
4646
});
4747
};

projects/igniteui-angular/karma.non-grid.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ module.exports = function (config) {
4141
colors: true,
4242
logLevel: config.LOG_INFO,
4343
autoWatch: true,
44-
browsers: ['Chrome'],
44+
browsers: ['ChromeHeadless'],
4545
singleRun: false
4646
});
4747
};

projects/igniteui-angular/karma.test-perf.conf.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ module.exports = function (config) {
3535
colors: true,
3636
logLevel: config.LOG_INFO,
3737
autoWatch: true,
38-
browsers: ['Chrome'],
38+
browsers: ['ChromeHeadless'],
3939
singleRun: false
4040
});
4141
};
42-

projects/igniteui-angular/karma.tree-grid.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ module.exports = function (config) {
4141
colors: true,
4242
logLevel: config.LOG_INFO,
4343
autoWatch: true,
44-
browsers: ['Chrome'],
44+
browsers: ['ChromeHeadless'],
4545
singleRun: false
4646
});
4747
};

projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,8 @@ export class IgxForOfDirective<T> implements OnInit, OnChanges, DoCheck, OnDestr
404404
});
405405
const destructor = takeUntil<any>(this.destroy$);
406406
this.contentResizeNotify.pipe(destructor,
407-
filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0), throttleTime(40))
407+
filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0),
408+
throttleTime(40, undefined, {leading: true, trailing: true}))
408409
.subscribe(() => {
409410
this._zone.runTask(() => {
410411
this.updateSizes();

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

@@ -5051,6 +5052,14 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
50515052
this.selectionService.clearRowSelection(event) : this.selectionService.selectAllRows(event);
50525053
}
50535054

5055+
/**
5056+
* @hidden
5057+
* @internal
5058+
*/
5059+
public isGroupByRecord(rec) {
5060+
return false;
5061+
}
5062+
50545063
/**
50555064
* @hidden
50565065
*/
@@ -5920,6 +5929,15 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
59205929
this.closeRowEditingOverlay();
59215930
}
59225931

5932+
/**
5933+
* @hidden
5934+
*/
5935+
public gridOutletKeyboardHandler(event) {
5936+
// TODO: This should be removed after grid keyboard refactoring
5937+
// call stopPropagation for keydown event for the outlet not to propagate event to the grid
5938+
event.stopPropagation();
5939+
}
5940+
59235941
// TODO: Refactor
59245942
/**
59255943
* 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>

0 commit comments

Comments
 (0)