From 1bc2a0f900662fdfd612c8506bbeb0aff370c1da Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Tue, 31 Mar 2026 21:00:31 +0530 Subject: [PATCH 1/5] Fix shared page mode syncing --- .../core/src/__tests__/share-page.spec.ts | 42 ++++++++++++ .../src/__tests__/use-share-url.utils.spec.ts | 14 ++++ .../block-suite-mode-switch/index.tsx | 10 +-- .../use-register-copy-link-commands.tsx | 10 ++- .../hooks/affine/use-share-url.utils.ts | 5 ++ .../pages/workspace/share/share-page.tsx | 55 +++++++++++----- .../pages/workspace/share/share-page.utils.ts | 21 ++++++ .../share/use-shared-mode-query-sync.ts | 60 +++++++++++++++++ .../share/use-shared-publish-mode.ts | 64 +++++++++++++++++++ .../view/share-menu/copy-link-button.tsx | 5 +- 10 files changed, 262 insertions(+), 24 deletions(-) create mode 100644 packages/frontend/core/src/__tests__/share-page.spec.ts create mode 100644 packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts create mode 100644 packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts create mode 100644 packages/frontend/core/src/desktop/pages/workspace/share/share-page.utils.ts create mode 100644 packages/frontend/core/src/desktop/pages/workspace/share/use-shared-mode-query-sync.ts create mode 100644 packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts diff --git a/packages/frontend/core/src/__tests__/share-page.spec.ts b/packages/frontend/core/src/__tests__/share-page.spec.ts new file mode 100644 index 0000000000000..05f6b1537525a --- /dev/null +++ b/packages/frontend/core/src/__tests__/share-page.spec.ts @@ -0,0 +1,42 @@ +import { PublicDocMode } from '@affine/graphql'; +import { describe, expect, test } from 'vitest'; + +import { + getResolvedPublishMode, + getSearchWithMode, +} from '../desktop/pages/workspace/share/share-page.utils'; + +describe('getResolvedPublishMode', () => { + test('prefers the query mode when it is present', () => { + expect(getResolvedPublishMode('edgeless', PublicDocMode.Page)).toBe( + 'edgeless' + ); + expect(getResolvedPublishMode('page', PublicDocMode.Edgeless)).toBe( + 'page' + ); + }); + + test('falls back to the published public mode for shared docs', () => { + expect(getResolvedPublishMode(null, PublicDocMode.Edgeless)).toBe( + 'edgeless' + ); + expect(getResolvedPublishMode(null, PublicDocMode.Page)).toBe('page'); + }); + + test('defaults to page when no mode is available', () => { + expect(getResolvedPublishMode(null, null)).toBe('page'); + expect(getResolvedPublishMode(null, undefined)).toBe('page'); + }); +}); + +describe('getSearchWithMode', () => { + test('adds mode to an empty search string', () => { + expect(getSearchWithMode('', 'edgeless')).toBe('?mode=edgeless'); + }); + + test('replaces an existing mode and preserves other params', () => { + expect(getSearchWithMode('?foo=1&mode=page&bar=2', 'edgeless')).toBe( + '?foo=1&mode=edgeless&bar=2' + ); + }); +}); diff --git a/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts b/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts new file mode 100644 index 0000000000000..d5170bd6586a3 --- /dev/null +++ b/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts @@ -0,0 +1,14 @@ +import { describe, expect, test } from 'vitest'; + +import { getDefaultShareMode } from '../components/hooks/affine/use-share-url.utils'; + +describe('getDefaultShareMode', () => { + test('returns edgeless when the current mode is edgeless', () => { + expect(getDefaultShareMode('edgeless')).toBe('edgeless'); + }); + + test('returns page for page mode or an unset mode', () => { + expect(getDefaultShareMode('page')).toBe('page'); + expect(getDefaultShareMode(undefined)).toBe('page'); + }); +}); diff --git a/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx b/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx index 641cbcf6f3bc8..969416ef5a74f 100644 --- a/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx +++ b/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx @@ -47,14 +47,14 @@ export const EditorModeSwitch = () => { const isActiveView = activeView?.id && activeView?.id === view?.id; const togglePage = useCallback(() => { - if (currentMode === 'page' || isSharedMode || trash) return; + if (currentMode === 'page' || trash) return; editor.setMode('page'); editor.setSelector(undefined); track.$.header.actions.switchPageMode({ mode: 'page' }); }, [currentMode, editor, isSharedMode, trash]); const toggleEdgeless = useCallback(() => { - if (currentMode === 'edgeless' || isSharedMode || trash) return; + if (currentMode === 'edgeless' || trash) return; editor.setMode('edgeless'); editor.setSelector(undefined); track.$.header.actions.switchPageMode({ mode: 'edgeless' }); @@ -68,12 +68,12 @@ export const EditorModeSwitch = () => { ); const shouldHide = useCallback( - (mode: DocMode) => (trash || isSharedMode) && currentMode !== mode, - [currentMode, isSharedMode, trash] + (mode: DocMode) => trash && currentMode !== mode, + [currentMode, trash] ); useEffect(() => { - if (trash || isSharedMode || currentMode === undefined || !isActiveView) + if (trash || currentMode === undefined || !isActiveView) return; return registerAffineCommand({ id: 'affine:doc-mode-switch', diff --git a/packages/frontend/core/src/components/hooks/affine/use-register-copy-link-commands.tsx b/packages/frontend/core/src/components/hooks/affine/use-register-copy-link-commands.tsx index c42edf4b99826..828e50d9c4494 100644 --- a/packages/frontend/core/src/components/hooks/affine/use-register-copy-link-commands.tsx +++ b/packages/frontend/core/src/components/hooks/affine/use-register-copy-link-commands.tsx @@ -3,9 +3,12 @@ import { registerAffineCommand, } from '@affine/core/commands'; import { useSharingUrl } from '@affine/core/components/hooks/affine/use-share-url'; +import { getDefaultShareMode } from '@affine/core/components/hooks/affine/use-share-url.utils'; +import { EditorService } from '@affine/core/modules/editor'; import { useIsActiveView } from '@affine/core/modules/workbench'; import type { WorkspaceMetadata } from '@affine/core/modules/workspace'; import { track } from '@affine/track'; +import { useLiveData, useService } from '@toeverything/infra'; import { useEffect } from 'react'; export function useRegisterCopyLinkCommands({ @@ -18,6 +21,7 @@ export function useRegisterCopyLinkCommands({ const isActiveView = useIsActiveView(); const workspaceId = workspaceMeta.id; const isCloud = workspaceMeta.flavour !== 'local'; + const currentMode = useLiveData(useService(EditorService).editor.mode$); const { onClickCopyLink } = useSharingUrl({ workspaceId, @@ -42,12 +46,14 @@ export function useRegisterCopyLinkCommands({ icon: null, run() { track.$.cmdk.general.copyShareLink(); - isActiveView && isCloud && onClickCopyLink(); + isActiveView && + isCloud && + onClickCopyLink(getDefaultShareMode(currentMode)); }, }) ); return () => { unsubs.forEach(unsub => unsub()); }; - }, [docId, isActiveView, isCloud, onClickCopyLink]); + }, [currentMode, docId, isActiveView, isCloud, onClickCopyLink]); } diff --git a/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts b/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts new file mode 100644 index 0000000000000..67844fb533098 --- /dev/null +++ b/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts @@ -0,0 +1,5 @@ +import type { DocMode } from '@blocksuite/affine/model'; + +export const getDefaultShareMode = (currentMode?: DocMode): DocMode => { + return currentMode === 'edgeless' ? 'edgeless' : 'page'; +}; diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx b/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx index 857f3d6acbb33..8b8f499687f7d 100644 --- a/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx +++ b/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx @@ -37,6 +37,8 @@ import { PageNotFound } from '../../404'; import { ShareFooter } from './share-footer'; import { ShareHeader } from './share-header'; import * as styles from './share-page.css'; +import { useSharedModeQuerySync } from './use-shared-mode-query-sync'; +import { useSharedPublishMode } from './use-shared-publish-mode'; const useUpdateBasename = (workspace: Workspace | null) => { const location = useLocation(); @@ -106,7 +108,7 @@ export const SharePage = ({ const SharePageInner = ({ workspaceId, docId, - publishMode = 'page', + publishMode, selector, isTemplate, templateName, @@ -128,10 +130,23 @@ const SharePageInner = ({ const [noPermission, setNoPermission] = useState(false); const [editorContainer, setActiveBlocksuiteEditor] = useActiveBlocksuiteEditor(); + const resolvedPublishMode = useSharedPublishMode({ + docId, + publishMode, + workspaceId, + }); + const currentPublishMode = useSharedModeQuerySync({ + editor, + resolvedPublishMode, + }); useEffect(() => { + if (!resolvedPublishMode || editor || workspace || page) { + return; + } + // create a workspace for share page - const { workspace } = workspacesService.open( + const { workspace: sharedWorkspace } = workspacesService.open( { metadata: { id: workspaceId, @@ -160,16 +175,16 @@ const SharePageInner = ({ } ); - setWorkspace(workspace); + setWorkspace(sharedWorkspace); - workspace.engine.doc - .waitForDocLoaded(workspace.id) + sharedWorkspace.engine.doc + .waitForDocLoaded(sharedWorkspace.id) .then(async () => { - const { doc } = workspace.scope.get(DocsService).open(docId); + const { doc } = sharedWorkspace.scope.get(DocsService).open(docId); doc.blockSuiteDoc.load(); doc.blockSuiteDoc.readonly = true; - await workspace.engine.doc.waitForDocLoaded(docId); + await sharedWorkspace.engine.doc.waitForDocLoaded(docId); if (!doc.blockSuiteDoc.root) { throw new Error('Doc is empty'); @@ -178,7 +193,7 @@ const SharePageInner = ({ setPage(doc); const editor = doc.scope.get(EditorsService).createEditor(); - editor.setMode(publishMode); + editor.setMode(resolvedPublishMode); if (selector) { editor.setSelector(selector); @@ -192,13 +207,23 @@ const SharePageInner = ({ }); }, [ docId, + editor, + page, + resolvedPublishMode, workspaceId, + workspace, workspacesService, - publishMode, - selector, serverService.server.baseUrl, ]); + useEffect(() => { + if (!editor) { + return; + } + + editor.setSelector(selector); + }, [editor, selector]); + const t = useI18n(); const pageTitle = useLiveData(page?.title$); const { jumpToPageBlock, openPage } = useNavigateHelper(); @@ -244,7 +269,7 @@ const SharePageInner = ({ return ; } - if (!workspace || !page || !editor) { + if (!workspace || !page || !editor || !currentPublishMode) { return null; } @@ -252,13 +277,13 @@ const SharePageInner = ({ - +
- {publishMode === 'page' && !BUILD_CONFIG.isElectron ? ( + {currentPublishMode === 'page' && !BUILD_CONFIG.isElectron ? ( ) : null} @@ -279,7 +304,7 @@ const SharePageInner = ({ {!BUILD_CONFIG.isElectron && }
diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/share-page.utils.ts b/packages/frontend/core/src/desktop/pages/workspace/share/share-page.utils.ts new file mode 100644 index 0000000000000..9ce7e76a9f287 --- /dev/null +++ b/packages/frontend/core/src/desktop/pages/workspace/share/share-page.utils.ts @@ -0,0 +1,21 @@ +import { PublicDocMode } from '@affine/graphql'; +import { type DocMode, DocModes } from '@blocksuite/affine/model'; + +export const getResolvedPublishMode = ( + queryMode: DocMode | null, + publicMode?: PublicDocMode | null +): DocMode => { + if (queryMode && DocModes.includes(queryMode)) { + return queryMode; + } + + return publicMode === PublicDocMode.Edgeless ? 'edgeless' : 'page'; +}; + +export const getSearchWithMode = (search: string, mode: DocMode) => { + const searchParams = new URLSearchParams(search); + searchParams.set('mode', mode); + + const nextSearch = searchParams.toString(); + return nextSearch ? `?${nextSearch}` : ''; +}; diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-mode-query-sync.ts b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-mode-query-sync.ts new file mode 100644 index 0000000000000..24dcafd3f2357 --- /dev/null +++ b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-mode-query-sync.ts @@ -0,0 +1,60 @@ +import type { Editor } from '@affine/core/modules/editor'; +import type { DocMode } from '@blocksuite/affine/model'; +import { useLiveData } from '@toeverything/infra'; +import { useEffect, useRef } from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; + +import { getSearchWithMode } from './share-page.utils'; + +export const useSharedModeQuerySync = ({ + editor, + resolvedPublishMode, +}: { + editor: Editor | null; + resolvedPublishMode: DocMode | null; +}) => { + const location = useLocation(); + const navigate = useNavigate(); + const currentPublishMode = useLiveData(editor?.mode$) ?? resolvedPublishMode; + const previousPublishModeRef = useRef(null); + + useEffect(() => { + if (!editor || !resolvedPublishMode) { + return; + } + + if (editor.mode$.value !== resolvedPublishMode) { + editor.setMode(resolvedPublishMode); + } + }, [editor, resolvedPublishMode]); + + useEffect(() => { + if (!currentPublishMode) { + return; + } + + if (previousPublishModeRef.current === null) { + previousPublishModeRef.current = currentPublishMode; + return; + } + + if (previousPublishModeRef.current === currentPublishMode) { + return; + } + + previousPublishModeRef.current = currentPublishMode; + + const nextSearch = getSearchWithMode(location.search, currentPublishMode); + if (nextSearch !== location.search) { + navigate( + { + pathname: location.pathname, + search: nextSearch, + }, + { replace: true } + ); + } + }, [currentPublishMode, location.pathname, location.search, navigate]); + + return currentPublishMode; +}; diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts new file mode 100644 index 0000000000000..d20e470cdb388 --- /dev/null +++ b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts @@ -0,0 +1,64 @@ +import { ServerService } from '@affine/core/modules/cloud'; +import { getWorkspacePageByIdQuery } from '@affine/graphql'; +import { type DocMode } from '@blocksuite/affine/model'; +import { useService } from '@toeverything/infra'; +import { useEffect, useState } from 'react'; + +import { getResolvedPublishMode } from './share-page.utils'; + +export const useSharedPublishMode = ({ + docId, + publishMode, + workspaceId, +}: { + docId: string; + publishMode?: DocMode; + workspaceId: string; +}) => { + const serverService = useService(ServerService); + const [resolvedPublishMode, setResolvedPublishMode] = useState( + publishMode ?? null + ); + + useEffect(() => { + const controller = new AbortController(); + + if (publishMode) { + setResolvedPublishMode(publishMode); + + return () => { + controller.abort(); + }; + } + + serverService.server + .gql({ + query: getWorkspacePageByIdQuery, + variables: { + workspaceId, + pageId: docId, + }, + context: { + signal: controller.signal, + }, + }) + .then(data => { + const publicMode = data.workspace.doc?.mode; + setResolvedPublishMode(getResolvedPublishMode(null, publicMode)); + }) + .catch(err => { + if (controller.signal.aborted) { + return; + } + + console.error(err); + setResolvedPublishMode('page'); + }); + + return () => { + controller.abort(); + }; + }, [docId, publishMode, serverService.server, workspaceId]); + + return resolvedPublishMode; +}; diff --git a/packages/frontend/core/src/modules/share-menu/view/share-menu/copy-link-button.tsx b/packages/frontend/core/src/modules/share-menu/view/share-menu/copy-link-button.tsx index 0ded6696cd827..290ee42bd51d5 100644 --- a/packages/frontend/core/src/modules/share-menu/view/share-menu/copy-link-button.tsx +++ b/packages/frontend/core/src/modules/share-menu/view/share-menu/copy-link-button.tsx @@ -3,6 +3,7 @@ import { getSelectedNodes, useSharingUrl, } from '@affine/core/components/hooks/affine/use-share-url'; +import { getDefaultShareMode } from '@affine/core/components/hooks/affine/use-share-url.utils'; import { EditorService } from '@affine/core/modules/editor'; import { useI18n } from '@affine/i18n'; import type { DocMode } from '@blocksuite/affine/model'; @@ -46,8 +47,8 @@ export const CopyLinkButton = ({ }, [onClickCopyLink, currentMode, blockIds, elementIds]); const onCopyLink = useCallback(() => { - onClickCopyLink(); - }, [onClickCopyLink]); + onClickCopyLink(getDefaultShareMode(currentMode)); + }, [currentMode, onClickCopyLink]); return (
Date: Tue, 31 Mar 2026 22:33:57 +0530 Subject: [PATCH 2/5] Reset shared publish mode on doc change --- .../desktop/pages/workspace/share/use-shared-publish-mode.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts index d20e470cdb388..6cb7cc7216246 100644 --- a/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts +++ b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts @@ -31,6 +31,8 @@ export const useSharedPublishMode = ({ }; } + setResolvedPublishMode(null); + serverService.server .gql({ query: getWorkspacePageByIdQuery, From d3fd46d8f6cfc6925565de1fb8be278db34b987e Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Tue, 31 Mar 2026 22:38:54 +0530 Subject: [PATCH 3/5] Avoid implicit page mode on share errors --- .../src/desktop/pages/workspace/share/share-page.tsx | 6 +++++- .../pages/workspace/share/use-shared-publish-mode.ts | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx b/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx index 8b8f499687f7d..95072004f4891 100644 --- a/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx +++ b/packages/frontend/core/src/desktop/pages/workspace/share/share-page.tsx @@ -130,7 +130,7 @@ const SharePageInner = ({ const [noPermission, setNoPermission] = useState(false); const [editorContainer, setActiveBlocksuiteEditor] = useActiveBlocksuiteEditor(); - const resolvedPublishMode = useSharedPublishMode({ + const { hasPublishModeError, resolvedPublishMode } = useSharedPublishMode({ docId, publishMode, workspaceId, @@ -265,6 +265,10 @@ const SharePageInner = ({ [editor, setActiveBlocksuiteEditor, jumpToPageBlock, openPage, workspaceId] ); + if (hasPublishModeError && !workspace && !page && !editor) { + return null; + } + if (noPermission) { return ; } diff --git a/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts index 6cb7cc7216246..31898f08e3f76 100644 --- a/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts +++ b/packages/frontend/core/src/desktop/pages/workspace/share/use-shared-publish-mode.ts @@ -19,11 +19,13 @@ export const useSharedPublishMode = ({ const [resolvedPublishMode, setResolvedPublishMode] = useState( publishMode ?? null ); + const [hasPublishModeError, setHasPublishModeError] = useState(false); useEffect(() => { const controller = new AbortController(); if (publishMode) { + setHasPublishModeError(false); setResolvedPublishMode(publishMode); return () => { @@ -31,6 +33,7 @@ export const useSharedPublishMode = ({ }; } + setHasPublishModeError(false); setResolvedPublishMode(null); serverService.server @@ -54,7 +57,7 @@ export const useSharedPublishMode = ({ } console.error(err); - setResolvedPublishMode('page'); + setHasPublishModeError(true); }); return () => { @@ -62,5 +65,8 @@ export const useSharedPublishMode = ({ }; }, [docId, publishMode, serverService.server, workspaceId]); - return resolvedPublishMode; + return { + hasPublishModeError, + resolvedPublishMode, + }; }; From 7cbe17cdc349936ae47848d6402245e86aad50d0 Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Tue, 31 Mar 2026 22:41:47 +0530 Subject: [PATCH 4/5] Preserve implicit share mode fallback --- .../frontend/core/src/__tests__/use-share-url.utils.spec.ts | 6 +++--- .../core/src/components/hooks/affine/use-share-url.utils.ts | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts b/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts index d5170bd6586a3..119ea3c53e5ef 100644 --- a/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts +++ b/packages/frontend/core/src/__tests__/use-share-url.utils.spec.ts @@ -7,8 +7,8 @@ describe('getDefaultShareMode', () => { expect(getDefaultShareMode('edgeless')).toBe('edgeless'); }); - test('returns page for page mode or an unset mode', () => { - expect(getDefaultShareMode('page')).toBe('page'); - expect(getDefaultShareMode(undefined)).toBe('page'); + test('returns undefined for page mode or an unset mode', () => { + expect(getDefaultShareMode('page')).toBeUndefined(); + expect(getDefaultShareMode(undefined)).toBeUndefined(); }); }); diff --git a/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts b/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts index 67844fb533098..039de4e0a92b9 100644 --- a/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts +++ b/packages/frontend/core/src/components/hooks/affine/use-share-url.utils.ts @@ -1,5 +1,7 @@ import type { DocMode } from '@blocksuite/affine/model'; -export const getDefaultShareMode = (currentMode?: DocMode): DocMode => { - return currentMode === 'edgeless' ? 'edgeless' : 'page'; +export const getDefaultShareMode = ( + currentMode?: DocMode +): DocMode | undefined => { + return currentMode === 'edgeless' ? 'edgeless' : undefined; }; From 48d61f6b22b3c92e8277ca76e56c5cc6183c2a51 Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Wed, 1 Apr 2026 16:11:46 +0530 Subject: [PATCH 5/5] fix: clean shared mode lint warnings --- .../src/blocksuite/block-suite-mode-switch/index.tsx | 10 ++++------ .../src/desktop/pages/workspace/share/share-page.tsx | 1 + tests/affine-cloud/e2e/share-page-2.spec.ts | 4 +++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx b/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx index 969416ef5a74f..4b594322a6355 100644 --- a/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx +++ b/packages/frontend/core/src/blocksuite/block-suite-mode-switch/index.tsx @@ -39,7 +39,6 @@ export const EditorModeSwitch = () => { const t = useI18n(); const editor = useService(EditorService).editor; const trash = useLiveData(editor.doc.trash$); - const isSharedMode = editor.isSharedMode; const currentMode = useLiveData(editor.mode$); const view = useServiceOptional(ViewService)?.view; const workbench = useServiceOptional(WorkbenchService)?.workbench; @@ -51,14 +50,14 @@ export const EditorModeSwitch = () => { editor.setMode('page'); editor.setSelector(undefined); track.$.header.actions.switchPageMode({ mode: 'page' }); - }, [currentMode, editor, isSharedMode, trash]); + }, [currentMode, editor, trash]); const toggleEdgeless = useCallback(() => { if (currentMode === 'edgeless' || trash) return; editor.setMode('edgeless'); editor.setSelector(undefined); track.$.header.actions.switchPageMode({ mode: 'edgeless' }); - }, [currentMode, editor, isSharedMode, trash]); + }, [currentMode, editor, trash]); const onModeChange = useCallback( (mode: DocMode) => { @@ -73,8 +72,7 @@ export const EditorModeSwitch = () => { ); useEffect(() => { - if (trash || currentMode === undefined || !isActiveView) - return; + if (trash || currentMode === undefined || !isActiveView) return; return registerAffineCommand({ id: 'affine:doc-mode-switch', category: 'editor:page', @@ -89,7 +87,7 @@ export const EditorModeSwitch = () => { }, run: () => onModeChange(currentMode === 'edgeless' ? 'page' : 'edgeless'), }); - }, [currentMode, isActiveView, isSharedMode, onModeChange, t, trash]); + }, [currentMode, isActiveView, onModeChange, t, trash]); return (