import {
Link,
rootRouteId,
useMatch,
useRouter,
useNavigate,
redirect,
} from '@tanstack/react-router'
import type { ErrorComponentProps } from '@tanstack/react-router'
import {
Box,
Button as MantineButton,
Text,
Stack,
Group,
Collapse,
Code,
Container,
Center
} from '@mantine/core'
import { useDisclosure } from '@mantine/hooks'
import { useEffect } from 'react'
import toast from '@/lib/sonner'
import { logger } from '@/lib/logger'
import { XCircleIcon, WarningIcon } from '@phosphor-icons/react'
import Button from './button'
export function DefaultCatchBoundary({ error }: ErrorComponentProps) {
const router = useRouter()
const navigate = useNavigate()
const isRoot = useMatch({
strict: false,
select: (state) => state.id === rootRouteId,
})
const [detailsOpened, { toggle: toggleDetails }] = useDisclosure(false)
const errorMessage = error?.message || 'Unknown error'
const errorStack = error?.stack || 'No stack trace available'
useEffect(() => {
logger.error('DefaultCatchBoundary | ', error)
if (errorMessage.toLowerCase().includes('unauthenticated')) {
toast.error('You\'ve been logged out')
router.history.push('/login')
throw redirect({ to: '/login' })
}
}, [error, errorMessage, navigate])
if (errorMessage.toLowerCase().includes('unauthorized')) {
return (
Access Denied
You don't have permission to access this page.
Home
)
}
return (
Something went wrong
An error occurred while loading this page.
Error: {errorMessage}
{errorStack}
{isRoot ? (
Home
) : (
)}
)
}