UNPKG

react-instantsearch-nextjs

Version:
135 lines (133 loc) 5.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "InitializePromise", { enumerable: true, get: function() { return InitializePromise; } }); var _object_spread = require("@swc/helpers/_/_object_spread"); var _object_spread_props = require("@swc/helpers/_/_object_spread_props"); var _server = require("instantsearch.js/cjs/lib/server"); var _utils = require("instantsearch.js/cjs/lib/utils"); var _navigation = require("next/navigation"); var _react = require("react"); var _reactinstantsearchcore = require("react-instantsearch-core"); var _createInsertHTML = require("./createInsertHTML"); function isWithinIsolatedIndex(index) { var current = index; while(current){ if (current._isolated) { return true; } current = current.getParent(); } return false; } function InitializePromise(param) { var nonce = param.nonce; var search = (0, _reactinstantsearchcore.useInstantSearchContext)(); var _useRSCContext = (0, _reactinstantsearchcore.useRSCContext)(), waitForResultsRef = _useRSCContext.waitForResultsRef, resolveWaitForResultsRef = _useRSCContext.resolveWaitForResultsRef; var insertHTML = (0, _react.useContext)(_navigation.ServerInsertedHTMLContext) || function() { throw new Error('Missing ServerInsertedHTMLContext'); }; // Extract search parameters from the search client to use them // later during hydration. var requestParamsList; if (search.compositionID) { search.mainHelper.setClient(_object_spread_props._(_object_spread._({}, search.mainHelper.getClient()), { search: function search1(query) { requestParamsList = [ query.requestBody.params ]; return search.client.search(query); } })); } else { search.mainHelper.setClient(_object_spread_props._(_object_spread._({}, search.mainHelper.getClient()), { search: function search1(queries) { requestParamsList = queries.map(function(param) { var params = param.params; return params; }); return search.client.search(queries); } })); } (0, _utils.resetWidgetId)(); var waitForResults = function waitForResults() { return new Promise(function(resolve) { var searchReceived = false; var recommendReceived = false; var settled = false; var derivedHelper = search.mainHelper.derivedHelpers[0]; var settle = function settle() { if (settled) { return; } settled = true; if (resolveWaitForResultsRef) { resolveWaitForResultsRef.current = null; } resolve(); }; var onResult = function onResult() { searchReceived = true; if (!search._hasRecommendWidget || recommendReceived) { settle(); } }; var onRecommendResult = function onRecommendResult() { recommendReceived = true; if (!search._hasSearchWidget || searchReceived) { settle(); } }; if (resolveWaitForResultsRef) { resolveWaitForResultsRef.current = function() { derivedHelper.removeListener('result', onResult); derivedHelper.removeListener('recommend:result', onRecommendResult); settle(); }; } derivedHelper.once('result', onResult); derivedHelper.once('recommend:result', onRecommendResult); }); }; var injectInitialResults = function injectInitialResults() { var options = { inserted: false }; var results = (0, _server.getInitialResults)(search.mainIndex, search._hasSearchWidget ? requestParamsList || [] : []); insertHTML((0, _createInsertHTML.createInsertHTML)({ options: options, results: results, nonce: nonce })); }; if ((waitForResultsRef === null || waitForResultsRef === void 0 ? void 0 : waitForResultsRef.current) === null) { waitForResultsRef.current = (0, _reactinstantsearchcore.wrapPromiseWithState)(waitForResults().then(function() { var shouldRefetch = false; (0, _utils.walkIndex)(search.mainIndex, function(index) { if (isWithinIsolatedIndex(index)) { return; } shouldRefetch = shouldRefetch || index.getWidgets().some(_utils.isTwoPassWidget); }); if (shouldRefetch) { var _search__resetScheduleSearch; (_search__resetScheduleSearch = search._resetScheduleSearch) === null || _search__resetScheduleSearch === void 0 ? void 0 : _search__resetScheduleSearch.call(search); waitForResultsRef.current = (0, _reactinstantsearchcore.wrapPromiseWithState)(waitForResults().then(injectInitialResults)); } return shouldRefetch; }).then(function(shouldRefetch) { if (shouldRefetch) { return; } injectInitialResults(); })); } return null; }