import React, { useState, useEffect, useRef } from "react"; import { Modal, View, Text, TextInput, StyleSheet, Pressable, useColorScheme, } from "react-native"; import { SettingsManager } from "@/services/storage"; import { moonTVApi } from "@/services/api"; import { ThemedText } from "./ThemedText"; import { ThemedView } from "./ThemedView"; interface SettingsModalProps { visible: boolean; onCancel: () => void; onSave: () => void; } export const SettingsModal: React.FC = ({ visible, onCancel, onSave, }) => { const [apiUrl, setApiUrl] = useState(""); const [isInputFocused, setIsInputFocused] = useState(false); const colorScheme = useColorScheme(); const inputRef = useRef(null); useEffect(() => { if (visible) { SettingsManager.get().then((settings) => { setApiUrl(settings.apiBaseUrl); }); const timer = setTimeout(() => { inputRef.current?.focus(); }, 200); return () => clearTimeout(timer); } }, [visible]); const handleSave = async () => { await SettingsManager.save({ apiBaseUrl: apiUrl }); moonTVApi.setBaseUrl(apiUrl); onSave(); }; const styles = StyleSheet.create({ modalContainer: { flex: 1, justifyContent: "center", alignItems: "center", backgroundColor: "rgba(0, 0, 0, 0.6)", }, modalContent: { width: "80%", maxWidth: 500, padding: 24, borderRadius: 12, elevation: 10, }, title: { fontSize: 24, fontWeight: "bold", marginBottom: 20, textAlign: "center", }, input: { height: 50, borderWidth: 2, borderRadius: 8, paddingHorizontal: 15, fontSize: 16, marginBottom: 24, backgroundColor: colorScheme === "dark" ? "#3a3a3c" : "#f0f0f0", color: colorScheme === "dark" ? "white" : "black", borderColor: "transparent", }, inputFocused: { borderColor: "#007AFF", shadowColor: "#007AFF", shadowOffset: { width: 0, height: 0 }, shadowOpacity: 0.8, shadowRadius: 10, elevation: 5, }, buttonContainer: { flexDirection: "row", justifyContent: "space-around", }, button: { flex: 1, paddingVertical: 12, borderRadius: 8, alignItems: "center", marginHorizontal: 8, }, buttonSave: { backgroundColor: "#007AFF", }, buttonCancel: { backgroundColor: colorScheme === "dark" ? "#444" : "#ccc", }, buttonText: { color: "white", fontSize: 18, fontWeight: "500", }, focusedButton: { transform: [{ scale: 1.05 }], shadowColor: "#000", shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.3, shadowRadius: 5, elevation: 8, }, }); return ( 设置 setIsInputFocused(true)} onBlur={() => setIsInputFocused(false)} /> [ styles.button, styles.buttonCancel, focused && styles.focusedButton, ]} onPress={onCancel} > 取消 [ styles.button, styles.buttonSave, focused && styles.focusedButton, ]} onPress={handleSave} > 保存 ); };