"use client"; import { useMemo } from "react"; import { LineChart, Line, XAxis, YAxis, Tooltip, Legend, ResponsiveContainer, CartesianGrid, } from "recharts"; import type { PriceHistoryYearPoint } from "@/types/trade-in"; type Props = { points: PriceHistoryYearPoint[] }; const fmtK = (n: number) => `${Math.round(n / 1000)}k`; interface PivotRow { year: number; avito_imv?: number; yandex_valuation?: number; n_avito?: number; n_yandex?: number; } export function PriceHistoryChart({ points }: Props) { const pivoted = useMemo(() => { const byYear: Record = {}; for (const p of points) { if (!byYear[p.year]) byYear[p.year] = { year: p.year }; if (p.source === "avito_imv") { byYear[p.year].avito_imv = p.median_price_per_m2; byYear[p.year].n_avito = p.n_lots; } else if (p.source === "yandex_valuation") { byYear[p.year].yandex_valuation = p.median_price_per_m2; byYear[p.year].n_yandex = p.n_lots; } } return Object.values(byYear).sort((a, b) => a.year - b.year); }, [points]); const totalLots = points.reduce((s, p) => s + p.n_lots, 0); return (

Динамика цен в доме

Медиана ₽/м² по году · Avito + Яндекс (по {totalLots} лотам)
[ `${value.toLocaleString("ru-RU")} ₽/м²`, name === "avito_imv" ? "Avito" : name === "yandex_valuation" ? "Яндекс" : name, ] } labelFormatter={(year) => `${year} год`} />
); }