import React, { useState, useEffect, useRef } from 'react'; import { Modal, View, Text, TextInput, StyleSheet, Pressable, useColorScheme } from 'react-native'; import { SettingsManager } from '@/services/storage'; import { api } 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 }); api.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} > 保存 ); };