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);