'use client'; import { useState, useEffect } from 'react'; import { Switch } from '@/components/ui/switch'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { getPartners, createUser, updateUserRole } from '@/lib/actions/users'; import { getPartnerEndCustomers } from '@/lib/actions/end-customers'; import { Plus, Users, Mail, Eye, CheckCircle, ShieldAlert, Loader2, Ban, Unlock } from 'lucide-react'; export default function AdminSettings() { const [demoActive, setDemoActive] = useState(true); const [partners, setPartners] = useState([]); const [loadingPartners, setLoadingPartners] = useState(true); // Modal States const [isCreateOpen, setIsCreateOpen] = useState(false); const [isCustomersOpen, setIsCustomersOpen] = useState(false); // Selected Partner / Customers State const [selectedPartner, setSelectedPartner] = useState(null); const [partnerCustomers, setPartnerCustomers] = useState([]); const [loadingCustomers, setLoadingCustomers] = useState(false); // Lock/Unlock State const [lockingId, setLockingId] = useState(null); // Create Partner Form States const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [createError, setCreateError] = useState(null); const [creating, setCreating] = useState(false); useEffect(() => { // 1. Demo Banner Status auslesen const state = localStorage.getItem('demo_banner_disabled') !== 'true'; setDemoActive(state); // 2. Partner laden loadPartners(); }, []); const loadPartners = async () => { setLoadingPartners(true); try { const data = await getPartners(); setPartners(data); } catch (err) { console.error('Fehler beim Laden der Partner:', err); } finally { setLoadingPartners(false); } }; const toggleDemo = (checked: boolean) => { setDemoActive(checked); localStorage.setItem('demo_banner_disabled', (!checked).toString()); window.dispatchEvent(new Event('storage_demo_changed')); }; const handleCreatePartner = async (e: React.FormEvent) => { e.preventDefault(); setCreating(true); setCreateError(null); try { await createUser({ email, password: password || undefined, email_confirm: true, }); setIsCreateOpen(false); setEmail(''); setPassword(''); loadPartners(); } catch (err: any) { console.error('Fehler beim Erstellen des Partners:', err); setCreateError(err.message || 'Ein Fehler ist aufgetreten.'); } finally { setCreating(false); } }; const handleToggleLock = async (partner: any) => { const newRole = partner.role === 'gesperrt' ? 'partner' : 'gesperrt'; setLockingId(partner.id); try { await updateUserRole(partner.id, newRole); await loadPartners(); } catch (err) { console.error('Fehler beim Sperren/Entsperren:', err); } finally { setLockingId(null); } }; const handleShowCustomers = async (partner: any) => { setSelectedPartner(partner); setPartnerCustomers([]); setLoadingCustomers(true); setIsCustomersOpen(true); try { const customers = await getPartnerEndCustomers(partner.id); setPartnerCustomers(customers); } catch (err) { console.error('Fehler beim Laden der Partner-Kunden:', err); } finally { setLoadingCustomers(false); } }; return (
{/* Page Header */}

Admin Einstellungen

Verwalten Sie globale Shopeinstellungen, Partnerkonten und Kundenzuweisungen.

{/* Allgemeine Einstellungen */}

Allgemeine Einstellungen

Demo-Warnmeldungen

Schaltet gelbe Banner ein oder aus.

{/* Partnerverwaltung */}

Partner-Management

{/* Partner Liste */} {loadingPartners ? (
Lade Partner...
) : partners.length === 0 ? (
Keine Partner registriert.
) : (
{partners.map((partner) => { const isGesperrt = partner.role === 'gesperrt'; const isLocking = lockingId === partner.id; return ( ); })}
Partner E-Mail Status Erstellt am Aktionen
{partner.email}
{isGesperrt ? ( Gesperrt ) : ( Aktiv )} {partner.created_at ? new Date(partner.created_at).toLocaleDateString('de-DE') : '–'}
)}
{/* MODAL 1: Neuen Partner erstellen */} Neuen Partner anlegen Erstellt einen Partner-Zugang. Dieser kann sich mit den Daten im Shop einloggen.
setEmail(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
setPassword(e.target.value)} className="bg-slate-50 dark:bg-white/5 border-slate-200 dark:border-white/10" />
{createError && (

{createError}

)}
{/* MODAL 2: Kundenliste eines Partners anzeigen */} Kunden von {selectedPartner?.email} Liste aller angelegten Endkunden dieses Partners.
{loadingCustomers ? (
Lade Kunden...
) : partnerCustomers.length === 0 ? (
Dieser Partner hat noch keine Kunden angelegt.
) : (
{partnerCustomers.map((customer) => ( ))}
Unternehmen Ansprechpartner Ort Status
{customer.company_name} {[customer.first_name, customer.last_name].filter(Boolean).join(' ') || '–'} {[customer.zip, customer.city].filter(Boolean).join(' ') || '–'} {customer.is_anonymized ? ( Anonymisiert ) : ( Aktiv )}
)}
); }