{contact.unreadMessages > 0 && (
diff --git a/frontend/src/pages/Chat-Material/components/MessagesInput/MessagesInput.js b/frontend/src/pages/Chat-Material/components/MessagesInput/MessagesInput.js
index 168a853..679292f 100644
--- a/frontend/src/pages/Chat-Material/components/MessagesInput/MessagesInput.js
+++ b/frontend/src/pages/Chat-Material/components/MessagesInput/MessagesInput.js
@@ -1,21 +1,23 @@
-import React from "react";
+import React, { useState, useEffect } from "react";
+import api from "../../../../util/api";
+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 MoodIcon from "@material-ui/icons/Mood";
import SendIcon from "@material-ui/icons/Send";
+import CancelIcon from "@material-ui/icons/Cancel";
const useStyles = makeStyles(theme => ({
- root: {
- flexGrow: 1,
- },
-
newMessageBox: {
background: "#eee",
display: "flex",
+ position: "relative",
padding: "10px 13px",
borderTopLeftRadius: 0,
borderTopRightRadius: 0,
@@ -35,33 +37,201 @@ const useStyles = makeStyles(theme => ({
width: "80%",
},
- sendMessageIcon: {
- opacity: "80%",
+ sendMessageIcons: {
+ color: "grey",
margin: 4,
- alignSelf: "middle",
cursor: "pointer",
"&:hover": {
opacity: "70%",
},
},
+
+ viewMediaInputWrapper: {
+ display: "flex",
+ padding: "10px 13px",
+ position: "relative",
+ borderTopLeftRadius: 0,
+ borderTopRightRadius: 0,
+ borderBottomLeftRadius: 0,
+ justifyContent: "space-between",
+ backgroundColor: "#eee",
+ },
+
+ emojiBox: {
+ position: "absolute",
+ bottom: 50,
+ borderTop: "1px solid #e8e8e8",
+ },
+
+ circleLoading: {
+ color: green[500],
+ position: "absolute",
+ top: 0,
+ left: "50%",
+ marginTop: 6,
+ marginBottom: 6,
+ marginLeft: -12,
+ },
}));
-const MessagesInput = () => {
+const MessagesInput = ({ selectedContact }) => {
const classes = useStyles();
+ const contactId = selectedContact.id;
+ const userId = localStorage.getItem("userId");
+ const username = localStorage.getItem("username");
+ const token = localStorage.getItem("token");
- return (
-
-
-
-
-
{
+ return () => {
+ setInputMessage("");
+ setShowEmoji(false);
+ setMedia({});
+ };
+ }, [selectedContact]);
+
+ 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, {
+ headers: { Authorization: "Bearer " + token },
+ });
+ } 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, {
+ headers: { Authorization: "Bearer " + token },
+ });
+ } catch (err) {
+ alert(err);
+ }
+ setInputMessage("");
+ setShowEmoji(false);
+ };
+
+ if (media.preview)
+ return (
+
+ setMedia(mediaInitialState)}
/>
-
-
-
- );
+
+ {media.name}
+ {/*
*/}
+
+ {loading ? (
+
+
+
+ ) : null}
+
+
+ );
+ else {
+ return (
+
+ setShowEmoji(prevState => !prevState)}
+ />
+ {showEmoji ? (
+
+ ) : null}
+
+
+
+ {
+ if (e.key === "Enter") {
+ handleSendMessage();
+ }
+ }}
+ />
+
+
+
+ );
+ }
};
export default MessagesInput;
diff --git a/frontend/src/pages/Chat-Material/components/MessagesList/MessagesList.js b/frontend/src/pages/Chat-Material/components/MessagesList/MessagesList.js
index f7d3edb..9d5119d 100644
--- a/frontend/src/pages/Chat-Material/components/MessagesList/MessagesList.js
+++ b/frontend/src/pages/Chat-Material/components/MessagesList/MessagesList.js
@@ -129,6 +129,12 @@ const useStyles = makeStyles(theme => ({
boxShadow: "0 2px 2px #808888",
},
+ textContentItem: {
+ alignSelf: "middle",
+ overflowWrap: "break-word",
+ padding: "3px 80px 6px 6px",
+ },
+
messageMedia: {
objectFit: "cover",
width: 250,
@@ -139,11 +145,6 @@ const useStyles = makeStyles(theme => ({
borderBottomRightRadius: 8,
},
- textContentItem: {
- overflowWrap: "break-word",
- padding: "0px 60px 10px 0px",
- },
-
timestamp: {
fontSize: 11,
position: "absolute",
@@ -168,6 +169,15 @@ const useStyles = makeStyles(theme => ({
alignSelf: "center",
marginLeft: "0px",
},
+
+ ackIcons: {
+ fontSize: 18,
+ },
+
+ ackDoneAllIcon: {
+ color: green[500],
+ fontSize: 18,
+ },
}));
const MessagesList = ({ selectedContact }) => {
@@ -264,8 +274,9 @@ const MessagesList = ({ selectedContact }) => {
setMessagesList(prevState => {
let aux = [...prevState];
let messageIndex = aux.findIndex(message => message.id === id);
- aux[messageIndex].ack = message.ack;
-
+ if (messageIndex) {
+ aux[messageIndex].ack = message.ack;
+ }
return aux;
});
};
@@ -307,16 +318,18 @@ const MessagesList = ({ selectedContact }) => {
const renderMessageAck = message => {
if (message.ack === 0) {
- return ;
+ return ;
}
if (message.ack === 1) {
- return ;
+ return ;
}
if (message.ack === 2) {
- return ;
+ return ;
}
if (message.ack === 3) {
- return ;
+ return (
+
+ );
}
};
@@ -372,10 +385,9 @@ const MessagesList = ({ selectedContact }) => {
const renderMessages = () => {
if (messagesList.length > 0) {
- let viewMessagesList = [];
- messagesList.forEach((message, index) => {
+ const viewMessagesList = messagesList.map((message, index) => {
if (message.userId === 0) {
- viewMessagesList.push(
+ return [
renderDailyTimestamps(message, index),
{message.mediaUrl && checkMessaageMedia(message)}
@@ -387,10 +399,10 @@ const MessagesList = ({ selectedContact }) => {
.format("HH:mm")}
-
- );
+ ,
+ ];
} else {
- viewMessagesList.push(
+ return [
renderDailyTimestamps(message, index),
{message.mediaUrl && checkMessaageMedia(message)}
@@ -403,8 +415,8 @@ const MessagesList = ({ selectedContact }) => {
{renderMessageAck(message)}
-
- );
+ ,
+ ];
}
});
return viewMessagesList;