Skip to content

Commit 9fb3e34

Browse files
MKirovaMKirova
authored andcommitted
Sort all child data recursively.
1 parent 78d4490 commit 9fb3e34

File tree

4 files changed

+51
-23
lines changed

4 files changed

+51
-23
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
| pivotGridFilter:pivotConfiguration:filterStrategy:advancedFilteringExpressionsTree:filteringPipeTrigger:pipeTrigger
3434
| pivotGridRow:pivotConfiguration:expansionStates:pipeTrigger:sortingExpressions
3535
| pivotGridColumn:pivotConfiguration:expansionStates:pipeTrigger:sortingExpressions
36-
| pivotGridColumnSort:sortingExpressions:sortStrategy:pipeTrigger:sortingExpressions
36+
| pivotGridColumnSort:sortingExpressions:sortStrategy:pipeTrigger
3737
| pivotGridRowExpansion:pivotConfiguration:expansionStates:pipeTrigger"
3838
let-rowIndex="index" [igxForScrollOrientation]="'vertical'" [igxForScrollContainer]='verticalScroll'
3939
[igxForContainerSize]='calcHeight'

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import { DataUtil } from '../../data-operations/data-util';
44
import { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
55
import { IFilteringStrategy } from '../../data-operations/filtering-strategy';
66
import { IPivotConfiguration, IPivotDimension, IPivotKeys } from './pivot-grid.interface';
7-
import { DimensionValuesFilteringStrategy, PivotColumnDimensionsStrategy,
8-
PivotRowDimensionsStrategy } from '../../data-operations/pivot-strategy';
7+
import {
8+
DimensionValuesFilteringStrategy, PivotColumnDimensionsStrategy,
9+
PivotRowDimensionsStrategy
10+
} from '../../data-operations/pivot-strategy';
911
import { PivotUtil } from './pivot-util';
1012
import { FilteringLogic } from '../../data-operations/filtering-expression.interface';
1113
import { GridBaseAPIService, IgxGridBaseDirective } from '../hierarchical-grid/public_api';
@@ -29,18 +31,18 @@ export class IgxPivotRowPipe implements PipeTransform {
2931
_: Map<any, boolean>,
3032
_pipeTrigger?: number,
3133
__?,
32-
pivotKeys: IPivotKeys = {aggregations: 'aggregations', records: 'records', children: 'children', level: 'level'}
34+
pivotKeys: IPivotKeys = { aggregations: 'aggregations', records: 'records', children: 'children', level: 'level' }
3335
): any[] {
3436
const enabledRows = config.rows.filter(x => x.enabled);
35-
const rowStrategy = config.rowStrategy || PivotRowDimensionsStrategy.instance();
37+
const rowStrategy = config.rowStrategy || PivotRowDimensionsStrategy.instance();
3638
return rowStrategy.process(collection.slice(0), enabledRows, config.values, pivotKeys);
3739
}
3840
}
3941

