{
return this.request("paginate_server", { room_id, limit })
}
diff --git a/web/src/api/statestore.ts b/web/src/api/statestore.ts
index 2dccac9..a637312 100644
--- a/web/src/api/statestore.ts
+++ b/web/src/api/statestore.ts
@@ -67,6 +67,17 @@ export class RoomStateStore {
this.meta = new NonNullCachedEventDispatcher(meta)
}
+ applyPagination(history: DBEvent[]) {
+ // Pagination comes in newest to oldest, timeline is in the opposite order
+ history.reverse()
+ const newTimeline = history.map(evt => {
+ this.eventsByRowID.set(evt.rowid, evt)
+ this.eventsByID.set(evt.event_id, evt)
+ return { timeline_rowid: evt.timeline_rowid, event_rowid: evt.rowid }
+ })
+ this.timeline.emit([...newTimeline, ...this.timeline.current])
+ }
+
applySync(sync: SyncRoom) {
if (visibleMetaIsEqual(this.meta.current, sync.meta)) {
this.meta.current = sync.meta
diff --git a/web/src/api/types/hitypes.ts b/web/src/api/types/hitypes.ts
index 190aebe..38e3a86 100644
--- a/web/src/api/types/hitypes.ts
+++ b/web/src/api/types/hitypes.ts
@@ -110,6 +110,11 @@ export interface DBEvent {
last_edit_rowid?: EventRowID
}
+export interface PaginationResponse {
+ events: DBEvent[]
+ has_more: boolean
+}
+
export interface EventUnsigned {
prev_content?: unknown
prev_sender?: UserID
diff --git a/web/src/ui/RoomView.tsx b/web/src/ui/RoomView.tsx
index eabf1d7..e00b7a7 100644
--- a/web/src/ui/RoomView.tsx
+++ b/web/src/ui/RoomView.tsx
@@ -29,6 +29,7 @@ const RoomView = ({ client, room }: RoomViewProps) => {
const timeline = useNonNullEventAsState(room.timeline)
return
{roomMeta.room_id}
+
{timeline.map(entry => )}