UNPKG

instantsearch-ui-components

Version:

Common UI components for InstantSearch.

75 lines (72 loc) 4.2 kB
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 };