UNPKG

@1771technologies/lytenyte-pro

Version:

Blazingly fast headless React data grid with 100s of features.

41 lines (40 loc) 1.45 kB
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; }; };