"use client"; import { Bar, BarChart, CartesianGrid, XAxis, YAxis } from "recharts"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, type ChartConfig, } from "@/components/ui/chart"; import type { PublicGuide } from "@/lib/guides/queries"; const chartConfig = { overall: { label: "Overall · ดาเมจทั้งทีม", color: "var(--chart-1)" }, personal: { label: "Personal · ดาเมจส่วนตัว", color: "var(--chart-2)" }, } satisfies ChartConfig; function percentage(value: string | null) { if (!value?.trim()) return null; const number = Number(value); // Zero is displayed as an unavailable metric in the weapon cards. return Number.isFinite(number) && number !== 0 ? number : null; } export function WeaponChart({ rows }: { rows: PublicGuide["weaponGroups"][number]["rows"] }) { const data = rows.map((row, index) => ({ name: `${index + 1}. ${row.weapon.name} R${row.refinement}`, imageUrl: row.weapon.imageUrl, overall: percentage(row.overallPercent), personal: percentage(row.personalPercent), })); const hasOverall = data.some((row) => row.overall !== null); const hasPersonal = data.some((row) => row.personal !== null); const singleMetric = !hasOverall || !hasPersonal; if (!hasOverall && !hasPersonal) return null; return ( เปรียบเทียบดาเมจอาวุธ เปอร์เซ็นต์ดาเมจของอาวุธทั้งหมดใน Condition นี้ `${value}%`} /> { const weapon = data.find((row) => row.name === payload.value); if (!weapon) return ; const size = Math.max(8, Math.min(40, Number(width) / data.length - 4 || 32)); return ( {weapon.name} ); }} /> (
{chartConfig[name as keyof typeof chartConfig]?.label ?? name} {value}%
)} /> } /> } /> {hasPersonal ? : null} {hasOverall ? : null}
); }