import React, { useState, useEffect } from "react"; import { useParams } from "react-router-dom"; import api from "../../../../util/api"; import "emoji-mart/css/emoji-mart.css"; import { Picker } from "emoji-mart"; import { makeStyles } from "@material-ui/core/styles"; import Paper from "@material-ui/core/Paper"; import InputBase from "@material-ui/core/InputBase"; import CircularProgress from "@material-ui/core/CircularProgress"; import { green } from "@material-ui/core/colors"; import AttachFileIcon from "@material-ui/icons/AttachFile"; import IconButton from "@material-ui/core/IconButton"; import MoodIcon from "@material-ui/icons/Mood"; import SendIcon from "@material-ui/icons/Send"; import CancelIcon from "@material-ui/icons/Cancel"; const useStyles = makeStyles(theme => ({ newMessageBox: { background: "#eee", display: "flex", padding: "10px", alignItems: "center", }, messageInputWrapper: { padding: 6, background: "#fff", display: "flex", borderRadius: 40, flex: 1, }, messageInput: { paddingLeft: 10, flex: 1, border: "none", }, sendMessageIcons: { color: "grey", }, uploadInput: { display: "none", }, viewMediaInputWrapper: { display: "flex", padding: "10px 13px", position: "relative", justifyContent: "space-between", alignItems: "center", backgroundColor: "#eee", }, emojiBox: { position: "absolute", bottom: 63, width: 40, borderTop: "1px solid #e8e8e8", }, circleLoading: { color: green[500], opacity: "70%", position: "absolute", top: "20%", left: "50%", // marginTop: 8, // marginBottom: 6, marginLeft: -12, }, })); const MessagesInput = ({ searchParam }) => { const classes = useStyles(); const { contactId } = useParams(); const userId = localStorage.getItem("userId"); const username = localStorage.getItem("username"); const mediaInitialState = { preview: "", raw: "", name: "" }; const [media, setMedia] = useState(mediaInitialState); const [inputMessage, setInputMessage] = useState(""); const [showEmoji, setShowEmoji] = useState(false); const [loading, setLoading] = useState(false); useEffect(() => { return () => { setInputMessage(""); setShowEmoji(false); setMedia({}); }; }, [contactId]); const handleChangeInput = e => { setInputMessage(e.target.value); }; const handleAddEmoji = e => { let emoji = e.native; setInputMessage(prevState => prevState + emoji); }; const handleChangeMedia = e => { if (e.target.files.length) { setMedia({ preview: URL.createObjectURL(e.target.files[0]), raw: e.target.files[0], name: e.target.files[0].name, }); } }; const handleInputPaste = e => { if (e.clipboardData.files[0]) { setMedia({ preview: URL.createObjectURL(e.clipboardData.files[0]), raw: e.clipboardData.files[0], name: e.clipboardData.files[0].name, }); } }; const handleUploadMedia = async e => { setLoading(true); e.preventDefault(); const formData = new FormData(); formData.append("media", media.raw); formData.append("userId", userId); formData.append("messageBody", media.name); try { await api.post(`/messages/${contactId}`, formData); } catch (err) { console.log(err); alert(err); } setLoading(false); setMedia(mediaInitialState); }; const handleSendMessage = async () => { if (inputMessage.trim() === "") return; const message = { read: 1, userId: userId, mediaUrl: "", messageBody: `${username}: ${inputMessage.trim()}`, }; try { await api.post(`/messages/${contactId}`, message); } catch (err) { alert(err); } setInputMessage(""); setShowEmoji(false); }; if (media.preview) return ( setMedia(mediaInitialState)} > {loading ? (
) : ( {media.name} {/* */} )}
); else { return ( setShowEmoji(prevState => !prevState)} > {showEmoji ? (
) : null}
input && !searchParam && input.focus()} className={classes.messageInput} placeholder="Escreva uma mensagem" value={inputMessage} onChange={handleChangeInput} onPaste={handleInputPaste} onKeyPress={e => { if (e.key === "Enter") { handleSendMessage(); } }} />
); } }; export default MessagesInput;