blob: 383395692899c069add92c711c2f187f03570e77 [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';
Larbi Gharibe9af9732021-03-31 15:08:01 +010014
Adrien Béraud6c934962021-06-07 10:13:26 -040015const Messenger = (props) => {
Adrien Béraud4e287b92021-04-24 16:15:56 -040016 const [conversations, setConversations] = useState(undefined)
Adrien Béraudabba2e52021-04-24 21:39:56 -040017 const [searchQuery, setSearchQuery] = useState('')
Adrien Béraud4e287b92021-04-24 16:15:56 -040018 const [searchResult, setSearchResults] = useState(undefined)
Larbi Gharibe9af9732021-03-31 15:08:01 +010019
Adrien Béraud4e287b92021-04-24 16:15:56 -040020 const params = useParams()
21 const accountId = props.accountId || params.accountId
22 const conversationId = props.conversationId || params.conversationId
23 const contactId = props.contactId || params.contactId
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040024
Adrien Béraud4e287b92021-04-24 16:15:56 -040025 useEffect(() => {
26 const controller = new AbortController()
27 authManager.fetch(`/api/accounts/${accountId}/conversations`, {signal: controller.signal})
28 .then(res => res.json())
29 .then(result => {
30 console.log(result)
31 setConversations(Object.values(result).map(c => Conversation.from(accountId, c)))
32 })
33 return () => controller.abort()
34 }, [accountId])
Adrien Béraud995e8022021-04-08 13:46:51 -040035
Adrien Béraudabba2e52021-04-24 21:39:56 -040036 useEffect(() => {
37 if (!searchQuery)
38 return
39 const controller = new AbortController()
40 authManager.fetch(`/api/accounts/${accountId}/ns/name/${searchQuery}`, {signal: controller.signal})
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040041 .then(response => {
42 if (response.status === 200) {
43 return response.json()
44 } else {
45 throw new Error(response.status)
46 }
47 }).then(response => {
48 console.log(response)
49 const contact = new Contact(response.address)
50 contact.setRegisteredName(response.name)
Adrien Béraud4e287b92021-04-24 16:15:56 -040051 setSearchResults(contact ? Conversation.fromSingleContact(accountId, contact) : undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040052 }).catch(e => {
Adrien Béraud4e287b92021-04-24 16:15:56 -040053 setSearchResults(undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040054 })
Adrien Béraudabba2e52021-04-24 21:39:56 -040055 return () => controller.abort()
56 }, [accountId, searchQuery])
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040057
Adrien Béraud6c934962021-06-07 10:13:26 -040058 console.log("Messenger render")
Adrien Béraud4e287b92021-04-24 16:15:56 -040059 return (
60 <div className="app" >
61 <Header />
Adrien Béraudabba2e52021-04-24 21:39:56 -040062 <NewContactForm onChange={setSearchQuery} />
Adrien Béraud4e287b92021-04-24 16:15:56 -040063 {conversations ?
64 <ConversationList search={searchResult} conversations={conversations} accountId={accountId} /> :
65 <div className="rooms-list"><LoadingPage /></div>}
Adrien Béraud4e287b92021-04-24 16:15:56 -040066 {conversationId && <ConversationView accountId={accountId} conversationId={conversationId} />}
67 {contactId && <AddContactPage accountId={accountId} contactId={contactId} />}
68 </div>
69 )
Larbi Gharibe9af9732021-03-31 15:08:01 +010070}
71
Adrien Béraud6c934962021-06-07 10:13:26 -040072export default Messenger