File size: 1,639 Bytes
bbb1195 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { create } from 'zustand';
import { AppConfig } from '../types/config';
import * as configService from '../services/configService';
interface ConfigState {
config: AppConfig | null;
loading: boolean;
error: string | null;
// Actions
loadConfig: () => Promise<void>;
saveConfig: (config: AppConfig) => Promise<void>;
updateTheme: (theme: string) => Promise<void>;
updateLanguage: (language: string) => Promise<void>;
}
export const useConfigStore = create<ConfigState>((set, get) => ({
config: null,
loading: false,
error: null,
loadConfig: async () => {
set({ loading: true, error: null });
try {
const config = await configService.loadConfig();
set({ config, loading: false });
} catch (error) {
set({ error: String(error), loading: false });
}
},
saveConfig: async (config: AppConfig) => {
set({ loading: true, error: null });
try {
await configService.saveConfig(config);
set({ config, loading: false });
} catch (error) {
set({ error: String(error), loading: false });
throw error;
}
},
updateTheme: async (theme: string) => {
const { config } = get();
if (!config) return;
const newConfig = { ...config, theme };
await get().saveConfig(newConfig);
},
updateLanguage: async (language: string) => {
const { config } = get();
if (!config) return;
const newConfig = { ...config, language };
await get().saveConfig(newConfig);
},
}));
|