import React, { useState, useEffect } from 'react'; import { X, Save, Lock, User, CheckCircle, AlertCircle, Info } from 'lucide-react'; import { Button } from './Button'; import { supabase, isSupabaseConfigured } from '../lib/supabaseClient'; import { useAuth } from '../context/AuthContext'; interface UserProfile { id: string; email: string; first_name?: string; last_name?: string; date_of_birth: string; } interface SettingsModalProps { isOpen: boolean; onClose: () => void; userProfile: UserProfile | null; onUpdate: () => void; } export const SettingsModal: React.FC = ({ isOpen, onClose, userProfile, onUpdate }) => { const { user, refreshDemoUser } = useAuth(); const [activeTab, setActiveTab] = useState<'profile' | 'security'>('profile'); const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [dateOfBirth, setDateOfBirth] = useState(''); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [loading, setLoading] = useState(false); const [message, setMessage] = useState<{type: 'success' | 'error', text: string} | null>(null); useEffect(() => { if (isOpen && userProfile) { setFirstName(userProfile.first_name || ''); setLastName(userProfile.last_name || ''); setDateOfBirth(userProfile.date_of_birth || ''); setNewPassword(''); setConfirmPassword(''); setMessage(null); setActiveTab('profile'); } }, [isOpen, userProfile]); const commonInputStyles = "w-full px-4 py-3 rounded-xl border border-gray-300 focus:ring-4 focus:ring-primary/10 focus:border-primary outline-none transition-all bg-white text-black font-medium shadow-sm"; const handleUpdateProfile = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setMessage(null); if (!user) return; try { if (!isSupabaseConfigured) { await new Promise(resolve => setTimeout(resolve, 800)); setMessage({ type: 'success', text: 'Profil frissítve (Demo Mód).' }); setTimeout(() => onUpdate(), 1000); return; } const { error: dbError } = await supabase.from('profiles').update({ first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth, updated_at: new Date().toISOString() }).eq('id', user.id); if (dbError) throw dbError; await supabase.auth.updateUser({ data: { first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth } }); setMessage({ type: 'success', text: 'Adatok sikeresen mentve.' }); setTimeout(() => onUpdate(), 1000); } catch (err: any) { setMessage({ type: 'error', text: 'Hiba: ' + err.message }); } finally { setLoading(false); } }; const handleChangePassword = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setMessage(null); if (newPassword.length < 6) { setMessage({ type: 'error', text: 'Túl rövid jelszó.' }); setLoading(false); return; } if (newPassword !== confirmPassword) { setMessage({ type: 'error', text: 'A jelszavak nem egyeznek.' }); setLoading(false); return; } try { if (!isSupabaseConfigured) { await new Promise(resolve => setTimeout(resolve, 800)); setMessage({ type: 'success', text: 'Jelszó frissítve (Demo Mód).' }); return; } const { error } = await supabase.auth.updateUser({ password: newPassword }); if (error) throw error; setMessage({ type: 'success', text: 'Jelszó sikeresen módosítva.' }); setNewPassword(''); setConfirmPassword(''); } catch (err: any) { setMessage({ type: 'error', text: 'Hiba: ' + err.message }); } finally { setLoading(false); } }; if (!isOpen) return null; return (

Fiók Beállítások

{message && (
{message.type === 'success' ? : } {message.text}
)} {activeTab === 'profile' && (
setLastName(e.target.value)} className={commonInputStyles} />
setFirstName(e.target.value)} className={commonInputStyles} />
setDateOfBirth(e.target.value)} className={commonInputStyles} />
)} {activeTab === 'security' && (
setNewPassword(e.target.value)} placeholder="Minimum 6 karakter" className={commonInputStyles} />
setConfirmPassword(e.target.value)} placeholder="Jelszó újra" className={commonInputStyles} />

Biztonsági okokból a jelszó megváltoztatása után javasolt az újra-bejelentkezés minden eszközön.

)}
); };