mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 04:18:54 +00:00
fix: new page logic (#1621)
This commit is contained in:
@@ -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'
|
||||||
|
|||||||
@@ -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 (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
Reference in New Issue
Block a user