You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ChatMessageGroup.tsx 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import clsx from 'clsx';
  2. import React from 'react';
  3. import { makeStyles } from 'tss-react/mui';
  4. import Avatar from '../../../base/avatar/components/Avatar';
  5. import { IMessage } from '../../reducer';
  6. import ChatMessage from './ChatMessage';
  7. interface IProps {
  8. /**
  9. * Additional CSS classes to apply to the root element.
  10. */
  11. className: string;
  12. /**
  13. * The messages to display as a group.
  14. */
  15. messages: Array<IMessage>;
  16. }
  17. const useStyles = makeStyles()(theme => {
  18. return {
  19. messageGroup: {
  20. display: 'flex',
  21. flexDirection: 'column',
  22. maxWidth: '100%'
  23. },
  24. groupContainer: {
  25. display: 'flex',
  26. '&.local': {
  27. justifyContent: 'flex-end',
  28. '& .avatar': {
  29. display: 'none'
  30. }
  31. }
  32. },
  33. avatar: {
  34. margin: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(3)} 0`,
  35. position: 'sticky',
  36. flexShrink: 0,
  37. top: 0
  38. }
  39. };
  40. });
  41. const ChatMessageGroup = ({ className = '', messages }: IProps) => {
  42. const { classes } = useStyles();
  43. const messagesLength = messages.length;
  44. if (!messagesLength) {
  45. return null;
  46. }
  47. return (
  48. <div className = { clsx(classes.groupContainer, className) }>
  49. <Avatar
  50. className = { clsx(classes.avatar, 'avatar') }
  51. participantId = { messages[0].id }
  52. size = { 32 } />
  53. <div className = { `${classes.messageGroup} chat-message-group ${className}` }>
  54. {messages.map((message, i) => (
  55. <ChatMessage
  56. key = { i }
  57. message = { message }
  58. showDisplayName = { i === 0 }
  59. showTimestamp = { i === messages.length - 1 }
  60. type = { className } />
  61. ))}
  62. </div>
  63. </div>
  64. );
  65. };
  66. export default ChatMessageGroup;