1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2026-01-03 23:22:30 +03:00

TimelineWindow: fix canPaginate during load

We should return false rather than throw an exception if someone calls
canPaginate before the timeline finishes loading.
This commit is contained in:
Richard van der Hoff
2016-01-29 23:31:56 +00:00
parent 672e96b90e
commit 1499087098
2 changed files with 42 additions and 2 deletions

View File

@@ -140,14 +140,23 @@ TimelineWindow.prototype.canPaginate = function(direction) {
var tl;
if (direction == EventTimeline.BACKWARDS) {
tl = this._start;
if (tl.index > tl.minIndex()) { return true; }
} else if (direction == EventTimeline.FORWARDS) {
tl = this._end;
if (tl.index < tl.maxIndex()) { return true; }
} else {
throw new Error("Invalid direction '" + direction + "'");
}
if (!tl) {
debuglog("TimelineWindow: no timeline yet");
return false;
}
if (direction == EventTimeline.BACKWARDS) {
if (tl.index > tl.minIndex()) { return true; }
} else {
if (tl.index < tl.maxIndex()) { return true; }
}
return Boolean(tl.timeline.getNeighbouringTimeline(direction) ||
tl.timeline.getPaginationToken(direction));
};

View File

@@ -183,6 +183,37 @@ describe("TimelineWindow", function() {
expect(timelineWindow.getEvents()).toEqual(expectedEvents);
}).catch(utils.failTest).done(done);
});
it("canPaginate should return false until load has returned",
function(done) {
var timeline = createTimeline();
timeline.setPaginationToken("toktok1", EventTimeline.BACKWARDS);
timeline.setPaginationToken("toktok2", EventTimeline.FORWARDS);
var eventId = timeline.getEvents()[1].getId();
var room = {};
var client = {};
var timelineWindow = new TimelineWindow(client, room);
client.getEventTimeline = function(room0, eventId0) {
expect(timelineWindow.canPaginate(EventTimeline.BACKWARDS))
.toBe(false);
expect(timelineWindow.canPaginate(EventTimeline.FORWARDS))
.toBe(false);
return q(timeline);
};
timelineWindow.load(eventId, 3).then(function() {
var expectedEvents = timeline.getEvents();
expect(timelineWindow.getEvents()).toEqual(expectedEvents);
expect(timelineWindow.canPaginate(EventTimeline.BACKWARDS))
.toBe(true);
expect(timelineWindow.canPaginate(EventTimeline.FORWARDS))
.toBe(true);
}).catch(utils.failTest).done(done);
});
});
describe("pagination", function() {