'use client'; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { updateUserProfile, updateCompanyDetails } from '@/lib/actions/users'; import { updatePassword } from '@/lib/actions/auth'; import { Save, KeyRound, Loader2 } from 'lucide-react'; interface AccountSettingsFormProps { userId: string; profile: any; company: any; } export function AccountSettingsForm({ userId, profile, company }: AccountSettingsFormProps) { // Profil State const [firstName, setFirstName] = useState(profile?.first_name || ''); const [lastName, setLastName] = useState(profile?.last_name || ''); const [profileMessage, setProfileMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null); const [isUpdatingProfile, setIsUpdatingProfile] = useState(false); // Company State const [street, setStreet] = useState(company?.street || ''); const [zip, setZip] = useState(company?.zip || ''); const [city, setCity] = useState(company?.city || ''); const [companyEmail, setCompanyEmail] = useState(company?.email || ''); const [companyMessage, setCompanyMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null); const [isUpdatingCompany, setIsUpdatingCompany] = useState(false); // Passwort State const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [passwordMessage, setPasswordMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null); const [isUpdatingPassword, setIsUpdatingPassword] = useState(false); // Profil speichern const handleUpdateProfile = async (e: React.FormEvent) => { e.preventDefault(); setProfileMessage(null); setIsUpdatingProfile(true); try { const res = await updateUserProfile(userId, { first_name: firstName || null, last_name: lastName || null, }); if (res.success) { setProfileMessage({ type: 'success', text: 'Persönliche Daten erfolgreich aktualisiert.' }); } else { setProfileMessage({ type: 'error', text: res.error || 'Fehler beim Aktualisieren des Profils.' }); } } catch (err: any) { setProfileMessage({ type: 'error', text: err.message || 'Ein unerwarteter Fehler ist aufgetreten.' }); } finally { setIsUpdatingProfile(false); } }; // Company speichern const handleUpdateCompany = async (e: React.FormEvent) => { e.preventDefault(); if (!company?.id) return; setCompanyMessage(null); setIsUpdatingCompany(true); try { const res = await updateCompanyDetails(company.id, { street: street || null, zip: zip || null, city: city || null, email: companyEmail || null, }); if (res.success) { setCompanyMessage({ type: 'success', text: 'Unternehmensdaten erfolgreich aktualisiert.' }); } else { setCompanyMessage({ type: 'error', text: res.error || 'Fehler beim Aktualisieren der Unternehmensdaten.' }); } } catch (err: any) { setCompanyMessage({ type: 'error', text: err.message || 'Ein unerwarteter Fehler ist aufgetreten.' }); } finally { setIsUpdatingCompany(false); } }; // Passwort speichern const handleUpdatePassword = async (e: React.FormEvent) => { e.preventDefault(); setPasswordMessage(null); if (newPassword.length < 6) { setPasswordMessage({ type: 'error', text: 'Das Passwort muss mindestens 6 Zeichen lang sein.' }); return; } if (newPassword !== confirmPassword) { setPasswordMessage({ type: 'error', text: 'Die Passwörter stimmen nicht überein.' }); return; } setIsUpdatingPassword(true); try { const res = await updatePassword(newPassword); if (res.success) { setPasswordMessage({ type: 'success', text: 'Passwort erfolgreich geändert.' }); setNewPassword(''); setConfirmPassword(''); } else { setPasswordMessage({ type: 'error', text: res.error || 'Fehler beim Ändern des Passworts.' }); } } catch (err: any) { setPasswordMessage({ type: 'error', text: err.message || 'Ein unerwarteter Fehler ist aufgetreten.' }); } finally { setIsUpdatingPassword(false); } }; return (
{/* 1. Persönliche Daten */} Persönliche Daten Aktualisieren Sie Ihren Vor- und Nachnamen.
setFirstName(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="Max" />
setLastName(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="Mustermann" />
{profileMessage && (
{profileMessage.text}
)}
{/* 2. Unternehmensdaten */} {company && ( Unternehmensdaten Verwalten Sie die Adressdaten Ihres Partner-Unternehmens.
setStreet(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="Musterstraße 12" />
setZip(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="12345" />
setCity(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="Musterstadt" />
setCompanyEmail(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="partner@firma.de" />
{companyMessage && (
{companyMessage.text}
)}
)} {/* 3. Sicherheit / Passwort ändern */} Passwort ändern Geben Sie ein neues Passwort für Ihren Zugang ein.
setNewPassword(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="••••••••" />
setConfirmPassword(e.target.value)} className="bg-slate-950 border-white/10 focus:border-primary text-white" placeholder="••••••••" />
{passwordMessage && (
{passwordMessage.text}
)}
); }