@@ -110,44 +110,46 @@ export class IgxPivotCellMergingPipe implements PipeTransform {
110
110
public transform (
111
111
collection : any [ ] ,
112
112
config : IPivotConfiguration ,
113
+ dim : IPivotDimension ,
113
114
pivotKeys : IPivotKeys ,
114
115
_pipeTrigger ?: number
115
116
) : any [ ] {
116
117
if ( collection . length === 0 || config . rows . length === 0 ) return collection ;
117
118
const data = collection ? cloneArray ( collection , true ) : [ ] ;
119
+ const res = [ ] ;
118
120
119
121
const enabledRows = config . rows . filter ( x => x . enabled ) ;
120
- let prev ;
121
- for ( let dim of enabledRows ) {
122
- let groupData = [ ] ;
123
- let prevValue ;
124
- let prevDim ;
125
- let prevDimRoot ;
126
- for ( let rec of data ) {
127
- const dimData = PivotUtil . getDimensionLevel ( dim , rec , pivotKeys ) ;
128
- const val = rec [ dimData . dimension . memberName ] ;
129
- const sameSiblingDim = prev ? rec [ prev . memberName ] : true ;
130
- if ( prevValue !== val && groupData . length > 0 && sameSiblingDim ) {
131
- groupData . forEach ( ( gr , ind ) => {
132
- if ( ind === 0 ) {
133
- gr [ prevDim . dimension . memberName + pivotKeys . rowDimensionSeparator + 'first' ] = true ;
134
- gr [ prevDimRoot . memberName + pivotKeys . rowDimensionSeparator + 'height' ] = groupData . length * this . grid . renderedRowHeight ;
135
- } else {
136
- gr [ prevDimRoot . memberName + pivotKeys . rowDimensionSeparator + 'height' ] = 1 ;
137
- }
138
- gr [ prevDim . dimension . memberName + pivotKeys . rowDimensionSeparator + 'rowSpan' ] = groupData . length ;
139
- } ) ;
140
- groupData [ groupData . length - 1 ] [ prevDim . dimension . memberName + pivotKeys . rowDimensionSeparator + 'last' ] = true ;
141
- groupData = [ ] ;
142
- }
143
- groupData . push ( rec ) ;
144
- prevValue = val ;
145
- prevDim = dimData ;
146
- prevDimRoot = dim ;
122
+
123
+ const prevDims = enabledRows . filter ( ( d , ind ) => ind < enabledRows . indexOf ( dim ) ) ;
124
+ let groupData = [ ] ;
125
+ let prevValue ;
126
+ let prevDim ;
127
+ let prevDimRoot ;
128
+ let prevId ;
129
+ for ( let rec of data ) {
130
+ const dimData = PivotUtil . getDimensionLevel ( dim , rec , pivotKeys ) ;
131
+ const val = rec [ dimData . dimension . memberName ] ;
132
+ const id = PivotUtil . getRecordKey ( rec , dimData . dimension , prevDims , pivotKeys ) ;
133
+ if ( prevValue !== val && groupData . length > 0 && prevId !== id ) {
134
+ const h = groupData . length > 1 ? groupData . length * this . grid . renderedRowHeight : undefined ;
135
+ groupData [ 0 ] [ prevDimRoot . memberName + pivotKeys . rowDimensionSeparator + 'height' ] = h ;
136
+ groupData [ 0 ] [ prevDim . dimension . memberName + pivotKeys . rowDimensionSeparator + 'rowSpan' ] = groupData . length ;
137
+ res . push ( groupData [ 0 ] ) ;
138
+ groupData = [ ] ;
147
139
}
148
- prev = dim ;
140
+ groupData . push ( rec ) ;
141
+ prevValue = val ;
142
+ prevDim = dimData ;
143
+ prevDimRoot = dim ;
144
+ prevId = id ;
145
+ }
146
+ if ( groupData . length > 0 ) {
147
+ const h = groupData . length > 1 ? groupData . length * this . grid . rowHeight + ( groupData . length - 1 ) + 1 : undefined ;
148
+ groupData [ 0 ] [ prevDimRoot . memberName + pivotKeys . rowDimensionSeparator + 'height' ] = h ;
149
+ groupData [ 0 ] [ prevDim . dimension . memberName + pivotKeys . rowDimensionSeparator + 'rowSpan' ] = groupData . length ;
150
+ res . push ( groupData [ 0 ] ) ;
149
151
}
150
- return data ;
152
+ return res ;
151
153
}
152
154
}
153
155
0 commit comments