createRecentSearchesPlugin
The createRecentSearchesPlugin
plugin lets you implement your own storage. To connect with the user’s local storage, check createLocalStorageRecentSearchesPlugin
.
Installation
First, you need to install the plugin.
1
2
3
yarn add @algolia/autocomplete-plugin-recent-searches
# or
npm install @algolia/autocomplete-plugin-recent-searches
Then import it in your project:
1
import { createRecentSearchesPlugin } from '@algolia/autocomplete-plugin-recent-searches';
If you don’t use a package manager, you can use the HTML script
element:
1
2
3
4
5
6
<script src="https://cdn.jsdelivr.net/npm/@algolia/autocomplete-plugin-recent-searches"></script>
<script>
const { createRecentSearchesPlugin } = window[
'@algolia/autocomplete-plugin-recent-searches'
];
</script>
Example
This example uses the plugin within autocomplete-js
. You’re in charge of implementing the storage to fetch and save recent searches.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { autocomplete } from '@algolia/autocomplete-js';
import { createRecentSearchesPlugin } from '@algolia/autocomplete-plugin-recent-searches';
const recentSearchesPlugin = createRecentSearchesPlugin({
// Implement your own storage
storage: {
getAll() {},
onAdd() {},
onRemove() {},
},
});
autocomplete({
container: '#autocomplete',
openOnFocus: true,
plugins: [recentSearchesPlugin],
});
For example, you can plug it to a MongoDB database using mongoose.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import mongoose from 'mongoose';
import { createRecentSearchesPlugin } from '@algolia/autocomplete-plugin-recent-searches';
import { search } from '@algolia/autocomplete-plugin-recent-searches/usecases/localStorage';
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true });
const schema = new mongoose.Schema({
objectID: String,
query: String,
category: {
type: String,
default: undefined,
},
});
const RecentSearchesItem = mongoose.model('RecentSearchesItem', schema);
const recentSearchesPlugin = createRecentSearchesPlugin({
storage: {
async getAll(query) {
const items = await RecentSearchesItem.find({});
return search({ query, items, limit: 5 });
},
onAdd(item) {
RecentSearchesItem.create(item);
},
onRemove(objectID) {
RecentSearchesItem.deleteOne({ objectID });
},
},
});
You can combine this plugin with the Query Suggestions plugin to leverage the empty screen with recent and popular queries.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import algoliasearch from 'algoliasearch/lite';
import { autocomplete } from '@algolia/autocomplete-js';
import { createRecentSearchesPlugin } from '@algolia/autocomplete-plugin-recent-searches';
import { createQuerySuggestionsPlugin } from '@algolia/autocomplete-plugin-query-suggestions';
const searchClient = algoliasearch(
'latency',
'6be0576ff61c053d5f9a3225e2a90f76'
);
const recentSearchesPlugin = createRecentSearchesPlugin({
// Implement your own storage
storage: {
getAll() {},
onAdd() {},
onRemove() {},
},
});
const querySuggestionsPlugin = createQuerySuggestionsPlugin({
searchClient,
indexName: 'instant_search_demo_query_suggestions',
getSearchParams() {
return recentSearches.data.getAlgoliaSearchParams();
},
});
autocomplete({
container: '#autocomplete',
openOnFocus: true,
plugins: [recentSearchesPlugin, querySuggestionsPlugin],
});
Parameters
storage
|
type: RecentSearchesStorage
Required
The storage to fetch from and save recent searches into. |
||||
Copy
|
|||||
transformSource
|
type: (params: { source: AutocompleteSource, state: AutocompleteState, onRemove: () => void, onTapAhead: () => void })
A function to transform the provided source. |
||||
Keeping the panel open on select:
Copy
Opening a link:
Copy
|
Returns
data
getAlgoliaSearchParams
|
type: 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:
|