Rev 3607 | Rev 3610 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React from 'react';import { Box, Avatar, Typography, IconButton, Menu, MenuItem } from '@mui/material';import { MoreVert, Report } from '@mui/icons-material';const MessageItem = ({ message, onReport }) => {const [anchorEl, setAnchorEl] = React.useState(null);const open = Boolean(anchorEl);const handleClick = (event) => {setAnchorEl(event.currentTarget);};const handleClose = () => {setAnchorEl(null);};const handleReport = () => {if (message.url_abuse_report) {onReport({ url: message.url_abuse_report, id: message.uuid });}handleClose();};const renderMessageContent = () => {switch (message.type) {case 'text':return (<Typography variant='body2' sx={{ wordBreak: 'break-word' }}>{message.message}</Typography>);case 'image':return (<Box sx={{ maxWidth: '250px', maxHeight: '250px' }}><imgsrc={message.filename}alt='Mensaje de imagen'style={{width: '100%',height: 'auto',borderRadius: '8px',objectFit: 'cover'}}/></Box>);case 'document':return (<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}><imgsrc='/images/extension/pdf.png'alt='Documento'style={{ width: '24px', height: '24px' }}/><Typography variant='body2' component='a' href={message.filename} download>Descargar documento</Typography></Box>);default:return (<Typography variant='body2' sx={{ wordBreak: 'break-word' }}>{message.message || 'Contenido no disponible'}</Typography>);}};return (<Boxsx={{display: 'flex',justifyContent: message.side === 'right' ? 'flex-end' : 'flex-start',mb: 1,px: 1}}><Boxsx={{display: 'flex',flexDirection: 'column',maxWidth: '70%',position: 'relative'}}>{message.side === 'left' && (<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 0.5 }}><Avatarsrc={message.sender_image}alt={message.sender_name}sx={{ width: 24, height: 24 }}/><Typography variant='caption' color='text.secondary'>{message.sender_name}</Typography></Box>)}<Boxsx={{backgroundColor: message.side === 'right' ? 'primary.main' : 'grey.100',color: message.side === 'right' ? 'white' : 'text.primary',borderRadius: message.side === 'right' ? '12px 12px 4px 12px' : '12px 12px 12px 4px',padding: 1.5,position: 'relative','&:hover .message-actions': {opacity: 1}}}>{renderMessageContent()}<Boxsx={{display: 'flex',justifyContent: 'space-between',alignItems: 'center',mt: 0.5,gap: 1}}><Typography variant='caption' color='text.secondary'>{message.date}</Typography>{message.url_abuse_report && (<IconButtonsize='small'onClick={handleClick}className='message-actions'sx={{opacity: 0,transition: 'opacity 0.2s',color: 'inherit'}}><MoreVert fontSize='small' /></IconButton>)}</Box></Box></Box><MenuanchorEl={anchorEl}open={open}onClose={handleClose}anchorOrigin={{vertical: 'top',horizontal: 'right'}}transformOrigin={{vertical: 'top',horizontal: 'left'}}><MenuItem onClick={handleReport}><Report fontSize='small' sx={{ mr: 1 }} />Reportar mensaje</MenuItem></Menu></Box>);};export default MessageItem;