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}
)}
)
}