import React, { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, FormControlLabel, Switch, Typography, Box, Select, MenuItem, FormControl, InputLabel, Alert } from '@mui/material'; import { useAuth } from '../contexts/AuthContext'; import client from '../api/client'; const SettingsModal = ({ open, onClose }) => { const { user, refreshUser } = useAuth(); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); // Default preferences const [preferences, setPreferences] = useState({ tts_provider: 'elevenlabs', auto_play_tts: false }); useEffect(() => { if (open && user?.preferences) { setPreferences(prev => ({ ...prev, ...user.preferences })); setError(null); setSuccess(false); } }, [open, user]); const handleChange = (prop) => (event) => { const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value; setPreferences(prev => ({ ...prev, [prop]: value })); setSuccess(false); }; const handleSave = async () => { setLoading(true); setError(null); try { await client.put('/api/auth/preferences', preferences); // Refresh user data to get updated preferences await refreshUser(); setSuccess(true); setTimeout(() => { if (open) onClose(); }, 1000); } catch (err) { console.error('Failed to save settings:', err); setError('Failed to save settings. Please try again.'); } finally { setLoading(false); } }; return ( User Settings {error && {error}} {success && Settings saved successfully!} Text-to-Speech (Voice) TTS Provider } label={ Auto-play Responses Automatically read out assistant messages } sx={{ mt: 2 }} /> ); }; export default SettingsModal;