/* Updated Admin Settings without Partner Management */
'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';
export default function AdminSettings() {
const [demoActive, setDemoActive] = useState(true);
useEffect(() => {
const state = localStorage.getItem('demo_banner_disabled') !== 'true';
setDemoActive(state);
}, []);
const toggleDemo = (checked: boolean) => {
setDemoActive(checked);
localStorage.setItem('demo_banner_disabled', (!checked).toString());
window.dispatchEvent(new Event('storage_demo_changed'));
};
return (
{/* Page Header */}
Admin Einstellungen
Verwalten Sie globale Shopeinstellungen.
{/* Allgemeine Einstellungen */}
Allgemeine Einstellungen
Demo-Warnmeldungen
Schaltet gelbe Banner ein oder aus.
);
}
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.
) : (
| Partner E-Mail |
Firma |
Status |
Erstellt am |
Aktionen |
{partners.map((partner) => {
const isGesperrt = partner.role === 'gesperrt';
const isLocking = lockingId === partner.id;
return (
|
{partner.email}
|
{partner.company_name || '–'}
|
{isGesperrt ? (
Gesperrt
) : (
Aktiv
)}
|
{partner.created_at ? new Date(partner.created_at).toLocaleDateString('de-DE') : '–'}
|
|
);
})}
)}
{/* MODAL 1: Neuen Partner erstellen */}
{/* MODAL 2: Kundenliste eines Partners anzeigen */}
);
}