import Link from "next/link" import { redirect } from "next/navigation" import { createInvitationWithMembers } from "@/lib/db/queries/invitations" import { supportedLanguages } from "@/lib/i18n/config" import { createInvitationSchema } from "@/lib/validation/invitation" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" import { Checkbox } from "@/components/ui/checkbox" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Textarea } from "@/components/ui/textarea" export const dynamic = "force-dynamic" function getMembersFromFormData(formData: FormData) { return Array.from({ length: 8 }, (_, index) => formData.get(`member-${index}`)?.toString().trim(), ).filter((value): value is string => Boolean(value)) } async function createInvitationAction(formData: FormData) { "use server" const parsed = createInvitationSchema.safeParse({ displayName: formData.get("displayName"), language: formData.get("language"), contactEmail: formData.get("contactEmail"), contactPhone: formData.get("contactPhone"), maxPartySize: formData.get("maxPartySize"), allowMemberEdits: formData.has("allowMemberEdits"), notes: formData.get("notes"), members: getMembersFromFormData(formData), }) if (!parsed.success) { const message = parsed.error.issues[0]?.message ?? "Invalid invitation data" redirect(`/admin/guests/new?error=${encodeURIComponent(message)}`) } const invitation = await createInvitationWithMembers(parsed.data) redirect(`/admin/guests/${invitation.id}?created=1`) } export default async function NewGuestPage({ searchParams, }: { searchParams: Promise<{ error?: string }> }) { const { error } = await searchParams return (
Create a private invite link and define the people included in it.