aboutsummaryrefslogtreecommitdiffstats
path: root/apps/mobile/app/dashboard/(tabs)/settings.tsx
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2026-02-08 22:45:32 +0000
committerMohamed Bassem <me@mbassem.com>2026-02-09 00:17:31 +0000
commite455e46852900c6d2b3e77b7a77e1b9da41b2ca8 (patch)
tree2d2042bd43d704b6432332c1465619b4b907dc71 /apps/mobile/app/dashboard/(tabs)/settings.tsx
parent4186c4c64c68892248ce8671d9b8e67fc7f884a0 (diff)
downloadkarakeep-e455e46852900c6d2b3e77b7a77e1b9da41b2ca8.tar.zst
feat(mobile): more native screens
Diffstat (limited to 'apps/mobile/app/dashboard/(tabs)/settings.tsx')
-rw-r--r--apps/mobile/app/dashboard/(tabs)/settings.tsx176
1 files changed, 0 insertions, 176 deletions
diff --git a/apps/mobile/app/dashboard/(tabs)/settings.tsx b/apps/mobile/app/dashboard/(tabs)/settings.tsx
deleted file mode 100644
index ba38d9e6..00000000
--- a/apps/mobile/app/dashboard/(tabs)/settings.tsx
+++ /dev/null
@@ -1,176 +0,0 @@
-import { useEffect } from "react";
-import { ActivityIndicator, Pressable, Switch, View } from "react-native";
-import { Slider } from "react-native-awesome-slider";
-import { useSharedValue } from "react-native-reanimated";
-import Constants from "expo-constants";
-import { Link } from "expo-router";
-import { UserProfileHeader } from "@/components/settings/UserProfileHeader";
-import { Button } from "@/components/ui/Button";
-import ChevronRight from "@/components/ui/ChevronRight";
-import CustomSafeAreaView from "@/components/ui/CustomSafeAreaView";
-import { Divider } from "@/components/ui/Divider";
-import { Text } from "@/components/ui/Text";
-import { useServerVersion } from "@/lib/hooks";
-import { useSession } from "@/lib/session";
-import useAppSettings from "@/lib/settings";
-import { useQuery } from "@tanstack/react-query";
-
-import { useTRPC } from "@karakeep/shared-react/trpc";
-
-export default function Dashboard() {
- const { logout } = useSession();
- const {
- settings,
- setSettings,
- isLoading: isSettingsLoading,
- } = useAppSettings();
- const api = useTRPC();
-
- const imageQuality = useSharedValue(0);
- const imageQualityMin = useSharedValue(0);
- const imageQualityMax = useSharedValue(100);
-
- useEffect(() => {
- imageQuality.value = settings.imageQuality * 100;
- }, [settings]);
-
- const { data, error } = useQuery(api.users.whoami.queryOptions());
- const {
- data: serverVersion,
- isLoading: isServerVersionLoading,
- error: serverVersionError,
- } = useServerVersion();
-
- if (error?.data?.code === "UNAUTHORIZED") {
- logout();
- }
-
- return (
- <CustomSafeAreaView edges={["top"]}>
- <UserProfileHeader
- image={data?.image}
- name={data?.name}
- email={data?.email}
- />
- <View className="flex h-full w-full items-center gap-3 px-4 py-2">
- <View className="w-full rounded-xl bg-card py-2">
- <View className="flex flex-row items-center justify-between gap-8 px-4 py-1">
- <Link asChild href="/dashboard/settings/theme" className="flex-1">
- <Pressable className="flex flex-row justify-between">
- <Text>Theme</Text>
- <View className="flex flex-row items-center gap-2">
- <Text className="text-muted-foreground">
- {
- { light: "Light", dark: "Dark", system: "System" }[
- settings.theme
- ]
- }
- </Text>
- <ChevronRight />
- </View>
- </Pressable>
- </Link>
- </View>
- <Divider orientation="horizontal" className="mx-6 my-1" />
- <View className="flex flex-row items-center justify-between gap-8 px-4 py-1">
- <Link
- asChild
- href="/dashboard/settings/bookmark-default-view"
- className="flex-1"
- >
- <Pressable className="flex flex-row justify-between">
- <Text>Default Bookmark View</Text>
- <View className="flex flex-row items-center gap-2">
- {isSettingsLoading ? (
- <ActivityIndicator size="small" />
- ) : (
- <Text className="text-muted-foreground">
- {settings.defaultBookmarkView === "reader"
- ? "Reader"
- : "Browser"}
- </Text>
- )}
- <ChevronRight />
- </View>
- </Pressable>
- </Link>
- </View>
- <Divider orientation="horizontal" className="mx-6 my-1" />
- <View className="flex flex-row items-center justify-between gap-8 px-4 py-1">
- <Link
- asChild
- href="/dashboard/settings/reader-settings"
- className="flex-1"
- >
- <Pressable className="flex flex-row justify-between">
- <Text>Reader Text Settings</Text>
- <ChevronRight />
- </Pressable>
- </Link>
- </View>
- <Divider orientation="horizontal" className="mx-6 my-1" />
- <View className="flex flex-row items-center justify-between gap-8 px-4 py-1">
- <Text className="flex-1" numberOfLines={1}>
- Show notes in bookmark card
- </Text>
- <Switch
- className="shrink-0"
- value={settings.showNotes}
- onValueChange={(value) =>
- setSettings({
- ...settings,
- showNotes: value,
- })
- }
- />
- </View>
- </View>
-
- <View className="w-full rounded-xl bg-card py-2">
- <View className="flex w-full flex-row items-center justify-between gap-8 px-4 py-1">
- <Text>Upload Image Quality</Text>
- <View className="flex flex-1 flex-row items-center justify-center gap-2">
- <Text className="text-foreground">
- {Math.round(settings.imageQuality * 100)}%
- </Text>
- <Slider
- onSlidingComplete={(value) =>
- setSettings({
- ...settings,
- imageQuality: Math.round(value) / 100,
- })
- }
- progress={imageQuality}
- minimumValue={imageQualityMin}
- maximumValue={imageQualityMax}
- />
- </View>
- </View>
- </View>
- <Button
- androidRootClassName="w-full"
- onPress={logout}
- variant="destructive"
- >
- <Text>Log Out</Text>
- </Button>
- <View className="mt-4 w-full gap-1">
- <Text className="text-center text-sm text-muted-foreground">
- {isSettingsLoading ? "Loading..." : settings.address}
- </Text>
- <Text className="text-center text-sm text-muted-foreground">
- App Version: {Constants.expoConfig?.version ?? "unknown"}
- </Text>
- <Text className="text-center text-sm text-muted-foreground">
- Server Version:{" "}
- {isServerVersionLoading
- ? "Loading..."
- : serverVersionError
- ? "unavailable"
- : (serverVersion ?? "unknown")}
- </Text>
- </View>
- </View>
- </CustomSafeAreaView>
- );
-}