From 4d96d2dd0209911153259e365a2826ae95e55ace Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Wed, 6 Sep 2023 21:42:47 -0700 Subject: [PATCH] feat(core): add share page error boundary (#4245) Co-authored-by: JimmFly --- .../components/share-page-not-found-error.tsx | 35 +++++++++++++++++++ apps/core/src/pages/share/detail-page.tsx | 19 +++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 apps/core/src/components/share-page-not-found-error.tsx diff --git a/apps/core/src/components/share-page-not-found-error.tsx b/apps/core/src/components/share-page-not-found-error.tsx new file mode 100644 index 0000000000..064a62c256 --- /dev/null +++ b/apps/core/src/components/share-page-not-found-error.tsx @@ -0,0 +1,35 @@ +import { Empty } from '@affine/component'; +import { Logo1Icon } from '@blocksuite/icons'; + +export const SharePageNotFoundError = () => { + return ( +
+ + + + +
+ ); +}; diff --git a/apps/core/src/pages/share/detail-page.tsx b/apps/core/src/pages/share/detail-page.tsx index 54cb5a5d1e..e135a55a4c 100644 --- a/apps/core/src/pages/share/detail-page.tsx +++ b/apps/core/src/pages/share/detail-page.tsx @@ -9,11 +9,17 @@ import { noop } from 'foxact/noop'; import type { ReactElement } from 'react'; import { useCallback } from 'react'; import type { LoaderFunction } from 'react-router-dom'; -import { redirect, useLoaderData } from 'react-router-dom'; +import { + isRouteErrorResponse, + redirect, + useLoaderData, + useRouteError, +} from 'react-router-dom'; import { applyUpdate } from 'yjs'; import { PageDetailEditor } from '../../adapters/shared'; import { AppContainer } from '../../components/affine/app-container'; +import { SharePageNotFoundError } from '../../components/share-page-not-found-error'; function assertArrayBuffer(value: unknown): asserts value is ArrayBuffer { if (!(value instanceof ArrayBuffer)) { @@ -71,3 +77,14 @@ export const Component = (): ReactElement => { ); }; + +export function ErrorBoundary() { + const error = useRouteError(); + return isRouteErrorResponse(error) ? ( +

+ {error.status} {error.statusText} +

+ ) : ( + + ); +}