Files
MyNote/apps/desktop/src/renderer/features/settings/settings-store.ts
T

39 lines
1.3 KiB
TypeScript

import { create } from 'zustand';
import { applyTheme } from '../appearance/themes';
export interface Settings {
fontSize: number; // 12-20
fontFamily: string;
autoSaveInterval: number; // 秒 1-30,真实生效
showLineNumbers: boolean; // 代码块行号,真实生效
wordWrap: boolean; // 自动换行,真实生效
confirmDelete: boolean; // 删除前确认,真实生效
}
const DEFAULTS: Settings = {
fontSize: 14,
fontFamily: 'Consolas, monospace',
autoSaveInterval: 1,
showLineNumbers: false,
wordWrap: true,
confirmDelete: true,
};
const KEY = 'dsh-settings';
function load(): Settings {
try { const raw = localStorage.getItem(KEY); if (raw) return { ...DEFAULTS, ...JSON.parse(raw) }; } catch {}
return DEFAULTS;
}
interface SettingsState extends Settings {
set: <K extends keyof Settings>(key: K, value: Settings[K]) => void;
persist: () => void;
}
export const useSettings = create<SettingsState>((set, get) => ({
...load(),
set: (key, value) => { set({ [key]: value } as any); get().persist(); },
persist: () => { try { localStorage.setItem(KEY, JSON.stringify({ fontSize: get().fontSize, fontFamily: get().fontFamily, autoSaveInterval: get().autoSaveInterval, showLineNumbers: get().showLineNumbers, wordWrap: get().wordWrap, confirmDelete: get().confirmDelete })); } catch {} },
}));