import type BookTrackerPlugin from "@src/main"; import { type BookTrackerSettings, DEFAULT_SETTINGS } from "../settings/types"; import { getContext, setContext } from "svelte"; interface SettingsStore { settings: BookTrackerSettings; load(): Promise; } export function createSettings(plugin: BookTrackerPlugin) { let settings = $state(plugin.settings); $effect(() => { if (settings === DEFAULT_SETTINGS) { return; } plugin.settings = settings; plugin.saveSettings(); }); return { get settings() { return settings; }, async load() { const newSettings = await plugin.loadData(); settings = { ...settings, ...newSettings, }; }, }; } const SETTINGS_KEY = Symbol("settings"); export function setSettingsContext(state: SettingsStore) { setContext(SETTINGS_KEY, state); } export function getSettingsContext(): SettingsStore { return getContext(SETTINGS_KEY) as SettingsStore; }