import Link from 'next/link'; import { Mail, Plus, Send, Users } from 'lucide-react'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Badge } from '@kit/ui/badge'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { createNewsletterApi } from '@kit/newsletter/api'; import { CmsPageShell } from '~/components/cms-page-shell'; import { EmptyState } from '~/components/empty-state'; import { StatsCard } from '~/components/stats-card'; interface PageProps { params: Promise<{ account: string }>; } const STATUS_BADGE_VARIANT: Record< string, 'secondary' | 'default' | 'info' | 'outline' | 'destructive' > = { draft: 'secondary', scheduled: 'default', sending: 'info', sent: 'outline', failed: 'destructive', }; const STATUS_LABEL: Record = { draft: 'Entwurf', scheduled: 'Geplant', sending: 'Wird gesendet', sent: 'Gesendet', failed: 'Fehlgeschlagen', }; export default async function NewsletterPage({ params }: PageProps) { const { account } = await params; const client = getSupabaseServerClient(); const { data: acct } = await client .from('accounts') .select('id') .eq('slug', account) .single(); if (!acct) return
Konto nicht gefunden
; const api = createNewsletterApi(client); const newsletters = await api.listNewsletters(acct.id); const sentCount = newsletters.filter( (n: Record) => n.status === 'sent', ).length; const totalRecipients = newsletters.reduce( (sum: number, n: Record) => sum + (Number(n.total_recipients) || 0), 0, ); return (
{/* Header */}

Newsletter

Newsletter erstellen und versenden

{/* Stats */}
} /> } /> } />
{/* Table or Empty State */} {newsletters.length === 0 ? ( } title="Keine Newsletter vorhanden" description="Erstellen Sie Ihren ersten Newsletter, um loszulegen." actionLabel="Neuer Newsletter" actionHref={`/home/${account}/newsletter/new`} /> ) : ( Alle Newsletter ({newsletters.length})
{newsletters.map((nl: Record) => ( ))}
Betreff Status Empfänger Erstellt Gesendet
{String(nl.subject ?? '(Kein Betreff)')} {STATUS_LABEL[String(nl.status)] ?? String(nl.status)} {nl.total_recipients != null ? String(nl.total_recipients) : '—'} {nl.created_at ? new Date(String(nl.created_at)).toLocaleDateString('de-DE') : '—'} {nl.sent_at ? new Date(String(nl.sent_at)).toLocaleDateString('de-DE') : '—'}
)}
); }