Added a general stats component
This commit is contained in:
31
src/app/(stats)/player/[ign]/_stats/GeneralStats.tsx
Normal file
31
src/app/(stats)/player/[ign]/_stats/GeneralStats.tsx
Normal 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>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user