import React, { useState, useRef } from 'react'; import { useParams } from 'react-router-dom'; import { Task, TaskType, Solution } from '@/shared/types/task'; import { useQuery } from '@tanstack/react-query'; import { getTaskSolutionHistory } from '@/shared/api/session'; import SolutionStatus from './components/SolutionStatus'; import InputSolution from './components/InputSolution'; import FileSolution from './components/FileSolution'; import CodeSolution from './components/CodeSolution'; import ActionButtons from './components/ActionButtons'; import SolutionHistorySheet from './components/SolutionHistorySheet'; interface TaskSolutionProps { task: Task; answer: string; setAnswer: (value: string) => void; selectedFile: File | null; setSelectedFile: (file: File | null) => void; onSubmit: () => void; } const TaskSolution: React.FC = ({ task, answer, setAnswer, selectedFile, setSelectedFile, onSubmit, }) => { const fileInputRef = useRef(null); const [isHistoryOpen, setIsHistoryOpen] = useState(false); const [selectedSolutionUrl, setSelectedSolutionUrl] = useState(null); const { id: competitionId } = useParams<{ id: string }>(); const solutionsQuery = useQuery({ queryKey: ['solutionHistory', competitionId, task.id], queryFn: () => getTaskSolutionHistory(competitionId || '', task.id), enabled: !!(competitionId && task.id), }); const solutionHistory = solutionsQuery.data || []; const handleOpenHistory = () => { setIsHistoryOpen(true); }; const latestSolution = solutionHistory && solutionHistory.length > 0 ? solutionHistory[0] : null; const handleSolutionSelect = async (solution: Solution) => { if (!solution.content) return; try { if (task.type === TaskType.FILE) { // For file tasks, just store the URL setSelectedFile(null); // Clear any selected file first setSelectedSolutionUrl(solution.content); } else { // For INPUT and CODE tasks, fetch the content and set as answer const response = await fetch(solution.content); if (!response.ok) { throw new Error(`Failed to fetch solution content: ${response.status}`); } const text = await response.text(); setAnswer(text); } } catch (error) { console.error('Error loading solution content:', error); } }; // Function to clear the existing file URL const handleClearExistingFile = () => { setSelectedSolutionUrl(null); }; return (
{latestSolution ? ( ) : (
Решение еще не отправлено
)} {task.type === TaskType.INPUT && ( )} {task.type === TaskType.FILE && ( )} {task.type === TaskType.CODE && ( )}
); }; export default TaskSolution;