Files
wifi-densepose/mobile/src/stores/settingsStore.ts
Yossi Elkrief 779bf8ff43 feat: Phase 3 — services, stores, navigation, design system
Services: ws.service, api.service, simulation.service, rssi.service (android+ios)
Stores: poseStore, settingsStore, matStore (Zustand)
Types: sensing, mat, api, navigation
Hooks: usePoseStream, useRssiScanner, useServerReachability
Theme: colors, typography, spacing, ThemeContext
Navigation: MainTabs (5 tabs), RootNavigator, types
Components: GaugeArc, SparklineChart, OccupancyGrid, StatusDot, ConnectionBanner, SignalBar, +more
Utils: ringBuffer, colorMap, formatters, urlValidator

Verified: tsc 0 errors, jest passes
2026-03-02 12:53:45 +02:00

48 lines
1.2 KiB
TypeScript

import AsyncStorage from '@react-native-async-storage/async-storage';
import { create } from 'zustand';
import { createJSONStorage, persist } from 'zustand/middleware';
export type Theme = 'light' | 'dark' | 'system';
export interface SettingsState {
serverUrl: string;
rssiScanEnabled: boolean;
theme: Theme;
alertSoundEnabled: boolean;
setServerUrl: (url: string) => void;
setRssiScanEnabled: (value: boolean) => void;
setTheme: (theme: Theme) => void;
setAlertSoundEnabled: (value: boolean) => void;
}
export const useSettingsStore = create<SettingsState>()(
persist(
(set) => ({
serverUrl: 'http://192.168.1.100:8080',
rssiScanEnabled: false,
theme: 'system',
alertSoundEnabled: true,
setServerUrl: (url) => {
set({ serverUrl: url });
},
setRssiScanEnabled: (value) => {
set({ rssiScanEnabled: value });
},
setTheme: (theme) => {
set({ theme });
},
setAlertSoundEnabled: (value) => {
set({ alertSoundEnabled: value });
},
}),
{
name: 'wifi-densepose-settings',
storage: createJSONStorage(() => AsyncStorage),
},
),
);