@memori.ai/memori-react
Version:
[](https://www.npmjs.com/package/@memori.ai/memori-react)  ;
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