diff --git a/packages/frontend/component/src/components/page-list/page-content-preview.tsx b/packages/frontend/component/src/components/page-list/page-content-preview.tsx index 9dcc38b12..29c8b2e53 100644 --- a/packages/frontend/component/src/components/page-list/page-content-preview.tsx +++ b/packages/frontend/component/src/components/page-list/page-content-preview.tsx @@ -1,4 +1,3 @@ -import { assertExists } from '@blocksuite/global/utils'; import type { Workspace } from '@blocksuite/store'; import { useBlockSuitePagePreview } from '@toeverything/hooks/use-block-suite-page-preview'; import { useBlockSuiteWorkspacePage } from '@toeverything/hooks/use-block-suite-workspace-page'; @@ -12,7 +11,6 @@ interface PagePreviewInnerProps { const PagePreviewInner = ({ workspace, pageId }: PagePreviewInnerProps) => { const page = useBlockSuiteWorkspacePage(workspace, pageId); - assertExists(page); const previewAtom = useBlockSuitePagePreview(page); const preview = useAtomValue(previewAtom); return preview ? preview : null; diff --git a/packages/frontend/core/src/hooks/use-workspace.ts b/packages/frontend/core/src/hooks/use-workspace.ts index b8532bd38..dc3937ad0 100644 --- a/packages/frontend/core/src/hooks/use-workspace.ts +++ b/packages/frontend/core/src/hooks/use-workspace.ts @@ -1,6 +1,8 @@ -import type { AffineOfficialWorkspace } from '@affine/env/workspace'; +import { + type AffineOfficialWorkspace, + WorkspaceFlavour, +} from '@affine/env/workspace'; import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; -import { assertExists } from '@blocksuite/global/utils'; import type { Workspace } from '@blocksuite/store'; import { getBlockSuiteWorkspaceAtom } from '@toeverything/infra/__internal__/workspace'; import type { Atom } from 'jotai'; @@ -24,12 +26,21 @@ export function useWorkspace(workspaceId: string): AffineOfficialWorkspace { const workspace = useAtomValue(workspaceAtom); if (!workspaceWeakMap.has(workspace)) { const baseAtom = atom(async get => { - const metadata = await get(rootWorkspacesMetadataAtom); - const flavour = metadata.find(({ id }) => id === workspaceId)?.flavour; - assertExists(flavour, 'workspace flavour not found'); + const metadataList = await get(rootWorkspacesMetadataAtom); + const flavour = metadataList.find(({ id }) => id === workspaceId) + ?.flavour; + + if (!flavour) { + // when last workspace is removed, we may encounter this warning. it should be fine + console.warn( + 'workspace not found in rootWorkspacesMetadataAtom, maybe it is removed', + workspaceId + ); + } + return { id: workspaceId, - flavour, + flavour: flavour ?? WorkspaceFlavour.LOCAL, blockSuiteWorkspace: workspace, }; }); diff --git a/packages/frontend/hooks/src/use-block-suite-page-preview.ts b/packages/frontend/hooks/src/use-block-suite-page-preview.ts index ccb828582..fc630c5f2 100644 --- a/packages/frontend/hooks/src/use-block-suite-page-preview.ts +++ b/packages/frontend/hooks/src/use-block-suite-page-preview.ts @@ -17,8 +17,12 @@ export const getPagePreviewText = (page: Page) => { return text.slice(0, 300); }; -export function useBlockSuitePagePreview(page: Page): Atom { - if (weakMap.has(page)) { +const emptyAtom = atom(''); + +export function useBlockSuitePagePreview(page: Page | null): Atom { + if (page === null) { + return emptyAtom; + } else if (weakMap.has(page)) { return weakMap.get(page) as Atom; } else { const baseAtom = atom(getPagePreviewText(page));