Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Conversation = (props) => {
  2.   // TODO: Split this code into multiple functions
  3.   let lastAuthor;
  4.   let lastMessageCreationTime;
  5.   const dispatch = useDispatch();
  6.   const [message, setMessage] = useState("");
  7.   const messagesEnd = useRef();
  8.   useEffect(() => {
  9.     messagesEnd.current.scrollIntoView();
  10.   }, []);
  11.  
  12.   const messagesList = props.messages.map((message) => {
  13.     if (typeof lastMessageCreationTime === "undefined") {
  14.       lastMessageCreationTime = message.createdAt;
  15.     }
  16.  
  17.     let formattedMessage = (
  18.       <Message
  19.         author={{ name: message.author.name, src: message.author.src }}
  20.         message={message.content}
  21.         sentAt={message.createdAt}
  22.         isFirstFromAuthor={isFirstFromAuthor(lastAuthor, message.author.name)}
  23.         self={message.self}
  24.       />
  25.     );
  26.     lastMessageCreationTime = message.createdAt;
  27.     lastAuthor = message.author.name;
  28.     return formattedMessage;
  29.   });
  30.  
  31.   const handleKeyPress = async (event) => {
  32.     if (event.key === "Enter" && event.shiftKey) {
  33.       console.log("Shift + enter pressed!");
  34.       return null;
  35.     } else if (event.key === "Enter") {
  36.       event.preventDefault();
  37.       setMessage(message.trim());
  38.       if (message !== "") {
  39.         setMessage("");
  40.         event.target.value = "";
  41.         dispatch(createMessage(message));
  42.       }
  43.     }
  44.   };
  45.   return (
  46.     <div className="conversation">
  47.       <div className="messages">
  48.         {messagesList}
  49.         <div ref={messagesEnd}></div>
  50.       </div>
  51.       <div className="conversation-input">
  52.         <TextareaAutosize
  53.           placeholder="Écrivez un message..."
  54.           onChange={(e) => setMessage(e.target.value)}
  55.           onKeyPress={handleKeyPress}
  56.         />
  57.       </div>
  58.     </div>
  59.   );
  60. };
  61.  
  62. const isFirstFromAuthor = (lastAuthor, currentAuthorName) => {
  63.   if (!lastAuthor) {
  64.     return true;
  65.   }
  66.   if (currentAuthorName !== lastAuthor) {
  67.     return true;
  68.   }
  69.   return false;
  70. };
  71.  
  72. export default Conversation;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement