fix(component): cmdk flaky (#4512)

This commit is contained in:
Peng Xiao
2023-09-27 09:37:00 +08:00
committed by GitHub
parent 4a03fa65d1
commit 369db3fea5
4 changed files with 23 additions and 18 deletions
@@ -19,14 +19,14 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
); );
const setPageMode = useSetAtom(setPageModeAtom); const setPageMode = useSetAtom(setPageModeAtom);
const createPageAndOpen = useCallback( const createPageAndOpen = useCallback(
(id?: string, mode?: 'page' | 'edgeless'): string => { (id?: string, mode?: 'page' | 'edgeless') => {
const page = createPage(id); const page = createPage(id);
initEmptyPage(page).catch(error => { initEmptyPage(page).catch(error => {
toast(`Failed to initialize Page: ${error.message}`); toast(`Failed to initialize Page: ${error.message}`);
}); });
setPageMode(page.id, mode || 'page'); setPageMode(page.id, mode || 'page');
openPage(blockSuiteWorkspace.id, page.id); openPage(blockSuiteWorkspace.id, page.id);
return page.id; return page;
}, },
[blockSuiteWorkspace.id, createPage, openPage, setPageMode] [blockSuiteWorkspace.id, createPage, openPage, setPageMode]
); );
+8 -12
View File
@@ -243,12 +243,10 @@ export const usePageCommands = () => {
), ),
value: 'affine::create-page' + query, // hack to make the page always showing in the search result value: 'affine::create-page' + query, // hack to make the page always showing in the search result
category: 'affine:creation', category: 'affine:creation',
run: () => { run: async () => {
const pageId = pageHelper.createPage(); const page = pageHelper.createPage();
// need to wait for the page to be created await page.waitForLoaded();
setTimeout(() => { pageMetaHelper.setPageTitle(page.id, query);
pageMetaHelper.setPageTitle(pageId, query);
});
}, },
icon: <PageIcon />, icon: <PageIcon />,
}); });
@@ -265,12 +263,10 @@ export const usePageCommands = () => {
), ),
value: 'affine::create-edgeless' + query, // hack to make the page always showing in the search result value: 'affine::create-edgeless' + query, // hack to make the page always showing in the search result
category: 'affine:creation', category: 'affine:creation',
run: () => { run: async () => {
const pageId = pageHelper.createEdgeless(); const page = pageHelper.createEdgeless();
// need to wait for the page to be created await page.waitForLoaded();
setTimeout(() => { pageMetaHelper.setPageTitle(page.id, query);
pageMetaHelper.setPageTitle(pageId, query);
});
}, },
icon: <EdgelessIcon />, icon: <EdgelessIcon />,
}); });
@@ -14,8 +14,9 @@ export const AddFavouriteButton = ({ workspace }: AddFavouriteButtonProps) => {
const { createPage } = usePageHelper(workspace); const { createPage } = usePageHelper(workspace);
const { setPageMeta } = usePageMetaHelper(workspace); const { setPageMeta } = usePageMetaHelper(workspace);
const handleAddFavorite = useCallback(async () => { const handleAddFavorite = useCallback(async () => {
const id = createPage(); const page = createPage();
setPageMeta(id, { favorite: true }); await page.waitForLoaded();
setPageMeta(page.id, { favorite: true });
}, [createPage, setPageMeta]); }, [createPage, setPageMeta]);
return ( return (
@@ -3,6 +3,7 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom';
import { getOrCreateWorkspace } from '@affine/workspace/manager'; import { getOrCreateWorkspace } from '@affine/workspace/manager';
import type { Page } from '@blocksuite/store';
import type { Meta, StoryFn } from '@storybook/react'; import type { Meta, StoryFn } from '@storybook/react';
import { currentWorkspaceIdAtom } from '@toeverything/infra/atom'; import { currentWorkspaceIdAtom } from '@toeverything/infra/atom';
import { import {
@@ -21,6 +22,13 @@ export default {
}, },
} satisfies Meta; } satisfies Meta;
const createMockedPage = () => {
return {
id: 'test-page',
waitForLoaded: () => Promise.resolve(),
} as any as Page;
};
function useRegisterCommands() { function useRegisterCommands() {
const t = useAFFiNEI18N(); const t = useAFFiNEI18N();
const store = useStore(); const store = useStore();
@@ -39,8 +47,8 @@ function useRegisterCommands() {
t, t,
store, store,
pageHelper: { pageHelper: {
createEdgeless: () => 'noop', createEdgeless: createMockedPage,
createPage: () => 'noop', createPage: createMockedPage,
importFile: () => Promise.resolve(), importFile: () => Promise.resolve(),
isPreferredEdgeless: () => false, isPreferredEdgeless: () => false,
}, },