import React, { useMemo, useRef, useState, useEffect } from "react"; import { Button } from "@heroui/react"; import { useTranslation } from "react-i18next"; import ContestsTable from "../components/ContestsTable"; import ContestCreateForm from "../components/ContestCreateForm"; import RoundsTable from "@/components/RoundsTable"; import RoundCreateForm from "@/components/RoundCreateForm"; import { useContestStore } from "@/stores/contestStore"; import { useContestRefreshStore } from "@/stores/contestRefreshStore"; type FormMode = "none" | "create" | "edit"; type RoundFormMode = "none" | "create" | "edit"; export default function AdminContestsPage() { const { t } = useTranslation("common"); const [formMode, setFormMode] = useState("none"); const [roundFormMode, setRoundFormMode] = useState("none"); const contestFormRef = useRef(null); const roundFormRef = useRef(null); const selectedContest = useContestStore((s) => s.selectedContest); const setSelectedContest = useContestStore((s) => s.setSelectedContest); const selectedRound = useContestStore((s) => s.selectedRound); const setSelectedRound = useContestStore((s) => s.setSelectedRound); const triggerRefresh = useContestRefreshStore((s) => s.triggerRefresh); const isFormVisible = formMode !== "none"; const isRoundFormVisible = roundFormMode !== "none"; const formTitle = useMemo(() => { if (formMode === "create") return t("contest_new"); if (formMode === "edit") return t("contest_edit"); return ""; }, [formMode, t]); const roundFormTitle = useMemo(() => { if (roundFormMode === "create") return t("round_new"); if (roundFormMode === "edit") return t("round_edit"); return ""; }, [roundFormMode, t]); useEffect(() => { if (formMode !== "none" && contestFormRef.current) { contestFormRef.current.scrollIntoView({ behavior: "smooth", block: "start" }); } }, [formMode]); useEffect(() => { if (roundFormMode !== "none" && roundFormRef.current) { roundFormRef.current.scrollIntoView({ behavior: "smooth", block: "start" }); } }, [roundFormMode]); return ( <> { setSelectedContest(contest); setSelectedRound(null); setFormMode("none"); setRoundFormMode("none"); }} onEditContest={(contest) => { setSelectedContest(contest); setSelectedRound(null); setRoundFormMode("none"); setFormMode("edit"); }} />
{(isFormVisible || isRoundFormVisible) && ( )}
{isFormVisible && (
{formTitle &&

{formTitle}

} {formMode === "edit" && selectedContest && ( { setFormMode("none"); triggerRefresh(); }} /> )} {formMode === "create" && ( { setSelectedContest(contest); setFormMode("none"); triggerRefresh(); }} /> )}
)} {isRoundFormVisible && selectedContest && (
{roundFormTitle &&

{roundFormTitle}

} { setRoundFormMode("none"); triggerRefresh(); }} onUpdated={() => { setRoundFormMode("none"); triggerRefresh(); }} />
)} { selectedContest && ( { setSelectedRound(round); setFormMode("none"); setRoundFormMode("edit"); }} title={ selectedContest ? (t("contest_rounds_title_named", { name: selectedContest.name }) ?? `Kola závodu "${selectedContest.name}":`) : "" } /> )} ); }