- ST-601/602: loading skeletons en error boundary - ST-603: Sonner toasts op alle CRUD-operaties - ST-604: DemoTooltip op uitgeschakelde knoppen - ST-605: KeyboardSensor dnd-kit, Escape sluit modals - ST-606: min-width banner < 1024px - ST-607: WCAG AA aria-labels en skip link - ST-608: rate limiting login (10/min) en registratie (5/uur) - ST-609: security integratietests cross-user toegang (7 tests) - ST-610: GitHub Actions CI/CD workflow - ST-611: README met quickstart, deployment en API-docs - ST-612: Lars-flow acceptatiechecklist - fix: settings toont gebruikersnaam i.p.v. interne id - fix: seed idempotent, testdata altijd gekoppeld aan demo-gebruiker Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
768 B
TypeScript
28 lines
768 B
TypeScript
'use client'
|
|
|
|
import { useEffect } from 'react'
|
|
import { Button } from '@/components/ui/button'
|
|
|
|
export default function Error({
|
|
error,
|
|
reset,
|
|
}: {
|
|
error: Error & { digest?: string }
|
|
reset: () => void
|
|
}) {
|
|
useEffect(() => {
|
|
console.error(error)
|
|
}, [error])
|
|
|
|
return (
|
|
<div className="flex flex-col items-center justify-center flex-1 gap-4 p-6">
|
|
<div className="text-center space-y-2">
|
|
<h2 className="text-lg font-medium text-foreground">Er is iets misgegaan</h2>
|
|
<p className="text-sm text-muted-foreground max-w-sm">
|
|
{error.message || 'Er is een onverwachte fout opgetreden. Probeer het opnieuw.'}
|
|
</p>
|
|
</div>
|
|
<Button onClick={reset} variant="outline">Probeer opnieuw</Button>
|
|
</div>
|
|
)
|
|
}
|