import { prisma } from '@innungsapp/shared' import { auth } from '@/lib/auth' import { headers } from 'next/headers' import { redirect } from 'next/navigation' import Link from 'next/link' import { MEMBER_STATUS_LABELS } from '@innungsapp/shared' import { format } from 'date-fns' import { de } from 'date-fns/locale' const STATUS_COLORS: Record = { aktiv: 'bg-green-100 text-green-700', ruhend: 'bg-yellow-100 text-yellow-700', ausgetreten: 'bg-red-100 text-red-700', } export default async function MitgliederPage(props: { searchParams: Promise<{ [key: string]: string | string[] | undefined }> }) { const searchParams = await props.searchParams const search = typeof searchParams.q === 'string' ? searchParams.q : '' const statusFilter = typeof searchParams.status === 'string' ? searchParams.status : undefined const session = await auth.api.getSession({ headers: await headers() }) if (!session?.user) redirect('/login') const userRole = await prisma.userRole.findFirst({ where: { userId: session.user.id }, }) if (!userRole || userRole.role !== 'admin') redirect('/dashboard') const members = await prisma.member.findMany({ where: { orgId: userRole.orgId, ...(statusFilter && { status: statusFilter as never }), ...(search && { OR: [ { name: { contains: search } }, { betrieb: { contains: search } }, { ort: { contains: search } }, ], }), }, orderBy: { name: 'asc' }, }) return (

Mitglieder

{members.length} Einträge

+ Mitglied anlegen
{/* Filters */}
{/* Table */}
{members.map((m) => ( ))}
Name / Betrieb Sparte Ort Mitglied seit Status Eingeladen

{m.name}

{m.betrieb}

{m.sparte} {m.ort} {m.seit ?? '—'} {MEMBER_STATUS_LABELS[m.status]} {m.userId ? ( Aktiv ) : ( )} Bearbeiten
{members.length === 0 && (
Keine Mitglieder gefunden
)}
) }