Skip to content

Commit 9ed31df

Browse files
authored
fix(autocomplete): add placeholder input prop (#6817)
* fix(autocomplete): add `placeholder` input prop * test: fix snapshot
1 parent 6d811bd commit 9ed31df

File tree

6 files changed

+22
-3
lines changed

6 files changed

+22
-3
lines changed

examples/react/query-suggestions/src/App.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export function App() {
5454

5555
<div className="search-panel__results">
5656
<EXPERIMENTAL_Autocomplete
57+
placeholder="Search for products"
5758
indices={[
5859
{
5960
indexName: 'instant_search',

packages/instantsearch-ui-components/src/components/autocomplete/AutocompleteSearch.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ export function createAutocompleteSearchComponent({ createElement }: Renderer) {
6363
autoCapitalize="off"
6464
enterKeyHint="search"
6565
spellCheck="false"
66-
placeholder=""
6766
maxLength={512}
6867
type="search"
6968
value={query}

packages/instantsearch-ui-components/src/components/autocomplete/createAutocompletePropGetters.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export type UsePropGetters<TItem extends BaseHit> = (params: {
4949
indicesConfig: Array<AutocompleteIndexConfig<TItem>>;
5050
onRefine: (query: string) => void;
5151
onSelect: NonNullable<AutocompleteIndexConfig<TItem>['onSelect']>;
52+
placeholder?: string;
5253
}) => {
5354
getInputProps: GetInputProps;
5455
getItemProps: GetItemProps;
@@ -68,6 +69,7 @@ export function createAutocompletePropGetters({
6869
indicesConfig,
6970
onRefine,
7071
onSelect: globalOnSelect,
72+
placeholder,
7173
}: Parameters<UsePropGetters<TItem>>[0]): ReturnType<UsePropGetters<TItem>> {
7274
const getElementId = createGetElementId(useId());
7375
const inputRef = useRef<HTMLInputElement>(null);
@@ -159,6 +161,7 @@ export function createAutocompletePropGetters({
159161
'aria-haspopup': 'grid',
160162
'aria-controls': getElementId('panel'),
161163
'aria-activedescendant': activeDescendant,
164+
placeholder,
162165
onFocus: () => setIsOpen(true),
163166
onKeyDown: (event) => {
164167
switch (event.key) {

packages/instantsearch.js/src/widgets/autocomplete/autocomplete.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,11 @@ type RendererParams<TItem extends BaseHit> = {
119119
};
120120
} & Pick<
121121
AutocompleteWidgetParams<TItem>,
122-
'getSearchPageURL' | 'onSelect' | 'showRecent' | 'showSuggestions'
122+
| 'getSearchPageURL'
123+
| 'onSelect'
124+
| 'showRecent'
125+
| 'showSuggestions'
126+
| 'placeholder'
123127
> &
124128
Required<Pick<AutocompleteWidgetParams<TItem>, 'cssClasses' | 'templates'>>;
125129

@@ -176,6 +180,7 @@ type AutocompleteWrapperProps<TItem extends BaseHit> = Pick<
176180
| 'renderState'
177181
| 'showRecent'
178182
| 'showSuggestions'
183+
| 'placeholder'
179184
> &
180185
Pick<AutocompleteRenderState, 'indices' | 'refine'> &
181186
RendererOptions<Partial<AutocompleteWidgetParams<TItem>>>;
@@ -192,6 +197,7 @@ function AutocompleteWrapper<TItem extends BaseHit>({
192197
showRecent,
193198
showSuggestions,
194199
templates,
200+
placeholder,
195201
}: AutocompleteWrapperProps<TItem>) {
196202
const { isolatedIndex, targetIndex } = renderState;
197203

@@ -250,6 +256,7 @@ function AutocompleteWrapper<TItem extends BaseHit>({
250256

251257
setQuery(query);
252258
}),
259+
placeholder,
253260
});
254261

255262
let AutocompleteRecentSearchComponent = ({
@@ -499,6 +506,11 @@ type AutocompleteWidgetParams<TItem extends BaseHit> = {
499506
* CSS classes to add.
500507
*/
501508
cssClasses?: AutocompleteCSSClasses;
509+
510+
/**
511+
* Placeholder text for the search input.
512+
*/
513+
placeholder?: string;
502514
};
503515

504516
export type AutocompleteWidget<TItem extends BaseHit = BaseHit> = WidgetFactory<
@@ -521,6 +533,7 @@ export function EXPERIMENTAL_autocomplete<TItem extends BaseHit = BaseHit>(
521533
onSelect,
522534
templates = {},
523535
cssClasses: userCssClasses = {},
536+
placeholder,
524537
} = widgetParams || {};
525538

526539
if (!container) {
@@ -593,6 +606,7 @@ export function EXPERIMENTAL_autocomplete<TItem extends BaseHit = BaseHit>(
593606
cssClasses,
594607
showRecent,
595608
showSuggestions,
609+
placeholder,
596610
renderState: {
597611
indexTemplateProps: [],
598612
isolatedIndex: undefined,

packages/react-instantsearch/src/widgets/Autocomplete.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export type AutocompleteProps<TItem extends BaseHit> = ComponentProps<'div'> & {
130130
}) => React.JSX.Element;
131131
searchParameters?: AutocompleteSearchParameters;
132132
classNames?: Partial<AutocompleteClassNames>;
133+
placeholder?: string;
133134
};
134135

135136
type InnerAutocompleteProps<TItem extends BaseHit> = Omit<
@@ -235,6 +236,7 @@ function InnerAutocomplete<TItem extends BaseHit = BaseHit>({
235236
panelComponent: PanelComponent,
236237
showRecent,
237238
showSuggestions,
239+
placeholder,
238240
...props
239241
}: InnerAutocompleteProps<TItem>) {
240242
const {
@@ -279,6 +281,7 @@ function InnerAutocomplete<TItem extends BaseHit = BaseHit>({
279281

280282
setQuery(query);
281283
}),
284+
placeholder,
282285
});
283286

284287
const AutocompleteRecentSearchComponent =

packages/react-instantsearch/src/widgets/__tests__/Autocomplete.test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ describe('Autocomplete', () => {
138138
enterkeyhint="search"
139139
id="autocomplete:r0:input"
140140
maxlength="512"
141-
placeholder=""
142141
role="combobox"
143142
spellcheck="false"
144143
type="search"

0 commit comments

Comments
 (0)