ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto
1import { create } from "zustand"; 2import { persist, createJSONStorage } from "zustand/middleware"; 3import { DEFAULT_SETTINGS, UserSettings } from "../types/settings"; 4 5interface SettingsStore { 6 settings: UserSettings; 7 isLoading: boolean; 8 updateSettings: (newSettings: Partial<UserSettings>) => void; 9 resetSettings: () => void; 10 setIsLoading: (loading: boolean) => void; 11} 12 13export const useSettingsStore = create<SettingsStore>()( 14 persist( 15 (set) => ({ 16 settings: DEFAULT_SETTINGS, 17 isLoading: true, 18 19 updateSettings: (newSettings) => 20 set((state) => ({ 21 settings: { ...state.settings, ...newSettings }, 22 })), 23 24 resetSettings: () => 25 set({ 26 settings: DEFAULT_SETTINGS, 27 }), 28 29 setIsLoading: (loading) => set({ isLoading: loading }), 30 }), 31 { 32 name: "atlast-settings", 33 storage: createJSONStorage(() => { 34 // SSR-safe storage 35 if (typeof window === "undefined") { 36 return { 37 getItem: () => null, 38 setItem: () => {}, 39 removeItem: () => {}, 40 }; 41 } 42 return window.localStorage; 43 }), 44 // Called after rehydration from storage 45 onRehydrateStorage: () => (state) => { 46 if (state) { 47 state.setIsLoading(false); 48 } 49 }, 50 }, 51 ), 52);