Skip to content

Commit da2e306

Browse files
committed
Add a facet search context
1 parent 79b59e0 commit da2e306

File tree

4 files changed

+47
-11
lines changed

4 files changed

+47
-11
lines changed

packages/instant-meilisearch/src/client/instant-meilisearch-client.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
FacetDistribution,
99
PaginationState,
1010
MeilisearchConfig,
11-
AlgoliaSearchForFacetValuesRequest,
11+
AlgoliaSearchForFacetValuesRequests,
1212
AlgoliaSearchForFacetValuesResponse,
1313
} from '../types'
1414
import {
@@ -21,7 +21,7 @@ import {
2121
adaptSearchParams,
2222
SearchResolver,
2323
} from '../adapter'
24-
import { createSearchContext } from '../contexts'
24+
import { createSearchContext, createFacetSearchContext } from '../contexts'
2525
import {
2626
SearchCache,
2727
initFacetDistribution,
@@ -135,13 +135,13 @@ export function instantMeiliSearch(
135135
}
136136
},
137137
searchForFacetValues: async function (
138-
requests: AlgoliaSearchForFacetValuesRequest
138+
requests: AlgoliaSearchForFacetValuesRequests
139139
): Promise<AlgoliaSearchForFacetValuesResponse[]> {
140140
console.log(requests)
141141

142142
const results = []
143143
for (const request of requests) {
144-
const searchContext: SearchContext = createSearchContext(
144+
const searchContext: SearchContext = createFacetSearchContext(
145145
request,
146146
instantMeiliSearchOptions
147147
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { createSearchContext } from './search-context'
1+
export { createSearchContext, createFacetSearchContext } from './search-context'

packages/instant-meilisearch/src/contexts/search-context.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
InstantMeiliSearchOptions,
33
AlgoliaMultipleQueriesQuery,
44
SearchContext,
5+
AlgoliaSearchForFacetValuesRequest,
56
} from '../types'
67

78
import { createPaginationState } from './pagination-context'
@@ -40,3 +41,37 @@ export function createSearchContext(
4041
}
4142
return searchContext
4243
}
44+
45+
// TODO: avoid code duplication
46+
/**
47+
* @param {AlgoliaMultipleQueriesQuery} searchRequest
48+
* @param {Context} options
49+
* @returns {SearchContext}
50+
*/
51+
export function createFacetSearchContext(
52+
searchRequest: AlgoliaSearchForFacetValuesRequest,
53+
options: InstantMeiliSearchOptions
54+
): SearchContext {
55+
// Split index name and possible sorting rules
56+
const [indexUid, ...sortByArray] = searchRequest.indexName.split(':')
57+
const { params: instantSearchParams } = searchRequest
58+
59+
const paginationState = createPaginationState(
60+
options.finitePagination,
61+
instantSearchParams?.hitsPerPage,
62+
instantSearchParams?.page
63+
)
64+
65+
const sortState = createSortState(sortByArray.join(':'))
66+
67+
const searchContext: SearchContext = {
68+
...options,
69+
...instantSearchParams,
70+
sort: sortState,
71+
indexUid,
72+
pagination: paginationState,
73+
placeholderSearch: options.placeholderSearch !== false, // true by default
74+
keepZeroFacets: !!options.keepZeroFacets, // false by default
75+
}
76+
return searchContext
77+
}

packages/instant-meilisearch/src/types/types.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import type { SearchClient } from 'instantsearch.js'
22
import type {
33
MultipleQueriesQuery as AlgoliaMultipleQueriesQuery,
4-
SearchForFacetValuesQueryParams as AlgoliaSearchForFacetValuesQueryParams,
5-
SearchOptions as AlgoliaSearchOptions,
4+
multipleSearchForFacetValues,
65
} from '@algolia/client-search'
76
import type {
87
MultiSearchQuery as MeiliSearchMultiSearchParams,
@@ -16,10 +15,12 @@ export type {
1615
SearchForFacetValuesResponse as AlgoliaSearchForFacetValuesResponse,
1716
} from '@algolia/client-search'
1817

19-
export type AlgoliaSearchForFacetValuesRequest = Array<{
20-
readonly indexName: string
21-
readonly params: AlgoliaSearchForFacetValuesQueryParams & AlgoliaSearchOptions
22-
}>
18+
export type AlgoliaSearchForFacetValuesRequests = Parameters<
19+
ReturnType<typeof multipleSearchForFacetValues>
20+
>[0]
21+
22+
export type AlgoliaSearchForFacetValuesRequest =
23+
AlgoliaSearchForFacetValuesRequests[0]
2324

2425
export type {
2526
Filter,

0 commit comments

Comments
 (0)