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
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
@@ -26,15 +26,30 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
|
|||||||
taskId: task.id,
|
taskId: task.id,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Сохраняем последний результат, чтобы блок не исчезал
|
||||||
|
const [lastResult, setLastResult] = useState<typeof finalSubmission>(null)
|
||||||
|
|
||||||
const isChecking = !!queueStatus || isSubmitting
|
const isChecking = !!queueStatus || isSubmitting
|
||||||
const isAccepted = finalSubmission?.status === 'accepted'
|
const isAccepted = finalSubmission?.status === 'accepted'
|
||||||
const needsRevision = finalSubmission?.status === 'needs_revision'
|
const needsRevision = finalSubmission?.status === 'needs_revision'
|
||||||
|
|
||||||
|
// Обновляем сохраненный результат только когда получаем новый
|
||||||
|
useEffect(() => {
|
||||||
|
if (finalSubmission) {
|
||||||
|
setLastResult(finalSubmission)
|
||||||
|
}
|
||||||
|
}, [finalSubmission])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (finalSubmission) {
|
if (finalSubmission) {
|
||||||
refreshStats()
|
refreshStats()
|
||||||
}
|
}
|
||||||
}, [finalSubmission, refreshStats])
|
}, [finalSubmission, refreshStats])
|
||||||
|
|
||||||
|
// Используем либо текущий результат, либо последний сохраненный
|
||||||
|
const displayedSubmission = finalSubmission || lastResult
|
||||||
|
const showAccepted = displayedSubmission?.status === 'accepted'
|
||||||
|
const showNeedsRevision = displayedSubmission?.status === 'needs_revision'
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VStack align="stretch" gap={3}>
|
<VStack align="stretch" gap={3}>
|
||||||
@@ -212,66 +227,62 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
|
|||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
{/* Статус проверки */}
|
{/* Статус проверки и результат - фиксированное место */}
|
||||||
{queueStatus && !finalSubmission && (
|
<Box minH="80px">
|
||||||
<Box borderWidth="1px" borderRadius="md" borderColor="blue.200" bg="blue.50" p={2}>
|
{queueStatus && !finalSubmission ? (
|
||||||
<HStack gap={2}>
|
<Box borderWidth="1px" borderRadius="md" borderColor="blue.200" bg="blue.50" p={2}>
|
||||||
<Spinner size="sm" color="blue.500" />
|
<HStack gap={2}>
|
||||||
<Text fontSize="sm" fontWeight="medium" color="blue.700">
|
<Spinner size="sm" color="blue.500" />
|
||||||
{queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'}
|
<Text fontSize="sm" fontWeight="medium" color="blue.700">
|
||||||
{typeof queueStatus.position === 'number' && queueStatus.position > 0 && ` (позиция: ${queueStatus.position})`}
|
{queueStatus.status === 'waiting' ? 'Ожидание в очереди...' : 'Проверяем решение...'}
|
||||||
</Text>
|
{typeof queueStatus.position === 'number' && queueStatus.position > 0 && ` (позиция: ${queueStatus.position})`}
|
||||||
</HStack>
|
</Text>
|
||||||
</Box>
|
</HStack>
|
||||||
)}
|
</Box>
|
||||||
|
) : showAccepted ? (
|
||||||
{/* Результат проверки - успех */}
|
<Box borderWidth="1px" borderRadius="md" borderColor="green.300" bg="green.50" p={3}>
|
||||||
{isAccepted && (
|
<HStack justify="space-between" align="start">
|
||||||
<Box borderWidth="1px" borderRadius="md" borderColor="green.300" bg="green.50" p={3}>
|
<HStack align="start" gap={2} flex={1}>
|
||||||
<HStack justify="space-between" align="start">
|
<Text fontSize="xl">✅</Text>
|
||||||
<HStack align="start" gap={2} flex={1}>
|
<Box>
|
||||||
<Text fontSize="xl">✅</Text>
|
<Text fontSize="md" fontWeight="bold" color="green.700">
|
||||||
<Box>
|
Задание принято!
|
||||||
<Text fontSize="md" fontWeight="bold" color="green.700">
|
</Text>
|
||||||
Задание принято!
|
{displayedSubmission?.feedback && (
|
||||||
</Text>
|
<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>
|
||||||
|
) : 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}>
|
<Text fontSize="sm" color="gray.700" mt={1}>
|
||||||
{finalSubmission.feedback}
|
{displayedSubmission.feedback}
|
||||||
</Text>
|
</Text>
|
||||||
)}
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
</HStack>
|
</HStack>
|
||||||
<Button onClick={onTaskComplete} colorScheme="green" size="sm">
|
</Box>
|
||||||
Следующее →
|
) : null}
|
||||||
</Button>
|
</Box>
|
||||||
</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>
|
<Box>
|
||||||
<Text fontWeight="medium" mb={1} fontSize="sm">
|
<Text fontWeight="medium" mb={1} fontSize="sm">
|
||||||
|
|||||||
Reference in New Issue
Block a user