import SubmissionItem from "./SubmissionItem"; import { useAppDispatch, useAppSelector } from "../../../redux/hooks"; import { FC, useEffect } from "react"; import { Contest, fetchMySubmissions, setContestStatus, } from "../../../redux/slices/contests"; import { arrowLeft } from "../../../assets/icons/header"; import { useNavigate } from "react-router-dom"; export interface Mission { id: number; authorId: number; name: string; difficulty: "Easy" | "Medium" | "Hard"; tags: string[]; timeLimit: number; memoryLimit: number; createdAt: string; updatedAt: string; } interface SubmissionsProps { contest: Contest; } const Submissions: FC = ({ contest }) => { const dispatch = useAppDispatch(); const navigate = useNavigate(); const { submissions, status } = useAppSelector( (state) => state.contests.fetchMySubmissions ); useEffect(() => { if (contest && contest.id) dispatch(fetchMySubmissions(contest.id)); }, [contest]); useEffect(() => { if (status == "successful") { dispatch(setContestStatus({ key: "fetchMySubmissions", status: "idle" })); } }, [status]); const checkStatus = (status: string) => { if (status == "IncorrectAnswer") return "wronganswer"; if (status == "TimeLimitError") return "timelimit"; return undefined; }; const solvedCount = (contest.missions ?? []).filter((mission) => submissions.some( (s) => s.solution.missionId === mission.id && s.solution.status === "Accepted: All tests passed" ) ).length; const totalCount = contest.missions?.length ?? 0; return (
{contest.name}
{ navigate(`/contest/${contest.id}`); }} /> Контест #{contest.id}
{`${solvedCount}/${totalCount} Решено`}
Посылка
Когда
Задача
Язык
Вердикт
Время
Память
{!submissions || submissions.length == 0 ? (
Вы еще ничего не отсылали
) : ( <> {submissions.map((v, i) => ( ))} )}
); }; export default Submissions;