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 ) : ( )}
) }