43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import i18n from '@/i18n/i18n';
|
|
import { create } from 'zustand';
|
|
import { SystemSettings } from '@/types/settings';
|
|
import { EnvConfigType } from '@/services/environment';
|
|
import { initDayjs } from '@/utils/time';
|
|
|
|
export type FontPanelView = 'main-fonts' | 'custom-fonts';
|
|
|
|
interface SettingsState {
|
|
settings: SystemSettings;
|
|
isSettingsDialogOpen: boolean;
|
|
isSettingsGlobal: boolean;
|
|
fontPanelView: FontPanelView;
|
|
setSettings: (settings: SystemSettings) => void;
|
|
saveSettings: (envConfig: EnvConfigType, settings: SystemSettings) => void;
|
|
setSettingsDialogOpen: (open: boolean) => void;
|
|
setSettingsGlobal: (global: boolean) => void;
|
|
setFontPanelView: (view: FontPanelView) => void;
|
|
|
|
applyUILanguage: (uiLanguage?: string) => void;
|
|
}
|
|
|
|
export const useSettingsStore = create<SettingsState>((set) => ({
|
|
settings: {} as SystemSettings,
|
|
isSettingsDialogOpen: false,
|
|
isSettingsGlobal: true,
|
|
fontPanelView: 'main-fonts',
|
|
setSettings: (settings) => set({ settings }),
|
|
saveSettings: async (envConfig: EnvConfigType, settings: SystemSettings) => {
|
|
const appService = await envConfig.getAppService();
|
|
await appService.saveSettings(settings);
|
|
},
|
|
setSettingsDialogOpen: (open) => set({ isSettingsDialogOpen: open }),
|
|
setSettingsGlobal: (global) => set({ isSettingsGlobal: global }),
|
|
setFontPanelView: (view) => set({ fontPanelView: view }),
|
|
|
|
applyUILanguage: (uiLanguage?: string) => {
|
|
const locale = uiLanguage ? uiLanguage : navigator.language;
|
|
i18n.changeLanguage(locale);
|
|
initDayjs(locale);
|
|
},
|
|
}));
|