sentiment-analysis-fe / src /components /PreviousAnalysis.js
Sharathhebbar24's picture
Sentiment Analysis
0509f82
import React from 'react';
import {
Box,
Typography,
List,
ListItem,
ListItemButton,
ListItemText,
ListItemIcon,
Chip,
Divider
} from '@mui/material';
import ThumbUpIcon from '@mui/icons-material/ThumbUp';
import ThumbDownIcon from '@mui/icons-material/ThumbDown';
import RemoveIcon from '@mui/icons-material/Remove';
import HistoryIcon from '@mui/icons-material/History';
function PreviousAnalyses({ analyses, onViewAnalysis }) {
if (!analyses.length) {
return (
<Box sx={{ textAlign: 'center', py: 4 }}>
<HistoryIcon sx={{ fontSize: 40, color: 'text.secondary', mb: 2 }} />
<Typography variant="body1" color="textSecondary">
Previous analyses will appear here
</Typography>
<Typography variant="body2" color="textSecondary">
Analyze your first review to get started
</Typography>
</Box>
);
}
return (
<List sx={{ width: '100%', maxHeight: '400px', overflow: 'auto' }}>
{analyses.map((analysis, index) => {
const getSentimentIcon = (sentiment) => {
switch (sentiment) {
case 'positive': return <ThumbUpIcon sx={{ color: 'success.main' }} />;
case 'negative': return <ThumbDownIcon sx={{ color: 'secondary.main' }} />;
default: return <RemoveIcon sx={{ color: 'warning.main' }} />;
}
};
const truncateText = (text, maxLength = 50) => {
return text.length > maxLength
? `${text.substring(0, maxLength)}...`
: text;
};
console.log(analysis)
return (
<React.Fragment key={analysis.id || index}>
<ListItem disablePadding sx={{ mb: 1 }}>
<ListItemButton
sx={{
border: '1px solid',
borderColor: 'divider',
borderRadius: 1,
"&:hover": {
bgcolor: 'action.hover',
}
}}
>
<ListItemIcon>
{getSentimentIcon(analysis.sentiment)}
</ListItemIcon>
<ListItemText
primary={truncateText(analysis.text)}
secondary={
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mt: 0.5 }}>
<Chip
label={`${analysis.sentiment}`}
size="small"
sx={{
bgcolor: analysis.sentiment === 'positive' ? 'success.light' :
analysis.sentiment === 'negative' ? 'secondary.light' :
'warning.light',
color: '#fff',
fontWeight: 'medium',
fontSize: '0.7rem'
}}
/>
<Typography variant="caption">
{analysis.createdAt ? new Date(analysis.createdAt).toLocaleTimeString() : 'Just now'}
</Typography>
</Box>
}
/>
</ListItemButton>
</ListItem>
{index < analyses.length - 1 && <Divider variant="fullWidth" component="li" />}
</React.Fragment>
);
})}
</List>
);
}
export default PreviousAnalyses;