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,16 +26,31 @@ 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}>
<Box borderWidth="1px" borderRadius="md" borderColor="gray.200" p={4} bg="white" shadow="sm">
@@ -212,8 +227,9 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
</Box>
</Box>
{/* Статус проверки */}
{queueStatus && !finalSubmission && (
{/* Статус проверки и результат - фиксированное место */}
<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" />
@@ -223,10 +239,7 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
</Text>
</HStack>
</Box>
)}
{/* Результат проверки - успех */}
{isAccepted && (
) : 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}>
@@ -235,9 +248,9 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
<Text fontSize="md" fontWeight="bold" color="green.700">
Задание принято!
</Text>
{finalSubmission?.feedback && (
{displayedSubmission?.feedback && (
<Text fontSize="sm" color="gray.700" mt={1}>
{finalSubmission.feedback}
{displayedSubmission.feedback}
</Text>
)}
</Box>
@@ -247,31 +260,29 @@ export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
</Button>
</HStack>
</Box>
)}
{/* Результат проверки - требуется доработка */}
{needsRevision && (
) : 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">
(попытка {finalSubmission?.attemptNumber})
(попытка {displayedSubmission?.attemptNumber})
</Text>
</HStack>
{finalSubmission?.feedback && (
{displayedSubmission?.feedback && (
<Text fontSize="sm" color="gray.700" mt={1}>
{finalSubmission.feedback}
{displayedSubmission.feedback}
</Text>
)}
</Box>
</HStack>
</Box>
)}
) : null}
</Box>
<Box>
<Text fontWeight="medium" mb={1} fontSize="sm">