The createLocalStorageRecentSearchesPlugin
plugin connects with the user’s local storage
to fetch and save recent searches.
To use your own storage,
check createRecentSearchesPlugin
.
See demo
Installation
First, you need to install the plugin.
npm install @algolia/autocomplete-plugin-recent-searches
Then import it in your project:
import { createLocalStorageRecentSearchesPlugin } from "@algolia/autocomplete-plugin-recent-searches";
If you don’t use a package manager, you can use the HTML script
element:
<script
src="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-plugin-recent-searches@1.19.4/dist/umd/index.production.js"
integrity="JAf5JY7F16U/j5RLELqF/rRSwfocLXIivSQhZeDdugs="
crossorigin="anonymous"
></script>
<script>
const { createRecentSearchesPlugin } =
window["@algolia/autocomplete-plugin-recent-searches"];
</script>
Example
This example uses the plugin within autocomplete-js
.
import { autocomplete } from "@algolia/autocomplete-js";
import { createLocalStorageRecentSearchesPlugin } from "@algolia/autocomplete-plugin-recent-searches";
const recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({
key: "navbar",
});
autocomplete({
container: "#autocomplete",
openOnFocus: true,
plugins: [recentSearchesPlugin],
});
You can combine this plugin with the Query Suggestions
plugin to populate the empty screen with recent and popular queries.
import { liteClient as algoliasearch } from "algoliasearch/lite";
import { autocomplete } from "@algolia/autocomplete-js";
import { createLocalStorageRecentSearchesPlugin } from "@algolia/autocomplete-plugin-recent-searches";
import { createQuerySuggestionsPlugin } from "@algolia/autocomplete-plugin-query-suggestions";
const searchClient = algoliasearch(
"latency",
"6be0576ff61c053d5f9a3225e2a90f76",
);
const recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({
key: "navbar",
});
const querySuggestionsPlugin = createQuerySuggestionsPlugin({
searchClient,
indexName: "instant_search_demo_query_suggestions",
getSearchParams() {
return recentSearches.data.getAlgoliaSearchParams();
},
});
autocomplete({
container: "#autocomplete",
openOnFocus: true,
plugins: [recentSearchesPlugin, querySuggestionsPlugin],
});
Parameters
A local storage key to identify where to save and retrieve the recent searches.For example:The plugin namespaces all keys to avoid collisions.
The number of recent searches to display.
search
(params: { query: string; items: TItem[]; limit: number; }) => TItem[]
A search function to retrieve recent searches from.
This function is called in storage.getAll
to retrieve recent searches and is useful to filter and highlight recent searches when typing a query.function highlight({ item, query }) {
return {
...item,
_highlightResult: {
query: {
value: query
? item.query.replace(
new RegExp(query, "g"),
`<span class='underline'>aa-highlight</span>${query}<span class='underline'>/aa-highlight</span>`,
)
: item.query,
},
},
};
}
function search({ query, items, limit }) {
if (!query) {
return items.slice(0, limit).map((item) => highlight({ item, query }));
}
return items
.filter((item) => item.query.toLowerCase().includes(query.toLowerCase()))
.slice(0, limit)
.map((item) => highlight({ item, query }));
}
(params: {
source: AutocompleteSource,
state: AutocompleteState,
onRemove: () => void,
onTapAhead: () => void,
})
This function takes the original source
as a parameter and returns a modified version of that source.For example:Change Autocomplete stateUsually, when a link in the Autocomplete menu is selected, the menu closes.
However, to keep the menu visible after a selection is made,
use transformSource
to set the isOpen
state:const recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({
key: "navbar",
transformSource({ source, onRemove }) {
return {
...source,
onSelect({ setIsOpen }) {
setIsOpen(true);
},
};
},
});
Create linksTurns Query Suggestions into clickable Google search links:const recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({
key: "navbar",
transformSource({ source, onRemove }) {
return {
...source,
getItemUrl({ item }) {
return `https://google.com?q=${item.query}`;
},
templates: {
...source.templates,
item(params) {
const { item, html } = params;
return html`<a
class="aa-ItemLink"
href="https://google.com?q=${item.query}"
>
${source.templates.item(params).props.children}
</a>`;
},
},
};
},
});
translations
AutocompleteRecentSearchesPluginTranslations
type AutocompleteRecentSearchesPluginTranslations = {
removeSearchTitle: string; // defaults to 'Remove this search'
fillQueryTitle: (text: string) => string; // defaults to 'Fill query with "${text}"'
};
A dictionary of translations to support internationalization.
Returns
data
getAlgoliaSearchParams
SearchParameters => SearchParameters
Optimized Algolia search parameters.
This is useful when using the plugin along with the Query Suggestions plugin.This function enhances the provided search parameters by:
- Excluding Query Suggestions that are already displayed in recent searches.
- Using a shared hitsPerPage value to get a group limit of Query Suggestions and recent searches.
A function that adds an item to the recent searches local storage.
A function that removes an item from the recent searches local storage.
A function that returns the items from the recent searches local storage.