import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { fetchTopDeals, type TopRange } from "../../api/deal/getTopDeals"; import { scoreToHeat } from "../../utils/heat"; const LIMIT = 6; const TABS: { key: TopRange; label: string }[] = [ { key: "day", label: "Günlük" }, { key: "week", label: "Haftalık" }, { key: "month", label: "Aylık" }, ]; export default function HotDealsSidebar() { const navigate = useNavigate(); const [range, setRange] = useState("day"); const [items, setItems] = useState([]); // Initialize with the correct type const [loading, setLoading] = useState(false); const [err, setErr] = useState(null); useEffect(() => { let canceled = false; const load = async () => { setLoading(true); setErr(null); try { const data = await fetchTopDeals(range, LIMIT); if (canceled) return; setItems(Array.isArray(data) ? data.slice(0, LIMIT) : []); } catch (e: any) { if (canceled) return; setErr(e?.message ?? "Bir hata oluştu"); setItems([]); } finally { if (!canceled) setLoading(false); } }; load(); return () => { canceled = true; }; }, [range]); return (
{/* Title and Tabs */}
En İyi İlanlar
{/* Sliding indicator */}
{TABS.map((t) => { const isActive = t.key === range; return ( ); })}
{err && (
{err}
)} {/* Items - Vertical Layout (1 item per row) */}
{loading && items.length === 0 ? Array.from({ length: LIMIT }).map((_, i) => (
)) : items.map((d) => { const img = d.imageUrl || "/placeholder.png"; const price = d.price ? `${d.price}₺` : ""; const title = d.title || "Ürün adı"; const { degree, color } = scoreToHeat(d.score ?? 0); return ( ); })} {/* No items or error */} {!loading && items.length === 0 && !err && (
Gösterilecek fırsat yok
Daha sonra tekrar dene.
)}
{/* View All Button */}
); }