import { useEffect, useState } from "react"; import axios from "axios"; import { Card, CardBody, CardHeader, Divider } from "@heroui/react"; import { useLanguageStore } from "@/stores/languageStore"; import { type ContestSummary } from "@/stores/contestStore"; type ContestDetailProps = { contest?: ContestSummary | null; }; type ContestDetailData = ContestSummary & { description?: string | null; evaluator?: string | null; email?: string | null; email2?: string | null; url?: string | null; rule_set_id?: number | null; rule_set?: { id: number; name: string } | null; bands?: { id: number; name: string }[]; categories?: { id: number; name: string }[]; power_categories?: { id: number; name: string }[]; }; export default function ContestDetail({ contest }: ContestDetailProps) { const locale = useLanguageStore((s) => s.locale); const [detail, setDetail] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!contest) { setDetail(null); return; } // pokud už máme detailní data, použij je a nefetchuj const hasDetailFields = "evaluator" in contest || "bands" in contest || "categories" in contest || "power_categories" in contest || "rule_set" in contest || "url" in contest; if (hasDetailFields) { setDetail(contest as ContestDetailData); setLoading(false); setError(null); return; } let active = true; (async () => { try { setLoading(true); setError(null); const res = await axios.get(`/api/contests/${contest.id}`, { headers: { Accept: "application/json" }, params: { lang: locale }, withCredentials: true, }); if (!active) return; setDetail(res.data); } catch { if (!active) return; setError("Nepodařilo se načíst detail závodu."); } finally { if (active) setLoading(false); } })(); return () => { active = false; }; }, [contest, locale]); return (
{detail?.name ?? contest?.name ?? "Vyber závod"} {detail?.description ?? ""}
{error &&

{error}

} {loading &&

Načítám detail…

} {!contest && !loading &&

Vyber závod vlevo.

} {detail && !loading && (
{detail.url && ( )} {(detail.rule_set || detail.rule_set_id) && (
Ruleset: {detail.rule_set?.name ?? `#${detail.rule_set_id}`}
)}
)}
); }