import { useState } from "react"; import { useParams } from "react-router-dom"; import { Task, TaskStatus } from "@/shared/types"; const sampleTasks: Task[] = [ { id: "1", number: "1.1", status: "uncleared" }, { id: "2", number: "1.2", status: "checking" }, { id: "3", number: "1.3", status: "correct" }, { id: "4", number: "2.1", status: "partial" }, { id: "5", number: "2.2", status: "wrong" }, { id: "6", number: "2.3", status: "uncleared" }, { id: "7", number: "3.1", status: "checking" }, { id: "8", number: "3.2", status: "correct" }, ]; const CompetitionRunnerPage = () => { const { id } = useParams<{ id: string }>(); const [competitionTitle, setCompetitionTitle] = useState( "Олимпиада DANO 2025. Индивидуальный этап", ); const [tasks, setTasks] = useState(sampleTasks); const [selectedTaskId, setSelectedTaskId] = useState(null); const getTaskBgColor = (status: TaskStatus): string => { switch (status) { case "uncleared": return "bg-[var(--color-task-uncleared)]"; case "checking": return "bg-[var(--color-task-checking)]"; case "correct": return "bg-[var(--color-task-correct)]"; case "partial": return "bg-[var(--color-task-partial)]"; case "wrong": return "bg-[var(--color-task-wrong)]"; } }; const getTaskTextColor = (status: TaskStatus): string => { switch (status) { case "uncleared": return "text-gray-600"; case "checking": return "text-gray-800"; case "correct": return "text-green-800"; case "partial": return "text-green-700"; case "wrong": return "text-red-800"; } }; const handleTaskClick = (taskId: string) => { setSelectedTaskId(taskId); }; return ( <>

{competitionTitle}

{tasks.map((task) => (
handleTaskClick(task.id)} > {task.number}
))}
{selectedTaskId ? (

Задание {tasks.find((t) => t.id === selectedTaskId)?.number}

Содержание задания будет отображаться здесь.

) : (

Выберите задание для просмотра

)}
); }; export default CompetitionRunnerPage;