blob: 3fef47bab39e8c689d44e7cebb1d74375d1e4a9d [file] [log] [blame]
Larbi Gharibe9af9732021-03-31 15:08:01 +01001import React from 'react';
2import Header from '../components/Header'
3import ContactList from '../components/ContactList'
4import MessageList from '../components/MessageList'
5import SendMessageForm from '../components/SendMessageForm'
6import NewContactForm from '../components/NewContactForm'
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04007
Adrien Béraud6ecaa402021-04-06 17:37:25 -04008//import Sound from 'react-sound';
Larbi Gharibe9af9732021-03-31 15:08:01 +01009import io from "socket.io-client";
Adrien Béraud995e8022021-04-08 13:46:51 -040010import ConversationList from '../components/ConversationList';
11import CircularProgress from '@material-ui/core/CircularProgress';
Adrien Béraud6ecaa402021-04-06 17:37:25 -040012//const socket = io.connect('http://localhost:3000');
Adrien Béraud995e8022021-04-08 13:46:51 -040013import authManager from '../AuthManager'
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040014import Conversation from '../../../model/Conversation'
15import Contact from '../../../model/Contact'
16import ConversationView from '../components/ConversationView';
17import AddContactPage from './addContactPage.jsx';
Adrien Béraud150b4782021-04-21 19:40:59 -040018import LoadingPage from '../components/loading';
Larbi Gharibe9af9732021-03-31 15:08:01 +010019
Adrien Béraud6ecaa402021-04-06 17:37:25 -040020class JamiMessenger extends React.Component {
Larbi Gharibe9af9732021-03-31 15:08:01 +010021
Adrien Béraud995e8022021-04-08 13:46:51 -040022 constructor(props) {
23 super(props)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040024
Larbi Gharibe9af9732021-03-31 15:08:01 +010025 this.state = {
Adrien Béraud995e8022021-04-08 13:46:51 -040026 conversations: undefined,
Larbi Gharibe9af9732021-03-31 15:08:01 +010027 messages: [],
28 sound: false
29 }
30
Adrien Béraud6ecaa402021-04-06 17:37:25 -040031 /*socket.on('connect', () => {
Larbi Gharibe9af9732021-03-31 15:08:01 +010032 console.log("Success !")
Adrien Béraud6ecaa402021-04-06 17:37:25 -040033 })*/
Larbi Gharibe9af9732021-03-31 15:08:01 +010034
Larbi Gharibe9af9732021-03-31 15:08:01 +010035
36 //this.socket = socketIOClient(ENDPOINT);
37 //this.socket.on("FromAPI", data => {
38 // this.setState({
39 // messages: [...this.state.messages, data]
40 // })
41 //});
42 this.sendMessage = this.sendMessage.bind(this)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040043 this.handleSearch = this.handleSearch.bind(this)
Adrien Béraud995e8022021-04-08 13:46:51 -040044 this.controller = new AbortController()
Larbi Gharibe9af9732021-03-31 15:08:01 +010045 }
46
47 componentDidMount() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040048 const accountId = this.props.accountId || this.props.match.params.accountId
49 const conversationId = this.props.conversationId || this.props.match.params.conversationId
50
Adrien Béraud995e8022021-04-08 13:46:51 -040051 if (this.req === undefined) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040052 this.req = authManager.fetch(`/api/accounts/${accountId}/conversations`, {signal: this.controller.signal})
Adrien Béraud995e8022021-04-08 13:46:51 -040053 .then(res => res.json())
54 .then(result => {
55 console.log(result)
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040056 this.setState({conversations: Object.values(result).map(c => Conversation.from(accountId, c))})
Adrien Béraud995e8022021-04-08 13:46:51 -040057 })
58 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -040059 /*socket.on('receivedMessage', (data) => {
60 const message = {
Larbi Gharibe9af9732021-03-31 15:08:01 +010061 senderId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',
62 text: data
63 }
64 this.setState({
65 messages: [...this.state.messages, message],
66 sound: true
67 })
Adrien Béraud6ecaa402021-04-06 17:37:25 -040068 });*/
Larbi Gharibe9af9732021-03-31 15:08:01 +010069 }
70
Adrien Béraud995e8022021-04-08 13:46:51 -040071 componentWillUnmount(){
72 this.controller.abort()
73 this.req = undefined
74 }
75
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040076 handleSearch(query) {
77 const accountId = this.props.accountId || this.props.match.params.accountId
78 const conversationId = this.props.conversationId || this.props.match.params.conversationId
79
80 authManager.fetch(`/api/accounts/${accountId}/ns/name/${query}`)
81 .then(response => {
82 if (response.status === 200) {
83 return response.json()
84 } else {
85 throw new Error(response.status)
86 }
87 }).then(response => {
88 console.log(response)
89 const contact = new Contact(response.address)
90 contact.setRegisteredName(response.name)
91 this.setState({searchResult: contact ? Conversation.fromSingleContact(accountId, contact) : undefined})
92 }).catch(e => {
93 this.setState({searchResult: e})
94 })
95 }
96
Larbi Gharibe9af9732021-03-31 15:08:01 +010097 sendMessage(text) {
98 var data = {
99 senderId: 'Me',
100 destinationId: '65f6674b26e5af6ed0b4e92a13b80ff4bbfdf1e8',
101 text: text
102 }
Adrien Béraud6ecaa402021-04-06 17:37:25 -0400103 //socket.emit("SendMessage", data);
Larbi Gharibe9af9732021-03-31 15:08:01 +0100104 console.log(data.text);
105 this.setState({
106 messages: [...this.state.messages, data],
107 sound: false
108 })
109 }
110 render() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400111 const accountId = this.props.accountId || this.props.match.params.accountId
112 const conversationId = this.props.conversationId || this.props.match.params.conversationId
113 const contactId = this.props.contactId || this.props.match.params.contactId
114
115 console.log("JamiMessenger render " + conversationId)
116 console.log(this.props)
117 console.log(this.state)
118
Larbi Gharibe9af9732021-03-31 15:08:01 +0100119 return (
120 <div className="app" >
121 <Header />
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400122 {this.state.conversations ?
123 <ConversationList search={this.state.searchResult} conversations={this.state.conversations} accountId={accountId} /> :
Adrien Béraud150b4782021-04-21 19:40:59 -0400124 <div className="rooms-list"><LoadingPage /></div>}
Adrien Béraud35e7d7c2021-04-13 03:28:39 -0400125 <NewContactForm onChange={query => this.handleSearch(query)} />
126 {conversationId && <ConversationView accountId={accountId} conversationId={conversationId} />}
127 {contactId && <AddContactPage accountId={accountId} contactId={contactId} />}
Larbi Gharibe9af9732021-03-31 15:08:01 +0100128 {this.state.sound && <Sound
129 url="stairs.mp3" /*https://notificationsounds.com/message-tones/stairs-567*/
130 playStatus={Sound.status.PLAYING}
131 playFromPosition={0 /* in milliseconds */}
132 onLoading={this.handleSongLoading}
133 onPlaying={this.handleSongPlaying}
134 onFinishedPlaying={this.handleSongFinishedPlaying}
135 />}
136 </div>
137 )
138 }
139}
140
Adrien Béraud150b4782021-04-21 19:40:59 -0400141export default JamiMessenger