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