fix confirm dialog not working on mobile

This commit is contained in:
Stefan Hardegger
2026-06-22 10:53:25 +02:00
parent 70661ed3b2
commit acf4d815e8
3 changed files with 98 additions and 11 deletions

View File

@@ -0,0 +1,64 @@
'use client';
import { useEffect } from 'react';
import Button from './Button';
interface ConfirmDialogProps {
isOpen: boolean;
title: string;
message: string;
confirmLabel?: string;
cancelLabel?: string;
danger?: boolean;
onConfirm: () => void;
onCancel: () => void;
}
export default function ConfirmDialog({
isOpen,
title,
message,
confirmLabel = 'Confirm',
cancelLabel = 'Cancel',
danger = false,
onConfirm,
onCancel,
}: ConfirmDialogProps) {
useEffect(() => {
if (!isOpen) return;
const onKey = (e: KeyboardEvent) => {
if (e.key === 'Escape') onCancel();
};
document.addEventListener('keydown', onKey);
return () => document.removeEventListener('keydown', onKey);
}, [isOpen, onCancel]);
if (!isOpen) return null;
return (
<div
className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"
onClick={onCancel}
>
<div
className="theme-card rounded-lg shadow-xl max-w-md w-full p-6"
onClick={(e) => e.stopPropagation()}
>
<h2 className="text-lg font-semibold theme-header mb-2">{title}</h2>
<p className="theme-text text-sm mb-6">{message}</p>
<div className="flex justify-end gap-3">
<Button type="button" variant="ghost" onClick={onCancel}>
{cancelLabel}
</Button>
<Button
type="button"
variant={danger ? 'danger' : 'primary'}
onClick={onConfirm}
>
{confirmLabel}
</Button>
</div>
</div>
</div>
);
}