From bd826bb7f9f5db28cd955c712877a8ed6265de80 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Sat, 19 Aug 2023 02:52:09 +0800 Subject: [PATCH] fix: reference page crash for deleted items (#3835) --- .../workspace-slider-bar/components/reference-page.tsx | 6 +++++- packages/hooks/src/use-block-suite-page-references.ts | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx b/apps/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx index 872943a329..12f7233c1e 100644 --- a/apps/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx +++ b/apps/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx @@ -29,7 +29,11 @@ export const ReferencePage = ({ const icon = setting?.mode === 'edgeless' ? : ; const references = useBlockSuitePageReferences(workspace, pageId); const referencesToShow = useMemo(() => { - return [...new Set(references.filter(ref => !metaMapping[ref]?.trash))]; + return [ + ...new Set( + references.filter(ref => metaMapping[ref] && !metaMapping[ref]?.trash) + ), + ]; }, [references, metaMapping]); const [collapsed, setCollapsed] = useState(true); const collapsible = referencesToShow.length > 0; diff --git a/packages/hooks/src/use-block-suite-page-references.ts b/packages/hooks/src/use-block-suite-page-references.ts index 60c7d84028..3a164a868e 100644 --- a/packages/hooks/src/use-block-suite-page-references.ts +++ b/packages/hooks/src/use-block-suite-page-references.ts @@ -1,4 +1,3 @@ -import { assertExists } from '@blocksuite/global/utils'; import type { Page, Workspace } from '@blocksuite/store'; import { type Atom, atom, useAtomValue } from 'jotai'; @@ -14,7 +13,11 @@ function getPageReferences(page: Page): string[] { .filter(Boolean); } -const getPageReferencesAtom = (page: Page) => { +const getPageReferencesAtom = (page: Page | null) => { + if (!page) { + return atom([]); + } + if (!weakMap.has(page)) { const baseAtom = atom(getPageReferences(page)); baseAtom.onMount = set => { @@ -35,6 +38,5 @@ export function useBlockSuitePageReferences( pageId: string ): string[] { const page = useBlockSuiteWorkspacePage(blockSuiteWorkspace, pageId); - assertExists(page); return useAtomValue(getPageReferencesAtom(page)); }