From 4c88e7d19a98e480c911e4386f75b61b9652a99c Mon Sep 17 00:00:00 2001 From: Primakov Alexandr Alexandrovich Date: Tue, 4 Nov 2025 11:43:40 +0300 Subject: [PATCH] Add submission status indicators to TaskWorkspace component, including queue status, acceptance, and revision feedback. Enhance UI with loading spinner and conditional rendering for submission results. --- src/components/personal/TaskWorkspace.tsx | 109 ++++++++++++++++++---- 1 file changed, 89 insertions(+), 20 deletions(-) diff --git a/src/components/personal/TaskWorkspace.tsx b/src/components/personal/TaskWorkspace.tsx index fb40aa3..6af8e88 100644 --- a/src/components/personal/TaskWorkspace.tsx +++ b/src/components/personal/TaskWorkspace.tsx @@ -3,6 +3,7 @@ import { Box, Button, HStack, + Spinner, Text, Textarea, VStack, @@ -11,8 +12,6 @@ import { import type { ChallengeTask } from '../../__data__/types' import { useChallenge } from '../../context/ChallengeContext' import { useSubmission } from '../../hooks/useSubmission' -import { CheckStatusView } from './CheckStatusView' -import { ResultView } from './ResultView' interface TaskWorkspaceProps { task: ChallengeTask @@ -26,6 +25,9 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => { }) const descriptionBg = 'gray.50' + const isChecking = !!queueStatus || isSubmitting + const isAccepted = finalSubmission?.status === 'accepted' + const needsRevision = finalSubmission?.status === 'needs_revision' useEffect(() => { if (finalSubmission) { @@ -33,18 +35,8 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => { } }, [finalSubmission, refreshStats]) - if (queueStatus) { - return - } - - if (finalSubmission) { - return ( - - ) - } - return ( - + {task.title} @@ -54,6 +46,75 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => { + {/* Статус проверки */} + {queueStatus && ( + + + + + + {queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'} + + {typeof queueStatus.position === 'number' && queueStatus.position > 0 && ( + + Позиция в очереди: {queueStatus.position} + + )} + + + + )} + + {/* Результат проверки - успех */} + {isAccepted && ( + + + + + Задание принято! + + {finalSubmission?.feedback && ( + + + Комментарий: + + + {finalSubmission.feedback} + + + )} + + + + )} + + {/* Результат проверки - требуется доработка */} + {needsRevision && ( + + + ⚠️ + + Требуется доработка + + {finalSubmission?.feedback && ( + + + Комментарий проверяющего: + + + {finalSubmission.feedback} + + + )} + + Попытка №{finalSubmission?.attemptNumber} + + + + )} + Ваше решение @@ -64,16 +125,24 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => { placeholder="Напишите ваше решение..." rows={14} bg="white" + // @ts-expect-error Chakra UI v2 uses isDisabled + isDisabled={isChecking || isAccepted} /> - - - + + {!isAccepted && ( + <> + {/* @ts-expect-error Chakra UI v2 uses isDisabled */} + + {/* @ts-expect-error Chakra UI v2 uses isLoading/isDisabled */} + + + )} )