MessageEditorMediaModal.jsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { DropMediaList, MediaBox, MediaModalHeader } from "../MessageMediaModal/MessageMediaModal.style"
  2. import { MessageEditorMediaFooter, MessageEditorMediaModalWrapper } from "./MessageEditorMediaModal.style"
  3. import SimpleBar from 'simplebar-react';
  4. import 'simplebar/dist/simplebar.min.css';
  5. import { MemoizedDropMediaItem } from "../DropMediaItem/DropMediaItem";
  6. import { Button, TextField } from "@mui/material";
  7. import { actionSendMessage } from "../../actions/actionsMessages";
  8. import { useEffect } from "react";
  9. import { connect } from "react-redux";
  10. import { actionDeleteDropMedia, actionSetInputMessageValue, actionSetMessageEditor } from "../../actions/actionsForChats";
  11. const MessageEditorMediaModal = ({chats, handleClose, deleteMessageEditor, open, chatId, sendMessage, setInputValue, deleteMedia}) => {
  12. const media = chats[chatId].draft?.media || [];
  13. const inputValue = chats[chatId].draft?.messageEditor?.value || '';
  14. const messageId = chats[chatId].draft?.messageEditor?.message?._id;
  15. useEffect(() => {
  16. open || deleteMedia(chatId);
  17. open || deleteMessageEditor(chatId, null);
  18. }, [open])
  19. return (
  20. <MessageEditorMediaModalWrapper>
  21. <MediaModalHeader>Edit message</MediaModalHeader>
  22. <MediaBox>
  23. <SimpleBar style={{ maxHeight: '400px'}}>
  24. <DropMediaList>
  25. {media.map((item) => <MemoizedDropMediaItem key={item.uploadDate} chatId={chatId} mediaItem={item}/>)}
  26. </DropMediaList>
  27. </SimpleBar>
  28. </MediaBox>
  29. <TextField
  30. maxRows={7}
  31. multiline
  32. sx={{width: "100%", mt: "30px"}}
  33. variant="standard"
  34. label="Caption"
  35. onChange = {(e) => setInputValue(chatId, e.target.value, 'messageEditor')}
  36. value={inputValue}
  37. />
  38. <MessageEditorMediaFooter>
  39. <Button variant="text" onClick={handleClose}>Cancel</Button>
  40. <Button
  41. variant="text"
  42. onClick={
  43. async () => {
  44. let val = await sendMessage(messageId, chatId, inputValue.replace(/^\s+|\s+$/g, ''), media, null, null);
  45. val && setInputValue(chatId, "", 'messageEditor'); handleClose();
  46. }
  47. }
  48. >Send</Button>
  49. </MessageEditorMediaFooter>
  50. </MessageEditorMediaModalWrapper>
  51. )
  52. }
  53. export default connect(state => ({
  54. chats: state.chats
  55. }),
  56. {
  57. deleteMedia: actionDeleteDropMedia,
  58. deleteMessageEditor: actionSetMessageEditor,
  59. sendMessage: actionSendMessage,
  60. setInputValue: actionSetInputMessageValue
  61. })(MessageEditorMediaModal);