react-instantsearch-core 6.40.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/README.md +70 -2
  2. package/dist/cjs/components/Configure.js +13 -0
  3. package/dist/cjs/components/DynamicWidgets.js +63 -0
  4. package/dist/cjs/components/Index.js +24 -0
  5. package/dist/cjs/components/InstantSearch.js +27 -0
  6. package/dist/cjs/{connectors/connectConfigure.js → components/InstantSearchSSRProvider.js} +27 -63
  7. package/dist/cjs/components/InstantSearchServerContext.js +12 -0
  8. package/dist/cjs/connectors/useBreadcrumb.js +12 -0
  9. package/dist/cjs/connectors/useClearRefinements.js +12 -0
  10. package/dist/cjs/connectors/useConfigure.js +14 -0
  11. package/dist/cjs/connectors/useCurrentRefinements.js +12 -0
  12. package/dist/cjs/connectors/useDynamicWidgets.js +22 -0
  13. package/dist/cjs/connectors/useGeoSearch.js +12 -0
  14. package/dist/cjs/connectors/useHierarchicalMenu.js +12 -0
  15. package/dist/cjs/connectors/useHits.js +12 -0
  16. package/dist/cjs/connectors/useHitsPerPage.js +12 -0
  17. package/dist/cjs/connectors/useInfiniteHits.js +12 -0
  18. package/dist/cjs/connectors/useMenu.js +12 -0
  19. package/dist/cjs/connectors/useNumericMenu.js +12 -0
  20. package/dist/cjs/connectors/usePagination.js +12 -0
  21. package/dist/cjs/connectors/usePoweredBy.js +21 -0
  22. package/dist/cjs/connectors/useQueryRules.js +12 -0
  23. package/dist/cjs/connectors/useRange.js +12 -0
  24. package/dist/cjs/connectors/useRefinementList.js +12 -0
  25. package/dist/cjs/connectors/useSearchBox.js +12 -0
  26. package/dist/cjs/connectors/useSortBy.js +12 -0
  27. package/dist/cjs/connectors/useStats.js +12 -0
  28. package/dist/cjs/connectors/useToggleRefinement.js +12 -0
  29. package/dist/cjs/hooks/useConnector.js +136 -0
  30. package/dist/cjs/hooks/useInstantSearch.js +58 -0
  31. package/dist/cjs/index.js +328 -320
  32. package/dist/cjs/lib/IndexContext.js +12 -0
  33. package/dist/cjs/lib/InstantSearchContext.js +12 -0
  34. package/dist/cjs/lib/InstantSearchSSRContext.js +12 -0
  35. package/dist/cjs/lib/createSearchResults.js +27 -0
  36. package/dist/cjs/lib/dequal.js +53 -0
  37. package/dist/cjs/lib/getIndexSearchResults.js +32 -0
  38. package/dist/cjs/lib/invariant.js +25 -0
  39. package/dist/cjs/lib/noop.js +8 -0
  40. package/dist/cjs/lib/useForceUpdate.js +25 -0
  41. package/dist/cjs/lib/useIndex.js +38 -0
  42. package/dist/cjs/lib/useIndexContext.js +14 -0
  43. package/dist/cjs/lib/useInstantSearchApi.js +191 -0
  44. package/dist/cjs/lib/useInstantSearchContext.js +14 -0
  45. package/dist/cjs/lib/useInstantSearchSSRContext.js +11 -0
  46. package/dist/cjs/lib/useInstantSearchServerContext.js +11 -0
  47. package/dist/cjs/lib/useIsomorphicLayoutEffect.js +14 -0
  48. package/dist/cjs/lib/useSearchResults.js +46 -0
  49. package/dist/cjs/lib/useSearchState.js +48 -0
  50. package/dist/cjs/lib/useStableValue.js +26 -0
  51. package/dist/cjs/lib/useWidget.js +78 -0
  52. package/dist/cjs/lib/warn.js +41 -0
  53. package/dist/cjs/package.json +1 -0
  54. package/dist/cjs/server/getServerState.js +93 -0
  55. package/dist/cjs/{types → server}/index.js +4 -4
  56. package/dist/cjs/{core/version.js → version.js} +1 -1
  57. package/dist/es/components/Configure.d.ts +3 -0
  58. package/dist/es/components/Configure.js +7 -0
  59. package/dist/es/components/DynamicWidgets.d.ts +13 -0
  60. package/dist/es/components/DynamicWidgets.js +55 -0
  61. package/dist/es/components/Index.d.ts +6 -0
  62. package/dist/es/components/Index.js +17 -0
  63. package/dist/es/components/InstantSearch.d.ts +7 -0
  64. package/dist/es/components/InstantSearch.js +20 -0
  65. package/dist/es/components/InstantSearchSSRProvider.d.ts +13 -0
  66. package/dist/es/{connectors/connectConfigure.js → components/InstantSearchSSRProvider.js} +26 -61
  67. package/dist/es/components/InstantSearchServerContext.d.ts +12 -0
  68. package/dist/es/components/InstantSearchServerContext.js +5 -0
  69. package/dist/es/connectors/useBreadcrumb.d.ts +4 -0
  70. package/dist/es/connectors/useBreadcrumb.js +5 -0
  71. package/dist/es/connectors/useClearRefinements.d.ts +4 -0
  72. package/dist/es/connectors/useClearRefinements.js +5 -0
  73. package/dist/es/connectors/useConfigure.d.ts +4 -0
  74. package/dist/es/connectors/useConfigure.js +7 -0
  75. package/dist/es/connectors/useCurrentRefinements.d.ts +4 -0
  76. package/dist/es/connectors/useCurrentRefinements.js +5 -0
  77. package/dist/es/connectors/useDynamicWidgets.d.ts +4 -0
  78. package/dist/es/connectors/useDynamicWidgets.js +15 -0
  79. package/dist/es/connectors/useGeoSearch.d.ts +6 -0
  80. package/dist/es/connectors/useGeoSearch.js +5 -0
  81. package/dist/es/connectors/useHierarchicalMenu.d.ts +4 -0
  82. package/dist/es/connectors/useHierarchicalMenu.js +5 -0
  83. package/dist/es/connectors/useHits.d.ts +5 -0
  84. package/dist/es/connectors/useHits.js +5 -0
  85. package/dist/es/connectors/useHitsPerPage.d.ts +4 -0
  86. package/dist/es/connectors/useHitsPerPage.js +5 -0
  87. package/dist/es/connectors/useInfiniteHits.d.ts +5 -0
  88. package/dist/es/connectors/useInfiniteHits.js +5 -0
  89. package/dist/es/connectors/useMenu.d.ts +4 -0
  90. package/dist/es/connectors/useMenu.js +5 -0
  91. package/dist/es/connectors/useNumericMenu.d.ts +4 -0
  92. package/dist/es/connectors/useNumericMenu.js +5 -0
  93. package/dist/es/connectors/usePagination.d.ts +4 -0
  94. package/dist/es/connectors/usePagination.js +5 -0
  95. package/dist/es/connectors/usePoweredBy.d.ts +2 -0
  96. package/dist/es/connectors/usePoweredBy.js +15 -0
  97. package/dist/es/connectors/useQueryRules.d.ts +4 -0
  98. package/dist/es/connectors/useQueryRules.js +5 -0
  99. package/dist/es/connectors/useRange.d.ts +4 -0
  100. package/dist/es/connectors/useRange.js +5 -0
  101. package/dist/es/connectors/useRefinementList.d.ts +4 -0
  102. package/dist/es/connectors/useRefinementList.js +5 -0
  103. package/dist/es/connectors/useSearchBox.d.ts +4 -0
  104. package/dist/es/connectors/useSearchBox.js +5 -0
  105. package/dist/es/connectors/useSortBy.d.ts +4 -0
  106. package/dist/es/connectors/useSortBy.js +5 -0
  107. package/dist/es/connectors/useStats.d.ts +4 -0
  108. package/dist/es/connectors/useStats.js +5 -0
  109. package/dist/es/connectors/useToggleRefinement.d.ts +4 -0
  110. package/dist/es/connectors/useToggleRefinement.js +5 -0
  111. package/dist/es/hooks/useConnector.d.ts +3 -0
  112. package/dist/es/hooks/useConnector.js +130 -0
  113. package/dist/es/hooks/useInstantSearch.d.ts +32 -0
  114. package/dist/es/hooks/useInstantSearch.js +52 -0
  115. package/dist/es/index.d.ts +31 -0
  116. package/dist/es/index.js +31 -86
  117. package/dist/es/lib/IndexContext.d.ts +3 -0
  118. package/dist/es/lib/IndexContext.js +5 -0
  119. package/dist/es/lib/InstantSearchContext.d.ts +3 -0
  120. package/dist/es/lib/InstantSearchContext.js +5 -0
  121. package/dist/es/lib/InstantSearchSSRContext.d.ts +8 -0
  122. package/dist/es/lib/InstantSearchSSRContext.js +5 -0
  123. package/dist/es/lib/createSearchResults.d.ts +3 -0
  124. package/dist/es/lib/createSearchResults.js +20 -0
  125. package/dist/es/lib/dequal.d.ts +1 -0
  126. package/dist/es/lib/dequal.js +47 -0
  127. package/dist/es/lib/getIndexSearchResults.d.ts +9 -0
  128. package/dist/es/lib/getIndexSearchResults.js +26 -0
  129. package/dist/es/lib/invariant.d.ts +9 -0
  130. package/dist/es/lib/invariant.js +19 -0
  131. package/dist/es/lib/noop.d.ts +1 -0
  132. package/dist/es/lib/noop.js +1 -0
  133. package/dist/es/lib/useForceUpdate.d.ts +6 -0
  134. package/dist/es/lib/useForceUpdate.js +20 -0
  135. package/dist/es/lib/useIndex.d.ts +3 -0
  136. package/dist/es/lib/useIndex.js +31 -0
  137. package/dist/es/lib/useIndexContext.d.ts +2 -0
  138. package/dist/es/lib/useIndexContext.js +8 -0
  139. package/dist/es/lib/useInstantSearchApi.d.ts +21 -0
  140. package/dist/es/lib/useInstantSearchApi.js +184 -0
  141. package/dist/es/lib/useInstantSearchContext.d.ts +3 -0
  142. package/dist/es/lib/useInstantSearchContext.js +8 -0
  143. package/dist/es/lib/useInstantSearchSSRContext.d.ts +3 -0
  144. package/dist/es/lib/useInstantSearchSSRContext.js +5 -0
  145. package/dist/es/lib/useInstantSearchServerContext.d.ts +3 -0
  146. package/dist/es/lib/useInstantSearchServerContext.js +5 -0
  147. package/dist/es/lib/useIsomorphicLayoutEffect.d.ts +7 -0
  148. package/dist/es/lib/useIsomorphicLayoutEffect.js +8 -0
  149. package/dist/es/lib/useSearchResults.d.ts +7 -0
  150. package/dist/es/lib/useSearchResults.js +40 -0
  151. package/dist/es/lib/useSearchState.d.ts +8 -0
  152. package/dist/es/lib/useSearchState.js +42 -0
  153. package/dist/es/lib/useStableValue.d.ts +1 -0
  154. package/dist/es/lib/useStableValue.js +20 -0
  155. package/dist/es/lib/useWidget.d.ts +8 -0
  156. package/dist/es/lib/useWidget.js +72 -0
  157. package/dist/es/lib/warn.d.ts +10 -0
  158. package/dist/es/lib/warn.js +33 -0
  159. package/dist/es/server/getServerState.d.ts +10 -0
  160. package/dist/es/server/getServerState.js +86 -0
  161. package/dist/es/server/index.d.ts +1 -0
  162. package/dist/es/server/index.js +1 -0
  163. package/dist/es/version.d.ts +2 -0
  164. package/dist/es/version.js +1 -0
  165. package/dist/umd/ReactInstantSearchCore.js +16316 -10183
  166. package/dist/umd/ReactInstantSearchCore.js.map +1 -1
  167. package/dist/umd/ReactInstantSearchCore.min.js +1 -1
  168. package/dist/umd/ReactInstantSearchCore.min.js.map +1 -1
  169. package/package.json +24 -9
  170. package/dist/cjs/connectors/connectAutoComplete.js +0 -104
  171. package/dist/cjs/connectors/connectBreadcrumb.js +0 -123
  172. package/dist/cjs/connectors/connectConfigureRelatedItems.js +0 -127
  173. package/dist/cjs/connectors/connectCurrentRefinements.js +0 -69
  174. package/dist/cjs/connectors/connectDynamicWidgets.js +0 -65
  175. package/dist/cjs/connectors/connectGeoSearch.js +0 -189
  176. package/dist/cjs/connectors/connectHierarchicalMenu.js +0 -273
  177. package/dist/cjs/connectors/connectHighlight.js +0 -87
  178. package/dist/cjs/connectors/connectHitInsights.js +0 -76
  179. package/dist/cjs/connectors/connectHits.js +0 -88
  180. package/dist/cjs/connectors/connectHitsPerPage.js +0 -97
  181. package/dist/cjs/connectors/connectInfiniteHits.js +0 -154
  182. package/dist/cjs/connectors/connectMenu.js +0 -221
  183. package/dist/cjs/connectors/connectNumericMenu.js +0 -215
  184. package/dist/cjs/connectors/connectPagination.js +0 -94
  185. package/dist/cjs/connectors/connectPoweredBy.js +0 -27
  186. package/dist/cjs/connectors/connectQueryRules.js +0 -129
  187. package/dist/cjs/connectors/connectRange.js +0 -287
  188. package/dist/cjs/connectors/connectRefinementList.js +0 -243
  189. package/dist/cjs/connectors/connectRelevantSort.js +0 -56
  190. package/dist/cjs/connectors/connectScrollTo.js +0 -70
  191. package/dist/cjs/connectors/connectSearchBox.js +0 -104
  192. package/dist/cjs/connectors/connectSortBy.js +0 -100
  193. package/dist/cjs/connectors/connectStateResults.js +0 -79
  194. package/dist/cjs/connectors/connectStats.js +0 -39
  195. package/dist/cjs/connectors/connectToggleRefinement.js +0 -163
  196. package/dist/cjs/connectors/connectVoiceSearch.js +0 -124
  197. package/dist/cjs/core/context.js +0 -37
  198. package/dist/cjs/core/createConnector.js +0 -268
  199. package/dist/cjs/core/createInstantSearchManager.d.js +0 -1
  200. package/dist/cjs/core/createInstantSearchManager.js +0 -541
  201. package/dist/cjs/core/createStore.js +0 -27
  202. package/dist/cjs/core/createWidgetsManager.js +0 -39
  203. package/dist/cjs/core/highlight.js +0 -102
  204. package/dist/cjs/core/indexUtils.js +0 -214
  205. package/dist/cjs/core/metadata.js +0 -46
  206. package/dist/cjs/core/translatable.js +0 -82
  207. package/dist/cjs/core/utils.js +0 -161
  208. package/dist/cjs/types/algoliasearch.js +0 -1
  209. package/dist/cjs/types/translatable.js +0 -1
  210. package/dist/cjs/widgets/Configure.js +0 -48
  211. package/dist/cjs/widgets/ConfigureRelatedItems.js +0 -21
  212. package/dist/cjs/widgets/DynamicWidgets.js +0 -61
  213. package/dist/cjs/widgets/Index.js +0 -149
  214. package/dist/cjs/widgets/InstantSearch.js +0 -251
  215. package/dist/cjs/widgets/QueryRuleContext.js +0 -14
  216. package/dist/es/connectors/connectAutoComplete.js +0 -96
  217. package/dist/es/connectors/connectBreadcrumb.js +0 -115
  218. package/dist/es/connectors/connectConfigureRelatedItems.js +0 -121
  219. package/dist/es/connectors/connectCurrentRefinements.js +0 -62
  220. package/dist/es/connectors/connectDynamicWidgets.js +0 -56
  221. package/dist/es/connectors/connectGeoSearch.js +0 -182
  222. package/dist/es/connectors/connectHierarchicalMenu.js +0 -264
  223. package/dist/es/connectors/connectHighlight.js +0 -79
  224. package/dist/es/connectors/connectHitInsights.js +0 -69
  225. package/dist/es/connectors/connectHits.js +0 -81
  226. package/dist/es/connectors/connectHitsPerPage.js +0 -89
  227. package/dist/es/connectors/connectInfiniteHits.js +0 -146
  228. package/dist/es/connectors/connectMenu.js +0 -213
  229. package/dist/es/connectors/connectNumericMenu.js +0 -207
  230. package/dist/es/connectors/connectPagination.js +0 -86
  231. package/dist/es/connectors/connectPoweredBy.js +0 -20
  232. package/dist/es/connectors/connectQueryRules.js +0 -122
  233. package/dist/es/connectors/connectRange.js +0 -280
  234. package/dist/es/connectors/connectRefinementList.js +0 -235
  235. package/dist/es/connectors/connectRelevantSort.js +0 -50
  236. package/dist/es/connectors/connectScrollTo.js +0 -63
  237. package/dist/es/connectors/connectSearchBox.js +0 -96
  238. package/dist/es/connectors/connectSortBy.js +0 -92
  239. package/dist/es/connectors/connectStateResults.js +0 -72
  240. package/dist/es/connectors/connectStats.js +0 -32
  241. package/dist/es/connectors/connectToggleRefinement.js +0 -155
  242. package/dist/es/connectors/connectVoiceSearch.js +0 -116
  243. package/dist/es/core/context.js +0 -28
  244. package/dist/es/core/createConnector.js +0 -257
  245. package/dist/es/core/createInstantSearchManager.d.js +0 -0
  246. package/dist/es/core/createInstantSearchManager.js +0 -534
  247. package/dist/es/core/createStore.js +0 -21
  248. package/dist/es/core/createWidgetsManager.js +0 -33
  249. package/dist/es/core/highlight.js +0 -94
  250. package/dist/es/core/indexUtils.js +0 -203
  251. package/dist/es/core/metadata.js +0 -38
  252. package/dist/es/core/translatable.js +0 -74
  253. package/dist/es/core/utils.js +0 -139
  254. package/dist/es/core/version.js +0 -1
  255. package/dist/es/types/algoliasearch.js +0 -1
  256. package/dist/es/types/index.js +0 -1
  257. package/dist/es/types/translatable.js +0 -1
  258. package/dist/es/widgets/Configure.js +0 -42
  259. package/dist/es/widgets/ConfigureRelatedItems.js +0 -13
  260. package/dist/es/widgets/DynamicWidgets.js +0 -51
  261. package/dist/es/widgets/Index.js +0 -138
  262. package/dist/es/widgets/InstantSearch.js +0 -241
  263. package/dist/es/widgets/QueryRuleContext.js +0 -6
