personal account

This commit is contained in:
arrelin
2026-01-23 12:51:34 +03:00
parent 24bd4aade4
commit b18f69ea62
15 changed files with 688 additions and 12 deletions

View File

@@ -1,5 +1,11 @@
import { create } from 'zustand';
import type { Family, Category, User } from '../types';
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;
@@ -8,12 +14,16 @@ interface AppState {
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;
}
@@ -24,6 +34,8 @@ export const useStore = create<AppState>((set) => ({
selectedFamily: null,
families: [],
categories: [],
familyMembers: [],
preferences: getStoredPreferences(),
setUser: (user) => set({ user, isAuthenticated: !!user }),
@@ -35,11 +47,21 @@ export const useStore = create<AppState>((set) => ({
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: []
categories: [],
familyMembers: [],
}),
}));