"use client" import { useState } from "react" import { useRouter } from "next/navigation" import { deleteInvitationMemberAction, updateInvitationMemberAction, } from "@/app/admin/guests/[id]/actions" import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" interface MemberManagementProps { invitationId: string memberId: string memberName: string canDelete: boolean } function SubmitButton({ children, variant = "default", pending }: { children: React.ReactNode; variant?: "default" | "destructive"; pending: boolean }) { return ( ) } export function MemberManagement({ invitationId, memberId, memberName, canDelete, }: MemberManagementProps) { const router = useRouter() const [editOpen, setEditOpen] = useState(false) const [deleteOpen, setDeleteOpen] = useState(false) const [name, setName] = useState(memberName) const [editError, setEditError] = useState(null) const [deleteError, setDeleteError] = useState(null) const [pendingAction, setPendingAction] = useState<"edit" | "delete" | null>(null) async function submitEdit(event: React.FormEvent) { event.preventDefault() setPendingAction("edit") setEditError(null) const result = await updateInvitationMemberAction({ error: null, success: false }, new FormData(event.currentTarget)) setPendingAction(null) if (result.error) { setEditError(result.error) return } setEditOpen(false) router.refresh() } async function submitDelete(event: React.FormEvent) { event.preventDefault() setPendingAction("delete") setDeleteError(null) const result = await deleteInvitationMemberAction({ error: null, success: false }, new FormData(event.currentTarget)) setPendingAction(null) if (result.error) { setDeleteError(result.error) return } setDeleteOpen(false) router.refresh() } return (
Edit guest member Update the member's name. setName(event.target.value)} aria-label="Member name" autoFocus maxLength={200} required /> {editError ?

{editError}

: null} Cancel Save changes
{canDelete ? (
Delete {memberName}? This removes the member from the invitation. If they are the primary contact, another member will become primary. {deleteError ?

{deleteError}

: null} Cancel Delete member
) : null}
) }