react-instantsearch-core 7.42.0 → 7.44.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.
- package/dist/cjs/components/InstantSearchSSRProvider.js +10 -4
- package/dist/cjs/connectors/useChat.js +1 -0
- package/dist/cjs/lib/useIsHydrated.js +4 -6
- package/dist/cjs/version.js +1 -1
- package/dist/es/components/InstantSearchSSRProvider.js +10 -4
- package/dist/es/connectors/useChat.js +1 -0
- package/dist/es/lib/useIsHydrated.js +4 -6
- package/dist/es/lib/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/es/version.d.ts +1 -1
- package/dist/es/version.js +1 -1
- package/dist/umd/ReactInstantSearchCore.js +136 -36
- package/dist/umd/ReactInstantSearchCore.min.js +3 -3
- package/package.json +3 -3
|
@@ -24,6 +24,10 @@ function InstantSearchSSRProvider(_0) {
|
|
|
24
24
|
var ssrSearchRef = _react.default.useRef(null);
|
|
25
25
|
// This is used to re-map the result index to the requesting widget
|
|
26
26
|
var recommendIdx = _react.default.useRef(0);
|
|
27
|
+
var hydrationCompleteRef = _react.default.useRef(false);
|
|
28
|
+
_react.default.useEffect(function() {
|
|
29
|
+
hydrationCompleteRef.current = true;
|
|
30
|
+
}, []);
|
|
27
31
|
// When <DynamicWidgets> is mounted, a second provider is used above the user-land
|
|
28
32
|
// <InstantSearchSSRProvider> in `getServerState()`.
|
|
29
33
|
// To avoid the user's provider overriding the context value with an empty object,
|
|
@@ -31,10 +35,12 @@ function InstantSearchSSRProvider(_0) {
|
|
|
31
35
|
if (Object.keys(props).length === 0) {
|
|
32
36
|
return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, children);
|
|
33
37
|
}
|
|
38
|
+
var contextValue = _object_spread_props._(_object_spread._({}, props), {
|
|
39
|
+
ssrSearchRef: ssrSearchRef,
|
|
40
|
+
recommendIdx: recommendIdx,
|
|
41
|
+
hydrationCompleteRef: hydrationCompleteRef
|
|
42
|
+
});
|
|
34
43
|
return /*#__PURE__*/ _react.default.createElement(_InstantSearchSSRContext.InstantSearchSSRContext.Provider, {
|
|
35
|
-
value:
|
|
36
|
-
ssrSearchRef: ssrSearchRef,
|
|
37
|
-
recommendIdx: recommendIdx
|
|
38
|
-
})
|
|
44
|
+
value: contextValue
|
|
39
45
|
}, children);
|
|
40
46
|
}
|
|
@@ -32,17 +32,15 @@ function useNativeIsHydrated() {
|
|
|
32
32
|
// `InstantSearchSSRProvider` flow: the server context covers state collection,
|
|
33
33
|
// and the SSR context covers HTML rendering and hydration.
|
|
34
34
|
//
|
|
35
|
-
// This can cost an extra render: a mount inside a provider that carries server
|
|
36
|
-
// state is withheld once even when there is no server markup to reproduce. A
|
|
37
|
-
// mount outside both contexts is never withheld.
|
|
38
|
-
//
|
|
39
35
|
// The shim's React 16 and 17 fallback ignores the server snapshot, so using it
|
|
40
|
-
// here would not
|
|
36
|
+
// here would not distinguish initial hydration from later provider children.
|
|
41
37
|
function useLegacyIsHydrated() {
|
|
38
|
+
var _ssrContext_hydrationCompleteRef;
|
|
42
39
|
var serverContext = (0, _useInstantSearchServerContext.useInstantSearchServerContext)();
|
|
43
40
|
var ssrContext = (0, _useInstantSearchSSRContext.useInstantSearchSSRContext)();
|
|
44
41
|
var isServerRendered = serverContext !== null || ssrContext !== null;
|
|
45
|
-
var
|
|
42
|
+
var isProviderHydrated = (ssrContext === null || ssrContext === void 0 ? void 0 : (_ssrContext_hydrationCompleteRef = ssrContext.hydrationCompleteRef) === null || _ssrContext_hydrationCompleteRef === void 0 ? void 0 : _ssrContext_hydrationCompleteRef.current) === true;
|
|
43
|
+
var _React_useState = _sliced_to_array._(_react.useState(!isServerRendered || isProviderHydrated), 2), isHydrated = _React_useState[0], setIsHydrated = _React_useState[1];
|
|
46
44
|
_react.useEffect(function() {
|
|
47
45
|
setIsHydrated(true);
|
|
48
46
|
}, []);
|
package/dist/cjs/version.js
CHANGED
|
@@ -16,6 +16,10 @@ import { InstantSearchSSRContext } from '../lib/InstantSearchSSRContext.js';
|
|
|
16
16
|
var ssrSearchRef = React__default.useRef(null);
|
|
17
17
|
// This is used to re-map the result index to the requesting widget
|
|
18
18
|
var recommendIdx = React__default.useRef(0);
|
|
19
|
+
var hydrationCompleteRef = React__default.useRef(false);
|
|
20
|
+
React__default.useEffect(function() {
|
|
21
|
+
hydrationCompleteRef.current = true;
|
|
22
|
+
}, []);
|
|
19
23
|
// When <DynamicWidgets> is mounted, a second provider is used above the user-land
|
|
20
24
|
// <InstantSearchSSRProvider> in `getServerState()`.
|
|
21
25
|
// To avoid the user's provider overriding the context value with an empty object,
|
|
@@ -23,11 +27,13 @@ import { InstantSearchSSRContext } from '../lib/InstantSearchSSRContext.js';
|
|
|
23
27
|
if (Object.keys(props).length === 0) {
|
|
24
28
|
return /*#__PURE__*/ React__default.createElement(React__default.Fragment, null, children);
|
|
25
29
|
}
|
|
30
|
+
var contextValue = _$1(_$2({}, props), {
|
|
31
|
+
ssrSearchRef: ssrSearchRef,
|
|
32
|
+
recommendIdx: recommendIdx,
|
|
33
|
+
hydrationCompleteRef: hydrationCompleteRef
|
|
34
|
+
});
|
|
26
35
|
return /*#__PURE__*/ React__default.createElement(InstantSearchSSRContext.Provider, {
|
|
27
|
-
value:
|
|
28
|
-
ssrSearchRef: ssrSearchRef,
|
|
29
|
-
recommendIdx: recommendIdx
|
|
30
|
-
})
|
|
36
|
+
value: contextValue
|
|
31
37
|
}, children);
|
|
32
38
|
}
|
|
33
39
|
|
|
@@ -21,17 +21,15 @@ function useNativeIsHydrated() {
|
|
|
21
21
|
// `InstantSearchSSRProvider` flow: the server context covers state collection,
|
|
22
22
|
// and the SSR context covers HTML rendering and hydration.
|
|
23
23
|
//
|
|
24
|
-
// This can cost an extra render: a mount inside a provider that carries server
|
|
25
|
-
// state is withheld once even when there is no server markup to reproduce. A
|
|
26
|
-
// mount outside both contexts is never withheld.
|
|
27
|
-
//
|
|
28
24
|
// The shim's React 16 and 17 fallback ignores the server snapshot, so using it
|
|
29
|
-
// here would not
|
|
25
|
+
// here would not distinguish initial hydration from later provider children.
|
|
30
26
|
function useLegacyIsHydrated() {
|
|
27
|
+
var _ssrContext_hydrationCompleteRef;
|
|
31
28
|
var serverContext = useInstantSearchServerContext();
|
|
32
29
|
var ssrContext = useInstantSearchSSRContext();
|
|
33
30
|
var isServerRendered = serverContext !== null || ssrContext !== null;
|
|
34
|
-
var
|
|
31
|
+
var isProviderHydrated = (ssrContext === null || ssrContext === void 0 ? void 0 : (_ssrContext_hydrationCompleteRef = ssrContext.hydrationCompleteRef) === null || _ssrContext_hydrationCompleteRef === void 0 ? void 0 : _ssrContext_hydrationCompleteRef.current) === true;
|
|
32
|
+
var _React_useState = _(React.useState(!isServerRendered || isProviderHydrated), 2), isHydrated = _React_useState[0], setIsHydrated = _React_useState[1];
|
|
35
33
|
React.useEffect(function() {
|
|
36
34
|
setIsHydrated(true);
|
|
37
35
|
}, []);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
2
|
/**
|
|
3
3
|
* `useLayoutEffect` that doesn't show a warning when server-side rendering.
|
|
4
4
|
*
|
|
5
5
|
* It uses `useEffect` on the server (no-op), and `useLayoutEffect` on the browser.
|
|
6
6
|
*/
|
|
7
|
-
export declare const useIsomorphicLayoutEffect: typeof
|
|
7
|
+
export declare const useIsomorphicLayoutEffect: typeof useEffect;
|
package/dist/es/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: "7.
|
|
1
|
+
declare const _default: "7.44.0";
|
|
2
2
|
export default _default;
|
package/dist/es/version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! React InstantSearch Core 7.
|
|
1
|
+
/*! React InstantSearch Core 7.44.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
|
|
2
2
|
(function (global, factory) {
|
|
3
3
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
|
|
4
4
|
typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
26
26
|
|
|
27
|
-
var version$2 = '7.
|
|
27
|
+
var version$2 = '7.44.0';
|
|
28
28
|
|
|
29
29
|
function _define_property(obj, key, value) {
|
|
30
30
|
if (key in obj) {
|
|
@@ -6291,22 +6291,29 @@
|
|
|
6291
6291
|
*
|
|
6292
6292
|
* Parameters set on a widget win, so an explicit `queryParameters.userToken`
|
|
6293
6293
|
* keeps overriding the middleware.
|
|
6294
|
+
*
|
|
6295
|
+
* The fallback query is a regular search, so it gets the same treatment — but
|
|
6296
|
+
* only merged into a `fallbackParameters` the widget already set. See below.
|
|
6294
6297
|
*/ function addInsightsToRecommendParameters(recommendParameters, param) {
|
|
6295
6298
|
var userToken = param.userToken, clickAnalytics = param.clickAnalytics;
|
|
6296
6299
|
if (userToken === undefined && clickAnalytics === undefined) {
|
|
6297
6300
|
return recommendParameters;
|
|
6298
6301
|
}
|
|
6302
|
+
var insightsParameters = _object_spread({}, clickAnalytics === undefined ? {} : {
|
|
6303
|
+
clickAnalytics: clickAnalytics
|
|
6304
|
+
}, userToken === undefined ? {} : {
|
|
6305
|
+
userToken: userToken
|
|
6306
|
+
});
|
|
6299
6307
|
return new algoliasearchHelper.RecommendParameters({
|
|
6300
6308
|
params: recommendParameters.params.map(function(params) {
|
|
6301
|
-
// v4 `TrendingFacetsQuery` doesn't include `queryParameters
|
|
6302
|
-
// API and the helper support them, like
|
|
6303
|
-
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
}, queryParameters)
|
|
6309
|
+
// v4 `TrendingFacetsQuery` doesn't include `queryParameters` or
|
|
6310
|
+
// `fallbackParameters`, but the v5 API and the helper support them, like
|
|
6311
|
+
// `connectTrendingFacets` does.
|
|
6312
|
+
var queryParameters = params.queryParameters, fallbackParameters = params.fallbackParameters;
|
|
6313
|
+
return _object_spread(_object_spread_props(_object_spread({}, params), {
|
|
6314
|
+
queryParameters: _object_spread({}, insightsParameters, queryParameters)
|
|
6315
|
+
}), fallbackParameters && {
|
|
6316
|
+
fallbackParameters: _object_spread({}, insightsParameters, fallbackParameters)
|
|
6310
6317
|
});
|
|
6311
6318
|
})
|
|
6312
6319
|
});
|
|
@@ -9242,7 +9249,7 @@
|
|
|
9242
9249
|
});
|
|
9243
9250
|
}
|
|
9244
9251
|
|
|
9245
|
-
var version = '4.
|
|
9252
|
+
var version = '4.111.0';
|
|
9246
9253
|
|
|
9247
9254
|
var ANONYMOUS_TOKEN_COOKIE_KEY = '_ALGOLIA';
|
|
9248
9255
|
function getCookie(name) {
|
|
@@ -12138,6 +12145,10 @@
|
|
|
12138
12145
|
var ssrSearchRef = React.useRef(null);
|
|
12139
12146
|
// This is used to re-map the result index to the requesting widget
|
|
12140
12147
|
var recommendIdx = React.useRef(0);
|
|
12148
|
+
var hydrationCompleteRef = React.useRef(false);
|
|
12149
|
+
React.useEffect(function() {
|
|
12150
|
+
hydrationCompleteRef.current = true;
|
|
12151
|
+
}, []);
|
|
12141
12152
|
// When <DynamicWidgets> is mounted, a second provider is used above the user-land
|
|
12142
12153
|
// <InstantSearchSSRProvider> in `getServerState()`.
|
|
12143
12154
|
// To avoid the user's provider overriding the context value with an empty object,
|
|
@@ -12145,11 +12156,13 @@
|
|
|
12145
12156
|
if (Object.keys(props).length === 0) {
|
|
12146
12157
|
return /*#__PURE__*/ React.createElement(React.Fragment, null, children);
|
|
12147
12158
|
}
|
|
12159
|
+
var contextValue = _object_spread_props(_object_spread({}, props), {
|
|
12160
|
+
ssrSearchRef: ssrSearchRef,
|
|
12161
|
+
recommendIdx: recommendIdx,
|
|
12162
|
+
hydrationCompleteRef: hydrationCompleteRef
|
|
12163
|
+
});
|
|
12148
12164
|
return /*#__PURE__*/ React.createElement(InstantSearchSSRContext.Provider, {
|
|
12149
|
-
value:
|
|
12150
|
-
ssrSearchRef: ssrSearchRef,
|
|
12151
|
-
recommendIdx: recommendIdx
|
|
12152
|
-
})
|
|
12165
|
+
value: contextValue
|
|
12153
12166
|
}, children);
|
|
12154
12167
|
}
|
|
12155
12168
|
|
|
@@ -14193,13 +14206,17 @@
|
|
|
14193
14206
|
if (!chatRenderState) {
|
|
14194
14207
|
return false;
|
|
14195
14208
|
}
|
|
14196
|
-
(_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
|
|
14197
14209
|
var trimmed = (_ref1 = message === null || message === void 0 ? void 0 : message.trim()) !== null && _ref1 !== void 0 ? _ref1 : '';
|
|
14198
14210
|
if (!trimmed) {
|
|
14199
|
-
|
|
14200
|
-
|
|
14211
|
+
if (chatRenderState.focusInput) {
|
|
14212
|
+
chatRenderState.focusInput();
|
|
14213
|
+
} else {
|
|
14214
|
+
var _chatRenderState_setOpen1;
|
|
14215
|
+
(_chatRenderState_setOpen1 = chatRenderState.setOpen) === null || _chatRenderState_setOpen1 === void 0 ? void 0 : _chatRenderState_setOpen1.call(chatRenderState, true);
|
|
14216
|
+
}
|
|
14201
14217
|
return false;
|
|
14202
14218
|
}
|
|
14219
|
+
(_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
|
|
14203
14220
|
if (isChatBusy(chatRenderState) || !chatRenderState.sendMessage) {
|
|
14204
14221
|
return false;
|
|
14205
14222
|
}
|
|
@@ -14422,6 +14439,58 @@
|
|
|
14422
14439
|
name: 'chat',
|
|
14423
14440
|
connector: true
|
|
14424
14441
|
});
|
|
14442
|
+
var OPEN_STATE_CACHE_KEY = 'instantsearch-chat-open-state';
|
|
14443
|
+
function normalizePersistence(persistence, hasCustomChat) {
|
|
14444
|
+
if (hasCustomChat) {
|
|
14445
|
+
return {
|
|
14446
|
+
messages: false,
|
|
14447
|
+
open: persistence === undefined || (typeof persistence === "undefined" ? "undefined" : _type_of(persistence)) === 'object' && persistence.open === true
|
|
14448
|
+
};
|
|
14449
|
+
}
|
|
14450
|
+
if (persistence === undefined || persistence === true) {
|
|
14451
|
+
return {
|
|
14452
|
+
messages: true,
|
|
14453
|
+
open: true
|
|
14454
|
+
};
|
|
14455
|
+
}
|
|
14456
|
+
if (persistence === false) {
|
|
14457
|
+
return {
|
|
14458
|
+
messages: false,
|
|
14459
|
+
open: false
|
|
14460
|
+
};
|
|
14461
|
+
}
|
|
14462
|
+
return {
|
|
14463
|
+
messages: persistence.messages === true,
|
|
14464
|
+
open: persistence.open === true
|
|
14465
|
+
};
|
|
14466
|
+
}
|
|
14467
|
+
function getOpenStateCacheKey(type) {
|
|
14468
|
+
return "".concat(OPEN_STATE_CACHE_KEY, "-").concat(type);
|
|
14469
|
+
}
|
|
14470
|
+
function readPersistedOpen(type) {
|
|
14471
|
+
try {
|
|
14472
|
+
return safelyRunOnBrowser(function(param) {
|
|
14473
|
+
var browserWindow = param.window;
|
|
14474
|
+
return browserWindow.sessionStorage.getItem(getOpenStateCacheKey(type)) === 'true';
|
|
14475
|
+
}, {
|
|
14476
|
+
fallback: function fallback() {
|
|
14477
|
+
return false;
|
|
14478
|
+
}
|
|
14479
|
+
});
|
|
14480
|
+
} catch (unused) {
|
|
14481
|
+
return false;
|
|
14482
|
+
}
|
|
14483
|
+
}
|
|
14484
|
+
function writePersistedOpen(type, open) {
|
|
14485
|
+
try {
|
|
14486
|
+
safelyRunOnBrowser(function(param) {
|
|
14487
|
+
var browserWindow = param.window;
|
|
14488
|
+
browserWindow.sessionStorage.setItem(getOpenStateCacheKey(type), String(open));
|
|
14489
|
+
});
|
|
14490
|
+
} catch (unused) {
|
|
14491
|
+
// Storage availability must not block the visible state change.
|
|
14492
|
+
}
|
|
14493
|
+
}
|
|
14425
14494
|
function getAttributesToClear$1(param) {
|
|
14426
14495
|
var results = param.results, helper = param.helper;
|
|
14427
14496
|
return uniq(getRefinements(results, helper.state, true).map(function(refinement) {
|
|
@@ -14481,10 +14550,11 @@
|
|
|
14481
14550
|
var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
|
|
14482
14551
|
checkRendering(renderFn, withUsage$q());
|
|
14483
14552
|
return function(widgetParams) {
|
|
14484
|
-
var _ref = widgetParams || {}, _ref_resume = _ref.resume, resume = _ref_resume === void 0 ? false : _ref_resume, _ref_tools = _ref.tools, tools = _ref_tools === void 0 ? {} : _ref_tools, _ref_type = _ref.type, type = _ref_type === void 0 ? 'chat' : _ref_type, context = _ref.context, initialUserMessage = _ref.initialUserMessage, initialMessages = _ref.initialMessages, _ref_disableTriggerValidation = _ref.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, _ref_sendAutomaticallyWhen = _ref.sendAutomaticallyWhen, sendAutomaticallyWhen = _ref_sendAutomaticallyWhen === void 0 ? lastAssistantMessageIsCompleteWithToolCalls : _ref_sendAutomaticallyWhen, _ref_requiresSearch = _ref.requiresSearch, requiresSearch = _ref_requiresSearch === void 0 ? true : _ref_requiresSearch, options = _object_without_properties(_ref, [
|
|
14553
|
+
var _ref = widgetParams || {}, _ref_resume = _ref.resume, resume = _ref_resume === void 0 ? false : _ref_resume, _ref_tools = _ref.tools, tools = _ref_tools === void 0 ? {} : _ref_tools, _ref_type = _ref.type, type = _ref_type === void 0 ? 'chat' : _ref_type, persistence = _ref.persistence, context = _ref.context, initialUserMessage = _ref.initialUserMessage, initialMessages = _ref.initialMessages, _ref_disableTriggerValidation = _ref.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, _ref_sendAutomaticallyWhen = _ref.sendAutomaticallyWhen, sendAutomaticallyWhen = _ref_sendAutomaticallyWhen === void 0 ? lastAssistantMessageIsCompleteWithToolCalls : _ref_sendAutomaticallyWhen, _ref_requiresSearch = _ref.requiresSearch, requiresSearch = _ref_requiresSearch === void 0 ? true : _ref_requiresSearch, options = _object_without_properties(_ref, [
|
|
14485
14554
|
"resume",
|
|
14486
14555
|
"tools",
|
|
14487
14556
|
"type",
|
|
14557
|
+
"persistence",
|
|
14488
14558
|
"context",
|
|
14489
14559
|
"initialUserMessage",
|
|
14490
14560
|
"initialMessages",
|
|
@@ -14492,6 +14562,7 @@
|
|
|
14492
14562
|
"sendAutomaticallyWhen",
|
|
14493
14563
|
"requiresSearch"
|
|
14494
14564
|
]);
|
|
14565
|
+
var normalizedPersistence = normalizePersistence(persistence, 'chat' in options);
|
|
14495
14566
|
var _chatInstance;
|
|
14496
14567
|
var input = '';
|
|
14497
14568
|
var open = false;
|
|
@@ -14499,12 +14570,19 @@
|
|
|
14499
14570
|
var setInput;
|
|
14500
14571
|
var setOpen;
|
|
14501
14572
|
var focusInput;
|
|
14573
|
+
var inputFocusRequested = false;
|
|
14502
14574
|
var setFeedbackState;
|
|
14503
14575
|
var hasValidatedEntryPoints = false;
|
|
14504
14576
|
var agentId = 'agentId' in options ? options.agentId : undefined;
|
|
14505
14577
|
var feedbackState = {};
|
|
14506
14578
|
var _sendChatMessageFeedback;
|
|
14507
14579
|
var feedbackAbortController;
|
|
14580
|
+
var chatSubscriptionUnsubscribers = [];
|
|
14581
|
+
var unsubscribeChatCallbacks = function unsubscribeChatCallbacks() {
|
|
14582
|
+
chatSubscriptionUnsubscribers.splice(0).forEach(function(unsubscribe) {
|
|
14583
|
+
return unsubscribe();
|
|
14584
|
+
});
|
|
14585
|
+
};
|
|
14508
14586
|
// Extract suggestions from the last assistant message's data-suggestions part
|
|
14509
14587
|
var getSuggestionsFromMessages = function getSuggestionsFromMessages(messages) {
|
|
14510
14588
|
// Find the last assistant message (iterate from end)
|
|
@@ -14653,6 +14731,7 @@
|
|
|
14653
14731
|
throw new Error(withUsage$q('You need to provide either an `agentId` or a `transport`.'));
|
|
14654
14732
|
}
|
|
14655
14733
|
return new Chat(_object_spread_props(_object_spread({}, options), {
|
|
14734
|
+
persistence: normalizedPersistence.messages,
|
|
14656
14735
|
sendAutomaticallyWhen: sendAutomaticallyWhen,
|
|
14657
14736
|
transport: transport,
|
|
14658
14737
|
shouldRepairToolInput: function shouldRepairToolInput(toolName) {
|
|
@@ -14701,22 +14780,30 @@
|
|
|
14701
14780
|
var _this = this;
|
|
14702
14781
|
var instantSearchInstance = initOptions.instantSearchInstance;
|
|
14703
14782
|
validateEntryPoints(instantSearchInstance);
|
|
14783
|
+
open = normalizedPersistence.open ? readPersistedOpen(type) : false;
|
|
14704
14784
|
_chatInstance = makeChatInstance(instantSearchInstance);
|
|
14705
14785
|
var render = function render() {
|
|
14706
14786
|
renderFn(_object_spread_props(_object_spread({}, _this.getWidgetRenderState(initOptions)), {
|
|
14707
14787
|
instantSearchInstance: initOptions.instantSearchInstance
|
|
14708
14788
|
}), false);
|
|
14709
14789
|
};
|
|
14710
|
-
|
|
14711
|
-
open =
|
|
14790
|
+
var updateOpen = function updateOpen(nextOpen, requestFocus) {
|
|
14791
|
+
open = nextOpen;
|
|
14792
|
+
inputFocusRequested = nextOpen && (inputFocusRequested || requestFocus);
|
|
14793
|
+
if (normalizedPersistence.open) {
|
|
14794
|
+
writePersistedOpen(type, open);
|
|
14795
|
+
}
|
|
14712
14796
|
render();
|
|
14713
14797
|
// `open` is read by sibling widgets (e.g. `chatTrigger`) via the
|
|
14714
14798
|
// shared `renderState`. Schedule a full re-render so they pick up
|
|
14715
14799
|
// the new value instead of staying frozen on their initial state.
|
|
14716
14800
|
initOptions.instantSearchInstance.scheduleRender();
|
|
14717
14801
|
};
|
|
14802
|
+
setOpen = function setOpen(nextOpen) {
|
|
14803
|
+
updateOpen(nextOpen, nextOpen && !open);
|
|
14804
|
+
};
|
|
14718
14805
|
focusInput = function focusInput() {
|
|
14719
|
-
|
|
14806
|
+
updateOpen(true, true);
|
|
14720
14807
|
};
|
|
14721
14808
|
setInput = function setInput(i) {
|
|
14722
14809
|
input = i;
|
|
@@ -14750,18 +14837,21 @@
|
|
|
14750
14837
|
};
|
|
14751
14838
|
}
|
|
14752
14839
|
var hasExistingMessages = _chatInstance.messages.length > 0;
|
|
14753
|
-
//
|
|
14754
|
-
//
|
|
14755
|
-
// conversation, so it leaves the instance empty.
|
|
14840
|
+
// Unsubscribe previous callbacks before setting initialMessages, then
|
|
14841
|
+
// register the current callbacks after to avoid re-renders during init.
|
|
14842
|
+
// A server render owns no conversation, so it leaves the instance empty.
|
|
14756
14843
|
safelyRunOnBrowser(function() {
|
|
14844
|
+
unsubscribeChatCallbacks();
|
|
14757
14845
|
if ((initialMessages === null || initialMessages === void 0 ? void 0 : initialMessages.length) && !resume && !hasExistingMessages) {
|
|
14758
14846
|
_chatInstance.messages = initialMessages;
|
|
14759
14847
|
}
|
|
14760
14848
|
});
|
|
14761
14849
|
safelyRunOnBrowser(function() {
|
|
14762
|
-
|
|
14763
|
-
|
|
14764
|
-
|
|
14850
|
+
chatSubscriptionUnsubscribers = [
|
|
14851
|
+
_chatInstance['~registerErrorCallback'](render),
|
|
14852
|
+
_chatInstance['~registerMessagesCallback'](render),
|
|
14853
|
+
_chatInstance['~registerStatusCallback'](render)
|
|
14854
|
+
];
|
|
14765
14855
|
});
|
|
14766
14856
|
// Resuming and sending reach the network, which a server render must
|
|
14767
14857
|
// not: the HTML pass repeats what `getServerState` already rendered, so
|
|
@@ -14780,6 +14870,9 @@
|
|
|
14780
14870
|
renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(initOptions)), {
|
|
14781
14871
|
instantSearchInstance: instantSearchInstance
|
|
14782
14872
|
}), true);
|
|
14873
|
+
if (open) {
|
|
14874
|
+
instantSearchInstance.scheduleRender();
|
|
14875
|
+
}
|
|
14783
14876
|
},
|
|
14784
14877
|
render: function render(renderOptions) {
|
|
14785
14878
|
validateEntryPoints(renderOptions.instantSearchInstance);
|
|
@@ -14846,7 +14939,7 @@
|
|
|
14846
14939
|
})
|
|
14847
14940
|
].concat(_to_consumable_array(rest)));
|
|
14848
14941
|
};
|
|
14849
|
-
|
|
14942
|
+
var renderState = {
|
|
14850
14943
|
indexUiState: instantSearchInstance.getUiState()[parent.getIndexId()],
|
|
14851
14944
|
input: input,
|
|
14852
14945
|
open: open,
|
|
@@ -14855,6 +14948,12 @@
|
|
|
14855
14948
|
setInput: setInput,
|
|
14856
14949
|
setOpen: setOpen,
|
|
14857
14950
|
focusInput: focusInput,
|
|
14951
|
+
'~consumeInputFocus': function() {
|
|
14952
|
+
var shouldFocus = inputFocusRequested;
|
|
14953
|
+
inputFocusRequested = false;
|
|
14954
|
+
return shouldFocus;
|
|
14955
|
+
},
|
|
14956
|
+
'~isOpenStatePersistenceEnabled': normalizedPersistence.open,
|
|
14858
14957
|
setMessages: setMessages,
|
|
14859
14958
|
suggestions: getSuggestionsFromMessages(_chatInstance.messages),
|
|
14860
14959
|
clearMessages: clearMessages,
|
|
@@ -14874,9 +14973,11 @@
|
|
|
14874
14973
|
status: _chatInstance.status,
|
|
14875
14974
|
stop: _chatInstance.stop
|
|
14876
14975
|
};
|
|
14976
|
+
return renderState;
|
|
14877
14977
|
},
|
|
14878
14978
|
dispose: function dispose() {
|
|
14879
14979
|
feedbackAbortController === null || feedbackAbortController === void 0 ? void 0 : feedbackAbortController.abort();
|
|
14980
|
+
unsubscribeChatCallbacks();
|
|
14880
14981
|
unmountFn();
|
|
14881
14982
|
},
|
|
14882
14983
|
shouldRender: function shouldRender() {
|
|
@@ -14907,17 +15008,15 @@
|
|
|
14907
15008
|
// `InstantSearchSSRProvider` flow: the server context covers state collection,
|
|
14908
15009
|
// and the SSR context covers HTML rendering and hydration.
|
|
14909
15010
|
//
|
|
14910
|
-
// This can cost an extra render: a mount inside a provider that carries server
|
|
14911
|
-
// state is withheld once even when there is no server markup to reproduce. A
|
|
14912
|
-
// mount outside both contexts is never withheld.
|
|
14913
|
-
//
|
|
14914
15011
|
// The shim's React 16 and 17 fallback ignores the server snapshot, so using it
|
|
14915
|
-
// here would not
|
|
15012
|
+
// here would not distinguish initial hydration from later provider children.
|
|
14916
15013
|
function useLegacyIsHydrated() {
|
|
15014
|
+
var _ssrContext_hydrationCompleteRef;
|
|
14917
15015
|
var serverContext = useInstantSearchServerContext();
|
|
14918
15016
|
var ssrContext = useInstantSearchSSRContext();
|
|
14919
15017
|
var isServerRendered = serverContext !== null || ssrContext !== null;
|
|
14920
|
-
var
|
|
15018
|
+
var isProviderHydrated = (ssrContext === null || ssrContext === void 0 ? void 0 : (_ssrContext_hydrationCompleteRef = ssrContext.hydrationCompleteRef) === null || _ssrContext_hydrationCompleteRef === void 0 ? void 0 : _ssrContext_hydrationCompleteRef.current) === true;
|
|
15019
|
+
var _React_useState = _sliced_to_array(React__namespace.useState(!isServerRendered || isProviderHydrated), 2), isHydrated = _React_useState[0], setIsHydrated = _React_useState[1];
|
|
14921
15020
|
React__namespace.useEffect(function() {
|
|
14922
15021
|
setIsHydrated(true);
|
|
14923
15022
|
}, []);
|
|
@@ -14952,6 +15051,7 @@
|
|
|
14952
15051
|
error: undefined,
|
|
14953
15052
|
id: 'id' in props && props.id || '',
|
|
14954
15053
|
messages: [],
|
|
15054
|
+
open: false,
|
|
14955
15055
|
status: 'ready',
|
|
14956
15056
|
suggestions: undefined
|
|
14957
15057
|
});
|