From 48d9444ddeb7f361e60c6b649296d4dd6855b9cf Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Wed, 3 Dec 2025 20:18:11 +0100 Subject: [PATCH] Add a button to manually load older messages --- .../src/utils/RoomEventsManager.ts | 2 +- .../src/widgets/messages/RoomMessagesList.tsx | 72 ++++++++++++------- 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/matrixgw_frontend/src/utils/RoomEventsManager.ts b/matrixgw_frontend/src/utils/RoomEventsManager.ts index 4ffe6f3..de48e14 100644 --- a/matrixgw_frontend/src/utils/RoomEventsManager.ts +++ b/matrixgw_frontend/src/utils/RoomEventsManager.ts @@ -38,7 +38,7 @@ export class RoomEventsManager { receiptsEventsMap: Map; get canLoadOlder(): boolean { - return !!this.endToken; + return !!this.endToken && this.events.length > 0; } constructor( diff --git a/matrixgw_frontend/src/widgets/messages/RoomMessagesList.tsx b/matrixgw_frontend/src/widgets/messages/RoomMessagesList.tsx index 58e9f1b..e2e6e62 100644 --- a/matrixgw_frontend/src/widgets/messages/RoomMessagesList.tsx +++ b/matrixgw_frontend/src/widgets/messages/RoomMessagesList.tsx @@ -55,16 +55,8 @@ export function RoomMessagesList(p: { messagesEndRef.current?.scrollIntoView({ behavior: "instant" }); }, [lastEventId, messagesEndRef]); - // Watch scroll to detect when user reach the top to load older messages - const handleScroll = async () => { - if (!listContainerRef.current || loadingOlder || !p.manager.canLoadOlder) - return; - - const { scrollTop } = listContainerRef.current; - - if (scrollTop !== 0) { - return; - } + const loadOlderMessages = async () => { + if (loadingOlder || !p.manager.canLoadOlder) return; setLoadingOlder(true); @@ -82,6 +74,19 @@ export function RoomMessagesList(p: { } }; + // Watch scroll to detect when user reach the top to load older messages + const handleScroll = async () => { + if (!listContainerRef.current) return; + + const { scrollTop } = listContainerRef.current; + + if (scrollTop !== 0) { + return; + } + + loadOlderMessages(); + }; + return (
- {/* Empty conversation notice */} - {p.manager.messages.length === 0 && ( -
- No message in this conversation yet! -
- )} - {/** Begining of conversation */} - {!p.manager.canLoadOlder && ( + {!p.manager.canLoadOlder && p.manager.messages.length > 0 && ( )} + {/** Load older messages button */} + {p.manager.canLoadOlder && !loadingOlder && ( +
+ +
+ )} + {/** Loading older messages spinner */} {loadingOlder && (
)} + {/* Empty conversation notice */} + {p.manager.messages.length === 0 && ( +
+ No message in this conversation yet! +
+ )} + + {/** Messages themselves */} {p.manager.messages.map((m, idx) => (