react-instantsearch
Version:
⚡ Lightning-fast search for React, by Algolia
215 lines (213 loc) • 10.8 kB
JavaScript
'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 Chat () {
return Chat;
},
get MemorizeToolType () {
return _chat.MemorizeToolType;
},
get MemorySearchToolType () {
return _chat.MemorySearchToolType;
},
get PonderToolType () {
return _chat.PonderToolType;
},
get RecommendToolType () {
return _chat.RecommendToolType;
},
get SearchIndexToolType () {
return _chat.SearchIndexToolType;
},
get createDefaultTools () {
return createDefaultTools;
}
});
var _define_property = require("@swc/helpers/_/_define_property");
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 _instantsearchuicomponents = require("instantsearch-ui-components");
var _chat = require("instantsearch.js/cjs/lib/chat");
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
var _reactinstantsearchcore = require("react-instantsearch-core");
var _useStickToBottom = require("../lib/useStickToBottom");
var _SearchIndexTool = require("./chat/tools/SearchIndexTool");
var ChatUiComponent = (0, _instantsearchuicomponents.createChatComponent)({
createElement: _react.createElement,
Fragment: _react.Fragment
});
function createDefaultTools(itemComponent, getSearchPageURL) {
var _obj;
return _obj = {}, _define_property._(_obj, _chat.SearchIndexToolType, (0, _SearchIndexTool.createCarouselTool)(true, itemComponent, getSearchPageURL)), _define_property._(_obj, _chat.RecommendToolType, (0, _SearchIndexTool.createCarouselTool)(false, itemComponent, getSearchPageURL)), _define_property._(_obj, _chat.MemorizeToolType, {}), _define_property._(_obj, _chat.MemorySearchToolType, {}), _define_property._(_obj, _chat.PonderToolType, {}), _obj;
}
function Chat(_0) {
var userTools = _0.tools, toggleButtonProps = _0.toggleButtonProps, headerProps = _0.headerProps, messagesProps = _0.messagesProps, promptProps = _0.promptProps, itemComponent = _0.itemComponent, toggleButtonComponent = _0.toggleButtonComponent, toggleButtonIconComponent = _0.toggleButtonIconComponent, headerComponent = _0.headerComponent, headerTitleIconComponent = _0.headerTitleIconComponent, headerCloseIconComponent = _0.headerCloseIconComponent, headerMinimizeIconComponent = _0.headerMinimizeIconComponent, headerMaximizeIconComponent = _0.headerMaximizeIconComponent, messagesLoaderComponent = _0.messagesLoaderComponent, messagesErrorComponent = _0.messagesErrorComponent, promptComponent = _0.promptComponent, promptHeaderComponent = _0.promptHeaderComponent, promptFooterComponent = _0.promptFooterComponent, assistantMessageLeadingComponent = _0.assistantMessageLeadingComponent, assistantMessageFooterComponent = _0.assistantMessageFooterComponent, userMessageLeadingComponent = _0.userMessageLeadingComponent, userMessageFooterComponent = _0.userMessageFooterComponent, actionsComponent = _0.actionsComponent, suggestionsComponent = _0.suggestionsComponent, classNames = _0.classNames, _0_translations = _0.translations, translations = _0_translations === void 0 ? {} : _0_translations, title = _0.title, getSearchPageURL = _0.getSearchPageURL, props = _object_without_properties._(_0, [
"tools",
"toggleButtonProps",
"headerProps",
"messagesProps",
"promptProps",
"itemComponent",
"toggleButtonComponent",
"toggleButtonIconComponent",
"headerComponent",
"headerTitleIconComponent",
"headerCloseIconComponent",
"headerMinimizeIconComponent",
"headerMaximizeIconComponent",
"messagesLoaderComponent",
"messagesErrorComponent",
"promptComponent",
"promptHeaderComponent",
"promptFooterComponent",
"assistantMessageLeadingComponent",
"assistantMessageFooterComponent",
"userMessageLeadingComponent",
"userMessageFooterComponent",
"actionsComponent",
"suggestionsComponent",
"classNames",
"translations",
"title",
"getSearchPageURL"
]);
var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
var _useInstantSearch = (0, _reactinstantsearchcore.useInstantSearch)(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
var _useState = _sliced_to_array._((0, _react.useState)(false), 2), maximized = _useState[0], setMaximized = _useState[1];
var promptRef = (0, _react.useRef)(null);
var _useStickToBottom1 = (0, _useStickToBottom.useStickToBottom)({
initial: 'smooth',
resize: 'smooth'
}), scrollRef = _useStickToBottom1.scrollRef, contentRef = _useStickToBottom1.contentRef, scrollToBottom = _useStickToBottom1.scrollToBottom, isAtBottom = _useStickToBottom1.isAtBottom;
var tools = (0, _react.useMemo)(function() {
var defaults = createDefaultTools(itemComponent, getSearchPageURL);
return _object_spread._({}, defaults, userTools);
}, [
getSearchPageURL,
itemComponent,
userTools
]);
var chatState = (0, _reactinstantsearchcore.useChat)(_object_spread_props._(_object_spread._({}, props), {
tools: tools
}));
var messages = chatState.messages, sendMessage = chatState.sendMessage, status = chatState.status, regenerate = chatState.regenerate, stop = chatState.stop; chatState.error; var input = chatState.input, setInput = chatState.setInput, open = chatState.open, setOpen = chatState.setOpen, isClearing = chatState.isClearing, clearMessages = chatState.clearMessages, onClearTransitionEnd = chatState.onClearTransitionEnd, toolsFromConnector = chatState.tools, suggestions = chatState.suggestions;
var wasOpenRef = (0, _react.useRef)(false);
(0, _react.useEffect)(function() {
var shouldFocusPrompt = !wasOpenRef.current && open;
if (shouldFocusPrompt) {
window.requestAnimationFrame(function() {
var _promptRef_current;
(_promptRef_current = promptRef.current) === null || _promptRef_current === void 0 ? void 0 : _promptRef_current.focus();
});
}
wasOpenRef.current = open;
}, [
open
]);
return /*#__PURE__*/ _react.default.createElement(ChatUiComponent, {
title: title,
open: open,
maximized: maximized,
headerComponent: headerComponent,
promptComponent: promptComponent,
toggleButtonComponent: toggleButtonComponent,
suggestionsComponent: suggestionsComponent,
toggleButtonProps: _object_spread._({
open: open,
onClick: function onClick() {
return setOpen(!open);
},
toggleIconComponent: toggleButtonIconComponent
}, toggleButtonProps),
headerProps: _object_spread._({
onClose: function onClose() {
return setOpen(false);
},
maximized: maximized,
onToggleMaximize: function onToggleMaximize() {
return setMaximized(!maximized);
},
onClear: clearMessages,
canClear: Boolean(messages === null || messages === void 0 ? void 0 : messages.length) && !isClearing,
titleIconComponent: headerTitleIconComponent,
closeIconComponent: headerCloseIconComponent,
minimizeIconComponent: headerMinimizeIconComponent,
maximizeIconComponent: headerMaximizeIconComponent,
translations: headerTranslations
}, headerProps),
messagesProps: _object_spread._({
status: status,
onReload: function onReload(messageId) {
return regenerate({
messageId: messageId
});
},
onClose: function onClose() {
return setOpen(false);
},
messages: messages,
tools: toolsFromConnector,
indexUiState: indexUiState,
setIndexUiState: setIndexUiState,
isClearing: isClearing,
onClearTransitionEnd: onClearTransitionEnd,
isScrollAtBottom: isAtBottom,
scrollRef: scrollRef,
contentRef: contentRef,
onScrollToBottom: scrollToBottom,
loaderComponent: messagesLoaderComponent,
errorComponent: messagesErrorComponent,
actionsComponent: actionsComponent,
assistantMessageProps: _object_spread._({
leadingComponent: assistantMessageLeadingComponent,
footerComponent: assistantMessageFooterComponent
}, messagesProps === null || messagesProps === void 0 ? void 0 : messagesProps.assistantMessageProps),
userMessageProps: _object_spread._({
leadingComponent: userMessageLeadingComponent,
footerComponent: userMessageFooterComponent
}, messagesProps === null || messagesProps === void 0 ? void 0 : messagesProps.userMessageProps),
translations: messagesTranslations,
messageTranslations: messageTranslations
}, messagesProps),
promptProps: _object_spread._({
promptRef: promptRef,
status: status,
value: input,
translations: promptTranslations,
onInput: function onInput(event) {
setInput(event.currentTarget.value);
},
onSubmit: function onSubmit() {
sendMessage({
text: input
});
setInput('');
},
onStop: function onStop() {
stop();
},
headerComponent: promptHeaderComponent,
footerComponent: promptFooterComponent
}, promptProps),
suggestionsProps: {
suggestions: suggestions,
onSuggestionClick: function onSuggestionClick(suggestion) {
sendMessage({
text: suggestion
});
}
},
classNames: classNames
});
}