message.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import ReactTimeAgo from 'react-time-ago'
  2. import TimeAgo from 'javascript-time-ago'
  3. import ru from 'javascript-time-ago/locale/ru.json'
  4. TimeAgo.addLocale(ru)
  5. let handler = (e) => {
  6. console.log(e)
  7. e.preventDefault()
  8. }
  9. export const Message = ({ nick, msg, date, media, modified, own = false, replies }) => {
  10. return (
  11. <li className={own ? "msg-user" : "msg-someone"} onContextMenu={(e) => handler(e)}>
  12. {media && media.length && <div>
  13. <span>Прикрепленные файлы</span>
  14. {media.map(file => <a href={"/" + file.url}>{file}</a>)}
  15. </div>}
  16. <span className="msg-nick">{nick}</span>
  17. <span className="msg-text">{msg}</span>
  18. <ReactTimeAgo className="msg-date" date={+date} locale="ru" timeStyle="round" />
  19. {modified && <span className="mutated-msg">Сообщение изменено</span>}
  20. {replies && replies.map(repMSG => <Message nick={repMSG.login} msg={repMSG.text} date={repMSG.createdAt} />)}
  21. {media && media.length && media.map(file => {
  22. file.type.includes("audio") &&
  23. <audio controls>
  24. <source src={"/" + file.url} type={file.type} />
  25. </audio>
  26. file.type.includes("image") &&
  27. <img src={"/" + file.url} alt={file.originalFileName} />
  28. file.type.includes("video") &&
  29. <video>
  30. <source src={"/" + file.url} type={file.type} />
  31. </video>
  32. })}
  33. </li>
  34. )
  35. }