UNPKG

react-instantsearch-nextjs

Version:
101 lines (98 loc) 4.67 kB
import { _ as _$2 } from '@swc/helpers/esm/_object_spread.js'; import { _ as _$1 } from '@swc/helpers/esm/_object_spread_props.js'; import { _ } from '@swc/helpers/esm/_object_without_properties.js'; import { _ as _$3 } from '@swc/helpers/esm/_sliced_to_array.js'; import { safelyRunOnBrowser } from 'instantsearch.js/es/lib/utils/index.js'; import React, { useRef, useEffect, useState } from 'react'; import { InstantSearch, InstantSearchRSCContext, InstantSearchSSRContext } from 'react-instantsearch-core'; import { InitializePromise } from './InitializePromise.js'; import { TriggerSearch } from './TriggerSearch.js'; import { useDynamicRouteWarning } from './useDynamicRouteWarning.js'; import { useInstantSearchRouting } from './useInstantSearchRouting.js'; import { useNextHeaders } from './useNextHeaders.js'; var InstantSearchInitialResults = Symbol.for('InstantSearchInitialResults'); function createInstantSearchNextInstance() { return { current: null }; } function InstantSearchNext(_0) { var children = _0.children, passedRouting = _0.routing, instance = _0.instance, _0_ignoreMultipleHooksWarning = _0.ignoreMultipleHooksWarning, ignoreMultipleHooksWarning = _0_ignoreMultipleHooksWarning === void 0 ? false : _0_ignoreMultipleHooksWarning, instantSearchProps = _(_0, [ "children", "routing", "instance", "ignoreMultipleHooksWarning" ]); var isMounting = useRef(true); var isServer = typeof window === 'undefined'; useEffect(function() { isMounting.current = false; }, []); var headers = useNextHeaders(); var nonce = safelyRunOnBrowser(function() { return undefined; }, { fallback: function fallback() { return (headers === null || headers === void 0 ? void 0 : headers.get('x-nonce')) || undefined; } }); useDynamicRouteWarning({ isServer: isServer, isMounting: isMounting, instance: instance }); var routing = useInstantSearchRouting(passedRouting, isMounting); return /*#__PURE__*/ React.createElement(ServerOrHydrationProvider, { isServer: isServer, instance: instance, ignoreMultipleHooksWarning: ignoreMultipleHooksWarning }, /*#__PURE__*/ React.createElement(InstantSearch, _$1(_$2({}, instantSearchProps), { routing: routing }), isServer && /*#__PURE__*/ React.createElement(InitializePromise, { nonce: nonce }), children, isServer && /*#__PURE__*/ React.createElement(TriggerSearch, null))); } function ServerOrHydrationProvider(param) { var isServer = param.isServer, children = param.children, instance = param.instance, ignoreMultipleHooksWarning = param.ignoreMultipleHooksWarning; var promiseRef = useRef(null); var resolvePromiseRef = useRef(null); var countRef = useRef(0); // Capture once on first render. Side-effect-free read keeps hydration // deterministic across StrictMode double-invocation and React 19 / Next.js // metadata streaming re-renders. var _useState = _$3(useState(function() { return safelyRunOnBrowser(function(param) { var window1 = param.window; return window1[InstantSearchInitialResults]; }); }), 1), initialResults = _useState[0]; // After commit, clear the global so a later <InstantSearchNext> mount — // typically the destination of an App Router <Link> click — does not // recycle this mount's serialized state. useEffect(function() { safelyRunOnBrowser(function(param) { var window1 = param.window; if (window1[InstantSearchInitialResults] !== undefined) { window1[InstantSearchInitialResults] = undefined; } }); }, []); // `useInstantSearchApi` reads a truthy `waitForResultsRef` as "SSR results // are arriving" and skips the initial search. On client mounts without // results (typical for SPA navigation) we must let it fall through. var rscWaitRef = !isServer && !initialResults ? null : promiseRef; return /*#__PURE__*/ React.createElement(InstantSearchRSCContext.Provider, { value: { waitForResultsRef: rscWaitRef, resolveWaitForResultsRef: resolvePromiseRef, countRef: countRef, ignoreMultipleHooksWarning: ignoreMultipleHooksWarning } }, /*#__PURE__*/ React.createElement(InstantSearchSSRContext.Provider, { value: { initialResults: initialResults, ssrSearchRef: isServer ? undefined : instance } }, children)); } export { InstantSearchNext, createInstantSearchNextInstance };