Skip to content

Commit f2154c8

Browse files
authored
fix(js): render noResults template when openOnFocus is true (#573)
* fix(js): render `noResults` template when `openOnFocus` is `true`
1 parent 7d3402e commit f2154c8

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function renderPanel<TItem extends BaseItem>(
109109
</div>
110110
)}
111111

112-
{items.length === 0 && source.templates.noResults && state.query ? (
112+
{source.templates.noResults && items.length === 0 ? (
113113
<div className={classNames.sourceNoResults}>
114114
{source.templates.noResults({
115115
components,

0 commit comments

Comments
 (0)