Rev 3601 | Rev 3604 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useRef } from 'react';import { Box } from '@mui/material';import { Inbox } from '@mui/icons-material';import { useNearScreen } from '@hooks';import { Spinner } from '@shared/components';import EmptySection from '@components/UI/EmptySection';import MessageItem from './MessageItem';const MessagesList = ({ messages = [], onLoadMore, loading = false, hasMore = false }) => {const [isIntercepting, ref] = useNearScreen({once: false,rootMargin: '200px'});const messagesEndRef = useRef(null);useEffect(() => {if (isIntercepting && hasMore && !loading && onLoadMore) {onLoadMore();}}, [isIntercepting, hasMore, loading, onLoadMore]);useEffect(() => {if (messages.length > 0) {messagesEndRef.current?.scrollIntoView({behavior: 'smooth',block: 'end'});}}, [messages.length]);const handleReport = ({ url, id }) => {// Aquí puedes implementar la lógica de reporteconsole.log('Reportar mensaje:', { url, id });};if (!messages.length && !loading) {return (<EmptySectionIcon={<Inbox />}message='No hay mensajes en esta conversación'align='center'/>);}return (<Boxsx={{display: 'flex',flexDirection: 'column',height: '100%',overflow: 'hidden',bgcolor: 'background.paper'}}><Boxsx={{flex: 1,overflow: 'auto',display: 'flex',flexDirection: 'column-reverse',p: 1}}><div ref={messagesEndRef} />{messages.map((message) => (<MessageItem key={message.uuid} message={message} onReport={handleReport} />))}{hasMore && (<Boxref={ref}sx={{display: 'flex',justifyContent: 'center',alignItems: 'center',py: 2,minHeight: '60px'}}>{loading ? <Spinner size='small' /> : <Box sx={{ height: '20px' }} />}</Box>)}{!hasMore && messages.length > 0 && (<Boxsx={{textAlign: 'center',py: 2,color: 'text.secondary',fontSize: '0.875rem'}}>No hay más mensajes</Box>)}</Box></Box>);};export default MessagesList;