|
import { TextField, Button, Box, CircularProgress } from '@mui/material'; |
|
import { useState } from 'react'; |
|
|
|
interface QuizGeneratorProps { |
|
onProblemsGenerated: (problems: string[], query: string) => void; |
|
} |
|
|
|
function QuizGenerator({ onProblemsGenerated }: QuizGeneratorProps) { |
|
const [query, setQuery] = useState(''); |
|
const [isLoading, setIsLoading] = useState(false); |
|
|
|
const handleGenerate = async () => { |
|
try { |
|
setIsLoading(true); |
|
const response = await fetch('/api/problems/', { |
|
method: 'POST', |
|
headers: { |
|
'Content-Type': 'application/json', |
|
}, |
|
body: JSON.stringify({ user_query: query }), |
|
}); |
|
|
|
if (!response.ok) { |
|
throw new Error('Failed to generate problems'); |
|
} |
|
|
|
const data = await response.json(); |
|
onProblemsGenerated(data.Problems, query); |
|
setQuery(''); |
|
} catch (error) { |
|
console.error('Error:', error); |
|
} finally { |
|
setIsLoading(false); |
|
} |
|
}; |
|
|
|
return ( |
|
<Box sx={{ mb: 4, display: 'flex', gap: 2 }}> |
|
<TextField |
|
fullWidth |
|
label="Quiz focus?" |
|
value={query} |
|
onChange={(e) => setQuery(e.target.value)} |
|
disabled={isLoading} |
|
/> |
|
<Button |
|
variant="contained" |
|
onClick={handleGenerate} |
|
disabled={isLoading} |
|
startIcon={isLoading ? <CircularProgress size={20} color="inherit" /> : null} |
|
> |
|
{isLoading ? 'Generating...' : 'Generate'} |
|
</Button> |
|
</Box> |
|
); |
|
} |
|
|
|
export default QuizGenerator; |