您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ChatMessage.js 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // @flow
  2. import React from 'react';
  3. import { toArray } from 'react-emoji-render';
  4. import { translate } from '../../../base/i18n';
  5. import { Linkify } from '../../../base/react';
  6. import AbstractChatMessage, {
  7. type Props
  8. } from '../AbstractChatMessage';
  9. /**
  10. * Renders a single chat message.
  11. */
  12. class ChatMessage extends AbstractChatMessage<Props> {
  13. /**
  14. * Implements React's {@link Component#render()}.
  15. *
  16. * @inheritdoc
  17. * @returns {ReactElement}
  18. */
  19. render() {
  20. const { message } = this.props;
  21. const messageToDisplay = message.messageType === 'error'
  22. ? this.props.t('chat.error', {
  23. error: message.error,
  24. originalText: message.message
  25. })
  26. : message.message;
  27. const processedMessage = [];
  28. // content is an array of text and emoji components
  29. const content = toArray(messageToDisplay, { className: 'smiley' });
  30. content.forEach(i => {
  31. if (typeof i === 'string') {
  32. processedMessage.push(<Linkify key = { i }>{ i }</Linkify>);
  33. } else {
  34. processedMessage.push(i);
  35. }
  36. });
  37. return (
  38. <div className = 'chatmessage-wrapper'>
  39. <div className = 'chatmessage'>
  40. { this.props.showDisplayName && this._renderDisplayName() }
  41. <div className = 'usermessage'>
  42. { processedMessage }
  43. </div>
  44. </div>
  45. { this.props.showTimestamp && this._renderTimestamp() }
  46. </div>
  47. );
  48. }
  49. _getFormattedTimestamp: () => string;
  50. /**
  51. * Renders the display name of the sender.
  52. *
  53. * @returns {React$Element<*>}
  54. */
  55. _renderDisplayName() {
  56. return (
  57. <div className = 'display-name'>
  58. { this.props.message.displayName }
  59. </div>
  60. );
  61. }
  62. /**
  63. * Renders the time at which the message was sent.
  64. *
  65. * @returns {React$Element<*>}
  66. */
  67. _renderTimestamp() {
  68. return (
  69. <div className = 'timestamp'>
  70. { this._getFormattedTimestamp() }
  71. </div>
  72. );
  73. }
  74. }
  75. export default translate(ChatMessage);