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

Commit

Permalink
Paginate responses to pinned polls (#8025)
Browse files Browse the repository at this point in the history
* Paginate responses to pinned polls

Signed-off-by: Robin Townsend <robin@robin.town>

* Test that pinned polls display paginated responses

Signed-off-by: Robin Townsend <robin@robin.town>
  • Loading branch information
robintown committed Mar 10, 2022
1 parent e96d915 commit 3608fdb
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
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

0 comments on commit 3608fdb

Please sign in to comment.