message / frontend /src /stores /uiStore.ts
hunian
Refactor code structure for improved readability and maintainability
9ef8a08
Raw
History Blame Contribute Delete
1.14 kB
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
interface UIState {
sidebarOpen: boolean;
language: 'zh-CN' | 'en-US';
theme: 'light' | 'dark';
toggleSidebar: () => void;
setSidebarOpen: (open: boolean) => void;
setLanguage: (lang: 'zh-CN' | 'en-US') => void;
setTheme: (theme: 'light' | 'dark') => void;
}
// 初始化时检测屏幕宽度,小屏幕下默认关闭侧边栏
const getInitialSidebarState = () => {
if (typeof window !== 'undefined') {
return window.innerWidth >= 768; // md breakpoint
}
return true;
};
export const useUIStore = create<UIState>()(
persist(
(set) => ({
sidebarOpen: getInitialSidebarState(),
language: 'zh-CN',
theme: 'light',
toggleSidebar: () => set((state) => ({ sidebarOpen: !state.sidebarOpen })),
setSidebarOpen: (open) => set({ sidebarOpen: open }),
setLanguage: (language) => set({ language }),
setTheme: (theme) => set({ theme }),
}),
{
name: 'ui-storage',
partialize: (state) => ({
language: state.language,
theme: state.theme,
}),
}
)
);