blob: cff4f6bab3d2de5eb4d5edb470994a274abb4279 [file] [log] [blame]
idillon07d31cc2022-12-06 22:40:14 -05001/*
2 * Copyright (C) 2022 Savoir-faire Linux Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation; either version 3 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Affero General Public License for more details.
13 *
14 * You should have received a copy of the GNU Affero General Public
15 * License along with this program. If not, see
16 * <https://www.gnu.org/licenses/>.
17 */
18
19import { Dialog, DialogProps, List, ListItem, ListItemAvatar, ListItemText } from '@mui/material';
20
21import { Contact } from '../models/contact';
22import AddContactPage from '../pages/AddContactPage';
23import ConversationAvatar from './ConversationAvatar';
24import { useDialogHandler } from './Dialog';
25
26type ContactSearchResultListProps = {
27 contacts: Contact[];
28};
29
30export default ({ contacts }: ContactSearchResultListProps) => {
31 return (
32 <List>
33 {contacts?.map((contact) => (
34 <ContactSearchResultListItem key={contact.uri} contact={contact} />
35 ))}
36 </List>
37 );
38};
39
40type ContactSearchResultListItemProps = {
41 contact: Contact;
42};
43
44const ContactSearchResultListItem = ({ contact }: ContactSearchResultListItemProps) => {
45 const dialogHandler = useDialogHandler();
46
47 return (
48 <>
49 <AddContactDialog {...dialogHandler.props} contactId={contact.uri} />
50 <ListItem
51 button
52 alignItems="flex-start"
53 key={contact.uri}
54 onClick={() => {
55 dialogHandler.openDialog();
56 }}
57 >
58 <ListItemAvatar>
59 <ConversationAvatar />
60 </ListItemAvatar>
61 <ListItemText primary={contact.getDisplayName()} secondary={contact.uri} />
62 </ListItem>
63 </>
64 );
65};
66
67type AddContactDialogProps = DialogProps & {
68 contactId: string;
69};
70
71const AddContactDialog = ({ contactId, ...props }: AddContactDialogProps) => {
72 return (
73 <Dialog {...props}>
74 <AddContactPage contactId={contactId} />
75 </Dialog>
76 );
77};