feat(skywars): add full mode stats rows and best mode detection

This commit is contained in:
2025-08-24 13:48:40 +02:00
parent 2b959a6c99
commit ba84f90221
2 changed files with 234 additions and 0 deletions

View File

@@ -0,0 +1,142 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { formatNumber } from "@/lib/formatters"
import { _SkywarsStats, getBestMode, getSkywarsModeStats } from "@/lib/hypixel/skywars"
import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils"
export default function SkywarsStatTable({ stats }: { stats: NonNullStats["SkyWars"] }) {
return (
<Table>
<SkywarsTableHeader />
<TableBody>
<Normal stats={stats} />
<Insane stats={stats} />
<TeamsNormal stats={stats} />
<TeamsInsane stats={stats} />
<Mega stats={stats} />
<MegaDoubles stats={stats} />
<Ranked stats={stats} />
</TableBody>
</Table>
)
}
function SkywarsTableHeader() {
const headerElements = [
"Mode",
"Kills",
"Deaths",
"KD",
"Wins",
"Losses",
"WL"
]
return (
<TableHeader>
<TableRow>
{headerElements.map((v, i) => {
return <TableHead key={i} className="font-bold">{v}</TableHead>
})}
</TableRow>
</TableHeader>
)
}
function Normal({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("normal", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "normal"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Solo Normal</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}
function Insane({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("insane", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "insane"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Solo Insane</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}
function TeamsNormal({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("teams_normal", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "teams_normal"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Teams Normal</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}
function TeamsInsane({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("teams_insane", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "teams_insane"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Teams Insane</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}
function Mega({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("mega", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "mega"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Mega</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}
function MegaDoubles({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("mega_doubles", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "mega_doubles"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Mega Doubles</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}
function Ranked({ stats }: { stats: NonNullStats["SkyWars"] }) {
const modeStats = getSkywarsModeStats("ranked", stats as _SkywarsStats)
const isBest = getBestMode(stats as _SkywarsStats) === "ranked"
return (
<TableRow className={cn(isBest ? "font-bold text-mc-light-purple" : undefined)}>
<TableCell>Ranked</TableCell>
{modeStats.map((v, i) => {
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
})}
</TableRow>
)
}