import React, { useEffect, useState } from 'react'; import { useAuth } from '../context/AuthContext'; import { supabase, isSupabaseConfigured } from '../lib/supabaseClient'; import { Button } from './Button'; import { User, Save, AlertCircle, Calendar } from 'lucide-react'; export const ProfileCompleter: React.FC = () => { const { user, refreshDemoUser } = useAuth(); const [isOpen, setIsOpen] = useState(false); const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [dateOfBirth, setDateOfBirth] = useState(''); const [loading, setLoading] = useState(false); const [checking, setChecking] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!user) { setIsOpen(false); return; } const checkProfile = async () => { setChecking(true); const checkMetadataFallback = () => { const meta = user.user_metadata || {}; const hasRequiredData = meta.first_name && meta.last_name && meta.date_of_birth; if (!hasRequiredData) { setIsOpen(true); if (meta.first_name) setFirstName(meta.first_name); if (meta.last_name) setLastName(meta.last_name); if (meta.date_of_birth) setDateOfBirth(meta.date_of_birth); } }; if (!isSupabaseConfigured) { checkMetadataFallback(); setChecking(false); return; } try { const { data, error: fetchError } = await supabase .from('profiles') .select('first_name, last_name, date_of_birth') .eq('id', user.id) .maybeSingle(); if (fetchError) { // Ha hálózati hiba van (pl. adblocker vagy CORS), a metadata-ra hagyatkozunk csendben checkMetadataFallback(); return; } if (!data || !data.first_name || !data.last_name || !data.date_of_birth) { setIsOpen(true); if (data?.first_name) setFirstName(data.first_name); else if (user.user_metadata?.first_name) setFirstName(user.user_metadata.first_name); if (data?.last_name) setLastName(data.last_name); else if (user.user_metadata?.last_name) setLastName(user.user_metadata.last_name); if (data?.date_of_birth) setDateOfBirth(data.date_of_birth); else if (user.user_metadata?.date_of_birth) setDateOfBirth(user.user_metadata.date_of_birth); } } catch (err: any) { // Hálózat-specifikus hibák esetén nem logolunk noisyt if (err instanceof TypeError && err.message.includes('fetch')) { checkMetadataFallback(); } else { console.debug('Supabase connection issue, using metadata fallback.'); checkMetadataFallback(); } } finally { setChecking(false); } }; checkProfile(); }, [user]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); setLoading(true); if (!firstName.trim() || !lastName.trim() || !dateOfBirth) { setError('Minden mező kitöltése kötelező.'); setLoading(false); return; } try { if (!isSupabaseConfigured && user) { await new Promise(resolve => setTimeout(resolve, 800)); const storedSession = localStorage.getItem('demo_user_session'); if (storedSession) { const parsed = JSON.parse(storedSession); parsed.user.user_metadata = { ...parsed.user.user_metadata, first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth }; localStorage.setItem('demo_user_session', JSON.stringify(parsed)); refreshDemoUser(); } setIsOpen(false); return; } if (user) { const { error: dbError } = await supabase .from('profiles') .upsert({ id: user.id, email: user.email, first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth, updated_at: new Date().toISOString() }); if (dbError) throw dbError; await supabase.auth.updateUser({ data: { first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth } }); setIsOpen(false); } } catch (err: any) { console.error('Error updating profile:', err); setError('Hiba történt a mentés során: ' + (err.message || 'Ismeretlen hiba')); } finally { setLoading(false); } }; if (!isOpen) return null; return (

Hiányzó Adatok

Kérjük, a folytatáshoz adja meg a hiányzó adatait.

{error && (
{error}
)}
setLastName(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all bg-white text-gray-900" placeholder="Kovács" required />
setFirstName(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all bg-white text-gray-900" placeholder="János" required />
setDateOfBirth(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all bg-white text-gray-900" required />

Ezekre az adatokra a számlázáshoz és a kapcsolattartáshoz van szükségünk.

); };