Spaces:
Sleeping
Sleeping
| 'use client' | |
| import { | |
| AlertDialog, | |
| AlertDialogAction, | |
| AlertDialogCancel, | |
| AlertDialogContent, | |
| AlertDialogDescription, | |
| AlertDialogFooter, | |
| AlertDialogHeader, | |
| AlertDialogTitle, | |
| } from '@/components/ui/alert-dialog' | |
| import { LoadingSpinner } from '@/components/common/LoadingSpinner' | |
| interface ConfirmDialogProps { | |
| open: boolean | |
| onOpenChange: (open: boolean) => void | |
| title: string | |
| description: string | |
| confirmText?: string | |
| confirmVariant?: 'default' | 'destructive' | |
| onConfirm: () => void | |
| isLoading?: boolean | |
| } | |
| export function ConfirmDialog({ | |
| open, | |
| onOpenChange, | |
| title, | |
| description, | |
| confirmText = 'Confirm', | |
| confirmVariant = 'default', | |
| onConfirm, | |
| isLoading = false, | |
| }: ConfirmDialogProps) { | |
| return ( | |
| <AlertDialog open={open} onOpenChange={onOpenChange}> | |
| <AlertDialogContent> | |
| <AlertDialogHeader> | |
| <AlertDialogTitle>{title}</AlertDialogTitle> | |
| <AlertDialogDescription>{description}</AlertDialogDescription> | |
| </AlertDialogHeader> | |
| <AlertDialogFooter> | |
| <AlertDialogCancel disabled={isLoading}>Cancel</AlertDialogCancel> | |
| <AlertDialogAction | |
| onClick={onConfirm} | |
| disabled={isLoading} | |
| className={confirmVariant === 'destructive' ? 'bg-red-600 hover:bg-red-700' : ''} | |
| > | |
| {isLoading ? ( | |
| <> | |
| <LoadingSpinner size="sm" className="mr-2" /> | |
| {confirmText} | |
| </> | |
| ) : ( | |
| confirmText | |
| )} | |
| </AlertDialogAction> | |
| </AlertDialogFooter> | |
| </AlertDialogContent> | |
| </AlertDialog> | |
| ) | |
| } |