diff options
| author | MohamedBassem <me@mbassem.com> | 2024-09-14 17:08:40 +0100 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-09-14 17:36:03 +0100 |
| commit | 66fcf022695283268e80855365f10262ae6ec907 (patch) | |
| tree | 07cc278b1476b9a868f6ecbf8cbfd9ea8ebf56f8 /apps/mobile/lib | |
| parent | b9c7857c5bb16d024fed6544eebf0ef6cd10390f (diff) | |
| download | karakeep-66fcf022695283268e80855365f10262ae6ec907.tar.zst | |
feature(mobile): Add settings page for configuring the theme
Diffstat (limited to 'apps/mobile/lib')
| -rw-r--r-- | apps/mobile/lib/settings.ts | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/apps/mobile/lib/settings.ts b/apps/mobile/lib/settings.ts index 085f4f01..58b0817f 100644 --- a/apps/mobile/lib/settings.ts +++ b/apps/mobile/lib/settings.ts @@ -9,6 +9,7 @@ const zSettingsSchema = z.object({ apiKeyId: z.string().optional(), address: z.string(), imageQuality: z.number().optional().default(0.2), + theme: z.enum(["light", "dark", "system"]).optional().default("system"), }); export type Settings = z.infer<typeof zSettingsSchema>; @@ -22,7 +23,7 @@ interface AppSettingsState { const useSettings = create<AppSettingsState>((set, get) => ({ settings: { isLoading: true, - settings: { address: "", imageQuality: 0.2 }, + settings: { address: "", imageQuality: 0.2, theme: "system" }, }, setSettings: async (settings) => { await SecureStore.setItemAsync(SETTING_NAME, JSON.stringify(settings)); @@ -39,9 +40,18 @@ const useSettings = create<AppSettingsState>((set, get) => ({ })); return; } - // TODO Wipe the state if invalid - const parsed = zSettingsSchema.parse(JSON.parse(strVal)); - set((_state) => ({ settings: { isLoading: false, settings: parsed } })); + const parsed = zSettingsSchema.safeParse(JSON.parse(strVal)); + if (!parsed.success) { + // Wipe the state if invalid + set((state) => ({ + settings: { isLoading: false, settings: state.settings.settings }, + })); + return; + } + + set((_state) => ({ + settings: { isLoading: false, settings: parsed.data }, + })); }, })); |
