Skip to content

Commit a14d512

Browse files
authored
Merge branch 'master' into set-width-hideallcolumns-master
2 parents 38e8553 + 7eeecf9 commit a14d512

15 files changed

+77
-33
lines changed

ROADMAP.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,20 @@
66
1. Dock Manger [#5980](https://github.com/IgniteUI/igniteui-angular/issues/5980)
77
2. Theming service for Ignite UI for Angular [#5999](https://github.com/IgniteUI/igniteui-angular/issues/5999)
88
3. Range Date Picker [#5732](https://github.com/IgniteUI/igniteui-angular/issues/5732)
9-
4. igxGrid overlay components exposed for instantiation in arbitrary container [#5878](https://github.com/IgniteUI/igniteui-angular/issues/5878)
9+
4. **[DONE]** igxGrid overlay components exposed for instantiation in arbitrary container [#5878](https://github.com/IgniteUI/igniteui-angular/issues/5878)
1010
5. RTL Support across Ignite UI for Angular components [#5958](https://github.com/IgniteUI/igniteui-angular/issues/5958)
11-
6. Carousel slide animations/transitions [#4268](https://github.com/IgniteUI/igniteui-angular/issues/4268)
12-
7. Access all data when calculating summary per column [#5754](https://github.com/IgniteUI/igniteui-angular/issues/5754)
11+
6. **[DONE]** Carousel slide animations/transitions [#4268](https://github.com/IgniteUI/igniteui-angular/issues/4268)
12+
7. **[DONE]** Access all data when calculating summary per column [#5754](https://github.com/IgniteUI/igniteui-angular/issues/5754)
1313
8. Angular 9 support [#5998](https://github.com/IgniteUI/igniteui-angular/issues/5998)
14-
9. Allow master-detail style visualization with igxHierarchicalGrid [#5880](https://github.com/IgniteUI/igniteui-angular/issues/5880)
15-
10. Collapsible column groups (column expansion state templates) [#3343](https://github.com/IgniteUI/igniteui-angular/issues/3343)
14+
9. **[DONE]** Allow master-detail style visualization with igxHierarchicalGrid [#5880](https://github.com/IgniteUI/igniteui-angular/issues/5880)
15+
10. **[DONE]** Collapsible column groups (column expansion state templates) [#3343](https://github.com/IgniteUI/igniteui-angular/issues/3343)
1616

1717
## Going down the road
1818

1919
1. Row-pinning
20-
2. Column Groups expand/collapse, with column grouping templates
21-
3. Visual Cell merging
22-
4. Splitter
23-
5. PDF Integration
20+
2. Visual Cell merging
21+
3. Splitter
22+
4. PDF Integration
2423

2524
# Previous Milestones
2625

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/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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
498498
this.onPagingDone.emit({ previous: this._page, current: val });
499499
this._page = val;
500500
this.pageChange.emit(this._page);
501+
this.navigateTo(0);
501502
this.notifyChanges();
502503
}
503504

@@ -2893,6 +2894,14 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28932894
return false;
28942895
}
28952896

2897+
/**
2898+
* @hidden
2899+
* @internal
2900+
*/
2901+
public isGroupByRecord(rec) {
2902+
return false;
2903+
}
2904+
28962905
/**
28972906
* @hidden
28982907
* @internal
@@ -5891,6 +5900,15 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
58915900
this.closeRowEditingOverlay();
58925901
}
58935902

5903+
/**
5904+
* @hidden
5905+
*/
5906+
public gridOutletKeyboardHandler(event) {
5907+
// TODO: This should be removed after grid keyboard refactoring
5908+
// call stopPropagation for keydown event for the outlet not to propagate event to the grid
5909+
event.stopPropagation();
5910+
}
5911+
58945912
// TODO: Refactor
58955913
/**
58965914
* Finishes the row transactions on the current row.

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/grid/grid.component.html

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

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

0 commit comments

Comments
 (0)