+ // TODO?: get 50 from server but only show 10 at a time (for example)
+ showNext: function(direction) {
+ if (!this.curProb)
+ return this.fetchProblems(this.display, direction);
+ // Show next problem (older or newer):
+ let curProbs = this.curProblems();
+ // Try to find a neighbour problem in the direction, among current set
+ const neighbor = this.findClosestNeighbor(this.curProb, curProbs, direction);
+ if (!!neighbor)
+ {
+ this.curProb = neighbor;
+ return;
+ }
+ // Boundary case: nothing in current set, need to fetch from server
+ const curSize = curProbs.length;
+ this.fetchProblems(this.display, direction);
+ const newSize = curProbs.length;
+ if (curSize == newSize) //no problems found
+ return this.noMoreProblems("No more problems in this direction");
+ // Ok, found something:
+ this.curProb = this.findClosestNeighbor(this.curProb, curProbs, direction);