perf(core): load all pages after 10s (#4834)

This commit is contained in:
Peng Xiao
2023-11-03 17:42:29 +08:00
committed by GitHub
parent 61dc4a56f9
commit 7e381e830a
7 changed files with 102 additions and 15 deletions

View File

@@ -6,6 +6,8 @@ import { ReferencePage } from '../components/reference-page';
import type { FavoriteListProps } from '../index';
import EmptyItem from './empty-item';
const emptyPageIdSet = new Set<string>();
export const FavoriteList = ({ workspace }: FavoriteListProps) => {
const metas = useBlockSuitePageMeta(workspace);
@@ -35,7 +37,7 @@ export const FavoriteList = ({ workspace }: FavoriteListProps) => {
metaMapping={metaMapping}
pageId={pageMeta.id}
// memo?
parentIds={new Set()}
parentIds={emptyPageIdSet}
workspace={workspace}
/>
);

View File

@@ -18,6 +18,7 @@ import {
rootWorkspacesMetadataAtom,
} from '@affine/workspace/atom';
import { assertExists } from '@blocksuite/global/utils';
import type { Page } from '@blocksuite/store';
import type { DragEndEvent } from '@dnd-kit/core';
import {
DndContext,
@@ -29,6 +30,7 @@ import {
useSensors,
} from '@dnd-kit/core';
import { useBlockSuitePageMeta } from '@toeverything/hooks/use-block-suite-page-meta';
import { loadPage } from '@toeverything/hooks/use-block-suite-workspace-page';
import { currentWorkspaceIdAtom } from '@toeverything/infra/atom';
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
import { nanoid } from 'nanoid';
@@ -119,6 +121,29 @@ type WorkspaceLayoutProps = {
incompatible?: boolean;
};
// fix https://github.com/toeverything/AFFiNE/issues/4825
function useLoadWorkspacePages() {
const [currentWorkspace] = useCurrentWorkspace();
const pageMetas = useBlockSuitePageMeta(currentWorkspace.blockSuiteWorkspace);
useEffect(() => {
if (currentWorkspace) {
const timer = setTimeout(() => {
const pageIds = pageMetas.map(meta => meta.id);
const pages = pageIds
.map(id => currentWorkspace.blockSuiteWorkspace.getPage(id))
.filter((p): p is Page => !!p);
pages.forEach(page => {
loadPage(page, -10);
});
}, 10 * 1000); // load pages after 10s
return () => {
clearTimeout(timer);
};
}
return;
}, [currentWorkspace, pageMetas]);
}
export const WorkspaceLayout = function WorkspacesSuspense({
children,
incompatible = false,
@@ -237,6 +262,8 @@ export const WorkspaceLayoutInner = ({
const inTrashPage = pageMeta?.trash ?? false;
const setMainContainer = useSetAtom(mainContainerAtom);
useLoadWorkspacePages();
return (
<>
{/* This DndContext is used for drag page from all-pages list into a folder in sidebar */}