@@ -0,0 +1,8 @@
1
+ import type { Widget } from 'instantsearch.js';
2
+ import type { IndexWidget } from 'instantsearch.js/es/widgets/index/index';
3
+ export declare function useWidget<TWidget extends Widget | IndexWidget, TProps>({ widget, parentIndex, props, shouldSsr, }: {
4
+ widget: TWidget;
5
+ parentIndex: IndexWidget;
6
+ props: TProps;
7
+ shouldSsr: boolean;
8
+ }): void;
@@ -0,0 +1,72 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { dequal } from "./dequal.js";
3
+ import { useInstantSearchContext } from "./useInstantSearchContext.js";
4
+ import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect.js";
5
+ export function useWidget(_ref) {
6
+ var widget = _ref.widget,
7
+ parentIndex = _ref.parentIndex,
8
+ props = _ref.props,
9
+ shouldSsr = _ref.shouldSsr;
10
+ var prevPropsRef = useRef(props);
11
+ useEffect(function () {
12
+ prevPropsRef.current = props;
13
+ }, [props]);
14
+ var prevWidgetRef = useRef(widget);
15
+ useEffect(function () {
16
+ prevWidgetRef.current = widget;
17
+ }, [widget]);
18
+ var cleanupTimerRef = useRef(null);
19
+ var shouldAddWidgetEarly = shouldSsr && !parentIndex.getWidgets().includes(widget);
20
+ var search = useInstantSearchContext();
21
+
22
+ // This effect is responsible for adding, removing, and updating the widget.
23
+ // We need to support scenarios where the widget is remounted quickly, like in
24
+ // Strict Mode, so that we don't lose its state, and therefore that we don't
25
+ // break routing.
26
+ useIsomorphicLayoutEffect(function () {
27
+ var previousWidget = prevWidgetRef.current;
28
+
29
+ // Scenario 1: the widget is added for the first time.
30
+ if (!cleanupTimerRef.current) {
31
+ if (!shouldAddWidgetEarly) {
32
+ parentIndex.addWidgets([widget]);
33
+ }
34
+ }
35
+ // Scenario 2: the widget is rerendered or updated.
36
+ else {
37
+ // We cancel the original effect cleanup because it may not be necessary if
38
+ // props haven't changed. (We manually call it if it is below.)
39
+ clearTimeout(cleanupTimerRef.current);
40
+
41
+ // Warning: if an unstable function prop is provided, `dequal` is not able
42
+ // to keep its reference and therefore will consider that props did change.
43
+ // This could unsollicitely remove/add the widget, therefore forget its state,
44
+ // and could be a source of confusion.
45
+ // If users face this issue, we should advise them to provide stable function
46
+ // references.
47
+ var arePropsEqual = dequal(props, prevPropsRef.current);
48
+
49
+ // If props did change, then we execute the cleanup function instantly
50
+ // and then add the widget back. This lets us add the widget without
51
+ // waiting for the scheduled cleanup function to finish (that we canceled
52
+ // above).
53
+ if (!arePropsEqual) {
54
+ parentIndex.removeWidgets([previousWidget]);
55
+ parentIndex.addWidgets([widget]);
56
+ }
57
+ }
58
+ return function () {
59
+ // We don't remove the widget right away, but rather schedule it so that
60
+ // we're able to cancel it in the next effect.
61
+ cleanupTimerRef.current = setTimeout(function () {
62
+ search._schedule(function () {
63
+ if (search._preventWidgetCleanup) return;
64
+ parentIndex.removeWidgets([previousWidget]);
65
+ });
66
+ });
67
+ };
68
+ }, [parentIndex, widget, shouldAddWidgetEarly, search, props]);
69
+ if (shouldAddWidgetEarly) {
70
+ parentIndex.addWidgets([widget]);
71
+ }
72
+ }
@@ -0,0 +1,10 @@
1
+ type WarnCache = {
2
+ current: Record<string, boolean>;
3
+ };
4
+ export declare const warnCache: WarnCache;
5
+ /**
6
+ * Logs a warning if the condition is not met.
7
+ * This is used to log issues in development environment only.
8
+ */
9
+ export declare function warn(condition: boolean, message: string): void;
10
+ export {};
@@ -0,0 +1,33 @@
1
+ /* eslint-disable no-console, no-empty */
2
+
3
+ export var warnCache = {
4
+ current: {}
5
+ };
6
+
7
+ /**
8
+ * Logs a warning if the condition is not met.
9
+ * This is used to log issues in development environment only.
10
+ */
11
+ export function warn(condition, message) {
12
+ if (!(process.env.NODE_ENV === 'development')) {
13
+ return;
14
+ }
15
+ if (condition) {
16
+ return;
17
+ }
18
+ var sanitizedMessage = message.trim();
19
+ var hasAlreadyPrinted = warnCache.current[sanitizedMessage];
20
+ if (!hasAlreadyPrinted) {
21
+ warnCache.current[sanitizedMessage] = true;
22
+ var warning = "[InstantSearch] ".concat(sanitizedMessage);
23
+ console.warn(warning);
24
+ try {
25
+ // Welcome to debugging InstantSearch.
26
+ //
27
+ // This error was thrown as a convenience so that you can find the source
28
+ // of the warning that appears in the console by enabling "Pause on exceptions"
29
+ // in your debugger.
30
+ throw new Error(warning);
31
+ } catch (error) {}
32
+ }
33
+ }
@@ -0,0 +1,10 @@
1
+ import type { InstantSearchServerState } from '..';
2
+ import type { ReactNode } from 'react';
3
+ export type RenderToString = (element: JSX.Element) => unknown;
4
+ export type GetServerStateOptions = {
5
+ renderToString: RenderToString;
6
+ };
7
+ /**
8
+ * Returns the InstantSearch server state from a component.
9
+ */
10
+ export declare function getServerState(children: ReactNode, { renderToString }: GetServerStateOptions): Promise<InstantSearchServerState>;
@@ -0,0 +1,86 @@
1
+ import { getInitialResults, waitForResults } from "instantsearch.js/es/lib/server.js";
2
+ import { walkIndex } from "instantsearch.js/es/lib/utils/index.js";
3
+ import React from 'react';
4
+ import { InstantSearchServerContext, InstantSearchSSRProvider } from "../index.js";
5
+ /**
6
+ * Returns the InstantSearch server state from a component.
7
+ */
8
+ export function getServerState(children, _ref) {
9
+ var renderToString = _ref.renderToString;
10
+ var searchRef = {
11
+ current: undefined
12
+ };
13
+ var createNotifyServer = function createNotifyServer() {
14
+ var hasBeenNotified = false;
15
+ var notifyServer = function notifyServer(_ref2) {
16
+ var search = _ref2.search;
17
+ if (hasBeenNotified) {
18
+ throw new Error('getServerState should be called with a single InstantSearchSSRProvider and a single InstantSearch component.');
19
+ }
20
+ hasBeenNotified = true;
21
+ searchRef.current = search;
22
+ };
23
+ return notifyServer;
24
+ };
25
+ return execute({
26
+ children: children,
27
+ renderToString: renderToString,
28
+ searchRef: searchRef,
29
+ notifyServer: createNotifyServer()
30
+ }).then(function (serverState) {
31
+ var shouldRefetch = false;
32
+
33
+ // <DynamicWidgets> requires another query to retrieve the dynamic widgets
34
+ // to render.
35
+ walkIndex(searchRef.current.mainIndex, function (index) {
36
+ shouldRefetch = shouldRefetch || index.getWidgets().some(function (widget) {
37
+ return widget.$$type === 'ais.dynamicWidgets';
38
+ });
39
+ });
40
+ if (shouldRefetch) {
41
+ return execute({
42
+ children: /*#__PURE__*/React.createElement(InstantSearchSSRProvider, serverState, children),
43
+ renderToString: renderToString,
44
+ searchRef: searchRef,
45
+ notifyServer: createNotifyServer()
46
+ });
47
+ }
48
+ return serverState;
49
+ });
50
+ }
51
+ function execute(_ref3) {
52
+ var children = _ref3.children,
53
+ renderToString = _ref3.renderToString,
54
+ notifyServer = _ref3.notifyServer,
55
+ searchRef = _ref3.searchRef;
56
+ return Promise.resolve().then(function () {
57
+ renderToString( /*#__PURE__*/React.createElement(InstantSearchServerContext.Provider, {
58
+ value: {
59
+ notifyServer: notifyServer
60
+ }
61
+ }, children));
62
+ }).then(function () {
63
+ return (
64
+ // We wait for the component to mount so that `notifyServer()` is called.
65
+ new Promise(function (resolve) {
66
+ return setTimeout(resolve, 0);
67
+ })
68
+ );
69
+ }).then(function () {
70
+ // If `notifyServer()` is not called by then, it means that <InstantSearch>
71
+ // wasn't within the `children`.
72
+ // We decide to go with a strict behavior in that case; throwing. If users have
73
+ // some routes that don't mount the <InstantSearch> component, they would need
74
+ // to try/catch the `getServerState()` call.
75
+ // If this behavior turns out to be too strict for many users, we can decide
76
+ // to warn instead of throwing.
77
+ if (!searchRef.current) {
78
+ throw new Error("Unable to retrieve InstantSearch's server state in `getServerState()`. Did you mount the <InstantSearch> component?");
79
+ }
80
+ return waitForResults(searchRef.current);
81
+ }).then(function () {
82
+ return {
83
+ initialResults: getInitialResults(searchRef.current.mainIndex)
84
+ };
85
+ });
86
+ }
@@ -0,0 +1 @@
1
+ export * from './getServerState';
@@ -0,0 +1 @@
1
+ export * from "./getServerState.js";
@@ -0,0 +1,2 @@
1
+ declare const _default: "7.0.0";
2
+ export default _default;
@@ -0,0 +1 @@
1
+ export default '7.0.0';