import { Container, CssBaseline, ThemeProvider, createTheme, Button, Box, Typography, Alert } from '@mui/material'; import Header from './components/Header'; import DocumentInput from './components/DocumentInput'; import QuizGenerator from './components/QuizGenerator'; import ProblemAnswer from './components/ProblemAnswer'; import { useState } from 'react'; import { Problem } from './types/Problem'; const theme = createTheme({ palette: { primary: { main: '#1976d2', }, background: { default: '#f5f5f5', }, }, }); interface ProblemWithFeedback extends Problem { feedback?: string; } function App() { const [problems, setProblems] = useState([]); const [quizTopic, setQuizTopic] = useState(''); const [error, setError] = useState(null); const handleProblemsGenerated = (newProblems: string[], query: string) => { const problemObjects = newProblems.map(question => ({ question })); setProblems(problemObjects); setQuizTopic(query); }; const handleAnswerChange = (index: number, answer: string) => { setProblems(prevProblems => { const newProblems = [...prevProblems]; newProblems[index] = { ...newProblems[index], userAnswer: answer }; return newProblems; }); }; const handleSubmit = async () => { try { setError(null); // Validate that all problems have answers const unansweredProblems = problems.some(p => !p.userAnswer); if (unansweredProblems) { setError('Please answer all questions before submitting'); return; } const response = await fetch('/api/feedback', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ user_query: quizTopic, problems: problems.map(p => p.question), user_answers: problems.map(p => p.userAnswer as string) // We can safely cast since we validated above }) }); if (!response.ok) { const errorData = await response.json().catch(() => null); throw new Error(errorData?.detail || 'Failed to submit answers'); } const data = await response.json(); setProblems(prevProblems => prevProblems.map((problem, index) => ({ ...problem, feedback: data.feedback[index] })) ); } catch (error) { setError(error instanceof Error ? error.message : 'An error occurred'); } }; return (
{error && ( {error} )} {problems.map((problem, index) => ( {problem.feedback && ( Feedback: {problem.feedback} )} ))} {problems.length > 0 && ( )} ); } export default App;