/* Copyright 2022-2024 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ import { FC, ReactNode, useCallback, useEffect } from "react"; import { useLocation } from "react-router-dom"; import classNames from "classnames"; import { Trans, useTranslation } from "react-i18next"; import * as Sentry from "@sentry/react"; import { logger } from "matrix-js-sdk/src/logger"; import { Button } from "@vector-im/compound-web"; import { Header, HeaderLogo, LeftNav, RightNav } from "./Header"; import { LinkButton } from "./button"; import styles from "./FullScreenView.module.css"; import { TranslatedError } from "./TranslatedError"; import { Config } from "./config/Config"; import { RageshakeButton } from "./settings/RageshakeButton"; import { useUrlParams } from "./UrlParams"; interface FullScreenViewProps { className?: string; children: ReactNode; } export const FullScreenView: FC = ({ className, children, }) => { const { hideHeader } = useUrlParams(); return (
{!hideHeader && }
{children}
); }; interface ErrorViewProps { error: Error; } export const ErrorView: FC = ({ error }) => { const location = useLocation(); const { confineToRoom } = useUrlParams(); const { t } = useTranslation(); useEffect(() => { logger.error(error); Sentry.captureException(error); }, [error]); const onReload = useCallback(() => { window.location.href = "/"; }, []); return (

{t("common.error")}

{error instanceof TranslatedError ? error.translatedMessage : error.message}

{!confineToRoom && (location.pathname === "/" ? ( ) : ( {t("return_home_button")} ))}
); }; export const CrashView: FC = () => { const { t } = useTranslation(); const onReload = useCallback(() => { window.location.href = "/"; }, []); return (

Oops, something's gone wrong.

{Config.get().rageshake?.submit_url && (

Submitting debug logs will help us track down the problem.

)}
); }; export const LoadingView: FC = () => { const { t } = useTranslation(); return (

{t("common.loading")}

); };