37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
'use client';
|
|
|
|
import { useEffect } from 'react';
|
|
import { AlertTriangle, RefreshCcw } from 'lucide-react';
|
|
|
|
export default function ErrorBoundary({
|
|
error,
|
|
reset,
|
|
}: {
|
|
error: Error & { digest?: string };
|
|
reset: () => void;
|
|
}) {
|
|
useEffect(() => {
|
|
console.error(error);
|
|
}, [error]);
|
|
|
|
return (
|
|
<div className="min-h-[400px] flex items-center justify-center p-8">
|
|
<div className="bg-white p-8 rounded-2xl shadow-xl max-w-md w-full border border-red-100 text-center">
|
|
<div className="w-16 h-16 bg-red-50 text-red-500 rounded-full flex items-center justify-center mx-auto mb-6">
|
|
<AlertTriangle className="w-8 h-8" />
|
|
</div>
|
|
<h2 className="text-xl font-bold text-slate-900 mb-2">Ein Fehler ist aufgetreten</h2>
|
|
<p className="text-sm text-slate-500 mb-8">
|
|
Das System konnte diese Ansicht nicht laden. Bitte versuche es erneut oder kontaktiere den Support.
|
|
</p>
|
|
<button
|
|
onClick={() => reset()}
|
|
className="bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium inline-flex items-center gap-2"
|
|
>
|
|
<RefreshCcw className="w-4 h-4" /> Erneut versuchen
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|