UNPKG

react-instantsearch-nextjs

Version:
118 lines (116 loc) 5.56 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: Object.getOwnPropertyDescriptor(all, name).get }); } _export(exports, { get InstantSearchNext () { return InstantSearchNext; }, get createInstantSearchNextInstance () { return createInstantSearchNextInstance; } }); var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); var _object_spread = require("@swc/helpers/_/_object_spread"); var _object_spread_props = require("@swc/helpers/_/_object_spread_props"); var _object_without_properties = require("@swc/helpers/_/_object_without_properties"); var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array"); var _utils = require("instantsearch.js/cjs/lib/utils"); var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); var _reactinstantsearchcore = require("react-instantsearch-core"); var _InitializePromise = require("./InitializePromise"); var _TriggerSearch = require("./TriggerSearch"); var _useDynamicRouteWarning = require("./useDynamicRouteWarning"); var _useInstantSearchRouting = require("./useInstantSearchRouting"); var _useNextHeaders = require("./useNextHeaders"); 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 = _object_without_properties._(_0, [ "children", "routing", "instance", "ignoreMultipleHooksWarning" ]); var isMounting = (0, _react.useRef)(true); var isServer = typeof window === 'undefined'; (0, _react.useEffect)(function() { isMounting.current = false; }, []); var headers = (0, _useNextHeaders.useNextHeaders)(); var nonce = (0, _utils.safelyRunOnBrowser)(function() { return undefined; }, { fallback: function fallback() { return (headers === null || headers === void 0 ? void 0 : headers.get('x-nonce')) || undefined; } }); (0, _useDynamicRouteWarning.useDynamicRouteWarning)({ isServer: isServer, isMounting: isMounting, instance: instance }); var routing = (0, _useInstantSearchRouting.useInstantSearchRouting)(passedRouting, isMounting); return /*#__PURE__*/ _react.default.createElement(ServerOrHydrationProvider, { isServer: isServer, instance: instance, ignoreMultipleHooksWarning: ignoreMultipleHooksWarning }, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.InstantSearch, _object_spread_props._(_object_spread._({}, instantSearchProps), { routing: routing }), isServer && /*#__PURE__*/ _react.default.createElement(_InitializePromise.InitializePromise, { nonce: nonce }), children, isServer && /*#__PURE__*/ _react.default.createElement(_TriggerSearch.TriggerSearch, null))); } function ServerOrHydrationProvider(param) { var isServer = param.isServer, children = param.children, instance = param.instance, ignoreMultipleHooksWarning = param.ignoreMultipleHooksWarning; var promiseRef = (0, _react.useRef)(null); var resolvePromiseRef = (0, _react.useRef)(null); var countRef = (0, _react.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 = _sliced_to_array._((0, _react.useState)(function() { return (0, _utils.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. (0, _react.useEffect)(function() { (0, _utils.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.default.createElement(_reactinstantsearchcore.InstantSearchRSCContext.Provider, { value: { waitForResultsRef: rscWaitRef, resolveWaitForResultsRef: resolvePromiseRef, countRef: countRef, ignoreMultipleHooksWarning: ignoreMultipleHooksWarning } }, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.InstantSearchSSRContext.Provider, { value: { initialResults: initialResults, ssrSearchRef: isServer ? undefined : instance } }, children)); }