import axios from 'axios' import React, { useEffect, useState } from 'react' const papa = require("papaparse") /* Simple HTML Table usage: data:Array >; cols:Array<{name:string, key:number|string}>; */ export default function Table({ data=[], cols=[], csv='', url='' }) { if (csv) { const out = parseCsv(csv) data = out.rows cols = out.cols } const [ourdata, setData] = React.useState(data) const [ourcols, setCols] = React.useState(cols) const [error, setError] = React.useState('') useEffect(() => { if (url) { loadUrl(url) } }, [url]) function loadUrl(path) { // HACK: duplicate of Excel code - maybe refactor // if url is external may have CORS issue so we proxy it ... if (url.startsWith('http')) { const PROXY_URL = window.location.origin + '/api/proxy' url = PROXY_URL + '?url=' + encodeURIComponent(url) } axios.get(url).then((res) => { const { rows, fields } = parseCsv(res.data) setData(rows) setCols(fields) }) } return ( <> ) } /* Simple HTML Table usage: data:Array >; cols:Array<{name:string, key:number|string}>; */ function SimpleTable({ data=[], cols=[] }) { return (
{cols.map((c) => )} {data.map((r,i) => {cols.map(c => )} )}
{c.name}
{ r[c.key] }
) } function parseCsv(csv) { csv = csv.trim() const rawdata = papa.parse(csv, {header: true}) const cols = rawdata.meta.fields.map((r,i) => { return { key: r, name: r } }) return { rows: rawdata.data, fields: cols } }