@airplane/views
Version:
A React library for building Airplane views. Views components are optimized in style and functionality to produce internal apps that are easy to build and maintain.
40 lines (39 loc) • 1.11 kB
JavaScript
import { isActionColumn } from "./Column.js";
function dataToCSVLink(columns, rows) {
return "data:text/csv;charset=utf-8," + encodeURIComponent(dataToCSV(columns, rows));
}
function dataToCSV(columns, rows) {
const realCols = columns.filter((c) => !isActionColumn(c));
const csvHeader = realCols.map((c) => escapeCSVString(String(c.label || c.id || ""))).join(",");
const csvRows = rows.map((row) => realCols.map((col) => {
return toCSVCell({
value: row.values[col.id],
valueToString: col.valueToString
});
}).join(","));
return [csvHeader, ...csvRows].join("\n");
}
function toCSVCell({
value,
valueToString
}) {
const str = value != null && valueToString != null ? valueToString(value) : defaultToString(value);
return escapeCSVString(str);
}
function escapeCSVString(str) {
return '"' + str.replace(/"/g, '""') + '"';
}
function defaultToString(datum) {
if (datum == null) {
return "";
}
if (typeof datum === "string") {
return datum;
}
return JSON.stringify(datum);
}
export {
dataToCSV,
dataToCSVLink
};
//# sourceMappingURL=dataToCSV.js.map