@meilisearch/instant-meilisearch
Version:
The search client to use Meilisearch with InstantSearch.
45 lines • 2.08 kB
JavaScript
import { MeiliParamsCreator } from '../adapter/index.js';
import { removeDuplicate } from '../utils/index.js';
export function getParametersWithoutFilters(searchContext) {
const defaultSearchContext = {
...searchContext,
// placeholdersearch true to ensure a request is made
placeholderSearch: true,
// query set to empty to ensure retrieving the default facetdistribution
query: '',
};
const meilisearchParams = MeiliParamsCreator(defaultSearchContext);
meilisearchParams.addFacets();
meilisearchParams.addPagination();
return meilisearchParams.getParams();
}
// Fetch the initial facets distribution of an Index
// Used to show the facets when `placeholderSearch` is set to true
// Used to fill the missing facet values when `keepZeroFacets` is set to true
export async function initFacetDistribution(searchResolver, queries, initialFacetDistribution) {
const removeIndexUidDuplicates = removeDuplicate('indexUid');
const searchQueries = queries
.filter(removeIndexUidDuplicates) // only make one request per indexUid
.filter(({ indexUid }) => {
// avoid requesting on indexes that already have an initial facetDistribution
return !Object.keys(initialFacetDistribution).includes(indexUid);
});
if (searchQueries.length === 0)
return initialFacetDistribution;
const results = await searchResolver.multiSearch(searchQueries, []);
for (const searchResult of results) {
initialFacetDistribution[searchResult.indexUid] =
searchResult.facetDistribution || {};
}
return initialFacetDistribution;
}
export function fillMissingFacets(initialFacetDistribution, meilisearchResults) {
for (const searchResult of meilisearchResults) {
initialFacetDistribution[searchResult.indexUid] = {
...(searchResult.facetDistribution || {}),
...(initialFacetDistribution[searchResult.indexUid] || {}),
};
}
return initialFacetDistribution;
}
//# sourceMappingURL=init-facets-distribution.js.map