I am working on a project where I'm supposed to implement autocomplete functionality in a search box. I'm using React-InstantSearch and my SearchBox component is built up using an Algolia connector connectSearchBox. Now I want to implement autocomplete functionality in this same search box using connectAutoComplete. I'm confused how these two connectors should go together? Would really appreciate if you guys can help me on this. Thank you!
Link to Autocomplete connector: https://www.algolia.com/doc/api-reference/widgets/autocomplete/react/?client=jsx
Here's the relevant code:
SearchBox.jsx
export const SearchBoxBase = ({
className,
defaultRefinement,
variant,
headerTitle,
}) => {
....
....
....
return (
<div className={className}>
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
<label id="search-input-box" className="fe__searchfield-input-box text-brand-primary">
{ headerTitle || searchText }
</label>
<SearchField.Advanced
className={classNames('fe__searchfield', {
'fe__searchfield--inverse': variant === STYLE_VARIANTS.inverse,
})}
value={defaultRefinement}
onSubmit={handleSubmit}
onClear={handleClear}
>
<SearchField.Input
className="form-control-lg"
aria-labelledby="search-input-box"
data-nr-synth-id="catalog-search-input-field"
data-hj-whitelist
/>
<SearchField.ClearButton data-nr-synth-id="catalog-search-clear-button" />
<SearchField.SubmitButton data-nr-synth-id="catalog-search-submit-button" />
</SearchField.Advanced>
</div>
);
};
export default connectSearchBox(SearchBoxBase);
And this is what I'm planning to add into the SearchBox component:
const Autocomplete = ({ hits, currentRefinement, refine }) => (
<ul>
<li>
<input
type="search"
value={currentRefinement}
onChange={event => refine(event.currentTarget.value)}
/>
</li>
{hits.map(hit => (
<li key={hit.objectID}>{hit.name}</li>
))}
</ul>
);
const CustomAutocomplete = connectAutoComplete(Autocomplete);
The <input> tag in my case will be replaced by <SearchField.Input> in SearchBox.jsx