76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
'use client';
|
|
|
|
import { AlertTriangle } from 'lucide-react';
|
|
import {
|
|
Dialog,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogFooter,
|
|
DialogHeader,
|
|
DialogTitle,
|
|
} from '@/components/ui/dialog';
|
|
import { Button } from '@/components/ui/button';
|
|
|
|
interface DeleteGlossaryDialogProps {
|
|
open: boolean;
|
|
onOpenChange: (open: boolean) => void;
|
|
onConfirm: () => void;
|
|
isDeleting: boolean;
|
|
glossaryName?: string;
|
|
}
|
|
|
|
export function DeleteGlossaryDialog({
|
|
open,
|
|
onOpenChange,
|
|
onConfirm,
|
|
isDeleting,
|
|
glossaryName,
|
|
}: DeleteGlossaryDialogProps) {
|
|
return (
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
<DialogContent className="sm:max-w-md">
|
|
<DialogHeader>
|
|
<DialogTitle>Delete Glossary</DialogTitle>
|
|
<DialogDescription>
|
|
Are you sure you want to delete this glossary?
|
|
{glossaryName && (
|
|
<span className="block mt-1 font-medium text-foreground">
|
|
"{glossaryName}"
|
|
</span>
|
|
)}
|
|
</DialogDescription>
|
|
</DialogHeader>
|
|
|
|
<div className="rounded-lg border border-destructive/50 bg-destructive/10 p-4">
|
|
<div className="flex items-start gap-3">
|
|
<AlertTriangle className="h-5 w-5 text-destructive shrink-0 mt-0.5" />
|
|
<div className="space-y-1">
|
|
<p className="text-sm font-medium text-destructive">This action cannot be undone</p>
|
|
<p className="text-sm text-muted-foreground">
|
|
All term pairs will be permanently removed.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<DialogFooter>
|
|
<Button
|
|
variant="outline"
|
|
onClick={() => onOpenChange(false)}
|
|
disabled={isDeleting}
|
|
>
|
|
Cancel
|
|
</Button>
|
|
<Button
|
|
variant="destructive"
|
|
onClick={onConfirm}
|
|
disabled={isDeleting}
|
|
>
|
|
{isDeleting ? 'Deleting...' : 'Delete'}
|
|
</Button>
|
|
</DialogFooter>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|