fix a race condition in handleScrollEvent (#85)

This commit is contained in:
or-else
2021-08-23 17:14:21 -07:00
parent 8294248e2d
commit 667d0e6d99
+7 -11
View File
@@ -369,24 +369,20 @@ class MessagesView extends React.Component {
// Get older messages // Get older messages
handleScrollEvent(event) { handleScrollEvent(event) {
this.setState({scrollPosition: event.target.scrollHeight - event.target.scrollTop}); this.setState({scrollPosition: event.target.scrollHeight - event.target.scrollTop});
if (this.state.fetchingMessages) {
return;
}
if (event.target.scrollTop <= 0) { if (event.target.scrollTop <= 0) {
this.setState((prevState, props) => {
const newState = {};
if (!prevState.fetchingMessages) {
const topic = this.props.tinode.getTopic(this.state.topic); const topic = this.props.tinode.getTopic(this.state.topic);
if (topic && topic.isSubscribed() && topic.msgHasMoreMessages()) { if (topic && topic.isSubscribed() && topic.msgHasMoreMessages()) {
newState.fetchingMessages = true; this.setState({fetchingMessages: true}, () => {
topic.getMessagesPage(MESSAGES_PAGE) topic.getMessagesPage(MESSAGES_PAGE)
.then(() => this.setState({fetchingMessages: false})) .catch((err) => this.props.onError(err.message, 'err'))
.catch((err) => { .finally(() => this.setState({fetchingMessages: false}));
this.setState({fetchingMessages: false});
this.props.onError(err.message, 'err');
}); });
} }
} }
return newState;
});
}
} }
handleDescChange(desc) { handleDescChange(desc) {