import { Deal } from "../api/types"; import { formatCurrencyILS, formatDate, formatNumber } from "../lib/utils"; interface Props { deals: Deal[]; } function inferStreetName(deals: Deal[]): string | null { const freq: Record = {}; for (const d of deals) { if (d.deal_source === "street" && d.streetNameHeb) { freq[d.streetNameHeb] = (freq[d.streetNameHeb] ?? 0) + 1; } } const entries = Object.entries(freq); if (!entries.length) return null; return entries.reduce((a, b) => (b[1] > a[1] ? b : a))[0]; } function proximityLabel(deal: Deal, inferredStreet: string | null): string { if (!deal.deal_source) return "—"; if (deal.deal_source === "same_building") return "אותו בניין"; if (deal.deal_source === "neighborhood") return "שכונה"; // "street" source — check if actually same street if (inferredStreet && deal.streetNameHeb === inferredStreet) return "אותו רחוב"; return "סביבה קרובה"; } function proximityClass(deal: Deal, inferredStreet: string | null): string { if (deal.deal_source === "same_building") return "bg-emerald-100 text-emerald-800"; if (deal.deal_source === "street" && inferredStreet && deal.streetNameHeb === inferredStreet) return "bg-blue-100 text-blue-800"; if (deal.deal_source === "street") return "bg-sky-50 text-sky-700"; return "bg-slate-100 text-slate-700"; } export function DealsTable({ deals }: Props) { if (!deals.length) { return (
לא נמצאו עסקאות באזור הזה
); } const inferredStreet = inferStreetName(deals); return (
{deals.map((d) => { const street = d.streetNameHeb || ""; const houseNum = d.houseNum ?? ""; const settlement = d.settlementNameHeb || ""; const address = [street, houseNum, settlement].filter(Boolean).join(" "); return ( ); })}
תאריך כתובת סוג חדרים קומה שטח (מ"ר) מחיר מחיר/מ"ר גוש חלקה תת-חלקה קרבה
{formatDate(d.deal_date)} {address || "—"} {d.property_type_description || "—"} {d.rooms ?? "—"} {d.floor ?? "—"} {formatNumber(d.asset_area)} {formatCurrencyILS(d.deal_amount)} {formatCurrencyILS(d.price_per_sqm)} {d.gushNum ?? "—"} {d.parcelNum ?? "—"} {d.subParcelNum ?? "—"} {d.deal_source ? ( {proximityLabel(d, inferredStreet)} ) : ( "—" )}
); }