diff --git a/packages/autocomplete-core/defaultProps.ts b/packages/autocomplete-core/defaultProps.ts index 1c78413e2..5ef851406 100644 --- a/packages/autocomplete-core/defaultProps.ts +++ b/packages/autocomplete-core/defaultProps.ts @@ -25,6 +25,7 @@ export function getDefaultProps( environment, shouldDropdownOpen: ({ state }) => getItemsCount(state) > 0, onStateChange: noop, + onSubmit: noop, ...props, // The following props need to be deeply defaulted. initialState: { diff --git a/packages/autocomplete-core/propGetters.ts b/packages/autocomplete-core/propGetters.ts index 7e56b834f..f2439f58e 100644 --- a/packages/autocomplete-core/propGetters.ts +++ b/packages/autocomplete-core/propGetters.ts @@ -46,7 +46,16 @@ export function getPropGetters({ onSubmit: event => { event.preventDefault(); - // @TODO: call the `onInputChange` or `onSubmit` user prop? + props.onSubmit({ + state: store.getState(), + setHighlightedIndex, + setQuery, + setSuggestions, + setIsOpen, + setStatus, + setContext, + event, + }); store.setState( stateReducer(store.getState(), { type: 'submit', value: null }, props) diff --git a/packages/autocomplete-core/types.ts b/packages/autocomplete-core/types.ts index e1a91fe8c..3ce322fc2 100644 --- a/packages/autocomplete-core/types.ts +++ b/packages/autocomplete-core/types.ts @@ -167,15 +167,16 @@ export interface AutocompleteSourceOptions { /** * Called when an item is selected. */ - onSelect?: (options: ItemEventHandlerOptions) => void; + onSelect?: (options: ItemEventHandlerParams) => void; } -export interface EventHandlerOptions extends AutocompleteSetters { +interface EventHandlerParams extends AutocompleteSetters { state: AutocompleteState; + event: Event; } -export interface ItemEventHandlerOptions - extends EventHandlerOptions { +export interface ItemEventHandlerParams + extends EventHandlerParams { suggestion: Suggestion; suggestionValue: ReturnType; suggestionUrl: ReturnType; @@ -285,6 +286,10 @@ export interface AutocompleteOptions { * The function called to determine whether the dropdown should open. */ shouldDropdownOpen?(options: { state: AutocompleteState }): boolean; + /** + * The function called when the autocomplete form is submitted. + */ + onSubmit?(params: EventHandlerParams): void; } export type NormalizedAutocompleteSource = { @@ -310,4 +315,5 @@ export interface RequiredAutocompleteOptions { environment: Environment; navigator: Navigator; shouldDropdownOpen(options: { state: AutocompleteState }): boolean; + onSubmit(params: EventHandlerParams): void; }