Skip to content

Commit 53cc019

Browse files
authored
Merge pull request #6942 from IgniteUI/mdragnev/row-pinning-summaries
feat(igxGrid): Row pinning + Summaries integration
2 parents ab91892 + 8d17715 commit 53cc019

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2819,6 +2819,10 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28192819
this.endEdit(true);
28202820
this.cdr.markForCheck();
28212821
});
2822+
2823+
this.onRowPinning.subscribe(() => {
2824+
this.summaryService.clearSummaryCache();
2825+
});
28222826
}
28232827

28242828
/**

projects/igniteui-angular/src/lib/grids/grid/row-pinning.spec.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { GridFunctions } from '../../test-utils/grid-functions.spec';
1313
import { SortingDirection } from '../../data-operations/sorting-expression.interface';
1414
import { IgxGridTransaction } from '../tree-grid';
1515
import { IgxTransactionService } from '../../services';
16+
import { GridSummaryFunctions } from '../../test-utils/grid-functions.spec';
1617
import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition';
1718

1819
describe('Row Pinning #grid', () => {
@@ -387,6 +388,63 @@ describe('Row Pinning #grid', () => {
387388
// check last pinned and expanded is fully in view
388389
expect(firstRowDetail.getBoundingClientRect().bottom - grid.tbody.nativeElement.getBoundingClientRect().bottom).toBe(0);
389390
});
391+
392+
it('should calculate global summaries with both pinned and unpinned collections', () => {
393+
// enable summaries for each column
394+
grid.columns.forEach(c => {
395+
c.hasSummary = true;
396+
});
397+
fix.detectChanges();
398+
399+
grid.groupBy({
400+
fieldName: 'ContactTitle', dir: SortingDirection.Asc, ignoreCase: false
401+
});
402+
fix.detectChanges();
403+
404+
let row = grid.getRowByIndex(1);
405+
row.pinned = true;
406+
fix.detectChanges();
407+
let summaryRow = GridSummaryFunctions.getSummaryRowByDataRowIndex(fix, 0);
408+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 0, ['Count'], ['27']);
409+
410+
row = grid.pinnedRows[0];
411+
row.pinned = false;
412+
fix.detectChanges();
413+
expect(grid.pinnedRows.length).toBe(0);
414+
summaryRow = GridSummaryFunctions.getSummaryRowByDataRowIndex(fix, 0);
415+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 0, ['Count'], ['27']);
416+
});
417+
418+
it('should calculate groupby row summaries only within unpinned collection', () => {
419+
// enable summaries for each column
420+
grid.columns.forEach(c => {
421+
c.hasSummary = true;
422+
});
423+
fix.detectChanges();
424+
425+
grid.groupBy({
426+
fieldName: 'ContactTitle', dir: SortingDirection.Asc, ignoreCase: false
427+
});
428+
fix.detectChanges();
429+
430+
let row = grid.getRowByIndex(1);
431+
row.pinned = true;
432+
fix.detectChanges();
433+
434+
expect(grid.pinnedRows.length).toBe(1);
435+
436+
// get first summary row and make sure that the pinned record is not contained within the calculations
437+
let summaryRow = GridSummaryFunctions.getSummaryRowByDataRowIndex(fix, 3);
438+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 0, ['Count'], ['1']);
439+
440+
// unpin the row and check if the summary is recalculated
441+
row = grid.pinnedRows[0];
442+
row.pinned = false;
443+
fix.detectChanges();
444+
expect(grid.pinnedRows.length).toBe(0);
445+
summaryRow = GridSummaryFunctions.getSummaryRowByDataRowIndex(fix, 3);
446+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 0, ['Count'], ['2']);
447+
});
390448
});
391449

392450
describe(' Editing ', () => {

0 commit comments

Comments
 (0)