From 8f590ff360b16ef5de6425c81afd713288dc20f7 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 17 Jul 2023 13:00:30 +0800 Subject: [PATCH] fix: first workspace not found (#3258) (cherry picked from commit 071d5822505cb1a6690c4e6022645a803e835a5f) --- apps/web/src/hooks/use-workspaces.ts | 27 ++++++++++++++++ apps/web/src/layouts/workspace-layout.tsx | 38 +++-------------------- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/apps/web/src/hooks/use-workspaces.ts b/apps/web/src/hooks/use-workspaces.ts index 8493cab0aa..6e4ad32c8f 100644 --- a/apps/web/src/hooks/use-workspaces.ts +++ b/apps/web/src/hooks/use-workspaces.ts @@ -1,8 +1,11 @@ import { DebugLogger } from '@affine/debug'; +import { initEmptyPage, initPageWithPreloading } from '@affine/env/blocksuite'; +import { DEFAULT_HELLO_WORLD_PAGE_ID_SUFFIX } from '@affine/env/constant'; import { WorkspaceFlavour, WorkspaceVersion } from '@affine/env/workspace'; import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; import { saveWorkspaceToLocalStorage } from '@affine/workspace/local/crud'; import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils'; +import { assertEquals } from '@blocksuite/global/utils'; import { nanoid } from '@blocksuite/store'; import { getWorkspace } from '@toeverything/plugin-infra/__internal__/workspace'; import { useAtomValue, useSetAtom } from 'jotai'; @@ -45,6 +48,30 @@ export function useAppHelper() { ); blockSuiteWorkspace.meta.setName(name); const id = await LocalAdapter.CRUD.create(blockSuiteWorkspace); + { + // this is hack, because CRUD doesn't return the workspace + const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( + id, + WorkspaceFlavour.LOCAL + ); + const pageId = `${blockSuiteWorkspace.id}-${DEFAULT_HELLO_WORLD_PAGE_ID_SUFFIX}`; + const page = blockSuiteWorkspace.createPage({ + id: pageId, + }); + assertEquals(page.id, pageId); + if (runtimeConfig.enablePreloading) { + await initPageWithPreloading(page).catch(error => { + console.error('import error:', error); + }); + } else { + await initEmptyPage(page).catch(error => { + console.error('init empty page error', error); + }); + } + blockSuiteWorkspace.setPageMeta(page.id, { + jumpOnce: true, + }); + } await set(workspaces => [ ...workspaces, { diff --git a/apps/web/src/layouts/workspace-layout.tsx b/apps/web/src/layouts/workspace-layout.tsx index c622a86635..bb8e2dd63a 100644 --- a/apps/web/src/layouts/workspace-layout.tsx +++ b/apps/web/src/layouts/workspace-layout.tsx @@ -10,7 +10,6 @@ import { ToolContainer, WorkspaceFallback, } from '@affine/component/workspace'; -import { initEmptyPage, initPageWithPreloading } from '@affine/env/blocksuite'; import { DEFAULT_HELLO_WORLD_PAGE_ID_SUFFIX, isDesktop, @@ -20,7 +19,7 @@ import { rootBlockHubAtom, rootWorkspacesMetadataAtom, } from '@affine/workspace/atom'; -import { assertEquals, assertExists } from '@blocksuite/global/utils'; +import { assertExists } from '@blocksuite/global/utils'; import { nanoid } from '@blocksuite/store'; import type { DragEndEvent } from '@dnd-kit/core'; import { @@ -187,32 +186,6 @@ export const WorkspaceLayoutInner: FC = ({ children }) => { const router = useRouter(); const { jumpToPage } = useRouterHelper(router); - //#region init workspace - if (currentWorkspace.blockSuiteWorkspace.isEmpty) { - // this is a new workspace, so we should redirect to the new page - const pageId = `${currentWorkspace.blockSuiteWorkspace.id}-${DEFAULT_HELLO_WORLD_PAGE_ID_SUFFIX}`; - if (currentWorkspace.blockSuiteWorkspace.getPage(pageId) === null) { - const page = currentWorkspace.blockSuiteWorkspace.createPage({ - id: pageId, - }); - assertEquals(page.id, pageId); - if (runtimeConfig.enablePreloading) { - initPageWithPreloading(page).catch(error => { - console.error('import error:', error); - }); - } else { - initEmptyPage(page).catch(error => { - console.error('init empty page error', error); - }); - } - if (!router.query.pageId) { - setCurrentPageId(pageId); - jumpToPage(currentWorkspace.id, pageId).catch(console.error); - } - } - } - //#endregion - usePassiveWorkspaceEffect(currentWorkspace.blockSuiteWorkspace); useEffect(() => { @@ -220,12 +193,9 @@ export const WorkspaceLayoutInner: FC = ({ children }) => { `${currentWorkspace.blockSuiteWorkspace.id}-${DEFAULT_HELLO_WORLD_PAGE_ID_SUFFIX}` ); if (page && page.meta.jumpOnce) { - currentWorkspace.blockSuiteWorkspace.meta.setPageMeta( - `${currentWorkspace.blockSuiteWorkspace.id}-${DEFAULT_HELLO_WORLD_PAGE_ID_SUFFIX}`, - { - jumpOnce: false, - } - ); + currentWorkspace.blockSuiteWorkspace.meta.setPageMeta(page.id, { + jumpOnce: false, + }); setCurrentPageId(currentPageId); jumpToPage(currentWorkspace.id, page.id).catch(err => { console.error(err);