/* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file) SPDX-License-Identifier: AGPL-3.0-only */ import React, { useMemo } from 'react' import { parseCsv } from './csv-parser' export interface CsvTableProps { code: string delimiter: string showHeader: boolean tableRowClassName?: string tableColumnClassName?: string } export const CsvTable: React.FC = ({ code, delimiter, showHeader, tableRowClassName, tableColumnClassName }) => { const { rowsWithColumns, headerRow } = useMemo(() => { const rowsWithColumns = parseCsv(code.trim(), delimiter) let headerRow: string[] = [] if (showHeader) { headerRow = rowsWithColumns.splice(0, 1)[0] } return { rowsWithColumns, headerRow } }, [code, delimiter, showHeader]) const renderTableHeader = (row: string[]) => { if (row !== []) { return ( {row.map((column, columnNumber) => ( {column} ))} ) } } const renderTableBody = (rows: string[][]) => { return ( {rows.map((row, rowNumber) => ( {row.map((column, columnIndex) => ( {column.replace(/^"|"$/g, '')} ))} ))} ) } return ( {renderTableHeader(headerRow)} {renderTableBody(rowsWithColumns)}
) }