From c1505feed654f6b7632960d648e9af85aabc37ab Mon Sep 17 00:00:00 2001 From: MingLiang Wang Date: Fri, 23 Dec 2022 12:40:39 +0800 Subject: [PATCH] feat: fix workspace name --- .../app-state-provider/dynamic-blocksuite.tsx | 11 +++++++++- .../providers/app-state-provider/provider.tsx | 22 ++++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/app/src/providers/app-state-provider/dynamic-blocksuite.tsx b/packages/app/src/providers/app-state-provider/dynamic-blocksuite.tsx index 84d0d136d2..d9667f5c31 100644 --- a/packages/app/src/providers/app-state-provider/dynamic-blocksuite.tsx +++ b/packages/app/src/providers/app-state-provider/dynamic-blocksuite.tsx @@ -13,7 +13,11 @@ import type { LoadWorkspaceHandler, CreateEditorHandler, } from './context'; -import { token, WebsocketProvider } from '@pathfinder/data-services'; +import { + downloadWorkspace, + token, + WebsocketProvider, +} from '@pathfinder/data-services'; interface Props { setLoadWorkspaceHandler: (handler: LoadWorkspaceHandler) => void; @@ -64,6 +68,11 @@ const DynamicBlocksuite = ({ const indexDBProvider = workspace.providers.find( p => p instanceof IndexedDBDocProvider ); + const updates = await downloadWorkspace({ workspaceId }); + updates && + Workspace.Y.applyUpdate(workspace.doc, new Uint8Array(updates)); + // if after update, the space:meta is empty, then we need to get map with doc + workspace.doc.getMap('space:meta'); if (indexDBProvider) { (indexDBProvider as IndexedDBDocProvider).on('synced', async () => { resolve(workspace); diff --git a/packages/app/src/providers/app-state-provider/provider.tsx b/packages/app/src/providers/app-state-provider/provider.tsx index ad17d0ee31..ad5d5d697b 100644 --- a/packages/app/src/providers/app-state-provider/provider.tsx +++ b/packages/app/src/providers/app-state-provider/provider.tsx @@ -44,15 +44,17 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => { const refreshWorkspacesInfo = async ( workspaces: AppStateValue['workspaces'] ) => { - Object.entries(workspaces).forEach(async ([workspaceId, workspace]) => { - if (workspace) { - const updates = await downloadWorkspace({ workspaceId }); - updates && - Workspace.Y.applyUpdate(workspace.doc, new Uint8Array(updates)); - // if after update, the space:meta is empty, then we need to get map with doc - workspace.doc.getMap('space:meta'); - } - }); + return Promise.all( + Object.entries(workspaces).map(async ([workspaceId, workspace]) => { + if (workspace) { + const updates = await downloadWorkspace({ workspaceId }); + updates && + Workspace.Y.applyUpdate(workspace.doc, new Uint8Array(updates)); + // if after update, the space:meta is empty, then we need to get map with doc + workspace.doc.getMap('space:meta'); + } + }) + ); }; useEffect(() => { @@ -67,11 +69,11 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => { workspacesList.forEach(({ id, workspace }) => { workspaces[id] = workspace; }); + await refreshWorkspacesInfo(workspaces); setState(state => ({ ...state, workspaces, })); - refreshWorkspacesInfo(workspaces); })(); }, [state.workspacesMeta]);