const [info, setInfo] = useState(null);
useEffect(() => {
- const handleOnPagination = (backwards, loaded, canLoadMore) => {
+ const handleOnPagination = (backwards, loaded) => {
if (loaded === 0) return;
if (!readEventStore.getItem()) {
const readUpToId = roomTimeline.getReadUpToEventId();
readEventStore.setItem(roomTimeline.findEventByIdInTimelineSet(readUpToId));
}
limit.setFrom(limit.calcNextFrom(backwards, roomTimeline.timeline.length));
- setInfo({
+ setTimeout(() => setInfo({
backwards,
loaded,
- canLoadMore,
- });
+ }));
};
roomTimeline.on(cons.events.roomTimeline.PAGINATED, handleOnPagination);
return () => {
};
}, [roomTimeline]);
- const autoPaginate = useCallback(() => {
+ const autoPaginate = useCallback(async () => {
if (roomTimeline.isOngoingPagination) return;
const tLength = roomTimeline.timeline.length;
forceUpdateLimit();
} else if (roomTimeline.canPaginateForward()) {
// paginate from server.
- roomTimeline.paginateTimeline(false, PAG_LIMIT);
+ await roomTimeline.paginateTimeline(false, PAG_LIMIT);
return;
}
}
forceUpdateLimit();
} else if (roomTimeline.canPaginateBackward()) {
// paginate from server.
- roomTimeline.paginateTimeline(true, PAG_LIMIT);
+ await roomTimeline.paginateTimeline(true, PAG_LIMIT);
}
}
}, [roomTimeline]);
}
canPaginateBackward() {
- if (this.timeline[0].getType() === 'm.room.create') return false;
+ if (this.timeline[0]?.getType() === 'm.room.create') return false;
const tm = getFirstLinkedTimeline(this.activeTimeline);
return tm.getPaginationToken('b') !== null;
}
: getLastLinkedTimeline(this.activeTimeline);
if (timelineToPaginate.getPaginationToken(backwards ? 'b' : 'f') === null) {
+ this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0);
this.isOngoingPagination = false;
- this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0, false);
return false;
}
const oldSize = this.timeline.length;
try {
- const canPaginateMore = await this.matrixClient
- .paginateEventTimeline(timelineToPaginate, { backwards, limit });
+ await this.matrixClient.paginateEventTimeline(timelineToPaginate, { backwards, limit });
if (this.isEncrypted()) await this.decryptAllEventsOfTimeline(this.activeTimeline);
this._populateTimelines();
const loaded = this.timeline.length - oldSize;
+ this.emit(cons.events.roomTimeline.PAGINATED, backwards, loaded);
this.isOngoingPagination = false;
- this.emit(cons.events.roomTimeline.PAGINATED, backwards, loaded, canPaginateMore);
return true;
} catch {
+ this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0);
this.isOngoingPagination = false;
- this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0, true);
return false;
}
}