"use client" import * as React from "react" import { ErrorState } from "../states/ErrorState" interface ApiErrorBoundaryState { hasError: boolean error: Error | null } interface ApiErrorBoundaryProps { children: React.ReactNode /** Custom fallback to render on error. Receives error and reset function. */ fallback?: (props: { error: Error; reset: () => void }) => React.ReactNode /** Called when the error boundary catches an error. */ onError?: (error: Error, info: React.ErrorInfo) => void } /** * Error boundary for API-driven page content. * * Catches unhandled errors from children and renders ErrorState with a retry button. * * @example * * * */ export class ApiErrorBoundary extends React.Component< ApiErrorBoundaryProps, ApiErrorBoundaryState > { constructor(props: ApiErrorBoundaryProps) { super(props) this.state = { hasError: false, error: null } } static getDerivedStateFromError(error: Error): ApiErrorBoundaryState { return { hasError: true, error } } componentDidCatch(error: Error, info: React.ErrorInfo) { this.props.onError?.(error, info) } reset = () => { this.setState({ hasError: false, error: null }) } render() { if (this.state.hasError && this.state.error) { if (this.props.fallback) { return this.props.fallback({ error: this.state.error, reset: this.reset }) } return ( ) } return this.props.children } }