import React from 'react' import { useTranslation } from 'react-i18next' import { useParams, useNavigate } from 'react-router-dom' import { Box, Heading, Text, Button, HStack, VStack } from '@chakra-ui/react' import ReactMarkdown from 'react-markdown' import { useGetUserSubmissionsQuery } from '../../__data__/api/api' import { LoadingSpinner } from '../../components/LoadingSpinner' import { ErrorAlert } from '../../components/ErrorAlert' import { StatusBadge } from '../../components/StatusBadge' import type { ChallengeTask, ChallengeUser } from '../../types/challenge' import { URLs } from '../../__data__/urls' export const SubmissionDetailsPage: React.FC = () => { const { t } = useTranslation() const { userId, submissionId } = useParams<{ userId: string; submissionId: string }>() const navigate = useNavigate() // Получаем submissions для конкретного пользователя const { data: submissions, isLoading, error } = useGetUserSubmissionsQuery( { userId: userId!, taskId: undefined }, { skip: !userId } ) const submission = submissions?.find((s) => s.id === submissionId) const handleBack = () => { navigate(URLs.submissions) } if (isLoading) { return } if (error) { return } if (!submission) { return ( ) } const rawUser = submission.user as ChallengeUser | string | undefined const rawTask = submission.task as ChallengeTask | string | undefined const userNickname = rawUser && typeof rawUser === 'object' && 'nickname' in rawUser ? rawUser.nickname ?? '' : typeof rawUser === 'string' ? rawUser : '' const taskTitle = rawTask && typeof rawTask === 'object' && 'title' in rawTask ? rawTask.title ?? '' : typeof rawTask === 'string' ? rawTask : '' const taskDescription = rawTask && typeof rawTask === 'object' && 'description' in rawTask ? rawTask.description ?? '' : '' const formatDate = (dateStr: string) => { return new Date(dateStr).toLocaleString('ru-RU', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', }) } const getCheckTimeValue = () => { if (!submission.checkedAt) return null const submitted = new Date(submission.submittedAt).getTime() const checked = new Date(submission.checkedAt).getTime() return ((checked - submitted) / 1000).toFixed(2) } return ( {/* Header with back button */} {t('challenge.admin.submissions.details.title')} #{submission.attemptNumber} {/* Meta */} {t('challenge.admin.submissions.details.user')} {userNickname} {t('challenge.admin.submissions.details.status')} {t('challenge.admin.submissions.details.submitted')}{' '} {formatDate(submission.submittedAt)} {submission.checkedAt && ( <> {t('challenge.admin.submissions.details.checked')}{' '} {formatDate(submission.checkedAt)} {t('challenge.admin.submissions.details.check.time')}{' '} {t('challenge.admin.submissions.check.time', { time: getCheckTimeValue() })} )} {/* Task */} {t('challenge.admin.submissions.details.task')} {taskTitle} {taskDescription} {/* Solution */} {t('challenge.admin.submissions.details.solution')} {submission.result} {/* Feedback */} {submission.feedback && ( {t('challenge.admin.submissions.details.feedback')} {submission.feedback} )} ) }