'use client'; import { CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts'; type ChartPoint = { time: string; odds: number; bookmaker: string; }; type GroupedData = { time: string; [bookmaker: string]: string | number; }; function normalizeForChart(points: ChartPoint[]): GroupedData[] { const map = new Map(); for (const row of points) { const current = map.get(row.time) || { time: row.time }; current[row.bookmaker] = row.odds; map.set(row.time, current); } return Array.from(map.values()).sort((a, b) => a.time.localeCompare(b.time), ); } type Props = { data: ChartPoint[]; }; export function OddsLineMovementChart({ data }: Props) { const bookmakers = Array.from(new Set(data.map((row) => row.bookmaker))); const lines = normalizeForChart(data); const palette = ['#b83822', '#7a4a2c', '#dcb53b', '#5f4031', '#8c5b38']; return (

賠率走勢:小數賠率變化

{bookmakers.map((bookmaker, idx) => ( ))}
); }