import { QueryClient, QueryClientProvider, useQuery } from 'react-query'; import Papa from 'papaparse'; import { Grid } from '@githubocto/flat-ui'; const queryClient = new QueryClient(); export async function getCsv(url: string) { const response = await fetch(url, { headers: { Range: 'bytes=0-5132288', }, }); const data = await response.text(); return data; } export async function parseCsv(file: string): Promise { return new Promise((resolve, reject) => { Papa.parse(file, { header: true, dynamicTyping: true, skipEmptyLines: true, transform: (value: string): string => { return value.trim(); }, complete: (results: any) => { return resolve(results); }, error: (error: any) => { return reject(error); }, }); }); } const Spinning = () => { return (
Loading...
); }; export interface FlatUiTableProps { url?: string; data?: { [key: string]: number | string }[]; rawCsv?: string; } export const FlatUiTable: React.FC = ({ url, data, rawCsv, }) => { return ( // Provide the client to your App ); }; const TableInner: React.FC = ({ url, data, rawCsv }) => { if (data) { return (
); } const { data: csvString, isLoading: isDownloadingCSV } = useQuery( ['dataCsv', url], () => getCsv(url), { enabled: !!url } ); const { data: parsedData, isLoading: isParsing } = useQuery( ['dataPreview', csvString], () => parseCsv(rawCsv ? rawCsv : csvString), { enabled: rawCsv ? true : !!csvString } ); if (isParsing || isDownloadingCSV)
; if (parsedData) return (
); };