InputArea.jsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { connect } from "react-redux"
  2. import { actionSendMessage} from "../../actions/actionsMessages"
  3. import { InputAreaWrapper, TextArea} from "./InputArea.style";
  4. import MessageDropZone from "../DropZone/MessageDropZone/MessageDropZone";
  5. import SendRoundedIcon from '@mui/icons-material/SendRounded';
  6. import InputAreaMessageEditor from "./InputAreaMessageEditor";
  7. import MessageReplyForwarded from "../MessageDraft/MessageReplyForwarded";
  8. import RecordViewAudio, { MemoRecordViewAudio } from "../Recorder/RecorderAudio";
  9. import { MemoRecordViewVideo } from "../Recorder/RecorderVideo";
  10. import { actionAddDraftMessage, actionSetInputMessageValue } from "../../actions/actionsForChats";
  11. const InputArea = ({sendMessage, deleteDraftMessage, chatId, chats, setInputValue, modal: {content, isOpen}}) => {
  12. const message = chats[chatId]?.draft?.mainInputValue?.message;
  13. const inputValue = chats[chatId]?.draft?.mainInputValue?.value || '';
  14. const replyMessageId = message && message.hasOwnProperty('reply') ? message.reply?._id : null;
  15. const forwardedMessageId = message && message.hasOwnProperty('forwarded') ? message.forwarded?._id : null;
  16. return (
  17. <div style={{display: 'flex', borderTop: '1px solid #e9e9e9', alignItems: 'center'}}>
  18. {(chats[chatId]?.draft?.messageEditor && !chats[chatId]?.draft?.messageEditor?.message?.media) ?
  19. <InputAreaMessageEditor chatId={chatId}/>
  20. :
  21. <InputAreaWrapper>
  22. <MessageReplyForwarded chat={chats[chatId]}></MessageReplyForwarded>
  23. <div style={{display: 'flex', alignItems: 'center', padding: '10px 0'}}>
  24. <MessageDropZone chatId={chatId}/>
  25. <TextArea
  26. value={content === 'messageMediaModal' && isOpen ? '' : inputValue}
  27. onChange={e=>{setInputValue(chatId, e.target.value, 'mainInputValue')}}
  28. maxRows={8}
  29. disabled={forwardedMessageId ? true : false}
  30. placeholder="Write a message..."
  31. />
  32. {inputValue || forwardedMessageId ?
  33. <SendRoundedIcon
  34. style={{margin: '0 16px', cursor: "pointer"}}
  35. color="primary"
  36. onClick={
  37. async() => {
  38. let val = await sendMessage(null, chatId, forwardedMessageId ? 'forwarded message' : inputValue?.replace(/^\s+|\s+$/g, ''), null, replyMessageId, forwardedMessageId);
  39. (val?.replyTo?._id || val?.forwarded?._id) && deleteDraftMessage(chatId, null)
  40. val && !val?.forwarded?._id && setInputValue(chatId, "", 'mainInputValue') && setInputValue(chatId, "", 'draftValue')
  41. }
  42. }
  43. /> : <div></div>}
  44. </div>
  45. </InputAreaWrapper>}
  46. <MemoRecordViewAudio sendMessage={sendMessage} chatId={chatId}/>
  47. </div>
  48. )
  49. }
  50. export default connect(state => ({chats: state.chats, modal: state?.modal}), {
  51. sendMessage: actionSendMessage,
  52. setInputValue: actionSetInputMessageValue,
  53. deleteDraftMessage: actionAddDraftMessage
  54. })(InputArea);