haixunMaster/components/ui/confirm-dialog.tsx

59 lines
1.3 KiB
TypeScript

"use client";
import { Button } from "@/components/ui/button";
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
interface ConfirmDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
title: string;
description?: string;
confirmText?: string;
cancelText?: string;
danger?: boolean;
onConfirm: () => void | Promise<void>;
}
export function ConfirmDialog({
open,
onOpenChange,
title,
description,
confirmText = "確認",
cancelText = "取消",
danger = false,
onConfirm,
}: ConfirmDialogProps) {
return (
<Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent>
<DialogHeader>
<DialogTitle>{title}</DialogTitle>
{description && <DialogDescription>{description}</DialogDescription>}
</DialogHeader>
<DialogFooter>
<Button variant="outline" onClick={() => onOpenChange(false)}>
{cancelText}
</Button>
<Button
variant={danger ? "destructive" : "default"}
onClick={async () => {
await onConfirm();
onOpenChange(false);
}}
>
{confirmText}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
}