mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-25 22:38:56 +08:00
fix(component): cmdk flaky (#4512)
This commit is contained in:
@@ -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]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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 />,
|
||||||
});
|
});
|
||||||
|
|||||||
+3
-2
@@ -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,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user