Skip to content

Commit dbe9a13

Browse files
committed
fix(js): render noResults template when openOnFocus is true
1 parent 26763c8 commit dbe9a13

3 files changed

Lines changed: 46 additions & 5 deletions

File tree

examples/starter/app.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { autocomplete } from '@algolia/autocomplete-js';
2-
32
import '@algolia/autocomplete-theme-classic';
43

54
type AutocompleteItem = {

packages/autocomplete-js/src/__tests__/autocomplete.test.ts

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ describe('autocomplete-js', () => {
278278
});
279279
});
280280

281-
test("doesn't render noResults template on no query when openOnFocus is false", async () => {
281+
test("doesn't render noResults template on empty query when openOnFocus is false", async () => {
282282
const container = document.createElement('div');
283283
const panelContainer = document.createElement('div');
284284

@@ -309,7 +309,7 @@ describe('autocomplete-js', () => {
309309

310310
const input = container.querySelector<HTMLInputElement>('.aa-Input');
311311

312-
fireEvent.input(input, { target: { value: '' } });
312+
fireEvent.focus(input);
313313

314314
await waitFor(() => {
315315
expect(
@@ -318,7 +318,47 @@ describe('autocomplete-js', () => {
318318
});
319319
});
320320

321-
test('render noResults template on query when openOnFocus is false', async () => {
321+
test('renders noResults template on empty query when openOnFocus is true', async () => {
322+
const container = document.createElement('div');
323+
const panelContainer = document.createElement('div');
324+
325+
document.body.appendChild(panelContainer);
326+
autocomplete<{ label: string }>({
327+
container,
328+
panelContainer,
329+
openOnFocus: true,
330+
getSources() {
331+
return [
332+
{
333+
sourceId: 'testSource',
334+
getItems() {
335+
return [];
336+
},
337+
templates: {
338+
item({ item }) {
339+
return item.label;
340+
},
341+
noResults() {
342+
return 'No results template';
343+
},
344+
},
345+
},
346+
];
347+
},
348+
});
349+
350+
const input = container.querySelector<HTMLInputElement>('.aa-Input');
351+
352+
fireEvent.focus(input);
353+
354+
await waitFor(() => {
355+
expect(
356+
panelContainer.querySelector<HTMLElement>('.aa-Panel')
357+
).toHaveTextContent('No results template');
358+
});
359+
});
360+
361+
test('renders noResults template on query when openOnFocus is false', async () => {
322362
const container = document.createElement('div');
323363
const panelContainer = document.createElement('div');
324364

packages/autocomplete-js/src/render.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ export function renderPanel<TItem extends BaseItem>(
109109
</div>
110110
)}
111111

112-
{items.length === 0 && source.templates.noResults && state.query ? (
112+
{!items.length &&
113+
source.templates.noResults &&
114+
(state.query || state.isOpen) ? (
113115
<div className={classNames.sourceNoResults}>
114116
{source.templates.noResults({
115117
components,

0 commit comments

Comments
 (0)