Skip to content

Commit 43cadd0

Browse files
MKirovaMKirova
authored andcommitted
Initial commit with chip areas for row/columns dimensions and values.
1 parent 45972b3 commit 43cadd0

File tree

7 files changed

+123
-18
lines changed

7 files changed

+123
-18
lines changed

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<ng-content select="igx-grid-toolbar"></ng-content>
33

44
<!-- Grid table head row area -->
5-
<igx-pivot-header-row class="igx-grid-thead" tabindex="0"
5+
<igx-pivot-header-row class="igx-grid-thead" tabindex="0" style='flex-direction: column;'
66
[grid]="this"
77
[hasMRL]="hasColumnLayouts"
88
[density]="displayDensity"
@@ -32,8 +32,8 @@
3232
class="igx-grid__scroll-on-drag-pinned" [style.left.px]="pinnedWidth"></span>
3333
<ng-template igxGridFor let-rowData [igxGridForOf]="data
3434
| pivotGridFilter:pivotConfiguration.filters:filterStrategy:advancedFilteringExpressionsTree
35-
| pivotGridRow:pivotConfiguration.rows:expansionStates:pivotConfiguration.values
36-
| pivotGridColumn:pivotConfiguration.columns:pivotConfiguration.values"
35+
| pivotGridRow:pivotConfiguration.rows:expansionStates:pivotConfiguration.values:pipeTrigger
36+
| pivotGridColumn:pivotConfiguration.columns:pivotConfiguration.values:pipeTrigger"
3737
let-rowIndex="index" [igxForScrollOrientation]="'vertical'" [igxForScrollContainer]='verticalScroll'
3838
[igxForContainerSize]='calcHeight'
3939
[igxForItemSize]="hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight"

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.component.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,22 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
201201
}
202202

203203
public get pivotRowWidths() {
204-
const rowDimCount = this.pivotConfiguration.rows.length;
204+
const rowDimCount = this.rowDimensions.length;
205205
return MINIMUM_COLUMN_WIDTH * rowDimCount;
206206
}
207207

208+
public get rowDimensions() {
209+
return this.pivotConfiguration.rows.filter(x => x.enabled);
210+
}
211+
212+
public get columnDimensions() {
213+
return this.pivotConfiguration.columns.filter(x => x.enabled);
214+
}
215+
216+
public get values() {
217+
return this.pivotConfiguration.values.filter(x => x.enabled);
218+
}
219+
208220
public toggleColumn(col: IgxColumnComponent) {
209221
const state = this.columnGroupStates.get(col.field);
210222
const newState = !state;
@@ -261,7 +273,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
261273
}
262274

263275
protected get hasMultipleValues() {
264-
return this.pivotConfiguration.values.length > 1;
276+
return this.values.length > 1;
265277
}
266278

