diff --git a/apps/web/src/components/blocksuite/block-suite-editor/index.tsx b/apps/web/src/components/blocksuite/block-suite-editor/index.tsx index 56783564c9..e39704667f 100644 --- a/apps/web/src/components/blocksuite/block-suite-editor/index.tsx +++ b/apps/web/src/components/blocksuite/block-suite-editor/index.tsx @@ -67,16 +67,20 @@ export const BlockSuiteEditor = (props: EditorProps) => { } else { console.debug('Initializing page with default content'); // Add page block and surface block at root level - const title = - localStorage.getItem(kFirstPage) === null ? exampleTitle : undefined; + const isFirstPage = page.meta.init === true; + if (isFirstPage) { + page.workspace.setPageMeta(page.id, { + init: false, + }); + } + const title = isFirstPage ? exampleTitle : undefined; const pageBlockId = page.addBlockByFlavour('affine:page', { title: new page.Text(title), }); page.addBlockByFlavour('affine:surface', {}, null); const frameId = page.addBlockByFlavour('affine:frame', {}, pageBlockId); page.addBlockByFlavour('affine:paragraph', {}, frameId); - if (localStorage.getItem(kFirstPage) === null) { - // fixme(himself65): remove + if (isFirstPage) { editor.clipboard.importMarkdown(exampleText, frameId); props.blockSuiteWorkspace.setPageMeta(page.id, { title }); localStorage.setItem(kFirstPage, 'true'); diff --git a/apps/web/src/hooks/use-create-first-workspace.ts b/apps/web/src/hooks/use-create-first-workspace.ts index dcef22b6e5..366bae6a9a 100644 --- a/apps/web/src/hooks/use-create-first-workspace.ts +++ b/apps/web/src/hooks/use-create-first-workspace.ts @@ -26,18 +26,12 @@ export function useCreateFirstWorkspace() { const workspace = await LocalPlugin.CRUD.get(id); assertExists(workspace); assertEquals(workspace.id, id); - const newPageId = nanoid(); - workspace.blockSuiteWorkspace.slots.pageAdded.once(pageId => { - assertEquals(pageId, newPageId); - set(workspaces => [ - ...workspaces, - { - id: workspace.id, - flavour: RemWorkspaceFlavour.LOCAL, - }, - ]); - }); - workspace.blockSuiteWorkspace.createPage(newPageId); + set([ + { + id: workspace.id, + flavour: RemWorkspaceFlavour.LOCAL, + }, + ]); } if ( jotaiWorkspaces.length === 0 && diff --git a/apps/web/src/hooks/use-page-meta.ts b/apps/web/src/hooks/use-page-meta.ts index 0e293c820d..0156655f15 100644 --- a/apps/web/src/hooks/use-page-meta.ts +++ b/apps/web/src/hooks/use-page-meta.ts @@ -9,6 +9,8 @@ declare module '@blocksuite/store' { favorite?: boolean; trash?: boolean; trashDate?: number; + // whether to create the page with the default template + init?: boolean; } } diff --git a/apps/web/src/pages/workspace/[workspaceId]/all.tsx b/apps/web/src/pages/workspace/[workspaceId]/all.tsx index d934cb717d..2e2920f7b1 100644 --- a/apps/web/src/pages/workspace/[workspaceId]/all.tsx +++ b/apps/web/src/pages/workspace/[workspaceId]/all.tsx @@ -1,9 +1,9 @@ import { useTranslation } from '@affine/i18n'; import { FolderIcon } from '@blocksuite/icons'; -import { assertExists } from '@blocksuite/store'; +import { assertExists, nanoid } from '@blocksuite/store'; import Head from 'next/head'; import { useRouter } from 'next/router'; -import React, { useCallback } from 'react'; +import React, { useCallback, useEffect } from 'react'; import { QueryParamError, @@ -21,6 +21,35 @@ const AllPage: NextPageWithLayout = () => { const [currentWorkspace] = useCurrentWorkspace(); const { t } = useTranslation(); useSyncRouterWithCurrentWorkspace(router); + useEffect(() => { + if (!router.isReady) { + return; + } + if (currentWorkspace) { + const doc = currentWorkspace.blockSuiteWorkspace.doc; + if (doc.store.clients.size === 1) { + const items = [...doc.store.clients.values()][0]; + if (items.length <= 1) { + // this is a new workspace, so we should redirect to the new page + const pageId = nanoid(); + currentWorkspace.blockSuiteWorkspace.slots.pageAdded.once(id => { + currentWorkspace.blockSuiteWorkspace.setPageMeta(id, { + init: true, + }); + assertExists(pageId, id); + router.push({ + pathname: '/workspace/[workspaceId]/[pageId]', + query: { + workspaceId: currentWorkspace.id, + pageId, + }, + }); + }); + currentWorkspace.blockSuiteWorkspace.createPage(pageId); + } + } + } + }, [currentWorkspace, router]); const onClickPage = useCallback( (pageId: string, newTab?: boolean) => { assertExists(currentWorkspace);