From 00a37d80baff59b57fec2bd475ab7de531580199 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 3 Sep 2023 17:58:56 -0700 Subject: feat(stores): settings store for all settings --- src/stores/settings.ts | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/stores/settings.ts (limited to 'src/stores/settings.ts') diff --git a/src/stores/settings.ts b/src/stores/settings.ts new file mode 100644 index 00000000..30f1c34d --- /dev/null +++ b/src/stores/settings.ts @@ -0,0 +1,68 @@ +import { browser } from '$app/environment'; +import { writable } from 'svelte/store'; + +interface Settings { + // cacheMangaMinutes: number; + // cacheMinutes: number; + closeAnimeByDefault: boolean; + closeMangaByDefault: boolean; + displayNotStarted: boolean; + displayUnresolved: boolean; + roundDownChapters: boolean; + sortByDifference: boolean; +} + +const defaultSettings: Settings = { + // cacheMangaMinutes: 60, + // cacheMinutes: 30, + closeAnimeByDefault: false, + closeMangaByDefault: false, + displayNotStarted: false, + displayUnresolved: false, + roundDownChapters: true, + sortByDifference: false +}; + +const createStore = () => { + const { subscribe, set, update } = writable(defaultSettings); + + return { + subscribe, + set, + update, + reset: () => set(defaultSettings), + get: () => { + const settings = JSON.parse( + browser + ? localStorage.getItem('settings') ?? JSON.stringify(defaultSettings) + : JSON.stringify(defaultSettings) + ); + const keys = Object.keys(defaultSettings); + const settingsKeys = Object.keys(settings); + + if (keys.length !== settingsKeys.length) { + return defaultSettings; + } + + for (const key of keys) { + if (!settingsKeys.includes(key)) { + return defaultSettings; + } + } + + return settings; + }, + setKey: (key: keyof Settings, value: any) => + update((settings) => ({ ...settings, [key]: value })) + }; +}; + +const settings = createStore(); + +settings.subscribe((value) => { + if (browser) { + localStorage.setItem('settings', JSON.stringify(value)); + } +}); + +export default settings; -- cgit v1.2.3