challenge-pl/src/components/personal/TaskWorkspace.tsx
Primakov Alexandr Alexandrovich ceb8910dcb
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit
Remove onTaskComplete call from TaskWorkspace effect to streamline final submission handling.
2025-11-04 11:32:34 +03:00

82 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useEffect } from 'react'
import {
Box,
Button,
HStack,
Text,
Textarea,
VStack,
} from '@chakra-ui/react'
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
onTaskComplete?: () => void
}
export const TaskWorkspace = ({ task, onTaskComplete }: TaskWorkspaceProps) => {
const { refreshStats } = useChallenge()
const { result, setResult, submit, reset, queueStatus, finalSubmission, isSubmitting } = useSubmission({
taskId: task.id,
})
const descriptionBg = 'gray.50'
useEffect(() => {
if (finalSubmission) {
refreshStats()
}
}, [finalSubmission, refreshStats])
if (queueStatus) {
return <CheckStatusView status={queueStatus} />
}
if (finalSubmission) {
return (
<ResultView submission={finalSubmission} onRetry={reset} onNext={onTaskComplete} />
)
}
return (
<VStack align="stretch" spacing={4}>
<Box borderWidth="1px" borderRadius="lg" borderColor="gray.200" p={4} bg={descriptionBg}>
<Text fontSize="lg" fontWeight="semibold" mb={2}>
{task.title}
</Text>
<Text whiteSpace="pre-line" color="gray.700">
{task.description}
</Text>
</Box>
<Box>
<Text fontWeight="medium" mb={2}>
Ваше решение
</Text>
<Textarea
value={result}
onChange={(event) => setResult(event.target.value)}
placeholder="Напишите ваше решение..."
rows={14}
bg="white"
/>
</Box>
<HStack justify="flex-end" spacing={3}>
<Button onClick={reset} variant="ghost">
Сбросить
</Button>
<Button onClick={submit} colorScheme="teal" isLoading={isSubmitting} isDisabled={!result.trim()}>
Отправить на проверку
</Button>
</HStack>
</VStack>
)
}