personal account
This commit is contained in:
@@ -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: [],
|
||||
}),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user