From 225af973c1d651788c80bed7afcf0e13e885aee5 Mon Sep 17 00:00:00 2001 From: Snowknight26 Date: Sat, 30 Aug 2025 13:39:25 -0500 Subject: [PATCH] fix(web): Prevent changing asset location triggering keyboard shortcuts (#21451) fix(web): Prevent changing asset location triggering asset keyboard shortcuts --- .../__test__/number-range-input.spec.ts | 28 ++++++++++++++++++- .../coordinates-input.svelte | 8 ++++-- .../number-range-input.svelte | 5 +++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/web/src/lib/components/shared-components/__test__/number-range-input.spec.ts b/web/src/lib/components/shared-components/__test__/number-range-input.spec.ts index be09d2a35c..dc325bd52c 100644 --- a/web/src/lib/components/shared-components/__test__/number-range-input.spec.ts +++ b/web/src/lib/components/shared-components/__test__/number-range-input.spec.ts @@ -1,18 +1,24 @@ import NumberRangeInput from '$lib/components/shared-components/number-range-input.svelte'; import { render, type RenderResult } from '@testing-library/svelte'; import userEvent from '@testing-library/user-event'; +import type { Mock } from 'vitest'; describe('NumberRangeInput component', () => { const user = userEvent.setup(); let sut: RenderResult; let input: HTMLInputElement; + let onInput: Mock; + let onKeyDown: Mock; beforeEach(() => { + onInput = vi.fn(); + onKeyDown = vi.fn(); sut = render(NumberRangeInput, { id: '', min: -90, max: 90, - onInput: () => {}, + onInput, + onKeyDown, }); input = sut.getByRole('spinbutton') as HTMLInputElement; }); @@ -21,35 +27,55 @@ describe('NumberRangeInput component', () => { expect(input.value).toBe(''); await sut.rerender({ value: 10 }); expect(input.value).toBe('10'); + expect(onInput).not.toHaveBeenCalled(); + expect(onKeyDown).not.toHaveBeenCalled(); }); it('restricts minimum value', async () => { await user.type(input, '-91'); expect(input.value).toBe('-90'); + expect(onInput).toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); }); it('restricts maximum value', async () => { await user.type(input, '09990'); expect(input.value).toBe('90'); + expect(onInput).toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); }); it('allows entering negative numbers', async () => { await user.type(input, '-10'); expect(input.value).toBe('-10'); + expect(onInput).toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); }); it('allows entering zero', async () => { await user.type(input, '0'); expect(input.value).toBe('0'); + expect(onInput).toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); }); it('allows entering decimal numbers', async () => { await user.type(input, '-0.09001'); expect(input.value).toBe('-0.09001'); + expect(onInput).toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); }); it('ignores text input', async () => { await user.type(input, 'test'); expect(input.value).toBe(''); + expect(onInput).toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); + }); + + it('test', async () => { + await user.type(input, 'd'); + expect(onInput).not.toHaveBeenCalled(); + expect(onKeyDown).toHaveBeenCalled(); }); }); diff --git a/web/src/lib/components/shared-components/coordinates-input.svelte b/web/src/lib/components/shared-components/coordinates-input.svelte index 9e71197dd5..9b35d1a485 100644 --- a/web/src/lib/components/shared-components/coordinates-input.svelte +++ b/web/src/lib/components/shared-components/coordinates-input.svelte @@ -20,6 +20,10 @@ } }; + const onKeyDown = (event: KeyboardEvent) => { + event.stopPropagation(); + }; + const onPaste = (event: ClipboardEvent) => { const pastedText = event.clipboardData?.getData('text/plain'); if (!pastedText) { @@ -42,10 +46,10 @@
- +
- +
diff --git a/web/src/lib/components/shared-components/number-range-input.svelte b/web/src/lib/components/shared-components/number-range-input.svelte index 95a9a12a98..13b3d18cc0 100644 --- a/web/src/lib/components/shared-components/number-range-input.svelte +++ b/web/src/lib/components/shared-components/number-range-input.svelte @@ -1,6 +1,6 @@