import { cn } from '../../../../lib/cn'; import { useNavigate } from 'react-router-dom'; import { Edit } from '../../../../assets/icons/input'; import { useAppSelector } from '../../../../redux/hooks'; export interface MissionItemProps { id: number; authorId?: number; name: string; difficulty: number; tags?: string[]; timeLimit?: number; memoryLimit?: number; createdAt?: string; updatedAt?: string; type?: 'first' | 'second'; status?: 'empty' | 'success' | 'error'; setTastDeleteId: (v: number) => void; setDeleteModalActive: (v: boolean) => void; } export function formatMilliseconds(ms: number): string { const rounded = Math.round(ms) / 1000; const formatted = rounded.toString().replace(/\.?0+$/, ''); return `${formatted} c`; } export function formatBytesToMB(bytes: number): string { const megabytes = Math.floor(bytes / (1024 * 1024)); return `${megabytes} МБ`; } const MissionItem: React.FC = ({ id, name, difficulty, timeLimit = 1000, memoryLimit = 256 * 1024 * 1024, type, status, setTastDeleteId, setDeleteModalActive, }) => { const navigate = useNavigate(); const difficultyItems = ['Easy', 'Medium', 'Hard']; const difficultyString = difficultyItems[Math.min(Math.max(0, difficulty - 1), 2)]; const deleteStatus = useAppSelector( (state) => state.missions.statuses.delete, ); return (
{ navigate(`/mission/${id}?back=/home/account/missions`); }} >
#{id}
{name}
стандартный ввод/вывод {formatMilliseconds(timeLimit)},{' '} {formatBytesToMB(memoryLimit)}
{difficultyString}
{ e.stopPropagation(); if (deleteStatus != 'loading') { setTastDeleteId(id); setDeleteModalActive(true); } }} />
); }; export default MissionItem;