import React, { useState, useEffect } from "react"; import { View, Text, TextInput, StyleSheet } from "react-native"; import { Settings } from "@/app/lib/settings"; import { Picker } from "@react-native-picker/picker"; import { LanguageServer, language_matrix, } from "@/app/i18n/api"; const LIBRETRANSLATE_BASE_URL = "https://translate.argosopentech.com/translate"; const SettingsComponent = () => { const [hostLanguage, setHostLanguage] = useState(null); const [libretranslateBaseUrl, setLibretranslateBaseUrl] = useState< string | null >(null); const [languageOptions, setLanguageOptions] = useState< language_matrix | undefined >(); const [langServerConn, setLangServerConn] = useState<{ success: boolean; error?: string; } | null>(null); useEffect(() => { (async function () { const settings = await Settings.getDefault(); setHostLanguage((await settings.getHostLanguage()) || "en"); setLibretranslateBaseUrl( (await settings.getLibretranslateBaseUrl()) || LIBRETRANSLATE_BASE_URL ); })(); }); const handleHostLanguageChange = async (lang: string) => { const settings = await Settings.getDefault(); setHostLanguage(lang); await settings.setHostLanguage(lang); }; const handleLibretranslateBaseUrlChange = async (url: string) => { const settings = await Settings.getDefault(); setLibretranslateBaseUrl(url); await settings.setLibretranslateBaseUrl(url); checkLangServerConnection(url); }; const checkLangServerConnection = async (baseUrl: string) => { try { // Replace with actual connection check logic const testResult = await fetch(baseUrl, { method: "HEAD", }); if (testResult.status !== 200) { setLangServerConn({ success: true, error: testResult.statusText }); } } catch (error) { setLangServerConn({ success: false, error: `${error}` }); } }; return hostLanguage && libretranslateBaseUrl ? ( Host Language: { {languageOptions && Object.entries(languageOptions).map(([key, value]) => { return ; })} } LibreTranslate Base URL: {langServerConn && (langServerConn.success ? ( Success connecting to {libretranslateBaseUrl} ) : ( Error connecting to {libretranslateBaseUrl}: {langServerConn.error} ))} ) : ( Loading ... ); }; // Create styles for the component const styles = StyleSheet.create({ downloadButtonWrapper: { flexDirection: "row", }, downloadButton: { backgroundColor: "#236b9f", padding: 20, margin: 10, flex: 1, flexDirection: "column", alignItems: "center", }, deleteButton: { backgroundColor: "darkred", flex: 1, flexDirection: "column", padding: 10, margin: 10, height: 50, }, pauseDownloadButton: { backgroundColor: "#444444", padding: 10, margin: 10, height: 50, }, buttonText: { color: "#fff", // flex: 1, // fontSize: 16, // alignSelf: "center", // textAlign: "center", // textAlignVertical: "top", }, container: { flex: 1, padding: 20, }, label: { fontSize: 16, marginBottom: 8, }, input: { height: 40, borderColor: "gray", borderWidth: 1, marginBottom: 20, paddingHorizontal: 8, }, }); export default SettingsComponent;