Files
family_budget/frontend/src/store/useStore.ts
Arrelin c7b9a14ff6 revert 24f04a7e82
revert try to do better
2026-01-29 12:43:22 +00:00

68 lines
2.0 KiB
TypeScript

import { create } from 'zustand';
import type { Family, Category, User, FamilyMember, Theme, Locale } from '../types';
const getStoredPreferences = () => {
const theme = (localStorage.getItem('theme') as Theme) || 'light';
const locale = (localStorage.getItem('locale') as Locale) || 'ru';
return { theme, locale };
};
interface AppState {
user: User | null;
isAuthenticated: boolean;
isLoading: boolean;
selectedFamily: Family | null;
families: Family[];
categories: Category[];
familyMembers: FamilyMember[];
preferences: { theme: Theme; locale: Locale };
setUser: (user: User | null) => void;
setIsLoading: (loading: boolean) => void;
setSelectedFamily: (family: Family | null) => void;
setFamilies: (families: Family[]) => void;
setCategories: (categories: Category[]) => void;
setFamilyMembers: (members: FamilyMember[]) => void;
setPreferences: (prefs: Partial<{ theme: Theme; locale: Locale }>) => void;
logout: () => void;
}
export const useStore = create<AppState>((set) => ({
user: null,
isAuthenticated: false,
isLoading: true,
selectedFamily: null,
families: [],
categories: [],
familyMembers: [],
preferences: getStoredPreferences(),
setUser: (user) => set({ user, isAuthenticated: !!user }),
setIsLoading: (isLoading) => set({ isLoading }),
setSelectedFamily: (family) => set({ selectedFamily: family }),
setFamilies: (families) => set({ families }),
setCategories: (categories) => set({ categories }),
setFamilyMembers: (familyMembers) => set({ familyMembers }),
setPreferences: (prefs) => set((state) => {
const newPrefs = { ...state.preferences, ...prefs };
if (prefs.theme) localStorage.setItem('theme', prefs.theme);
if (prefs.locale) localStorage.setItem('locale', prefs.locale);
return { preferences: newPrefs };
}),
logout: () => set({
user: null,
isAuthenticated: false,
selectedFamily: null,
families: [],
categories: [],
familyMembers: [],
}),
}));