UNPKG

kea-react

Version:

Componentes comunes de react

35 lines (30 loc) 1.76 kB
import { Grid2State } from "./gridState"; import { Grid2Column } from "./column"; import { ObjMap, mapObject, promiseAllObj } from "keautils"; import { filtrarOrdenar, gridColumnToFiltroOrdenColumn, getItemCellData } from "./filtrarOrdenar"; import { CsvRow, toCSV } from "../../grid/csv"; import { stringToBlob } from "../../files"; import { download } from "../../downloadjs"; import { GridCell } from "./baseTypes"; import { cellToText } from "./text"; /**Genera las filas de un CSV */ export async function generateCsvRows<T>(rows: T[] | PromiseLike<T[]>, state: Grid2State, columns: ObjMap<Grid2Column<any, any>>): Promise<CsvRow[]> { const filtroColumns = promiseAllObj(mapObject(columns, value => gridColumnToFiltroOrdenColumn(rows, value))); const rowsSync = await rows; const itemsFiltro = getItemCellData(rowsSync, await filtroColumns); const filteredData = filtrarOrdenar<T>(itemsFiltro, state.filtroOrden, await filtroColumns).map(x=> x.original); const exportMap = state.export; const mappedColumns = exportMap.map(key => columns[key]); const toCsvCell = (cell: GridCell<any, any>) => cell.string == undefined ? cellToText(cell.data) : cell.string; const toCsvRow = (row: T) => mappedColumns.map(col => toCsvCell(col.cell(row))); const csv = filteredData.map(toCsvRow); const header = mappedColumns.map(x => x.title); return [header, ...csv]; } /**Descarga el CSV del grid */ export async function downloadCsv<T>(rows: T[] | PromiseLike<T[]>, state: Grid2State, columns: ObjMap<Grid2Column<any, any>>) { const data = await generateCsvRows(rows, state, columns); const str = toCSV(data); const blob = stringToBlob(str); download(blob, "Lista.csv"); }