Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3622 stevensc 1
import React from 'react';
3610 stevensc 2
import { Box, Typography } from '@mui/material';
3599 stevensc 3
 
3623 stevensc 4
import { useMessages } from '@inmail/hooks';
3599 stevensc 5
 
3622 stevensc 6
import {
7
  Card,
8
  CardActions,
9
  CardContent,
10
  CardHeader,
11
  List,
12
  Menu,
13
  Spinner
14
} from '@shared/components';
3610 stevensc 15
import { MessageItem } from './MessageItem';
3622 stevensc 16
import { ChatForm } from '../chat';
3610 stevensc 17
 
18
export const MessagesList = ({ conversation, onDelete, onClose }) => {
3628 stevensc 19
  const { messages, loading, messagesEndRef, elementRef, sendMessage, reportMessage } =
20
    useMessages(conversation);
3599 stevensc 21
 
3622 stevensc 22
  if (!conversation) {
23
    return <Typography sx={{ textAlign: 'center' }}>Selecciona una conversación</Typography>;
24
  }
3610 stevensc 25
 
3599 stevensc 26
  return (
3605 stevensc 27
    <Card>
3610 stevensc 28
      <CardHeader
29
        title={conversation.name}
30
        renderAction={() => (
31
          <Menu>
32
            {onDelete && <Menu.Item onClick={onDelete}>Borrar convesación</Menu.Item>}
33
            <Menu.Item onClick={onClose}>Cerrar conversación</Menu.Item>
34
          </Menu>
35
        )}
36
      />
3605 stevensc 37
      <CardContent>
3610 stevensc 38
        <List
39
          items={messages}
40
          keyExtractor={(message) => message.uuid}
41
          emptyMessage='No hay mensajes en esta conversación'
42
          renderItem={(message, index) => (
43
            <Box ref={index === messages.length - 1 ? elementRef : null}>
3628 stevensc 44
              <MessageItem message={message} onReport={(uuid) => reportMessage(uuid)} />
3605 stevensc 45
            </Box>
46
          )}
3610 stevensc 47
          renderHeader={() => <div ref={messagesEndRef} />}
3611 stevensc 48
          renderFooter={() => loading && <Spinner />}
3621 stevensc 49
          style={{ flexDirection: 'column-reverse', maxHeight: '50dvh', overflow: 'auto' }}
3610 stevensc 50
        />
3605 stevensc 51
      </CardContent>
3610 stevensc 52
 
3622 stevensc 53
      <CardActions>
3628 stevensc 54
        <ChatForm onSubmit={sendMessage} />
3622 stevensc 55
      </CardActions>
3605 stevensc 56
    </Card>
3599 stevensc 57
  );
58
};