Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3634 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

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