diff --git a/src/components/NewVersion.vue b/src/components/NewVersion.vue
index 39e547c..3eb7614 100644
--- a/src/components/NewVersion.vue
+++ b/src/components/NewVersion.vue
@@ -32,7 +32,7 @@ const reload = () => {
diff --git a/src/modules/card/components/FlipCardList.vue b/src/modules/card/components/FlipCardList.vue
index 4c9031c..6ebd0cd 100644
--- a/src/modules/card/components/FlipCardList.vue
+++ b/src/modules/card/components/FlipCardList.vue
@@ -7,6 +7,7 @@ const props = defineProps<{ cards: Repetition[] }>()
const emits = defineEmits<{
success: [id: string]
fail: [id: string]
+ needsReview: [id: string]
}>()
const cards = ref(
@@ -32,6 +33,12 @@ const goToNextCard = (success: boolean) => {
currentIndex.value++
}
+
+const needsReview = () => {
+ const id = cards.value[currentIndex.value].repetition._id ?? ''
+ emits('needsReview', id)
+ currentIndex.value++
+}
@@ -52,6 +59,7 @@ const goToNextCard = (success: boolean) => {
:card="card.card"
@success="goToNextCard(true)"
@fail="goToNextCard(false)"
+ @needs-review="needsReview"
/>
No more cards to check!
diff --git a/src/modules/card/hooks/useNeedReviewCards.ts b/src/modules/card/hooks/useNeedReviewCards.ts
new file mode 100644
index 0000000..0975f88
--- /dev/null
+++ b/src/modules/card/hooks/useNeedReviewCards.ts
@@ -0,0 +1,22 @@
+import { data } from '@/data/data'
+import { DataType } from '@/data/DataType.enum'
+import { RepetitionCard } from '@/modules/card/models/RepetitionCard'
+import { useAsyncState } from '@vueuse/core'
+
+export const useNeedReviewCards = () => {
+ const { state: cardsToReview, isReady } = useAsyncState(async () => {
+ const repetitions = await data.getAll<
+ DataType.RepetitionCard,
+ RepetitionCard
+ >({
+ prefix: DataType.RepetitionCard
+ })
+
+ return repetitions.filter((repetition) => repetition.needsReview)
+ }, [])
+
+ return {
+ cardsToReview,
+ isReady
+ }
+}
diff --git a/src/modules/card/hooks/useSpacedRepetitionCards.ts b/src/modules/card/hooks/useSpacedRepetitionCards.ts
index 2463d60..78d7659 100644
--- a/src/modules/card/hooks/useSpacedRepetitionCards.ts
+++ b/src/modules/card/hooks/useSpacedRepetitionCards.ts
@@ -1,7 +1,7 @@
// https://npm.io/package/supermemo
-import { DataType } from '@/data/DataType.enum'
import { data } from '@/data/data'
+import { DataType } from '@/data/DataType.enum'
import { useFile } from '@/hooks/useFile.hook'
import { useLinks } from '@/hooks/useLinks.hook'
import { useMarkdown } from '@/hooks/useMarkdown.hook'
@@ -53,12 +53,14 @@ export const useSpacedRepetitionCards = () => {
>(data.generateId(DataType.RepetitionCard, cardFile.path), {
$type: DataType.RepetitionCard,
level: 1,
- repeatDate: new Date()
+ repeatDate: new Date(),
+ needsReview: false
})
if (
isAfter(new Date(repetition.repeatDate), new Date()) ||
- repetition.level === MAX_LEVEL
+ repetition.level === MAX_LEVEL ||
+ repetition.needsReview
) {
continue
}
@@ -95,6 +97,7 @@ export const useSpacedRepetitionCards = () => {
await data.update({
...repetition,
+ needsReview: false,
level: Math.min(repetition.level + 1, MAX_LEVEL),
repeatDate: addDays(new Date(), 2 ** repetition.level)
})
@@ -113,10 +116,25 @@ export const useSpacedRepetitionCards = () => {
await data.update({
...repetition,
level,
+ needsReview: false,
repeatDate: addDays(new Date(), level)
})
}
+ const needsReview = async (cardId: string) => {
+ const repetition = await data.get(
+ cardId
+ )
+ if (!repetition) {
+ return
+ }
+
+ await data.update({
+ ...repetition,
+ needsReview: true
+ })
+ }
+
watch(
cards,
() =>
@@ -128,5 +146,11 @@ export const useSpacedRepetitionCards = () => {
watch(cardFiles, () => execute())
- return { cards, successRepetition, failRepetition, isLoading: !isReady }
+ return {
+ cards,
+ successRepetition,
+ failRepetition,
+ needsReview,
+ isLoading: !isReady
+ }
}
diff --git a/src/modules/card/models/RepetitionCard.ts b/src/modules/card/models/RepetitionCard.ts
index 1dd49f5..9dd9dc0 100644
--- a/src/modules/card/models/RepetitionCard.ts
+++ b/src/modules/card/models/RepetitionCard.ts
@@ -4,4 +4,5 @@ import { Model } from '@/data/models/Model'
export interface RepetitionCard extends Model {
level: number
repeatDate: Date
+ needsReview: boolean
}
diff --git a/tests/unit/modules/repo/services/resolvePath.spec.ts b/src/modules/repo/services/resolvePath.spec.ts
similarity index 95%
rename from tests/unit/modules/repo/services/resolvePath.spec.ts
rename to src/modules/repo/services/resolvePath.spec.ts
index 0aa1aa7..d2c49e7 100644
--- a/tests/unit/modules/repo/services/resolvePath.spec.ts
+++ b/src/modules/repo/services/resolvePath.spec.ts
@@ -1,5 +1,5 @@
-import { resolvePath } from '@/modules/repo/services/resolvePath'
import { describe, expect, it } from 'vitest'
+import { resolvePath } from './resolvePath'
describe('resolve path service', () => {
it('set the absolute path if path to resolve is empty', () => {
diff --git a/src/router/router.ts b/src/router/router.ts
index 668f46b..00226cc 100644
--- a/src/router/router.ts
+++ b/src/router/router.ts
@@ -43,6 +43,12 @@ const routes: Array = [
props: true,
component: () => import('@/views/SpacedRepetitionCard.vue')
},
+ {
+ path: '/:user/:repo/need-review-cards',
+ name: 'NeedReviewCards',
+ props: true,
+ component: () => import('@/views/NeedReviewCards.vue')
+ },
{
path: '/about',
name: 'About',
diff --git a/src/views/NeedReviewCards.vue b/src/views/NeedReviewCards.vue
new file mode 100644
index 0000000..08cf390
--- /dev/null
+++ b/src/views/NeedReviewCards.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+ needs review cards
+
+
+
+
diff --git a/src/views/SpacedRepetitionCard.vue b/src/views/SpacedRepetitionCard.vue
index 19cde71..671d398 100644
--- a/src/views/SpacedRepetitionCard.vue
+++ b/src/views/SpacedRepetitionCard.vue
@@ -8,7 +8,7 @@ defineProps<{
repo: string
}>()
-const { cards, isLoading, successRepetition, failRepetition } =
+const { cards, isLoading, successRepetition, failRepetition, needsReview } =
useSpacedRepetitionCards()
@@ -27,9 +27,13 @@ const { cards, isLoading, successRepetition, failRepetition } =
:cards="cards"
@success="successRepetition"
@fail="failRepetition"
+ @needs-review="needsReview"
/>
+
+ needs review cards
+
diff --git a/tsconfig.json b/tsconfig.json
index 92be9ea..066bcce 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,12 +18,6 @@
},
"lib": ["esnext", "dom", "dom.iterable", "scripthost", "ES2015"]
},
- "include": [
- "src/**/*.ts",
- "src/**/*.tsx",
- "src/**/*.vue",
- "tests/**/*.ts",
- "tests/**/*.tsx"
- ],
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],
"exclude": ["node_modules"]
}