contests
This commit is contained in:
@@ -18,7 +18,6 @@ const Contest = () => {
|
||||
if (contestIdNumber === null) {
|
||||
return <Navigate to="/home/contests" replace />;
|
||||
}
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
const contest = useAppSelector((state) => state.contests.selectedContest);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { cn } from '../../../lib/cn';
|
||||
import { IconError, IconSuccess } from '../../../assets/icons/missions';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
|
||||
export interface MissionItemProps {
|
||||
id: number;
|
||||
@@ -31,6 +32,8 @@ const MissionItem: React.FC<MissionItemProps> = ({
|
||||
status,
|
||||
}) => {
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
const path = location.pathname + location.search;
|
||||
|
||||
return (
|
||||
<div
|
||||
@@ -45,7 +48,7 @@ const MissionItem: React.FC<MissionItemProps> = ({
|
||||
'cursor-pointer brightness-100 hover:brightness-125 transition-all duration-300',
|
||||
)}
|
||||
onClick={() => {
|
||||
navigate(`/mission/${id}`);
|
||||
navigate(`/mission/${id}?back=${path}`);
|
||||
}}
|
||||
>
|
||||
<div className="text-[18px] font-bold">#{id}</div>
|
||||
|
||||
@@ -28,8 +28,10 @@ const ContestMissions: FC<ContestMissionsProps> = ({ contest }) => {
|
||||
<div className="w-full">
|
||||
{contest.missions.map((v, i) => (
|
||||
<MissionItem
|
||||
id={v.missionId}
|
||||
id={v.id}
|
||||
name={v.name}
|
||||
timeLimit={v.timeLimitMilliseconds}
|
||||
memoryLimit={v.memoryLimitBytes}
|
||||
type={i % 2 ? 'second' : 'first'}
|
||||
/>
|
||||
))}
|
||||
|
||||
@@ -9,9 +9,10 @@ import { useNavigate } from 'react-router-dom';
|
||||
|
||||
interface HeaderProps {
|
||||
missionId: number;
|
||||
back?: string;
|
||||
}
|
||||
|
||||
const Header: React.FC<HeaderProps> = ({ missionId }) => {
|
||||
const Header: React.FC<HeaderProps> = ({ missionId, back }) => {
|
||||
const navigate = useNavigate();
|
||||
return (
|
||||
<header className="w-full h-[60px] flex items-center px-4 gap-[20px]">
|
||||
@@ -29,7 +30,8 @@ const Header: React.FC<HeaderProps> = ({ missionId }) => {
|
||||
alt="back"
|
||||
className="h-[24px] w-[24px] cursor-pointer"
|
||||
onClick={() => {
|
||||
navigate('/home/missions');
|
||||
if (back) navigate(back);
|
||||
else navigate('/home/missions');
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -39,7 +41,10 @@ const Header: React.FC<HeaderProps> = ({ missionId }) => {
|
||||
alt="back"
|
||||
className="h-[24px] w-[24px] cursor-pointer"
|
||||
onClick={() => {
|
||||
navigate(`/mission/${missionId - 1}`);
|
||||
if (missionId <= 1) return;
|
||||
if (back)
|
||||
navigate(`/mission/${missionId - 1}?back=${back}`);
|
||||
else navigate(`/mission/${missionId - 1}`);
|
||||
}}
|
||||
/>
|
||||
<span>{missionId}</span>
|
||||
@@ -48,7 +53,9 @@ const Header: React.FC<HeaderProps> = ({ missionId }) => {
|
||||
alt="back"
|
||||
className="h-[24px] w-[24px] cursor-pointer"
|
||||
onClick={() => {
|
||||
navigate(`/mission/${missionId + 1}`);
|
||||
if (back)
|
||||
navigate(`/mission/${missionId + 1}?back=${back}`);
|
||||
else navigate(`/mission/${missionId + 1}`);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user