Skip to content

Commit 7af7659

Browse files
authored
Merge branch 'master' into pbozhinov/fix-6359
2 parents 7b9325c + 0a80908 commit 7af7659

File tree

5 files changed

+48
-18
lines changed

5 files changed

+48
-18
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/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)