aboutsummaryrefslogtreecommitdiffstats
path: root/apps/mobile/lib
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-09-14 17:08:40 +0100
committerMohamedBassem <me@mbassem.com>2024-09-14 17:36:03 +0100
commit66fcf022695283268e80855365f10262ae6ec907 (patch)
tree07cc278b1476b9a868f6ecbf8cbfd9ea8ebf56f8 /apps/mobile/lib
parentb9c7857c5bb16d024fed6544eebf0ef6cd10390f (diff)
downloadkarakeep-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.ts18
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 },
+ }));
},
}));