@@ -44,6 +44,9 @@ export interface IExportRecord {
44
44
summaryKey ?: string ;
45
45
hierarchicalOwner ?: string ;
46
46
references ?: IColumnInfo [ ] ;
47
+ /* Adding `rawData` and `dimesnionKeys` properties to support properly exporting pivot grid data to CSV. */
48
+ rawData ?: any ;
49
+ dimensionKeys ?: string [ ] ;
47
50
}
48
51
49
52
export interface IColumnList {
@@ -448,13 +451,18 @@ export abstract class IgxBaseExporter {
448
451
if ( ! isSpecialData ) {
449
452
const owner = record . owner === undefined ? DEFAULT_OWNER : record . owner ;
450
453
const ownerCols = this . _ownersMap . get ( owner ) . columns ;
454
+ const hasRowHeaders = ownerCols . some ( c => c . headerType === ExportHeaderType . RowHeader ) ;
451
455
452
456
if ( record . type !== ExportRecordType . HeaderRecord ) {
453
457
const columns = ownerCols
454
458
. filter ( c => c . headerType === ExportHeaderType . ColumnHeader && ! c . skip )
455
459
. sort ( ( a , b ) => a . startIndex - b . startIndex )
456
460
. sort ( ( a , b ) => a . pinnedIndex - b . pinnedIndex ) ;
457
461
462
+ if ( hasRowHeaders ) {
463
+ record . rawData = record . data ;
464
+ }
465
+
458
466
record . data = columns . reduce ( ( a , e ) => {
459
467
if ( ! e . skip ) {
460
468
let rawValue = resolveNestedPath ( record . data , e . field ) ;
@@ -592,6 +600,10 @@ export abstract class IgxBaseExporter {
592
600
593
601
this . flatRecords . push ( pivotGridRecord ) ;
594
602
}
603
+
604
+ if ( this . flatRecords . length ) {
605
+ this . flatRecords [ 0 ] . dimensionKeys = Object . values ( this . pivotGridRowDimensionsMap ) ;
606
+ }
595
607
}
596
608
597
609
private prepareHierarchicalGridData ( grid : GridType , hasFiltering : boolean , hasSorting : boolean ) {
@@ -1342,8 +1354,8 @@ export abstract class IgxBaseExporter {
1342
1354
1343
1355
for ( const k of Object . keys ( groupedRecords ) ) {
1344
1356
groupedRecords [ k ] = groupedRecords [ k ] . filter ( row => mapKeys . every ( mk => Object . keys ( row ) . includes ( mk ) )
1345
- && mapValues . every ( mv => Object . values ( row ) . includes ( mv ) ) ) ;
1346
-
1357
+ && mapValues . every ( mv => Object . values ( row ) . includes ( mv ) ) ) ;
1358
+
1347
1359
if ( groupedRecords [ k ] . length === 0 ) {
1348
1360
delete groupedRecords [ k ] ;
1349
1361
}
0 commit comments