instantsearch-ui-components
Version:
Common UI components for InstantSearch.
75 lines (72 loc) • 4.2 kB
JavaScript
import { _ as _$1 } from '@swc/helpers/esm/_object_spread.js';
import { _ } from '@swc/helpers/esm/_object_without_properties.js';
import { createButtonComponent } from '../Button.js';
import { ReloadIcon } from './icons.js';
function createChatMessageErrorComponent(param) {
var createElement = param.createElement;
var Button = createButtonComponent({
createElement: createElement
});
return function ChatMessageError(userProps) {
var _ref, _ref1;
var errorMessage = userProps.errorMessage, onReload = userProps.onReload, onNewConversation = userProps.onNewConversation, actions = userProps.actions, userTranslations = userProps.translations, props = _(userProps, [
"errorMessage",
"onReload",
"onNewConversation",
"actions",
"translations"
]);
var defaultErrorMessage = 'Sorry, we are not able to generate a response at the moment. Please contact support.';
var defaultNewConversationText = 'Start a new conversation';
var defaultRetryText = 'Retry';
var errorMessageTranslation = userTranslations === null || userTranslations === void 0 ? void 0 : userTranslations.errorMessage;
var resolvedErrorMessage = typeof errorMessageTranslation === 'function' ? errorMessageTranslation({
errorMessage: errorMessage
}) : errorMessageTranslation !== null && errorMessageTranslation !== void 0 ? errorMessageTranslation : defaultErrorMessage;
var newConversationText = (_ref = userTranslations === null || userTranslations === void 0 ? void 0 : userTranslations.newConversationText) !== null && _ref !== void 0 ? _ref : defaultNewConversationText;
var retryText = (_ref1 = userTranslations === null || userTranslations === void 0 ? void 0 : userTranslations.retryText) !== null && _ref1 !== void 0 ? _ref1 : defaultRetryText;
// Action precedence:
// 1. `actions` (full custom)
// 2. `onNewConversation` (recommended for permanent / guardrail errors)
// 3. `onReload` (legacy retry, suitable for transient failures)
// 4. nothing
var hasCustomActions = Boolean(actions);
var showNewConversation = !hasCustomActions && Boolean(onNewConversation);
var showRetry = !hasCustomActions && !showNewConversation && Boolean(onReload);
var hasActions = hasCustomActions || showNewConversation || showRetry;
return /*#__PURE__*/ createElement("article", _$1({
className: "ais-ChatMessageError ais-ChatMessage ais-ChatMessage--left ais-ChatMessage--subtle"
}, props), /*#__PURE__*/ createElement("div", {
className: "ais-ChatMessage-container"
}, /*#__PURE__*/ createElement("div", {
className: "ais-ChatMessage-content"
}, /*#__PURE__*/ createElement("div", {
className: "ais-ChatMessage-message"
}, resolvedErrorMessage), hasActions && /*#__PURE__*/ createElement("div", {
className: "ais-ChatMessage-actions"
}, hasCustomActions ? actions.map(function(action, index) {
return /*#__PURE__*/ createElement(Button, _$1({
key: index,
variant: "ghost",
className: "ais-ChatMessage-action"
}, action), action.children);
}) : showNewConversation ? /*#__PURE__*/ createElement(Button, {
variant: "primary",
size: "md",
className: "ais-ChatMessage-errorAction",
onClick: function onClick() {
return onNewConversation === null || onNewConversation === void 0 ? void 0 : onNewConversation();
}
}, newConversationText) : /*#__PURE__*/ createElement(Button, {
variant: "primary",
size: "md",
className: "ais-ChatMessage-errorAction",
onClick: function onClick() {
return onReload === null || onReload === void 0 ? void 0 : onReload();
}
}, /*#__PURE__*/ createElement(ReloadIcon, {
createElement: createElement
}), retryText)))));
};
}
export { createChatMessageErrorComponent };