Skip to content

Commit dd19946

Browse files
authored
fix(excel-export): Get correct grid column collection from row island… (#15247)
1 parent d40c386 commit dd19946

File tree

4 files changed

+67
-5
lines changed

4 files changed

+67
-5
lines changed

projects/igniteui-angular/src/lib/services/excel/excel-exporter-grid.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
4040
import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
4141
import { FilteringLogic } from '../../data-operations/filtering-expression.interface';
4242
import { IgxHierarchicalGridExportComponent,
43+
IgxHierarchicalGridMCHCollapsibleComponent,
4344
IgxHierarchicalGridMultiColumnHeaderIslandsExportComponent,
4445
IgxHierarchicalGridMultiColumnHeadersExportComponent,
4546
IgxHierarchicalGridSummariesExportComponent
@@ -1013,6 +1014,27 @@ describe('Excel Exporter', () => {
10131014

10141015
await exportAndVerify(hGrid, options, actualData.exportEmptyMultiColumnHeadersDataWithExportedHeaders);
10151016
});
1017+
1018+
it('should export collapsible MCH with visibleWhenCollapsed set on 2 columns with the same field', async () => {
1019+
const fix = TestBed.createComponent(IgxHierarchicalGridMCHCollapsibleComponent);
1020+
fix.detectChanges();
1021+
1022+
const hGrid = fix.componentInstance.hGrid;
1023+
GridFunctions.clickGroupExpandIndicator(fix, hGrid.columnList.get(1));
1024+
fix.detectChanges();
1025+
1026+
const firstRow = hGrid.gridAPI.get_row_by_index(0) as IgxHierarchicalRowComponent;
1027+
UIInteractions.simulateClickAndSelectEvent(firstRow.expander);
1028+
fix.detectChanges();
1029+
1030+
const rowIsland = hGrid.childLayoutList.first;
1031+
GridFunctions.clickGroupExpandIndicator(fix, rowIsland.columnList.get(1));
1032+
fix.detectChanges();
1033+
1034+
1035+
options = createExportOptions('HierarchicalGridCollapsibleMCHExcelExport');
1036+
await exportAndVerify(hGrid, options, actualData.exportHierarchicalDataWithCollapsibleMCH);
1037+
})
10161038
});
10171039

