{
this.singletons.push(response.problem);
this.curProb = response.problem;
+ this.display = (response.problem.uid == this.userId ? "mine" : "others");
}
else
this.noMoreProblems("Sorry, problem " + pid + " does not exist");
}
);
}
+ else
+ this.display = (this.curProb.uid == this.userId ? "mine" : "others");
},
curProblems: function() {
switch (this.display)
},
// TODO?: get 50 from server but only show 10 at a time (for example)
showNext: function(direction) {
+ const nomorePb =
+ problems => {
+ if (!problems || problems.length == 0)
+ this.noMoreProblems("No more problems in this direction");
+ };
if (!this.curProb)
- return this.fetchProblems(this.display, direction);
+ return this.fetchProblems(this.display, direction, nomorePb);
// Show next problem (older or newer):
let curProbs = this.curProblems();
// Try to find a neighbour problem in the direction, among current set
}
// 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);
+ this.fetchProblems(this.display, direction, problems => {
+ if (problems.length > 0)
+ {
+ // Ok, found something:
+ this.curProb =
+ this.findClosestNeighbor(this.curProb, curProbs, direction);
+ }
+ else
+ nomorePb();
+ });
},
findClosestNeighbor: function(problem, probList, direction) {
let neighbor = undefined;
const curIndex = displays.findIndex(item => item == this.display);
this.display = displays[1-curIndex];
},
- fetchProblems: function(type, direction) {
+ fetchProblems: function(type, direction, cb) {
let problems = (type == "others" ? this.problems : this.myProblems);
// "last datetime" set at a value OK for an empty initial array
let last_dt = (direction=="forward" ? 0 : Number.MAX_SAFE_INTEGER);
response => {
if (response.problems.length > 0)
{
- Array.prototype.push.apply(problems,
- response.problems.sort((p1,p2) => { return p2.added - p1.added; }));
+ Array.prototype.push.apply(problems, response.problems.sort(
+ (p1,p2) => { return p2.added - p1.added; }));
// If one list is empty but not the other, show the non-empty
- const otherArray = (type == "mine" ? this.problems : this.myProblems);
- if (problems.length > 0 && otherArray.length == 0)
+ const otherArray =
+ (type == "mine" ? this.problems : this.myProblems);
+ if (otherArray.length == 0)
this.display = type;
+ this.$forceUpdate(); //TODO...
}
+ if (!!cb)
+ cb(response.problems);
}
);
},
instructions: this.modalProb.instructions,
solution: this.modalProb.solution,
});
+ if (!this.curProb && this.display != "mine")
+ this.display = "mine";
}
else
this.modalProb.id = 0;