Skip to content

Commit d2a5d38

Browse files
authored
fix: Prevent page scroll when resizing code editor with keyboard (#3410)
1 parent 0e10faf commit d2a5d38

File tree

2 files changed

+14
-15
lines changed

2 files changed

+14
-15
lines changed

src/code-editor/resizable-box/__tests__/resizable-box.test.tsx

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,21 @@ test('Emits resize events on mouse resizing', () => {
5858
expect(onResize).toHaveBeenCalledWith(150);
5959
});
6060

61-
test('Emits resize events on keyboard resizing', () => {
61+
test.each([
62+
['ArrowDown', 20],
63+
['ArrowRight', 20],
64+
['ArrowUp', -20],
65+
['ArrowLeft', -20],
66+
])('Emits resize events on keydown press: %s', (key, expectedChange) => {
67+
const initialHeight = 100;
6268
const onResize = jest.fn();
63-
render(<ResizableBox {...defaultProps} height={100} onResize={onResize} />);
64-
// Arrow keys resize by 20px
65-
fireEvent.keyDown(findHandle(), { key: 'ArrowDown' });
66-
expect(onResize).toHaveBeenCalledWith(120);
6769

68-
onResize.mockClear();
69-
fireEvent.keyDown(findHandle(), { key: 'ArrowRight' });
70-
expect(onResize).toHaveBeenCalledWith(120);
70+
render(<ResizableBox {...defaultProps} height={initialHeight} onResize={onResize} />);
7171

72-
onResize.mockClear();
73-
fireEvent.keyDown(findHandle(), { key: 'ArrowUp' });
74-
expect(onResize).toHaveBeenCalledWith(80);
75-
76-
onResize.mockClear();
77-
fireEvent.keyDown(findHandle(), { key: 'ArrowLeft' });
78-
expect(onResize).toHaveBeenCalledWith(80);
72+
const keydownEvent = new KeyboardEvent('keydown', { key, bubbles: true, cancelable: true });
73+
fireEvent(findHandle(), keydownEvent);
74+
expect(keydownEvent.defaultPrevented).toBe(true);
75+
expect(onResize).toHaveBeenCalledWith(initialHeight + expectedChange);
7976
});
8077

8178
test('Emits resize events when direction buttons are pressed', () => {

src/code-editor/resizable-box/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@ export function ResizableBox({
4444
switch (event.key) {
4545
case 'ArrowDown':
4646
case 'ArrowRight':
47+
event.preventDefault(); // Prevent page scroll
4748
onResizeStable(height + KEYBOARD_STEP_SIZE);
4849
break;
4950
case 'ArrowUp':
5051
case 'ArrowLeft':
52+
event.preventDefault(); // Prevent page scroll
5153
onResizeStable(Math.max(height - KEYBOARD_STEP_SIZE, minHeight));
5254
break;
5355
}

0 commit comments

Comments
 (0)