Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3623 | Rev 3628 | 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 }) => {
3622 stevensc 19
  const { messages, loading, messagesEndRef, elementRef, sendMessage } = useMessages(
20
    conversation?.messages_url
21
  );
3599 stevensc 22
 
3622 stevensc 23
  if (!conversation) {
24
    return <Typography sx={{ textAlign: 'center' }}>Selecciona una conversación</Typography>;
25
  }
3610 stevensc 26
 
3599 stevensc 27
  if (!messages.length && !loading) {
28
    return (
3610 stevensc 29
      <Typography sx={{ textAlign: 'center' }}>No hay mensajes en esta conversación</Typography>
3599 stevensc 30
    );
31
  }
32
 
33
  return (
3605 stevensc 34
    <Card>
3610 stevensc 35
      <CardHeader
36
        title={conversation.name}
37
        renderAction={() => (
38
          <Menu>
39
            {onDelete && <Menu.Item onClick={onDelete}>Borrar convesación</Menu.Item>}
40
            <Menu.Item onClick={onClose}>Cerrar conversación</Menu.Item>
41
          </Menu>
42
        )}
43
      />
3605 stevensc 44
      <CardContent>
3610 stevensc 45
        <List
46
          items={messages}
47
          keyExtractor={(message) => message.uuid}
48
          emptyMessage='No hay mensajes en esta conversación'
49
          renderItem={(message, index) => (
50
            <Box ref={index === messages.length - 1 ? elementRef : null}>
3622 stevensc 51
              <MessageItem message={message} />
3605 stevensc 52
            </Box>
53
          )}
3610 stevensc 54
          renderHeader={() => <div ref={messagesEndRef} />}
3611 stevensc 55
          renderFooter={() => loading && <Spinner />}
3621 stevensc 56
          style={{ flexDirection: 'column-reverse', maxHeight: '50dvh', overflow: 'auto' }}
3610 stevensc 57
        />
3605 stevensc 58
      </CardContent>
3610 stevensc 59
 
3622 stevensc 60
      <CardActions>
3625 stevensc 61
        <ChatForm onSubmit={(message) => sendMessage(conversation?.save_url, message)} />
3622 stevensc 62
      </CardActions>
3605 stevensc 63
    </Card>
3599 stevensc 64
  );
65
};