// ============================================================================ // VUE PARAMÈTRES // ============================================================================ // Note: Le composant AddressAutocomplete est importé depuis components.jsx const SettingsView = () => { const { customer, logout } = useAuth(); const toast = useToast(); const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); // Form state const [formCompanyName, setFormCompanyName] = useState(''); const [formContactName, setFormContactName] = useState(''); const [formEmail, setFormEmail] = useState(''); const [formPhone, setFormPhone] = useState(''); const [formAddress, setFormAddress] = useState(''); const [formLatitude, setFormLatitude] = useState(null); const [formLongitude, setFormLongitude] = useState(null); const [formLogoUrl, setFormLogoUrl] = useState(''); const [formAgencyLogoUrl, setFormAgencyLogoUrl] = useState(''); const [uploadingLogo, setUploadingLogo] = useState(false); const [uploadingAgencyLogo, setUploadingAgencyLogo] = useState(false); // État pour le changement de mot de passe const [showPasswordForm, setShowPasswordForm] = useState(false); const [oldPassword, setOldPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); useEffect(() => { loadCustomerData(); }, []); const loadCustomerData = async () => { setLoading(true); try { console.log('📥 Chargement des données client:', customer.id); const result = await api.getCustomer(customer.id); console.log('📦 Données reçues:', result); if (result && result.success && result.customer) { const customerData = result.customer; console.log('✅ Remplissage des champs avec:', customerData); setFormCompanyName(customerData.company_name || ''); setFormContactName(customerData.contact_name || ''); setFormEmail(customerData.email || ''); setFormPhone(customerData.phone || ''); setFormAddress(customerData.address || ''); setFormLatitude(customerData.latitude); setFormLongitude(customerData.longitude); setFormLogoUrl(customerData.logo_url || ''); setFormAgencyLogoUrl(customerData.agency_logo_url || ''); console.log('✅ Champs remplis avec succès'); } else { console.warn('⚠️ Aucune donnée client trouvée'); toast.info('Aucune information client enregistrée'); } } catch (error) { console.error('❌ Erreur chargement données:', error); toast.error('Erreur lors du chargement des données'); } setLoading(false); }; const handleLogoUpload = async (e) => { const file = e.target.files[0]; if (!file) return; if (!file.type.startsWith('image/')) { toast.error('Seules les images sont acceptées'); return; } setUploadingLogo(true); try { console.log('📤 Upload logo en cours:', file.name); const result = await api.uploadFile(file); if (result.url) { setFormLogoUrl(result.url); toast.success('Logo uploadé avec succès'); console.log('✅ Logo uploadé:', result.url); } } catch (error) { console.error('❌ Erreur upload logo:', error); toast.error('Erreur lors de l\'upload du logo'); } setUploadingLogo(false); }; const handleAgencyLogoUpload = async (e) => { const file = e.target.files[0]; if (!file) return; if (!file.type.startsWith('image/')) { toast.error('Seules les images sont acceptées'); return; } setUploadingAgencyLogo(true); try { console.log('📤 Upload logo agence en cours:', file.name); const result = await api.uploadFile(file); if (result.url) { setFormAgencyLogoUrl(result.url); toast.success('Logo agence uploadé avec succès'); console.log('✅ Logo agence uploadé:', result.url); } } catch (error) { console.error('❌ Erreur upload logo agence:', error); toast.error('Erreur lors de l\'upload du logo agence'); } setUploadingAgencyLogo(false); }; const handleSubmit = async (e) => { e.preventDefault(); setSaving(true); try { const result = await api.updateCustomer({ customer_id: customer.id, company_name: formCompanyName, contact_name: formContactName, email: formEmail, phone: formPhone, address: formAddress, latitude: formLatitude, longitude: formLongitude, logo_url: formLogoUrl, agency_logo_url: formAgencyLogoUrl }); if (result.success) { toast.success('Informations mises à jour avec succès'); } } catch (error) { console.error('Erreur lors de la mise à jour:', error); toast.error('Erreur lors de la mise à jour'); } setSaving(false); }; const handlePasswordChange = async (e) => { e.preventDefault(); if (newPassword !== confirmPassword) { toast.error('Les mots de passe ne correspondent pas'); return; } if (newPassword.length < 8) { toast.error('Le mot de passe doit contenir au moins 8 caractères'); return; } try { const result = await api.changePassword(customer.id, oldPassword, newPassword); if (result.success) { toast.success('Mot de passe modifié avec succès'); setShowPasswordForm(false); setOldPassword(''); setNewPassword(''); setConfirmPassword(''); } else { toast.error(result.message || 'Erreur lors du changement de mot de passe'); } } catch (error) { console.error('Erreur changement mot de passe:', error); toast.error('Erreur lors du changement de mot de passe'); } }; if (loading) { return (
); } return (

Paramètres

{/* Grille 2 colonnes : Informations + Sécurité */}
{/* Informations entreprise */}

Informations de l'entreprise

{/* Upload du logo */}
{/* Preview du logo */}
{formLogoUrl ? (
Logo
) : (
)}
{/* Upload zone */}
document.getElementById('logo-file-input').click()} > {uploadingLogo ? (

Upload en cours...

) : (

{formLogoUrl ? 'Cliquez pour changer le logo' : 'Cliquez pour uploader un logo'}

PNG, JPG (max 2MB)

)}

💡 Ce logo apparaîtra sur vos écrans et documents

{/* Upload du logo agence immobilière */}
{/* Preview du logo agence */}
{formAgencyLogoUrl ? (
Logo Agence
) : (
)}
{/* Upload zone */}
document.getElementById('agency-logo-file-input').click()} > {uploadingAgencyLogo ? (

Upload en cours...

) : (

{formAgencyLogoUrl ? 'Cliquez pour changer le logo' : 'Cliquez pour uploader un logo'}

PNG, JPG (max 2MB)

)}

🏠 Ce logo apparaîtra uniquement sur les annonces immobilières

{ setFormAddress(data.address); setFormLatitude(data.latitude); setFormLongitude(data.longitude); }} placeholder="Commencez à taper votre adresse..." required /> {formLatitude && formLongitude && (
Coordonnées GPS: {parseFloat(formLatitude).toFixed(6)}, {parseFloat(formLongitude).toFixed(6)}
)}
{/* Sécurité */}

Sécurité

{!showPasswordForm ? (
Mot de passe
••••••••
Déconnexion
Se déconnecter de l'application
) : (
)}
); };