From fb8da4ffd953c10e17328c488068d83e627dad36 Mon Sep 17 00:00:00 2001 From: Primakov Alexandr Date: Fri, 12 Dec 2025 15:11:35 +0300 Subject: [PATCH] Enhance TaskWorkspace component to manage submission results more effectively. Introduce state for last submission result and update rendering logic to display either the current or last result. Refactor status display to ensure consistent feedback during task processing, improving user experience. --- src/components/personal/TaskWorkspace.tsx | 123 ++++++++++++---------- 1 file changed, 67 insertions(+), 56 deletions(-) diff --git a/src/components/personal/TaskWorkspace.tsx b/src/components/personal/TaskWorkspace.tsx index 89d3cb2..d046ed3 100644 --- a/src/components/personal/TaskWorkspace.tsx +++ b/src/components/personal/TaskWorkspace.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react' +import React, { useEffect, useState } from 'react' import { Box, Button, @@ -26,15 +26,30 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => { taskId: task.id, }) + // Сохраняем последний результат, чтобы блок не исчезал + const [lastResult, setLastResult] = useState(null) + const isChecking = !!queueStatus || isSubmitting const isAccepted = finalSubmission?.status === 'accepted' const needsRevision = finalSubmission?.status === 'needs_revision' + + // Обновляем сохраненный результат только когда получаем новый + useEffect(() => { + if (finalSubmission) { + setLastResult(finalSubmission) + } + }, [finalSubmission]) useEffect(() => { if (finalSubmission) { refreshStats() } }, [finalSubmission, refreshStats]) + + // Используем либо текущий результат, либо последний сохраненный + const displayedSubmission = finalSubmission || lastResult + const showAccepted = displayedSubmission?.status === 'accepted' + const showNeedsRevision = displayedSubmission?.status === 'needs_revision' return ( @@ -212,66 +227,62 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => { - {/* Статус проверки */} - {queueStatus && !finalSubmission && ( - - - - - {queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'} - {typeof queueStatus.position === 'number' && queueStatus.position > 0 && ` (позиция: ${queueStatus.position})`} - - - - )} - - {/* Результат проверки - успех */} - {isAccepted && ( - - - - - - - Задание принято! - - {finalSubmission?.feedback && ( + {/* Статус проверки и результат - фиксированное место */} + + {queueStatus && !finalSubmission ? ( + + + + + {queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'} + {typeof queueStatus.position === 'number' && queueStatus.position > 0 && ` (позиция: ${queueStatus.position})`} + + + + ) : showAccepted ? ( + + + + + + + Задание принято! + + {displayedSubmission?.feedback && ( + + {displayedSubmission.feedback} + + )} + + + + + + ) : showNeedsRevision ? ( + + + ⚠️ + + + + Задание требует доработки + + + (попытка №{displayedSubmission?.attemptNumber}) + + + {displayedSubmission?.feedback && ( - {finalSubmission.feedback} + {displayedSubmission.feedback} )} - - - - )} - - {/* Результат проверки - требуется доработка */} - {needsRevision && ( - - - ⚠️ - - - - Требуется доработка - - - (попытка №{finalSubmission?.attemptNumber}) - - - {finalSubmission?.feedback && ( - - {finalSubmission.feedback} - - )} - - - - )} + + ) : null} +