| 3719 |
stevensc |
1 |
import React, { useMemo, useState } from 'react';
|
|
|
2 |
|
|
|
3 |
import { Card, CardContent, CardHeader, List, Menu, SearchBar } from '@shared/components';
|
|
|
4 |
import { ConversationItem } from './ConversationItem';
|
|
|
5 |
|
|
|
6 |
export const ConversationsList = ({
|
|
|
7 |
conversations = [],
|
|
|
8 |
onSelectConversation,
|
|
|
9 |
onStartConversation
|
|
|
10 |
}) => {
|
|
|
11 |
const [search, setSearch] = useState('');
|
|
|
12 |
|
|
|
13 |
const filteredConversations = useMemo(() => {
|
|
|
14 |
return conversations.filter((conversation) =>
|
|
|
15 |
conversation.name.toLowerCase().includes(search.toLowerCase())
|
|
|
16 |
);
|
|
|
17 |
}, [conversations, search]);
|
|
|
18 |
|
|
|
19 |
return (
|
|
|
20 |
<Card>
|
|
|
21 |
<CardHeader
|
|
|
22 |
title='Conversaciones'
|
|
|
23 |
renderAction={() => (
|
|
|
24 |
<Menu>
|
|
|
25 |
<Menu.Item onClick={onStartConversation}>Iniciar conversación</Menu.Item>
|
|
|
26 |
</Menu>
|
|
|
27 |
)}
|
|
|
28 |
/>
|
|
|
29 |
<CardContent styles={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
|
|
|
30 |
<SearchBar placeholder='Buscar conversación' onChange={setSearch} />
|
|
|
31 |
<List
|
|
|
32 |
styles={{ maxHeight: '400px', overflow: 'auto' }}
|
|
|
33 |
items={filteredConversations}
|
|
|
34 |
keyExtractor={(item) => item.uuid}
|
|
|
35 |
emptyMessage='No hay conversaciones'
|
|
|
36 |
renderItem={(conversation) => (
|
|
|
37 |
<ConversationItem
|
|
|
38 |
conversation={conversation}
|
|
|
39 |
onSelectConversation={onSelectConversation}
|
|
|
40 |
/>
|
|
|
41 |
)}
|
|
|
42 |
/>
|
|
|
43 |
</CardContent>
|
|
|
44 |
</Card>
|
|
|
45 |
);
|
|
|
46 |
};
|