dont't crash on logout

This commit is contained in:
or-else
2018-09-27 20:10:26 +03:00
parent 07e095aa9a
commit 62cac29071
+20 -18
View File
@@ -3603,7 +3603,7 @@ class MessagesView extends React.Component {
} }
componentWillUnmount() { componentWillUnmount() {
this.leave(); this.leave(this.state.topic);
if (this.messagesScroller) { if (this.messagesScroller) {
this.messagesScroller.removeEventListener('scroll', this.fetchMoreMessages); this.messagesScroller.removeEventListener('scroll', this.fetchMoreMessages);
} }
@@ -3615,8 +3615,8 @@ class MessagesView extends React.Component {
propsChange(props) { propsChange(props) {
if (!props || !props.topic) { if (!props || !props.topic) {
this.setState({messages: [], onlineSubs: [], topic: null}); let oldTopic = this.state.topic;
this.leave(); this.setState({messages: [], onlineSubs: [], topic: null}, this.leave(oldTopic));
return; return;
} }
@@ -3646,7 +3646,7 @@ class MessagesView extends React.Component {
topic.onSubsUpdated = this.handleSubsUpdated; topic.onSubsUpdated = this.handleSubsUpdated;
topic.onPres = this.handleSubsUpdated; topic.onPres = this.handleSubsUpdated;
// Unbind the previous topic from this component. // Unbind the previous topic from this component.
this.leave(); this.leave(this.state.topic);
this.handleDescChange(topic); this.handleDescChange(topic);
topic.subscribers((sub) => { topic.subscribers((sub) => {
@@ -3710,23 +3710,25 @@ class MessagesView extends React.Component {
} }
} }
leave() { leave(oldTopicName) {
if (!this.state.topic) { if (!oldTopicName) {
return; return;
} }
let oldTopic = this.props.tinode.getTopic(this.state.topic); let oldTopic = this.props.tinode.getTopic(oldTopicName);
if (oldTopic && oldTopic.isSubscribed()) { if (oldTopic && oldTopic.isSubscribed()) {
oldTopic.leave(false).finally(() => { oldTopic.leave(false)
// We don't care if the request succeeded or failed. .catch(() => { /* do nothing here */ })
// The topic is dead regardless. .finally(() => {
this.setState({fetchingMessages: false}); // We don't care if the request succeeded or failed.
oldTopic.onData = undefined; // The topic is dead regardless.
oldTopic.onAllMessagesReceived = undefined; this.setState({fetchingMessages: false});
oldTopic.onInfo = undefined; oldTopic.onData = undefined;
oldTopic.onMetaDesc = undefined; oldTopic.onAllMessagesReceived = undefined;
oldTopic.onSubsUpdated = undefined; oldTopic.onInfo = undefined;
oldTopic.onPres = undefined; oldTopic.onMetaDesc = undefined;
}); oldTopic.onSubsUpdated = undefined;
oldTopic.onPres = undefined;
});
} }
} }