store/themeStore.ts
Annotation non disponible
Lance npm run annotate (nécessite ANTHROPIC_API_KEY dans .env.local) pour générer une annotation française par Claude Haiku 4.5.
1 export
useThemeStore
Code source· typescript
import { create } from 'zustand';
import * as SecureStore from 'expo-secure-store';
type ThemeMode = 'system' | 'light' | 'dark';
type ThemeStore = {
mode: ThemeMode;
hydrated: boolean;
setMode: (mode: ThemeMode) => void;
hydrate: () => Promise<void>;
};
const THEME_KEY = 'wari_theme_mode';
export const useThemeStore = create<ThemeStore>((set) => ({
mode: 'system',
hydrated: false,
setMode: (mode) => {
set({ mode });
SecureStore.setItemAsync(THEME_KEY, mode).catch(() => {});
},
hydrate: async () => {
try {
const saved = await SecureStore.getItemAsync(THEME_KEY);
if (saved === 'light' || saved === 'dark' || saved === 'system') {
set({ mode: saved });
}
} catch {}
set({ hydrated: true });
},
}));
import { create } from 'zustand';
import * as SecureStore from 'expo-secure-store';
type ThemeMode = 'system' | 'light' | 'dark';
type ThemeStore = {
mode: ThemeMode;
hydrated: boolean;
setMode: (mode: ThemeMode) => void;
hydrate: () => Promise<void>;
};
const THEME_KEY = 'wari_theme_mode';
export const useThemeStore = create<ThemeStore>((set) => ({
mode: 'system',
hydrated: false,
setMode: (mode) => {
set({ mode });
SecureStore.setItemAsync(THEME_KEY, mode).catch(() => {});
},
hydrate: async () => {
try {
const saved = await SecureStore.getItemAsync(THEME_KEY);
if (saved === 'light' || saved === 'dark' || saved === 'system') {
set({ mode: saved });
}
} catch {}
set({ hydrated: true });
},
}));