message.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import ColorManager from '../../../ide/colors/ColorManager'
  4. import MessageContent from './message-content'
  5. function Message({ message, userId }) {
  6. function hue(user) {
  7. return user ? ColorManager.getHueForUserId(user.id) : 0
  8. }
  9. function getMessageStyle(user) {
  10. return {
  11. borderColor: `hsl(${hue(user)}, 85%, 40%)`,
  12. backgroundColor: `hsl(${hue(user)}, 85%, 40%`
  13. }
  14. }
  15. function getArrowStyle(user) {
  16. return {
  17. borderColor: `hsl(${hue(user)}, 85%, 40%)`
  18. }
  19. }
  20. const isMessageFromSelf = message.user ? message.user.id === userId : false
  21. return (
  22. <div className="message-wrapper">
  23. {!isMessageFromSelf && (
  24. <div className="name">
  25. <span>{message.user.first_name || message.user.email}</span>
  26. </div>
  27. )}
  28. <div className="message" style={getMessageStyle(message.user)}>
  29. {!isMessageFromSelf && (
  30. <div className="arrow" style={getArrowStyle(message.user)} />
  31. )}
  32. <div className="message-content">
  33. {message.contents.map((content, index) => (
  34. <MessageContent key={index} content={content} />
  35. ))}
  36. </div>
  37. </div>
  38. </div>
  39. )
  40. }
  41. Message.propTypes = {
  42. message: PropTypes.shape({
  43. contents: PropTypes.arrayOf(PropTypes.string).isRequired,
  44. user: PropTypes.shape({
  45. id: PropTypes.string,
  46. email: PropTypes.string,
  47. first_name: PropTypes.string
  48. })
  49. }),
  50. userId: PropTypes.string.isRequired
  51. }
  52. export default Message