shellphone.app/app/pages/_app.tsx

50 lines
1.1 KiB
TypeScript
Raw Normal View History

import { Suspense } from "react";
2021-07-31 14:33:18 +00:00
import {
AppProps,
ErrorBoundary,
ErrorComponent,
AuthenticationError,
AuthorizationError,
ErrorFallbackProps,
useQueryErrorResetBoundary,
} from "blitz";
2021-07-31 14:33:18 +00:00
import LoginForm from "../auth/components/login-form";
2021-07-31 14:33:18 +00:00
import "app/core/styles/index.css";
2021-07-31 14:33:18 +00:00
export default function App({ Component, pageProps }: AppProps) {
const getLayout = Component.getLayout || ((page) => page);
2021-07-31 14:33:18 +00:00
return (
<ErrorBoundary
FallbackComponent={RootErrorFallback}
onReset={useQueryErrorResetBoundary().reset}
>
<Suspense fallback="Silence, ca pousse">
{getLayout(<Component {...pageProps} />)}
</Suspense>
</ErrorBoundary>
);
2021-07-31 14:33:18 +00:00
}
function RootErrorFallback({ error, resetErrorBoundary }: ErrorFallbackProps) {
if (error instanceof AuthenticationError) {
return <LoginForm onSuccess={resetErrorBoundary} />;
2021-07-31 14:33:18 +00:00
} else if (error instanceof AuthorizationError) {
return (
<ErrorComponent
statusCode={error.statusCode}
title="Sorry, you are not authorized to access this"
/>
);
2021-07-31 14:33:18 +00:00
} else {
return (
<ErrorComponent
statusCode={error.statusCode || 400}
title={error.message || error.name}
/>
);
2021-07-31 14:33:18 +00:00
}
}