Proyectos de Subversion LeadersLinked - SPA

Rev

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>
3634 stevensc 32
            {conversation.delete_url && (
33
              <Menu.Item onClick={() => onDelete(conversation.delete_url)}>
34
                Borrar convesación
35
              </Menu.Item>
36
            )}
3610 stevensc 37
            <Menu.Item onClick={onClose}>Cerrar conversación</Menu.Item>
38
          </Menu>
39
        )}
40
      />
3605 stevensc 41
      <CardContent>
3610 stevensc 42
        <List
43
          items={messages}
44
          keyExtractor={(message) => message.uuid}
45
          emptyMessage='No hay mensajes en esta conversación'
46
          renderItem={(message, index) => (
47
            <Box ref={index === messages.length - 1 ? elementRef : null}>
3634 stevensc 48
              <MessageItem message={message} onReport={reportMessage} />
3605 stevensc 49
            </Box>
50
          )}
3610 stevensc 51
          renderHeader={() => <div ref={messagesEndRef} />}
3611 stevensc 52
          renderFooter={() => loading && <Spinner />}
3621 stevensc 53
          style={{ flexDirection: 'column-reverse', maxHeight: '50dvh', overflow: 'auto' }}
3610 stevensc 54
        />
3605 stevensc 55
      </CardContent>
3610 stevensc 56
 
3622 stevensc 57
      <CardActions>
3628 stevensc 58
        <ChatForm onSubmit={sendMessage} />
3622 stevensc 59
      </CardActions>
3605 stevensc 60
    </Card>
3599 stevensc 61
  );
62
};