Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3599 stevensc 1
import React, { useEffect, useRef } from 'react';
3610 stevensc 2
import { Box, Typography } from '@mui/material';
3599 stevensc 3
 
3610 stevensc 4
import { usePagination } from '@shared/hooks';
3599 stevensc 5
 
3610 stevensc 6
import { Card, CardContent, CardHeader, List, Menu, Spinner } from '@shared/components';
7
import { MessageItem } from './MessageItem';
8
 
9
export const MessagesList = ({ conversation, onDelete, onClose }) => {
3599 stevensc 10
  const messagesEndRef = useRef(null);
11
 
3610 stevensc 12
  const {
13
    items: messages,
14
    loading,
15
    elementRef,
16
    resetPagination
17
  } = usePagination(conversation?.messages_url);
18
 
19
  const sendMessage = (message) => {
20
    // TODO: Implementar envío de mensaje
21
  };
22
 
23
  const handleReport = (message) => {
24
    // TODO: Implementar reporte de mensaje
25
  };
26
 
3599 stevensc 27
  useEffect(() => {
3603 stevensc 28
    if (messages.length > 0) {
29
      messagesEndRef.current?.scrollIntoView({
30
        behavior: 'smooth',
31
        block: 'end'
32
      });
33
    }
34
  }, [messages.length]);
3599 stevensc 35
 
36
  if (!messages.length && !loading) {
37
    return (
3610 stevensc 38
      <Typography sx={{ textAlign: 'center' }}>No hay mensajes en esta conversación</Typography>
3599 stevensc 39
    );
40
  }
41
 
42
  return (
3605 stevensc 43
    <Card>
3610 stevensc 44
      <CardHeader
45
        title={conversation.name}
46
        renderAction={() => (
47
          <Menu>
48
            {onDelete && <Menu.Item onClick={onDelete}>Borrar convesación</Menu.Item>}
49
            <Menu.Item onClick={onClose}>Cerrar conversación</Menu.Item>
50
          </Menu>
51
        )}
52
      />
3605 stevensc 53
      <CardContent>
3610 stevensc 54
        <List
55
          items={messages}
56
          keyExtractor={(message) => message.uuid}
57
          emptyMessage='No hay mensajes en esta conversación'
58
          renderItem={(message, index) => (
59
            <Box ref={index === messages.length - 1 ? elementRef : null}>
60
              <MessageItem message={message} onReport={handleReport} />
3605 stevensc 61
            </Box>
62
          )}
3610 stevensc 63
          renderHeader={() => <div ref={messagesEndRef} />}
3611 stevensc 64
          renderFooter={() => loading && <Spinner />}
3621 stevensc 65
          style={{ flexDirection: 'column-reverse', maxHeight: '50dvh', overflow: 'auto' }}
3610 stevensc 66
        />
3605 stevensc 67
      </CardContent>
3610 stevensc 68
 
69
      {/* <Chat.SubmitForm
70
        sendUrl={conversation.send_link}
71
        uploadUrl={conversation.send_link}
72
        onSubmit={() => scrollToBottom(messagesList)}
73
      /> */}
3605 stevensc 74
    </Card>
3599 stevensc 75
  );
76
};