10181040
describe('', () => {

projects/igniteui-angular/src/lib/services/excel/test-data.service.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,20 @@ export class FileContentData {
12821282
return this.createData();
12831283
}
12841284

1285+
public get exportHierarchicalDataWithCollapsibleMCH() {
1286+
this._sharedStringsData =
1287+
`count="53" uniqueCount="38"><si><t>ID</t></si><si><t>Location</t></si><si><t>City</t></si><si><t>ALFKI</t></si><si><t>Berlin</t></si><si><t>CompanyName</t></si><si><t>Personal Details</t></si><si><t>ContactName</t></si><si><t>ContactTitle</t></si><si><t>Ana Trujillo Emparedados y helados</t></si><si><t>Ana Trujillo</t></si><si><t>Owner</t></si><si><t>Antonio Moreno Taquería</t></si><si><t>Antonio Moreno</t></si><si><t>COMMI</t></si><si><t>Sao Paulo</t></si><si><t>Consolidated Holdings</t></si><si><t>Elizabeth Brown</t></si><si><t>Sales Representative</t></si><si><t>Drachenblut Delikatessen</t></si><si><t>Sven Ottlieb</t></si><si><t>Order Administrator</t></si><si><t>Du monde entier</t></si><si><t>Janine Labrune</t></si><si><t>FISSA</t></si><si><t>Madrid</t></si><si><t>Folies gourmandes</t></si><si><t>Martine Rancé</t></si><si><t>Assistant Sales Agent</t></si><si><t>Folk och fä HB</t></si><si><t>Maria Larsson</t></si><si><t>Frankenversand</t></si><si><t>Peter Franken</t></si><si><t>Marketing Manager</t></si><si><t>France restauration</t></si><si><t>Carine Schmitt</t></si><si><t>FRANS</t></si><si><t>Torino</t></si>`;
1288+
1289+
this._worksheetData =
1290+
`<sheetPr><outlinePr summaryBelow="0"/></sheetPr>
1291+
<sheetViews><sheetView tabSelected="1" workbookViewId="0"></sheetView></sheetViews>
1292+
<sheetFormatPr defaultRowHeight="15" outlineLevelRow="1" x14ac:dyDescent="0.25"/>
1293+
<cols><col min="1" max="5" width="20" customWidth="1"/></cols>
1294+
<sheetData><row r="1"><c r="A1" s="3" t="s"><v>0</v></c><c r="B1" s="3" t="s"><v>1</v></c></row><row r="2"><c r="B2" s="3" t="s"><v>2</v></c></row><row r="3"><c r="A3" t="s"><v>3</v></c><c r="B3" t="s"><v>4</v></c></row><row r="4" outlineLevel="1"><c r="B4" s="3" t="s"><v>5</v></c><c r="C4" s="3" t="s"><v>6</v></c><c r="D4" s="3" /></row><row r="5" outlineLevel="1"><c r="B5" t="s" s="3"><v>5</v></c><c r="C5" t="s" s="3"><v>7</v></c><c r="D5" t="s" s="3"><v>8</v></c></row><row r="6" outlineLevel="1"><c r="B6" t="s"><v>9</v></c><c r="C6" t="s"><v>10</v></c><c r="D6" t="s"><v>11</v></c></row><row r="7" outlineLevel="1"><c r="B7" t="s"><v>12</v></c><c r="C7" t="s"><v>13</v></c><c r="D7" t="s"><v>11</v></c></row><row r="8"><c r="A8" t="s"><v>14</v></c><c r="B8" t="s"><v>15</v></c></row><row r="9" outlineLevel="1" hidden="1"><c r="B9" s="3" t="s"><v>5</v></c><c r="C9" s="3" t="s"><v>6</v></c><c r="D9" s="3" /></row><row r="10" outlineLevel="1" hidden="1"><c r="B10" t="s" s="3"><v>5</v></c><c r="C10" t="s" s="3"><v>7</v></c><c r="D10" t="s" s="3"><v>8</v></c></row><row r="11" outlineLevel="1" hidden="1"><c r="B11" t="s"><v>16</v></c><c r="C11" t="s"><v>17</v></c><c r="D11" t="s"><v>18</v></c></row><row r="12" outlineLevel="1" hidden="1"><c r="B12" t="s"><v>19</v></c><c r="C12" t="s"><v>20</v></c><c r="D12" t="s"><v>21</v></c></row><row r="13" outlineLevel="1" hidden="1"><c r="B13" t="s"><v>22</v></c><c r="C13" t="s"><v>23</v></c><c r="D13" t="s"><v>11</v></c></row><row r="14"><c r="A14" t="s"><v>24</v></c><c r="B14" t="s"><v>25</v></c></row><row r="15" outlineLevel="1" hidden="1"><c r="B15" s="3" t="s"><v>5</v></c><c r="C15" s="3" t="s"><v>6</v></c><c r="D15" s="3" /></row><row r="16" outlineLevel="1" hidden="1"><c r="B16" t="s" s="3"><v>5</v></c><c r="C16" t="s" s="3"><v>7</v></c><c r="D16" t="s" s="3"><v>8</v></c></row><row r="17" outlineLevel="1" hidden="1"><c r="B17" t="s"><v>26</v></c><c r="C17" t="s"><v>27</v></c><c r="D17" t="s"><v>28</v></c></row><row r="18" outlineLevel="1" hidden="1"><c r="B18" t="s"><v>29</v></c><c r="C18" t="s"><v>30</v></c><c r="D18" t="s"><v>11</v></c></row><row r="19" outlineLevel="1" hidden="1"><c r="B19" t="s"><v>31</v></c><c r="C19" t="s"><v>32</v></c><c r="D19" t="s"><v>33</v></c></row><row r="20" outlineLevel="1" hidden="1"><c r="B20" t="s"><v>34</v></c><c r="C20" t="s"><v>35</v></c><c r="D20" t="s"><v>33</v></c></row><row r="21"><c r="A21" t="s"><v>36</v></c><c r="B21" t="s"><v>37</v></c></row></sheetData><mergeCells count="8"> <mergeCell ref="A1:A2" /> <mergeCell ref="B1:B1" /> <mergeCell ref="B4:B5" /> <mergeCell ref="C4:D4" /> <mergeCell ref="B9:B10" /> <mergeCell ref="C9:D9" /> <mergeCell ref="B15:B16" /> <mergeCell ref="C15:D15" /></mergeCells>`;
1295+
1296+
return this.createData();
1297+
}
1298+
12851299
public get exportMultiColumnHeadersData() {
12861300
this._sharedStringsData =
12871301
`count="195" uniqueCount="162"><si><t>ID</t></si><si><t>General Information</t></si><si><t>Address Information</t></si><si><t>Personal Details</t></si><si><t>Location</t></si><si><t>Contact Information</t></si><si><t>ContactName</t></si><si><t>ContactTitle</t></si><si><t>Country</t></si><si><t>Phone</t></si><si><t>Fax</t></si><si><t>PostalCode</t></si><si><t>ALFKI</t></si><si><t>Maria Anders</t></si><si><t>Sales Representative</t></si><si><t>Germany</t></si><si><t>030-0074321</t></si><si><t>030-0076545</t></si><si><t>12209</t></si><si><t>ANATR</t></si><si><t>Ana Trujillo</t></si><si><t>Owner</t></si><si><t>Mexico</t></si><si><t>(5) 555-4729</t></si><si><t>(5) 555-3745</t></si><si><t>05021</t></si><si><t>ANTON</t></si><si><t>Antonio Moreno</t></si><si><t>(5) 555-3932</t></si><si><t>05023</t></si><si><t>AROUT</t></si><si><t>Thomas Hardy</t></si><si><t>UK</t></si><si><t>(171) 555-7788</t></si><si><t>(171) 555-6750</t></si><si><t>WA1 1DP</t></si><si><t>BERGS</t></si><si><t>Christina Berglund</t></si><si><t>Order Administrator</t></si><si><t>Sweden</t></si><si><t>0921-12 34 65</t></si><si><t>0921-12 34 67</t></si><si><t>S-958 22</t></si><si><t>BLAUS</t></si><si><t>Hanna Moos</t></si><si><t>0621-08460</t></si><si><t>0621-08924</t></si><si><t>68306</t></si><si><t>BLONP</t></si><si><t>Frédérique Citeaux</t></si><si><t>Marketing Manager</t></si><si><t>France</t></si><si><t>88.60.15.31</t></si><si><t>88.60.15.32</t></si><si><t>67000</t></si><si><t>BOLID</t></si><si><t>Martín Sommer</t></si><si><t>Spain</t></si><si><t>(91) 555 22 82</t></si><si><t>(91) 555 91 99</t></si><si><t>28023</t></si><si><t>BONAP</t></si><si><t>Laurence Lebihan</t></si><si><t>91.24.45.40</t></si><si><t>91.24.45.41</t></si><si><t>13008</t></si><si><t>BOTTM</t></si><si><t>Elizabeth Lincoln</t></si><si><t>Accounting Manager</t></si><si><t>Canada</t></si><si><t>(604) 555-4729</t></si><si><t>(604) 555-3745</t></si><si><t>T2F 8M4</t></si><si><t>BSBEV</t></si><si><t>Victoria Ashworth</t></si><si><t>(171) 555-1212</t></si><si><t>EC2 5NT</t></si><si><t>CACTU</t></si><si><t>Patricio Simpson</t></si><si><t>Sales Agent</t></si><si><t>Argentina</t></si><si><t>(1) 135-5555</t></si><si><t>(1) 135-4892</t></si><si><t>1010</t></si><si><t>CENTC</t></si><si><t>Francisco Chang</t></si><si><t>(5) 555-3392</t></si><si><t>(5) 555-7293</t></si><si><t>05022</t></si><si><t>CHOPS</t></si><si><t>Yang Wang</t></si><si><t>Switzerland</t></si><si><t>0452-076545</t></si><si><t>3012</t></si><si><t>COMMI</t></si><si><t>Pedro Afonso</t></si><si><t>Sales Associate</t></si><si><t>Brazil</t></si><si><t>(11) 555-7647</t></si><si><t>05432-043</t></si><si><t>CONSH</t></si><si><t>Elizabeth Brown</t></si><si><t>(171) 555-2282</t></si><si><t>(171) 555-9199</t></si><si><t>WX1 6LT</t></si><si><t>DRACD</t></si><si><t>Sven Ottlieb</t></si><si><t>0241-039123</t></si><si><t>0241-059428</t></si><si><t>52066</t></si><si><t>DUMON</t></si><si><t>Janine Labrune</t></si><si><t>40.67.88.88</t></si><si><t>40.67.89.89</t></si><si><t>44000</t></si><si><t>EASTC</t></si><si><t>Ann Devon</t></si><si><t>(171) 555-0297</t></si><si><t>(171) 555-3373</t></si><si><t>WX3 6FW</t></si><si><t>ERNSH</t></si><si><t>Roland Mendel</t></si><si><t>Sales Manager</t></si><si><t>Austria</t></si><si><t>7675-3425</t></si><si><t>7675-3426</t></si><si><t>8010</t></si><si><t>FAMIA</t></si><si><t>Aria Cruz</t></si><si><t>Marketing Assistant</t></si><si><t>(11) 555-9857</t></si><si><t>05442-030</t></si><si><t>FISSA</t></si><si><t>Diego Roel</t></si><si><t>(91) 555 94 44</t></si><si><t>(91) 555 55 93</t></si><si><t>28034</t></si><si><t>FOLIG</t></si><si><t>Martine Rancé</t></si><si><t>Assistant Sales Agent</t></si><si><t>20.16.10.16</t></si><si><t>20.16.10.17</t></si><si><t>59000</t></si><si><t>FOLKO</t></si><si><t>Maria Larsson</t></si><si><t>0695-34 67 21</t></si><si><t>S-844 67</t></si><si><t>FRANK</t></si><si><t>Peter Franken</t></si><si><t>089-0877310</t></si><si><t>089-0877451</t></si><si><t>80805</t></si><si><t>FRANR</t></si><si><t>Carine Schmitt</t></si><si><t>40.32.21.21</t></si><si><t>40.32.21.20</t></si><si><t>FRANS</t></si><si><t>Paolo Accorti</t></si><si><t>Italy</t></si><si><t>011-4988260</t></si><si><t>011-4988261</t></si><si><t>10100</t></si>`;

projects/igniteui-angular/src/lib/services/exporter-common/base-export-service.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export interface IExportRecord {
4343
hidden?: boolean;
4444
summaryKey?: string;
4545
hierarchicalOwner?: string;
46+
references?: IColumnInfo[];
4647
}
4748

4849
export interface IColumnList {
@@ -484,8 +485,7 @@ export abstract class IgxBaseExporter {
484485
return a;
485486
}, {});
486487
} else {
487-
const filteredHeaders = ownerCols.filter(c => c.skip).map(c => c.header ? c.header : c.field);
488-
record.data = record.data.filter(d => filteredHeaders.indexOf(d) === -1);
488+
record.data = record.data.filter((_, i) => !record.references[i].skip)
489489
}
490490
}
491491

@@ -762,16 +762,16 @@ export abstract class IgxBaseExporter {
762762
childData: any[], expansionStateVal: boolean, grid: GridType) {
763763
const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`;
764764
const columnList = this._ownersMap.get(island).columns;
765-
const columnHeader = columnList
766-
.filter(col => col.headerType === ExportHeaderType.ColumnHeader)
767-
.map(col => col.header ? col.header : col.field);
765+
const columnHeaders = columnList.filter(col => col.headerType === ExportHeaderType.ColumnHeader);
766+
const columnHeader = columnHeaders.map(col => col.header ? col.header : col.field);
768767

769768
const headerRecord: IExportRecord = {
770769
data: columnHeader,
771770
level: island.level,
772771
type: ExportRecordType.HeaderRecord,
773772
owner: island,
774773
hidden: !expansionStateVal,
774+
references: columnHeaders,
775775
hierarchicalOwner
776776
};
777777

projects/igniteui-angular/src/lib/test-utils/hierarchical-grid-components.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,32 @@ export class IgxHierarchicalGridMultiColumnHeadersExportComponent {
566566
public data = HIERARCHICAL_SAMPLE_DATA;
567567
}
568568

569+
@Component({
570+
template: `
571+
<igx-hierarchical-grid [data]="data" [height]="'1200px'" [width]="'700px'" #hierarchicalGrid [moving]="true">
572+
<igx-column field="ID" [sortable]="true" [resizable]="true"></igx-column>
573+
<igx-column-group header="Location" [collapsible]="true">
574+
<igx-column field="Address" [sortable]="true" [resizable]="true" [visibleWhenCollapsed]="false"></igx-column>
575+
<igx-column field="City" [sortable]="true" [resizable]="true" [visibleWhenCollapsed]="false"></igx-column>
576+
<igx-column field="City" [sortable]="true" [resizable]="true" [visibleWhenCollapsed]="true"></igx-column>
577+
</igx-column-group>
578+
<igx-row-island [key]="'ChildCompanies'" [autoGenerate]="false">
579+
<igx-column field="CompanyName" [sortable]="true" [resizable]="true"></igx-column>
580+
<igx-column-group header="Personal Details" [collapsible]="true">
581+
<igx-column field="ContactName" [sortable]="true" [resizable]="true" [visibleWhenCollapsed]="true"></igx-column>
582+
<igx-column field="ContactName" [sortable]="true" [resizable]="true" [visibleWhenCollapsed]="false"></igx-column>
583+
<igx-column field="ContactTitle" [sortable]="true" [resizable]="true" [visibleWhenCollapsed]="false"></igx-column>
584+
</igx-column-group>
585+
</igx-row-island>
586+
</igx-hierarchical-grid>
587+
`,
588+
imports: [IgxHierarchicalGridComponent, IgxColumnComponent, IgxColumnGroupComponent, IgxRowIslandComponent]
589+
})
590+
export class IgxHierarchicalGridMCHCollapsibleComponent {
591+
@ViewChild('hierarchicalGrid', { read: IgxHierarchicalGridComponent, static: true }) public hGrid: IgxHierarchicalGridComponent;
592+
public data = HIERARCHICAL_SAMPLE_DATA;
593+
}
594+
569595
@Component({
570596
template: `
571597
<igx-hierarchical-grid [data]="data" [height]="'1200px'" [width]="'700px'" #hierarchicalGrid>

0 commit comments

Comments
 (0)