From d49b32a5525c7fba45da0b0a2c3f2b900b57f30e Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Sat, 8 Jul 2023 00:41:32 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20(card)=20limit=20to=20max=20level?= =?UTF-8?q?=20and=20sort=20by=20level=20max=20to=20min?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/card/components/FlipCardList.vue | 6 +++++- .../card/hooks/useSpacedRepetitionCards.ts | 15 +++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/modules/card/components/FlipCardList.vue b/src/modules/card/components/FlipCardList.vue index f2d9bcd..fcdabe3 100644 --- a/src/modules/card/components/FlipCardList.vue +++ b/src/modules/card/components/FlipCardList.vue @@ -9,7 +9,11 @@ const emits = defineEmits<{ fail: [id: string] }>() -const cards = ref(props.cards) +const cards = ref( + [...props.cards].sort((a, b) => + a.repetition.level > b.repetition.level ? -1 : 1 + ) +) const currentIndex = ref(0) diff --git a/src/modules/card/hooks/useSpacedRepetitionCards.ts b/src/modules/card/hooks/useSpacedRepetitionCards.ts index 3f918a9..8ea8333 100644 --- a/src/modules/card/hooks/useSpacedRepetitionCards.ts +++ b/src/modules/card/hooks/useSpacedRepetitionCards.ts @@ -1,3 +1,5 @@ +// https://npm.io/package/supermemo + import { DataType } from '@/data/DataType.enum' import { data } from '@/data/data' import { useFile } from '@/hooks/useFile.hook' @@ -11,7 +13,7 @@ import { useAsyncState } from '@vueuse/core' import { addDays, isAfter } from 'date-fns' import { computed, nextTick, watch } from 'vue' -const MAX_LEVEL = 10 +const MAX_LEVEL = 8 export interface Repetition { repetition: RepetitionCard @@ -54,7 +56,10 @@ export const useSpacedRepetitionCards = () => { repeatDate: new Date() }) - if (isAfter(new Date(repetition.repeatDate), new Date())) { + if ( + isAfter(new Date(repetition.repeatDate), new Date()) || + repetition.level === MAX_LEVEL + ) { continue } @@ -88,12 +93,10 @@ export const useSpacedRepetitionCards = () => { return } - const newLevel = repetition.level + 1 - await data.update({ ...repetition, - level: Math.min(newLevel, MAX_LEVEL), - repeatDate: addDays(new Date(), newLevel) + level: Math.min(repetition.level + 1, MAX_LEVEL), + repeatDate: addDays(new Date(), 2 ** repetition.level) }) } const failRepetition = async (cardId: string) => {