- {contest.missions.map((v, i) => (
+ {(contest.missions ?? []).map((v, i) => (
= ({
+ id,
+ language,
+ time,
+ verdict,
+ type,
+ status,
+}) => {
+ // const navigate = useNavigate();
+
+ return (
+ {}}
+ >
+
#{id}
+
+ {formatDate(time)}
+
+
{language}
+
+ {verdict}
+
+
+ );
+};
+
+export default SubmissionItem;
diff --git a/src/views/home/contest/Submissions.tsx b/src/views/home/contest/Submissions.tsx
index e69de29..24024a2 100644
--- a/src/views/home/contest/Submissions.tsx
+++ b/src/views/home/contest/Submissions.tsx
@@ -0,0 +1,73 @@
+import SubmissionItem from './SubmissionItem';
+import { useAppDispatch, useAppSelector } from '../../../redux/hooks';
+import { FC, useEffect } from 'react';
+import { fetchMySubmissions, setContestStatus } from '../../../redux/slices/contests';
+
+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 {
+ contestId: number;
+}
+
+const Submissions: FC = ({ contestId }) => {
+ const dispatch = useAppDispatch();
+
+ const {submissions, status} = useAppSelector(
+ (state) => state.contests.fetchMySubmissions
+ );
+
+ useEffect(() => {
+ dispatch(fetchMySubmissions(contestId));
+ }, [contestId]);
+
+ 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;
+ };
+
+ return (
+
+ {submissions &&
+ submissions.map((v, i) => (
+
+ ))}
+
+ );
+};
+
+export default Submissions;
diff --git a/src/views/home/contests/ModalCreate.tsx b/src/views/home/contests/ModalCreate.tsx
index 6863b0d..0c30465 100644
--- a/src/views/home/contests/ModalCreate.tsx
+++ b/src/views/home/contests/ModalCreate.tsx
@@ -37,7 +37,6 @@ const ModalCreateContest: FC = ({
attemptDurationMinutes: 0,
maxAttempts: 0,
allowEarlyFinish: false,
- groupIds: [],
missionIds: [],
articleIds: [],
});
diff --git a/src/views/mission/statement/MissionSubmissions.tsx b/src/views/mission/statement/MissionSubmissions.tsx
index cdd725d..9d8db13 100644
--- a/src/views/mission/statement/MissionSubmissions.tsx
+++ b/src/views/mission/statement/MissionSubmissions.tsx
@@ -1,6 +1,7 @@
import SubmissionItem from './SubmissionItem';
-import { useAppSelector } from '../../../redux/hooks';
+import { useAppDispatch, useAppSelector } from '../../../redux/hooks';
import { FC, useEffect } from 'react';
+import { fetchMySubmissions } from '../../../redux/slices/contests';
export interface Mission {
id: number;
@@ -16,13 +17,18 @@ export interface Mission {
interface MissionSubmissionsProps {
missionId: number;
+ contestId?: number;
}
-const MissionSubmissions: FC = ({ missionId }) => {
+const MissionSubmissions: FC = ({ missionId, contestId }) => {
+ const dispatch = useAppDispatch();
const submissions = useAppSelector(
(state) => state.submin.submitsById[missionId],
);
+
+ const {submissions: contestSubmission, status: contestStatus} = useAppSelector((state) => state.contests.fetchMySubmissions);
+
useEffect(() => {}, []);
const checkStatus = (status: string) => {
@@ -31,9 +37,40 @@ const MissionSubmissions: FC = ({ missionId }) => {
return undefined;
};
+
+ useEffect(() => {
+ if (contestId){
+ dispatch(fetchMySubmissions(contestId));
+ }
+ }, [contestId, missionId])
return (
- {submissions &&
+
+{contestId ?
+contestSubmission &&
+ contestSubmission.filter(v => v.solution.missionId == missionId).map((v, i) => (
+
+ ))
+:
+ submissions &&
submissions.map((v, i) => (
= ({ missionId }) => {
: checkStatus(v.solution.testerErrorCode)
}
/>
- ))}
+ ))
+ }
);
};