import { ActivityIndicator, Text, View } from "react-native"; import BaseBackground from "../../components/BaseBackground"; import BaseButton, { BaseButtonProps } from "../../components/BaseButton"; import { useThemeStore } from "../../stores/ThemeStore"; import { AuthService } from "../../services/AuthService"; import { router } from "expo-router"; import { Ionicons } from "@expo/vector-icons"; import { SimpleHeader } from "../../components/Header"; import { THEMES } from "../../Themes"; import CustomTextInput from "../../components/CustomTextInput"; import { useCallback, useRef, useState } from "react"; import { CaldavConfigService } from "../../services/CaldavConfigService"; import { useCaldavConfigStore } from "../../stores"; const handleLogout = async () => { await AuthService.logout(); router.replace("/login"); }; const SettingsButton = (props: BaseButtonProps) => { return ( {props.children} ); }; type CaldavTextInputProps = { title: string; value: string; onValueChange: (text: string) => void; secureTextEntry?: boolean; }; const CaldavTextInput = ({ title, value, onValueChange, secureTextEntry, }: CaldavTextInputProps) => { const { theme } = useThemeStore(); return ( {title}: ); }; type Feedback = { text: string; isError: boolean; loading: boolean }; const FeedbackRow = ({ feedback }: { feedback: Feedback | null }) => { const { theme } = useThemeStore(); if (!feedback) return null; return ( {feedback.loading && ( )} {feedback.text} ); }; const CaldavSettings = () => { const { theme } = useThemeStore(); const { config, setConfig } = useCaldavConfigStore(); const [serverUrl, setServerUrl] = useState(config?.serverUrl ?? ""); const [username, setUsername] = useState(config?.username ?? ""); const [password, setPassword] = useState(config?.password ?? ""); const [saveFeedback, setSaveFeedback] = useState(null); const [syncFeedback, setSyncFeedback] = useState(null); const saveTimer = useRef | null>(null); const syncTimer = useRef | null>(null); const showFeedback = useCallback( ( setter: typeof setSaveFeedback, timer: typeof saveTimer, text: string, isError: boolean, loading = false, ) => { if (timer.current) clearTimeout(timer.current); setter({ text, isError, loading }); if (!loading) { timer.current = setTimeout(() => setter(null), 3000); } }, [], ); const saveConfig = async () => { showFeedback( setSaveFeedback, saveTimer, "Speichere Konfiguration...", false, true, ); try { const saved = await CaldavConfigService.saveConfig( serverUrl, username, password, ); setConfig(saved); showFeedback( setSaveFeedback, saveTimer, "Konfiguration wurde gespeichert", false, ); } catch { showFeedback( setSaveFeedback, saveTimer, "Fehler beim Speichern der Konfiguration", true, ); } }; const sync = async () => { showFeedback(setSyncFeedback, syncTimer, "Synchronisiere...", false, true); try { await CaldavConfigService.sync(); showFeedback( setSyncFeedback, syncTimer, "Synchronisierung erfolgreich", false, ); } catch { showFeedback( setSyncFeedback, syncTimer, "Fehler beim Synchronisieren", true, ); } }; return ( <> Caldav Config Save Sync ); }; const Settings = () => { const { theme, setTheme } = useThemeStore(); return ( {" "} Logout Select Theme { setTheme("defaultLight"); }} > Default Light { setTheme("defaultDark"); }} > Default Dark ); }; export default Settings;