obsidian-book-tracker/src/ui/stores/settings.svelte.ts

46 lines
934 B
TypeScript

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<void>;
}
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;
}