import { RefreshCcw } from "lucide-react"; import * as React from "react"; import { isRouteErrorResponse, useRevalidator, useRouteError, } from "react-router"; import { useLocation } from "react-use"; import { useUser } from "~/features/auth/core/user"; import { getSessionId } from "~/utils/session-id"; import { ERROR_GIRL_IMAGE_PATH, LOG_IN_URL, SENDOU_INK_DISCORD_URL, } from "~/utils/urls"; import { SendouButton } from "./elements/Button"; import { Image } from "./Image"; import { Main } from "./Main"; export function Catcher() { const error = useRouteError(); const user = useUser(); const { revalidate } = useRevalidator(); const location = useLocation(); // refresh user data to make sure it's up to date (e.g. cookie might have been removed, let's show the prompt to log back in) React.useEffect(() => { if (!isRouteErrorResponse(error) || error.status !== 401) return; revalidate(); }, [revalidate, error]); const isNetworkError = error instanceof Error && (error.message.includes("Failed to fetch") || error.message.includes("NetworkError") || error.message.includes("Load failed")); if (isNetworkError) { return (

Connection error

The server was temporarily unavailable. This is usually a brief network issue.

); } if (!isRouteErrorResponse(error)) { const sessionId = getSessionId(); const errorText = (() => { if (!(error instanceof Error)) return; return `Session ID: ${sessionId}\nTime: ${new Date().toISOString()}\nURL: ${location.href}\nUser ID: ${user?.id ?? "Not logged in"}\n${error.stack ?? error.message}`; })(); return (

Error happened

There was an unexpected error. If this keeps happening, please report it on our Discord so it can be fixed. Include the error message below.

{errorText ? (