generated from tpl/obsidian-sample-plugin
46 lines
934 B
TypeScript
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;
|
|
}
|