blob: 48edb5da512e2519336e6f803714655441c3bf20 [file] [log] [blame]
Adrien Béraud4e287b92021-04-24 16:15:56 -04001import React, { useEffect, useState } from 'react';
Larbi Gharibe9af9732021-03-31 15:08:01 +01002import Header from '../components/Header'
Larbi Gharibe9af9732021-03-31 15:08:01 +01003import 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';
Adrien Béraud995e8022021-04-08 13:46:51 -04007import authManager from '../AuthManager'
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04008import Conversation from '../../../model/Conversation'
9import Contact from '../../../model/Contact'
10import 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';
Larbi Gharibe9af9732021-03-31 15:08:01 +010015
Adrien Béraud6c934962021-06-07 10:13:26 -040016const Messenger = (props) => {
Adrien Béraud4e287b92021-04-24 16:15:56 -040017 const [conversations, setConversations] = useState(undefined)
Adrien Béraudabba2e52021-04-24 21:39:56 -040018 const [searchQuery, setSearchQuery] = useState('')
Adrien Béraud4e287b92021-04-24 16:15:56 -040019 const [searchResult, setSearchResults] = useState(undefined)
Larbi Gharibe9af9732021-03-31 15:08:01 +010020
Adrien Béraud4e287b92021-04-24 16:15:56 -040021 const params = useParams()
22 const accountId = props.accountId || params.accountId
23 const conversationId = props.conversationId || params.conversationId
24 const contactId = props.contactId || params.contactId
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040025
Adrien Béraud4e287b92021-04-24 16:15:56 -040026 useEffect(() => {
27 const controller = new AbortController()
28 authManager.fetch(`/api/accounts/${accountId}/conversations`, {signal: controller.signal})
29 .then(res => res.json())
30 .then(result => {
31 console.log(result)
32 setConversations(Object.values(result).map(c => Conversation.from(accountId, c)))
33 })
34 return () => controller.abort()
35 }, [accountId])
Adrien Béraud995e8022021-04-08 13:46:51 -040036
Adrien Béraudabba2e52021-04-24 21:39:56 -040037 useEffect(() => {
38 if (!searchQuery)
39 return
40 const controller = new AbortController()
41 authManager.fetch(`/api/accounts/${accountId}/ns/name/${searchQuery}`, {signal: controller.signal})
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040042 .then(response => {
43 if (response.status === 200) {
44 return response.json()
45 } else {
46 throw new Error(response.status)
47 }
48 }).then(response => {
49 console.log(response)
50 const contact = new Contact(response.address)
51 contact.setRegisteredName(response.name)
Adrien Béraud4e287b92021-04-24 16:15:56 -040052 setSearchResults(contact ? Conversation.fromSingleContact(accountId, contact) : undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040053 }).catch(e => {
Adrien Béraud4e287b92021-04-24 16:15:56 -040054 setSearchResults(undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040055 })
Adrien Béraudabba2e52021-04-24 21:39:56 -040056 return () => controller.abort()
57 }, [accountId, searchQuery])
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040058
Adrien Béraud6c934962021-06-07 10:13:26 -040059 console.log("Messenger render")
Adrien Béraud4e287b92021-04-24 16:15:56 -040060 return (
idillonbef18a52022-09-01 01:51:40 -040061 <Stack
62 direction="row"
63 height="100vh"
64 width="100vw"
65 >
66 <Stack
67 flexGrow={0}
68 flexShrink={0}
69 overflow="auto"
70 >
71 <Header />
72 <NewContactForm onChange={setSearchQuery} />
73 {contactId && <AddContactPage accountId={accountId} contactId={contactId} />}
74 {conversations ?
75 <ConversationList search={searchResult} conversations={conversations} accountId={accountId} /> :
76 <div className="rooms-list"><LoadingPage /></div>
77 }
78 </Stack>
79 <Stack
80 flexGrow={1}
81 >
82 {conversationId && <ConversationView accountId={accountId} conversationId={conversationId} />}
83 </Stack>
84 </Stack>
Adrien Béraud4e287b92021-04-24 16:15:56 -040085 )
Larbi Gharibe9af9732021-03-31 15:08:01 +010086}
87
Adrien Béraud6c934962021-06-07 10:13:26 -040088export default Messenger