message.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { getHueForUserId } from '@/shared/utils/colors'
  2. import MessageContent from './message-content'
  3. import type { Message as MessageType } from '@/features/chat/context/chat-context'
  4. import { User } from '../../../../../types/user'
  5. interface MessageProps {
  6. message: MessageType
  7. fromSelf: boolean
  8. }
  9. function hue(user?: User) {
  10. return user ? getHueForUserId(user.id) : 0
  11. }
  12. function getMessageStyle(user?: User) {
  13. return {
  14. borderColor: `hsl(${hue(user)}, 85%, 40%)`,
  15. backgroundColor: `hsl(${hue(user)}, 85%, 40%`,
  16. }
  17. }
  18. function getArrowStyle(user?: User) {
  19. return {
  20. borderColor: `hsl(${hue(user)}, 85%, 40%)`,
  21. }
  22. }
  23. function Message({ message, fromSelf }: MessageProps) {
  24. return (
  25. <div className="message-wrapper">
  26. {!fromSelf && (
  27. <div className="name">
  28. <span>{message.user.first_name || message.user.email}</span>
  29. </div>
  30. )}
  31. <div className="message" style={getMessageStyle(message.user)}>
  32. {!fromSelf && (
  33. <div className="arrow" style={getArrowStyle(message.user)} />
  34. )}
  35. <div className="message-content">
  36. {message.contents.map((content, index) => (
  37. <MessageContent key={index} content={content} />
  38. ))}
  39. </div>
  40. </div>
  41. </div>
  42. )
  43. }
  44. export default Message