diff --git a/src/hooks/useFile.hook.ts b/src/hooks/useFile.hook.ts index c0f345d..84a45f1 100644 --- a/src/hooks/useFile.hook.ts +++ b/src/hooks/useFile.hook.ts @@ -1,8 +1,8 @@ -import { ref } from 'vue' import { useMarkdown } from '@/hooks/useMarkdown.hook' import { useNoteCache } from '@/modules/note/hooks/useNoteCache' -import { useUserRepoStore } from '@/modules/repo/store/userRepo.store' import { getFileContent } from '@/modules/repo/services/repo' +import { useUserRepoStore } from '@/modules/repo/store/userRepo.store' +import { ref } from 'vue' export const useFile = (sha: string, retrieveContent = true) => { const { render } = useMarkdown(sha) @@ -47,6 +47,7 @@ export const useFile = (sha: string, retrieveContent = true) => { if (!contentFile) { return null } + saveCacheNote(contentFile) return contentFile } diff --git a/src/modules/note/hooks/useNoteCache.ts b/src/modules/note/hooks/useNoteCache.ts index 1f86f96..ccb31c1 100644 --- a/src/modules/note/hooks/useNoteCache.ts +++ b/src/modules/note/hooks/useNoteCache.ts @@ -1,30 +1,22 @@ import { data } from '@/data/data' import { DataType } from '@/data/DataType.enum' import { Note } from '@/modules/note/models/Note' -import { useAsyncState } from '@vueuse/core' -import { computed } from 'vue' export const useNoteCache = (sha: string) => { - const noteId = computed(() => data.generateId(DataType.Note, sha)) - const getCachedNote = async () => data.get(noteId.value) - - const cachedNote = useAsyncState(getCachedNote, null) + const noteId = data.generateId(DataType.Note, sha) + const getCachedNote = async () => data.get(noteId) const saveCacheNote = async (content: string) => { const newNote: Note = { - _id: noteId.value, + _id: noteId, $type: DataType.Note, content } await data.update(newNote) - - await cachedNote.execute() } return { - cachedNote: cachedNote.state, - isReady: cachedNote.isReady, getCachedNote, saveCacheNote } diff --git a/src/modules/repo/services/repo.ts b/src/modules/repo/services/repo.ts index 460f3fb..fec8531 100644 --- a/src/modules/repo/services/repo.ts +++ b/src/modules/repo/services/repo.ts @@ -37,6 +37,22 @@ export const getFiles = async ( return treeResponse?.data.tree.filter((t) => t.type === 'blob') ?? [] } +export const getCachedMainReadme = async (owner: string, repo: string) => { + if (!owner || !repo) { + return null + } + const { render } = useMarkdown() + + const { getCachedNote } = useNoteCache(`${owner}-${repo}-README`) + const cachedReadme = await getCachedNote() + + if (!cachedReadme) { + return null + } + + return render(cachedReadme.content) +} + export const getMainReadme = async (owner: string, repo: string) => { if (!owner || !repo) { return null @@ -47,8 +63,6 @@ export const getMainReadme = async (owner: string, repo: string) => { `${owner}-${repo}-README` ) - const cachedReadme = await getCachedNote() - try { const octokit = await getOctokit() @@ -63,6 +77,8 @@ export const getMainReadme = async (owner: string, repo: string) => { } } catch (error) { console.warn(error) + const cachedReadme = await getCachedNote() + if (cachedReadme) { return render(cachedReadme.content) } diff --git a/src/modules/repo/store/userRepo.store.ts b/src/modules/repo/store/userRepo.store.ts index 2da6349..e77a709 100644 --- a/src/modules/repo/store/userRepo.store.ts +++ b/src/modules/repo/store/userRepo.store.ts @@ -1,6 +1,7 @@ import { RepoFile } from '@/modules/repo/interfaces/RepoFile' import { UserSettings } from '@/modules/repo/interfaces/UserSettings' import { + getCachedMainReadme, getFiles, getMainReadme, getUserSettingsContent @@ -36,14 +37,20 @@ export const useUserRepoStore = defineStore({ } catch (error) { console.warn('impossible to refresh token') } + const [cachedReadme] = await Promise.all([ + getCachedMainReadme(newUser, newRepo) + ]) + + this.readme = cachedReadme + const [readme, files] = await Promise.all([ getMainReadme(newUser, newRepo), getFiles(newUser, newRepo) ]) - this.userSettings = await getUserSettingsContent(newUser, newRepo, files) - this.readme = readme this.files = files + + this.userSettings = await getUserSettingsContent(newUser, newRepo, files) }, resetUserRepo() { this.user = ''