import { t } from '@lingui/core/macro'; import { Alert, Stack, Text } from '@mantine/core'; import { ErrorBoundary, type FallbackRender } from '@sentry/react'; import { IconExclamationCircle, IconInfoCircle } from '@tabler/icons-react'; import { type ReactNode, useCallback, useState } from 'react'; export function DefaultFallback({ title, error }: Readonly<{ title: string; error: string | null }>): ReactNode { return ( <> } title={`INVE-E17: ${t`Error rendering component`}: ${title}`} > {t`An error occurred while rendering this component.`} {t`Try reloading the page, or contact your administrator if the problem persists.`} {error && ( } title={t`Error Details`}> {error} )} ); } export function Boundary({ children, label, fallback }: Readonly<{ children: ReactNode; label: string; fallback?: React.ReactElement | FallbackRender; }>): ReactNode { const [errorMessage, setErrorMessage] = useState(null); const onError = useCallback( (error: unknown, componentStack: string | undefined, eventId: string) => { console.error(`ERR: Error rendering component: ${label}`); console.error(error); setErrorMessage(error instanceof Error ? error.message : String(error)); }, [] ); return ( } onError={onError} > {children} ); }