useSearchResults
Use search results query hook to request and retrieve data for search results widgets. page, keyphrase, selectedFacets, itemsPerPage, and sortType.
Request parameters
Name |
Type |
Description |
---|---|---|
|
integer |
The current page. |
|
string |
String to search for. |
|
array of strings |
The IDs of the facets selected. |
|
integer |
The number of results per page. |
|
string |
The value for sorting results. |
Generic response
RequestResponse
{
widgetRef,
actions: {
onResultsPerPageChange,
onPageNumberChange,
onItemClick,
onFilterClick,
onSortChange,
onFacetClick,
onClearFilters,
},
state: { sortType, page, itemsPerPage },
queryResult: {
isLoading,
isFetching,
data: {
total_item: totalItems = 0,
sort: { choices: sortChoices = [] } = {},
facet: facets = [],
content: articles = [],
} = {},
}
}
Import
RequestResponse
import { useSearchResults } from '@sitecore-search/react';
Example
RequestResponse
import type { SearchResultsInitialState, SearchResultsStoreState, SearchResultsWidgetQuery } from '@sitecore-search/react';
import { WidgetDataType, useSearchResults, useSearchResultsSelectedFacets, widget } from '@sitecore-search/react';
type ArticleModel = {
id: string;
type?: string;
title?: string;
name?: string;
subtitle?: string;
url?: string;
description?: string;
content_text?: string;
image_url?: string;
source_id?: string;
};
type ArticleSearchResultsProps = {
defaultSortType?: SearchResultsStoreState['sortType'];
defaultPage?: SearchResultsStoreState['page'];
defaultItemsPerPage?: SearchResultsStoreState['itemsPerPage'];
defaultKeyphrase?: SearchResultsStoreState['keyphrase'];
};
type InitialState = SearchResultsInitialState<'itemsPerPage' | 'keyphrase' | 'page' | 'sortType'>;
export const SearchResultsComponent = ({
defaultSortType = 'featured_desc',
defaultPage = 1,
defaultKeyphrase = '',
defaultItemsPerPage = 24,
}: ArticleSearchResultsProps) => {
const {
widgetRef,
actions: {
onResultsPerPageChange,
onPageNumberChange,
onItemClick,
onFilterClick,
onSortChange,
onFacetClick,
onClearFilters,
},
state: { sortType, page, itemsPerPage },
queryResult: {
isLoading,
isFetching,
data: {
total_item: totalItems = 0,
sort: { choices: sortChoices = [] } = {},
facet: facets = [],
content: articles = [],
} = {},
},
} = useSearchResults<ArticleModel, InitialState>({
query: (query:SearchResultsWidgetQuery) => query,
state: {
sortType: defaultSortType,
page: defaultPage,
itemsPerPage: defaultItemsPerPage,
keyphrase: defaultKeyphrase,
},
});
const totalPages = Math.ceil(totalItems / itemsPerPage);
const selectedSortIndex = sortChoices.findIndex((s:any) => s.name === sortType);
const selectedFacetsFromApi = useSearchResultsSelectedFacets();
if (isLoading) {
return ( <div> ... </div> );
}
return ( <div ref={widgetRef}> ... </div> );
};
const SearchResultsStyledWidget = widget(SearchResultsComponent, WidgetDataType.SEARCH_RESULTS, 'content');
export default SearchResultsStyledWidget;
Note
Convert a UI component into a widget component before adding it to pages.
To convert a component into a widget component, pass the UI component to the widget
or setWidget
function.