import { prisma } from '@innungsapp/shared' import { notFound } from 'next/navigation' import { format } from 'date-fns' import { de } from 'date-fns/locale' import Link from 'next/link' import { EditOrgForm } from './EditOrgForm' import { DeleteOrgButton } from './DeleteOrgButton' import { CreateAdminForm } from './CreateAdminForm' import { CreateMemberForm } from './CreateMemberForm' import { UserRoleActions } from './UserRoleActions' import { MemberActions } from './MemberActions' import { toggleAiFeature } from '../../actions' const PLAN_COLORS: Record = { pilot: 'bg-gray-100 text-gray-700', standard: 'bg-blue-100 text-blue-800', pro: 'bg-purple-100 text-purple-800', verband: 'bg-amber-100 text-amber-800', } export default async function OrgDetailPage({ params }: { params: Promise<{ id: string }> }) { const { id } = await params const org = await prisma.organization.findUnique({ where: { id }, include: { _count: { select: { members: true, userRoles: true, news: true, termine: true, stellen: true, }, }, userRoles: { include: { user: true }, }, members: { take: 5, orderBy: { createdAt: 'desc' }, select: { id: true, name: true, betrieb: true, status: true, createdAt: true }, }, }, }) if (!org) notFound() const planColor = PLAN_COLORS[org.plan] ?? 'bg-gray-100 text-gray-700' return (
{/* Breadcrumb */}
← Alle Innungen
{/* Header */}

{org.name}

{org.plan}
{org.slug} Erstellt {format(org.createdAt, 'dd. MMMM yyyy', { locale: de })} {org.avvAccepted && ( <> AVV akzeptiert )}
{/* Stats */}
{[ { label: 'Mitglieder', value: org._count.members }, { label: 'Admins', value: org._count.userRoles }, { label: 'News', value: org._count.news }, { label: 'Termine', value: org._count.termine }, { label: 'Stellen', value: org._count.stellen }, ].map(({ label, value }) => (
{value}
{label}
))}
{/* Edit form */}
{/* KI-Assistent */}

KI-Assistent

Aktiviert den KI-Chat-Assistenten für Mitglieder dieser Innung.

{org.aiEnabled ? 'Aktiviert' : 'Deaktiviert'}
{ 'use server' await toggleAiFeature(org.id, !org.aiEnabled) }}>
{/* Danger zone */}

Gefahrenzone

Das Löschen einer Innung entfernt alle zugehörigen Daten unwiderruflich.

{/* Right column: admins + recent members */}
{/* Admins */}

Nutzer & Rollen ({org.userRoles.length})

{org.userRoles.length === 0 ? (

Noch keine Nutzer zugewiesen.

) : ( org.userRoles.map((ur) => (
{ur.user.name}
{ur.user.email} {ur.role}
{ur.user.emailVerified ? ( Verifiziert ) : ( Eingeladen )}
)) )}
{/* Recent members */}

Mitglieder

{org._count.members} gesamt
{org.members.length === 0 ? (

Noch keine Mitglieder.

) : ( org.members.map((m) => (
{m.name}
{m.betrieb}
{m.status} {format(m.createdAt, 'dd.MM.yy', { locale: de })}
)) )}
) }