import { Box, Grid } from "@chakra-ui/layout"; import { useMediaQuery } from "@chakra-ui/media-query"; import { Table, TableCaption, Tbody, Td, Tfoot, Th, Thead, Tr, } from "@chakra-ui/table"; import React, { Fragment } from "react"; import { getRankingString } from "utils/strings"; import OutlinedBox from "./OutlinedBox"; export type TableRow = Record & { id: number }; export default function NewTable({ caption, headers, data, smallAtPx, leaderboardKey, size, }: { caption?: string; headers: { name: string; dataKey: string; }[]; data: (TableRow | null)[]; smallAtPx?: string; leaderboardKey?: string; size?: "sm" | "md" | "lg"; }) { const [isSmall] = useMediaQuery( smallAtPx ? `(max-width: ${smallAtPx}px)` : "(max-width: 600px)" ); const nonNullData = data.filter((row): row is TableRow => row !== null); let lastValue: any = null; let rankToUse: number = 1; if (isSmall) { return ( <> {nonNullData.map((row, i) => { if (leaderboardKey) { if (row[leaderboardKey] !== lastValue) rankToUse = i + 1; lastValue = row[leaderboardKey]; } return ( {leaderboardKey ? ( Rank {getRankingString(rankToUse)} ) : null} {headers.map(({ name, dataKey }) => { return ( {name} {row[dataKey]} ); })} ); })} ); } return ( {caption && {caption}} {leaderboardKey ? : null} {headers.map(({ name }) => ( ))} {nonNullData.map((row, i) => { if (leaderboardKey) { if (row[leaderboardKey] !== lastValue) rankToUse = i + 1; lastValue = row[leaderboardKey]; } return ( {leaderboardKey ? : null} {headers.map(({ dataKey }) => { return ; })} ); })} {leaderboardKey ? : null} {headers.map(({ name }) => ( ))}
Rank{name}
{getRankingString(rankToUse)}{row[dataKey]}
Rank{name}
); }