batch load events in ReplyThread before adding them to the state

This commit is contained in:
Germain Souquet 2021-05-21 10:20:24 +01:00
parent 0f63098c59
commit 47e007e08f

View file

@ -269,36 +269,27 @@ export default class ReplyThread extends React.Component {
const {parentEv} = this.props; const {parentEv} = this.props;
// at time of making this component we checked that props.parentEv has a parentEventId // at time of making this component we checked that props.parentEv has a parentEventId
const ev = await this.getEvent(ReplyThread.getParentEventId(parentEv)); const ev = await this.getEvent(ReplyThread.getParentEventId(parentEv));
if (this.unmounted) return; if (this.unmounted) return;
if (ev) { if (ev) {
const loadedEv = await this.getNextEvent(ev);
this.setState({ this.setState({
events: [ev], events: [ev],
}, this.loadNextEvent); loadedEv,
loading: false,
});
} else { } else {
this.setState({err: true}); this.setState({err: true});
} }
} }
async loadNextEvent() { async getNextEvent(ev) {
if (this.unmounted) return; try {
const ev = this.state.events[0]; const inReplyToEventId = ReplyThread.getParentEventId(ev);
const inReplyToEventId = ReplyThread.getParentEventId(ev); return await this.getEvent(inReplyToEventId);
} catch (e) {
if (!inReplyToEventId) { return null;
this.setState({
loading: false,
});
return;
}
const loadedEv = await this.getEvent(inReplyToEventId);
if (this.unmounted) return;
if (loadedEv) {
this.setState({loadedEv});
} else {
this.setState({err: true});
} }
} }
@ -326,13 +317,18 @@ export default class ReplyThread extends React.Component {
this.initialize(); this.initialize();
} }
onQuoteClick() { async onQuoteClick() {
const events = [this.state.loadedEv, ...this.state.events]; const events = [this.state.loadedEv, ...this.state.events];
let loadedEv = null;
if (events.length > 0) {
loadedEv = await this.getNextEvent(events[0]);
}
this.setState({ this.setState({
loadedEv: null, loadedEv,
events, events,
}, this.loadNextEvent); });
dis.fire(Action.FocusComposer); dis.fire(Action.FocusComposer);
} }