@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
41 lines (40 loc) • 1.45 kB
JavaScript
import { getDataRect } from "../helpers/get-data-rect.js";
export const makeExportCsv = (grid) => {
return async (p) => {
const visible = grid.state.columnMeta.get().columnsVisible;
const rowCount = grid.state.rowDataStore.rowCount.get();
const rowStart = p?.dataRect?.rowStart ?? 0;
const rowEnd = p?.dataRect?.rowEnd ?? rowCount;
const columnStart = p?.dataRect?.columnStart ?? 0;
const columnEnd = p?.dataRect?.columnEnd ?? visible.length;
const rows = [];
for (let i = rowStart; i < rowEnd; i++) {
rows.push(grid.api.rowByIndex(i) ?? null);
}
const { data, groupHeaders, headers } = getDataRect({
rows,
columnField: grid.api.columnField,
visible,
columnStart,
columnEnd,
uniformGroupHeaders: p?.uniformGroupHeaders,
});
const final = [...data];
if (p?.includeHeader)
final.unshift(headers);
if (p?.includeGroupHeaders)
final.unshift(...groupHeaders);
return final
.map((c) => {
return c.map((x) => `"${x}"`).join(p?.delimiter ?? ",");
})
.join("\n");
};
};
export const makeExportCsvFile = (grid) => {
return async (p) => {
const csv = await grid.api.exportCsv(p);
const blob = new Blob([csv], { type: "text/csv" });
return blob;
};
};