Added a general stats component

This commit is contained in:
2025-09-10 19:36:14 +02:00
parent 425bdda9c4
commit cdb500bac2
12 changed files with 369 additions and 468 deletions

View File

@@ -0,0 +1,31 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { ReactNode } from "react"
import CollapsedStats from "../_components/CollapsedStats"
export default function GeneralStats(
{ id, title, children, collapsedStats }: {
id: string
title: string
children: ReactNode
collapsedStats: Parameters<typeof CollapsedStats>[0]["stats"]
}
) {
return (
<AccordionItem value={id}>
<Card className="py-0">
<CardContent>
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer">
<h1 className="text-xl font-bold">{title}</h1>
<div className="flex gap-4">
<CollapsedStats stats={collapsedStats} />
</div>
</AccordionTrigger>
<AccordionContent>
{children}
</AccordionContent>
</CardContent>
</Card>
</AccordionItem>
)
}

View File

@@ -1,11 +1,9 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { getBedwarsLevelForExp, getTotalBedwarsExpForLevel } from "@/lib/hypixel/bedwars/level" import { getBedwarsLevelForExp, getTotalBedwarsExpForLevel } from "@/lib/hypixel/bedwars/level"
import { devide, getProgress } from "@/lib/hypixel/general" import { devide, getProgress } from "@/lib/hypixel/general"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import { BedwarsLevel, BedwarsProgress } from "./components" import { BedwarsLevel, BedwarsProgress } from "./components"
import BedwarsGeneralStats from "./stats" import BedwarsGeneralStats from "./stats"
import BedwarsStatTable from "./table" import BedwarsStatTable from "./table"
@@ -27,14 +25,10 @@ export default function BedwarsStats({ stats }: { stats: NonNullStats["Bedwars"]
const ceilingXp = next - current const ceilingXp = next - current
return ( return (
<AccordionItem value="bedwars"> <GeneralStats
<Card className="py-0"> id="bedwars"
<CardContent> title="BedWars"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">BedWars</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Level</p>, title: <p>Level</p>,
stat: <BedwarsLevel xp={stats.Experience} /> stat: <BedwarsLevel xp={stats.Experience} />
@@ -60,18 +54,12 @@ export default function BedwarsStats({ stats }: { stats: NonNullStats["Bedwars"]
stat: <p className="text-muted-foreground">{bbl}</p> stat: <p className="text-muted-foreground">{bbl}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<BedwarsProgress level={level} percent={percent} currentXp={xpProgress} ceilingXp={ceilingXp} /> <BedwarsProgress level={level} percent={percent} currentXp={xpProgress} ceilingXp={ceilingXp} />
<BedwarsGeneralStats stats={stats} level={level} percent={percent} bbl={bbl} kd={kd} fkd={fkd} wl={wl} /> <BedwarsGeneralStats stats={stats} level={level} percent={percent} bbl={bbl} kd={kd} fkd={fkd} wl={wl} />
<Separator className="my-4" /> <Separator className="my-4" />
<BedwarsStatTable stats={stats} /> <BedwarsStatTable stats={stats} />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,11 +1,9 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { getBuildBattleRank } from "@/lib/hypixel/build-battle/general" import { getBuildBattleRank } from "@/lib/hypixel/build-battle/general"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import BuildBattleTitleProgress from "./progress" import BuildBattleTitleProgress from "./progress"
import BuildBattleGeneralStats from "./stats" import BuildBattleGeneralStats from "./stats"
import BuildBattleStatsTable from "./table" import BuildBattleStatsTable from "./table"
@@ -16,14 +14,10 @@ export default function BuildBattleStats({ stats }: { stats: NonNullStats["Build
const rank = getBuildBattleRank(stats.score) const rank = getBuildBattleRank(stats.score)
return ( return (
<AccordionItem value="build-battle"> <GeneralStats
<Card className="py-0"> id="build-battle"
<CardContent> title="Build Battle"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">Build Battle</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Title</p>, title: <p>Title</p>,
stat: <p className={cn(rank.bold && "font-bold", `text-mc-${rank.color}`)}>{rank.name}</p> stat: <p className={cn(rank.bold && "font-bold", `text-mc-${rank.color}`)}>{rank.name}</p>
@@ -33,10 +27,7 @@ export default function BuildBattleStats({ stats }: { stats: NonNullStats["Build
stat: <p className="text-muted-foreground">{formatNumber(stats.wins)}</p> stat: <p className="text-muted-foreground">{formatNumber(stats.wins)}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<BuildBattleTitleProgress score={stats.score} /> <BuildBattleTitleProgress score={stats.score} />
<Separator className="my-4" /> <Separator className="my-4" />
@@ -44,9 +35,6 @@ export default function BuildBattleStats({ stats }: { stats: NonNullStats["Build
<Separator className="my-4" /> <Separator className="my-4" />
<BuildBattleStatsTable stats={stats} /> <BuildBattleStatsTable stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,11 +1,9 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { getCopsAndCrimsScoreColor } from "@/lib/hypixel/copsandcrims/general" import { getCopsAndCrimsScoreColor } from "@/lib/hypixel/copsandcrims/general"
import { devide } from "@/lib/hypixel/general" import { devide } from "@/lib/hypixel/general"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import CopsAndCrimsGeneralStats from "./stats" import CopsAndCrimsGeneralStats from "./stats"
import CopsAndCrimsStatTable from "./table" import CopsAndCrimsStatTable from "./table"
import CopsAndCrimsWeaponStats from "./weapons" import CopsAndCrimsWeaponStats from "./weapons"
@@ -22,14 +20,10 @@ export default function CopsAndCrimsStats({ stats }: { stats: NonNullStats["Cops
const scoreColor = getCopsAndCrimsScoreColor(score) const scoreColor = getCopsAndCrimsScoreColor(score)
return ( return (
<AccordionItem value="cops-and-crims"> <GeneralStats
<Card className="py-0"> id="cops-and-crims"
<CardContent> title="Cops And Crims"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">Cops And Crims</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Score</p>, title: <p>Score</p>,
stat: <p className={`text-mc-${scoreColor}`}>{formatNumber(score)}</p> stat: <p className={`text-mc-${scoreColor}`}>{formatNumber(score)}</p>
@@ -47,10 +41,7 @@ export default function CopsAndCrimsStats({ stats }: { stats: NonNullStats["Cops
stat: <p className="text-muted-foreground">{formatNumber(wins)}</p> stat: <p className="text-muted-foreground">{formatNumber(wins)}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<CopsAndCrimsGeneralStats stats={stats} wins={wins} kills={kills} assits={assists} deaths={deaths} /> <CopsAndCrimsGeneralStats stats={stats} wins={wins} kills={kills} assits={assists} deaths={deaths} />
<Separator className="my-4" /> <Separator className="my-4" />
@@ -58,9 +49,6 @@ export default function CopsAndCrimsStats({ stats }: { stats: NonNullStats["Cops
<Separator className="my-4" /> <Separator className="my-4" />
<CopsAndCrimsWeaponStats stats={stats} /> <CopsAndCrimsWeaponStats stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,11 +1,9 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { getAllDuelsDivisions, getDuelsMostPlayed } from "@/lib/hypixel/duels/duels" import { getAllDuelsDivisions, getDuelsMostPlayed } from "@/lib/hypixel/duels/duels"
import { devide, romanize } from "@/lib/hypixel/general" import { devide, romanize } from "@/lib/hypixel/general"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import DuelsGeneralStats from "./stats" import DuelsGeneralStats from "./stats"
import DuelsStatsTable from "./table" import DuelsStatsTable from "./table"
@@ -18,14 +16,10 @@ export default function DuelsStats({ stats }: { stats: NonNullStats["Duels"] })
const mostPlayed = getDuelsMostPlayed(stats) const mostPlayed = getDuelsMostPlayed(stats)
return ( return (
<AccordionItem value="duels"> <GeneralStats
<Card className="py-0"> id="duels"
<CardContent> title="Duels"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">Duels</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Division</p>, title: <p>Division</p>,
stat: ( stat: (
@@ -64,17 +58,11 @@ export default function DuelsStats({ stats }: { stats: NonNullStats["Duels"] })
stat: <p className="text-muted-foreground">{wl}</p> stat: <p className="text-muted-foreground">{wl}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<DuelsGeneralStats stats={stats} div={div} kd={kd} wl={wl} /> <DuelsGeneralStats stats={stats} div={div} kd={kd} wl={wl} />
<Separator className="my-4" /> <Separator className="my-4" />
<DuelsStatsTable stats={stats} /> <DuelsStatsTable stats={stats} />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,12 +1,10 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { devide } from "@/lib/hypixel/general" import { devide } from "@/lib/hypixel/general"
import { getMegaWallsDifficultyColor, getMegawallsMostPlayed } from "@/lib/hypixel/megawalls/general" import { getMegaWallsDifficultyColor, getMegawallsMostPlayed } from "@/lib/hypixel/megawalls/general"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import MegaWallsGeneralStats from "./stats" import MegaWallsGeneralStats from "./stats"
import { MegaWallsClassesTable, MegaWallsModesTable } from "./table" import { MegaWallsClassesTable, MegaWallsModesTable } from "./table"
@@ -20,14 +18,10 @@ export default function MegaWallsStats({ stats }: { stats: NonNullStats["MegaWal
const difficultyColor = getMegaWallsDifficultyColor(mostPlayed !== null ? mostPlayed.difficulty : 1) const difficultyColor = getMegaWallsDifficultyColor(mostPlayed !== null ? mostPlayed.difficulty : 1)
return ( return (
<AccordionItem value="megawalls"> <GeneralStats
<Card className="py-0"> id="megawalls"
<CardContent> title="Mega Walls"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">Mega Walls</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Main</p>, title: <p>Main</p>,
stat: ( stat: (
@@ -53,10 +47,7 @@ export default function MegaWallsStats({ stats }: { stats: NonNullStats["MegaWal
stat: <p className="text-muted-foreground">{wl}</p> stat: <p className="text-muted-foreground">{wl}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<MegaWallsGeneralStats stats={stats} /> <MegaWallsGeneralStats stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
@@ -64,9 +55,6 @@ export default function MegaWallsStats({ stats }: { stats: NonNullStats["MegaWal
<Separator className="my-4" /> <Separator className="my-4" />
<MegaWallsModesTable stats={stats} /> <MegaWallsModesTable stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,9 +1,7 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import InfectionStats from "./infection" import InfectionStats from "./infection"
import MurderMysteryGeneralStats from "./stats" import MurderMysteryGeneralStats from "./stats"
import MurderMysteryStatTable from "./table" import MurderMysteryStatTable from "./table"
@@ -12,14 +10,10 @@ export default function MurderMysteryStats({ stats }: { stats: NonNullStats["Mur
if (!stats) return null if (!stats) return null
return ( return (
<AccordionItem value="murder-mystery"> <GeneralStats
<Card className="py-0"> id="murder-mystery"
<CardContent> title="Murder Mystery"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">Murder Mystery</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Kills</p>, title: <p>Kills</p>,
stat: <p className="text-muted-foreground">{formatNumber(stats.kills)}</p> stat: <p className="text-muted-foreground">{formatNumber(stats.kills)}</p>
@@ -29,10 +23,7 @@ export default function MurderMysteryStats({ stats }: { stats: NonNullStats["Mur
stat: <p className="text-muted-foreground">{formatNumber(stats.wins)}</p> stat: <p className="text-muted-foreground">{formatNumber(stats.wins)}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<MurderMysteryGeneralStats stats={stats} /> <MurderMysteryGeneralStats stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
@@ -40,9 +31,6 @@ export default function MurderMysteryStats({ stats }: { stats: NonNullStats["Mur
<Separator className="my-4" /> <Separator className="my-4" />
<MurderMysteryStatTable stats={stats} /> <MurderMysteryStatTable stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,11 +1,9 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { devide } from "@/lib/hypixel/general" import { devide } from "@/lib/hypixel/general"
import { getPitPrestige } from "@/lib/hypixel/pit/general" import { getPitPrestige } from "@/lib/hypixel/pit/general"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import PitLevel from "./level" import PitLevel from "./level"
import PitProgress from "./progress" import PitProgress from "./progress"
import PitGeneralStats from "./stats" import PitGeneralStats from "./stats"
@@ -17,14 +15,10 @@ export default function PitStats({ stats }: { stats: NonNullStats["Pit"] }) {
const prestige = getPitPrestige(stats) const prestige = getPitPrestige(stats)
return ( return (
<AccordionItem value="pit"> <GeneralStats
<Card className="py-0"> id="pit"
<CardContent> title="Pit"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">Pit</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Level</p>, title: <p>Level</p>,
stat: <PitLevel xp={stats.profile.xp} prestige={prestige} /> stat: <PitLevel xp={stats.profile.xp} prestige={prestige} />
@@ -38,18 +32,12 @@ export default function PitStats({ stats }: { stats: NonNullStats["Pit"] }) {
stat: <p className="text-muted-foreground">{kd}</p> stat: <p className="text-muted-foreground">{kd}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<PitProgress prestige={prestige} xp={stats.profile.xp} /> <PitProgress prestige={prestige} xp={stats.profile.xp} />
<Separator className="my-4" /> <Separator className="my-4" />
<PitGeneralStats stats={stats} /> <PitGeneralStats stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,11 +1,9 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { devide, getProgress } from "@/lib/hypixel/general" import { devide, getProgress } from "@/lib/hypixel/general"
import { getSkywarsLevel, getSkywarsXpForLevel } from "@/lib/hypixel/skywars/level" import { getSkywarsLevel, getSkywarsXpForLevel } from "@/lib/hypixel/skywars/level"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import { AngelOfDeath, ShardProgress, SkywarsHeads, SkywarsLevel, SkywarsProgress } from "./components" import { AngelOfDeath, ShardProgress, SkywarsHeads, SkywarsLevel, SkywarsProgress } from "./components"
import SkyWarsGeneralStats from "./stats" import SkyWarsGeneralStats from "./stats"
import SkywarsStatTable from "./table" import SkywarsStatTable from "./table"
@@ -34,14 +32,10 @@ export default function SkyWarsStats(
const shardProgress = getProgress(0, stats.shard, 20000) const shardProgress = getProgress(0, stats.shard, 20000)
return ( return (
<AccordionItem value="skywars"> <GeneralStats
<Card className="py-0"> id="skywars"
<CardContent> title="SkyWars"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">SkyWars</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Level</p>, title: <p>Level</p>,
stat: <SkywarsLevel xp={stats.skywars_experience} icon={stats.selected_prestige_icon} /> stat: <SkywarsLevel xp={stats.skywars_experience} icon={stats.selected_prestige_icon} />
@@ -59,10 +53,7 @@ export default function SkyWarsStats(
stat: <p className="text-muted-foreground">{wl}</p> stat: <p className="text-muted-foreground">{wl}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<SkywarsProgress level={Math.floor(level)} percent={levelProgress} currentXp={xpProgress} ceilingXp={ceilingXp} /> <SkywarsProgress level={Math.floor(level)} percent={levelProgress} currentXp={xpProgress} ceilingXp={ceilingXp} />
<SkyWarsGeneralStats stats={stats} level={level} /> <SkyWarsGeneralStats stats={stats} level={level} />
@@ -104,9 +95,6 @@ export default function SkyWarsStats(
}).filter(v => v !== null)} }).filter(v => v !== null)}
/> />
</div> </div>
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,8 +1,6 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import TNTGamesGeneralStats from "./stats" import TNTGamesGeneralStats from "./stats"
import TNTWizardsStats from "./wizards" import TNTWizardsStats from "./wizards"
@@ -10,28 +8,18 @@ export default function TNTGamesStats({ stats }: { stats: NonNullStats["TNTGames
if (!stats) return null if (!stats) return null
return ( return (
<AccordionItem value="tnt-games"> <GeneralStats
<Card className="py-0"> id="tnt-games"
<CardContent> title="TNT Games"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[{
<h1 className="text-xl font-bold">TNT Games</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[{
title: <p>Wins</p>, title: <p>Wins</p>,
stat: <p className="text-muted-foreground">{stats.wins}</p> stat: <p className="text-muted-foreground">{stats.wins}</p>
}]} }]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<TNTGamesGeneralStats stats={stats} /> <TNTGamesGeneralStats stats={stats} />
<Separator className="my-4" /> <Separator className="my-4" />
<TNTWizardsStats stats={stats} /> <TNTWizardsStats stats={stats} />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,12 +1,10 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { devide } from "@/lib/hypixel/general" import { devide } from "@/lib/hypixel/general"
import { getUHCStatsCombined } from "@/lib/hypixel/uhc/general" import { getUHCStatsCombined } from "@/lib/hypixel/uhc/general"
import { getUhcStarValue } from "@/lib/hypixel/uhc/level" import { getUhcStarValue } from "@/lib/hypixel/uhc/level"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
import UHCProgress from "./progress" import UHCProgress from "./progress"
import UHCGeneralStats from "./stats" import UHCGeneralStats from "./stats"
import UHCStatTable from "./table" import UHCStatTable from "./table"
@@ -19,14 +17,10 @@ export default function UHCStats({ stats }: { stats: NonNullStats["UHC"] }) {
const star = getUhcStarValue(stats.score) const star = getUhcStarValue(stats.score)
return ( return (
<AccordionItem value="uhc"> <GeneralStats
<Card className="py-0"> id="uhc"
<CardContent> title="UHC"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[
<h1 className="text-xl font-bold">UHC</h1>
<div className="flex gap-4">
<CollapsedStats
stats={[
{ {
title: <p>Star</p>, title: <p>Star</p>,
stat: <p className="text-mc-gold">{`[${star}✫]`}</p> stat: <p className="text-mc-gold">{`[${star}✫]`}</p>
@@ -40,19 +34,13 @@ export default function UHCStats({ stats }: { stats: NonNullStats["UHC"] }) {
stat: <p className="text-muted-foreground">{formatNumber(combined.wins)}</p> stat: <p className="text-muted-foreground">{formatNumber(combined.wins)}</p>
} }
]} ]}
/> >
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
<UHCProgress score={stats.score} /> <UHCProgress score={stats.score} />
<Separator className="my-4" /> <Separator className="my-4" />
<UHCGeneralStats stats={stats} kills={combined.kills} deaths={combined.deaths} heads={combined.heads} wins={combined.wins} /> <UHCGeneralStats stats={stats} kills={combined.kills} deaths={combined.deaths} heads={combined.heads} wins={combined.wins} />
<Separator className="my-4" /> <Separator className="my-4" />
<UHCStatTable stats={stats} /> <UHCStatTable stats={stats} />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }

View File

@@ -1,27 +1,17 @@
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats" import GeneralStats from "../GeneralStats"
export default function WoolGamesStats({ stats }: { stats: NonNullStats["WoolGames"] }) { export default function WoolGamesStats({ stats }: { stats: NonNullStats["WoolGames"] }) {
if (!stats) return null if (!stats) return null
return ( return (
<AccordionItem value="woolgames"> <GeneralStats
<Card className="py-0"> id="woolgames"
<CardContent> title="Wool Games"
<AccordionTrigger className="items-center py-2 hover:no-underline hover:cursor-pointer"> collapsedStats={[]}
<h1 className="text-xl font-bold">Wool Games</h1> >
<div className="flex gap-4">
<CollapsedStats stats={[]} />
</div>
</AccordionTrigger>
<AccordionContent>
<Separator className="my-4" /> <Separator className="my-4" />
</AccordionContent> </GeneralStats>
</CardContent>
</Card>
</AccordionItem>
) )
} }