diff --git a/packages/react/src/components/ComboBox/ComboBox-test.js b/packages/react/src/components/ComboBox/ComboBox-test.js
index cf71e4ccfc5a..d9da3d7ab0e9 100644
--- a/packages/react/src/components/ComboBox/ComboBox-test.js
+++ b/packages/react/src/components/ComboBox/ComboBox-test.js
@@ -90,6 +90,12 @@ describe('ComboBox', () => {
});
});
+ it('should call `onChange` on a fully controlled component', async () => {
+ render();
+ await userEvent.click(screen.getAllByRole('button')[0]);
+ expect(mockProps.onChange).toHaveBeenCalled();
+ });
+
it('should select the correct item from the filtered list after text input on click', async () => {
const user = userEvent.setup();
diff --git a/packages/react/src/components/ComboBox/ComboBox.tsx b/packages/react/src/components/ComboBox/ComboBox.tsx
index 3903ff5168c0..557c9dbc7ef4 100644
--- a/packages/react/src/components/ComboBox/ComboBox.tsx
+++ b/packages/react/src/components/ComboBox/ComboBox.tsx
@@ -57,6 +57,7 @@ const {
InputKeyDownArrowUp,
InputKeyDownArrowDown,
MenuMouseLeave,
+ FunctionSelectItem,
} = useCombobox.stateChangeTypes;
const defaultItemToString = (item: ItemType | null) => {
@@ -521,6 +522,16 @@ const ComboBox = forwardRef(
}
return changes;
}
+
+ case FunctionSelectItem:
+ if (onChange) {
+ onChange({
+ selectedItem: changes.selectedItem,
+ inputValue: changes.inputValue,
+ });
+ }
+ return changes;
+
case InputKeyDownEnter:
if (allowCustomValue) {
setInputValue(inputValue);