[FIX] Load messages when hideSystemMessages is enabled (#2101)

* [WIP] Load messages when hideSystemMessages is enabled

* Improve method name

* Minor improvements

Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
Djorkaeff Alexandre 2020-06-09 17:09:18 -03:00 committed by GitHub
parent 1fa1ddd89f
commit fcf6ed4dd7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 4 deletions

View File

@ -171,9 +171,9 @@ class List extends React.Component {
onEndReached = debounce(async() => { onEndReached = debounce(async() => {
const { const {
loading, end, messages loading, end, messages, latest = messages[messages.length - 1].ts
} = this.state; } = this.state;
if (loading || end || messages.length < 50) { if (loading || end) {
return; return;
} }
@ -185,16 +185,40 @@ class List extends React.Component {
// `offset` is `messages.length - 1` because we append thread start to `messages` obj // `offset` is `messages.length - 1` because we append thread start to `messages` obj
result = await RocketChat.loadThreadMessages({ tmid, rid, offset: messages.length - 1 }); result = await RocketChat.loadThreadMessages({ tmid, rid, offset: messages.length - 1 });
} else { } else {
result = await RocketChat.loadMessagesForRoom({ rid, t, latest: messages[messages.length - 1].ts }); result = await RocketChat.loadMessagesForRoom({ rid, t, latest });
} }
this.setState({ end: result.length < 50, loading: false }); this.setState({ end: result.length < 50, loading: false, latest: result[result.length - 1].ts }, () => this.loadMoreMessages(result));
} catch (e) { } catch (e) {
this.setState({ loading: false }); this.setState({ loading: false });
log(e); log(e);
} }
}, 300) }, 300)
loadMoreMessages = (result) => {
const { end } = this.state;
if (end) {
return;
}
// handle servers with version < 3.0.0
let { hideSystemMessages = [] } = this.props;
if (!Array.isArray(hideSystemMessages)) {
hideSystemMessages = [];
}
if (!hideSystemMessages.length) {
return;
}
const hasReadableMessages = result.filter(message => !message.t || (message.t && !hideSystemMessages.includes(message.t))).length > 0;
// if this batch doesn't contain any messages that will be displayed, we'll request a new batch
if (!hasReadableMessages) {
this.onEndReached();
}
}
onRefresh = () => this.setState({ refreshing: true }, async() => { onRefresh = () => this.setState({ refreshing: true }, async() => {
const { messages } = this.state; const { messages } = this.state;
const { rid, tmid } = this.props; const { rid, tmid } = this.props;