Skip to content

Commit a507191

Browse files
authored
fix: fire ComboBox onChange on Tab selection (#22007)
1 parent 1634ed2 commit a507191

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

packages/react/src/components/ComboBox/ComboBox-test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,30 @@ describe('ComboBox', () => {
202202
});
203203
});
204204

205+
it('should call `onChange` when a highlighted item is committed on Tab', async () => {
206+
const user = userEvent.setup();
207+
208+
render(
209+
<>
210+
<ComboBox {...mockProps} />
211+
<button type="button">Next focus target</button>
212+
</>
213+
);
214+
215+
await user.click(findInputNode());
216+
await user.type(findInputNode(), 'Item');
217+
await user.keyboard('[ArrowDown]');
218+
await user.keyboard('[Tab]');
219+
220+
expect(mockProps.onChange).toHaveBeenCalledTimes(1);
221+
expect(mockProps.onChange).toHaveBeenCalledWith({
222+
selectedItem: mockProps.items[1],
223+
});
224+
expect(
225+
screen.getByRole('button', { name: 'Next focus target' })
226+
).toHaveFocus();
227+
});
228+
205229
describe('onInputChange', () => {
206230
let onInputChange;
207231
beforeEach(() => {

packages/react/src/components/ComboBox/ComboBox.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,9 +895,10 @@ const ComboBox = forwardRef(
895895
if (
896896
(type === ItemClick ||
897897
type === FunctionSelectItem ||
898-
type === InputKeyDownEnter) &&
898+
type === InputKeyDownEnter ||
899+
(!allowCustomValue && type === InputBlur)) &&
899900
typeof newSelectedItem !== 'undefined' &&
900-
!isEqual(selectedItemProp, newSelectedItem)
901+
!isEqual(currentSelectedItem, newSelectedItem)
901902
) {
902903
if (items.some((item) => isEqual(item, newSelectedItem))) {
903904
committedCustomValueRef.current = '';

0 commit comments

Comments
 (0)