UNPKG

@memori.ai/memori-react

Version:

[![npm version](https://img.shields.io/github/package-json/v/memori-ai/memori-react)](https://www.npmjs.com/package/@memori.ai/memori-react) ![Tests](https://github.com/memori-ai/memori-react/workflows/CI/badge.svg?branch=main) ![TypeScript Support](https

81 lines 5.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const ChatTextArea_1 = tslib_1.__importDefault(require("../ChatTextArea/ChatTextArea")); const Button_1 = tslib_1.__importDefault(require("../ui/Button")); const react_i18next_1 = require("react-i18next"); const Send_1 = tslib_1.__importDefault(require("../icons/Send")); const MicrophoneButton_1 = tslib_1.__importDefault(require("../MicrophoneButton/MicrophoneButton")); const classnames_1 = tslib_1.__importDefault(require("classnames")); const Microphone_1 = tslib_1.__importDefault(require("../icons/Microphone")); const UploadButton_1 = tslib_1.__importDefault(require("../UploadButton/UploadButton")); const FilePreview_1 = tslib_1.__importDefault(require("../FilePreview/FilePreview")); const ChatInputs = ({ dialogState, userMessage = '', sendOnEnter, onChangeUserMessage, sendMessage, onTextareaFocus, onTextareaBlur, resetTranscript, showMicrophone = false, microphoneMode = 'HOLD_TO_TALK', listening = false, stopAudio, startListening, stopListening, showUpload = false, sessionID, authToken, memoriID, client, }) => { const { t } = (0, react_i18next_1.useTranslation)(); const [documentPreviewFiles, setDocumentPreviewFiles] = (0, react_1.useState)([]); const { dialog } = client || { dialog: { postMediumDeselectedEvent: null }, }; const onSendMessage = (files) => { sendMessage(userMessage, files.map(file => ({ mediumID: file.mediumID || '', mimeType: file.mimeType, content: file.content, title: file.name, properties: { isAttachedFile: true }, type: file.type, url: file.url, }))); setDocumentPreviewFiles([]); stopAudio(); speechSynthesis.speak(new SpeechSynthesisUtterance('')); }; const onTextareaPressEnter = () => { if (sendOnEnter === 'keypress' && (userMessage === null || userMessage === void 0 ? void 0 : userMessage.length) > 0) { stopListening(); sendMessage(userMessage, documentPreviewFiles.map(file => ({ mediumID: file.mediumID || '', mimeType: file.mimeType, content: file.content, title: file.name, properties: { isAttachedFile: true }, type: file.type, url: file.url, }))); setDocumentPreviewFiles([]); onChangeUserMessage(''); resetTranscript(); } }; const removeFile = async (fileId, mediumID) => { console.log('removeFile', fileId); if (dialog.postMediumDeselectedEvent && sessionID && mediumID) { await dialog.postMediumDeselectedEvent(sessionID, mediumID); } setDocumentPreviewFiles((prev) => prev.filter((file) => file.id !== fileId)); }; return ((0, jsx_runtime_1.jsxs)("fieldset", { id: "chat-fieldset", className: "memori-chat-inputs", disabled: (dialogState === null || dialogState === void 0 ? void 0 : dialogState.state) === 'X2a' || (dialogState === null || dialogState === void 0 ? void 0 : dialogState.state) === 'X3', children: [(0, jsx_runtime_1.jsx)(ChatTextArea_1.default, { value: userMessage, onChange: onChangeUserMessage, onPressEnter: onTextareaPressEnter, onFocus: onTextareaFocus, onBlur: onTextareaBlur, disabled: ['R2', 'R3', 'R4', 'R5', 'G3', 'X3'].includes((dialogState === null || dialogState === void 0 ? void 0 : dialogState.state) || '') }), showUpload && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(FilePreview_1.default, { previewFiles: documentPreviewFiles, removeFile: removeFile }), (0, jsx_runtime_1.jsx)(UploadButton_1.default, { authToken: authToken, client: client, sessionID: sessionID, isMediaAccepted: (dialogState === null || dialogState === void 0 ? void 0 : dialogState.acceptsMedia) || false, setDocumentPreviewFiles: setDocumentPreviewFiles, documentPreviewFiles: documentPreviewFiles, memoriID: memoriID })] })), (0, jsx_runtime_1.jsx)(Button_1.default, { shape: "circle", primary: !!(userMessage === null || userMessage === void 0 ? void 0 : userMessage.length), disabled: !userMessage || userMessage.length === 0, className: "memori-chat-inputs--send", onClick: () => { onSendMessage(documentPreviewFiles); }, title: t('send') || 'Send', icon: (0, jsx_runtime_1.jsx)(Send_1.default, {}) }), showMicrophone && microphoneMode === 'HOLD_TO_TALK' && ((0, jsx_runtime_1.jsx)(MicrophoneButton_1.default, { listening: listening, startListening: startListening, stopListening: () => { stopListening(); if (!!(userMessage === null || userMessage === void 0 ? void 0 : userMessage.length)) { sendMessage(userMessage); } }, stopAudio: stopAudio })), showMicrophone && microphoneMode === 'CONTINUOUS' && ((0, jsx_runtime_1.jsx)(Button_1.default, { primary: true, className: (0, classnames_1.default)('memori-chat-inputs--mic', { 'memori-chat-inputs--mic--listening': listening, }), title: listening ? t('write_and_speak.micButtonPopoverListening') || 'Listening' : t('write_and_speak.micButtonPopover') || 'Start listening', onClick: () => { if (listening) { stopListening(); } else { stopAudio(); startListening(); } }, shape: "circle", icon: (0, jsx_runtime_1.jsx)(Microphone_1.default, {}) }))] })); }; exports.default = ChatInputs; //# sourceMappingURL=ChatInputs.js.map