From 4d8d1285390263d261fba8304b62783f79c214a0 Mon Sep 17 00:00:00 2001 From: Himself65 Date: Thu, 2 Mar 2023 21:48:35 -0600 Subject: [PATCH] fix: blob fetch and state syncing between tabs (#1287) --- apps/web/src/atoms/index.ts | 13 +++---------- apps/web/src/atoms/public-workspace/index.ts | 5 ++++- apps/web/src/hooks/use-workspaces.ts | 5 ++++- apps/web/src/pages/_debug/broadcast.dev.tsx | 6 +++++- apps/web/src/pages/preview/[previewId].tsx | 5 ++++- apps/web/src/plugins/local/index.tsx | 10 ++++++++-- 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/apps/web/src/atoms/index.ts b/apps/web/src/atoms/index.ts index d62ec0baf0..e9d5126345 100644 --- a/apps/web/src/atoms/index.ts +++ b/apps/web/src/atoms/index.ts @@ -1,17 +1,10 @@ import { atom } from 'jotai'; -import { createStore } from 'jotai/index'; -import { atomWithStorage } from 'jotai/utils'; +import { createStore } from 'jotai'; import { unstable_batchedUpdates } from 'react-dom'; // workspace necessary atoms -export const currentWorkspaceIdAtom = atomWithStorage( - 'affine-current-workspace-id', - null -); -export const currentPageIdAtom = atomWithStorage( - 'affine-current-page-id', - null -); +export const currentWorkspaceIdAtom = atom(null); +export const currentPageIdAtom = atom(null); // If the workspace is locked, it means that the user maybe updating the workspace // from local to remote or vice versa export const workspaceLockAtom = atom(false); diff --git a/apps/web/src/atoms/public-workspace/index.ts b/apps/web/src/atoms/public-workspace/index.ts index bf13b09882..9e5ffbeb15 100644 --- a/apps/web/src/atoms/public-workspace/index.ts +++ b/apps/web/src/atoms/public-workspace/index.ts @@ -16,7 +16,10 @@ export const publicBlockSuiteAtom = atom>( throw new Error('No workspace id'); } const binary = await apis.downloadWorkspace(workspaceId, true); - const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace(workspaceId); + const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( + workspaceId, + (_: string) => undefined + ); BlockSuiteWorkspace.Y.applyUpdate( blockSuiteWorkspace.doc, new Uint8Array(binary) diff --git a/apps/web/src/hooks/use-workspaces.ts b/apps/web/src/hooks/use-workspaces.ts index 0d515492cd..8f53182a64 100644 --- a/apps/web/src/hooks/use-workspaces.ts +++ b/apps/web/src/hooks/use-workspaces.ts @@ -38,7 +38,10 @@ globalThis.dataCenter = dataCenter; function createRemLocalWorkspace(name: string) { const id = nanoid(); - const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace(id); + const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( + id, + (_: string) => undefined + ); blockSuiteWorkspace.meta.setName(name); const workspace: LocalWorkspace = { flavour: RemWorkspaceFlavour.LOCAL, diff --git a/apps/web/src/pages/_debug/broadcast.dev.tsx b/apps/web/src/pages/_debug/broadcast.dev.tsx index 8bdddee48a..d3e1e3cf22 100644 --- a/apps/web/src/pages/_debug/broadcast.dev.tsx +++ b/apps/web/src/pages/_debug/broadcast.dev.tsx @@ -19,7 +19,11 @@ declare global { const BroadcastPage: React.FC = () => { const blockSuiteWorkspace = useMemo( - () => createEmptyBlockSuiteWorkspace('broadcast-test'), + () => + createEmptyBlockSuiteWorkspace( + 'broadcast-test', + (_: string) => undefined + ), [] ); const [provider, setProvider] = useState( diff --git a/apps/web/src/pages/preview/[previewId].tsx b/apps/web/src/pages/preview/[previewId].tsx index a0755918dd..359add5df7 100644 --- a/apps/web/src/pages/preview/[previewId].tsx +++ b/apps/web/src/pages/preview/[previewId].tsx @@ -29,7 +29,10 @@ const PreviewPage: NextPage = ({ const [blockSuiteWorkspace, setBlockSuiteWorkspace] = useState(null); useEffect(() => { - const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace('preview'); + const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( + 'preview', + (_: string) => undefined + ); blockSuiteWorkspace.signals.pageAdded.once(() => { setBlockSuiteWorkspace(blockSuiteWorkspace); }); diff --git a/apps/web/src/plugins/local/index.tsx b/apps/web/src/plugins/local/index.tsx index eceb8c4b2a..f3f83c841f 100644 --- a/apps/web/src/plugins/local/index.tsx +++ b/apps/web/src/plugins/local/index.tsx @@ -92,7 +92,10 @@ export const LocalPlugin: WorkspacePlugin = { if (config.enableIndexedDBProvider) { const workspaces = await Promise.all( ids.map(id => { - const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace(id); + const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( + id, + (_: string) => undefined + ); const workspace: LocalWorkspace = { id, flavour: RemWorkspaceFlavour.LOCAL, @@ -139,7 +142,10 @@ export const LocalPlugin: WorkspacePlugin = { } logger.info('no local workspace found, create a new one'); const workspaceId = nanoid(); - const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace(workspaceId); + const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( + workspaceId, + (_: string) => undefined + ); blockSuiteWorkspace.meta.setName('Untitled Workspace'); localStorage.setItem(kStoreKey, JSON.stringify([workspaceId])); blockSuiteWorkspace.createPage(nanoid());