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.
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit

This commit is contained in:
2025-12-12 15:11:35 +03:00
parent 0965318bca
commit fb8da4ffd9

View File

@@ -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<typeof finalSubmission>(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 (
<VStack align="stretch" gap={3}>
@@ -212,66 +227,62 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
</Box>
</Box>
{/* Статус проверки */}
{queueStatus && !finalSubmission && (
<Box borderWidth="1px" borderRadius="md" borderColor="blue.200" bg="blue.50" p={2}>
<HStack gap={2}>
<Spinner size="sm" color="blue.500" />
<Text fontSize="sm" fontWeight="medium" color="blue.700">
{queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'}
{typeof queueStatus.position === 'number' && queueStatus.position > 0 && ` (позиция: ${queueStatus.position})`}
</Text>
</HStack>
</Box>
)}
{/* Результат проверки - успех */}
{isAccepted && (
<Box borderWidth="1px" borderRadius="md" borderColor="green.300" bg="green.50" p={3}>
<HStack justify="space-between" align="start">
<HStack align="start" gap={2} flex={1}>
<Text fontSize="xl"></Text>
<Box>
<Text fontSize="md" fontWeight="bold" color="green.700">
Задание принято!
</Text>
{finalSubmission?.feedback && (
{/* Статус проверки и результат - фиксированное место */}
<Box minH="80px">
{queueStatus && !finalSubmission ? (
<Box borderWidth="1px" borderRadius="md" borderColor="blue.200" bg="blue.50" p={2}>
<HStack gap={2}>
<Spinner size="sm" color="blue.500" />
<Text fontSize="sm" fontWeight="medium" color="blue.700">
{queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'}
{typeof queueStatus.position === 'number' && queueStatus.position > 0 && ` (позиция: ${queueStatus.position})`}
</Text>
</HStack>
</Box>
) : showAccepted ? (
<Box borderWidth="1px" borderRadius="md" borderColor="green.300" bg="green.50" p={3}>
<HStack justify="space-between" align="start">
<HStack align="start" gap={2} flex={1}>
<Text fontSize="xl"></Text>
<Box>
<Text fontSize="md" fontWeight="bold" color="green.700">
Задание принято!
</Text>
{displayedSubmission?.feedback && (
<Text fontSize="sm" color="gray.700" mt={1}>
{displayedSubmission.feedback}
</Text>
)}
</Box>
</HStack>
<Button onClick={onTaskComplete} colorScheme="green" size="sm">
Следующее
</Button>
</HStack>
</Box>
) : showNeedsRevision ? (
<Box borderWidth="1px" borderRadius="md" borderColor="orange.300" bg="orange.50" p={3}>
<HStack align="start" gap={2}>
<Text fontSize="xl"></Text>
<Box flex={1}>
<HStack>
<Text fontSize="md" fontWeight="bold" color="orange.700">
Задание требует доработки
</Text>
<Text fontSize="xs" color="gray.600">
(попытка {displayedSubmission?.attemptNumber})
</Text>
</HStack>
{displayedSubmission?.feedback && (
<Text fontSize="sm" color="gray.700" mt={1}>
{finalSubmission.feedback}
{displayedSubmission.feedback}
</Text>
)}
</Box>
</HStack>
<Button onClick={onTaskComplete} colorScheme="green" size="sm">
Следующее
</Button>
</HStack>
</Box>
)}
{/* Результат проверки - требуется доработка */}
{needsRevision && (
<Box borderWidth="1px" borderRadius="md" borderColor="orange.300" bg="orange.50" p={3}>
<HStack align="start" gap={2}>
<Text fontSize="xl"></Text>
<Box flex={1}>
<HStack>
<Text fontSize="md" fontWeight="bold" color="orange.700">
Требуется доработка
</Text>
<Text fontSize="xs" color="gray.600">
(попытка {finalSubmission?.attemptNumber})
</Text>
</HStack>
{finalSubmission?.feedback && (
<Text fontSize="sm" color="gray.700" mt={1}>
{finalSubmission.feedback}
</Text>
)}
</Box>
</HStack>
</Box>
)}
</Box>
) : null}
</Box>
<Box>
<Text fontWeight="medium" mb={1} fontSize="sm">