react-instantsearch-core
Version:
⚡ Lightning-fast search for React, by Algolia
56 lines • 2.08 kB
JavaScript
import { useCallback } from 'react';
import { useInstantSearchContext } from "../lib/useInstantSearchContext.js";
import { useIsomorphicLayoutEffect } from "../lib/useIsomorphicLayoutEffect.js";
import { useSearchResults } from "../lib/useSearchResults.js";
import { useSearchState } from "../lib/useSearchState.js";
export function useInstantSearch() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
catchError = _ref.catchError;
var search = useInstantSearchContext();
var _useSearchState = useSearchState(),
uiState = _useSearchState.uiState,
setUiState = _useSearchState.setUiState,
indexUiState = _useSearchState.indexUiState,
setIndexUiState = _useSearchState.setIndexUiState,
renderState = _useSearchState.renderState,
indexRenderState = _useSearchState.indexRenderState;
var _useSearchResults = useSearchResults(),
results = _useSearchResults.results,
scopedResults = _useSearchResults.scopedResults;
var addMiddlewares = useCallback(function () {
for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {
middlewares[_key] = arguments[_key];
}
search.use.apply(search, middlewares);
return function () {
search.unuse.apply(search, middlewares);
};
}, [search]);
var refresh = useCallback(function () {
search.refresh();
}, [search]);
useIsomorphicLayoutEffect(function () {
if (catchError) {
var onError = function onError() {};
search.addListener('error', onError);
return function () {
return search.removeListener('error', onError);
};
}
return function () {};
}, [search, catchError]);
return {
results: results,
scopedResults: scopedResults,
uiState: uiState,
setUiState: setUiState,
indexUiState: indexUiState,
setIndexUiState: setIndexUiState,
renderState: renderState,
indexRenderState: indexRenderState,
addMiddlewares: addMiddlewares,
refresh: refresh,
status: search.status,
error: search.error
};
}