feat(vocab): implement upcoming vocabulary review tracking and update UI accordingly
This commit is contained in:
@@ -2031,6 +2031,21 @@ export default class VocabService {
|
||||
this._isTrainableSrsPair(item)
|
||||
&& (!validKeys.size || validKeys.has(String(item.itemKey || '').trim()))
|
||||
);
|
||||
const scheduledRows = await VocabSrsItem.findAll({
|
||||
where: { userId: user.id, courseId: Number(course.id) },
|
||||
order: [['nextDueAt', 'ASC']]
|
||||
});
|
||||
const upcomingByDate = new Map();
|
||||
scheduledRows
|
||||
.filter((item) => (
|
||||
this._isTrainableSrsPair(item)
|
||||
&& (!validKeys.size || validKeys.has(String(item.itemKey || '').trim()))
|
||||
&& new Date(item.nextDueAt).getTime() > now.getTime()
|
||||
))
|
||||
.forEach((item) => {
|
||||
const date = new Date(item.nextDueAt).toISOString().slice(0, 10);
|
||||
upcomingByDate.set(date, (upcomingByDate.get(date) || 0) + 1);
|
||||
});
|
||||
const rows = validDueRows.slice(0, limit);
|
||||
const totalDueCount = validDueRows.length;
|
||||
|
||||
@@ -2046,6 +2061,7 @@ export default class VocabService {
|
||||
totalDueCount,
|
||||
dailyLimit: DAILY_SRS_LIMIT,
|
||||
limit,
|
||||
upcoming: Array.from(upcomingByDate, ([date, count]) => ({ date, count })).slice(0, 6),
|
||||
items: rows.map((item) => ({
|
||||
itemKey: item.itemKey,
|
||||
courseId: item.courseId,
|
||||
|
||||
Reference in New Issue
Block a user