import { useEffect } from "react";
import {
ActivityIndicator,
Pressable,
ScrollView,
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 ChevronRight from "@/components/ui/ChevronRight";
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";
function SectionHeader({ title }: { title: string }) {
return (
{title}
);
}
export default function Settings() {
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 (
Theme
{
{ light: "Light", dark: "Dark", system: "System" }[
settings.theme
]
}
Default Bookmark View
{isSettingsLoading ? (
) : (
{settings.defaultBookmarkView === "reader"
? "Reader"
: "Browser"}
)}
Reader Text Settings
Show notes in bookmark card
setSettings({
...settings,
showNotes: value,
})
}
/>
Upload Image Quality
{Math.round(settings.imageQuality * 100)}%
setSettings({
...settings,
imageQuality: Math.round(value) / 100,
})
}
progress={imageQuality}
minimumValue={imageQualityMin}
maximumValue={imageQualityMax}
/>
Log Out
Server
{isSettingsLoading ? "Loading..." : settings.address}
App Version
{Constants.expoConfig?.version ?? "unknown"}
Server Version
{isServerVersionLoading
? "Loading..."
: serverVersionError
? "unavailable"
: (serverVersion ?? "unknown")}
);
}