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.

MessageContainer.js 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // @flow
  2. import React from 'react';
  3. import { FlatList } from 'react-native';
  4. import AbstractMessageContainer, { type Props }
  5. from '../AbstractMessageContainer';
  6. import ChatMessageGroup from './ChatMessageGroup';
  7. import styles from './styles';
  8. /**
  9. * Implements a container to render all the chat messages in a conference.
  10. */
  11. export default class MessageContainer extends AbstractMessageContainer {
  12. /**
  13. * Instantiates a new instance of the component.
  14. *
  15. * @inheritdoc
  16. */
  17. constructor(props: Props) {
  18. super(props);
  19. this._keyExtractor = this._keyExtractor.bind(this);
  20. this._renderMessageGroup = this._renderMessageGroup.bind(this);
  21. }
  22. /**
  23. * Implements {@code Component#render}.
  24. *
  25. * @inheritdoc
  26. */
  27. render() {
  28. return (
  29. <FlatList
  30. data = { this._getMessagesGroupedBySender() }
  31. inverted = { true }
  32. keyExtractor = { this._keyExtractor }
  33. keyboardShouldPersistTaps = 'always'
  34. renderItem = { this._renderMessageGroup }
  35. style = { styles.messageContainer } />
  36. );
  37. }
  38. _getMessagesGroupedBySender: () => Array<Array<Object>>;
  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. _renderMessageGroup: Object => React$Element<*>;
  52. /**
  53. * Renders a single chat message.
  54. *
  55. * @param {Array<Object>} messages - The chat message to render.
  56. * @returns {React$Element<*>}
  57. */
  58. _renderMessageGroup({ item: messages }) {
  59. return <ChatMessageGroup messages = { messages } />;
  60. }
  61. }