blob: 5b4071822e9950c417a2b22720d706779e7f21a1 [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';
Larbi Gharibe9af9732021-03-31 15:08:01 +01006import io from "socket.io-client";
Adrien Béraud995e8022021-04-08 13:46:51 -04007import ConversationList from '../components/ConversationList';
Adrien Béraud6ecaa402021-04-06 17:37:25 -04008//const socket = io.connect('http://localhost:3000');
Adrien Béraud995e8022021-04-08 13:46:51 -04009import authManager from '../AuthManager'
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040010import Conversation from '../../../model/Conversation'
11import Contact from '../../../model/Contact'
12import ConversationView from '../components/ConversationView';
13import AddContactPage from './addContactPage.jsx';
Adrien Béraud150b4782021-04-21 19:40:59 -040014import LoadingPage from '../components/loading';
Adrien Béraud4e287b92021-04-24 16:15:56 -040015import { useParams } from 'react-router';
Larbi Gharibe9af9732021-03-31 15:08:01 +010016
Adrien Béraud4e287b92021-04-24 16:15:56 -040017const JamiMessenger = (props) => {
18 const [conversations, setConversations] = useState(undefined)
19 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 //this.socket = socketIOClient(ENDPOINT);
Adrien Béraud6ecaa402021-04-06 17:37:25 -040027 /*socket.on('connect', () => {
Larbi Gharibe9af9732021-03-31 15:08:01 +010028 console.log("Success !")
Adrien Béraud6ecaa402021-04-06 17:37:25 -040029 })*/
Adrien Béraud4e287b92021-04-24 16:15:56 -040030 //this.socket.on("FromAPI", data => {
Larbi Gharibe9af9732021-03-31 15:08:01 +010031 // this.setState({
32 // messages: [...this.state.messages, data]
33 // })
34 //});
Adrien Béraud6ecaa402021-04-06 17:37:25 -040035 /*socket.on('receivedMessage', (data) => {
36 const message = {
Larbi Gharibe9af9732021-03-31 15:08:01 +010037 senderId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',
38 text: data
39 }
40 this.setState({
41 messages: [...this.state.messages, message],
42 sound: true
43 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040044 });*/
Adrien Béraud4e287b92021-04-24 16:15:56 -040045 useEffect(() => {
46 console.log("io.connect")
47 const socket = io()
48 socket.on('receivedMessage', (data) => {
49 console.log("receivedMessage")
50 console.log(data)
51 conversation.addMessage(data)
52 })
53 return () => socket.disconnect()
54 })
Larbi Gharibe9af9732021-03-31 15:08:01 +010055
Adrien Béraud4e287b92021-04-24 16:15:56 -040056 useEffect(() => {
57 const controller = new AbortController()
58 authManager.fetch(`/api/accounts/${accountId}/conversations`, {signal: controller.signal})
59 .then(res => res.json())
60 .then(result => {
61 console.log(result)
62 setConversations(Object.values(result).map(c => Conversation.from(accountId, c)))
63 })
64 return () => controller.abort()
65 }, [accountId])
Adrien Béraud995e8022021-04-08 13:46:51 -040066
Adrien Béraud4e287b92021-04-24 16:15:56 -040067 const handleSearch = (query) => {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040068 authManager.fetch(`/api/accounts/${accountId}/ns/name/${query}`)
69 .then(response => {
70 if (response.status === 200) {
71 return response.json()
72 } else {
73 throw new Error(response.status)
74 }
75 }).then(response => {
76 console.log(response)
77 const contact = new Contact(response.address)
78 contact.setRegisteredName(response.name)
Adrien Béraud4e287b92021-04-24 16:15:56 -040079 setSearchResults(contact ? Conversation.fromSingleContact(accountId, contact) : undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040080 }).catch(e => {
Adrien Béraud4e287b92021-04-24 16:15:56 -040081 setSearchResults(undefined)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040082 })
83 }
84
Adrien Béraud4e287b92021-04-24 16:15:56 -040085 console.log("JamiMessenger render " + conversationId)
86 console.log(props)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040087
Adrien Béraud4e287b92021-04-24 16:15:56 -040088 return (
89 <div className="app" >
90 <Header />
91 {conversations ?
92 <ConversationList search={searchResult} conversations={conversations} accountId={accountId} /> :
93 <div className="rooms-list"><LoadingPage /></div>}
94 <NewContactForm onChange={handleSearch} />
95 {conversationId && <ConversationView accountId={accountId} conversationId={conversationId} />}
96 {contactId && <AddContactPage accountId={accountId} contactId={contactId} />}
97 </div>
98 )
Larbi Gharibe9af9732021-03-31 15:08:01 +010099}
100
Adrien Béraud150b4782021-04-21 19:40:59 -0400101export default JamiMessenger