'use client';
import { Box, Button, Typography, Paper } from '@mui/material';
import { BrokenImage, CloudOff, BugReport, DataObject } from '@mui/icons-material';
import { ReactNode } from 'react';
interface FallbackProps {
error?: Error;
resetError?: () => void;
}
/**
* Generic minimal error fallback
*/
export function MinimalErrorFallback({ error, resetError }: FallbackProps) {
return (
Something went wrong
{resetError && (
)}
);
}
/**
* Fallback for image loading errors
*/
export function ImageErrorFallback() {
return (
);
}
/**
* Fallback for API/data fetching errors
*/
export function DataErrorFallback({ error, resetError }: FallbackProps) {
return (
Failed to Load Data
{error?.message || 'Unable to fetch the requested data. Please try again.'}
{resetError && (
)}
);
}
/**
* Fallback for rendering errors in components
*/
export function ComponentErrorFallback({ error, resetError }: FallbackProps) {
return (
Component Error
This component failed to render. The rest of the page should still work.
{process.env.NODE_ENV === 'development' && error && (
{error.message}
)}
{resetError && (
)}
);
}
/**
* Fallback for form errors
*/
export function FormErrorFallback({ error, resetError }: FallbackProps) {
return (
Form Submission Error
{error?.message || 'Unable to process your form. Please try again.'}
{resetError && (
)}
);
}
/**
* Fallback for data visualization/chart errors
*/
export function ChartErrorFallback({ resetError }: FallbackProps) {
return (
Unable to display chart
{resetError && (
)}
);
}
/**
* Wrapper component to easily apply error boundary with custom fallback
*/
interface ErrorBoundaryWrapperProps {
children: ReactNode;
fallbackType?: 'minimal' | 'component' | 'data' | 'form' | 'chart';
customFallback?: ReactNode;
}
export function withErrorBoundary
(
Component: React.ComponentType
,
fallbackType: ErrorBoundaryWrapperProps['fallbackType'] = 'component'
) {
return function WithErrorBoundaryWrapper(props: P) {
const { ErrorBoundary } = require('./ErrorBoundary');
const getFallback = (error: Error, resetError: () => void) => {
switch (fallbackType) {
case 'minimal':
return ;
case 'data':
return ;
case 'form':
return ;
case 'chart':
return ;
case 'component':
default:
return ;
}
};
return (
void) => getFallback(error, reset)}>
);
};
}