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 createPageAndOpen = useCallback(
(id?: string, mode?: 'page' | 'edgeless'): string => {
(id?: string, mode?: 'page' | 'edgeless') => {
const page = createPage(id);
initEmptyPage(page).catch(error => {
toast(`Failed to initialize Page: ${error.message}`);
});
setPageMode(page.id, mode || 'page');
openPage(blockSuiteWorkspace.id, page.id);
return page.id;
return page;
},
[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
category: 'affine:creation',
run: () => {
const pageId = pageHelper.createPage();
// need to wait for the page to be created
setTimeout(() => {
pageMetaHelper.setPageTitle(pageId, query);
});
run: async () => {
const page = pageHelper.createPage();
await page.waitForLoaded();
pageMetaHelper.setPageTitle(page.id, query);
},
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
category: 'affine:creation',
run: () => {
const pageId = pageHelper.createEdgeless();
// need to wait for the page to be created
setTimeout(() => {
pageMetaHelper.setPageTitle(pageId, query);
});
run: async () => {
const page = pageHelper.createEdgeless();
await page.waitForLoaded();
pageMetaHelper.setPageTitle(page.id, query);
},
icon: <EdgelessIcon />,
});
@@ -14,8 +14,9 @@ export const AddFavouriteButton = ({ workspace }: AddFavouriteButtonProps) => {
const { createPage } = usePageHelper(workspace);
const { setPageMeta } = usePageMetaHelper(workspace);
const handleAddFavorite = useCallback(async () => {
const id = createPage();
setPageMeta(id, { favorite: true });
const page = createPage();
await page.waitForLoaded();
setPageMeta(page.id, { favorite: true });
}, [createPage, setPageMeta]);
return (
@@ -3,6 +3,7 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom';
import { getOrCreateWorkspace } from '@affine/workspace/manager';
import type { Page } from '@blocksuite/store';
import type { Meta, StoryFn } from '@storybook/react';
import { currentWorkspaceIdAtom } from '@toeverything/infra/atom';
import {
@@ -21,6 +22,13 @@ export default {
},
} satisfies Meta;
const createMockedPage = () => {
return {
id: 'test-page',
waitForLoaded: () => Promise.resolve(),
} as any as Page;
};
function useRegisterCommands() {
const t = useAFFiNEI18N();
const store = useStore();
@@ -39,8 +47,8 @@ function useRegisterCommands() {
t,
store,
pageHelper: {
createEdgeless: () => 'noop',
createPage: () => 'noop',
createEdgeless: createMockedPage,
createPage: createMockedPage,
importFile: () => Promise.resolve(),
isPreferredEdgeless: () => false,
},