blob: 678aafeb3ed22f0479819c9d12ec55c5ad459e72 [file] [log] [blame]
import CircularProgress from '@material-ui/core/CircularProgress';
import React from 'react';
import MessageList from './MessageList';
import SendMessageForm from './SendMessageForm';
import authManager from '../AuthManager'
import Conversation from '../../../model/Conversation';
class ConversationView extends React.Component {
constructor(props) {
super(props)
this.state = {
loaded:false,
error: false,
messages:[]
}
}
componentDidMount() {
this.controller = new AbortController()
if (!this.state.loaded) {
authManager.fetch(`/api/accounts/${this.props.accountId}/conversations/${this.props.conversationId}`, {signal: this.controller.signal})
.then(res => res.json())
.then(result => {
console.log(result)
this.setState({
loaded: true,
conversation: Conversation.from(this.props.accountId, result)// result.map(account => Account.from(account)),
})
}, error => {
console.log(`get error ${error}`)
this.setState({
loaded: true,
error: true
})
})
}
}
componentDidUpdate(prevProps, prevState) {
console.log("componentDidUpdate " + this.props.conversationId)
if (this.props.conversationId !== prevProps.conversationId) {
if (this.state.loaded === true) {
this.setState({
loaded:false,
error: false,
messages:[]
})
}
this.controller = new AbortController()
authManager.fetch(`/api/accounts/${this.props.accountId}/conversations/${this.props.conversationId}`, {signal: this.controller.signal})
.then(res => res.json())
.then(result => {
console.log(result)
this.setState({
loaded: true,
conversation: Conversation.from(this.props.accountId, result)// result.map(account => Account.from(account)),
})
}, error => {
console.log(`get error ${error}`)
this.setState({
loaded: true,
error: true
})
})
}
}
componentWillUnmount() {
this.controller.abort()
}
render() {
if (this.state.loaded === false) {
return <CircularProgress />
} else if (this.state.error === true) {
return <div>Error loding {this.props.conversationId}</div>
} else {
return <React.Fragment>
<MessageList conversation={this.state.conversation} messages={this.state.messages} />
<SendMessageForm sendMessage={this.sendMessage} />
</React.Fragment>
}
}
}
export default ConversationView