diff --git a/services/web/frontend/js/shared/components/select.tsx b/services/web/frontend/js/shared/components/select.tsx index eb7c453099..271896a34e 100644 --- a/services/web/frontend/js/shared/components/select.tsx +++ b/services/web/frontend/js/shared/components/select.tsx @@ -1,6 +1,6 @@ /* eslint-disable jsx-a11y/label-has-for */ /* eslint-disable jsx-a11y/label-has-associated-control */ -import { useRef, useEffect } from 'react' +import { useRef, useEffect, KeyboardEventHandler, useCallback } from 'react' import classNames from 'classnames' import { useSelect } from 'downshift' import Icon from './icon' @@ -59,6 +59,7 @@ export const Select = ({ getMenuProps, getItemProps, highlightedIndex, + openMenu, } = useSelect({ items: items ?? [], itemToString, @@ -91,6 +92,17 @@ export const Select = ({ } }, [name, itemToString, selectedItem, defaultItem]) + const onKeyDown: KeyboardEventHandler = useCallback( + event => { + if (event.key === 'Enter' && !isOpen) { + event.preventDefault() + ;(event.nativeEvent as any).preventDownshiftDefault = true + openMenu() + } + }, + [isOpen, openMenu] + ) + let value: string | undefined if (selectedItem || defaultItem) { value = itemToString(selectedItem || defaultItem) @@ -113,7 +125,12 @@ export const Select = ({ ) : null}
{value}
diff --git a/services/web/test/frontend/components/shared/select.spec.tsx b/services/web/test/frontend/components/shared/select.spec.tsx index 15fa53590d..7231a1bd11 100644 --- a/services/web/test/frontend/components/shared/select.spec.tsx +++ b/services/web/test/frontend/components/shared/select.spec.tsx @@ -266,4 +266,13 @@ describe('