From 1d21ac50b267fb7389d6b254595042b6b0d5d91a Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Mon, 11 Sep 2023 23:02:35 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(user=20settings)=20cache?= =?UTF-8?q?=20user=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/DataType.enum.ts | 3 +- src/data/data.ts | 1 + src/modules/repo/interfaces/UserSettings.ts | 5 ++- src/modules/repo/store/userRepo.store.ts | 37 ++++++++++++++++----- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/data/DataType.enum.ts b/src/data/DataType.enum.ts index 845864d..71c2048 100644 --- a/src/data/DataType.enum.ts +++ b/src/data/DataType.enum.ts @@ -4,5 +4,6 @@ export enum DataType { Note = 'Note', BacklinkNote = 'BacklinkNote', RepetitionCard = 'RepetitionCard', - History = 'History' + History = 'History', + UserSettings = 'UserSettings' } diff --git a/src/data/data.ts b/src/data/data.ts index 8b29a3a..b8f4211 100644 --- a/src/data/data.ts +++ b/src/data/data.ts @@ -50,6 +50,7 @@ class Data { return result?.ok ?? false } } + const result = await this.locale?.put(model) return result?.ok ?? false } catch (error) { diff --git a/src/modules/repo/interfaces/UserSettings.ts b/src/modules/repo/interfaces/UserSettings.ts index 028cb1c..5b55319 100644 --- a/src/modules/repo/interfaces/UserSettings.ts +++ b/src/modules/repo/interfaces/UserSettings.ts @@ -1,4 +1,7 @@ -export interface UserSettings { +import { DataType } from '@/data/DataType.enum' +import { Model } from '@/data/models/Model' + +export interface UserSettings extends Model { fontFamily?: | 'Courgette' | 'IBM Plex Serif' diff --git a/src/modules/repo/store/userRepo.store.ts b/src/modules/repo/store/userRepo.store.ts index d54a865..f726d3b 100644 --- a/src/modules/repo/store/userRepo.store.ts +++ b/src/modules/repo/store/userRepo.store.ts @@ -1,5 +1,7 @@ import { defineStore } from 'pinia' +import { data } from '@/data/data' +import { DataType } from '@/data/DataType.enum' import { RepoFile } from '@/modules/repo/interfaces/RepoFile' import { UserSettings } from '@/modules/repo/interfaces/UserSettings' import { @@ -32,10 +34,10 @@ export const useUserRepoStore = defineStore({ needToLogin: false }), actions: { - async setUserRepo(newUser: string, newRepo: string) { + async setUserRepo(user: string, repo: string) { this.isReadmeOffline = true - this.user = newUser - this.repo = newRepo + this.user = user + this.repo = repo try { await refreshToken() @@ -43,18 +45,37 @@ export const useUserRepoStore = defineStore({ console.warn('impossible to refresh token') } - getFiles(newUser, newRepo) + const userSettingsId = `UserSetting-${user}-${repo}` + const cachedUserSettings = await data.get< + DataType.UserSettings, + UserSettings + >(userSettingsId) + + if (cachedUserSettings) { + this.userSettings = cachedUserSettings + } + + getFiles(user, repo) .then((files) => { this.files = files - return getUserSettingsContent(newUser, newRepo, files) + return getUserSettingsContent(user, repo, files) }) - .then((userSettings) => (this.userSettings = userSettings)) + .then((userSettings) => { + this.userSettings = userSettings - getCachedMainReadme(newUser, newRepo) + if (userSettings) { + data.update({ + ...userSettings, + _id: userSettingsId + }) + } + }) + + getCachedMainReadme(user, repo) .then((readme) => { this.readme = readme }) - .then(() => getMainReadme(newUser, newRepo)) + .then(() => getMainReadme(user, repo)) .then((readme) => { this.readme = readme