diff --git a/shop/app/admin/einstellungen/page.tsx b/shop/app/admin/einstellungen/page.tsx index af98118..aa2f53e 100644 --- a/shop/app/admin/einstellungen/page.tsx +++ b/shop/app/admin/einstellungen/page.tsx @@ -13,9 +13,9 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog'; -import { getPartners, createUser } from '@/lib/actions/users'; +import { getPartners, createUser, updateUserRole } from '@/lib/actions/users'; import { getPartnerEndCustomers } from '@/lib/actions/end-customers'; -import { Plus, Users, Mail, Eye, Key, CheckCircle, ShieldAlert, Loader2 } from 'lucide-react'; +import { Plus, Users, Mail, Eye, CheckCircle, ShieldAlert, Loader2, Ban, Unlock } from 'lucide-react'; export default function AdminSettings() { const [demoActive, setDemoActive] = useState(true); @@ -31,6 +31,9 @@ export default function AdminSettings() { 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(''); @@ -87,6 +90,19 @@ export default function AdminSettings() { } }; + 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([]); @@ -159,7 +175,10 @@ export default function AdminSettings() { - {partners.map((partner) => ( + {partners.map((partner) => { + const isGesperrt = partner.role === 'gesperrt'; + const isLocking = lockingId === partner.id; + return (
@@ -168,25 +187,49 @@ export default function AdminSettings() {
- - Aktiv - + {isGesperrt ? ( + + Gesperrt + + ) : ( + + Aktiv + + )} {partner.created_at ? new Date(partner.created_at).toLocaleDateString('de-DE') : '–'} - +
+ + +
- ))} + ); + })} diff --git a/shop/lib/actions/users.ts b/shop/lib/actions/users.ts index 475da0c..bb0839a 100644 --- a/shop/lib/actions/users.ts +++ b/shop/lib/actions/users.ts @@ -91,9 +91,14 @@ export async function getPartners() { const { data: dbUsers, error: dbError } = await admin .from('users') .select('id, role') - .eq('role', 'partner') + .in('role', ['partner', 'gesperrt']) if (dbError) throw dbError + const roleMap: Record = {} + dbUsers.forEach(u => { roleMap[u.id] = u.role }) + const partnerIds = new Set(dbUsers.map(u => u.id)) - return users.filter(u => partnerIds.has(u.id)) + return users + .filter(u => partnerIds.has(u.id)) + .map(u => ({ ...u, role: roleMap[u.id] || 'partner' })) }