Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ChatMessageGroup.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { Component, ReactElement } from 'react';
  2. import { FlatList } from 'react-native';
  3. import { MESSAGE_TYPE_LOCAL, MESSAGE_TYPE_REMOTE } from '../../constants';
  4. import ChatMessage from './ChatMessage';
  5. type Props = {
  6. /**
  7. * The messages array to render.
  8. */
  9. messages: Array<Object>
  10. }
  11. /**
  12. * Implements a container to render all the chat messages in a conference.
  13. */
  14. export default class ChatMessageGroup extends Component<Props> {
  15. /**
  16. * Instantiates a new instance of the component.
  17. *
  18. * @inheritdoc
  19. */
  20. constructor(props: Props) {
  21. super(props);
  22. this._keyExtractor = this._keyExtractor.bind(this);
  23. this._renderMessage = this._renderMessage.bind(this);
  24. }
  25. /**
  26. * Implements {@code Component#render}.
  27. *
  28. * @inheritdoc
  29. */
  30. render() {
  31. return (
  32. <FlatList
  33. data = { this.props.messages }
  34. inverted = { true }
  35. keyExtractor = { this._keyExtractor }
  36. renderItem = { this._renderMessage } />
  37. );
  38. }
  39. _keyExtractor: Object => string;
  40. /**
  41. * Key extractor for the flatlist.
  42. *
  43. * @param {Object} item - The flatlist item that we need the key to be
  44. * generated for.
  45. * @param {number} index - The index of the element.
  46. * @returns {string}
  47. */
  48. _keyExtractor(item, index) {
  49. return `key_${index}`;
  50. }
  51. _renderMessage: Object => ReactElement;
  52. /**
  53. * Renders a single chat message.
  54. *
  55. * @param {Object} message - The chat message to render.
  56. * @returns {React$Element<*>}
  57. */
  58. _renderMessage({ index, item: message }) {
  59. return (
  60. <ChatMessage
  61. message = { message }
  62. showAvatar = {
  63. this.props.messages[0].messageType !== MESSAGE_TYPE_LOCAL
  64. && index === this.props.messages.length - 1
  65. }
  66. showDisplayName = {
  67. this.props.messages[0].messageType === MESSAGE_TYPE_REMOTE
  68. && index === this.props.messages.length - 1
  69. }
  70. showTimestamp = { index === 0 } />
  71. );
  72. }
  73. }