Skip to content

Commit b6eb4c2

Browse files
MKirovaMKirova
authored andcommitted
Add additional summary column for columns with children, that is always visible and shows the parent's aggregates.
1 parent ca10fbe commit b6eb4c2

File tree

1 file changed

+53
-30
lines changed

1 file changed

+53
-30
lines changed

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

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -907,22 +907,34 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
907907

908908
public toggleRowGroup(col: IgxColumnComponent, newState: boolean) {
909909
if (this.hasMultipleValues) {
910-
const fieldColumns = col.children.filter(x => !x.columnGroup);
911-
const groupColumns = col.children.filter(x => x.columnGroup);
912-
groupColumns.forEach(groupColumn => {
913-
groupColumn.hidden = newState;
914-
this.resolveToggle(groupColumn);
915-
});
916-
fieldColumns.forEach(fieldColumn => {
917-
fieldColumn.hidden = !newState;
918-
});
910+
const parentCols = col.parent ? col.parent.children.toArray() : this.columns.filter(x => x.level === 0);
911+
const siblingCol = parentCols.filter(x => x.header === col.header && x !== col)[0];
912+
const currIndex = parentCols.indexOf(col);
913+
const siblingIndex = parentCols.indexOf(siblingCol);
914+
if (currIndex < siblingIndex) {
915+
// clicked on the full hierarchy header
916+
const groupColumns = col.children.filter(x => x.columnGroup);
917+
groupColumns.forEach(groupColumn => {
918+
groupColumn.hidden = newState;
919+
this.resolveToggle(groupColumn);
920+
});
921+
922+
siblingCol.headerTemplate = this.headerTemplate;
923+
} else {
924+
// clicked on summary parent column that contains just the measures
925+
col.headerTemplate = undefined;
926+
const groupColumns = siblingCol.children.filter(x => x.columnGroup);
927+
groupColumns.forEach(groupColumn => {
928+
groupColumn.hidden = newState;
929+
this.resolveToggle(groupColumn);
930+
});
931+
}
919932
} else {
920933
const parentCols = col.parent ? col.parent.children : this.columns.filter(x => x.level === 0);
921934
const fieldColumn = parentCols.filter(x => x.header === col.header && !x.columnGroup)[0];
922935
const groupColumn = parentCols.filter(x => x.header === col.header && x.columnGroup)[0];
923936
groupColumn.hidden = newState;
924937
this.resolveToggle(groupColumn);
925-
fieldColumn.hidden = !newState;
926938
if (newState) {
927939
fieldColumn.headerTemplate = this.headerTemplate;
928940
} else {
@@ -943,14 +955,10 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
943955
protected resolveToggle(groupColumn: IgxColumnComponent) {
944956
const hasChildGroup = groupColumn.children.filter(x => x.columnGroup).length > 0;
945957
if (!groupColumn.hidden && hasChildGroup) {
946-
const fieldChildren = groupColumn.children.filter(x => !x.columnGroup);
947958
const groupChildren = groupColumn.children.filter(x => x.columnGroup);
948959
groupChildren.forEach(group => {
949960
this.resolveToggle(group);
950961
});
951-
fieldChildren.forEach(fieldChild => {
952-
fieldChild.hidden = true;
953-
});
954962
}
955963
}
956964

@@ -1095,31 +1103,46 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
10951103
if (value.expandable) {
10961104
ref.instance.headerTemplate = this.headerTemplate;
10971105
}
1098-
if (!this.hasMultipleValues) {
1099-
const refSibling = factoryColumn.create(this.viewRef.injector);
1100-
refSibling.instance.header = parent != null ? key.split(parent.header + '-')[1] : key;
1101-
refSibling.instance.field = key;
1102-
refSibling.instance.parent = parent;
1103-
ref.instance.width = value.dimension.width || MINIMUM_COLUMN_WIDTH + 'px';
1104-
ref.instance.sortable = true;
1105-
refSibling.instance.hidden = true;
1106-
refSibling.instance.dataType = this.pivotConfiguration.values[0]?.dataType || this.resolveDataTypes(data[0][key]);
1107-
refSibling.instance.formatter = this.pivotConfiguration.values[0]?.formatter;
1108-
columns.push(refSibling.instance);
1109-
}
11101106
const children = this.generateColumnHierarchy(value.children, data, ref.instance);
11111107
const filteredChildren = children.filter(x => x.level === ref.instance.level + 1);
11121108
ref.changeDetectorRef.detectChanges();
11131109
columns.push(ref.instance);
11141110
if (this.hasMultipleValues) {
1115-
const measureChildren = this.getMeasureChildren(factoryColumn, data, ref.instance, true, value.dimension.width);
1116-
const nestedChildren = filteredChildren.concat(measureChildren);
1117-
const allChildren = children.concat(measureChildren);
1111+
let measureChildren = this.getMeasureChildren(factoryColumn, data, ref.instance, true, value.dimension.width);
1112+
const nestedChildren = filteredChildren;
1113+
//const allChildren = children.concat(measureChildren);
11181114
ref.instance.children.reset(nestedChildren);
1119-
columns = columns.concat(allChildren);
1115+
columns = columns.concat(children);
1116+
if (value.dimension.childLevel) {
1117+
const refSibling = factoryColumnGroup.create(this.viewRef.injector);
1118+
refSibling.instance.header = parent != null ? key.split(parent.header + '-')[1] : key;
1119+
refSibling.instance.field = key;
1120+
refSibling.instance.parent = parent;
1121+
ref.instance.width = value.dimension.width || MINIMUM_COLUMN_WIDTH + 'px';
1122+
ref.instance.sortable = true;
1123+
refSibling.instance.dataType = this.pivotConfiguration.values[0]?.dataType || this.resolveDataTypes(data[0][key]);
1124+
refSibling.instance.formatter = this.pivotConfiguration.values[0]?.formatter;
1125+
columns.push(refSibling.instance);
1126+
1127+
measureChildren = this.getMeasureChildren(factoryColumn, data, refSibling.instance, false, value.dimension.width);
1128+
refSibling.instance.children.reset(measureChildren);
1129+
columns = columns.concat(measureChildren);
1130+
}
1131+
11201132
} else {
11211133
ref.instance.children.reset(filteredChildren);
11221134
columns = columns.concat(children);
1135+
if (value.dimension.childLevel) {
1136+
const refSibling = factoryColumn.create(this.viewRef.injector);
1137+
refSibling.instance.header = parent != null ? key.split(parent.header + '-')[1] : key;
1138+
refSibling.instance.field = key;
1139+
refSibling.instance.parent = parent;
1140+
ref.instance.width = value.dimension.width || MINIMUM_COLUMN_WIDTH + 'px';
1141+
ref.instance.sortable = true;
1142+
refSibling.instance.dataType = this.pivotConfiguration.values[0]?.dataType || this.resolveDataTypes(data[0][key]);
1143+
refSibling.instance.formatter = this.pivotConfiguration.values[0]?.formatter;
1144+
columns.push(refSibling.instance);
1145+
}
11231146
}
11241147
}
11251148
});

0 commit comments

Comments
 (0)