mirror of
https://github.com/gosticks/react-bootstrap-table2.git
synced 2025-10-16 11:55:39 +00:00
83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
/* eslint no-unneeded-ternary: 0 */
|
|
import FileSaver from 'file-saver';
|
|
|
|
export const getMetaInfo = columns =>
|
|
columns
|
|
.map(column => ({
|
|
field: column.dataField,
|
|
type: column.csvType || String,
|
|
formatter: column.csvFormatter,
|
|
formatExtraData: column.formatExtraData,
|
|
header: column.csvText || column.text,
|
|
export: column.csvExport === false ? false : true,
|
|
row: Number(column.row) || 0,
|
|
rowSpan: Number(column.rowSpan) || 1,
|
|
colSpan: Number(column.colSpan) || 1,
|
|
footer: column.footer,
|
|
footerFormatter: column.footerFormatter
|
|
}))
|
|
.filter(_ => _.export);
|
|
|
|
export const transform = (
|
|
data,
|
|
meta,
|
|
columns,
|
|
_,
|
|
{
|
|
separator,
|
|
ignoreHeader,
|
|
ignoreFooter
|
|
}
|
|
) => {
|
|
const visibleColumns = meta.filter(m => m.export);
|
|
let content = '';
|
|
// extract csv header
|
|
if (!ignoreHeader) {
|
|
content += visibleColumns.map(m => `"${m.header}"`).join(separator);
|
|
content += '\n';
|
|
}
|
|
// extract csv body
|
|
if (data.length === 0) return content;
|
|
content += data
|
|
.map((row, rowIndex) =>
|
|
visibleColumns.map((m) => {
|
|
let cellContent = _.get(row, m.field);
|
|
if (m.formatter) {
|
|
cellContent = m.formatter(cellContent, row, rowIndex, m.formatExtraData);
|
|
}
|
|
if (m.type === String) {
|
|
return `"${`${cellContent}`.replace(/"/g, '""')}"`;
|
|
}
|
|
return cellContent;
|
|
}).join(separator)).join('\n');
|
|
|
|
if (!ignoreFooter) {
|
|
content += '\n';
|
|
content += visibleColumns.map((m, i) => {
|
|
if (typeof m.footer === 'function') {
|
|
const columnData = _.pluck(data, columns[i].dataField);
|
|
return `"${m.footer(columnData, columns[i], i)}"`;
|
|
} else if (m.footerFormatter) {
|
|
return `"${m.footerFormatter(columns[i], i)}"`;
|
|
}
|
|
return `"${m.footer}"`;
|
|
}).join(separator);
|
|
}
|
|
return content;
|
|
};
|
|
|
|
export const save = (
|
|
content,
|
|
{
|
|
noAutoBOM,
|
|
fileName,
|
|
blobType
|
|
}
|
|
) => {
|
|
FileSaver.saveAs(
|
|
new Blob([content], { type: blobType }),
|
|
fileName,
|
|
noAutoBOM
|
|
);
|
|
};
|