diff --git a/packages/frontend/core/src/pages/workspace/index.tsx b/packages/frontend/core/src/pages/workspace/index.tsx
index c19e99ef63..7789867045 100644
--- a/packages/frontend/core/src/pages/workspace/index.tsx
+++ b/packages/frontend/core/src/pages/workspace/index.tsx
@@ -7,7 +7,13 @@ import {
} from '@toeverything/infra';
import { useService, useServiceOptional } from '@toeverything/infra/di';
import { useLiveData } from '@toeverything/infra/livedata';
-import { type ReactElement, Suspense, useEffect, useMemo } from 'react';
+import {
+ type ReactElement,
+ Suspense,
+ useEffect,
+ useMemo,
+ useState,
+} from 'react';
import { Outlet, useParams } from 'react-router-dom';
import { AffineErrorBoundary } from '../../components/affine/affine-error-boundary';
@@ -67,12 +73,34 @@ export const Component = (): ReactElement => {
const currentWorkspace = useServiceOptional(Workspace);
+ const [workspaceIsLoading, setWorkspaceIsLoading] = useState(true);
+
+ // hotfix: avoid doing operation, before workspace is loaded
+ useEffect(() => {
+ if (!workspace) {
+ setWorkspaceIsLoading(true);
+ return;
+ }
+ const metaYMap = workspace.blockSuiteWorkspace.doc.getMap('meta');
+
+ const handleYMapChanged = () => {
+ setWorkspaceIsLoading(metaYMap.size === 0);
+ };
+
+ handleYMapChanged();
+
+ metaYMap.observe(handleYMapChanged);
+ return () => {
+ metaYMap.unobserve(handleYMapChanged);
+ };
+ }, [workspace]);
+
// if listLoading is false, we can show 404 page, otherwise we should show loading page.
if (listLoading === false && meta === undefined) {
return ;
}
- if (!currentWorkspace) {
+ if (!currentWorkspace || workspaceIsLoading) {
return ;
}