( sheetDefinition: SheetDefinition, data: SheetRow[], enumLabelDict: EnumLabelDict, csvDownloadMode: CsvDownloadMode )
| 78 | } |
| 79 | |
| 80 | export function generateCsvContent( |
| 81 | sheetDefinition: SheetDefinition, |
| 82 | data: SheetRow[], |
| 83 | enumLabelDict: EnumLabelDict, |
| 84 | csvDownloadMode: CsvDownloadMode |
| 85 | ) { |
| 86 | const headers = sheetDefinition.columns |
| 87 | .map((column) => |
| 88 | escapeCsvCell(csvDownloadMode === 'label' ? column.label : column.id) |
| 89 | ) |
| 90 | .join(DOWNLOADED_CSV_SEPARATOR); |
| 91 | |
| 92 | const rows = data.map((row) => |
| 93 | sheetDefinition.columns |
| 94 | .map((column) => { |
| 95 | const value = row[column.id]; |
| 96 | let processedValue: ImporterOutputFieldType; |
| 97 | |
| 98 | if (csvDownloadMode === 'value' || value == null) { |
| 99 | processedValue = Array.isArray(value) ? value.join(', ') : value; |
| 100 | } else { |
| 101 | processedValue = getColumnDisplayValue( |
| 102 | sheetDefinition, |
| 103 | column, |
| 104 | value, |
| 105 | enumLabelDict |
| 106 | ); |
| 107 | } |
| 108 | |
| 109 | return escapeCsvCell(processedValue); |
| 110 | }) |
| 111 | .join(DOWNLOADED_CSV_SEPARATOR) |
| 112 | ); |
| 113 | |
| 114 | const csv = [headers, ...rows].join('\n'); |
| 115 | return new Blob([csv], { type: 'text/csv' }); |
| 116 | } |
| 117 | |
| 118 | export function downloadSheetAsCsv( |
| 119 | sheetDefinition: SheetDefinition, |
no test coverage detected