267279
/**
@@ -271,7 +283,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
271283
const data = this.gridAPI.get_data();
272284
const fieldsMap = PivotUtil.getFieldsHierarchy(
273285
data,
274-
this.pivotConfiguration.columns,
286+
this.columnDimensions,
275287
PivotDimensionType.Column,
276288
{aggregations: 'aggregations', records: 'records', children: 'children', level: 'level'}
277289
);
@@ -343,7 +355,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
343355

344356
protected getMeasureChildren(colFactory, data, parent, hidden) {
345357
const cols = [];
346-
this.pivotConfiguration.values.forEach(val => {
358+
this.values.forEach(val => {
347359
const ref = colFactory.create(this.viewRef.injector);
348360
ref.instance.header = val.member;
349361
ref.instance.field = parent.field + '-' + val.member;

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.pipes.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ export class IgxPivotRowPipe implements PipeTransform {
2222
rows: IPivotDimension[],
2323
expansionStates: Map<any, boolean>,
2424
values?: IPivotValue[],
25+
_pipeTrigger?: number,
2526
pivotKeys: IPivotKeys =
2627
{ aggregations: 'aggregations', records: 'records', children: 'children', level: 'level'}
2728
): any[] {
2829
let hierarchies;
2930
let data;
30-
for (const row of rows) {
31+
const enabledRows = rows.filter(x => x.enabled);
32+
for (const row of enabledRows) {
3133
if (!data) {
3234
// build hierarchies - groups and subgroups
3335
hierarchies = PivotUtil.getFieldsHierarchy(collection, [row], PivotDimensionType.Row, pivotKeys);
@@ -77,17 +79,20 @@ export class IgxPivotColumnPipe implements PipeTransform {
7779
collection: any,
7880
columns: IPivotDimension[],
7981
values?: IPivotValue[],
82+
_pipeTrigger?: number,
8083
pivotKeys: IPivotKeys =
8184
{ aggregations: 'aggregations', records: 'records', children: 'children', level: 'level' }
8285
): any[] {
8386
// build hierarchies - groups and subgroups by columns
8487
const result = [];
88+
const enabledColumns = columns.filter(x => x.enabled);
89+
const enabledValues = values.filter(x => x.enabled);
8590
collection.forEach(hierarchy => {
8691
// apply aggregations based on the created groups and generate column fields based on the hierarchies
87-
this.groupColumns(hierarchy, columns, values, pivotKeys);
92+
this.groupColumns(hierarchy, enabledColumns, enabledValues, pivotKeys);
8893
if (hierarchy[pivotKeys.children]) {
8994
let flatCols = {};
90-
PivotUtil.flattenColumnHierarchy(hierarchy[pivotKeys.children], values, pivotKeys).forEach(o => {
95+
PivotUtil.flattenColumnHierarchy(hierarchy[pivotKeys.children], enabledValues, pivotKeys).forEach(o => {
9196
delete o[pivotKeys.records];
9297
flatCols = { ...flatCols, ...o };
9398
});

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,53 @@
1+
<div class="igx-grid-thead__wrapper" role="row" [style.width.px]="width" *ngIf="!row" >
2+
<div class="igx-grid__tr" role="row" [style.width.px]="width">
3+
<span #pivotFilterContainer class="igx-grid__tr-action" [style.min-width.px] = "grid.pivotRowWidths"
4+
(pointerdown)="$event.preventDefault()">
5+
<!-- Filter area -->
6+
<igx-chips-area>
7+
<igx-chip *ngFor="let filter of grid.pivotConfiguration.filters" [id]="filter.fieldName" [removable]="true">
8+
<igx-icon igxPrefix>filter_list</igx-icon>
9+
{{filter.fieldName}}
10+
</igx-chip>
11+
</igx-chips-area>
12+
</span>
13+
<div #pivotValueContainer [style.min-width.px] = "grid.unpinnedWidth"
14+
(pointerdown)="$event.preventDefault()">
15+
16+
<!-- Columns area -->
17+
<igx-chips-area (reorder)="columnsOrderChanged($event)">
18+
<igx-chip *ngFor="let col of grid.columnDimensions" [draggable]="'true'" [id]="col.fieldName" [removable]="true" (remove)="columnRemoved($event)">
19+
<igx-icon igxPrefix>view_column</igx-icon>
20+
<igx-icon igxPrefix>filter_list</igx-icon>
21+
{{col.fieldName}}
22+
</igx-chip>
23+
</igx-chips-area>
24+
25+
<!-- Value area -->
26+
<igx-chips-area>
27+
<igx-chip *ngFor="let value of grid.values" [draggable]="'true'" [id]="value.member" [removable]="true" (remove)="valueRemoved($event)">
28+
<igx-icon igxPrefix>functions</igx-icon>
29+
{{value.member}}
30+
</igx-chip>
31+
</igx-chips-area>
32+
</div>
33+
</div>
34+
</div>
135
<div role="rowgroup" class="igx-grid-thead__wrapper" [style.width.px]="width"
236
[attr.aria-activedescendant]="activeDescendant" [class.igx-grid__tr--mrl]="hasMRL">
3-
437
<!-- Column headers area -->
538
<div class="igx-grid__tr" role="row" [style.width.px]="width">
639

740
<ng-container *ngIf="!row">
841
<div #pivotContainer class="igx-grid__tr-action" [style.min-width.px] = "grid.pivotRowWidths"
9-
(pointerdown)="$event.preventDefault()">
10-
42+
(pointerdown)="$event.preventDefault()" style='display: flex; align-items: flex-end;'>
43+
<!-- Row area -->
44+
<igx-chips-area (reorder)="rowsOrderChanged($event)">
45+
<igx-chip *ngFor="let row of grid.rowDimensions" [draggable]="'true'" [id]="row.fieldName" [removable]="true" (remove)="rowRemoved($event)">
46+
<igx-icon igxPrefix>table_rows</igx-icon>
47+
<igx-icon igxPrefix>filter_list</igx-icon>
48+
{{ row.fieldName}}
49+
</igx-chip>
50+
</igx-chips-area>
1151
</div>
1252
</ng-container>
1353

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {
33
Component,
44
Input
55
} from '@angular/core';
6+
import { IBaseChipEventArgs } from '../../chips/chip.component';
7+
import { IChipsAreaReorderEventArgs } from '../../chips/chips-area.component';
68
import { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';
79
import { IgxPivotRowComponent } from './pivot-row.component';
810

@@ -31,4 +33,44 @@ export interface IgxGridRowSelectorsTemplateContext {
3133
export class IgxPivotHeaderRowComponent extends IgxGridHeaderRowComponent {
3234
@Input()
3335
public row: IgxPivotRowComponent;
36+
37+
public columnsOrderChanged(event: IChipsAreaReorderEventArgs) {
38+
const newOrder = [];
39+
for (const chip of event.chipsArray) {
40+
const chipItem = this.grid.pivotConfiguration.columns.filter((item) => item.fieldName === chip.id)[0];
41+
newOrder.push(chipItem);
42+
}
43+
this.grid.pivotConfiguration.columns = newOrder;
44+
this.grid.setupColumns();
45+
this.grid.pipeTrigger++;
46+
}
47+
48+
public rowsOrderChanged(event: IChipsAreaReorderEventArgs) {
49+
const newOrder = [];
50+
for (const chip of event.chipsArray) {
51+
const chipItem = this.grid.pivotConfiguration.rows.filter((item) => item.fieldName === chip.id)[0];
52+
newOrder.push(chipItem);
53+
}
54+
this.grid.pivotConfiguration.rows = newOrder;
55+
}
56+
57+
public rowRemoved(event: IBaseChipEventArgs) {
58+
const row = this.grid.pivotConfiguration.rows.find(x => x.fieldName === event.owner.id);
59+
row.enabled = false;
60+
this.grid.pipeTrigger++;
61+
}
62+
63+
public columnRemoved(event: IBaseChipEventArgs) {
64+
const col = this.grid.pivotConfiguration.columns.find(x => x.fieldName === event.owner.id);
65+
col.enabled = false;
66+
this.grid.setupColumns();
67+
this.grid.pipeTrigger++;
68+
}
69+
70+
public valueRemoved(event: IBaseChipEventArgs) {
71+
const value = this.grid.pivotConfiguration.values.find(x => x.member === event.owner.id);
72+
value.enabled = false;
73+
this.grid.setupColumns();
74+
this.grid.pipeTrigger++;
75+
}
3476
}

src/app/pivot-grid/pivot-grid.sample.scss

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,4 @@
1414
.downFont1 {
1515
color:yellow;
1616
}
17-
18-
.sample-column {
19-
max-width: 900px;
20-
}
2117
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, ViewChild } from '@angular/core';
2-
import { IgxNumberSummaryOperand, IgxPivotGridComponent, IPivotConfiguration } from 'igniteui-angular';
2+
import { FilteringExpressionsTree, FilteringLogic, IgxNumberSummaryOperand, IgxPivotGridComponent, IPivotConfiguration } from 'igniteui-angular';
33
import { HIERARCHICAL_SAMPLE_DATA } from '../shared/sample-data';
44

55
@Component({
@@ -46,15 +46,23 @@ export class PivotGridSampleComponent {
4646
public pivotConfigHierarchy: IPivotConfiguration = {
4747
columns: [
4848

49+
{
50+
member: 'Country',
51+
fieldName: 'Country',
52+
enabled: true,
53+
childLevels: []
54+
},
4955
{
5056
member: 'ProductCategory',
57+
fieldName: 'ProductCategory',
5158
enabled: true,
5259
childLevels: []
5360
}
5461
],
5562
rows: [
5663
{
5764
member: () => 'AllProd',
65+
fieldName: 'ProductCategory',
5866
enabled: true,
5967
childLevels: [{
6068
member: 'ProductCategory',
@@ -65,6 +73,7 @@ export class PivotGridSampleComponent {
6573
{
6674
member: () => 'AllDate',
6775
enabled: true,
76+
fieldName: 'Date',
6877
childLevels: [{
6978
member: 'Date',
7079
enabled: true,
@@ -73,6 +82,7 @@ export class PivotGridSampleComponent {
7382
},
7483
{
7584
member: () => 'AllSale',
85+
fieldName: 'SellerName',
7686
enabled: true,
7787
childLevels: [{
7888
member: 'SellerName',

0 commit comments

Comments
 (0)