Skip to content

Commit a50712e

Browse files
feat(js): pass elements record to render (#490)
This adds an API to easily retrieve generated UI elements to manipulate the panel UI. ``` import { render } from 'preact'; autocomplete({ // ... plugins: [recentSearchesPlugin, querySuggestionsPlugin], getSources({ query }) { return [ { sourceId: 'products', // ... }, ]; }, render({ elements }, root) { const { recentSearchesPlugin, querySuggestionsPlugin, products } = elements; render( <div className="aa-PanelLayout"> <div> {recentSearchesPlugin} {querySuggestionsPlugin} </div> <div>{products}</div> </div>, root ); }, }); ```
1 parent 4c97375 commit a50712e

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ describe('autocomplete-js', () => {
406406
state: expect.anything(),
407407
children: expect.anything(),
408408
sections: expect.any(Array),
409+
elements: expect.any(Object),
409410
createElement: expect.anything(),
410411
Fragment: expect.anything(),
411412
},

packages/autocomplete-js/src/render.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ export function renderPanel<TItem extends BaseItem>(
168168
const children = (
169169
<div className="aa-PanelLayout aa-Panel--Scrollable">{sections}</div>
170170
);
171+
const elements = sections.reduce((acc, current) => {
172+
acc[current.props['data-autocomplete-source-id']] = current;
173+
return acc;
174+
}, {});
171175

172-
render({ children, state, sections, createElement, Fragment }, dom.panel);
176+
render(
177+
{ children, state, sections, elements, createElement, Fragment },
178+
dom.panel
179+
);
173180
}

packages/autocomplete-js/src/types/AutocompleteRender.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export type AutocompleteRender<TItem extends BaseItem> = (
88
children: VNode;
99
state: AutocompleteState<TItem>;
1010
sections: VNode[];
11+
elements: Record<string, VNode>;
1112
createElement: Pragma;
1213
Fragment: PragmaFrag;
1314
},

0 commit comments

Comments
 (0)