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}
);
}