"use client"; import { useActionState, useState } from "react"; import { Loader2Icon, Trash2Icon } from "lucide-react"; import { Button } from "@/components/ui/button"; import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import type { DeleteState } from "@/lib/server-action"; type HapusMasterButtonProps = { id: number | string; idName: string; nama: string; entityLabel: string; action: (prevState: DeleteState, formData: FormData) => Promise; }; export function HapusMasterButton({ id, idName, nama, entityLabel, action, }: HapusMasterButtonProps) { const [open, setOpen] = useState(false); const [state, formAction, pending] = useActionState( async (prevState: DeleteState, formData: FormData) => { const result = await action(prevState, formData); if (result.ok) setOpen(false); return result; }, { ok: false }, ); return ( } > Hapus Hapus {nama || `${entityLabel} ${id}`}? Data {entityLabel} {id} akan dihapus permanen.
{state.error && (

{state.error}

)} Batal
); }