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.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // @flow
  2. import React from 'react';
  3. import { FlatList } from 'react-native';
  4. import AbstractMessageContainer, { type Props }
  5. from '../AbstractMessageContainer';
  6. import ChatMessage from './ChatMessage';
  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<Props> {
  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._renderMessage = this._renderMessage.bind(this);
  21. }
  22. /**
  23. * Implements {@code Component#render}.
  24. *
  25. * @inheritdoc
  26. */
  27. render() {
  28. return (
  29. <FlatList
  30. data = { this.props.messages }
  31. inverted = { true }
  32. keyExtractor = { this._keyExtractor }
  33. renderItem = { this._renderMessage }
  34. style = { styles.messageContainer } />
  35. );
  36. }
  37. _keyExtractor: Object => string
  38. /**
  39. * Key extractor for the flatlist.
  40. *
  41. * @param {Object} item - The flatlist item that we need the key to be
  42. * generated for.
  43. * @param {number} index - The index of the element.
  44. * @returns {string}
  45. */
  46. _keyExtractor(item, index) {
  47. return `key_${index}`;
  48. }
  49. _renderMessage: Object => React$Element<*>;
  50. /**
  51. * Renders a single chat message.
  52. *
  53. * @param {Object} message - The chat message to render.
  54. * @returns {React$Element<*>}
  55. */
  56. _renderMessage({ item: message }) {
  57. return (
  58. <ChatMessage message = { message } />
  59. );
  60. }
  61. }