Spaces:
Runtime error
Runtime error
import React, { useState } from 'react'; | |
import { Container, Typography, Box, Paper, Divider } from '@mui/material'; | |
import ReviewInput from '../components/ReviewInput'; | |
import SentimentResult from '../components/SentimentResult'; | |
import PreviousAnalyses from '../components/PreviousAnalysis'; | |
import AboutSection from '../components/AboutSection'; | |
export default function Home() { | |
const [currentReview, setCurrentReview] = useState(''); | |
const [isLoading, setIsLoading] = useState(false); | |
const [hasError, setHasError] = useState(false); | |
const [errorMessage, setErrorMessage] = useState(''); | |
const [analysisResult, setAnalysisResult] = useState(null); | |
const [previousAnalyses, setPreviousAnalyses] = useState([]); | |
const handleViewPreviousAnalysis = (analysis) => { | |
setAnalysisResult(null); | |
setCurrentReview(analysis); | |
}; | |
const addToPreviousAnalyses = (analysis) => { | |
// Add unique ID if it doesn't exist | |
const analysisWithId = analysis.id | |
? analysis | |
: { ...analysis, id: Date.now(), createdAt: new Date() }; | |
// Add to the beginning of the array to show newest first | |
setPreviousAnalyses(prev => [analysisWithId, ...prev]); | |
}; | |
return ( | |
<Container maxWidth="lg" sx={{ py: 4 }}> | |
<Box mb={4} textAlign="center"> | |
<Typography variant="h1" component="h1" gutterBottom> | |
Movie Review Sentiment Analysis | |
</Typography> | |
<Typography variant="h6" color="textSecondary"> | |
Enter a movie review to analyze its sentiment using AI | |
</Typography> | |
</Box> | |
<AboutSection /> | |
<Box sx={{ display: 'flex', flexDirection: { xs: 'column', md: 'row' }, gap: 3 }}> | |
<Box sx={{ flex: { xs: '1', md: '2' } }}> | |
<Paper elevation={2} sx={{ p: 3, mb: { xs: 3, md: 0 } }}> | |
{!analysisResult ? ( | |
<ReviewInput | |
currentReview={currentReview} | |
setCurrentReview={setCurrentReview} | |
isLoading={isLoading} | |
setIsLoading={setIsLoading} | |
setHasError={setHasError} | |
setErrorMessage={setErrorMessage} | |
setAnalysisResult={setAnalysisResult} | |
addToPreviousAnalyses={addToPreviousAnalyses} | |
/> | |
) : ( | |
<SentimentResult | |
result={analysisResult} | |
onNewAnalysis={() => setAnalysisResult(null)} | |
currentReview={currentReview} | |
/> | |
)} | |
{hasError && ( | |
<Box sx={{ mt: 2, p: 2, bgcolor: 'error.light', color: 'error.contrastText', borderRadius: 1 }}> | |
<Typography variant="body1"> | |
{errorMessage || 'An error occurred while analyzing the review. Please try again.'} | |
</Typography> | |
</Box> | |
)} | |
</Paper> | |
</Box> | |
<Box sx={{ flex: { xs: '1', md: '1' } }}> | |
<Paper elevation={2} sx={{ p: 3, mb: { xs: 3, md: 0 } }}> | |
<Typography variant="h2" component="h2" gutterBottom> | |
Previous Analyses | |
</Typography> | |
<Divider sx={{ mb: 2 }} /> | |
<PreviousAnalyses | |
analyses={previousAnalyses} | |
onViewAnalysis={handleViewPreviousAnalysis} | |
/> | |
</Paper> | |
</Box> | |
</Box> | |
</Container> | |
); | |
} |