11/* eslint-disable no-unused-vars */
22import { useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
33import { DEFAULT_PAGE_SIZE , SearchStatus , useSearchService } from './utils' ;
4- import { SearchDocument , SearchParameters } from '@sitecore-content-sdk/search' ;
4+ import { SearchDocument , SearchParameters , FacetRequest , FacetResult } from '@sitecore-content-sdk/search' ;
55
66/**
77 * Options for the useInfiniteSearch hook.
@@ -31,6 +31,17 @@ export interface UseInfiniteSearchOptions<T extends SearchDocument = SearchDocum
3131 * @default true
3232 */
3333 enabled ?: boolean ;
34+ /**
35+ * The locale to use for the search. Required for multi-locale index configurations.
36+ * Format: letters and hyphens only (e.g. 'en', 'fr-FR', 'el-GR').
37+ * Omit for single-locale indexes.
38+ */
39+ locale ?: string ;
40+ /**
41+ * Facet configuration. Use 'all: true' to retrieve counts for all enabled facets.
42+ * Use 'fields' to filter results by specific facet values. Both can be combined.
43+ */
44+ facet ?: FacetRequest ;
3445}
3546
3647/**
@@ -84,6 +95,10 @@ type InternalInfiniteSearchState<T extends SearchDocument = SearchDocument> = {
8495 * Total number of pages available based on `total` and `pageSize`.
8596 */
8697 totalPages : number ;
98+ /**
99+ * Facet results, present only when facets were requested.
100+ */
101+ facets ?: FacetResult [ ] ;
87102 /**
88103 * The error object if the last search request failed, or null if no error occurred.
89104 */
@@ -123,7 +138,7 @@ type InternalInfiniteSearchState<T extends SearchDocument = SearchDocument> = {
123138export const useInfiniteSearch = < T extends SearchDocument = SearchDocument > (
124139 options : UseInfiniteSearchOptions < T >
125140) : UseInfiniteSearchState < T > => {
126- const { query, searchIndexId, pageSize = DEFAULT_PAGE_SIZE , sort, enabled = true } = options ;
141+ const { query, searchIndexId, pageSize = DEFAULT_PAGE_SIZE , sort, enabled = true , locale , facet } = options ;
127142
128143 const [ state , setState ] = useState < InternalInfiniteSearchState < T > > ( ( ) => {
129144 const error = ! searchIndexId
@@ -136,6 +151,7 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
136151 results : [ ] ,
137152 total : 0 ,
138153 totalPages : 0 ,
154+ facets : undefined ,
139155 error,
140156 offset : 0 ,
141157 status,
@@ -171,6 +187,7 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
171187 results : [ ] ,
172188 total : 0 ,
173189 totalPages : 0 ,
190+ facets : undefined ,
174191 error : null ,
175192 offset : 0 ,
176193 status : 'loading' ,
@@ -185,9 +202,11 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
185202 limit : pageSize ,
186203 offset,
187204 sort,
205+ ...( locale !== undefined && { locale } ) ,
206+ ...( facet !== undefined && { facet } ) ,
188207 } ;
189208
190- const { results : searchResults , total : totalResults } = await searchService . search < T > (
209+ const { results : searchResults , total : totalResults , facets } = await searchService . search < T > (
191210 searchParams ,
192211 { signal }
193212 ) ;
@@ -201,6 +220,7 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
201220 const totalPages = Math . ceil ( totalResults / pageSize ) ;
202221 return {
203222 results,
223+ facets,
204224 error : null ,
205225 offset,
206226 status : 'success' ,
@@ -229,6 +249,7 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
229249 results : [ ] ,
230250 total : 0 ,
231251 totalPages : 0 ,
252+ facets : undefined ,
232253 error : errorMessage ,
233254 offset : 0 ,
234255 status : 'error' ,
@@ -237,7 +258,7 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
237258 }
238259 }
239260 } ,
240- [ searchService , pageSize , sort , query , searchIndexId ]
261+ [ searchService , pageSize , sort , query , searchIndexId , locale , facet ]
241262 ) ;
242263
243264 useEffect ( ( ) => {
@@ -264,6 +285,7 @@ export const useInfiniteSearch = <T extends SearchDocument = SearchDocument>(
264285 return useMemo (
265286 ( ) : UseInfiniteSearchState < T > => ( {
266287 results : state . results ,
288+ facets : state . facets ,
267289 status : state . status ,
268290 loadMoreStatus : state . loadMoreStatus ,
269291 total : state . total ,
0 commit comments