import React, { useState } from 'react'; import SubmitButton from './SubmitButton'; import TextareaAutosize from 'react-textarea-autosize'; import handleSubmit from '~/utils/handleSubmit'; import { useSelector, useDispatch } from 'react-redux'; import { setConversation } from '~/store/convoSlice'; import { setMessages } from '~/store/messageSlice'; import { setSubmitState } from '~/store/submitSlice'; export default function TextChat({ messages, reloadConvos }) { const [text, setText] = useState(''); const dispatch = useDispatch(); const convo = useSelector((state) => state.convo); const { isSubmitting } = useSelector((state) => state.submit); const submitMessage = () => { if (!!isSubmitting || text.trim() === '') { return; } dispatch(setSubmitState(true)); const payload = text.trim(); const currentMsg = { sender: 'user', text: payload, current: true }; const initialResponse = { sender: 'GPT', text: '' }; dispatch(setMessages([...messages, currentMsg, initialResponse])); setText(''); const messageHandler = (data) => { dispatch(setMessages([...messages, currentMsg, { sender: 'GPT', text: data }])); }; const convoHandler = (data) => { if (convo.conversationId === null && convo.parentMessageId === null) { const { conversationId, parentMessageId } = data; dispatch(setConversation({ conversationId, parentMessageId: data.id })); } reloadConvos(); dispatch(setSubmitState(false)); }; const errorHandler = (data) => { console.log('Error:', data); const errorResponse = { ...initialResponse, text: 'An error occurred. Please try again in a few moments.', error: true }; dispatch(setSubmitState(false)); dispatch(setMessages([...messages, currentMsg, errorResponse])); return; }; console.log('User Input:', payload); handleSubmit({ text: payload, messageHandler, convo, convoHandler, errorHandler }); }; const handleKeyDown = (e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); } }; const handleKeyUp = (e) => { if (e.key === 'Enter' && e.shiftKey) { console.log('Enter + Shift'); } if (e.key === 'Enter' && !e.shiftKey) { if (!!isSubmitting) { return; } submitMessage(); } }; const changeHandler = (e) => { const { value } = e.target; if (isSubmitting && (value === '' || value === '\n')) { return; } setText(value); }; return (