diff --git a/packages/frontend/core/src/modules/editor/entities/editor.ts b/packages/frontend/core/src/modules/editor/entities/editor.ts index 5d6be817c704d..a8a9e4bd2f14d 100644 --- a/packages/frontend/core/src/modules/editor/entities/editor.ts +++ b/packages/frontend/core/src/modules/editor/entities/editor.ts @@ -159,14 +159,20 @@ export class Editor extends Entity { const focusAt$ = LiveData.computed(get => { const selector = get(this.selector$); - const id = - get(this.mode$) === 'edgeless' && selector?.elementIds?.length - ? selector?.elementIds?.[0] - : selector?.blockIds?.[0]; + let id = selector?.blockIds?.[0]; + let key = 'blockIds'; + + if (get(this.mode$) === 'edgeless') { + const elementId = selector?.elementIds?.[0]; + if (elementId) { + id = elementId; + key = 'elementIds'; + } + } if (!id) return null; - return { id, refreshKey: selector?.refreshKey }; + return { id, key, refreshKey: selector?.refreshKey }; }); if (focusAt$.value === null && docTitle) { const title = docTitle.querySelector< @@ -177,15 +183,18 @@ export class Editor extends Entity { const subscription = focusAt$ .distinctUntilChanged( - (a, b) => a?.id === b?.id && a?.refreshKey === b?.refreshKey + (a, b) => + a?.id === b?.id && + a?.key === b?.key && + a?.refreshKey === b?.refreshKey ) - .subscribe(params => { - if (!params?.id) return; + .subscribe(anchor => { + if (!anchor) return; const std = editorContainer.host?.std; if (!std) return; - scrollAnchoring(std, this.mode$.value, params.id); + scrollAnchoring(std, this.mode$.value, anchor); }); unsubs.push(subscription.unsubscribe.bind(subscription)); diff --git a/packages/frontend/core/src/modules/editor/utils/scroll-anchoring.ts b/packages/frontend/core/src/modules/editor/utils/scroll-anchoring.ts index 32a87cb79535e..6b0a78e0c1b2f 100644 --- a/packages/frontend/core/src/modules/editor/utils/scroll-anchoring.ts +++ b/packages/frontend/core/src/modules/editor/utils/scroll-anchoring.ts @@ -1,37 +1,12 @@ -import { notify } from '@affine/component'; -import { I18n } from '@affine/i18n'; import type { BlockStdScope } from '@blocksuite/block-std'; -import { - GfxControllerIdentifier, - type GfxModel, -} from '@blocksuite/block-std/gfx'; import type { DocMode } from '@blocksuite/blocks'; // TODO(@fundon): it should be a command -export function scrollAnchoring(std: BlockStdScope, mode: DocMode, id: string) { - let key = 'blockIds'; - let exists = false; - - if (mode === 'page') { - exists = std.doc.hasBlock(id); - } else { - const controller = std.getOptional(GfxControllerIdentifier); - if (!controller) return; - - exists = !!controller.getElementById(id)?.xywh; - if (controller.surface?.hasElementById(id)) { - key = 'elementIds'; - } - } - - if (!exists) { - notify.error({ - title: I18n['Block not found'](), - message: I18n['Block not found description'](), - }); - return; - } - +export function scrollAnchoring( + std: BlockStdScope, + mode: DocMode, + { id, key }: { id: string; key: 'blockIds' | 'elementIds' } +) { const selection = std.selection; selection.setGroup('scene', [ diff --git a/packages/frontend/i18n/src/resources/en.json b/packages/frontend/i18n/src/resources/en.json index 95a16b7ffacb0..372a39582db98 100644 --- a/packages/frontend/i18n/src/resources/en.json +++ b/packages/frontend/i18n/src/resources/en.json @@ -26,8 +26,6 @@ "Back Home": "Back home", "Back to Quick Search": "Back to quick search", "Back to all": "Back to all", - "Block not found": "Block not found", - "Block not found description": "The block you are trying to access does not exist or has been removed.", "Body text": "Body text", "Bold": "Bold", "Cancel": "Cancel",