mirror of https://github.com/vector-im/riot-web
Paginate responses to pinned polls (#8025)
* 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>pull/21833/head
parent
e96d9157a9
commit
3608fdb2ae
|
@ -80,18 +80,22 @@ export default class PinnedEventTile extends React.Component<IProps> {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
[M_POLL_RESPONSE.name, M_POLL_RESPONSE.altName, M_POLL_END.name, M_POLL_END.altName]
|
[M_POLL_RESPONSE.name, M_POLL_RESPONSE.altName, M_POLL_END.name, M_POLL_END.altName]
|
||||||
.map(async eventType => {
|
.map(async eventType => {
|
||||||
const { events } = await this.context.relations(
|
|
||||||
roomId, eventId, RelationType.Reference, eventType,
|
|
||||||
);
|
|
||||||
|
|
||||||
const relations = new Relations(RelationType.Reference, eventType, room);
|
const relations = new Relations(RelationType.Reference, eventType, room);
|
||||||
|
relations.setTargetEvent(this.props.event);
|
||||||
|
|
||||||
if (!this.relations.has(RelationType.Reference)) {
|
if (!this.relations.has(RelationType.Reference)) {
|
||||||
this.relations.set(RelationType.Reference, new Map<string, Relations>());
|
this.relations.set(RelationType.Reference, new Map<string, Relations>());
|
||||||
}
|
}
|
||||||
this.relations.get(RelationType.Reference).set(eventType, relations);
|
this.relations.get(RelationType.Reference).set(eventType, relations);
|
||||||
|
|
||||||
relations.setTargetEvent(this.props.event);
|
let nextBatch: string | undefined;
|
||||||
events.forEach(event => relations.addEvent(event));
|
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) {
|
} catch (err) {
|
||||||
|
|
|
@ -234,11 +234,16 @@ describe("<PinnedMessagesCard />", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Make the responses available
|
// 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) {
|
if (eventId === poll.getId() && relationType === RelationType.Reference) {
|
||||||
switch (eventType) {
|
switch (eventType) {
|
||||||
case M_POLL_RESPONSE.name: return { events: responses };
|
case M_POLL_RESPONSE.name:
|
||||||
case M_POLL_END.name: return { events: [end] };
|
// 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: [] };
|
return { events: [] };
|
||||||
|
|
Loading…
Reference in New Issue