react-instantsearch-core
Version:
⚡ Lightning-fast search for React, by Algolia
41 lines (38 loc) • 1.44 kB
JavaScript
import index from 'instantsearch.js/es/widgets/index/index.js';
import { useMemo } from 'react';
import { useForceUpdate } from './useForceUpdate.js';
import { useIndexContext } from './useIndexContext.js';
import { useInstantSearchServerContext } from './useInstantSearchServerContext.js';
import { useInstantSearchSSRContext } from './useInstantSearchSSRContext.js';
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.js';
import { useStableValue } from './useStableValue.js';
import { useWidget } from './useWidget.js';
function useIndex(props) {
var serverContext = useInstantSearchServerContext();
var ssrContext = useInstantSearchSSRContext();
var initialResults = ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.initialResults;
var parentIndex = useIndexContext();
var stableProps = useStableValue(props);
var indexWidget = useMemo(function() {
return index(stableProps);
}, [
stableProps
]);
var helper = indexWidget.getHelper();
var forceUpdate = useForceUpdate();
useIsomorphicLayoutEffect(function() {
forceUpdate();
}, [
helper,
forceUpdate
]);
useWidget({
widget: indexWidget,
parentIndex: parentIndex,
props: stableProps,
shouldSsr: Boolean(serverContext || initialResults),
skipSuspense: true
});
return indexWidget;
}
export { useIndex };