Skip to content

Commit 1323048

Browse files
authored
Merge pull request #6787 from IgniteUI/dkamburov/right-pin-summaries
feat(grid-pinning): Add summaries with right pinning #6676
2 parents a596645 + e984516 commit 1323048

File tree

7 files changed

+81
-15
lines changed

7 files changed

+81
-15
lines changed

projects/igniteui-angular/src/lib/core/styles/components/grid-summary/_grid-summary-component.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
@extend %igx-grid-summary--pinned-last !optional;
3434
}
3535

36+
@include m(pinned-first) {
37+
@extend %igx-grid-summary--pinned !optional;
38+
@extend %igx-grid-summary--pinned-first !optional;
39+
}
40+
3641
@include m(empty) {
3742
@extend %igx-grid-summary !optional;
3843
@extend %igx-grid-summary--empty !optional;

projects/igniteui-angular/src/lib/core/styles/components/grid-summary/_grid-summary-theme.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,13 @@
159159
}
160160
}
161161

162+
%igx-grid-summary--pinned-first {
163+
border-#{$left}: map-get($cell-pin, 'style') map-get($cell-pin, 'color');
164+
@media print {
165+
border-left: map-get($cell-pin, 'style') #999;
166+
}
167+
}
168+
162169
%igx-grid-summary__item {
163170
display: flex;
164171
align-items: center;

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { IgxColumnComponent } from '../columns/column.component';
1515
import { ColumnPinningPosition } from '../common/enums';
1616
import { IPinningConfig } from '../common/grid.interface';
1717
import { wait } from '../../test-utils/ui-interactions.spec';
18+
import { GridSummaryFunctions } from '../../test-utils/grid-functions.spec';
1819

1920
describe('IgxGrid - Column Pinning #grid', () => {
2021
const COLUMN_HEADER_CLASS = '.igx-grid__th';
@@ -572,8 +573,33 @@ describe('IgxGrid - Column Pinning #grid', () => {
572573
expect(fistPinnedHeaders[0].nativeElement.getAttribute('aria-label')).toBe('General Information');
573574
expect(fistPinnedHeaders[1].context.column.field).toBe('CompanyName');
574575
});
575-
});
576576

577+
it('should correctly pin columns with their summaries to end.', async() => {
578+
const fix = TestBed.createComponent(GridRightPinningComponent);
579+
fix.detectChanges();
580+
581+
const grid = fix.componentInstance.instance;
582+
grid.pinning = { columns: ColumnPinningPosition.End };
583+
grid.columns.forEach(col => {
584+
if (col.field === 'CompanyName' || col.field === 'ContactName') {
585+
col.hasSummary = true;
586+
}
587+
});
588+
fix.detectChanges();
589+
await wait();
590+
fix.detectChanges();
591+
const summaryRow = fix.debugElement.query(By.css('igx-grid-summary-row'));
592+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 9,
593+
['Count'], ['27']);
594+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 10,
595+
['Count'], ['27']);
596+
const pinnedSummaryCells = summaryRow.queryAll(By.css('igx-grid-summary-cell.igx-grid-summary--pinned'));
597+
expect(pinnedSummaryCells[0].nativeElement.className.indexOf('igx-grid-summary--pinned-first'))
598+
.not.toBe(-1);
599+
expect(pinnedSummaryCells[1].nativeElement.className.indexOf('igx-grid-summary--pinned-first'))
600+
.toBe(-1);
601+
});
602+
});
577603
});
578604

579605
/* tslint:disable */

projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,18 @@
66
[style.flex-basis.px]="grid.summariesMargin"
77
></div>
88
</ng-container>
9-
<ng-container *ngIf="pinnedColumns.length > 0">
10-
<igx-grid-summary-cell *ngFor="let col of pinnedColumns | igxNotGrouped"
11-
class="igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned"
9+
<ng-container *ngIf="pinnedColumns.length > 0 && grid.isPinningToStart">
10+
<ng-container *ngTemplateOutlet="summaryCellTemplate; context: getContext(this)"></ng-container>
11+
</ng-container>
12+
<ng-template igxGridFor let-col [igxGridForOf]="unpinnedColumns | igxNotGrouped" [igxForScrollContainer]="grid.parentVirtDir" let-colIndex="index" [igxForScrollOrientation]="'horizontal'" [igxForContainerSize]="grid.unpinnedWidth" [igxForTrackBy]="grid.trackColumnChanges" [igxForSizePropName]='"calcPixelWidth"' #igxDirRef>
13+
<igx-grid-summary-cell
14+
class="igx-grid-summary igx-grid-summary--fw"
1215
[class.igx-grid-summary--cosy]="grid.displayDensity === 'cosy'"
1316
[class.igx-grid-summary--compact]="grid.displayDensity === 'compact'"
1417
[class.igx-grid-summary--empty]="!col.hasSummary"
15-
[class.igx-grid-summary--pinned-last]="col.isLastPinned"
1618
[column]="col"
17-
[firstCellIndentation]="firstCellIndentation"
1819
[rowIndex]="index"
20+
[firstCellIndentation]="firstCellIndentation"
1921
[summaryResults]="getColumnSummaries(col.field)"
2022
[hasSummary]="col.hasSummary"
2123
[density]="grid.displayDensity"
@@ -25,24 +27,31 @@
2527
[style.max-width]="col.getCellWidth()"
2628
[style.flex-basis]="col.getCellWidth()">
2729
</igx-grid-summary-cell>
30+
</ng-template>
31+
<ng-container *ngIf="pinnedColumns.length > 0 && !grid.isPinningToStart">
32+
<ng-container *ngTemplateOutlet="summaryCellTemplate; context: getContext(this)"></ng-container>
2833
</ng-container>
29-
<ng-template igxGridFor let-col [igxGridForOf]="unpinnedColumns | igxNotGrouped" [igxForScrollContainer]="grid.parentVirtDir" let-colIndex="index" [igxForScrollOrientation]="'horizontal'" [igxForContainerSize]="grid.unpinnedWidth" [igxForTrackBy]="grid.trackColumnChanges" [igxForSizePropName]='"calcPixelWidth"' #igxDirRef>
30-
<igx-grid-summary-cell
31-
class="igx-grid-summary igx-grid-summary--fw"
34+
</ng-container>
35+
36+
<ng-template #summaryCellTemplate let-col>
37+
<igx-grid-summary-cell *ngFor="let col of pinnedColumns | igxNotGrouped"
38+
class="igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned"
3239
[class.igx-grid-summary--cosy]="grid.displayDensity === 'cosy'"
3340
[class.igx-grid-summary--compact]="grid.displayDensity === 'compact'"
3441
[class.igx-grid-summary--empty]="!col.hasSummary"
42+
[class.igx-grid-summary--pinned-first]="col.isFirstPinned"
43+
[class.igx-grid-summary--pinned-last]="col.isLastPinned"
3544
[column]="col"
36-
[rowIndex]="index"
3745
[firstCellIndentation]="firstCellIndentation"
46+
[rowIndex]="index"
3847
[summaryResults]="getColumnSummaries(col.field)"
3948
[hasSummary]="col.hasSummary"
4049
[density]="grid.displayDensity"
4150
[style.max-height.px]="minHeight"
4251
[style.min-height.px]="minHeight"
4352
[style.min-width]="col.getCellWidth()"
4453
[style.max-width]="col.getCellWidth()"
45-
[style.flex-basis]="col.getCellWidth()">
54+
[style.flex-basis]="col.getCellWidth()"
55+
[style.left]="col.rightPinnedOffset">
4656
</igx-grid-summary-cell>
47-
</ng-template>
48-
</ng-container>
57+
</ng-template>

projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,10 @@ export class IgxSummaryRowComponent implements DoCheck {
9696
public get unpinnedColumns(): IgxColumnComponent[] {
9797
return this.grid.unpinnedColumns;
9898
}
99+
100+
getContext(row) {
101+
return {
102+
$implicit: row
103+
};
104+
}
99105
}

src/app/grid-summaries/grid-summaries.sample.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<igx-grid #grid1 [data]="data" [autoGenerate]="false" [displayDensity]="'compact'" [width]="w" [height]="h"
1+
<igx-grid #grid1 [pinning]="pinningConfig" [data]="data" [autoGenerate]="false" [displayDensity]="'compact'" [width]="w" [height]="h"
22
[paging]="false" [allowFiltering]='true' [filterMode]="'excelStyleFilter'" [summaryCalculationMode]="'rootAndChildLevels'">
33
<igx-column field="Index" header="Index" [width]="cw">
44
</igx-column>
@@ -48,6 +48,7 @@
4848
<igx-switch [(ngModel)]="grid1.allowFiltering">allowFiltering</igx-switch>
4949
<igx-switch [(ngModel)]="grid1.columnHiding">columnHiding</igx-switch>
5050
<igx-switch [(ngModel)]="grid1.columnPinning">columnPinning</igx-switch>
51+
<igx-switch (change)='onChange()'>Left Pinning toggle</igx-switch>
5152
<igx-switch [(ngModel)]="grid1.showToolbar">showToolbar</igx-switch>
5253
<igx-switch [(ngModel)]="groupable">ReorderLevel groupable</igx-switch>
5354
<igx-switch [(ngModel)]="filterable">ReorderLevel filterable</igx-switch>

src/app/grid-summaries/grid-summaries.sample.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ import {
33
IgxColumnComponent,
44
IgxGridComponent,
55
IgxNumberSummaryOperand,
6-
IgxSummaryResult
6+
IgxSummaryResult,
7+
ColumnPinningPosition
78
} from 'igniteui-angular';
9+
import { IPinningConfig } from 'projects/igniteui-angular/src/lib/grids/common/grid.interface';
810

911

1012
class MySummary extends IgxNumberSummaryOperand {
@@ -46,6 +48,8 @@ export class GridSummaryComponent implements OnInit {
4648
public hasSummaryUnit = true;
4749
public hasHidden = false;
4850

51+
public pinningConfig: IPinningConfig = { columns: ColumnPinningPosition.End };
52+
4953

5054
data = [{
5155
__metadata: {
@@ -803,4 +807,12 @@ export class GridSummaryComponent implements OnInit {
803807
public scrScrollTo(index) {
804808
this.grid1.verticalScrollContainer.scrollTo(parseInt(index, 10));
805809
}
810+
811+
onChange() {
812+
if (this.pinningConfig.columns === ColumnPinningPosition.End) {
813+
this.pinningConfig = { columns: ColumnPinningPosition.Start };
814+
} else {
815+
this.pinningConfig = { columns: ColumnPinningPosition.End };
816+
}
817+
}
806818
}

0 commit comments

Comments
 (0)