Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3628 | Rev 3633 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React from 'react';
import { Box, Typography } from '@mui/material';

import { useMessages } from '@inmail/hooks';

import {
  Card,
  CardActions,
  CardContent,
  CardHeader,
  List,
  Menu,
  Spinner
} from '@shared/components';
import { MessageItem } from './MessageItem';
import { ChatForm } from '../chat';

export const MessagesList = ({ conversation, onDelete, onClose }) => {
  const { messages, loading, messagesEndRef, elementRef, sendMessage, reportMessage } =
    useMessages(conversation);

  if (!conversation) {
    return <Typography sx={{ textAlign: 'center' }}>Selecciona una conversación</Typography>;
  }

  return (
    <Card>
      <CardHeader
        title={conversation.name}
        renderAction={() => (
          <Menu>
            {onDelete && <Menu.Item onClick={onDelete}>Borrar convesación</Menu.Item>}
            <Menu.Item onClick={onClose}>Cerrar conversación</Menu.Item>
          </Menu>
        )}
      />
      <CardContent>
        <List
          items={messages}
          keyExtractor={(message) => message.uuid}
          emptyMessage='No hay mensajes en esta conversación'
          renderItem={(message, index) => (
            <Box ref={index === messages.length - 1 ? elementRef : null}>
              <MessageItem message={message} onReport={(uuid) => reportMessage(uuid)} />
            </Box>
          )}
          renderHeader={() => <div ref={messagesEndRef} />}
          renderFooter={() => loading && <Spinner />}
          style={{ flexDirection: 'column-reverse', maxHeight: '50dvh', overflow: 'auto' }}
        />
      </CardContent>

      <CardActions>
        <ChatForm onSubmit={sendMessage} />
      </CardActions>
    </Card>
  );
};