fix: new page logic (#1621)

This commit is contained in:
Himself65
2023-03-20 02:39:18 -05:00
committed by GitHub
parent fe2d244460
commit cf3230c1ff
6 changed files with 17 additions and 31 deletions

View File

@@ -38,13 +38,13 @@ export const Footer: React.FC<FooterProps> = ({
onSelect={async () => { onSelect={async () => {
onClose(); onClose();
const id = nanoid(); const id = nanoid();
const pageId = await createPage(id, query); const page = await createPage(id, query);
assertEquals(pageId, id); assertEquals(page.id, id);
await jumpToPage(blockSuiteWorkspace.id, pageId); await jumpToPage(blockSuiteWorkspace.id, page.id);
if (!query) { if (!query) {
return; return;
} }
const newPage = blockSuiteWorkspace.getPage(pageId); const newPage = blockSuiteWorkspace.getPage(page.id);
if (newPage) { if (newPage) {
const block = newPage.getBlockByFlavour( const block = newPage.getBlockByFlavour(
'affine:page' 'affine:page'

View File

@@ -10,7 +10,7 @@ import {
SearchIcon, SearchIcon,
SettingsIcon, SettingsIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store'; import type { Page, PageMeta } from '@blocksuite/store';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import type React from 'react'; import type React from 'react';
@@ -96,7 +96,7 @@ export type WorkSpaceSliderBarProps = {
currentWorkspace: RemWorkspace | null; currentWorkspace: RemWorkspace | null;
currentPageId: string | null; currentPageId: string | null;
openPage: (pageId: string) => void; openPage: (pageId: string) => void;
createPage: () => Promise<string>; createPage: () => Page;
currentPath: string; currentPath: string;
paths: { paths: {
all: (workspaceId: string) => string; all: (workspaceId: string) => string;
@@ -123,10 +123,8 @@ export const WorkSpaceSliderBar: React.FC<WorkSpaceSliderBarProps> = ({
const [sidebarOpen] = useSidebarStatus(); const [sidebarOpen] = useSidebarStatus();
const pageMeta = usePageMeta(currentWorkspace?.blockSuiteWorkspace ?? null); const pageMeta = usePageMeta(currentWorkspace?.blockSuiteWorkspace ?? null);
const onClickNewPage = useCallback(async () => { const onClickNewPage = useCallback(async () => {
const pageId = await createPage(); const page = await createPage();
if (pageId) { openPage(page.id);
openPage(pageId);
}
}, [createPage, openPage]); }, [createPage, openPage]);
return ( return (
<> <>

View File

@@ -6,7 +6,7 @@ import 'fake-indexeddb/auto';
import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models';
import type { Page } from '@blocksuite/store'; import type { Page } from '@blocksuite/store';
import { renderHook } from '@testing-library/react'; import { renderHook } from '@testing-library/react';
import { beforeEach, describe, expect, test, vi } from 'vitest'; import { beforeEach, describe, expect, test } from 'vitest';
import { BlockSuiteWorkspace } from '../../shared'; import { BlockSuiteWorkspace } from '../../shared';
import { useBlockSuiteWorkspaceHelper } from '../use-blocksuite-workspace-helper'; import { useBlockSuiteWorkspaceHelper } from '../use-blocksuite-workspace-helper';
@@ -40,10 +40,8 @@ describe('useBlockSuiteWorkspaceHelper', () => {
const pageMetaHook = renderHook(() => usePageMeta(blockSuiteWorkspace)); const pageMetaHook = renderHook(() => usePageMeta(blockSuiteWorkspace));
expect(pageMetaHook.result.current.length).toBe(3); expect(pageMetaHook.result.current.length).toBe(3);
expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(3); expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(3);
const callback = vi.fn(id => { const page = helperHook.result.current.createPage('page4');
expect(id).toBe('page4'); expect(page.id).toBe('page4');
});
helperHook.result.current.createPage('page4').then(callback);
expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(4); expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(4);
pageMetaHook.rerender(); pageMetaHook.rerender();
expect(pageMetaHook.result.current.length).toBe(4); expect(pageMetaHook.result.current.length).toBe(4);

View File

@@ -1,3 +1,4 @@
import type { Page } from '@blocksuite/store';
import { assertExists } from '@blocksuite/store'; import { assertExists } from '@blocksuite/store';
import { useMemo } from 'react'; import { useMemo } from 'react';
@@ -8,20 +9,9 @@ export function useBlockSuiteWorkspaceHelper(
) { ) {
return useMemo( return useMemo(
() => ({ () => ({
createPage: (pageId: string, title?: string): Promise<string> => { createPage: (pageId: string, title?: string): Page => {
return new Promise(resolve => { assertExists(blockSuiteWorkspace);
assertExists(blockSuiteWorkspace); return blockSuiteWorkspace.createPage(pageId);
const dispose = blockSuiteWorkspace.slots.pageAdded.on(id => {
if (id === pageId) {
dispose.dispose();
// Fixme: https://github.com/toeverything/blocksuite/issues/1350
setTimeout(() => {
resolve(pageId);
}, 0);
}
});
blockSuiteWorkspace.createPage(pageId);
});
}, },
}), }),
[blockSuiteWorkspace] [blockSuiteWorkspace]

View File

@@ -148,7 +148,7 @@ export const WorkspaceLayoutInner: React.FC<React.PropsWithChildren> = ({
}, },
[currentWorkspace, isPublicWorkspace, jumpToPage, jumpToPublicWorkspacePage] [currentWorkspace, isPublicWorkspace, jumpToPage, jumpToPublicWorkspacePage]
); );
const handleCreatePage = useCallback(async () => { const handleCreatePage = useCallback(() => {
return helper.createPage(nanoid()); return helper.createPage(nanoid());
}, [helper]); }, [helper]);
const handleOpenWorkspaceListModal = useCallback(() => { const handleOpenWorkspaceListModal = useCallback(() => {

View File

@@ -99,7 +99,7 @@ test.describe('Search and select', () => {
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await page.keyboard.insertText('test123456'); await page.keyboard.insertText('test123456');
await page.waitForTimeout(50); await page.waitForTimeout(50);
await assertResultList(page, ["New 'test123456' page"]); await assertResultList(page, ['test123456']);
await page.keyboard.press('Enter'); await page.keyboard.press('Enter');
await page.waitForTimeout(300); await page.waitForTimeout(300);
await assertTitle(page, 'test123456'); await assertTitle(page, 'test123456');