chore(editor): at menu stays open when left right arrow keys are pressed (#10806)

Close [BS-2644](https://linear.app/affine-design/issue/BS-2644/menu-support)
This commit is contained in:
L-Sun
2025-03-13 06:14:35 +00:00
parent 3db3db0bbc
commit 8ac687628c
3 changed files with 38 additions and 7 deletions
@@ -179,6 +179,14 @@ export class LinkedDocPopover extends SignalWatcher(
createKeydownObserver({
target: eventSource,
signal: keydownObserverAbortController.signal,
interceptor: (event, next) => {
if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {
event.preventDefault();
event.stopPropagation();
return;
}
next();
},
onInput: isComposition => {
if (isComposition) {
this._updateLinkedDocGroup().catch(console.error);
@@ -12,9 +12,9 @@ import {
cutByKeyboard,
pasteByKeyboard,
pressArrowLeft,
pressArrowRight,
pressBackspace,
pressEnter,
pressEscape,
selectAllByKeyboard,
SHORT_KEY,
type,
@@ -107,7 +107,7 @@ test.describe('reference node', () => {
);
const { linkedDocPopover } = getLinkedDocPopover(page);
await expect(linkedDocPopover).toBeVisible();
await pressArrowRight(page);
await pressEscape(page);
await expect(linkedDocPopover).toBeHidden();
await type(page, '@');
await expect(linkedDocPopover).toBeVisible();
@@ -382,11 +382,6 @@ test.describe('linked page popover', () => {
await page.keyboard.press('Escape');
await expect(linkedDocPopover).toBeHidden();
await type(page, '@');
await expect(linkedDocPopover).toBeVisible();
await page.keyboard.press('ArrowRight');
await expect(linkedDocPopover).toBeHidden();
await type(page, '@');
await expect(linkedDocPopover).toBeVisible();
await copyByKeyboard(page);
@@ -0,0 +1,28 @@
import { test } from '@affine-test/kit/playwright';
import { openHomePage } from '@affine-test/kit/utils/load-page';
import {
clickNewPageButton,
type,
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
import { expect } from '@playwright/test';
test.beforeEach(async ({ page }) => {
await openHomePage(page);
await clickNewPageButton(page);
await waitForEditorLoad(page);
});
test('at menu should not be close when press arrow key', async ({ page }) => {
await page.keyboard.press('Enter');
await type(page, '@');
const atMenu = page.locator('.linked-doc-popover');
await expect(atMenu).toBeVisible();
await page.keyboard.press('ArrowRight');
await expect(atMenu).toBeVisible();
await page.keyboard.press('ArrowLeft');
await expect(atMenu).toBeVisible();
});