From 6c6e702fe5ced5b4e3eb4c6e7b3453587c46abb5 Mon Sep 17 00:00:00 2001 From: Zach Mueller Date: Mon, 14 Aug 2023 10:54:51 -0500 Subject: [PATCH] Restore Standard Select Controls Selects standard controls allow for arrow keys up/down to select the previous/next option, and then when a user tabs, it keeps that selected option. This commit restores that lost functionality. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#technical_summary --- src/OptionList.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/OptionList.tsx b/src/OptionList.tsx index dd4f034d..4e4f727d 100644 --- a/src/OptionList.tsx +++ b/src/OptionList.tsx @@ -160,6 +160,11 @@ const OptionList: React.ForwardRefRenderFunction = (_, r } }; + const onUpdateValue = (value: RawValueType) => { + if (value !== undefined) { + onSelect(value, { selected: !rawValues.has(value) }); + } + }; // ========================= Keyboard ========================= React.useImperativeHandle(ref, () => ({ onKeyDown: (event) => { @@ -183,11 +188,17 @@ const OptionList: React.ForwardRefRenderFunction = (_, r } } + const nextActiveIndex = getEnabledActiveIndex(activeIndex + offset, offset); if (offset !== 0) { - const nextActiveIndex = getEnabledActiveIndex(activeIndex + offset, offset); scrollIntoView(nextActiveIndex); setActive(nextActiveIndex, true); } + const item = memoFlattenOptions[nextActiveIndex]; + if (item && !item.data.disabled) { + onUpdateValue(item.value); + } else { + onUpdateValue(undefined); + } break; }