Files
EvoFirewall/apps/web/src/components/confirm-dialog.tsx
T

60 lines
1.6 KiB
TypeScript

import type { ReactElement } from 'react'
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from '@evofw/ui/components/alert-dialog'
interface ConfirmDialogProps {
trigger?: ReactElement
open?: boolean
onOpenChange?: (open: boolean) => void
title: string
description: string
confirmLabel?: string
/** 'default' для позитивных действий (утвердить), 'destructive' — для опасных. */
confirmVariant?: 'default' | 'destructive'
cancelLabel?: string
onConfirm: () => void
disabled?: boolean
}
export function ConfirmDialog({
trigger,
open,
onOpenChange,
title,
description,
confirmLabel = 'Удалить',
confirmVariant = 'destructive',
cancelLabel = 'Отмена',
onConfirm,
disabled,
}: ConfirmDialogProps) {
return (
<AlertDialog open={open} onOpenChange={onOpenChange}>
{trigger ? (
<AlertDialogTrigger disabled={disabled} render={trigger} />
) : null}
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>{title}</AlertDialogTitle>
<AlertDialogDescription>{description}</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>{cancelLabel}</AlertDialogCancel>
<AlertDialogAction variant={confirmVariant} onClick={onConfirm}>
{confirmLabel}
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
)
}