fix(card): use RELEARNING_STEPS for relearning card interval preview

This commit is contained in:
2026-03-13 15:44:06 +08:00
parent 4243cdc68b
commit 7c71ffcf31

View File

@@ -36,24 +36,24 @@ function calculateNewCardIntervals(): PreviewIntervals {
}; };
} }
function calculateLearningIntervals(left: number): PreviewIntervals { function calculateLearningIntervals(left: number, isRelearning: boolean): PreviewIntervals {
const steps = SM2_CONFIG.LEARNING_STEPS; const steps = isRelearning ? SM2_CONFIG.RELEARNING_STEPS : SM2_CONFIG.LEARNING_STEPS;
const stepIndex = Math.floor(left % 1000); const stepIndex = Math.floor(left % 1000);
const again = steps[0]; const again = steps[0] ?? 1;
let hard: number; let hard: number;
if (stepIndex === 0 && steps.length >= 2) { if (stepIndex === 0 && steps.length >= 2) {
hard = (steps[0] + steps[1]) / 2; const step0 = steps[0] ?? 1;
} else if (stepIndex < steps.length - 1) { const step1 = steps[1] ?? step0;
hard = steps[stepIndex]; hard = (step0 + step1) / 2;
} else { } else {
hard = SM2_CONFIG.GRADUATING_INTERVAL_GOOD * 1440; hard = steps[stepIndex] ?? steps[0] ?? 1;
} }
let good: number; let good: number;
if (stepIndex < steps.length - 1) { if (stepIndex < steps.length - 1) {
good = steps[stepIndex + 1]; good = steps[stepIndex + 1] ?? steps[0] ?? 1;
} else { } else {
good = SM2_CONFIG.GRADUATING_INTERVAL_GOOD * 1440; good = SM2_CONFIG.GRADUATING_INTERVAL_GOOD * 1440;
} }
@@ -68,8 +68,9 @@ export function calculatePreviewIntervals(card: CardPreview): PreviewIntervals {
case CardType.NEW: case CardType.NEW:
return calculateNewCardIntervals(); return calculateNewCardIntervals();
case CardType.LEARNING: case CardType.LEARNING:
return calculateLearningIntervals(card.left, false);
case CardType.RELEARNING: case CardType.RELEARNING:
return calculateLearningIntervals(card.left); return calculateLearningIntervals(card.left, true);
case CardType.REVIEW: case CardType.REVIEW:
default: default:
return calculateReviewIntervals(card.ivl, card.factor); return calculateReviewIntervals(card.ivl, card.factor);