// ============================================================ // ویجت ۸ — تراکم پروژه‌ها (Project Density) // نمودار میله‌ای افقی: توزیع بار تدارکات روی پروژه‌های فعال — // سفارش‌های باز (سته‌شده با پیشنهادهای باز). // ============================================================ import { useMemo } from "react"; import { Bar, BarChart, CartesianGrid, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; import { useProcurementWorkload } from "../../hooks/useDashboardData"; import { faNum } from "../../lib/formatters"; import { CHART_COLORS, ChartCard, ChartEmpty, ChartLoading, ChartTooltip, faAxisTick, } from "./chartShared"; export function ProjectDensityChart() { const query = useProcurementWorkload(); const rows = useMemo(() => { const projects = query.data?.projects ?? []; return projects .filter((p) => p.open_orders > 0 || p.offered_quotes > 0 || p.chosen_items > 0) .map((p) => ({ name: p.name, "سفارش باز (در راه)": p.open_orders, "پیشنهاد باز": p.offered_quotes, _ordered: p.ordered_qty, _received: p.received_qty, })) .sort((a, b) => (b["سفارش باز (در راه)"] + b["پیشنهاد باز"]) - (a["سفارش باز (در راه)"] + a["پیشنهاد باز"])); }, [query.data]); return ( {query.isLoading ? ( ) : rows.length === 0 ? ( ) : (
String(l)} valueFormatter={(v) => `${faNum(v)} مورد`} /> } /> ( {String(value)} )} />
)}
); }