gendesign/frontend/src/components/analytics/YandexClassPie.tsx
lekss361 8d3a0874ef add interactive analytics dashboard for Sverdlovsk market and PRINZIP
3 pages (market, PRINZIP drilldown, developers leaderboard) on top of
existing v_developer_full_metrics + domrf_realization views. ECharts on
the frontend, FastAPI router /api/v1/analytics on the backend.
2026-04-27 16:55:30 +03:00

41 lines
997 B
TypeScript

"use client";
import { useMemo } from "react";
import { useYandexListings } from "@/lib/analytics-api";
import { ChartShell } from "./ChartShell";
const CLASS_LABELS: Record<string, string> = {
ECONOM: "Эконом",
COMFORT: "Комфорт",
COMFORT_PLUS: "Комфорт+",
BUSINESS: "Бизнес",
ELITE: "Элит",
};
export function YandexClassPie() {
const { data, isLoading } = useYandexListings();
const option = useMemo(() => {
const rows = data?.by_class ?? [];
return {
tooltip: { trigger: "item" },
legend: { bottom: 0 },
series: [
{
type: "pie",
radius: ["45%", "70%"],
avoidLabelOverlap: false,
label: { formatter: "{b}: {c}" },
data: rows.map((r) => ({
name: CLASS_LABELS[r.obj_class] ?? r.obj_class,
value: r.count,
})),
},
],
};
}, [data]);
return <ChartShell option={option} loading={isLoading} height={300} />;
}