blob: f8d59076e0c4545d4d43de6dd2289496c5a6eb43 [file] [log] [blame]
simond47ef9e2022-09-28 22:24:28 -04001import { useEffect, useState } from 'react';
2import Header from '../components/Header';
3import NewContactForm from '../components/NewContactForm';
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04004
Adrien Béraud6ecaa402021-04-06 17:37:25 -04005//import Sound from 'react-sound';
Adrien Béraud995e8022021-04-08 13:46:51 -04006import ConversationList from '../components/ConversationList';
simond47ef9e2022-09-28 22:24:28 -04007import authManager from '../AuthManager';
8import Conversation from '../../../model/Conversation';
9import Contact from '../../../model/Contact';
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040010import ConversationView from '../components/ConversationView';
11import AddContactPage from './addContactPage.jsx';
Adrien Béraud150b4782021-04-21 19:40:59 -040012import LoadingPage from '../components/loading';
Adrien Béraud4e287b92021-04-24 16:15:56 -040013import { useParams } from 'react-router';
idillonbef18a52022-09-01 01:51:40 -040014import { Stack } from '@mui/material';
ervinanoh34eb9472022-09-13 04:20:28 -040015import { useAppSelector } from '../../redux/hooks';
16
Adrien Béraud6c934962021-06-07 10:13:26 -040017const Messenger = (props) => {
ervinanoh34eb9472022-09-13 04:20:28 -040018 const { refresh } = useAppSelector((state) => state.app);
19
simond47ef9e2022-09-28 22:24:28 -040020 const [conversations, setConversations] = useState(undefined);
21 const [searchQuery, setSearchQuery] = useState('');
22 const [searchResult, setSearchResults] = useState(undefined);
Larbi Gharibe9af9732021-03-31 15:08:01 +010023
simond47ef9e2022-09-28 22:24:28 -040024 const params = useParams();
25 const accountId = props.accountId || params.accountId;
26 const conversationId = props.conversationId || params.conversationId;
27 const contactId = props.contactId || params.contactId;
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040028
Adrien Béraud4e287b92021-04-24 16:15:56 -040029 useEffect(() => {
simond47ef9e2022-09-28 22:24:28 -040030 console.log('REFRESH CONVERSATIONS FROM MESSENGER');
31 const controller = new AbortController();
32 authManager
33 .fetch(`/api/accounts/${accountId}/conversations`, { signal: controller.signal })
34 .then((res) => res.json())
35 .then((result) => {
36 console.log(result);
37 setConversations(Object.values(result).map((c) => Conversation.from(accountId, c)));
38 });
ervinanoh34eb9472022-09-13 04:20:28 -040039 // return () => controller.abort()
simond47ef9e2022-09-28 22:24:28 -040040 }, [accountId, refresh]);
Adrien Béraud995e8022021-04-08 13:46:51 -040041
Adrien Béraudabba2e52021-04-24 21:39:56 -040042 useEffect(() => {
simond47ef9e2022-09-28 22:24:28 -040043 if (!searchQuery) return;
44 const controller = new AbortController();
45 authManager
46 .fetch(`/api/accounts/${accountId}/ns/name/${searchQuery}`, { signal: controller.signal })
47 .then((response) => {
48 if (response.status === 200) {
49 return response.json();
50 } else {
51 throw new Error(response.status);
52 }
53 })
54 .then((response) => {
55 console.log(response);
56 const contact = new Contact(response.address);
57 contact.setRegisteredName(response.name);
58 setSearchResults(contact ? Conversation.fromSingleContact(accountId, contact) : undefined);
59 })
60 .catch((e) => {
61 setSearchResults(undefined);
62 });
63 // return () => controller.abort() // crash on React18
64 }, [accountId, searchQuery]);
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040065
simond47ef9e2022-09-28 22:24:28 -040066 console.log('Messenger render');
Adrien Béraud4e287b92021-04-24 16:15:56 -040067 return (
simond47ef9e2022-09-28 22:24:28 -040068 <Stack direction="row" height="100vh" width="100vw">
69 <Stack flexGrow={0} flexShrink={0} overflow="auto">
idillonbef18a52022-09-01 01:51:40 -040070 <Header />
71 <NewContactForm onChange={setSearchQuery} />
72 {contactId && <AddContactPage accountId={accountId} contactId={contactId} />}
simond47ef9e2022-09-28 22:24:28 -040073 {conversations ? (
74 <ConversationList search={searchResult} conversations={conversations} accountId={accountId} />
75 ) : (
76 <div className="rooms-list">
77 <LoadingPage />
78 </div>
79 )}
idillonbef18a52022-09-01 01:51:40 -040080 </Stack>
simond47ef9e2022-09-28 22:24:28 -040081 <Stack flexGrow={1}>
idillonbef18a52022-09-01 01:51:40 -040082 {conversationId && <ConversationView accountId={accountId} conversationId={conversationId} />}
83 </Stack>
84 </Stack>
simond47ef9e2022-09-28 22:24:28 -040085 );
86};
Larbi Gharibe9af9732021-03-31 15:08:01 +010087
simond47ef9e2022-09-28 22:24:28 -040088export default Messenger;