All files / core/components ConfirmationDialog.tsx

100% Statements 7/7
100% Branches 9/9
100% Functions 3/3
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65                                              2x                   26x   26x                     1x           2x 2x 2x                    
import {
    Dialog,
    DialogContent,
    DialogDescription,
    DialogFooter,
    DialogHeader,
    DialogTitle,
} from '@core/components/ui/dialog'
import { Button } from '@core/components/ui/button'
import type { ReactNode } from 'react'
import { useTranslation } from 'react-i18next'
 
interface ConfirmationDialogProps {
    open: boolean
    onOpenChange: (open: boolean) => void
    onConfirm: () => void
    title?: ReactNode
    description?: ReactNode
    confirmText?: string
    cancelText?: string
    variant?: 'default' | 'destructive'
}
 
export const ConfirmationDialog = ({
    open,
    onOpenChange,
    onConfirm,
    title,
    description,
    confirmText,
    cancelText,
    variant = 'default',
}: ConfirmationDialogProps) => {
    const { t } = useTranslation('common')
 
    return (
        <Dialog open={open} onOpenChange={onOpenChange}>
            <DialogContent>
                <DialogHeader>
                    <DialogTitle>{title || t('confirmation.title', 'Are you sure?')}</DialogTitle>
                    <DialogDescription>
                        {description ||
                            t('confirmation.description', 'This action cannot be undone.')}
                    </DialogDescription>
                </DialogHeader>
                <DialogFooter>
                    <Button variant="outline" onClick={() => onOpenChange(false)}>
                        {cancelText || t('common.cancel', 'Cancel')}
                    </Button>
                    <Button
                        variant={variant}
                        onClick={(e: React.MouseEvent<HTMLButtonElement>) => {
                            e.preventDefault()
                            onConfirm()
                            onOpenChange(false)
                        }}
                    >
                        {confirmText || t('common.confirm', 'Confirm')}
                    </Button>
                </DialogFooter>
            </DialogContent>
        </Dialog>
    )
}