Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Paginate responses to pinned polls #8025

Merged
merged 3 commits into from
Mar 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions src/components/views/rooms/PinnedEventTile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,18 +80,22 @@ export default class PinnedEventTile extends React.Component<IProps> {
await Promise.all(
[M_POLL_RESPONSE.name, M_POLL_RESPONSE.altName, M_POLL_END.name, M_POLL_END.altName]
.map(async eventType => {
const { events } = await this.context.relations(
roomId, eventId, RelationType.Reference, eventType,
);

const relations = new Relations(RelationType.Reference, eventType, room);
relations.setTargetEvent(this.props.event);

if (!this.relations.has(RelationType.Reference)) {
this.relations.set(RelationType.Reference, new Map<string, Relations>());
}
this.relations.get(RelationType.Reference).set(eventType, relations);

relations.setTargetEvent(this.props.event);
events.forEach(event => relations.addEvent(event));
let nextBatch: string | undefined;
do {
const page = await this.context.relations(
roomId, eventId, RelationType.Reference, eventType, { from: nextBatch },
);
nextBatch = page.nextBatch;
page.events.forEach(event => relations.addEvent(event));
} while (nextBatch);
}),
);
} catch (err) {
Expand Down
11 changes: 8 additions & 3 deletions test/components/views/right_panel/PinnedMessagesCard-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,16 @@ describe("<PinnedMessagesCard />", () => {
});

// Make the responses available
cli.relations.mockImplementation((roomId, eventId, relationType, eventType) => {
cli.relations.mockImplementation((roomId, eventId, relationType, eventType, { from }) => {
if (eventId === poll.getId() && relationType === RelationType.Reference) {
switch (eventType) {
case M_POLL_RESPONSE.name: return { events: responses };
case M_POLL_END.name: return { events: [end] };
case M_POLL_RESPONSE.name:
// Paginate the results, for added challenge
return (from === "page2") ?
{ events: responses.slice(2) } :
{ events: responses.slice(0, 2), nextBatch: "page2" };
case M_POLL_END.name:
return { events: [end] };
}
}
return { events: [] };
Expand Down