From 51b3f2b0572b19dd8cf57106e13ce2161e310a54 Mon Sep 17 00:00:00 2001 From: Flrande <1978616327@qq.com> Date: Wed, 2 Apr 2025 09:21:32 +0000 Subject: [PATCH] fix(editor): do not display format bar with embed node (#11371) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close [BS-2895: 点击inline名字区域不需要显示format toolbar](https://linear.app/affine-design/issue/BS-2895/点击inline名字区域不需要显示format-toolbar) --- .../inlines/preset/src/command/utils.ts | 25 ++++++++++++++++--- tests/blocksuite/e2e/format-bar.spec.ts | 16 ++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/blocksuite/affine/inlines/preset/src/command/utils.ts b/blocksuite/affine/inlines/preset/src/command/utils.ts index c0443b001..3552909d4 100644 --- a/blocksuite/affine/inlines/preset/src/command/utils.ts +++ b/blocksuite/affine/inlines/preset/src/command/utils.ts @@ -202,8 +202,25 @@ export function getCombinedTextStyle(chain: Chain) { } export function isFormatSupported(chain: Chain) { - return handleCurrentSelection( - chain, - (_type, inlineEditors) => inlineEditors.length > 0 - ); + return handleCurrentSelection(chain, (_type, inlineEditors) => { + if (inlineEditors.length === 1) { + const inlineEditor = inlineEditors[0]; + const inlineRange = inlineEditor.getInlineRange(); + + // support block selection + if (!inlineRange) return true; + + if (inlineRange.length !== 1) return true; + + // skip embed node + const delta = inlineEditor.getDeltaByRangeIndex(inlineRange.index + 1); + if (!delta) return true; + + const isEmbed = inlineEditor.isEmbed(delta); + if (isEmbed) return false; + + return true; + } + return inlineEditors.length > 0; + }); } diff --git a/tests/blocksuite/e2e/format-bar.spec.ts b/tests/blocksuite/e2e/format-bar.spec.ts index c600b1c3c..b84b6a3d5 100644 --- a/tests/blocksuite/e2e/format-bar.spec.ts +++ b/tests/blocksuite/e2e/format-bar.spec.ts @@ -19,6 +19,7 @@ import { initThreeParagraphs, pasteByKeyboard, pressArrowDown, + pressArrowLeft, pressArrowUp, pressEnter, pressEscape, @@ -1051,3 +1052,18 @@ test.describe('more menu button', () => { await assertRichTexts(page, ['123', '789']); }); }); + +test('should not display format bar when just select embed node', async ({ + page, +}) => { + await enterPlaygroundRoom(page); + await initEmptyParagraphState(page); + await focusRichText(page, 0); + await type(page, '@\n'); + await assertRichTextInlineRange(page, 0, 1, 0); + await pressArrowLeft(page); + await assertRichTextInlineRange(page, 0, 0, 1); + + const { boldBtn } = getFormatBar(page); + await expect(boldBtn).toBeHidden(); +});