4042
/**
4143
* @hidden
4244
*/
43-
@Pipe({
45+
@Pipe({
4446
name: 'pivotGridRowExpansion',
4547
pure: true
4648
})
@@ -54,7 +56,7 @@ export class IgxPivotRowExpansionPipe implements PipeTransform {
5456
expansionStates: Map<any, boolean>,
5557
_pipeTrigger?: number,
5658
__?,
57-
pivotKeys: IPivotKeys = {aggregations: 'aggregations', records: 'records', children: 'children', level: 'level'}
59+
pivotKeys: IPivotKeys = { aggregations: 'aggregations', records: 'records', children: 'children', level: 'level' }
5860
): any[] {
5961
const enabledRows = config.rows.filter(x => x.enabled);
6062
const data = collection ? collection.slice(0) : [];
@@ -99,7 +101,7 @@ export class IgxPivotColumnPipe implements PipeTransform {
99101
_: Map<any, boolean>,
100102
_pipeTrigger?: number,
101103
__?,
102-
pivotKeys: IPivotKeys = {aggregations: 'aggregations', records: 'records', children: 'children', level: 'level'}
104+
pivotKeys: IPivotKeys = { aggregations: 'aggregations', records: 'records', children: 'children', level: 'level' }
103105
): any[] {
104106
const enabledColumns = config.columns.filter(x => x.enabled);
105107
const enabledValues = config.values.filter(x => x.enabled);
@@ -112,7 +114,7 @@ export class IgxPivotColumnPipe implements PipeTransform {
112114
/**
113115
* @hidden
114116
*/
115-
@Pipe({
117+
@Pipe({
116118
name: 'pivotGridFilter',
117119
pure: true
118120
})
@@ -154,20 +156,25 @@ export class IgxPivotGridFilterPipe implements PipeTransform {
154156
/**
155157
* @hidden
156158
*/
157-
@Pipe({
159+
@Pipe({
158160
name: 'pivotGridColumnSort',
159161
pure: true
160162
})
161163
export class IgxPivotGridSortingPipe implements PipeTransform {
162164

163-
public transform(collection: any[], expressions: ISortingExpression[], sorting: IGridSortingStrategy, pipeTrigger: number): any[] {
165+
public transform(
166+
collection: any[],
167+
expressions: ISortingExpression[],
168+
sorting: IGridSortingStrategy,
169+
pipeTrigger: number,
170+
pivotKeys: IPivotKeys = { aggregations: 'aggregations', records: 'records', children: 'children', level: 'level' }
171+
): any[] {
164172
let result: any[];
165173

166174
if (!expressions.length) {
167175
result = collection;
168176
} else {
169-
// TODO - sort recursively in all records collections.
170-
result = DataUtil.sort(cloneArray(collection), expressions, sorting);
177+
result = PivotUtil.sort(cloneArray(collection, true), expressions, sorting, pivotKeys);
171178
}
172179
return result;
173180
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import { cloneValue } from '../../core/utils';
2+
import { DataUtil } from '../../data-operations/data-util';
3+
import { ISortingExpression } from '../../data-operations/sorting-expression.interface';
4+
import { IGridSortingStrategy, IgxSorting } from '../../data-operations/sorting-strategy';
25
import { IPivotConfiguration, IPivotDimension, IPivotKeys, IPivotValue, PivotDimensionType } from './pivot-grid.interface';
36

47
export class PivotUtil {
@@ -21,6 +24,19 @@ export class PivotUtil {
2124
return hierarchy;
2225
}
2326

27+
public static sort(data: any[], expressions: ISortingExpression[], sorting: IGridSortingStrategy = new IgxSorting(), pivotKeys): any[] {
28+
data.forEach(rec => {
29+
const keys = Object.keys(rec);
30+
keys.forEach(k => {
31+
if (k.indexOf(pivotKeys.records) !== -1) {
32+
// sort all child record collections based on expression recursively.
33+
rec[k] = this.sort(rec[k], expressions, sorting, pivotKeys);
34+
}
35+
});
36+
});
37+
return DataUtil.sort(data, expressions, sorting);
38+
}
39+
2440
public static extractValueFromDimension(dim: IPivotDimension, recData: any) {
2541
return dim.memberFunction ? dim.memberFunction.call(null, recData) : recData[dim.memberName];
2642
}

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,33 @@ export class PivotGridHierarchySampleComponent {
2222

2323
memberName: 'Product',
2424
memberFunction: (data) => data.Product.Name,
25-
enabled: true,
26-
childLevel:
27-
{
28-
memberName: 'City',
29-
memberFunction: (data) => data.Seller.City,
30-
enabled: true,
31-
}
32-
25+
enabled: true
3326
}
3427
},
3528
],
3629
rows: [{
3730
memberName: 'AllSeller',
38-
memberFunction: () => 'All',
31+
memberFunction: () => 'All Seller',
3932
enabled: true,
4033
childLevel:
4134
{
4235
memberName: 'Seller',
4336
memberFunction: (data) => data.Seller.Name,
4437
enabled: true,
4538
}
46-
}],
39+
},
40+
{
41+
memberName: 'AllCity',
42+
memberFunction: () => 'All City',
43+
enabled: true,
44+
childLevel:
45+
{
46+
memberName: 'City',
47+
memberFunction: (data) => data.Seller.City,
48+
enabled: true,
49+
}
50+
}
51+
],
4752
values: [
4853
{
4954
member: 'NumberOfUnits',

0 commit comments

Comments
 (0)