Sharathhebbar24's picture
Sentiment Analysis
0509f82
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>
);
}