From 6d94e46d6752cf2b892a7d323f960b31d49c8e91 Mon Sep 17 00:00:00 2001 From: Taken Date: Tue, 2 Sep 2025 14:03:34 +0200 Subject: [PATCH] Refactored bedwars table --- .../player/[ign]/_stats/bedwars/table.tsx | 431 ++++-------------- 1 file changed, 101 insertions(+), 330 deletions(-) diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx index 9288fdc..1a85ba9 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx @@ -4,31 +4,111 @@ import { _BedwarsStats, concatBedwarsStats, getBedwarsModeStats, getBestMode } f import { NonNullStats } from "@/lib/schema/player" import { cn } from "@/lib/utils" +type BedwarsModeKey = + | "solo" + | "doubles" + | "3s" + | "4s" + | "4v4" + | "rush_2s" + | "rush_4s" + | "ultimate_2s" + | "ultimate_4s" + | "lucky_2s" + | "lucky_4s" + | "voidless_2s" + | "voidless_4s" + | "armed_2s" + | "armed_4s" + | "swap_4s" + | "underworld_4s" + | "castle" + +interface RowConfig { + label: string + key?: BedwarsModeKey + aggregateOf?: BedwarsModeKey[] + highlightBest?: boolean + bold?: boolean +} + +const SIMPLE_MODE_KEYS: BedwarsModeKey[] = [ + "solo", + "doubles", + "3s", + "4s", + "4v4", + "rush_2s", + "rush_4s", + "ultimate_2s", + "ultimate_4s", + "lucky_2s", + "lucky_4s", + "voidless_2s", + "voidless_4s", + "armed_2s", + "armed_4s", + "swap_4s", + "underworld_4s", + "castle" +] + +const ROWS: RowConfig[] = [ + { label: "Solo", key: "solo", highlightBest: true }, + { label: "Doubles", key: "doubles", highlightBest: true }, + { label: "3v3v3v3", key: "3s", highlightBest: true }, + { label: "4v4v4v4", key: "4s", highlightBest: true }, + { label: "Core Modes", aggregateOf: ["solo", "doubles", "3s", "4s"], bold: true }, + { label: "4v4", key: "4v4" }, + { label: "Rush Doubles", key: "rush_2s" }, + { label: "Rush 4v4v4v4", key: "rush_4s" }, + { label: "Ultimate Doubles", key: "ultimate_2s" }, + { label: "Ultimate 4v4v4v4", key: "ultimate_4s" }, + { label: "Lucky Doubles", key: "lucky_2s" }, + { label: "Lucky 4v4v4v4", key: "lucky_4s" }, + { label: "Voidless Doubles", key: "voidless_2s" }, + { label: "Voidless 4v4v4v4", key: "voidless_4s" }, + { label: "Armed Doubles", key: "armed_2s" }, + { label: "Armed 4v4v4v4", key: "armed_4s" }, + { label: "Swap 4v4v4v4", key: "swap_4s" }, + { label: "Underworld 4v4v4v4", key: "underworld_4s" }, + { label: "Castle", key: "castle" }, + { label: "All Modes", aggregateOf: SIMPLE_MODE_KEYS, bold: true } +] + +function StatRow({ cfg, stats }: { cfg: RowConfig, stats: NonNullStats["Bedwars"] }) { + const bedwars = stats as _BedwarsStats + + let values: (number | string)[] = [] + + if (cfg.key) { + values = getBedwarsModeStats(cfg.key, bedwars) as (number | string)[] + } else if (cfg.aggregateOf) { + const rawArrays = cfg.aggregateOf.map(k => getBedwarsModeStats(k, bedwars, true)) + values = concatBedwarsStats(...rawArrays) + } + + const isBest = cfg.highlightBest && cfg.key && getBestMode(bedwars) === cfg.key + + const className = cn( + cfg.bold && "font-bold", + isBest && "font-bold text-mc-light-purple" + ) + + return ( + + {cfg.label} + {values.map((v, i) => {typeof v === "number" ? formatNumber(v) : v})} + + ) +} + export default function BedwarsStatTable({ stats }: { stats: NonNullStats["Bedwars"] }) { return ( - - - - - - - - - - - - - - - - - - - - + {ROWS.map((cfg, i) => )}
) @@ -60,317 +140,8 @@ function BedwarsTableHeader() { Finals - {headerElements.map((v, i) => { - return {v} - })} + {headerElements.map((v, i) => {v})} ) } - -function SoloStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("solo", stats as _BedwarsStats) - const isBest = getBestMode(stats as _BedwarsStats) === "solo" - - return ( - - Solo - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function DoublesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("doubles", stats as _BedwarsStats) - const isBest = getBestMode(stats as _BedwarsStats) === "doubles" - - return ( - - Doubles - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function ThreesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("3s", stats as _BedwarsStats) - const isBest = getBestMode(stats as _BedwarsStats) === "3s" - - return ( - - 3v3v3v3 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function FoursStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("4s", stats as _BedwarsStats) - const isBest = getBestMode(stats as _BedwarsStats) === "4s" - - return ( - - 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function CoreModeStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const soloStats = getBedwarsModeStats("solo", stats as _BedwarsStats, true) - const doublesStats = getBedwarsModeStats("doubles", stats as _BedwarsStats, true) - const threesStats = getBedwarsModeStats("3s", stats as _BedwarsStats, true) - const foursStats = getBedwarsModeStats("4s", stats as _BedwarsStats, true) - - const combinedStats = concatBedwarsStats(soloStats, doublesStats, threesStats, foursStats) - - return ( - - Core Modes - {combinedStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function FourVFourStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("4v4", stats as _BedwarsStats) - - return ( - - 4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function RushDoublesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("rush_2s", stats as _BedwarsStats) - - return ( - - Rush Doubles - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Rush4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("rush_4s", stats as _BedwarsStats) - - return ( - - Rush 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function UltimateDoublesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("ultimate_2s", stats as _BedwarsStats) - - return ( - - Ultimate Doubles - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Ultimate4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("ultimate_4s", stats as _BedwarsStats) - - return ( - - Ultimate 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function LuckyDoublesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("lucky_2s", stats as _BedwarsStats) - - return ( - - Lucky Doubles - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Lucky4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("lucky_4s", stats as _BedwarsStats) - - return ( - - Lucky 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function VoidlessDoublesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("voidless_2s", stats as _BedwarsStats) - - return ( - - Voidless Doubles - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Voidless4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("voidless_4s", stats as _BedwarsStats) - - return ( - - Voidless 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function ArmedDoublesStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("armed_2s", stats as _BedwarsStats) - - return ( - - Armed Doubles - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Armed4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("armed_4s", stats as _BedwarsStats) - - return ( - - Armed 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Swap4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("swap_4s", stats as _BedwarsStats) - - return ( - - Swap 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function Underworld4sStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("underworld_4s", stats as _BedwarsStats) - - return ( - - Underworld 4v4v4v4 - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function CastleStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const modeStats = getBedwarsModeStats("castle", stats as _BedwarsStats) - - return ( - - Castle - {modeStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -} - -function AllModeStats({ stats }: { stats: NonNullStats["Bedwars"] }) { - const soloStats = getBedwarsModeStats("solo", stats as _BedwarsStats, true) - const doublesStats = getBedwarsModeStats("doubles", stats as _BedwarsStats, true) - const threesStats = getBedwarsModeStats("3s", stats as _BedwarsStats, true) - const foursStats = getBedwarsModeStats("4s", stats as _BedwarsStats, true) - const fourVFourStats = getBedwarsModeStats("4v4", stats as _BedwarsStats, true) - const rushDoublesStats = getBedwarsModeStats("rush_2s", stats as _BedwarsStats, true) - const rush4sStats = getBedwarsModeStats("rush_4s", stats as _BedwarsStats, true) - const ultimateDoublesStats = getBedwarsModeStats("ultimate_2s", stats as _BedwarsStats, true) - const ultimate4sStats = getBedwarsModeStats("ultimate_4s", stats as _BedwarsStats, true) - const luckyDoublesStats = getBedwarsModeStats("lucky_2s", stats as _BedwarsStats, true) - const lucky4sStats = getBedwarsModeStats("lucky_4s", stats as _BedwarsStats, true) - const voidlessDoublesStats = getBedwarsModeStats("voidless_2s", stats as _BedwarsStats, true) - const voidless4sStats = getBedwarsModeStats("voidless_4s", stats as _BedwarsStats, true) - const armedDoublesStats = getBedwarsModeStats("armed_2s", stats as _BedwarsStats, true) - const armed4sStats = getBedwarsModeStats("armed_4s", stats as _BedwarsStats, true) - const swap4sStats = getBedwarsModeStats("swap_4s", stats as _BedwarsStats, true) - const underworld4sStats = getBedwarsModeStats("underworld_4s", stats as _BedwarsStats, true) - const castleStats = getBedwarsModeStats("castle", stats as _BedwarsStats, true) - - const finalStats = concatBedwarsStats( - soloStats, - doublesStats, - threesStats, - foursStats, - fourVFourStats, - rushDoublesStats, - rush4sStats, - ultimateDoublesStats, - ultimate4sStats, - luckyDoublesStats, - lucky4sStats, - voidlessDoublesStats, - voidless4sStats, - armedDoublesStats, - armed4sStats, - swap4sStats, - underworld4sStats, - castleStats - ) - - return ( - - All Modes - {finalStats.map((v, i) => { - return {typeof v === "number" ? formatNumber(v) : v} - })} - - ) -}