"use client";
import { useMemo } from "react";
import { useTopDevelopers } from "@/lib/analytics-api";
import { ChartShell } from "./ChartShell";
export function VelocityScatter() {
const { data, isLoading } = useTopDevelopers(30);
const option = useMemo(() => {
const rows = data ?? [];
return {
tooltip: {
trigger: "item",
formatter: (info: { data: [number, number, string, number] }) => {
const [x, y, name, sold] = info.data;
return `${name}
Объём: ${x} тыс м²
Δ sold: ${y > 0 ? "+" : ""}${y} пп
текущий sold%: ${sold}%`;
},
},
grid: { left: 56, right: 32, top: 32, bottom: 56 },
xAxis: {
name: "Объём, тыс м²",
nameLocation: "middle",
nameGap: 32,
type: "value",
},
yAxis: {
name: "Δ sold % (пп)",
nameLocation: "middle",
nameGap: 36,
type: "value",
axisLine: { show: true },
},
series: [
{
type: "scatter",
symbolSize: 14,
data: rows
.filter((r) => r.sold_delta_pp != null && r.sverdl_sqm_th != null)
.map((r) => [
r.sverdl_sqm_th,
r.sold_delta_pp,
r.developer_name,
r.sold_pct ?? 0,
]),
itemStyle: {
color: (p: { data: [number, number, string, number] }) =>
p.data[1] > 5
? "#0a7a3a"
: p.data[1] < -5
? "#b3261e"
: "#5b6066",
},
label: {
show: true,
position: "right",
formatter: (p: { data: [number, number, string, number] }) =>
p.data[2],
fontSize: 11,
color: "#374151",
},
markLine: {
silent: true,
symbol: "none",
lineStyle: { color: "#cbd5e1", type: "dashed" },
data: [{ yAxis: 0 }],
},
},
],
};
}, [data]);
return ;
}