blob: 719d3d0fcbeb5d9e002023237adc1c24a83236cf [file] [log] [blame]
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04001import CircularProgress from '@material-ui/core/CircularProgress';
Adrien Béraud5e9e19b2021-04-22 01:38:53 -04002import React, { useEffect, useState } from 'react';
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04003import MessageList from './MessageList';
4import SendMessageForm from './SendMessageForm';
5import authManager from '../AuthManager'
6import Conversation from '../../../model/Conversation';
Adrien Béraud150b4782021-04-21 19:40:59 -04007import LoadingPage from './loading';
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04008
Adrien Béraud5e9e19b2021-04-22 01:38:53 -04009const ConversationView = props => {
10 const [state, setState] = useState({
11 loaded:false,
12 error: false,
13 conversation: undefined
14 })
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040015
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040016 useEffect(() => {
17 const controller = new AbortController()
18 authManager.fetch(`/api/accounts/${props.accountId}/conversations/${props.conversationId}`, {signal: controller.signal})
19 .then(res => res.json())
20 .then(result => {
21 console.log(result)
22 setState({
23 loaded: true,
24 conversation: Conversation.from(props.accountId, result)// result.map(account => Account.from(account)),
25 })
26 }, error => {
27 console.log(`get error ${error}`)
28 setState({
29 loaded: true,
30 error: true
31 })
32 })
33 return () => controller.abort()
34 }, [props.accountId, props.conversationId])
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040035
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040036 const sendMessage = (message) => {
37 authManager.fetch(`/api/accounts/${props.accountId}/conversations/${props.conversationId}`, {
38 headers: {
39 'Accept': 'application/json',
40 'Content-Type': 'application/json'
41 },
42 method:"POST",
43 body: JSON.stringify({ message })
44 })
45 }
46
47 if (state.loaded === false) {
48 return <LoadingPage />
49 } else if (state.error === true) {
50 return <div>Error loding {props.conversationId}</div>
51 } else {
52 return <React.Fragment>
53 <MessageList conversation={state.conversation} messages={state.conversation.getMessages()} />
54 <SendMessageForm onSend={sendMessage} />
55 </React.Fragment>
56 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040057}
58
59export default ConversationView