import { useState } from "react"; import { useParams, Navigate } from "react-router-dom"; import CompetitionHeader from "./components/CompetitionHeader"; import TaskContent from "./components/TaskContent"; import TaskSolution from "./modules/TaskSolution"; import { getCompetitionTasks, submitTaskSolution } from "@/shared/api/session"; import { Loader2 } from "lucide-react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; const CompetitionSession = () => { const { id, taskId } = useParams<{ id: string; taskId?: string }>(); const [answer, setAnswer] = useState(""); const competitionId = id || ""; const queryClient = useQueryClient(); const tasksQuery = useQuery({ queryKey: ["competitionTasks", competitionId], queryFn: () => getCompetitionTasks(competitionId), enabled: !!competitionId, }); const submitMutation = useMutation({ mutationFn: () => submitTaskSolution(competitionId, taskId || "", answer), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['submissionHistory', competitionId, taskId] }); setAnswer(""); } }); const tasks = tasksQuery.data || []; const isLoading = tasksQuery.isLoading; const error = tasksQuery.error ? "Не удалось загрузить задания. Пожалуйста, попробуйте позже." : null; const currentTask = tasks.find((t) => t.id === taskId) || null; if (!taskId && tasks.length > 0 && !isLoading) { return ( ); } const handleSubmit = () => { console.log(currentTask, competitionId, answer) if (!currentTask || !competitionId || !answer.trim()) return; submitMutation.mutate(); }; return (
{isLoading ? (

Загрузка заданий...

) : error ? (

{error}

) : currentTask ? (
) : (

Задание не найдено

)}
); }; export default CompetitionSession;